From ef8c46099b4b15ad9327e21560a31bba18e948e9 Mon Sep 17 00:00:00 2001 From: yuedong Date: Tue, 1 Jun 2021 02:56:46 +0800 Subject: [PATCH] modified fits header etc. --- ObservationSim/Config/ChipOutput.py | 20 +- ObservationSim/Config/Config.py | 6 +- ObservationSim/Config/Header/ImageHeader.py | 17 +- .../__pycache__/ImageHeader.cpython-38.pyc | Bin 8279 -> 7735 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 284 -> 270 bytes .../__pycache__/ChipOutput.cpython-38.pyc | Bin 3945 -> 4371 bytes .../Config/__pycache__/Config.cpython-38.pyc | Bin 3122 -> 2997 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 290 -> 276 bytes ObservationSim/Instrument/Chip/Chip.py | 195 ++++++++++- .../Chip/__pycache__/Chip.cpython-38.pyc | Bin 13921 -> 16226 bytes .../Chip/__pycache__/Effects.cpython-38.pyc | Bin 18011 -> 17997 bytes .../Chip/__pycache__/__init__.cpython-38.pyc | Bin 208 -> 194 bytes .../__pycache__/Filter.cpython-38.pyc | Bin 2834 -> 2820 bytes .../__pycache__/FilterParam.cpython-38.pyc | Bin 2507 -> 2493 bytes .../__pycache__/FocalPlane.cpython-38.pyc | Bin 3574 -> 3560 bytes .../__pycache__/Telescope.cpython-38.pyc | Bin 1373 -> 1359 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 333 -> 319 bytes .../__pycache__/_util.cpython-38.pyc | Bin 574 -> 560 bytes .../__pycache__/SpecDisperser.cpython-38.pyc | Bin 13917 -> 13933 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 282 -> 268 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 290 -> 276 bytes .../__pycache__/Catalog.cpython-38.pyc | Bin 5591 -> 5577 bytes .../__pycache__/Galaxy.cpython-38.pyc | Bin 10811 -> 11095 bytes .../__pycache__/MockObject.cpython-38.pyc | Bin 7535 -> 7735 bytes .../__pycache__/Quasar.cpython-38.pyc | Bin 3133 -> 3119 bytes .../SkybackgroundMap.cpython-38.pyc | Bin 3018 -> 3004 bytes .../__pycache__/Star.cpython-38.pyc | Bin 3854 -> 3840 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 359 -> 345 bytes .../__pycache__/_util.cpython-38.pyc | Bin 16572 -> 17076 bytes ObservationSim/ObservationSim.py | 323 ++++++++++-------- .../__pycache__/PSFConfig.cpython-38.pyc | Bin 4461 -> 4447 bytes .../__pycache__/PSFInterp.cpython-38.pyc | Bin 7101 -> 7087 bytes .../__pycache__/PSFUtil.cpython-38.pyc | Bin 12791 -> 12777 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 211 -> 197 bytes .../FieldDistortion.cpython-38.pyc | Bin 2128 -> 2114 bytes .../PSF/__pycache__/PSFGauss.cpython-38.pyc | Bin 4243 -> 4229 bytes .../PSF/__pycache__/PSFModel.cpython-38.pyc | Bin 1408 -> 1394 bytes .../PSF/__pycache__/__init__.cpython-38.pyc | Bin 303 -> 289 bytes ObservationSim/Pointing.py | 23 +- .../__pycache__/ObservationSim.cpython-38.pyc | Bin 8005 -> 8360 bytes .../__pycache__/Pointing.cpython-38.pyc | Bin 813 -> 1125 bytes .../__pycache__/_util.cpython-38.pyc | Bin 2090 -> 2076 bytes ObservationSim/preprocess.py | 1 - ObservationSim/run.pbs | 8 +- ObservationSim/runExposure.py | 17 +- test/ObservationSim.cfg | 19 +- 46 files changed, 425 insertions(+), 204 deletions(-) diff --git a/ObservationSim/Config/ChipOutput.py b/ObservationSim/Config/ChipOutput.py index c4d2421..d3d8ff5 100755 --- a/ObservationSim/Config/ChipOutput.py +++ b/ObservationSim/Config/ChipOutput.py @@ -1,7 +1,7 @@ import os class ChipOutput(object): - def __init__(self, config, focal_plane, chip, filt, imgKey0="", imgKey1="", imgKey2="", exptime=150., mjdTime="", ra_cen=None, dec_cen=None, pointing_ID='0', subdir="./", prefix=""): + def __init__(self, config, focal_plane, chip, filt, imgKey0="", imgKey1="", imgKey2="", exptime=150., mjdTime="", ra_cen=None, dec_cen=None, pointing_type='MS', pointing_ID='0', subdir="./", prefix=""): self.focal_plane = focal_plane self.chip = chip self.filt = filt @@ -25,20 +25,21 @@ class ChipOutput(object): # hdr1 = "#ID ID_chip filter xImage yImage ra dec z mag flag SNR " hdr1 = "#ID ID_chip filter xImage yImage ra dec z mag flag " - hdr2 = "thetaR bfrac hlr_disk hlr_bulge e1_disk e2_disk e1_bulge e2_bulge e1_total e2_total" - hdr3 = "e1PSF e2PSF e1 e2 g1 g2 e1OBS e2OBS" + hdr2 = "thetaR bfrac hlr_disk hlr_bulge e1_disk e2_disk e1_bulge e2_bulge " + hdr3 = "e1PSF e2PSF e1 e2 g1 g2 e1OBS e2OBS " hdr4 = "sed_type av redden " hdr5 = "star_model teff logg feh\n" # fmt1 = "%10d %4d %5s %10.3f %10.3f %15.6f %15.6f %7.4f %8.4f %2d %9.2f " fmt1 = "%10d %4d %5s %10.3f %10.3f %15.6f %15.6f %7.4f %8.4f %2d " - fmt2 = "%8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f" - fmt3 = "%8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f" + fmt2 = "%8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f " + fmt3 = "%8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f " fmt4 = "%2d %8.4f %8.4f " fmt5 = "%10s %8.4f %8.4f %8.4f\n" self.hdr = hdr1 + hdr2 + hdr3 + hdr4 + hdr5 self.fmt = fmt1 + fmt2 + fmt3 + fmt4 + fmt5 - self.cat = open(os.path.join(self.subdir, self.cat_name), "w") - self.cat.write(self.hdr) + if pointing_type == 'MS': + self.cat = open(os.path.join(self.subdir, self.cat_name), "w") + self.cat.write(self.hdr) def updateHDR(self, hdr): hdrNew = [{"name":"RDNOISE", "value":self.chip.read_noise, "comment":"read noise in e-/pixel"}, @@ -79,15 +80,14 @@ class ChipOutput(object): e1, e2, g1, g2, e1OBS, e2OBS = obj.getObservedEll(g1, g2) if obj.type == 'galaxy': line = self.fmt%(obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.z, obj.getMagFilter(self.filt), obj.param["star"], obj.thetaR, obj.bfrac, obj.hlr_disk, obj.hlr_bulge, - obj.e1_disk, obj.e2_disk, obj.e1_bulge, obj.e2_bulge, obj.e1_total, obj.e2_total, + obj.e1_disk, obj.e2_disk, obj.e1_bulge, obj.e2_bulge, pos_shear.g1, pos_shear.g2, e1, e2, g1, g2, e1OBS, e2OBS, obj.sed_type, obj.param['av'], obj.param['redden'], 'n', 0, 0, 0) elif obj.type == "quasar": line = self.fmt % (obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.z, obj.getMagFilter(self.filt), obj.param["star"], 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, pos_shear.g1, pos_shear.g2, e1, e2, g1, g2, e1OBS, e2OBS, obj.sed_type, obj.param['av'], obj.param['redden'], 'n', 0.0, 0.0, 0.0) else: - line = self.fmt%(obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.z, obj.getMagFilter(self.filt), obj.param["star"], 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + line = self.fmt%(obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.z, obj.getMagFilter(self.filt), obj.param["star"], 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, pos_shear.g1, pos_shear.g2, e1, e2, g1, g2, e1OBS, e2OBS, 0, 0.0, 0.0, obj.param['model_tag'], obj.param['teff'], obj.param['logg'],obj.param['feh']) # line = self.fmt%(obj.id, int(self.chipLabel), self.filt.filter_type, ximg, yimg, obj.ra, obj.dec, obj.z, obj.getMagFilter(self.filt), obj.param["star"], pos_shear.g1, pos_shear.g2, e1, e2, g1, g2, e1OBS, e2OBS) self.cat.write(line) diff --git a/ObservationSim/Config/Config.py b/ObservationSim/Config/Config.py index 02a6279..140f143 100755 --- a/ObservationSim/Config/Config.py +++ b/ObservationSim/Config/Config.py @@ -24,9 +24,9 @@ def ConfigDir(cat_dir=None, work_dir=None, data_dir=None, config_file_path=None) # path_dict["output_cat_dir"] = os.path.join(path_dict["work_dir"], "scat/") # if not os.path.exists(path_dict["output_cat_dir"]): # os.system("mkdir %s"%path_dict["output_cat_dir"]) - path_dict["output_img_dir"] = os.path.join(path_dict["work_dir"], "simg/") - if not os.path.exists(path_dict["output_img_dir"]): - os.system("mkdir %s"%path_dict["output_img_dir"]) + # path_dict["output_img_dir"] = os.path.join(path_dict["work_dir"], "simg/") + # if not os.path.exists(path_dict["output_img_dir"]): + # os.system("mkdir %s"%path_dict["output_img_dir"]) # Data directory if data_dir == None: diff --git a/ObservationSim/Config/Header/ImageHeader.py b/ObservationSim/Config/Header/ImageHeader.py index 8a60d29..420caf0 100644 --- a/ObservationSim/Config/Header/ImageHeader.py +++ b/ObservationSim/Config/Header/ImageHeader.py @@ -233,7 +233,7 @@ def WCS_def(xlen = 9216, ylen = 9232, gapy = 898.0, gapx1 = 534, gapx2 = 1309, r -def generatePrimaryHeader(xlen = 9216, ylen = 9232, pointNum = '1', ra = 60, dec = -40, psize = 0.074, row_num = 1, col_num = 1, date='200930', time_obs='120000', im_type = 'MS'): +def generatePrimaryHeader(xlen = 9216, ylen = 9232, pointNum = '1', ra = 60, dec = -40, psize = 0.074, row_num = 1, col_num = 1, date='200930', time_obs='120000', im_type = 'MS', exptime=150.): # array_size1, array_size2, flux, sigma = int(argv[1]), int(argv[2]), 1000.0, 5.0 @@ -262,12 +262,19 @@ def generatePrimaryHeader(xlen = 9216, ylen = 9232, pointNum = '1', ra = 60, dec h_prim['FILENAME'] = 'MSC_' + im_type + '_' + date + time_obs + '_1' + pointNum.rjust(8,'0') + '_' +CCDID[k-1].rjust(2,'0')+'_raw' h_prim['DATE'] = '20'+date[0:2]+'-' + date[2:4]+'-'+date[4:6] h_prim['TIME'] = time_obs[0:2]+':'+time_obs[2:4]+':'+time_obs[4:6] + h_prim['DATE-OBS'] = '20'+date[0:2]+'-' + date[2:4]+'-'+date[4:6] + h_prim['TIME-OBS'] = time_obs[0:2]+':'+time_obs[2:4]+':'+time_obs[4:6] h_prim['DETECTOR'] = 'CCD'+CCDID[k-1].rjust(2,'0') h_prim['RA_OBJ'] = ra h_prim['DEC_OBJ'] = dec h_prim['OBJECT'] = '1'+ pointNum.rjust(8,'0') h_prim['OBSID'] = '1'+ pointNum.rjust(8,'0') h_prim['TELFOCUS'] = 'f/14' + h_prim['EXPTIME'] = exptime + + # Define file types + file_type = {'MS':'sci', 'CLB':'zero', 'CLD':'dark', 'CLF':'flat', 'CRS':'cosmic_ray', 'CRD':'cosmic_ray'} + h_prim['FILETYPE'] = file_type[im_type] co = coord.SkyCoord(ra, dec, unit='deg') @@ -277,13 +284,14 @@ def generatePrimaryHeader(xlen = 9216, ylen = 9232, pointNum = '1', ra = 60, dec h_prim['RA_NOM'] = ra_hms h_prim['DEC_NOM'] = dec_hms - h_prim['PIXSCAL1'] = str(psize) - h_prim['PIXSCAL2'] = str(psize) + h_prim['PIXSCAL1'] = psize + h_prim['PIXSCAL2'] = psize ttt = h_prim['DATE'] + 'T' + h_prim['TIME'] tstart = Time(ttt) h_prim['EXPSTART'] = round(tstart.mjd, 5) - tend = Time(tstart.cxcsec + h_prim['EXPTIME'], format="cxcsec") + # tend = Time(tstart.cxcsec + h_prim['EXPTIME'], format="cxcsec") + tend = Time(tstart.mjd + h_prim['EXPTIME']/86400., format="mjd") h_prim['EXPEND'] = round(tend.mjd, 5) return h_prim @@ -315,6 +323,7 @@ def generateExtensionHeader(xlen = 9216, ylen = 9232,ra = 60, dec = -40, pa = -2 h_ext['GAIN1'] = gain h_ext['RDNOISE1'] = readout h_ext['CCDCHIP'] = 'ccd' + CCDID[k-1].rjust(2,'0') + h_ext['POS_ANG'] = pa header_wcs = WCS_def(xlen=xlen, ylen=ylen, gapy=898.0, gapx1=534, gapx2=1309, ra=ra, dec=dec, pa=pa, psize=psize, row_num=row_num, col_num=col_num) diff --git a/ObservationSim/Config/Header/__pycache__/ImageHeader.cpython-38.pyc b/ObservationSim/Config/Header/__pycache__/ImageHeader.cpython-38.pyc index 4d6d0d9e0d1031c900efa02ff7aaca5a99966411..5c84dc417479dd9ae4bc38e39da70e0cabcf3e93 100644 GIT binary patch delta 4178 zcmbVPNo*U}8J;)8WkgaESCQH*#jz68i$pPYVkc^1nW7V=5~Y|-<4oF4Xg*4!ERyQu zsJ4U=h`>o#IITPAp=lb}_o8UwLwjqlJ#{&>=)3k%2nf(#a;Puq_m4JOQF|zf`Tq4S z^XAR}z4_~vUr(KVv%5Q>;CJh@pTGN?bBgkJGCF_VFs|Tg{qp|V8((8wUF)rfjR;dX zzUV#N6w9^k?EnUUZj-VIM5Kg(0RAD$#X$4B@mv=l$jpW)9!>*uF= z8d(EeEh_2p`+t5}Pc!K$)#_Cz%>L%1nLS=`{>h$pM%By7C`}^-P;`}rSdSV|btXcO z*40tQLe72dVvt%07lO{8v;lU?`BWQbLyrQUU#O7?1zlj!3L@5g!j?F9SwHv z&IZZBk@g_Az&g84sc}4RQ$5138S`6P>FB-^ek(QTU!h>?GO+ zA)khQijPqh;qB8@L_YRy$L+Ws=%>XzGo@Ie)ou*sLHRj%PuosdJ$7QXcQw2k;pgwF zv{nb6D0#5poxT_!C*O9Tn-yP8to9wYvy$kGe9^m%pKl*FJ_y7R*zF)`_hCX4n0FE~ z1L=jF+>=>IJV)&9=iFV8q$j_fvQl;mTe;urxBFKI_=USFvM%DLQe;Da8ZDk5q+Rj? zZ(q8nZVw=J;2`xfb&G=fB1#!%_D$Q16VtK83v%F@mRLi_7#&^Zz;KWjG&4Rtw zvP2IOAG1+IU!1*BoHg>32U=Eo=8HK~GSg7a$sHYulC?8#Ni{sCDBqU)wb{9RVR}Aq zsM*Y8c7Df$B*QZ^UCKXZFB+cG?0kMpC-eNm)#8>;Hfd7J#y=XBzv*lTun7q(7^iqEA+CuKlqV(r)EK-k#)~eK`XR9ij z(!#Gl`SJsX}0RM3TC>A%6fyQrsd|Y63h@>16(f>U@mkgrMDOJQsdQSqNR;S z&D!#2vg4U0h>PRdC7Nd0EG*3L&XW{()pFBwd#eU5D_Kcgq_K2NuUMMCURs8wD5=k` zNUgrg(YJ4@DZn;{4;lHwOnOkN&6f16m#q~McQV0Lo48Nv0*`I2)~JdYOres`_nP}C zrM@JZbv(u@*kN^}Wl3+P*%aK+i?=p&q=_cAd7av5EA^ISE0WbEYl$zrE>12kweroD zAmTzd&5Z^Z4e05?n#e95{dC$A_X%?K{3LV(NyU zS1YcfSr!(}YFTAr86K;O`5xh_#BvqOh1o2kzp~ieU9C?sP|E-)-mo_0{4v>gm4$Ga z(Af;Tz%uSN1WRXe{2{d{;$ig?yTsJbeHumZS1A@&2XKjdit|*{yv*eFwoW&|7CDY6rLv-0KJT zg1w%gxwsuhtw9u%BUX#-ThQagdWUh?0oaP&j`JWC21f`o1lbMgh3tX!LH43}hd~f~ zU4sfEJW3RaSPVHH$T(GS8~yME@8d~ZrCM%x*#SGqQ}=?~2|L02QS0LzbOU|B)d!}O zHjF{nAg)R9Ay+59N$_D;2j@UP;p!(`eZvI{Vp`!}UO<&E=Ngv8j zDSuu13ez`ci#T1mGD{_{EPizEnX$>YXIlR{ioVrBI{*>mk8(tEM6hFLNHBmmEZ+} zO9Yn*UIe7O#X9NVAczwPf))YQFkulKlrOPC<~Ip$6VPEY-R|p{*

