From c9468014e219ef639db659d02753a3cd1242514f Mon Sep 17 00:00:00 2001 From: weichengliang Date: Tue, 5 Dec 2023 11:35:45 +0800 Subject: [PATCH] add CTI/1*16/prescan/overscan --- ObservationSim/Instrument/Chip/Chip.py | 49 +- ObservationSim/Instrument/Chip/ChipUtils.py | 55 +- .../Chip/__pycache__/Chip.cpython-38.pyc | Bin 0 -> 18517 bytes .../Chip/__pycache__/ChipUtils.cpython-38.pyc | Bin 0 -> 10742 bytes .../Chip/__pycache__/Effects.cpython-38.pyc | Bin 0 -> 19595 bytes .../Chip/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 230 bytes .../Chip/{lib_bf => libBF}/__init__.py | 0 .../libBF/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 211 bytes .../Chip/{lib_bf => libBF}/diffusion_X1.c | 0 .../Instrument/Chip/libBF/libmoduleBF.so | Bin 0 -> 21288 bytes .../Chip/{lib_bf => libBF}/nrutil.c | 0 .../Chip/{lib_bf => libBF}/nrutil.h | 0 .../Instrument/Chip/libCTI/CTI_modeling.py | 95 +++ .../Instrument/Chip/libCTI/Makefile | 13 + .../Instrument/Chip/libCTI/__init__.py | 0 .../__pycache__/CTI_modeling.cpython-38.pyc | Bin 0 -> 3921 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 212 bytes .../Instrument/Chip/libCTI/libmoduleCTI.so | Bin 0 -> 39192 bytes ObservationSim/Instrument/Chip/libCTI/readme | 1 + .../Instrument/Chip/libCTI/src/add_CTI1.c | 313 +++++++ .../Instrument/Chip/libCTI/src/creattraps.c | 52 ++ .../Instrument/Chip/libCTI/src/gammln.c | 18 + .../Instrument/Chip/libCTI/src/gasdev.c | 25 + .../Instrument/Chip/libCTI/src/nrutil.c | 769 ++++++++++++++++++ .../Instrument/Chip/libCTI/src/nrutil.h | 94 +++ .../Instrument/Chip/libCTI/src/poidev.c | 79 ++ .../Instrument/Chip/libCTI/src/ran1.c | 82 ++ .../Instrument/Chip/libCTI/src/ran2.c | 64 ++ .../Instrument/Chip/libCTI/src/sort.c | 69 ++ .../Instrument/data/ccd/chip_definition.json | 254 +++++- config/config_C6_dev.yaml | 23 +- 31 files changed, 1989 insertions(+), 66 deletions(-) create mode 100644 ObservationSim/Instrument/Chip/__pycache__/Chip.cpython-38.pyc create mode 100644 ObservationSim/Instrument/Chip/__pycache__/ChipUtils.cpython-38.pyc create mode 100644 ObservationSim/Instrument/Chip/__pycache__/Effects.cpython-38.pyc create mode 100644 ObservationSim/Instrument/Chip/__pycache__/__init__.cpython-38.pyc rename ObservationSim/Instrument/Chip/{lib_bf => libBF}/__init__.py (100%) create mode 100644 ObservationSim/Instrument/Chip/libBF/__pycache__/__init__.cpython-38.pyc rename ObservationSim/Instrument/Chip/{lib_bf => libBF}/diffusion_X1.c (100%) create mode 100755 ObservationSim/Instrument/Chip/libBF/libmoduleBF.so rename ObservationSim/Instrument/Chip/{lib_bf => libBF}/nrutil.c (100%) rename ObservationSim/Instrument/Chip/{lib_bf => libBF}/nrutil.h (100%) create mode 100644 ObservationSim/Instrument/Chip/libCTI/CTI_modeling.py create mode 100755 ObservationSim/Instrument/Chip/libCTI/Makefile create mode 100644 ObservationSim/Instrument/Chip/libCTI/__init__.py create mode 100644 ObservationSim/Instrument/Chip/libCTI/__pycache__/CTI_modeling.cpython-38.pyc create mode 100644 ObservationSim/Instrument/Chip/libCTI/__pycache__/__init__.cpython-38.pyc create mode 100755 ObservationSim/Instrument/Chip/libCTI/libmoduleCTI.so create mode 100644 ObservationSim/Instrument/Chip/libCTI/readme create mode 100644 ObservationSim/Instrument/Chip/libCTI/src/add_CTI1.c create mode 100644 ObservationSim/Instrument/Chip/libCTI/src/creattraps.c create mode 100644 ObservationSim/Instrument/Chip/libCTI/src/gammln.c create mode 100644 ObservationSim/Instrument/Chip/libCTI/src/gasdev.c create mode 100644 ObservationSim/Instrument/Chip/libCTI/src/nrutil.c create mode 100644 ObservationSim/Instrument/Chip/libCTI/src/nrutil.h create mode 100644 ObservationSim/Instrument/Chip/libCTI/src/poidev.c create mode 100644 ObservationSim/Instrument/Chip/libCTI/src/ran1.c create mode 100644 ObservationSim/Instrument/Chip/libCTI/src/ran2.c create mode 100644 ObservationSim/Instrument/Chip/libCTI/src/sort.c diff --git a/ObservationSim/Instrument/Chip/Chip.py b/ObservationSim/Instrument/Chip/Chip.py index 33914c2..4e143dd 100755 --- a/ObservationSim/Instrument/Chip/Chip.py +++ b/ObservationSim/Instrument/Chip/Chip.py @@ -15,6 +15,8 @@ from ObservationSim.Config.Header import generatePrimaryHeader, generateExtensio from ObservationSim.Instrument._util import rotate_conterclockwise from ObservationSim.Instrument.Chip import ChipUtils as chip_utils +from ObservationSim.Instrument.Chip.libCTI.CTI_modeling import CTI_sim + try: import importlib.resources as pkg_resources except ImportError: @@ -394,15 +396,58 @@ class Chip(FocalPlane): img = effects.SaturBloom(GSImage=img, nsect_x=1, nsect_y=1, fullwell=fullwell) # Apply CTE Effect + ###if config["ins_effects"]["cte_trail"] == True: + ### chip_utils.log_info(msg=" Apply CTE Effect", logger=self.logger) + ### img = effects.CTE_Effect(GSImage=img, threshold=27) + + pre1 = self.prescan_x #27 + over1= self.overscan_x #71 + pre2 = self.prescan_y #0 #4 + over2= self.overscan_y #84 #80 + if config["ins_effects"]["cte_trail"] == True: chip_utils.log_info(msg=" Apply CTE Effect", logger=self.logger) - img = effects.CTE_Effect(GSImage=img, threshold=27) + ###img = effects.CTE_Effect(GSImage=img, threshold=27) + ###CTI_modeling + ### 2*8 -> 1*16 img-layout + img = chip_utils.formatOutput(GSImage=img) + self.nsecy = 1 + self.nsecx = 16 + + img_arr = img.array + ny, nx = img_arr.shape + dx = int(nx/self.nsecx) + dy = int(ny/self.nsecy) + newimg = galsim.Image(nx, int(ny+over2), init_value=0) + for ichannel in range(16): + #nx,ny,noverscan,nsp,nmax = 4608,4616,84,3,10 + noverscan,nsp,nmax = over2,3,10 + beta,w,c = 0.478,84700,0 + t = np.array([0.74,7.7,37],dtype=np.float32) + rho_trap = np.array([0.6,1.6,1.4],dtype=np.float32) + trap_seeds = np.array([0,1000,10000],dtype=np.int32) + ichannel + self.chipID*16 + release_seed = 50 + ichannel + pointing_ID*30 + self.chipID*16 + newimg.array[:, 0+ichannel*dx:dx+ichannel*dx] = CTI_sim(img_arr[:, 0+ichannel*dx:dx+ichannel*dx],dx,dy,noverscan,nsp,nmax,beta,w,c,t,rho_trap,trap_seeds,release_seed) + newimg.wcs = img.wcs + del img + img = newimg + + ### 1*16 -> 2*8 img-layout + img = chip_utils.formatRevert(GSImage=img) + self.nsecy = 2 + self.nsecx = 8 ### prescan & overscan if config["ins_effects"]["add_prescan"] == True: - img = chip_utils.AddPreScan(GSImage=img, pre1=27, pre2=4, over1=71, over2=80) + chip_utils.log_info(msg=" Apply pre/over-scan", logger=self.logger) + if config["ins_effects"]["cte_trail"] == False: + img = chip_utils.AddPreScan(GSImage=img, pre1=pre1, pre2=pre2, over1=over1, over2=over2) + if config["ins_effects"]["cte_trail"] == True: + img = chip_utils.AddPreScan(GSImage=img, pre1=pre1, pre2=pre2, over1=over1, over2=0) + ### 1*16 output if config["ins_effects"]["format_output"] == True: + chip_utils.log_info(msg=" Apply 1*16 format", logger=self.logger) img = chip_utils.formatOutput(GSImage=img) self.nsecy = 1 self.nsecx = 16 diff --git a/ObservationSim/Instrument/Chip/ChipUtils.py b/ObservationSim/Instrument/Chip/ChipUtils.py index 381d310..8eb95f3 100644 --- a/ObservationSim/Instrument/Chip/ChipUtils.py +++ b/ObservationSim/Instrument/Chip/ChipUtils.py @@ -192,11 +192,10 @@ def add_poisson(img, chip, exptime=150., seed=0, sky_level=0., poisson_noise=Non def add_brighter_fatter(img): #Inital dynamic lib try: - with pkg_resources.files('ObservationSim.Instrument.Chip.lib_bf').joinpath("libmoduleBF.so") as lib_path: - print('--1', lib_path) + with pkg_resources.files('ObservationSim.Instrument.Chip.libBF').joinpath("libmoduleBF.so") as lib_path: lib_bf = ctypes.CDLL(lib_path) except AttributeError: - with pkg_resources.path('ObservationSim.Instrument.Chip.lib_bf', "libmoduleBF.so") as lib_path: + with pkg_resources.path('ObservationSim.Instrument.Chip.libBF', "libmoduleBF.so") as lib_path: lib_bf = ctypes.CDLL(lib_path) lib_bf.addEffects.argtypes = [ctypes.c_int, ctypes.c_int, ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_float), ctypes.c_int] @@ -245,27 +244,41 @@ def AddPreScan(GSImage, pre1=27, pre2=4, over1=71, over2=80, nsecy = 2, nsecx=8) imgtemp = np.zeros([int(ny/nsecy+pre2+over2), int(nx/nsecx+pre1+over1)]) if int(chunkidx/4) == 0: - imgtemp[pre2:-over2, pre1:-over1] = img[iy*dy:(iy+1)*dy, ix*dx:(ix+1)*dx] + imgtemp[pre2:pre2+dy, pre1:pre1+dx] = img[iy*dy:(iy+1)*dy, ix*dx:(ix+1)*dx] imgt[chunkidx, :, :] = imgtemp if int(chunkidx/4) == 1: - imgtemp[pre2:-over2, over1:-pre1] = img[iy*dy:(iy+1)*dy, ix*dx:(ix+1)*dx] + imgtemp[pre2:pre2+dy, over1:over1+dx] = img[iy*dy:(iy+1)*dy, ix*dx:(ix+1)*dx] imgt[chunkidx, :, :] = imgtemp #[:, ::-1] if int(chunkidx/4) == 2: - imgtemp[over2:-pre2, over1:-pre1] = img[iy*dy:(iy+1)*dy, ix*dx:(ix+1)*dx] + imgtemp[over2:over2+dy, over1:over1+dx] = img[iy*dy:(iy+1)*dy, ix*dx:(ix+1)*dx] imgt[chunkidx, :, :] = imgtemp #[::-1, ::-1] if int(chunkidx/4) == 3: - imgtemp[over2:-pre2, pre1:-over1] = img[iy*dy:(iy+1)*dy, ix*dx:(ix+1)*dx] + imgtemp[over2:over2+dy, pre1:pre1+dx] = img[iy*dy:(iy+1)*dy, ix*dx:(ix+1)*dx] imgt[chunkidx, :, :] = imgtemp #[::-1, :] - imgtx1 = np.hstack(imgt[:nsecx:, :, :]) - imgtx2 = np.hstack(imgt[:(nsecx-1):-1, :, :]) + imgtx1 = np.hstack(imgt[:nsecx:, :, :]) #hstack chunk(1,2)-[1,2,3,4,5,6,7,8] + imgtx2 = np.hstack(imgt[:(nsecx-1):-1, :, :]) #hstack chunk(4,3)-[16,15,14,13,12,11,,10,9] newimg = galsim.Image(int(nx+(pre1+over1)*nsecx), int(ny+(pre2+over2)*nsecy), init_value=0) - newimg.array[:, :] = np.concatenate([imgtx1, imgtx2]) + newimg.array[:, :] = np.concatenate([imgtx1, imgtx2]) #vstack chunk(1,2) & chunk(4,3) newimg.wcs = GSImage.wcs return newimg +def AddPreScanFO(GSImage, pre1=27, pre2=4, over1=71, over2=80, nsecy = 1, nsecx=16): + img= GSImage.array + ny, nx = img.shape + dx = int(nx/nsecx) + dy = int(ny/nsecy) + + newimg = galsim.Image(int(nx+(pre1+over1)*nsecx), int(ny+(pre2+over2)*nsecy), init_value=0) + for ix in range(nsecx): + newimg.array[pre2:pre2+dy, pre1+ix*(dx+pre1+over1):pre1+dx+ix*(dx+pre1+over1)] = img[0:dy, 0+ix*dx:dx+ix*dx] + + newimg.wcs = GSImage.wcs + return newimg + + def formatOutput(GSImage, nsecy = 2, nsecx=8): img = GSImage.array ny, nx = img.shape @@ -299,3 +312,25 @@ def formatOutput(GSImage, nsecy = 2, nsecx=8): newimg.array[:, :] = np.hstack([imgttx0, imgttx1, imgttx2, imgttx3]) return newimg +def formatRevert(GSImage, nsecy = 1, nsecx=16): + img = GSImage.array + ny, nx = img.shape + dx = int(nx/nsecx) + dy = int(ny/nsecy) + + newimg = galsim.Image(int(dx*8), int(dy*2), init_value=0) + + for ix in range(0,4): + tx = ix + newimg.array[0:dy, 0+tx*dx:dx+tx*dx] = img[:, 0+ix*dx:dx+ix*dx] + for ix in range(4,8): + tx = ix + newimg.array[0:dy, 0+tx*dx:dx+tx*dx] = img[:, 0+ix*dx:dx+ix*dx][:, ::-1] + for ix in range(8,12): + tx = 7-(ix-8) + newimg.array[0+dy:dy+dy, 0+tx*dx:dx+tx*dx] = img[:, 0+ix*dx:dx+ix*dx][::-1, ::-1] + for ix in range(12,16): + tx = 7-(ix-8) + newimg.array[0+dy:dy+dy, 0+tx*dx:dx+tx*dx] = img[:, 0+ix*dx:dx+ix*dx][::-1, :] + + return newimg diff --git a/ObservationSim/Instrument/Chip/__pycache__/Chip.cpython-38.pyc b/ObservationSim/Instrument/Chip/__pycache__/Chip.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..024f6e55eb27718a99d6153eca7714a75a1289f2 GIT binary patch literal 18517 zcmbV!dvF{_df&|KYj*Yl5ClOGgs9=0OOXIUQj|ne0zrU)fP)~4Aa&B5baRXC!D1Kt z0DA@`us2Izjyfxe4NGNTRT9U4fR&Uha$OwPRmHigT;k+%xpGo|B$rCXnYxN&Uve^% z^ChlQoo!hz<@fc>EOsH1%H4v~)7{gLufP6Y-TgIhWipzC-;bL$tMovUzE6qvpNhm4 zJoZNjn8f6YWcY8{kVRTCBH|r2qT(GhV&WaICKO4Qs;Z&NR70sGtD2#Sc%+i5rj2wp zV`M}+TFF+sj4lz6Rl2L)Mz@H^E4!*a#%>W$RC=p>j6EW*R{E-YjlI==qhF+xm3VcZ zu}{P`)EO}Li+HLsSbf5HLY5lc0;U7iCkr#D0i!4@R}LBa>rzd5 zO`4Kenq}USSjO6OKVlqa^1PJGZUF<*Tu%04H}eY>E2ntLDXV7jyi@01?E3iBh4c6r zT`V~^-YUyGmQ$))h$pTsE?NbVtxeVo`O5W5zD5n~Df$gq*LkU$=j$(8d1i5MZ##sXI7*kmi?>N&~3h#uE8$)GT)`fJE zonX6I&s(ygu^ijYdJ#*plWY&`Lo6*?-pl&mQjH9IiVd*+$j!1->Fgk4 z-E4>*WycWP^|ln1j2_^8*o)Gr<_biH;jbH!44w!c`wya$NU!vOzQkQ=GvUS_$g<=nkXD_fE8nLtnv}#f+L0589uI8rpN%teN^sapSWH2J-U4)Qm7la#fAqC)1mjZp%#Lv(Cm7dP8&}0V`XlN7sYY-;m_LPouVVzeFn>QG zK7x6ZHg!RF2VJ7YLv94&VdqHsDA5w@*^rxA(E2eq`#@&9F;5Y`);KA~(MvNz`R{Z$ zyFhzgg4U0>CQsS2DE z<=+k{Y!5i64>LkJQn`oi_2bT|@@b@p+&JsspgA3`Y0jz5Gh&v91uc#+3F2?x+?E0% zw?)#=lh1gO$*K7d552r#Tl`Mmfm)a^Rfnc)w!>GeR?QiL%E=EE3arsvfYdaZwOFc^ zsN7K5uGc)7d)i{jsxXt4Y{yHLYPM{krNVN>@)W+%80ai#-Z?vTCivbs-uW$Pqna<(Ca;@!Mp^}- z+u}61>4`0ZxN-bbfVC?&>B>bfv%pKmCC6OMJ5ZcAz0}H5-KkeChnEV_#43G`(2OwhHV1Yt2(?D_*o-vurP21h{5lDPOBu z6>q<3TaJm|cxhqPv21gZ*Q)}SQqhZ7>ct`&jg)E*-$&CM0RUc%msc?}Nilu3eAV(Y zMav--I9aLyY%jSe-e!q;sUYgCuUKBzM7jA@e#ctBN$Hd=;^y{8YUD=!?s&c8WmcAp zCb#VRDlY)+7#hM$E!Ru6l{_#It*=-$FDhszTB+xmmmLd-agB3WJ5fD z`mi=^FXg#4yaYlXzH5~VOQ7LODPJoNkI&EFG>au?7^LTzHR~>!gTtsv>EVKHJExJc ziUER!cd-2MwoDl&)QVteWu5C7*nT|rR}n~xCdcvDD{D$TqRBmxZp1WMjVN-DoR&|? z-EtQ1Az77sm9#u4t4dZ@=f{;2WQ(f9ovh}1tp zw>i~|l5A-7FO>4OS+VX|l~X#)^JUXoTcJgQmlmYfN^vX%>Z^_^z9kn|D;4vuRjGIy zeK2cvnEak58t~(4{f@=$LcYfP&~q-v-@uE%iNH$-D+Uln#p0i*{EJj3!e65J90k`Y zm~RC)DRvCOm+;tG1QN{%{V6JDsG<8jc3iGr1oG(FfAlD>bnm3UdaeeyJG&0YnxRDCX!KA3*u77zIRA0(rTp4;RUE zzCb}C{Ny87;5CoDU%+EiJqgs@EjM}usGX4R#2}4IVDJbcz@FsDWd)?!O{>!&9YI=W zfKU)-WX{XjD_D5)IwT2XG9N@$Kskh$7c)uFdg=M=*T&7s>DimtZp?e>>o2~1GfctU z4@TAo{xI@>36Cw7WFUqp5yUpGx0O%_u4&zw#v?}X4MYgDfHut(FdEno@qQK+aV$Uh z5f*PMjUfjMJC=YM3uc5_+1rdbk#f|H(3*5ZX+}GY%8M{6V_4Jwd|=v1n^?i3p7OYQ zzA@<}%BmY>+CB*(OjuguZbX_f?zCmC4ZmJo} z+l5kztenLrJ9xJ=wDvrFH>>Ya4-v2>ex?kV2M;wF?lx+)k=y# zr}48W#LrQ1o&usFFG@0mKTGN7D43$m)NH-Jyt*QGHazuezQ$IdWO50gq6NXIWG4t^ zr9z1dedNU)+6wVBXNlKWi%To3j;AgJm3Io1Yv||i*sE~k zm!;dkDW*=H<8NVHH*>PFr&O%fxn)*MwoUdv?4cE?ND{n!FOB`!aae(R z$=2uUj(%RR*;vkz5hhG) zF32I)upqPfEGm2PJcsJG0#<~rO*ZLb%}WZinXE#?w^L~{4P~)n#1<>2y~J0j>rNf% zbrGGxq^5z5-@1D3>nLNBO7=-6;6b6}yJ4vH$cK0B&)&e!sxfO#hm6xn#_AB$dR{M76BqT*jhs4v_DyKyMHJZTqM(}sVL@=ja>`bU zGDxfN+kOVA(k+@ZF~cZ92HMsx%BUbfMv^kf5ER-d7u_PEutj^OTcnk?NYn6T1duAC zKcaSCql~C;*wCTC)*cGPg2whg5rEvHTw(n@LCL!Kv=yN^HM2$QgDo;Nc$H#LQt%Wd zsp}l34lge?HapugGsOB=do^EKwfyB}Oi;WR6R3tUD-2aCMav{w2MhIPRmHg?k}ud?_?>VHS?a)`~xMQ0gUcPzlqJDG9;+BrZtN!%K^LkiMG%J{`URbsLilT$I-5PyZ@33n1 z`u2v{P^*{g5S!TD!K&zDE06fmXU>ZuZ(5 z9I2LS2=Z&bNtg)0&tmt5J-A30D8gUzn)m#hS>%Jmt!Mc-A zpGVjK6_2lml4&d_!oNPO_XqIw%YhXWtdOvu)WL#e3MTN75VC1`0QQ zu=y*LE2NHC*nJDhKf~j%Kb2rj)YSLyA1x59;g7T@!7oGzi7QuO@)KZGu~3H9 z1%{<1Py}O9`X#)huCkZju^=6%v|v~)n!sARRjcHA(PFy2ysj65Vd)Pe;efE_t^gM_ z1Tp#ipHu8%2ng1={|4W^IL<7KrJ9eePVwvYbq@Sm0MCz6&tLgQR9TZ7`^Ra&=HX?9 zDk>0S!XN1|S~d$rk*tM!mzIRsv_L!?h zF6JxY)TgPI&)?Z`3;VuKDPI|{*E#bN%qn8*+ujx{{A+0A(Y%oMmn3l?KpYJF02+w^ zI3p1NCwk}q7L6H+mAXx%co=Q%kPKeBWRK&R8yjaYFO>fpwS5txbVHS^vM#nxRAm4n z;skaf8oLB3wb${v?O!ci>5vu?v_#K%*dh^&D}y*dGECl0Y8KlKm=I--lgR_7e-kgU zrxt9Rd5LhVE+#hMJ^?x?n!uT(ojUk9NH+1fguT)L%=Yj8*~^tXU;Ba=nIE4nP@my% z77+G!|1x_aY56 zAhrj*MMuAM1dQWfnATdeuZG=`W?%3n9env^eAz3$>~*uWjYOq zvP0yi(0syuVzZkahH&47+Ob9KM$+-=y(jJs1`r$xYAW1yQ|u_+Y>>uBVz7YXV4>X@dt=%Ydz>Sgh$WFkvq<&TOl!N6dvy%ul_S8li5F7~lKNa*J z;R54~4l}oL-Alc;ustN~SIjwZKD-eTbE%^p!tR;YIDY8r81u-^F$d+sSwMgHbkN_y z0FJXQI40eLIQAaGX!iJHX6LYbr_}n8(-&Z2A3Kk66D=L8^>^fVv8MwnI~25hq17_s zbuZ@h862}KPQSAcBLl{WitmF+M4pRQ&Uda095hq>VkAC~yz3!2) zJiEj$Z(vt5=;QfTAO8!b2T__FON4>KUI6WcYQ5-@LyifrS82RK z%j2yY*F}wqjv5D0;~Kl>?qQRn7peSYlUxb(CQ;A9=5d6FnkRy`rh>NOoVYr{UTkYC zQa+5frU^4>Pco0N8H7i{f5)0RH&;FmY@cjC1&lp~T1WQ-V@>SQx#VtgM5InT+42dO zN}P002pYM>K7)}AIXO0SU&cD{a$zk$Z~Dy2HLiVlyP0n$NP=L{6Km3cft& zoOW~YAd|kLuuJZ+drHW%Q(^2Y$|9t(d&)iSo^eOqv+gK=EG0iSPf#9Gv{J;T&as}yLez0~Jhz5SZ#&D`z{>4(#S59b$xnhAbH)XZcaVoI8M|o5D(QtSx9whjA)(synOB%U&4~+Vy$-9 zKw(hrNL!!OM$L_q{A&@}< z1K6JxFg%A+KHTI46T)5Eh?Dfe3|?$OPqlsM|JbidMn5YP2hqdI%hAiQS<9C&8_OGj z0`OcWcaxy^5VsmXi5!xtl>i>fNwF$0Lot%iu#ewW`5eVJpJz21Q!VYhz-sX8s|)Q( ztx_8+!V-Ai$+^!H556nE`Ss=t7~Lr9lJpr1=ZCl+n7Y<6KesnjjB~VkC4e#1R!Lap zK1JY2PiXKY??bCs!&aHi96W@*apEsX)7AYn=ae(?2`zRFcEp{H1o|3lKIx9SW0?8T zdt*T#q0~(BCDisupX9R?$LR02Mt`?8dXlB1Em=Amv=d6{B>x&<9dt*-vE!U@4HVfS zv%_zIYz^myqk@#Zy9-Bm$#%A4P4 zzTghHdavYSuA7s<=9D|xqPYo3;y@DbJDgLWLPDpnt{wwWt*9il2 zI@6y*g|i)0I3=iX>JwC$;y)5F5)Y>McPS1kyw}3-y%v6n3a46BI2Ax1%IGxD0`eD8 zVwU|3K;Jm3F zoHrG4-j@O!8I+6J`6TaYxBukc)V;}jdTYfH+Nry^gBrwve@B2b zwz;##dF`|Km5mf6@J#bF0UROMb&0W(77n?ti}&o{y7snd^lj-+;kws5xNb&p-3;{R zm^^M6=9wMb z9F_|yree>Ro*bMqxb8w}?u^*f`ZOdY|v725d`E||J zYqx48a@Ytm$<3=RbC)Q|+sk!{tc5&-d&g?E27gD90e3;16yPuso`ux<_zmIEWn}V< znQ&MYCocBQNh3=c%*r!A$4HCfE7)#=r!W5p*fA0tfY?xk-=f95B=&)Q$1_8vstftT zGEUb19SYKwm5RfEpP~sWR?V+?5eF`;8UL)AynAsz-Z-l37XD5x21qETo3KT|-*gGLq(Zg3bOH(6@ZNQvJ3OfPFMt&*c| z;Go>-)Acdx4%?g}Ux$+?Fjf5B-=W_JqoqH@Awcn?_x|j=FD+ajg@;TM4f{pCG`TyQ z3-FvlH=e>AAUkN?@6F!=pZ(J-je(=~@Vx&GPABL9F3jeL@RKmKLfx*yUx(+{`G3Ly z8oL1#Bh2XI;>+n9`E?wi`Z%RyB7sveVlOfd@2boSuhU78Sy(T?YbM24;Vz6bB8)Sa z=6^((5tV62m5x)yj;e@Y3)h4npO+|AeV^VGrn*LGGp8pEEx;rkQT;BzPfh&~1V974 z3vDM~T`^KCytcX%p9KB&8*{e;dz)P3&lZs4KvYKTtt#nSfw@kH&x=x4-ir(m2H4E1fFmWC2m}^!VWa{^JYUDE~Gx zi;Lp-gHf@Inu{6g^x}(k=Xz<)NKP+KfI|@V)J2{LUx77fBwmsjRJdXKjI_;%09uSy zIGLB2@5-yy>NT7;lkZjIWI%|7II#HXS&?0G*7e}XlO|ploAbquKmDhhfBv1#7eJ1Q zsd=&W4nJr(O^+Djb=J`AJp2n5D)oA`aipzfIuD(vPr^M{Kc-)$BIr|`i2#xR2g5KD zZ6MSaz8LqB#~C&kq!se#-0#bWDL{6)oIEGZ4kil zJm(hN;SjeU4>1b>6N7cjJ8qX5YXXL-m~Ui2NM-x@7`c(43T=a-g7`R}1hE`g)v zS#gj|Vcc4~3GroQ$mxwd=x)$({dRwrdZ5NXog)R{f+L0VO6fJI3NLzfdThRN@Drol z)@9`IL)RnbC@ZHLyM%rsPqB*SAG&dzIrzsyK1`n{n0|yH5Tk@tAwfPJM(V?t8c>vi z(v$G1v~Z|bVP2HnwQ#AD9L59kKKu#5C-4%n z+mpdT#z+wkq%~%!xEO$+5h+y}AJ9XmnAJ+iDzFD|~dqzr~jgq{)0^3wL2w9l}!}oqWs6*i9|?SBYSp z_?L-zga%0md>%A6S%^m0L}I6{1l?VBcnhhjXgptlaOm~&F3G|Bwkk_ndYn_xcv_9{M`0Mo#jP|Fud3b>^R5B zyp&(I1XLt+_&=j@d;@_&Ru)?=SmQU$m+~vzpbtV?2t(p^QH1Ie%gs?;LxW;8eZ}ZE zOC;@oN)rjRZfV3<(eua!VWH$^eYco7YG0UbDN_9bgYy4E+5eM*A5ic<1;0w7%rNibvVAmp}vNzc#NKPBaZ7%)Ut{TQQ|V5k*tO6WJGEUC&R|E`Yj2!Jgw-!aoj(G-n? zzNP_6f)Y3LMI#O@04F>_fdcEjsRiS!_!?p&qea6wM` zeh%I4QjyByn<6X8L6kx}AE(g{(rtf~rh7xm2l0$w7k9xv)|4L9L~CjkVO;J}`jvk4 zm5%hmLt+rIKGAcx2zwIY-6KE~O;dZgjid?h_I^2y(P(I`4|mE2H78+jn3G+BXW}-W!HrA&u*7;B%$CEQHu@(PtHC#a5hn*GuXu^Y75^^D1KL|a z3%T8N<(Tf<;L5RPnpG$@7@nq=Hce>6ivNY{ROJ{2BNXH*7^dJF1(OuKL%}Huo~J-K z`F)3Cze~Y?q~IKcgO>@emKLynG|e_q@(L9ZK8{($$oE^^;ZfzRrKZ$~8dFuZOI5Wl ztzYX;$FzjjtwlMN%^mR#GNlef8e$)JNDotEmnpb_z*+oZT6TJmc_CmMt#Pq&jXL{lbp7Af=c3lqmhgwk1o0WAGvUH z|MmuV6ou;=E(8zx|8omZQj_FW@B7=PDK>_{IJ=|T_GpI)mZ3^%0soiF5dD8Hpa2WI z5Jh3LdAo621sCw~eQ5hGcd``~w^6**v?wIp>W%Fh+qb{PEVWIw&>u9_o_g7*xEFv2 d$tH`Qyzcxz5+5WC(-4EL7_RX`Bq~|u{{g=j>iz%# literal 0 HcmV?d00001 diff --git a/ObservationSim/Instrument/Chip/__pycache__/ChipUtils.cpython-38.pyc b/ObservationSim/Instrument/Chip/__pycache__/ChipUtils.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..54ec3424f546352d2327c7ecf9bb57982c696fe4 GIT binary patch literal 10742 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 c#y(&VTc$l^$L*MH*h%YOW#icA0`qD`q5> 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 literal 0 HcmV?d00001 diff --git a/ObservationSim/Instrument/Chip/lib_bf/nrutil.c b/ObservationSim/Instrument/Chip/libBF/nrutil.c similarity index 100% rename from ObservationSim/Instrument/Chip/lib_bf/nrutil.c rename to ObservationSim/Instrument/Chip/libBF/nrutil.c diff --git a/ObservationSim/Instrument/Chip/lib_bf/nrutil.h b/ObservationSim/Instrument/Chip/libBF/nrutil.h similarity index 100% rename from ObservationSim/Instrument/Chip/lib_bf/nrutil.h rename to ObservationSim/Instrument/Chip/libBF/nrutil.h diff --git a/ObservationSim/Instrument/Chip/libCTI/CTI_modeling.py b/ObservationSim/Instrument/Chip/libCTI/CTI_modeling.py new file mode 100644 index 0000000..eced09e --- /dev/null +++ b/ObservationSim/Instrument/Chip/libCTI/CTI_modeling.py @@ -0,0 +1,95 @@ +from ctypes import CDLL, POINTER, c_int, c_double,c_float,c_long,c_char_p +from numpy.ctypeslib import ndpointer +import numpy.ctypeslib as clb +import numpy as np +from astropy.io import fits +from scipy.stats import randint +from glob import glob +from datetime import datetime +import os + +lib_path = os.path.dirname(os.path.realpath(__file__)) + +#lib_path += "/add_CTI.so" +lib_path += "/libmoduleCTI.so" +lib = CDLL(lib_path) +CTI_simul = lib.__getattr__('CTI_simul') +CTI_simul.argtypes = [POINTER(POINTER(c_int)),c_int,c_int,c_int,c_int,POINTER(c_float),POINTER(c_float),\ + c_float,c_float,c_float,c_int,POINTER(c_int),c_int,POINTER(POINTER(c_int))] + +get_trap_h = lib.__getattr__('save_trap_map') +get_trap_h.argtypes = [POINTER(c_int), c_int, c_int, c_int, c_int, POINTER(c_float), c_float, c_float, c_char_p] + +def get_trap_map(seeds,nx,ny,nmax,rho_trap,beta,c,out_dir): + hsp_result = np.zeros(ny*nx*nmax) + nsp = len(rho_trap) + seeds1 = seeds.astype(np.int32) + seeds_p = np.ctypeslib.as_ctypes(seeds1) + rho_trap1 = rho_trap.astype(np.float32) + rho_trap_p = np.ctypeslib.as_ctypes(rho_trap1) + filename = (out_dir+"/trap.bin").encode('utf-8') + get_trap_h(seeds_p,c_int(int(nsp)),c_int(int(nx)),c_int(int(ny)),\ + c_int(int(nmax)),rho_trap_p,c_float(beta),\ + c_float(c),filename) + +def bin2fits(bin_file,fits_dir,nsp,nx,ny,nmax): + data = np.fromfile(bin_file,dtype=np.float32) + data = data.reshape(nx,nsp,ny,nmax).transpose(1,3,2,0) + for i in range(nsp): + print("transfering trap type "+str(i+1)) + datai = data[i] + ntrap = datai[0,:,:] + for j in range(nmax-1): + h = datai[j+1,:,:] + h[np.where(ntrap6B!?v5s~#@dYS6D7R zDHV-NQ{!xzK;r{E$+T%0+~BNbv{}H~W?;6hz-rrp-F5<}?FMe!3p_?X zX3K9Ef`Zm9=*6Hk(#t^w{dQ}tJsyl}o70+Tp9{`u-EB>_Cxc0?d#$PVR4_FfR}HG7 zx_f>&t>uiEJ!FS0m=kl{zh|IkVs5~Kc`-k{zzgVE5GH=sfDM?iMn6+HXywuo^s{mw zU5~t*V`3p()bkWE&(euUKFjH7uUQaF;UX{b^5;gd%qx5h^$H*76R21DIX;Pcjo0`T zuYS&gi{cVL|C#xPDJS{#GbgwlTnVlQ*Mb_K39j?mXIAh=a3i=WD!c1^j?eQ8O$&OR zFT6H`TiUwFm-zA->xQ-(e1)%S>uv3Ohpz>9#rW_|e({hE--6F=tmB?o7I(yDaYfX` zhIm8Vx3%xi?(t!|_; zw-L6wohEfPb|M+}YAh>sc&`h8Ave*ow_}x{_GHxIu#&0S>TaR-d8CAj+u~rN-io){ zUB1^651&3>Pr6wFb(qBMy;e|3q8B1mGU|oxsMql68%G5|Hwg9*@gzToP{xp@X3DBY zYE_Lx*7uc}+5^@vq{h%v#;y%p5w$aPQvjo1N^NcTpqEGXGW1I7aW-QNeQu&PrV43E z6;&xM5EQkBdZd{rng(iGQRNg6g>(lj9UJHagz#FM2ZcJVV|^>`95{Pw`{vuVN@jL? znR6gyH_5D)=wxn`s8>CaIf&Ms+gYJOtpowe3Q-c~t<2N$N4G0FjV>2iu_;s@q#bD^ z5}AeJ(uGzV&zwXEp5RR{@x03HPCI&;`EsYLM`ZSvP*KJjf!EzrA&+HH+(~+&6v1>D)Gb7&83ZgPv;9D3hXP6~WH zGJf>SzNcL7Di6pqXN&>RHDJt0-PD^i`hMzj2b603*v#d&1#1DL9d6FT6Eke~i>aR$ zY4m@2mbe3i0=skTy&2=|H*tT)z_%25k!a!hU2Xum zrOhu{=5PYy5kmluED}g0hNR}fG*I11wuMC0R|w%N)S@>+Ud2lgSlXVP z1sokrd5a7>+)gBA1PW+$aXMVpZN&)Z6m?fgoQJ5{nFX)l9HJeLs65oe{;v7+T5rWvIH8F^&h*+Y@~~LC7W%s!1k4fUQB_d0gnk(W8U)O(>envB+&= zU<*8s(BTwZ>D$orGd0_%K-qIf>fo{H{B7%?JfBXH(7t4wHA^pBPGCYEg_;|b@cqZ1 zmRYj9pIMD=OTJGov_N@}1hLl{6wDk40!ur)R2nc^+nDB)StcLB)~G-nmo+F9eZ97K z0TFDu(XS|MBJu>*s3o!obYv??>h`~nz>XZog)zHxX-3D#AIL_C%up^q)US_X8fD?*}0e1*l0Je z_gA1#>7AYLuck}s3U+c8&vLqwuF`IP!Jb#~`04U4xJZ5jaYRaEPc^`GhRe731iu>ufF|iR*JfdZf`!H5k`qv3_!ilXR2NTpL)8 z)>h`|{+yeOxcW%&@_O9OGg~QX#AqfeQi&|lK)Q?MFg9^tw0n`-$vk8^x^m%0C!&@% zA?lO`!!Yx4F$%TKqAO%63~?ihl#*en4?*TfvYD@Dmgc70kIrQIDIzL6*+_Z`hMnfp z?@;e534Ka7Nu#48ACp)i@g50En({*uba3)h`CZaJg2+645$#QWWWPuDPe|M)aZ1Bl z%QN!*{J+Bc*jpp{6yg$acZ^1@nN`aNB8zN^nczqI;c{mb|LIyqwqp8azv8>TTbwBZ RuQvRq_0L9Xn#Qxj{sluL+m!$S literal 0 HcmV?d00001 diff --git a/ObservationSim/Instrument/Chip/libCTI/__pycache__/__init__.cpython-38.pyc b/ObservationSim/Instrument/Chip/libCTI/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..875c6baa7e8da652f4e6bb0ea811ec50c30a3c3f GIT binary patch literal 212 zcmYk0Jr2S!424sP0U`Au4B!hOgw&}E3@vliAFHvHq*a_!^$;9{E3t9}n3zad;7RYZ z-;)QQ({v?*URQ&0J|g~=gm4JvML;VGu}+RR;bQ&6dj?jOLr}dzn2;KUw$oJE4zi*s zWk()7vX>So$z(uR95Xb`eiMpOSDtzcr<&1SzIzeQa?9S02Cauo(Eyt2tjs}5vgD=Q S4)cAvGkrU1+{c%m!QunpI6M~s literal 0 HcmV?d00001 diff --git a/ObservationSim/Instrument/Chip/libCTI/libmoduleCTI.so b/ObservationSim/Instrument/Chip/libCTI/libmoduleCTI.so new file mode 100755 index 0000000000000000000000000000000000000000..0421cf067b480f3b4c1967f6afe4cb8fe05a8e8d GIT binary patch literal 39192 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 literal 0 HcmV?d00001 diff --git a/ObservationSim/Instrument/Chip/libCTI/readme b/ObservationSim/Instrument/Chip/libCTI/readme new file mode 100644 index 0000000..8ab1508 --- /dev/null +++ b/ObservationSim/Instrument/Chip/libCTI/readme @@ -0,0 +1 @@ +CTI_lgl_v0.3/ diff --git a/ObservationSim/Instrument/Chip/libCTI/src/add_CTI1.c b/ObservationSim/Instrument/Chip/libCTI/src/add_CTI1.c new file mode 100644 index 0000000..0bfd1c5 --- /dev/null +++ b/ObservationSim/Instrument/Chip/libCTI/src/add_CTI1.c @@ -0,0 +1,313 @@ +#include +#include +#include +#include +#include "nrutil.h" +#include + +float poidev(float x, int *idum); +void creattraps(int *seed,int ntrap,int ny,int nmax,float c,float beta,float **sp); +void addCTI(int *a0,int ny,int noverscan,int nsp,float beta,float w, float c,float *t, float ***ntrap, int *acti, int release_seed); +//int read_fits_2D(const char *argv,float *galaxy,int imagesize); +//int write_fits_2D(const char *argv,float **stars,int *dim); + +void CTI_simul(int **image, int nx, int ny, int noverscan, int nsp, float *rho_trap, float *t, float beta, float w, float c, int nmax, int *trap_seeds, int release_seed,int **imagecti){ + int ntotal; + printf("image parameters: nx=%i ny=%i noverscan=%i\n",nx,ny,noverscan); + printf("input image: image[0][0]=%i image[50][60]=%i image[1000][20]=%i image[20][1000]=%i\n",image[0][0],image[50][60],image[1000][20],image[20][1000]); + printf("rho_trap rho1=%f rho2=%f rho3=%f\n",rho_trap[0],rho_trap[1],rho_trap[2]); + printf("t t1=%f t2=%f t3=%f\n",t[0],t[1],t[2]); + printf("volume parameter beta=%f,w=%f,c=%f\n",beta,w,c); + printf("nsp=%i,nmax=%i\n",nsp,nmax); + printf("trap_seeds = %i,%i,%i\n",trap_seeds[0],trap_seeds[1],trap_seeds[2]); + printf("release_seed = %i\n",release_seed); + printf("begin CTI simulation\n"); + float ***ntrap; + float **sp; + float tmp; + int ntrap_tmp; + int *a0,*acti,dim[2]; + int i,j,k,l; + ntotal=ny+noverscan; + ntrap = f3tensor(0,nsp,0,ny,0,nmax+1); + sp = matrix(0,ny,0,nmax+1); + a0=ivector(0,ny); + acti=ivector(0,ntotal); + + for(k=0;kacti_max){ + acti_max = acti[i]; + }*/ + } + } + printf("\nCTI simulation finished!\n"); + free_ivector(a0,0,ny); + free_ivector(acti,0,ntotal); + free_f3tensor(ntrap,0,nsp,0,ny,0,nmax+1); + free_matrix(sp,0,ny,0,nmax+1); +} + +void addCTI(int *a0,int ny,int noverscan, int nsp, float beta,float w, float c,float *t, float ***ntrap, int *acti, int release_seed) +{ + float ran1(int *idum); + float *f,*tmpntrap; + float height,wre; + int *flow,**traped,flowt,ntraptot,ntraped,topoftrap,nrelease; + int ntotal,i,j,k,nmove,isum,ntmp,isp,*tmptraped; + wre=1/w; + ntotal=ny+noverscan; + f=vector(0,nsp); + traped = imatrix(0,nsp,0,ntotal); + flow=ivector(0,ntotal); + for(i=0;i0){ + ntraped=0; + tmpntrap=ntrap[j][i];/// LGL + while(tmpntrap[ntraped+1]<=height){ntraped++;} + if(flow[i]noverscan)nmove=ntotal-i; + for(j=0;j0){ + ntraped=0; + //height=flow[j]*wre; + tmpntrap=ntrap[isp][j]; + tmptraped=traped[isp]; + while(tmpntrap[ntraped+1]<=height){ntraped++;} + topoftrap=tmptraped[j]-ntraped; + if(topoftrap==0){} //do nothing + else if (topoftrap>0){ // release + for(k=0;k0){ + ntraped=0; + //height=flow[j]*wre; + tmpntrap=ntrap[isp][j]; + tmptraped=traped[isp]; + while(tmpntrap[ntraped+1]<=height){ntraped++;} + topoftrap=tmptraped[j]-ntraped; + if(topoftrap==0){} //do nothing + else if (topoftrap>0){ // release + for(k=0;k0){ + ntraped=0; + //height=flow[j]*wre; + tmpntrap=ntrap[isp][j]; + tmptraped=traped[isp]; + while(tmpntrap[ntraped+1]<=height){ntraped++;} + topoftrap=tmptraped[j]-ntraped; + if(topoftrap==0){} //do nothing + else if (topoftrap>0){ // release + for(k=0;k0){ + ntraped=0; + //height=flow[j]*wre; + tmpntrap=ntrap[isp][j]; + tmptraped=traped[isp]; + while(tmpntrap[ntraped+1]<=height){ntraped++;} + topoftrap=tmptraped[j]-ntraped; + if(topoftrap==0){} //do nothing + else if (topoftrap>0){ // release + for(k=0;k +#include +#include +#include +#include "nrutil.h" +void creattraps(long *seed,int ntrap,int ny,int nmax,float c,float beta,float **sp) +{ + //creat ntrap traps along one column + //sp[i][0] the number of trap in the ith pixle; + //sp[i][j] (c,1+c) the height of the jth trap in the ith pixle; + + float ran1(long *idum); + void sort(unsigned long n, float arr[]); + float tmp,betare,height; + int i,nyt,ntmp,j; + float *tmpv; + tmpv = vector(1,100); + + if(nmax>50){printf(" the upper limite of trap in each pixe is too large, nmax=%d\n",nmax); getchar();} + + + betare=1./beta; + for(i=0;i1){ + if(ntmp>nmax)sp[i][0]=ntmp=nmax; // upper limite of trap in each pixel is nmax + for(j=1;j<=ntmp;j++)tmpv[j]=ran1(seed)-c; + + sort(ntmp, tmpv); + for(j=1;j<=ntmp;j++){ + height=tmpv[j]; + if(height<=0){sp[i][j]=0;} + else{sp[i][j]=pow(height,betare);} + } + } + sp[i][ntmp+1]=999999; + } + free_vector(tmpv,1,100); +} diff --git a/ObservationSim/Instrument/Chip/libCTI/src/gammln.c b/ObservationSim/Instrument/Chip/libCTI/src/gammln.c new file mode 100644 index 0000000..0511563 --- /dev/null +++ b/ObservationSim/Instrument/Chip/libCTI/src/gammln.c @@ -0,0 +1,18 @@ +#include + +float gammln(float xx) +{ + double x,y,tmp,ser; + static double cof[6]={76.18009172947146,-86.50532032941677, + 24.01409824083091,-1.231739572450155, + 0.1208650973866179e-2,-0.5395239384953e-5}; + int j; + + y=x=xx; + tmp=x+5.5; + tmp -= (x+0.5)*log(tmp); + ser=1.000000000190015; + for (j=0;j<=5;j++) ser += cof[j]/++y; + return -tmp+log(2.5066282746310005*ser/x); +} +/* (C) Copr. 1986-92 Numerical Recipes Software )1!. */ diff --git a/ObservationSim/Instrument/Chip/libCTI/src/gasdev.c b/ObservationSim/Instrument/Chip/libCTI/src/gasdev.c new file mode 100644 index 0000000..26926a3 --- /dev/null +++ b/ObservationSim/Instrument/Chip/libCTI/src/gasdev.c @@ -0,0 +1,25 @@ +#include + +float gasdev(long *idum) +{ + float ran1(long *idum); + static int iset=0; + static float gset; + float fac,rsq,v1,v2; + + if (iset == 0) { + do { + v1=2.0*ran1(idum)-1.0; + v2=2.0*ran1(idum)-1.0; + rsq=v1*v1+v2*v2; + } while (rsq >= 1.0 || rsq == 0.0); + fac=sqrt(-2.0*log(rsq)/rsq); + gset=v1*fac; + iset=1; + return v2*fac; + } else { + iset=0; + return gset; + } +} +/* (C) Copr. 1986-92 Numerical Recipes Software )1!. */ diff --git a/ObservationSim/Instrument/Chip/libCTI/src/nrutil.c b/ObservationSim/Instrument/Chip/libCTI/src/nrutil.c new file mode 100644 index 0000000..8ecacf5 --- /dev/null +++ b/ObservationSim/Instrument/Chip/libCTI/src/nrutil.c @@ -0,0 +1,769 @@ +#if defined(__STDC__) || defined(ANSI) || defined(NRANSI) /* ANSI */ + +#include +#include +#include +#define NR_END 1 +#define FREE_ARG char* + +void nrerror(char error_text[]) +/* Numerical Recipes standard error handler */ +{ + fprintf(stderr,"Numerical Recipes run-time error...\n"); + fprintf(stderr,"%s\n",error_text); + fprintf(stderr,"...now exiting to system...\n"); + exit(1); +} + +float *vector(long nl, long nh) +/* allocate a float vector with subscript range v[nl..nh] */ +{ + float *v; + + v=(float *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(float))); + if (!v) nrerror("allocation failure in vector()"); + return v-nl+NR_END; +} + +int *ivector(long nl, long nh) +/* allocate an int vector with subscript range v[nl..nh] */ +{ + int *v; + + v=(int *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(int))); + if (!v) nrerror("allocation failure in ivector()"); + return v-nl+NR_END; +} + +unsigned char *cvector(long nl, long nh) +/* allocate an unsigned char vector with subscript range v[nl..nh] */ +{ + unsigned char *v; + + v=(unsigned char *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(unsigned char))); + if (!v) nrerror("allocation failure in cvector()"); + return v-nl+NR_END; +} + +long *lvector(long nl, long nh) +/* allocate an long vector with subscript range v[nl..nh] */ +{ + long *v; + + v=(long *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(long))); + if (!v) nrerror("allocation failure in lvector()"); + return v-nl+NR_END; +} + +double *dvector(long nl, long nh) +/* allocate a double vector with subscript range v[nl..nh] */ +{ + double *v; + + v=(double *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(double))); + if (!v) nrerror("allocation failure in dvector()"); + return v-nl+NR_END; +} + +float **matrix(long nrl, long nrh, long ncl, long nch) +/* allocate a float matrix with subscript range m[nrl..nrh][ncl..nch] */ +{ + long i, nrow=nrh-nrl+1,ncol=nch-ncl+1; + float **m; + + /* allocate pointers to rows */ + m=(float **) malloc((size_t)((nrow+NR_END)*sizeof(float*))); + if (!m) nrerror("allocation failure 1 in matrix()"); + m += NR_END; + m -= nrl; + + /* allocate rows and set pointers to them */ + m[nrl]=(float *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(float))); + if (!m[nrl]) nrerror("allocation failure 2 in matrix()"); + m[nrl] += NR_END; + m[nrl] -= ncl; + + for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol; + + /* return pointer to array of pointers to rows */ + return m; +} + +double **dmatrix(long nrl, long nrh, long ncl, long nch) +/* allocate a double matrix with subscript range m[nrl..nrh][ncl..nch] */ +{ + long i, nrow=nrh-nrl+1,ncol=nch-ncl+1; + double **m; + + /* allocate pointers to rows */ + m=(double **) malloc((size_t)((nrow+NR_END)*sizeof(double*))); + if (!m) nrerror("allocation failure 1 in matrix()"); + m += NR_END; + m -= nrl; + + /* allocate rows and set pointers to them */ + m[nrl]=(double *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(double))); + if (!m[nrl]) nrerror("allocation failure 2 in matrix()"); + m[nrl] += NR_END; + m[nrl] -= ncl; + + for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol; + + /* return pointer to array of pointers to rows */ + return m; +} + +int **imatrix(long nrl, long nrh, long ncl, long nch) +/* allocate a int matrix with subscript range m[nrl..nrh][ncl..nch] */ +{ + long i, nrow=nrh-nrl+1,ncol=nch-ncl+1; + int **m; + + /* allocate pointers to rows */ + m=(int **) malloc((size_t)((nrow+NR_END)*sizeof(int*))); + if (!m) nrerror("allocation failure 1 in matrix()"); + m += NR_END; + m -= nrl; + + + /* allocate rows and set pointers to them */ + m[nrl]=(int *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(int))); + if (!m[nrl]) nrerror("allocation failure 2 in matrix()"); + m[nrl] += NR_END; + m[nrl] -= ncl; + + for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol; + + /* return pointer to array of pointers to rows */ + return m; +} + +float **submatrix(float **a, long oldrl, long oldrh, long oldcl, long oldch, + long newrl, long newcl) +/* point a submatrix [newrl..][newcl..] to a[oldrl..oldrh][oldcl..oldch] */ +{ + long i,j,nrow=oldrh-oldrl+1,ncol=oldcl-newcl; + float **m; + + /* allocate array of pointers to rows */ + m=(float **) malloc((size_t) ((nrow+NR_END)*sizeof(float*))); + if (!m) nrerror("allocation failure in submatrix()"); + m += NR_END; + m -= newrl; + + /* set pointers to rows */ + for(i=oldrl,j=newrl;i<=oldrh;i++,j++) m[j]=a[i]+ncol; + + /* return pointer to array of pointers to rows */ + return m; +} + +float **convert_matrix(float *a, long nrl, long nrh, long ncl, long nch) +/* allocate a float matrix m[nrl..nrh][ncl..nch] that points to the matrix +declared in the standard C manner as a[nrow][ncol], where nrow=nrh-nrl+1 +and ncol=nch-ncl+1. The routine should be called with the address +&a[0][0] as the first argument. */ +{ + long i,j,nrow=nrh-nrl+1,ncol=nch-ncl+1; + float **m; + + /* allocate pointers to rows */ + m=(float **) malloc((size_t) ((nrow+NR_END)*sizeof(float*))); + if (!m) nrerror("allocation failure in convert_matrix()"); + m += NR_END; + m -= nrl; + + /* set pointers to rows */ + m[nrl]=a-ncl; + for(i=1,j=nrl+1;i +#define NR_END 1 +#define FREE_ARG char* + +void nrerror(error_text) +char error_text[]; +/* Numerical Recipes standard error handler */ +{ + void exit(); + + fprintf(stderr,"Numerical Recipes run-time error...\n"); + fprintf(stderr,"%s\n",error_text); + fprintf(stderr,"...now exiting to system...\n"); + exit(1); +} + +float *vector(nl,nh) +long nh,nl; +/* allocate a float vector with subscript range v[nl..nh] */ +{ + float *v; + + v=(float *)malloc((unsigned int) ((nh-nl+1+NR_END)*sizeof(float))); + if (!v) nrerror("allocation failure in vector()"); + return v-nl+NR_END; +} + +int *ivector(nl,nh) +long nh,nl; +/* allocate an int vector with subscript range v[nl..nh] */ +{ + int *v; + + v=(int *)malloc((unsigned int) ((nh-nl+1+NR_END)*sizeof(int))); + if (!v) nrerror("allocation failure in ivector()"); + return v-nl+NR_END; +} + +unsigned char *cvector(nl,nh) +long nh,nl; +/* allocate an unsigned char vector with subscript range v[nl..nh] */ +{ + unsigned char *v; + + v=(unsigned char *)malloc((unsigned int) ((nh-nl+1+NR_END)*sizeof(unsigned char))); + if (!v) nrerror("allocation failure in cvector()"); + return v-nl+NR_END; +} + +long *lvector(nl,nh) +long nh,nl; +/* allocate an unsigned long vector with subscript range v[nl..nh] */ +{ + long *v; + + v=(long *)malloc((int) ((nh-nl+1+NR_END)*sizeof(long))); + if (!v) nrerror("allocation failure in lvector()"); + return v-nl+NR_END; +} + +double *dvector(nl,nh) +long nh,nl; +/* allocate a double vector with subscript range v[nl..nh] */ +{ + double *v; + + v=(double *)malloc((unsigned int) ((nh-nl+1+NR_END)*sizeof(double))); + if (!v) nrerror("allocation failure in dvector()"); + return v-nl+NR_END; +} + +float **matrix(nrl,nrh,ncl,nch) +long nch,ncl,nrh,nrl; +/* allocate a float matrix with subscript range m[nrl..nrh][ncl..nch] */ +{ + long i, nrow=nrh-nrl+1,ncol=nch-ncl+1; + float **m; + + /* allocate pointers to rows */ + m=(float **) malloc((unsigned int)((nrow+NR_END)*sizeof(float*))); + if (!m) nrerror("allocation failure 1 in matrix()"); + m += NR_END; + m -= nrl; + + /* allocate rows and set pointers to them */ + m[nrl]=(float *) malloc((unsigned int)((nrow*ncol+NR_END)*sizeof(float))); + if (!m[nrl]) nrerror("allocation failure 2 in matrix()"); + m[nrl] += NR_END; + m[nrl] -= ncl; + + for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol; + + /* return pointer to array of pointers to rows */ + return m; +} + +double **dmatrix(nrl,nrh,ncl,nch) +long nch,ncl,nrh,nrl; +/* allocate a double matrix with subscript range m[nrl..nrh][ncl..nch] */ +{ + long i, nrow=nrh-nrl+1,ncol=nch-ncl+1; + double **m; + + /* allocate pointers to rows */ + m=(double **) malloc((unsigned int)((nrow+NR_END)*sizeof(double*))); + if (!m) nrerror("allocation failure 1 in matrix()"); + m += NR_END; + m -= nrl; + + /* allocate rows and set pointers to them */ + m[nrl]=(double *) malloc((unsigned int)((nrow*ncol+NR_END)*sizeof(double))); + if (!m[nrl]) nrerror("allocation failure 2 in matrix()"); + m[nrl] += NR_END; + m[nrl] -= ncl; + + for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol; + + /* return pointer to array of pointers to rows */ + return m; +} + +int **imatrix(nrl,nrh,ncl,nch) +long nch,ncl,nrh,nrl; +/* allocate a int matrix with subscript range m[nrl..nrh][ncl..nch] */ +{ + long i, nrow=nrh-nrl+1,ncol=nch-ncl+1; + int **m; + + /* allocate pointers to rows */ + m=(int **) malloc((unsigned int)((nrow+NR_END)*sizeof(int*))); + if (!m) nrerror("allocation failure 1 in matrix()"); + m += NR_END; + m -= nrl; + + + /* allocate rows and set pointers to them */ + m[nrl]=(int *) malloc((unsigned int)((nrow*ncol+NR_END)*sizeof(int))); + if (!m[nrl]) nrerror("allocation failure 2 in matrix()"); + m[nrl] += NR_END; + m[nrl] -= ncl; + + for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol; + + /* return pointer to array of pointers to rows */ + return m; +} + +float **submatrix(a,oldrl,oldrh,oldcl,oldch,newrl,newcl) +float **a; +long newcl,newrl,oldch,oldcl,oldrh,oldrl; +/* point a submatrix [newrl..][newcl..] to a[oldrl..oldrh][oldcl..oldch] */ +{ + long i,j,nrow=oldrh-oldrl+1,ncol=oldcl-newcl; + float **m; + + /* allocate array of pointers to rows */ + m=(float **) malloc((unsigned int) ((nrow+NR_END)*sizeof(float*))); + if (!m) nrerror("allocation failure in submatrix()"); + m += NR_END; + m -= newrl; + + /* set pointers to rows */ + for(i=oldrl,j=newrl;i<=oldrh;i++,j++) m[j]=a[i]+ncol; + + /* return pointer to array of pointers to rows */ + return m; +} + +float **convert_matrix(a,nrl,nrh,ncl,nch) +float *a; +long nch,ncl,nrh,nrl; +/* allocate a float matrix m[nrl..nrh][ncl..nch] that points to the matrix +declared in the standard C manner as a[nrow][ncol], where nrow=nrh-nrl+1 +and ncol=nch-ncl+1. The routine should be called with the address +&a[0][0] as the first argument. */ +{ + long i,j,nrow=nrh-nrl+1,ncol=nch-ncl+1; + float **m; + + /* allocate pointers to rows */ + m=(float **) malloc((unsigned int) ((nrow+NR_END)*sizeof(float*))); + if (!m) nrerror("allocation failure in convert_matrix()"); + m += NR_END; + m -= nrl; + + /* set pointers to rows */ + m[nrl]=a-ncl; + for(i=1,j=nrl+1;i (dmaxarg2) ?\ + (dmaxarg1) : (dmaxarg2)) + +static double dminarg1,dminarg2; +#define DMIN(a,b) (dminarg1=(a),dminarg2=(b),(dminarg1) < (dminarg2) ?\ + (dminarg1) : (dminarg2)) + +static float maxarg1,maxarg2; +#define FMAX(a,b) (maxarg1=(a),maxarg2=(b),(maxarg1) > (maxarg2) ?\ + (maxarg1) : (maxarg2)) + +static float minarg1,minarg2; +#define FMIN(a,b) (minarg1=(a),minarg2=(b),(minarg1) < (minarg2) ?\ + (minarg1) : (minarg2)) + +static long lmaxarg1,lmaxarg2; +#define LMAX(a,b) (lmaxarg1=(a),lmaxarg2=(b),(lmaxarg1) > (lmaxarg2) ?\ + (lmaxarg1) : (lmaxarg2)) + +static long lminarg1,lminarg2; +#define LMIN(a,b) (lminarg1=(a),lminarg2=(b),(lminarg1) < (lminarg2) ?\ + (lminarg1) : (lminarg2)) + +static int imaxarg1,imaxarg2; +#define IMAX(a,b) (imaxarg1=(a),imaxarg2=(b),(imaxarg1) > (imaxarg2) ?\ + (imaxarg1) : (imaxarg2)) + +static int iminarg1,iminarg2; +#define IMIN(a,b) (iminarg1=(a),iminarg2=(b),(iminarg1) < (iminarg2) ?\ + (iminarg1) : (iminarg2)) + +#define SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a)) + +void nrerror(char error_text[]); +float *vector(long nl, long nh); +int *ivector(long nl, long nh); +unsigned char *cvector(long nl, long nh); +long *lvector(long nl, long nh); +double *dvector(long nl, long nh); +float **matrix(long nrl, long nrh, long ncl, long nch); +double **dmatrix(long nrl, long nrh, long ncl, long nch); +int **imatrix(long nrl, long nrh, long ncl, long nch); +float **submatrix(float **a, long oldrl, long oldrh, long oldcl, long oldch, + long newrl, long newcl); +float **convert_matrix(float *a, long nrl, long nrh, long ncl, long nch); +float ***f3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh); +void free_vector(float *v, long nl, long nh); +void free_ivector(int *v, long nl, long nh); +void free_cvector(unsigned char *v, long nl, long nh); +void free_lvector(long *v, long nl, long nh); +void free_dvector(double *v, long nl, long nh); +void free_matrix(float **m, long nrl, long nrh, long ncl, long nch); +void free_dmatrix(double **m, long nrl, long nrh, long ncl, long nch); +void free_imatrix(int **m, long nrl, long nrh, long ncl, long nch); +void free_submatrix(float **b, long nrl, long nrh, long ncl, long nch); +void free_convert_matrix(float **b, long nrl, long nrh, long ncl, long nch); +void free_f3tensor(float ***t, long nrl, long nrh, long ncl, long nch, + long ndl, long ndh); + + +int ***i3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh); +void free_i3tensor(int ***t, long nrl, long nrh, long ncl, long nch, + long ndl, long ndh); + +unsigned char ***b3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh); +void free_b3tensor(unsigned char ***t, long nrl, long nrh, long ncl, long nch, + long ndl, long ndh); + +double ***d3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh); +void free_d3tensor(double ***t, long nrl, long nrh, long ncl, long nch, + long ndl, long ndh); + + +char **cmatrix(long nrl, long nrh, long ncl, long nch); +void free_cmatrix(char **m, long nrl, long nrh, long ncl, long nch); + +#endif /* _NR_UTILS_H_ */ diff --git a/ObservationSim/Instrument/Chip/libCTI/src/poidev.c b/ObservationSim/Instrument/Chip/libCTI/src/poidev.c new file mode 100644 index 0000000..cc3c50b --- /dev/null +++ b/ObservationSim/Instrument/Chip/libCTI/src/poidev.c @@ -0,0 +1,79 @@ +#include +#define PI 3.141592654 + +float poidev(float xm, int *idum) +{ + float gammln(float xx); + float ran1(int *idum); + static float sq,alxm,g,oldm=(-1.0); + float em,t,y; + + if (xm < 12.0) { + if (xm != oldm) { + oldm=xm; + g=exp(-xm); + } + em = -1; + t=1.0; + do { + ++em; + t *= ran1(idum); + } while (t > g); + } else { + if (xm != oldm) { + oldm=xm; + sq=sqrt(2.0*xm); + alxm=log(xm); + g=xm*alxm-gammln(xm+1.0); + } + do { + do { + y=tan(PI*ran1(idum)); + em=sq*y+xm; + } while (em < 0.0); + em=floor(em); + t=0.9*(1.0+y*y)*exp(em*alxm-gammln(em+1.0)-g); + } while (ran1(idum) > t); + } + return em; +} + +float poidev_copy(float xm, int *idum) +{ + float gammln(float xx); + float ran1_copy(int *idum); + static float sq1,alxm1,g1,oldm1=(-1.0); + float em,t,y; + + if (xm < 12.0) { + if (xm != oldm1) { + oldm1=xm; + g1=exp(-xm); + } + em = -1; + t=1.0; + do { + ++em; + t *= ran1_copy(idum); + } while (t > g1); + } else { + if (xm != oldm1) { + oldm1=xm; + sq1=sqrt(2.0*xm); + alxm1=log(xm); + g1=xm*alxm1-gammln(xm+1.0); + } + do { + do { + y=tan(PI*ran1_copy(idum)); + em=sq1*y+xm; + } while (em < 0.0); + em=floor(em); + t=0.9*(1.0+y*y)*exp(em*alxm1-gammln(em+1.0)-g1); + } while (ran1_copy(idum) > t); + } + return em; +} + +#undef PI +/* (C) Copr. 1986-92 Numerical Recipes Software )1!. */ diff --git a/ObservationSim/Instrument/Chip/libCTI/src/ran1.c b/ObservationSim/Instrument/Chip/libCTI/src/ran1.c new file mode 100644 index 0000000..7f7bb3d --- /dev/null +++ b/ObservationSim/Instrument/Chip/libCTI/src/ran1.c @@ -0,0 +1,82 @@ +#define IA 16807 +#define IM 2147483647 +#define AM (1.0/IM) +#define IQ 127773 +#define IR 2836 +#define NTAB 32 +#define NDIV (1+(IM-1)/NTAB) +#define EPS 1.2e-7 +#define RNMX (1.0-EPS) + +float ran1(int *idum) +{ + int j; + int k; + //static + static int iy=0; + static int iv[NTAB]; + + float temp; + + if (*idum <= 0 || !iy) { + if (-(*idum) < 1) *idum=1; + else *idum = -(*idum); + for (j=NTAB+7;j>=0;j--) { + k=(*idum)/IQ; + *idum=IA*(*idum-k*IQ)-IR*k; + if (*idum < 0) *idum += IM; + if (j < NTAB) iv[j] = *idum; + } + iy=iv[0]; + } + k=(*idum)/IQ; + *idum=IA*(*idum-k*IQ)-IR*k; + if (*idum < 0) *idum += IM; + j=iy/NDIV; + iy=iv[j]; + iv[j] = *idum; + if ((temp=AM*iy) > RNMX) return RNMX; + else return temp; +} + +float ran1_copy(int *idum) +{ + int j; + int k; + //static + static int iy1=0; + static int iv1[NTAB]; + + float temp; + + if (*idum <= 0 || !iy1) { + if (-(*idum) < 1) *idum=1; + else *idum = -(*idum); + for (j=NTAB+7;j>=0;j--) { + k=(*idum)/IQ; + *idum=IA*(*idum-k*IQ)-IR*k; + if (*idum < 0) *idum += IM; + if (j < NTAB) iv1[j] = *idum; + } + iy1=iv1[0]; + } + k=(*idum)/IQ; + *idum=IA*(*idum-k*IQ)-IR*k; + if (*idum < 0) *idum += IM; + j=iy1/NDIV; + iy1=iv1[j]; + iv1[j] = *idum; + if ((temp=AM*iy1) > RNMX) return RNMX; + else return temp; +} + +#undef IA +#undef IM +#undef AM +#undef IQ +#undef IR +#undef NTAB +#undef NDIV +#undef EPS +#undef RNMX +/* (C) Copr. 1986-92 Numerical Recipes Software )1!. */ diff --git a/ObservationSim/Instrument/Chip/libCTI/src/ran2.c b/ObservationSim/Instrument/Chip/libCTI/src/ran2.c new file mode 100644 index 0000000..5dce1f0 --- /dev/null +++ b/ObservationSim/Instrument/Chip/libCTI/src/ran2.c @@ -0,0 +1,64 @@ +#define IM1 2147483563 +#define IM2 2147483399 +#define AM (1.0/IM1) +#define IMM1 (IM1-1) +#define IA1 40014 +#define IA2 40692 +#define IQ1 53668 +#define IQ2 52774 +#define IR1 12211 +#define IR2 3791 +#define NTAB 32 +#define NDIV (1+IMM1/NTAB) +#define EPS 1.2e-7 +#define RNMX (1.0-EPS) + +float ran2(long *idum) +{ + int j; + long k; + static long idum2=123456789; + static long iy=0; + static long iv[NTAB]; + float temp; + + if (*idum <= 0) { + if (-(*idum) < 1) *idum=1; + else *idum = -(*idum); + idum2=(*idum); + for (j=NTAB+7;j>=0;j--) { + k=(*idum)/IQ1; + *idum=IA1*(*idum-k*IQ1)-k*IR1; + if (*idum < 0) *idum += IM1; + if (j < NTAB) iv[j] = *idum; + } + iy=iv[0]; + } + k=(*idum)/IQ1; + *idum=IA1*(*idum-k*IQ1)-k*IR1; + if (*idum < 0) *idum += IM1; + k=idum2/IQ2; + idum2=IA2*(idum2-k*IQ2)-k*IR2; + if (idum2 < 0) idum2 += IM2; + j=iy/NDIV; + iy=iv[j]-idum2; + iv[j] = *idum; + if (iy < 1) iy += IMM1; + if ((temp=AM*iy) > RNMX) return RNMX; + else return temp; +} +#undef IM1 +#undef IM2 +#undef AM +#undef IMM1 +#undef IA1 +#undef IA2 +#undef IQ1 +#undef IQ2 +#undef IR1 +#undef IR2 +#undef NTAB +#undef NDIV +#undef EPS +#undef RNMX +/* (C) Copr. 1986-92 Numerical Recipes Software )1!. */ diff --git a/ObservationSim/Instrument/Chip/libCTI/src/sort.c b/ObservationSim/Instrument/Chip/libCTI/src/sort.c new file mode 100644 index 0000000..4dfa867 --- /dev/null +++ b/ObservationSim/Instrument/Chip/libCTI/src/sort.c @@ -0,0 +1,69 @@ +#define NRANSI +#include "nrutil.h" +#define SWAP(a,b) temp=(a);(a)=(b);(b)=temp; +#define M 7 +#define NSTACK 50 + +void sort(unsigned long n, float arr[]) +{ + unsigned long i,ir=n,j,k,l=1; + int jstack=0,*istack; + float a,temp; + + istack=ivector(1,NSTACK); + for (;;) { + if (ir-l < M) { + for (j=l+1;j<=ir;j++) { + a=arr[j]; + for (i=j-1;i>=1;i--) { + if (arr[i] <= a) break; + arr[i+1]=arr[i]; + } + arr[i+1]=a; + } + if (jstack == 0) break; + ir=istack[jstack--]; + l=istack[jstack--]; + } else { + k=(l+ir) >> 1; + SWAP(arr[k],arr[l+1]) + if (arr[l+1] > arr[ir]) { + SWAP(arr[l+1],arr[ir]) + } + if (arr[l] > arr[ir]) { + SWAP(arr[l],arr[ir]) + } + if (arr[l+1] > arr[l]) { + SWAP(arr[l+1],arr[l]) + } + i=l+1; + j=ir; + a=arr[l]; + for (;;) { + do i++; while (arr[i] < a); + do j--; while (arr[j] > a); + if (j < i) break; + SWAP(arr[i],arr[j]); + } + arr[l]=arr[j]; + arr[j]=a; + jstack += 2; + if (jstack > NSTACK) nrerror("NSTACK too small in sort."); + if (ir-i+1 >= j-l) { + istack[jstack]=ir; + istack[jstack-1]=i; + ir=j-1; + } else { + istack[jstack]=j-1; + istack[jstack-1]=l; + l=i; + } + } + } + free_ivector(istack,1,NSTACK); +} +#undef M +#undef NSTACK +#undef SWAP +#undef NRANSI +/* (C) Copr. 1986-92 Numerical Recipes Software )1!. */ diff --git a/ObservationSim/Instrument/data/ccd/chip_definition.json b/ObservationSim/Instrument/data/ccd/chip_definition.json index da04b86..f50d90c 100644 --- a/ObservationSim/Instrument/data/ccd/chip_definition.json +++ b/ObservationSim/Instrument/data/ccd/chip_definition.json @@ -15,7 +15,11 @@ "df_strength": 2.3, "bias_level": 2000.0, "gain": 1.0, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "32": { "chip_name": "FGS1A-D2", @@ -33,7 +37,11 @@ "df_strength": 2.3, "bias_level": 2000.0, "gain": 1.0, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "33": { "chip_name": "FGS1B-D1", @@ -51,7 +59,11 @@ "df_strength": 2.3, "bias_level": 2000.0, "gain": 1.0, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "34": { "chip_name": "FGS1B-D2", @@ -69,7 +81,11 @@ "df_strength": 2.3, "bias_level": 2000.0, "gain": 1.0, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "35": { "chip_name": "FGS2A-D1", @@ -87,7 +103,11 @@ "df_strength": 2.3, "bias_level": 2000.0, "gain": 1.0, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "36": { "chip_name": "FGS2A-D2", @@ -105,7 +125,11 @@ "df_strength": 2.3, "bias_level": 2000.0, "gain": 1.0, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "37": { "chip_name": "FGS2B-D1", @@ -123,7 +147,11 @@ "df_strength": 2.3, "bias_level": 2000.0, "gain": 1.0, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "38": { "chip_name": "FGS2B-D2", @@ -141,7 +169,11 @@ "df_strength": 2.3, "bias_level": 2000.0, "gain": 1.0, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "39": { "chip_name": "FGS3-D1", @@ -159,7 +191,11 @@ "df_strength": 2.3, "bias_level": 2000.0, "gain": 1.0, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "40": { "chip_name": "FGS3-D2", @@ -177,7 +213,11 @@ "df_strength": 2.3, "bias_level": 2000.0, "gain": 1.0, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "41": { "chip_name": "FGS4-D1", @@ -195,7 +235,11 @@ "df_strength": 2.3, "bias_level": 2000.0, "gain": 1.0, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "42": { "chip_name": "FGS4-D2", @@ -213,7 +257,11 @@ "df_strength": 2.3, "bias_level": 2000.0, "gain": 1.0, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "1": { "chip_name": "GI-1", @@ -231,7 +279,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "2": { "chip_name": "GV-1", @@ -249,7 +301,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "3": { "chip_name": "GU-1", @@ -267,7 +323,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "4": { "chip_name": "GU-2", @@ -285,7 +345,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "5": { "chip_name": "GV-2", @@ -303,7 +367,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "6": { "chip_name": "y-1", @@ -321,7 +389,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "7": { "chip_name": "i-1", @@ -339,7 +411,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "8": { "chip_name": "g-1", @@ -357,7 +433,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "9": { "chip_name": "r-1", @@ -375,7 +455,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "10": { "chip_name": "GI-2", @@ -393,7 +477,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "11": { "chip_name": "z-1", @@ -411,7 +499,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "12": { "chip_name": "NUV-1", @@ -429,7 +521,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "13": { "chip_name": "NUV-2", @@ -447,7 +543,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "14": { "chip_name": "u-1", @@ -465,7 +565,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "15": { "chip_name": "y-2", @@ -483,7 +587,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "16": { "chip_name": "y-3", @@ -501,7 +609,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "17": { "chip_name": "u-2", @@ -519,7 +631,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "18": { "chip_name": "NUV-3", @@ -537,7 +653,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "19": { "chip_name": "NUV-4", @@ -555,7 +675,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "20": { "chip_name": "z-2", @@ -573,7 +697,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "21": { "chip_name": "GI-3", @@ -591,7 +719,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "22": { "chip_name": "r-2", @@ -609,7 +741,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "23": { "chip_name": "g-2", @@ -627,7 +763,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "24": { "chip_name": "i-2", @@ -645,7 +785,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "25": { "chip_name": "y-4", @@ -663,7 +807,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "26": { "chip_name": "GV-3", @@ -681,7 +829,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "27": { "chip_name": "GU-3", @@ -699,7 +851,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "28": { "chip_name": "GU-4", @@ -717,7 +873,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "29": { "chip_name": "GV-4", @@ -735,7 +895,11 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 }, "30": { "chip_name": "GI-4", @@ -753,6 +917,10 @@ "df_strength": 2.3, "bias_level": 500, "gain": 1.1, - "full_well": 90000 + "full_well": 90000, + "prescan_x": 27, + "overscan_x": 71, + "prescan_y": 0, + "overscan_y": 84 } -} \ No newline at end of file +} diff --git a/config/config_C6_dev.yaml b/config/config_C6_dev.yaml index 0619cb6..c1b5ba1 100644 --- a/config/config_C6_dev.yaml +++ b/config/config_C6_dev.yaml @@ -9,15 +9,14 @@ # Base diretories and naming setup # Can add some of the command-line arguments here as well; # OK to pass either way or both, as long as they are consistent -<<<<<<< HEAD -work_dir: "/share/home/zhangxin/CSST_SIM/CSST_new_sim/csst-simulation/" -======= -work_dir: "/share/home/fangyuedong/new_sim/workplace/" -# work_dir: "/share/C6_new_sim_2sq" ->>>>>>> new_sim +##<<<<<<< HEAD +##work_dir: "/share/home/zhangxin/CSST_SIM/CSST_new_sim/csst-simulation/" +##======= +work_dir: "/share/home/weichengliang/CSST_git/test_new_sim/outputs/" +##>>>>>>> new_sim data_dir: "/share/simudata/CSSOSDataProductsSims/data/" -run_name: "C6_new_sim_2sq_run1" -project_cycle: 6 +run_name: "testRun2" +project_cycle: 8 run_counter: 1 # Whether to use MPI @@ -71,7 +70,7 @@ obs_setting: # "Spectroscopic": simulate slitless spectroscopic chips only # "FGS": simulate FGS chips only (31-42) # "All": simulate full focal plane - survey_type: "Spectroscopic" + survey_type: "Photometric" # Exposure time [seconds] exp_time: 150. @@ -107,7 +106,7 @@ obs_setting: # - give a list of indexes of chips: [ip_1, ip_2...] # - run all chips: null # Note: for all pointings - run_chips: [10] + run_chips: [8] # Whether to enable astrometric modeling enable_astrometric_model: True @@ -178,12 +177,14 @@ ins_effects: non_linear: YES # Whether to add non-linearity cosmic_ray: YES # Whether to add cosmic-ray cray_differ: YES # Whether to generate different cosmic ray maps CAL and MS output - cte_trail: YES # Whether to simulate CTE trails + cte_trail: YES # Whether to simulate CTE trails, CTI_lgl_v0.3.tar.gz saturbloom: YES # Whether to simulate Saturation & Blooming add_badcolumns: YES # Whether to add bad columns add_hotpixels: YES # Whether to add hot pixels add_deadpixels: YES # Whether to add dead(dark) pixels bright_fatter: YES # Whether to simulate Brighter-Fatter (also diffusion) effect + add_prescan: YES # Whether to add pre/over-scan + format_output: YES ##1*16 output # Values: # default values have been defined individually for each chip in: -- GitLab