DLri*>%e4kh zxF~wf4IIzO7ig8O4ZP!6?W2VV^~Nfc>s2FIJuEfiTQn3E8}V&|?+|>KfU1)84zHMK zW(0QG(Y#%0bygK;U~njO7VmM3>Ybue`AA#}t08=agm>$Li&Q`2OjW2}gz(95%wH9s zJZcV3v$nep+(-93P2(m3QHD$1J9JnUUkB`T5m1HO2@=q$dWULDT0eHh<`Fuq%HloB z3>}ksQ4zGb;wJH+bCVGDbJI#c#0^m6s z!!Kmu#Nn=!*j8DGR8q+$lq;95a;028WDcoHQWX_%$yGTdzt;nR0GCRf za%O5?zkdC?r>DE$uV24;kVr%&T>rxEJxTwXB>gL82Cq0WH}E(=1z}P_Vlq=|azR0= z*3`OI(Bwd-*F%M{;I*1jj}#(;*K5&wtPtz!#0zmzKT$}CG+9Wp5DR}M6;kXHi?HZt zav{xPEDp&C%d!j`hh&s}g`H++z>TpF**SI|T!vj{7ufsY#@R*o0rV%BvMyz>v?rq# zyJ2(7waseXs@UeHZ84ii5AgxgYF75Oa@BQ^#_n;*ZI-W=ToTtUce5muR`*hn8hCPe zoUehj=B`=Vw76ArZSGJxt5&M6Rdb?I6W4td)om&h*(?1kC|=Df zzFw|1E!U5JY}K~xWzL%%LX8^rHD-K!vYE<^N zY}Ra4=5y=o8^wmbQ!LXfcbfe9{Jp1+&9^P;`g*lKpKCVC)yn*BF{JY=G`;~p*V^-A z;xiUS_tP|Hw0I;#k>hewi7JN7W7LbWO0D_SsuhEInWOI1hsHewEqcVbm%&t|j*Lga zqXwg!mmc5hXr6W;Gx@bFIE5+TbWc7|J)No3(re6%U%u}d+XK0={zS49zdn?EkJq>2!mzfz~j=q&WPAlqA5L!=J-Pf8eyW#7O%d0IU ztyuYSo7As}|>Casxuf?2l8& zyTe=TclsQPoD7I$XfoY#IVwlhq%ta}RXziGi8|Q3bTIu%aFKDP11#wnhP9)B2LOP> zbYOs`1I@$WBh@L5Nfl5}WeQW7`ngh8u2XH&6XiYqu9h~W74lS1dacluVoG!?g-)$C zT{7of-h_?v>aH05|78lubV}@+d1>+TV%EecS$m=e$xmpgWfiTK&99lll=_9?v|bn%NeLEq)Xz2B-QtZQ3l@bX zR^(0hvL!xW0%W6F?YaQ35KH}Kbh*`VT204hCa};UjKnYkqRr+` zz$=rDJ+nK-o=0CUp=%d3|MOhNvF3}d#yUv2?TitiD^l6)fec-9+9Yf@VRUsEa zj!N+$7Zo|mQ!dusglNN(_vKE)g>`!Ied3dXPY6E6G%qeJ4>d$5L2ck7RyK;_2v|lJ2P&~8}-J#%)XkJUdfNop>MOD)15QkEQ>!^ zUdj9kOL)`XDXKXw9mH9ZrCuxe-Z5|Hx&*DX(E0%z`5(1Lh1Snc)?#A=?PY}K-(p+o zydv$Zm zB}a`v_oI%5jY7CvC~EE$8(VchTx!;cDMZUPt5U4F_2TXTzt`ut2jttuJwMgkh>A|N zZ5MZs3-$^jat~1}NcRec$UAna5VLz8M7hBy@F{$f$P|5)T=r$h4+pd42yX?`wUYOB zj3pBJc_Fk}tU?AvUhtJ|JZ#}hkQ#W7MX?HKll>HJI}bsmNKzIzd`3fw%W)+m&q89# z2Kg+48Yly&q!mq`0yo=z%wBmnCAp9(ag{$p+W{7*e|+O`0{D7(8jjB4b;u9@0W0*4 z^5O4K{A1(mfAi)?wKxCy#ee+bqZ0Y7z3T%ov>=6N`WMIHIVRw^2hViU30xooWIFG_ z8S27wl4+e3(>rM|<)t%#RZr@SdU9vXQ#u*IgjP`io;u(%1fUE95{=F@3jy%Lof#N3 z>UbG1O^}w60NddisWS_+PC-6SVC|hEId}#9Okd|TTrb)*x_3qIY6p5>qN1Ey2-^G- z9jH(5{J)i>-GTOlw+vFWSkWukegNf>&RH+oG4X|FMsgMJ43jAUuas^wdH(gQ4 zEoG4z$%}axrZK*q_g&q4-<#T3Iu}{gJI`X*C1xOvBTXPpB26JpV>_8ZI)Zc(=_t|! zwc)+jO-D0guF$*FG;`1ygHBTDoa?4zeVy5^P6j#`**Mxc&n5&vDflVDPYeE(;AaFs z3;w))x zPlUkoIOc~j%|&LH{|sdgeSaV7WevBX5=BZ>5jWB)<%058AxPAlS}2rM&dE^?8$9MKrlo2m2npF;DLJ)Yz&**KeElP?tnaWV&KHYI{L#El1> z(3l?3ICY}N%z(!1i5jN|G|rr;adtq%JgxzNeJ?nG3h)zv($37E5ai-t#kvy?Ek~#o zj^wSCJImy$7PPzTxuP!@55uJKbs~hE1+B=fokBRjys^GgSmsx$V1dXYl^Q_1^&F6} z&n>>a`J2D;RS^9m@clx@>A4IPXpe4Kyka9T&_Lh-2Vi(>yo^4yGt0X;yKf_>4Ss~yxRBWs*-@3I%etah14V4U+iUAY4U&0foM?D1!SNffl zzryQFB7h5qu5mm`JT&mmHN2PnCO}c#Rp3u5sSN;B_zL zg+0TIdNHQIG;mB$c2X2@Ztwy@&sQ4KwkW@7k_53D1o2=lsLdRAq<%~gd+el zfktvbBXy!idO&03M2*n_jj>^k7o%PrfRX6}1{t{@T3vd$vW^`~q>EYOX!-GPLxJBR za+k;|k^ai#k16|IB1MpFY@i}VZ21W= z)7EidtW%86cKMH}!uY`V9Q%Ni#%1`Ue0`HnmVqq|pI^C$)(g?#|3eWTu`pR*-ac+~ zlRcYT?u9)9t6L+hn?oa#0^3r_6FCDLJEefi$uOfioBVC&8bTt`(~+`O<*KL`#b zXQ1wfZ|5J}sXDG7-r=wyx0xODHSE^gNBu9v#4c8CRE9RPg5FxkVWbd4)C|8NM6fBy zbOTP}yl@PIe5Jg@e?tBI6MDP0$+i{*T`Uk^J8nbxty*n-j|}D_^d*Ysz+8In`ar5p zDJJAoN>brJgJxFdG;Nr%EE4_|A|DdDOymj?GQr>!mjZ`DJklJ7M*f5}Eh0~el!#Cr zL9)?-ioZkBCq#t$uqOXqD)>GKmdDY{o{;pY^^j{8Tz6ydl+ao@PDXQTo6NO^CM^dL$MLT2?J`R2j)~pLp34prih#!lA ze{_jDOMx(fx&y0?27O@m$b`6XJ&f!1CT7xWb~Q1R(aw*I{;ga2p<3d delta 42 wcmeBUn#05$%FD~e00al*#V2wvWQ>})R+%q8FSR^Attc@!wLHHld*TH<0OHLJB>(^b diff --git a/ObservationSim/Config/__pycache__/ChipOutput.cpython-38.pyc b/ObservationSim/Config/__pycache__/ChipOutput.cpython-38.pyc index e2d55f303aceaec8fcfffcb91c49315d5cbff2fc..8629f5acd8af472c3d00ab6b178614b1411845fb 100644 GIT binary patch delta 1502 zcma)6O>7%Q6rR~#JNB;E|9_jLiPPYK)x>eq6cwRJRTD%IN>B+su!lO^%=(Y`hw-MQ z)~s@%2TrJExNu7@NL=91D~E~`;>LA_fD1whjvSx|;LX~>32?wq?|U=v&3k?`^UeM= z!!Ji~>$-~Im&ts(_k-~$diz*|*$vSC0)UN7OpqxNolKC>18mA9Ow-?()O;0D^I2J@_yX+4q*yR0CWSie+MJPB!;Sp z$?Va$d#N~+PE;nhv{MY;2#c{ezlE=0oxAwi<0$x&B;qEB?j}jpO_7+JCUG}I5^k0x z-5hA1q+Elf-AR^U$sA%S&@^ZU6jf6!%W^QvgBqZdzBkPxB=eT^5L461IN4V2B+pPQ z37R;SNcLUPp}`RU9Vc*(Ytj}D@;9VSe3O49-Q>SW#Y$n2>f5C1-0#^1>t2D{gxHaF8pmRQeZO zepsdA@c8HQcd;o?>Dvc2FSy_B)S7kvnX)ub^APp)UboqCnw`4ekf;4UePxqg;y){; zl?I_}rUH1)RBCN!#m7}2ulfj4@L&4`(JN5#>C1d6FwgG8$EC=ehFFmhFexA_ASECtKx}{}`IqYD zRY5~K17HTB(;fRAPiZ=K+wW)yixBj}hdp9B_SWX>i+oyZYxCgr*@Yzjq4p~NhJUZU z`I6k40$xqC5DPPf1(?b-hFh0FlSDC)ZvzG*L7+QGZ7z%4$V1#oLj)dx&yEIEy1oVP z;DSKe|6AJ685D*94|gcMLpbHP53RmM>GNU|_E}qXth%WP>Y9q+ zt|tezD@`DflXlslgoQigvqE_^l;t3dt?%7g6qyI4NgZ%N}P z(FHugzlbi+E{T1u3)mGf-ljiVABDxl^|M@=^Pj@2%EO|9pCrwj9an%U*%U- Ap#T5? delta 1079 zcmZ{jTTj$L6vtrg$M^{?Kd9#bP>w zy7ySUehf0JtZ=9M5@aPxm;GuatbheOzlL|TmYK>!rn8c8Sm<+^h_1)E!&7?J* z$yH+=gJ&{}*?bNUW0T*<`!2@7OA@mkC$V;dSnVXS+bI%nr%9sS!Qw2@iC7YZoD@s3 zG-Ms&Rod_HGu6(uE{3W}P-0yoNxn&=@ZE(zFTa)W zs65E8$tUmxe=7I#P1*b*Rk|~}%~G+>zshgYnLufI3#CAtZ`4bbGPU4g`A22M4vc1_ zQuizMvNJtJv;4T4>n_#&v7!RZhdlfQ(HxBbGRGgP1C~?wmYfoGYu-|W-r~>I!}uuw zq#o2I1&gq-wK1Y$SvvqVbYx>Z`WR!Izt*$kX>bCi>{jZ542#k(F(NL|Ezlv56c9b3 zodO9yZ0ybtinIq%)NT?w<1GbB#rJCAwzeO;lI z&*nq+qx*qW9s}j+fT-9b=8MrmK4kZ3)51B&FWLtj(X(wY$C!70$0fvR+^81dR_i1H z;WR`S)^PzV=vRcfgnq@hh;rdikMECX;p;jZ-^-iv;pJhm+JwL*f!~XVnP?A{05Yhh r0U}r*i1deEPNsd}1RCtjoA*QSUlRn8$y$RfE_f&5FGVdeT}1j0&Xn;N diff --git a/ObservationSim/Config/__pycache__/Config.cpython-38.pyc b/ObservationSim/Config/__pycache__/Config.cpython-38.pyc index c53335da667c50ebefe8d059c64a049c4f41d1d8..90677a327f1f5aa30f55233c1c180be2926dd1bf 100644 GIT binary patch delta 523 zcmdlau~nQml$V!_0SG=EU6rtDB5x~W#l*>#^)*Z>4B1RY(@Ge!7#FbCu%s|cGNiCA zWCF6-Z5Z-6YM?B*JUdXH11!&J!+;{n1s3H-6XgMm^4c(fOa$uX69=*Qp{nXZR)T~D zz{&*CGz)=6h0#Psz@nmPqGDiCaWqj0u&5-Os1#UK+J=Fxh9#ImQ)aRUliB9^Oqq;~ zY?C=zv?e>V*s=)%!|IpwCO!6?C~#KghO!N|oV#s}mvaj=Ln z0U@IR5Cb7I5HgA}6$x*aXI;R=4Kk((ObAUr#qP?evRQy5pNUaqasyWyquAuWHa^HWN5QtcRl TDvCjo&cVpR$iu{C#-RWJb3SJ6 delta 606 zcmZ9J!A`g0>}yAt5pG1ITFH zf@@=l#NY4(_!L*Z84M!x(wY0tyK~#5pOKHKcCKj(g7x&Wclp-V9&xWt8!Zo&aA&G1 zT0#t2QkQ`8Wf7+m(=pV=?z@LNK1&|C8#6o4_eEqxc=l7K?s>n^21Zp%_AYbM4 z=`q@3SmQV_h8dmVRL>$71pRD;so;bw#9iSDYH(^!&M+F^=cPG0=HV7ba+& z(?#}CXDE}PI@wCNMf-aFB2cY)H#IK@P0lJh_p)7vBe~-C4@enfnf8QLeIVuUimvAl zB)8#ud7BP|Z7Bpl<@Y$LKn7m-58d<^Wx52t@z@ delta 42 wcmbQjw1|m2l$V!_0SG$23s2-;#~3_umoi^`UTS%KT2W$dYI%N9_Qbp90QX7_<^TWy diff --git a/ObservationSim/Instrument/Chip/Chip.py b/ObservationSim/Instrument/Chip/Chip.py index 9df960b..f3d518f 100755 --- a/ObservationSim/Instrument/Chip/Chip.py +++ b/ObservationSim/Instrument/Chip/Chip.py @@ -5,6 +5,9 @@ import Instrument.Chip.Effects as effects from Instrument.FocalPlane import FocalPlane from astropy.table import Table from numpy.random import Generator, PCG64 +from Config.Header import generatePrimaryHeader, generateExtensionHeader +from astropy.io import fits +from datetime import datetime class Chip(FocalPlane): def __init__(self, chipID, ccdEffCurve_dir, CRdata_dir, normalize_dir=None, sls_dir=None, config=None, treering_func=None): @@ -33,6 +36,10 @@ class Chip(FocalPlane): self.bias_level = float(config["bias_level"]) self.overscan = 1000 self.exptime = 150 # second + # self.dark_exptime = 300 # second + # self.flat_exptime = 150 # second + self.dark_exptime = float(config['dark_exptime']) + self.flat_exptime = float(config['flat_exptime']) # A chip ID must be assigned self.chipID = int(chipID) @@ -297,7 +304,54 @@ class Chip(FocalPlane): if self.chipID == 30: confFile = ['CSST_GI8.conf', 'CSST_GI7.conf'] return confFile - def addEffects(self, config, img, chip_output, filt, exptime=150., pointing_ID=0): + def generateHeader(self, ra_cen, dec_cen, img_rot, im_type, pointing_ID, date_obs, time_obs, exptime=150.): + h_prim = generatePrimaryHeader( + xlen=self.npix_x, + ylen=self.npix_y, + pointNum = str(pointing_ID), + ra=ra_cen, + dec=dec_cen, + psize=self.pix_scale, + row_num=self.rowID, + col_num=self.colID, + date=date_obs, + time_obs=time_obs, + im_type = im_type, + exptime=exptime + ) + h_ext = generateExtensionHeader( + xlen=self.npix_x, + ylen=self.npix_y, + ra=ra_cen, + dec=dec_cen, + pa=img_rot.deg, + gain=self.gain, + readout=self.read_noise, + dark=self.dark_noise, + saturation=90000, + psize=self.pix_scale, + row_num=self.rowID, + col_num=self.colID, + extName='raw') + return h_prim, h_ext + + def outputCal(self, img, ra_cen, dec_cen, img_rot, im_type, pointing_ID, date_obs, time_obs, output_dir, exptime=150.): + h_prim, h_ext = self.generateHeader( + ra_cen=ra_cen, + dec_cen=dec_cen, + img_rot=img_rot, + im_type=im_type, + pointing_ID=pointing_ID, + date_obs=date_obs, + time_obs=time_obs, + exptime=exptime) + hdu1 = fits.PrimaryHDU(header=h_prim) + hdu2 = fits.ImageHDU(img.array, header=h_ext) + hdu1 = fits.HDUList([hdu1, hdu2]) + fname = os.path.join(output_dir, h_prim['FILENAME']+'.fits') + hdu1.writeto(fname, output_verify='ignore', overwrite=True) + + def addEffects(self, config, img, chip_output, filt, ra_cen, dec_cen, img_rot, exptime=150., pointing_ID=0, timestamp_obs=1621915200, pointing_type='MS'): SeedGainNonuni=int(config["seed_gainNonUniform"]) SeedBiasNonuni=int(config["seed_biasNonUniform"]) SeedRnNonuni = int(config["seed_rnNonUniform"]) @@ -356,7 +410,7 @@ class Chip(FocalPlane): img += self.dark_noise*exptime # Add cosmic-rays - if config["cosmic_ray"].lower() == "y": + if config["cosmic_ray"].lower() == "y" and pointing_type=='MS': print(" Adding Cosmic-Ray", flush=True) cr_map = effects.produceCR_Map( xLen=self.npix_x, yLen=self.npix_y, @@ -364,13 +418,28 @@ class Chip(FocalPlane): cr_pixelRatio=0.003, gain=self.gain, attachedSizes=self.attachedSizes, - seed=SeedCosmicRay+pointing_ID*30+self.chipID) + seed=SeedCosmicRay+pointing_ID*30+self.chipID) # seed: obj-imaging:+0; bias:+1; dark:+2; flat:+3; img += cr_map cr_map[cr_map > 65535] = 65535 cr_map[cr_map < 0] = 0 crmap_gsimg = galsim.Image(cr_map, dtype=np.uint16) + del cr_map # crmap_gsimg.write("%s/CosmicRay_%s_1.fits" % (chip_output.subdir, self.chipID)) - crmap_gsimg.write("%s/CosmicRay_%s.fits" % (chip_output.subdir, self.chipID)) + # crmap_gsimg.write("%s/CosmicRay_%s.fits" % (chip_output.subdir, self.chipID)) + datetime_obs = datetime.fromtimestamp(timestamp_obs) + date_obs = datetime_obs.strftime("%y%m%d") + time_obs = datetime_obs.strftime("%H%M%S") + self.outputCal( + img=crmap_gsimg, + ra_cen=ra_cen, + dec_cen=dec_cen, + img_rot=img_rot, + im_type='CRS', + pointing_ID=pointing_ID, + date_obs=date_obs, + time_obs=time_obs, + output_dir=chip_output.subdir, + exptime=150.) del crmap_gsimg # Add Bias level @@ -383,7 +452,7 @@ class Chip(FocalPlane): seed=SeedBiasNonuni+self.chipID) # Bias output - if config["bias_output"].lower() == "y": + if config["bias_output"].lower() == "y" and pointing_type=='CAL': print(" Output N frame Bias files", flush=True) NBias = int(config["NBias"]) for i in range(NBias): @@ -392,7 +461,19 @@ class Chip(FocalPlane): bias_level=float(config["bias_level"]), ncombine=1, read_noise=self.read_noise, gain=1, seed=SeedBiasNonuni+self.chipID) - + if config["cosmic_ray"].lower() == "y": + if config["cray_differ"].lower() == "y": + cr_map = effects.produceCR_Map( + xLen=self.npix_x, yLen=self.npix_y, + exTime=0.01, + cr_pixelRatio=0.003*0.01/self.exptime, + gain=self.gain, + attachedSizes=self.attachedSizes, + seed=SeedCosmicRay+pointing_ID*30+self.chipID+1) + # seed: obj-imaging:+0; bias:+1; dark:+2; flat:+3; + BiasCombImg += cr_map + del cr_map + # Non-Linearity for Bias if config["non_linear"].lower() == "y": print(" Applying Non-Linearity on the Bias image", flush=True) @@ -408,11 +489,26 @@ class Chip(FocalPlane): BiasCombImg.replaceNegative(replace_value=0) BiasCombImg.quantize() BiasCombImg = galsim.ImageUS(BiasCombImg) - BiasCombImg.write("%s/BiasImg_%s_%s_%s.fits" % (chip_output.subdir, BiasTag, self.chipID, i+1)) + # BiasCombImg.write("%s/BiasImg_%s_%s_%s.fits" % (chip_output.subdir, BiasTag, self.chipID, i+1)) + datetime_obs = datetime.fromtimestamp(timestamp_obs) + date_obs = datetime_obs.strftime("%y%m%d") + time_obs = datetime_obs.strftime("%H%M%S") + timestamp_obs += 5 * 60 + self.outputCal( + img=BiasCombImg, + ra_cen=ra_cen, + dec_cen=dec_cen, + img_rot=img_rot, + im_type='CLB', + pointing_ID=pointing_ID, + date_obs=date_obs, + time_obs=time_obs, + output_dir=chip_output.subdir, + exptime=0.0) del BiasCombImg # Export combined (ncombine, Vignetting + PRNU) & single vignetting flat-field file - if config["flat_output"].lower() == "y": + if config["flat_output"].lower() == "y" and pointing_type=='CAL': print(" Output N frame Flat-Field files", flush=True) NFlat = int(config["NFlat"]) if config["add_bias"].lower() == "y": @@ -421,7 +517,7 @@ class Chip(FocalPlane): elif config["add_bias"].lower() == "n": biaslevel = 0 overscan = 0 - darklevel = self.dark_noise*self.exptime + darklevel = self.dark_noise*self.flat_exptime for i in range(NFlat): FlatSingle = flat_img * prnu_img + darklevel FlatCombImg, FlatTag = effects.MakeFlatNcomb( @@ -434,7 +530,17 @@ class Chip(FocalPlane): seed_bias=SeedDefective+self.chipID ) if config["cosmic_ray"].lower() == "y": + if config["cray_differ"].lower() == "y": + cr_map = effects.produceCR_Map( + xLen=self.npix_x, yLen=self.npix_y, + exTime=self.flat_exptime, + cr_pixelRatio=0.003*self.flat_exptime/self.exptime, + gain=self.gain, + attachedSizes=self.attachedSizes, + seed=SeedCosmicRay+pointing_ID*30+self.chipID+3) + # seed: obj-imaging:+0; bias:+1; dark:+2; flat:+3; FlatCombImg += cr_map + del cr_map if config["non_linear"].lower() == "y": print(" Applying Non-Linearity on the Flat image", flush=True) @@ -459,7 +565,23 @@ class Chip(FocalPlane): FlatCombImg.replaceNegative(replace_value=0) FlatCombImg.quantize() FlatCombImg = galsim.ImageUS(FlatCombImg) - FlatCombImg.write("%s/FlatImg_%s_%s_%s.fits" % (chip_output.subdir, FlatTag, self.chipID, i+1)) + # FlatCombImg.write("%s/FlatImg_%s_%s_%s.fits" % (chip_output.subdir, FlatTag, self.chipID, i+1)) + datetime_obs = datetime.fromtimestamp(timestamp_obs) + date_obs = datetime_obs.strftime("%y%m%d") + time_obs = datetime_obs.strftime("%H%M%S") + timestamp_obs += 5 * 60 + self.outputCal( + img=FlatCombImg, + ra_cen=ra_cen, + dec_cen=dec_cen, + img_rot=img_rot, + im_type='CLF', + pointing_ID=pointing_ID, + date_obs=date_obs, + time_obs=time_obs, + output_dir=chip_output.subdir, + exptime=self.flat_exptime) + del FlatCombImg, FlatSingle, prnu_img # flat_img.replaceNegative(replace_value=0) # flat_img.quantize() @@ -467,7 +589,7 @@ class Chip(FocalPlane): del flat_img # Export Dark current images - if config["dark_output"].lower() == "y": + if config["dark_output"].lower() == "y" and pointing_type=='CAL': print(" Output N frame Dark Current files", flush=True) NDark = int(config["NDark"]) if config["add_bias"].lower() == "y": @@ -479,11 +601,39 @@ class Chip(FocalPlane): for i in range(NDark): DarkCombImg, DarkTag = effects.MakeDarkNcomb( self.npix_x, self.npix_y, - overscan=overscan, bias_level=biaslevel, darkpsec=0.02, exptime=150, + overscan=overscan, bias_level=biaslevel, darkpsec=0.02, exptime=self.dark_exptime, ncombine=1, read_noise=self.read_noise, gain=1, seed_bias=SeedBiasNonuni+self.chipID) if config["cosmic_ray"].lower() == "y": + if config["cray_differ"].lower() == "y": + cr_map = effects.produceCR_Map( + xLen=self.npix_x, yLen=self.npix_y, + exTime=self.dark_exptime, + cr_pixelRatio=0.003*self.dark_exptime/self.exptime, + gain=self.gain, + attachedSizes=self.attachedSizes, + seed=SeedCosmicRay+pointing_ID*30+self.chipID+2) + # seed: obj-imaging:+0; bias:+1; dark:+2; flat:+3; DarkCombImg += cr_map + cr_map[cr_map > 65535] = 65535 + cr_map[cr_map < 0] = 0 + crmap_gsimg = galsim.Image(cr_map, dtype=np.uint16) + del cr_map + datetime_obs = datetime.fromtimestamp(timestamp_obs) + date_obs = datetime_obs.strftime("%y%m%d") + time_obs = datetime_obs.strftime("%H%M%S") + self.outputCal( + img=crmap_gsimg, + ra_cen=ra_cen, + dec_cen=dec_cen, + img_rot=img_rot, + im_type='CRD', + pointing_ID=pointing_ID, + date_obs=date_obs, + time_obs=time_obs, + output_dir=chip_output.subdir, + exptime=self.dark_exptime) + del crmap_gsimg # Non-Linearity for Dark if config["non_linear"].lower() == "y": @@ -513,13 +663,24 @@ class Chip(FocalPlane): DarkCombImg.replaceNegative(replace_value=0) DarkCombImg.quantize() DarkCombImg = galsim.ImageUS(DarkCombImg) - DarkCombImg.write("%s/DarkImg_%s_%s_%s.fits" % (chip_output.subdir, DarkTag, self.chipID, i+1)) + # DarkCombImg.write("%s/DarkImg_%s_%s_%s.fits" % (chip_output.subdir, DarkTag, self.chipID, i+1)) + datetime_obs = datetime.fromtimestamp(timestamp_obs) + date_obs = datetime_obs.strftime("%y%m%d") + time_obs = datetime_obs.strftime("%H%M%S") + timestamp_obs += 5 * 60 + self.outputCal( + img=DarkCombImg, + ra_cen=ra_cen, + dec_cen=dec_cen, + img_rot=img_rot, + im_type='CLD', + pointing_ID=pointing_ID, + date_obs=date_obs, + time_obs=time_obs, + output_dir=chip_output.subdir, + exptime=self.dark_exptime) del DarkCombImg - # garbage collection of cosmic-ray array - if config["cosmic_ray"].lower() == "y": - del cr_map - # Apply Nonlinearity on the chip image if config["non_linear"].lower() == "y": print(" Applying Non-Linearity on the chip image", flush=True) diff --git a/ObservationSim/Instrument/Chip/__pycache__/Chip.cpython-38.pyc b/ObservationSim/Instrument/Chip/__pycache__/Chip.cpython-38.pyc index 5ee7f28c7b1505fa140bf6bb0134e74c39a46c24..714df698948c5c51688fad876725832c1f66b762 100644 GIT binary patch delta 8317 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 delta 6036 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 K6>S{-(q93lHno`m diff --git a/ObservationSim/Instrument/Chip/__pycache__/Effects.cpython-38.pyc b/ObservationSim/Instrument/Chip/__pycache__/Effects.cpython-38.pyc index 3ae921f3f4af7e561cb845bcbe93df7de48819bd..44f89fdced2fa9a27886b382325bbac16bb0f113 100644 GIT binary patch delta 59 zcmccJ!+5rbkvo)^mx}=i_V(p&^GlZBkuFmi3) O?`+P*$Tj)9YYG4ukP`&} delta 83 zcmX@x!+5)gkvo)^mx}=idfo(Xbh mYjI{(YDLs!7UwmL9Gf>fn=`R-FfuR{$xi+#C_I_b%?AJ{#~BI$ diff --git a/ObservationSim/Instrument/Chip/__pycache__/__init__.cpython-38.pyc b/ObservationSim/Instrument/Chip/__pycache__/__init__.cpython-38.pyc index 9535fe81ce0854aeecce71312a8625177ed570b1..6202baf53621573af1f61b61635ba36e5ab439d4 100644 GIT binary patch delta 27 hcmcb>c!-fZl$V!_0SNZ?n3M* Gt{ebji4Nlc diff --git a/ObservationSim/Instrument/__pycache__/FilterParam.cpython-38.pyc b/ObservationSim/Instrument/__pycache__/FilterParam.cpython-38.pyc index 1ef710512c2b2dcaf9c3fbf72969f4c74f24b7c9..1ca75d6fbf3f5c70a59905b25f1d3ae636dae5c9 100644 GIT binary patch delta 31 lcmX>tyjPezl$V!_0SNZ=K{G#m5qAZs=0a_dn Ang9R* diff --git a/ObservationSim/Instrument/__pycache__/Telescope.cpython-38.pyc b/ObservationSim/Instrument/__pycache__/Telescope.cpython-38.pyc index 8162f83c83d34fc513055dfe6f09813b070579df..d3af64c8e58419a840b314c4892e91ccafa0c97d 100644 GIT binary patch delta 48 zcmcc1b)JhSl$V!_0SNZ?z(FB42&*(Yvw(?{iMn?c_a0l@K delta 42 wcmdnbbe4%bl$V!_0SN5huukMY&lo=OwlZIQUTS%KT2W$dYI%N9_QZdV004XrO8@`> diff --git a/ObservationSim/Instrument/__pycache__/_util.cpython-38.pyc b/ObservationSim/Instrument/__pycache__/_util.cpython-38.pyc index 2945fc154ecdbc208cde8d2a83c63eab2d58c570..87890f7b3a2c1a8b757004a39b4c354217d17c7c 100644 GIT binary patch delta 31 lcmdnTvVnysl$V!_0SNZ?2*!GVT5EQV{eJvQ1qq0pv5tyqc;B$!xhk)UDA>>W$*j^nqB z9(92Ss!<~*GX4qLCi-M(HPNn#@ukuBp~jb1OJba)(YK}#ee%f{aei}Zy2*a#_xt{4 zc7FSt-`pzSEjOP?CUo0ln>Bs40SWlzC}rezuR(c#ga>p$k%5Qj4;Y{W-yak=gcKDBrL|_uhR~VHKn!C45gLU*p9Te zWChwR`ILs%XM`nAQ-3PZ10&Q!qeNH9tjTt=S60inH(JEO|4_8Av6ymjv|J6 zsdXTAQkvJ~>#I_b6u;D3uu2#&@!PEf7RI5Szn8v`543fXL^R$uN;8wFo{|v8;#{$4 zQ|Lh@#ChfcX>LU~@83g7iT~C9eCIgE5{M}TF1DNgTj8a1GlQuG^lFGc#4^uz>@}C9*%FO*Bq@1@zqo7v$~?x-A`A(Ubo>D3YK!^6 zIaPLnV&DVB2u5kO4#VgjMBoO(a%wfV${Kk$qpWtreT81}suE5eo<-LH*I@u?#+V0H zr{Y2?L^nP?S4P)|DZZ<-uS+F``P`ELo`}%pMEFRRp&u#`*T%_WtuyflUb!b70!{sxu-c|J182RN$PFw)kf6^$~TrR?#ahfGcADv=am_ z+}o45Oy!Tc2qSRofv_qr^PH+MYv5G_RZ%$4uk3%h+r>$=-UC>g#&){=c%xi+&EQAG zPyATlqa?!@`l^$QQm_fA!GNn6R%o071{3fKs;?sI2)vhomkjW-0QOlU$17-IqVOj| j-F9=IG;i{g{k>#^zulj+j$`O7|F-`anO{FJNwWU{_jpgW delta 1352 zcmZ9LU2GIp6vyY@`Pl8pF1rn~RMxZ&;&x)QrKQ^j8PrQDy2QjcLLxEo!AI*ocL_0UGQU0df9^eV z=A3gM7Jn~>-w1_T74h2>+Bf^dYd6BDDJig3x;=ctb(T(Kz$!UQWtjKBreElU_|w7f z)Zl$QpeTQ^p7!6!xc^W4IZBG`y-l~yXhPmEp6aZCO>AnbwsuKv=yhW2wsDqrDs~{I z)b+ZsVu~G%DGkF@3gk0dH$EqJ%RH?f^Hfi(t930)S4cs(TkW=0+6dGG1*2}*?RIFD z62(?tSIqFlj5<*DX4IXC!K&A0s+^2*vX7Jf?0)1~<0X*>>}ApDMC1UPyAiJ-##uQ! z8krX6kK(Dy8jyDOZM5IWp+Cp|ijIY4vA24%3~-QBMnS?Nm9FF)0k7@-AY_ zW5m!J7P#x*+q{F493!#G_)%2b5EcSMnJtgbvxQiq^G%eWi1Lom{`7CeI>_ccx(kST z0Zv}#_Ybd8TEhZe%eSZqfP`K$OQJ_@|3^?w4nI! z#>R#jfun3wVoPcbonH#@fCcGl-p%oVs6xK9Sc1z^7UhsDS*t6!eU8l}&XY8In6M0t z3weLC_ln-j(Ed=s)SwIP9t3_hyohQ5uA+U7C6eZDJZOewPvpeGY4rJs#|>#V=`Gac ziyOk4Vds)##-l*LCbyF7>_IZ2zbaf`v8VcvM^@88@DSRJlSlwHTvVM;9EHewxR-6~dc7Tjgu46Yx-OTdjxKD!7G4^-2Z=Q;5I zxx`~Kf6Rqzo>TL@Y*x4a>swM=Jfc(?oCb}h>JwRt0ETVc6v4j{#;3WgRFn}}G%<+4)Fj4rM9ZJQ? d9hOZEl8fwODq&2byuxm!4w4Fs3?Cz1{{eGGO1J<3 diff --git a/ObservationSim/MockObject/SpecDisperser/__pycache__/__init__.cpython-38.pyc b/ObservationSim/MockObject/SpecDisperser/__pycache__/__init__.cpython-38.pyc index 69cfc0e7fb8050291252554d9c59de4f3b3d5199..cd38720add740402e19da900411cfd48b385dfd6 100644 GIT binary patch delta 27 hcmbQm)WgIb%FD~e00jH{awl?6VGN(RKzZUtPXJj#2k-y@ delta 42 wcmeBSn#IH&%FD~e00i5ZMJ94jVN9L4K$$N-FSR^Attc@!wLHHld*WeF0NhOs=Kufz diff --git a/ObservationSim/MockObject/SpecDisperser/disperse_c/__pycache__/__init__.cpython-38.pyc b/ObservationSim/MockObject/SpecDisperser/disperse_c/__pycache__/__init__.cpython-38.pyc index bbbe05f79f8e7a8db2aa23c82e432b729d289fba..def3ba9e2a42b77f17b8285b878c5815b52b8b18 100644 GIT binary patch delta 27 hcmZ3)G=+&fl$V!_0SNZ@^yVE_OC diff --git a/ObservationSim/MockObject/__pycache__/Catalog.cpython-38.pyc b/ObservationSim/MockObject/__pycache__/Catalog.cpython-38.pyc index 7d7ed96c7e60d875cf77bb3bc5bc501ce47c5c6d..10f5c371fa5a6f4fff0530887acb42acd33c3b93 100644 GIT binary patch delta 31 lcmcbveNvk{l$V!_0SNZ>{~`=7%ib1OSk43F!a; delta 46 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 diff --git a/ObservationSim/MockObject/__pycache__/MockObject.cpython-38.pyc b/ObservationSim/MockObject/__pycache__/MockObject.cpython-38.pyc index 0940990a16377bf8178d2c8b9c1e7b4654af8910..581be6e18f28f80061bd082dd220d1837ac7cabd 100644 GIT binary patch delta 2667 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 diff --git a/ObservationSim/MockObject/__pycache__/Star.cpython-38.pyc b/ObservationSim/MockObject/__pycache__/Star.cpython-38.pyc index f44a7bcbebc2298c2ecca9ebde8a6e225b022472..99d9f2ca092f36cee6ce2c64491eafa0f64cbbf1 100644 GIT binary patch delta 31 lcmeB^Ymnm(<>lpK0D^sexf{7vm>69r8!#zvPGnlk0|0LU2WJ2P delta 46 zcmZpW>yzUS<>lpK00N0&&gePuv+`sWMrQzX)Ch3^ delta 43 xcmcb~^qh%1l$V!_0SGu*L?&`SXAGbCS(z_BFSR^Attc@!wLHHld$Jg#GXVLk47~sV diff --git a/ObservationSim/MockObject/__pycache__/_util.cpython-38.pyc b/ObservationSim/MockObject/__pycache__/_util.cpython-38.pyc index cb1a727ba9b7a2fd2a6e713ccfb8fc8263073960..96946b0149b4c2b5b41ca0e93be722f29c2855f5 100644 GIT binary patch delta 727 zcmXX^T~8B16rGve3S>^4ibAK6_9nAtR@ z@TL!>FFwMnulVSLul@p)(Ldn7@NRJ?bMKjR_s+d%X1{;r-%k0!>r5uaX#DDYegE>+ z*}$a8@w25`dj)A^PPjFM2N=WeAi3Xi&l~F2JYcLeNh76W#y-rMSj5fX7`IIUH%k1Yi*T!Q8@?#x6)XCUgpXS z+*+gJ`O~DfDq_w5M?ZO!)-zhc37L?E{9H&5o?{oh!y^G9MUFwsvq%e>)F29scsUpO8%U!60eo zXFW>El%y;Yl-Tx@)QrCso49G8lTo^J;CW@C^m-Gv(kn-HP)_=#I6mBqS8dnxe>2u* z%Ba_T7yd#V{6og-cbu@=Y#cVdL%ZCsG`C(;2Hi`&qRgh_1a@edwY|XoU{mg1)o#Sw zo!!knC5~H49JMT?w^v##aI8dp)E3o<|DY?AiCf6^N-R;0-UGa8`mp`r8r^x2r8pB= zo)&2_$R~J;r+Jq9f4jN$Pkmy$r?WiYy;%RTpz@U<^qZ~YTd`8lZPczn5R1FgLwWBu Q7Wr!TbYsO#4W{X^f1aqkCIA2c delta 226 zcmWN`%Sr-q6vy#7vkYhOlK1gaV?m{0X4%C>Ny~)5+_=%=Yb`_tA!ZqY(pvtHqN{Mx zdqgkc6Likz_vLfe3)y^%+jX2BOK<)1Fc`O&u4iwpW%=!+MhIsvy$EN7iD*TM5}RAS z7i0qIyrH>-Pj7kM(@w(s^Q!=V21?$6vmcx0_x4MQW_0&sIxS!7 ICTKPO0ay+{I{*Lx diff --git a/ObservationSim/ObservationSim.py b/ObservationSim/ObservationSim.py index 2ad9e7c..117e95a 100755 --- a/ObservationSim/ObservationSim.py +++ b/ObservationSim/ObservationSim.py @@ -4,8 +4,8 @@ from Instrument import Telescope, Filter, FilterParam, FocalPlane, Chip from MockObject import Catalog, MockObject, Star, Galaxy, Quasar, calculateSkyMap_split_g from PSF import PSFGauss, PSFInterp, FieldDistortion from _util import makeSubDir, getShearFiled, makeSubDir_PointingList -from astropy.time import Time as asTime from astropy.io import fits +from datetime import datetime import numpy as np import mpi4py.MPI as MPI import galsim @@ -47,7 +47,7 @@ class Observation(object): self.g1_field, self.g2_field, self.nshear = getShearFiled(config=self.config) - def runOneChip(self, chip, filt, chip_output, wcs_fp=None, psf_model=None, pointing_ID=0, ra_cen=None, dec_cen=None, img_rot=None, exptime=150., input_cat_name=None, shear_cat_file=None, cat_dir=None, sed_dir=None): + def runOneChip(self, chip, filt, chip_output, wcs_fp=None, psf_model=None, pointing_ID=0, ra_cen=None, dec_cen=None, img_rot=None, exptime=150., timestamp_obs=1621915200, pointing_type='MS', input_cat_name=None, shear_cat_file=None, cat_dir=None, sed_dir=None): if (ra_cen is None) or (dec_cen is None): ra_cen = self.config["ra_center"] @@ -80,169 +80,189 @@ class Observation(object): skyfile = os.path.join(self.path_dict["data_dir"], 'skybackground/sky_emiss_hubble_50_50_A.dat') sky_map = calculateSkyMap_split_g(xLen=chip.npix_x, yLen=chip.npix_y, blueLimit=filt.blue_limit, redLimit=filt.red_limit, skyfn=skyfile, conf=chip.sls_conf, pixelSize=chip.pix_scale, isAlongY=0) - # Load catalogues and templates - self.cat = Catalog(config=self.config, chip=chip, cat_dir=cat_dir, sed_dir=sed_dir, pRa=ra_cen, pDec=dec_cen, rotation=img_rot, template_dir=self.path_dict["template_dir"]) - self.nobj = len(self.cat.objs) - - # Loop over objects - missed_obj = 0 - bright_obj = 0 - dim_obj = 0 - for j in range(self.nobj): - # if j >= 20: - # break - obj = self.cat.objs[j] - - # Load SED - if obj.type == 'star': - normF = chip.normF_star - try: + if pointing_type == 'MS': + # Load catalogues and templates + self.cat = Catalog(config=self.config, chip=chip, cat_dir=cat_dir, sed_dir=sed_dir, pRa=ra_cen, pDec=dec_cen, rotation=img_rot, template_dir=self.path_dict["template_dir"]) + self.nobj = len(self.cat.objs) + + # Loop over objects + missed_obj = 0 + bright_obj = 0 + dim_obj = 0 + for j in range(self.nobj): + # if j >= 20: + # break + obj = self.cat.objs[j] + + # Load SED + if obj.type == 'star': + normF = chip.normF_star + try: + obj.load_SED( + survey_type=chip.survey_type, + normFilter=normF, + target_filt=filt, + sed_lib=self.cat.tempSED_star) + except Exception as e: + print(e) + continue + elif obj.type == 'galaxy': # or obj.type == quasar + normF = chip.normF_galaxy obj.load_SED( + sed_path=sed_dir, survey_type=chip.survey_type, + sed_templates=self.cat.tempSed_gal, normFilter=normF, - target_filt=filt, - sed_lib=self.cat.tempSED_star) - except Exception as e: - print(e) - continue - elif obj.type == 'galaxy': # or obj.type == quasar - normF = chip.normF_galaxy - obj.load_SED( - sed_path=sed_dir, - survey_type=chip.survey_type, - sed_templates=self.cat.tempSed_gal, - normFilter=normF, - target_filt=filt) - elif obj.type == 'quasar': - normF = chip.normF_galaxy - obj.load_SED( - sed_path=sed_dir, - survey_type=chip.survey_type, - sed_templates=self.cat.tempSed_gal, - normFilter=normF, - target_filt=filt) - - # Exclude very bright/dim objects (for now) - if filt.is_too_bright(mag=obj.getMagFilter(filt)): - # print("obj too birght!!", flush=True) - if obj.type != 'galaxy': - bright_obj += 1 + target_filt=filt) + elif obj.type == 'quasar': + normF = chip.normF_galaxy + obj.load_SED( + sed_path=sed_dir, + survey_type=chip.survey_type, + sed_templates=self.cat.tempSed_gal, + normFilter=normF, + target_filt=filt) + + # Exclude very bright/dim objects (for now) + if filt.is_too_bright(mag=obj.getMagFilter(filt)): + # print("obj too birght!!", flush=True) + if obj.type != 'galaxy': + bright_obj += 1 + obj.unload_SED() + continue + if filt.is_too_dim(mag=obj.getMagFilter(filt)): + # print("obj too dim!!", flush=True) + dim_obj += 1 obj.unload_SED() + # print(obj.getMagFilter(filt)) continue - if filt.is_too_dim(mag=obj.getMagFilter(filt)): - # print("obj too dim!!", flush=True) - dim_obj += 1 - obj.unload_SED() - # print(obj.getMagFilter(filt)) - continue - if self.config["shear_method"] == "constant": - if obj.type == 'star': - g1, g2 = 0, 0 - else: - g1, g2 = self.g1_field, self.g2_field - elif self.config["shear_method"] == "extra": - # TODO: every object with individual shear from input catalog(s) - g1, g2 = self.g1_field[j], self.g2_field[j] - - pos_img, offset, local_wcs = obj.getPosImg_Offset_WCS(img=chip.img, fdmodel=self.fd_model, chip=chip, verbose=False) - if pos_img.x == -1 or pos_img.y == -1: - # Exclude object which is outside the chip area (after field distortion) - # print("obj missed!!") - missed_obj += 1 - obj.unload_SED() - continue + if self.config["shear_method"] == "constant": + if obj.type == 'star': + g1, g2 = 0, 0 + else: + g1, g2 = self.g1_field, self.g2_field + elif self.config["shear_method"] == "extra": + # TODO: every object with individual shear from input catalog(s) + g1, g2 = self.g1_field[j], self.g2_field[j] + + pos_img, offset, local_wcs = obj.getPosImg_Offset_WCS(img=chip.img, fdmodel=self.fd_model, chip=chip, verbose=False) + if pos_img.x == -1 or pos_img.y == -1: + # Exclude object which is outside the chip area (after field distortion) + # print("obj missed!!") + missed_obj += 1 + obj.unload_SED() + continue - # Draw object & update output catalog - try: - if chip.survey_type == "photometric": - isUpdated, pos_shear = obj.drawObj_multiband( - tel=self.tel, - pos_img=pos_img, - psf_model=psf_model, - bandpass_list=filt.bandpass_sub_list, - filt=filt, - chip=chip, - g1=g1, - g2=g2, - exptime=exptime) - elif chip.survey_type == "spectroscopic": - isUpdated, pos_shear = obj.drawObj_slitless( - tel=self.tel, - pos_img=pos_img, - psf_model=psf_model, - bandpass_list=filt.bandpass_sub_list, - filt=filt, - chip=chip, - g1=g1, - g2=g2, - exptime=exptime, - normFilter=normF) - if isUpdated: - # TODO: add up stats - chip_output.cat_add_obj(obj, pos_img, pos_shear, g1, g2) + # Draw object & update output catalog + try: + if chip.survey_type == "photometric": + isUpdated, pos_shear = obj.drawObj_multiband( + tel=self.tel, + pos_img=pos_img, + psf_model=psf_model, + bandpass_list=filt.bandpass_sub_list, + filt=filt, + chip=chip, + g1=g1, + g2=g2, + exptime=exptime) + elif chip.survey_type == "spectroscopic": + isUpdated, pos_shear = obj.drawObj_slitless( + tel=self.tel, + pos_img=pos_img, + psf_model=psf_model, + bandpass_list=filt.bandpass_sub_list, + filt=filt, + chip=chip, + g1=g1, + g2=g2, + exptime=exptime, + normFilter=normF) + if isUpdated: + # TODO: add up stats + chip_output.cat_add_obj(obj, pos_img, pos_shear, g1, g2) + pass + else: + # print("object omitted", flush=True) + continue + except Exception as e: + print(e) pass - else: - # print("object omitted", flush=True) - continue - except Exception as e: - print(e) - pass - # Unload SED: - obj.unload_SED() - del obj + # Unload SED: + obj.unload_SED() + del obj - del psf_model - del self.cat + del psf_model + del self.cat print("check running:1: pointing-{:} chip-{:} pid-{:} memory-{:6.2}GB".format(pointing_ID, chip.chipID, os.getpid(), (psutil.Process(os.getpid()).memory_info().rss / 1024 / 1024 / 1024) ), flush=True) # Detector Effects # =========================================================== chip.img = chip.addNoise(config=self.config, tel=self.tel, filt=filt, img=chip.img, sky_map=sky_map) - chip.img = chip.addEffects(config=self.config, img=chip.img, chip_output=chip_output, filt=filt, pointing_ID=pointing_ID) + # chip.img = chip.addEffects(config=self.config, img=chip.img, chip_output=chip_output, filt=filt, pointing_ID=pointing_ID) + + # whether to output zero, dark, flat calibration images. + chip.img = chip.addEffects( + config=self.config, + img=chip.img, + chip_output=chip_output, + filt=filt, + ra_cen=ra_cen, + dec_cen=dec_cen, + img_rot=img_rot, + pointing_ID=pointing_ID, + timestamp_obs=timestamp_obs, + pointing_type=pointing_type) - h_prim = generatePrimaryHeader( - xlen=chip.npix_x, - ylen=chip.npix_y, - pointNum = str(pointing_ID), - ra=ra_cen, - dec=dec_cen, - psize=chip.pix_scale, - row_num=chip.rowID, - col_num=chip.colID, - date=self.config["date_obs"], - time_obs=self.config["time_obs"], - im_type = 'MS') - h_ext = generateExtensionHeader( - xlen=chip.npix_x, - ylen=chip.npix_y, - ra=ra_cen, - dec=dec_cen, - pa=img_rot.deg, - gain=chip.gain, - readout=chip.read_noise, - dark=chip.dark_noise, - saturation=90000, - psize=chip.pix_scale, - row_num=chip.rowID, - col_num=chip.colID, - extName='SCI') - chip.img = galsim.Image(chip.img.array, dtype=np.uint16) - hdu1 = fits.PrimaryHDU(header=h_prim) - hdu2 = fits.ImageHDU(chip.img.array, header=h_ext) - hdu1 = fits.HDUList([hdu1, hdu2]) - fname = os.path.join(chip_output.subdir, h_prim['FILENAME'] + '.fits') - hdu1.writeto(fname, output_verify='ignore', overwrite=True) + if pointing_type == 'MS': + datetime_obs = datetime.fromtimestamp(timestamp_obs) + date_obs = datetime_obs.strftime("%y%m%d") + time_obs = datetime_obs.strftime("%H%M%S") + h_prim = generatePrimaryHeader( + xlen=chip.npix_x, + ylen=chip.npix_y, + pointNum = str(pointing_ID), + ra=ra_cen, + dec=dec_cen, + psize=chip.pix_scale, + row_num=chip.rowID, + col_num=chip.colID, + # date=self.config["date_obs"], + # time_obs=self.config["time_obs"], + date=date_obs, + time_obs=time_obs, + im_type='MS') + h_ext = generateExtensionHeader( + xlen=chip.npix_x, + ylen=chip.npix_y, + ra=ra_cen, + dec=dec_cen, + pa=img_rot.deg, + gain=chip.gain, + readout=chip.read_noise, + dark=chip.dark_noise, + saturation=90000, + psize=chip.pix_scale, + row_num=chip.rowID, + col_num=chip.colID, + extName='raw') + chip.img = galsim.Image(chip.img.array, dtype=np.uint16) + hdu1 = fits.PrimaryHDU(header=h_prim) + hdu2 = fits.ImageHDU(chip.img.array, header=h_ext) + hdu1 = fits.HDUList([hdu1, hdu2]) + fname = os.path.join(chip_output.subdir, h_prim['FILENAME'] + '.fits') + hdu1.writeto(fname, output_verify='ignore', overwrite=True) + print("# objects that are too bright %d out of %d"%(bright_obj, self.nobj)) + print("# objects that are too dim %d out of %d"%(dim_obj, self.nobj)) + print("# objects that are missed %d out of %d"%(missed_obj, self.nobj)) del chip.img print("check running:2: pointing-{:} chip-{:} pid-{:} memory-{:6.2}GB".format(pointing_ID, chip.chipID, os.getpid(), (psutil.Process(os.getpid()).memory_info().rss / 1024 / 1024 / 1024) ), flush=True) - print("# objects that are too bright %d out of %d"%(bright_obj, self.nobj)) - print("# objects that are too dim %d out of %d"%(dim_obj, self.nobj)) - print("# objects that are missed %d out of %d"%(missed_obj, self.nobj)) - def runExposure(self, ra_cen=None, dec_cen=None, pointing_ID=0, img_rot=None, exptime=150., input_cat_name=None, shear_cat_file=None, oneChip=None): + def runExposure(self, ra_cen=None, dec_cen=None, timestamp_obs=1621915200, pointing_ID=0, pointing_type='MS', img_rot=None, exptime=150., input_cat_name=None, shear_cat_file=None, oneChip=None): if (ra_cen == None) or (dec_cen == None): ra_cen = self.config["ra_center"] @@ -269,6 +289,7 @@ class Observation(object): chip=chip, filt=filt, exptime=exptime, + pointing_type=pointing_type, pointing_ID=pointing_ID, subdir=sub_img_dir, prefix=prefix) @@ -282,11 +303,13 @@ class Observation(object): dec_cen=dec_cen, img_rot=img_rot, exptime=exptime, + timestamp_obs=timestamp_obs, + pointing_type=pointing_type, cat_dir=self.path_dict["cat_dir"], sed_dir=self.path_dict["SED_dir"]) print("finished running chip#%d..."%(chip.chipID), flush=True) - def runExposure_MPI_PointingList(self, ra_cen=None, dec_cen=None, pRange=None, img_rot=None, exptime=150., input_cat_name=None, shear_cat_file=None): + def runExposure_MPI_PointingList(self, ra_cen=None, dec_cen=None, pRange=None, timestamp_obs=[1621915200], pointing_type=['MS'], img_rot=None, exptime=150., input_cat_name=None, shear_cat_file=None): comm = MPI.COMM_WORLD ind_thread = comm.Get_rank() num_thread = comm.Get_size() @@ -302,6 +325,11 @@ class Observation(object): else: pStart = 0 + # TEMP + if len(timestamp_obs) == 1: + timestamp_obs *= len(pRange) + pointing_type *= len(pRange) + for ipoint in range(len(ra_cen)): for ichip in range(nchips_per_fp): i = ipoint*nchips_per_fp + ichip @@ -322,6 +350,7 @@ class Observation(object): chip=chip, filt=filt, exptime=exptime, + pointing_type=pointing_type[ipoint], pointing_ID=pointing_ID, subdir=sub_img_dir, prefix=prefix) @@ -333,7 +362,9 @@ class Observation(object): ra_cen=ra_cen[ipoint], dec_cen=dec_cen[ipoint], img_rot=img_rot, - exptime=exptime, + exptime=exptime, + timestamp_obs=timestamp_obs[ipoint], + pointing_type=pointing_type[ipoint], cat_dir=self.path_dict["cat_dir"], sed_dir=self.path_dict["SED_dir"]) print("finished running chip#%d..."%(chip.chipID), flush=True) \ No newline at end of file diff --git a/ObservationSim/PSF/PSFInterp/__pycache__/PSFConfig.cpython-38.pyc b/ObservationSim/PSF/PSFInterp/__pycache__/PSFConfig.cpython-38.pyc index b980756e5529c00079673e6685c0413509826f3c..8d69d156c3b0d307bddb9ac8cba6311623dedd24 100644 GIT binary patch delta 31 lcmaE>bYF=(l$V!_0SFHCPl$V!_0SH!cyKUq?#=#gp`4WdRUwmF_d3;(?Vs2`Aeo^-3uN)ylj8T)l Gq*DQrM-YMl diff --git a/ObservationSim/PSF/PSFInterp/__pycache__/PSFUtil.cpython-38.pyc b/ObservationSim/PSF/PSFInterp/__pycache__/PSFUtil.cpython-38.pyc index ea47204732df921c95837447a09a2ab3190c63ad..951c9b79a377319435febd7d00e7e311823d093f 100644 GIT binary patch delta 31 lcmeyK{4$w4l$V!_0SHd@Xx&Wgi3DW=o delta 46 zcmaEv{5_dFl$V!_0SJOP-8OR1W?_t+yqrauFFr4|JU*=`F*mh5zbJe2DHeHM06<(0 AlK=n! diff --git a/ObservationSim/PSF/PSFInterp/__pycache__/__init__.cpython-38.pyc b/ObservationSim/PSF/PSFInterp/__pycache__/__init__.cpython-38.pyc index d362c497bcccdf2d4743f3fcc5e95ea70fdfc2b8..33d9ce0eebba8f744921b8afe5426de2e484f9f7 100644 GIT binary patch delta 27 hcmcc2c$ASll$V!_0SHd@|V)U7qraW=F4FF+72c-Z2 delta 42 wcmX@gc$twql$V!_0SE#)-6nEJF-A>HQ|61$OD&I2D@x2wEzd8?p4e#v0NqgxWB>pF diff --git a/ObservationSim/PSF/__pycache__/FieldDistortion.cpython-38.pyc b/ObservationSim/PSF/__pycache__/FieldDistortion.cpython-38.pyc index 8ce0a9056673239a4b488e4f6266caa46218e8a4..7b3541b21799a858d05859591e7451af9418b63c 100644 GIT binary patch delta 31 lcmca0a7chVl$V!_0SHd@ka6y1Ol$V!_0SE#%8EoV}!^jvu`39phUwmF_d3;(?Vs2`Aeo^-3-;C~T05UWV Axc~qF diff --git a/ObservationSim/PSF/__pycache__/PSFGauss.cpython-38.pyc b/ObservationSim/PSF/__pycache__/PSFGauss.cpython-38.pyc index ecbd67c31274875c2709616e6d33f4384d399ae7..6c27b983395a3d279b8df50c0fde4ae9b9d80183 100644 GIT binary patch delta 276 zcmbQN*s91K%FD~e00am6ayN1_Gch_%=4Vpg?7-B`#CU7-8J1~GjK-Uj*|nL3^nr?s zIDv#FQ;`CQZN7N{rwpUK9f&OkBJ4qg6Pzm!V!2Gd&1LOo4P@S8PE0D+nHU2m^D`;)#pk7#$EOt~=BAeC7iDiYV(MmMjM}`9 zWf~Ks(dJNgZ6+Z-pq?U5Afd@rqyS=@O^)FTocx&cw7e~dD+VI$K!hWlD-L2gPd>|K z?PdjJ-eOKnD%RvG5&;P-fCwiLVFn~_F{c(46{&%^svyDvB*vPVmy%jh#0?Sv8}GQ; zk9!HTf;ULO7px-DC@3-I7E@Z1nH5FhlZE)z82u+(@&|HT16BEHGW+=z mc}?z(h71*ktc`<1rh#}{RPA)f8bYVG@dLWkP85|4? delta 47 zcmeyw)xgaY%FD~e00fiz-p6m`(PCr_m~76d%om@RS{|QPl$e`Zo?n!`If_w&1pqR1 B4X^+J diff --git a/ObservationSim/PSF/__pycache__/__init__.cpython-38.pyc b/ObservationSim/PSF/__pycache__/__init__.cpython-38.pyc index afff9b789b503bef7517efb01aa773c7185a82b3..aa42e9e3346429a7b07e8737a26ba8df96761fa9 100644 GIT binary patch delta 28 icmZ3_w2+A>l$V!_0SFHCRn8gQn{4ieT%zt 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 diff --git a/ObservationSim/__pycache__/Pointing.cpython-38.pyc b/ObservationSim/__pycache__/Pointing.cpython-38.pyc index 36450eb7a6f8c4e1c4c4e5414c129bbdba2d90c6..57ecf0ddccba0c3b01b99904dbffed5c19a22a82 100644 GIT binary patch delta 684 zcmYk3J9E=O5XWy%k{^mJ=OH=Rn8ZOz7&GB9G*D$=Ld7I55@>FQ2~Kw75!kYmhyt1v z3Vj&06fzwJla?7i0X0-=nH2sCRICJKxSQR(|8H+^@A0{CQCfReshEP>=DqV5-*h2< zX5#-=Wbu&g_yfFOTRah{^^Jj{3=pWR0vf7F;$WJ$XD*i20-8ObMRFo=glciDK@I{fypwgo z>t(*aLGC4UnYlQ{SqsjIpw@hrW}t-?w6Tf;MO08rWF*&ViHmrAhh?gAiB<&pP1n^5 zEpr(!KXQv!>H?=;$ul?#$;0XULU}=r{%|wr9p*C`KZC;#znH*Te!EqKTRWmXH_85| z(}vXCrY>#_g9E?Es)XH;LVrMSy*s1VdwqXDK9{w43wpPe+}csv#-mODg8y@3aQ>v8 zIg6ctsVVb?2o2C5*427g^ delta 366 zcmZ8cyGp}g6h8l-=F+sOm!!4TMg^xx7PpRqj_ObmYQ#?c3i&$PSp!$GE};Pl%h@Rdbmoxp3o#hn($KXWh~rrk?VJgF z7C96-v>arS&Tu6=2G5*KzdQ2S$ZTUE_j*zHBD~v4znEL;L^$kpX9{JA#L`t2YJ@eyK|n3?%LNZ*vL|J|R;w(e7j!HjgX;Qau!aavjc diff --git a/ObservationSim/__pycache__/_util.cpython-38.pyc b/ObservationSim/__pycache__/_util.cpython-38.pyc index 34a549fef6a08ae80088ececc7b3c74e9a680aac..1f0b66f8877f4d082bdf59a704fd98b443b9579e 100644 GIT binary patch delta 31 lcmZ1_Fh_tpl$V!_0SIpO02^5i A`Tzg` diff --git a/ObservationSim/preprocess.py b/ObservationSim/preprocess.py index be712bd..ee8ebf4 100644 --- a/ObservationSim/preprocess.py +++ b/ObservationSim/preprocess.py @@ -7,7 +7,6 @@ imgDir = os.path.join(work_dir, config["mockImgDir"]) if not os.path.exists(imgDir): os.system("mkdir %s"%imgDir) -# prefix = "MSC_" + config["date_obs"] + "_" + config["time_obs"] + "_" prefix = "MSC_" for pointing_ID in range(len(pRA)): diff --git a/ObservationSim/run.pbs b/ObservationSim/run.pbs index f886da1..4502bc8 100755 --- a/ObservationSim/run.pbs +++ b/ObservationSim/run.pbs @@ -12,11 +12,11 @@ #PBS -q batch #PBS -u fangyuedong -NP=60 +NP=40 date echo $NP -# mpirun -np $NP --oversubscribe -H comput101 python /public/home/fangyuedong/CSST_new_framework/ObservationSim/runExposure.py +# mpirun -np $NP --oversubscribe -H comput101 python /public/home/fangyuedong/CSST/ObservationSim/runExposure.py -python /public/home/fangyuedong/CSST_new_framework/ObservationSim/preprocess.py -mpirun -np $NP python /public/home/fangyuedong/CSST_new_framework/ObservationSim/runExposure.py +python /public/home/fangyuedong/CSST/ObservationSim/preprocess.py +mpirun -np $NP python /public/home/fangyuedong/CSST/ObservationSim/runExposure.py diff --git a/ObservationSim/runExposure.py b/ObservationSim/runExposure.py index d56b538..4f2eeff 100755 --- a/ObservationSim/runExposure.py +++ b/ObservationSim/runExposure.py @@ -9,16 +9,15 @@ gc.enable() ############################################# # Testing run one exposure (NOT using MPI) -ipoint = 2 -pointRa = float('{:8.4f}'.format(pRA[ipoint])) -pointDec = float('{:8.4f}'.format(pDEC[ipoint])) +# ipoint = 2 +# pointRa = float('{:8.4f}'.format(pRA[ipoint])) +# pointDec = float('{:8.4f}'.format(pDEC[ipoint])) -cat_dir = 'point_RA' + str(pointRa) + '_DE' + str(pointDec) + '/' -obs = Observation(input_cat_dir=cat_dir, work_dir=work_dir, data_dir=data_dir) -obs = Observation(work_dir=work_dir, data_dir=data_dir) -obs.runExposure(ra_cen=pointRa, dec_cen=pointDec, pointing_ID=ipoint, oneChip=16) +# obs = Observation(work_dir=work_dir, data_dir=data_dir) +# obs.runExposure(ra_cen=pointRa, dec_cen=pointDec, pointing_ID=ipoint, oneChip=16) ############################################# # Testing run pointing list (using MPI) -# obs = Observation(work_dir=work_dir, data_dir=data_dir) -# obs.runExposure_MPI_PointingList(ra_cen=pRA, dec_cen=pDEC, pRange=pRange) +obs = Observation(work_dir=work_dir, data_dir=data_dir) +# obs.runExposure_MPI_PointingList(ra_cen=pRA, dec_cen=pDEC, pRange=pRange, timestamp_obs=timestamp_obs, pointing_type=pointing_type) +obs.runExposure_MPI_PointingList(ra_cen=pRA, dec_cen=pDEC, pRange=pRange, timestamp_obs=timestamp_obs, pointing_type=pointing_type, exptime=150.) diff --git a/test/ObservationSim.cfg b/test/ObservationSim.cfg index 7865bc1..ea2c2ce 100755 --- a/test/ObservationSim.cfg +++ b/test/ObservationSim.cfg @@ -5,8 +5,8 @@ ################################################## # Observation setting -date_obs 210304 # Observation date [yymmdd] -time_obs 093000 # Observation time [hhmmss] +date_obs 210525 # Observation date [yymmdd] +time_obs 120000 # Observation time [hhmmss] ra_center 60.0 # Telesscope pointing center [degree] (Default) dec_center -40.0 psf_rcont 0.15,0.8 # Radius of the 80% flux concentration (for a Gaussian PSF) @@ -30,15 +30,16 @@ abs_back y # Y: add sky background + sky noise & dark # N: only add sky noise and dark noise add_bias y # Y/N: Whether to add bias-level to image shutter_effect y # Y/N: Whether to apply shutter effect -shutter_output y # Y/N: Whether to export shutter effect 16-bit image (<=65535) +shutter_output n # Y/N: Whether to export shutter effect 16-bit image (<=65535) flat_fielding y # Y/N: Whether to add flat-fielding effect bias_output y # Y/N: Whether to export bias frames dark_output y # Y/N: Whether to export the combined dark current file flat_output y # Y/N: Whether to export the combined flat-field file prnu_effect y # Y/N: Whether to apply PRNU effect -prnu_output y # Y/N: Whether to export the PRNU (pixel-to-pixel flat-fielding) file -non_linear y # Y/N: Whether to apply non-linearity +prnu_output n # Y/N: Whether to export the PRNU (pixel-to-pixel flat-fielding) file +non_linear n # Y/N: Whether to apply non-linearity cosmic_ray y # Y/N: Whether to add cosmic-ray +cray_differ y # Y/N: Different cosmic-ray for calibration files or not cte_trail y # Y/N: Whether to simulate CTE trails saturbloom y # Y/N: Whether to simulate Saturation and Blooming add_badcolumns y # Y/N: Whether to add bad columns @@ -50,9 +51,11 @@ df_strength 2.3 # Sillicon sensor diffusion strength bias_level 500 # e-/pixel gain 1.1 # Gain full_well 90000 # Full well level [e-] -NBias 10 # number of frames to be exported -NDark 10 # number of frames to be exported -NFlat 10 # number of frames to be exported +NBias 1 # Number of frames to be exported +NDark 1 # Number of frames to be exported +NFlat 1 # Number of frames to be exported +dark_exptime 300 # Exposure time for dark current frame +flat_exptime 150 # Exposure time for flat field frame #=========================================================== # Shear method -- GitLab