diff --git a/SpecGen/SpecGenerator.py b/SpecGen/SpecGenerator.py index 8aae91678fd6a8f17fa447283b6bd78ff967fb51..61e6f2cdddcc5107177357b1c5d7845b429ffdfe 100644 --- a/SpecGen/SpecGenerator.py +++ b/SpecGen/SpecGenerator.py @@ -2,8 +2,8 @@ ''' Author: zx Date: 2021-04-08 13:49:35 -LastEditTime: 2023-02-24 00:57:20 -LastEditors: xin zhangxinbjfu@gmail.com +LastEditTime: 2024-08-28 16:45:32 +LastEditors: Zhang Xin zhangx@bao.ac.cn Description: In User Settings Edit FilePath: /undefined/Users/zhangxin/Work/SlitlessSim/sls_lit_demo/simDemo.py ''' @@ -26,6 +26,7 @@ import time import mpi4py.MPI as MPI import os,sys +import photutils from . import Config @@ -424,6 +425,205 @@ class SpecGenerator(object): # # plt.plot(wave_pix[idx][idx1], wave_flux[idx][idx1]) # plt.show() return specTab, Aimg, stamp.array, saturePix + + def generateSpec1dforInputImg(self, img = None,img_pixel_scale = 0.06, limitfluxratio=0.9,deltLamb = 0.01, pixel_size = 0.074): + + specConfile = self.config.conFiles[self.grating] + + throughput_f = self.config.senFisle[self.grating] + self.config.orderIDs[self.beam] + '.fits' + + sed = self.generateSEDfromFiles(self.sedFile,2500,10000,deltLamb) + + x_nominal = int(np.floor(self.xcenter + 0.5)) + y_nominal = int(np.floor(self.ycenter + 0.5)) + dx = self.xcenter - x_nominal+0.5 + dy = self.ycenter - y_nominal+0.5 + offset = galsim.PositionD(dx, dy) + + folding_threshold=5.e-3 + if img is None: + print("ERROR: input Image Error") + return + img = img/img.sum() + gal_img = galsim.ImageF(img, scale=img_pixel_scale) + gsp = galsim.GSParams(folding_threshold=folding_threshold) + + gal = galsim.InterpolatedImage(gal_img, gsparams=gsp) + # if g_order in ['C','D','E']: + # add_psf = galsim.Gaussian(sigma=contam_order_sigma[g_order], flux=1.0) + # self.psf = galsim.Convolve(self.psf, add_psf) + wcs_in = galsim.PixelScale(img_pixel_scale) + wcs = galsim.PixelScale(pixel_size) + gal = wcs.toWorld(wcs_in.toImage(gal)) + + # print(skybg) + # print(specConfile) + # print(throughput_f) + + # plt.figure() + # plt.plot(sed['WAVELENGTH'], sed['FLUX']) + + # gal = galsim.Sersic(s_n, half_light_radius=re) + + # gal_pa = pa * galsim.degrees + # gal_ell = gal.shear(q=q_ell, beta=gal_pa) + + conv_gal = galsim.Convolve([gal,self.psf]) + + + stamp = conv_gal.drawImage(wcs=galsim.PixelScale(self.p_size), offset=offset)*self.t*self.expNum*math.pi*(self.aper/2)*(self.aper/2) + stamp.setOrigin(0,0) + t_center = photutils.centroids.centroid_1dg(stamp.array) + stamp.setCenter(t_center[0],t_center[1]) + + origin_star = [y_nominal - (stamp.center.y - stamp.ymin), + x_nominal - (stamp.center.x - stamp.xmin)] + + + origin_star = [y_nominal - (stamp.center.y - stamp.ymin), + x_nominal - (stamp.center.x - stamp.xmin)] + + sdp = SpecDisperser.SpecDisperser(orig_img=stamp, xcenter=x_nominal, + ycenter=y_nominal, origin=origin_star, + tar_spec=sed, + conf=specConfile, + isAlongY=0, deltLamb = deltLamb/2.) + + spec_orders = sdp.compute_spec_orders() + + thp = Table.read(throughput_f) + thp_i = interpolate.interp1d(thp['WAVELENGTH'], thp['SENSITIVITY']) + + Aimg_orig = spec_orders[self.beam][0] + Aimg_ = Aimg_orig + + Aimg_ = Aimg_ + (self.skybg + self.dark)*self.t*self.expNum + + np.random.seed(int(time.time())) + Aimg_ = np.random.poisson(Aimg_) + for i in np.arange(self.expNum): + Aimg_ = self.addReadoutNois(img = Aimg_, readout = self.readout) + + Aimg = Aimg_ - (self.skybg + self.dark)*self.t*self.expNum + + + wave_pix = spec_orders[self.beam][5] + wave_pos = spec_orders[self.beam][3] + + wave_pos_y=spec_orders[self.beam][4] + + sh = Aimg.shape + spec_pix = np.zeros(sh[1]) + err2_pix = np.zeros(sh[1]) + + # print(spec_orders[beamOrder][4]) + # print(sh) + # plt.figure() + # plt.imshow(Aimg) + y_cent_pos = int(np.round(np.mean(wave_pos_y))) + + tFlux = np.sum(spec_orders[self.beam][0]) + # print(tFlux) + fluxRatio = 0 + for i in range(int(sh[0]/2)): + pFlux = np.sum(spec_orders[self.beam][0][y_cent_pos-i:y_cent_pos+i+1]) + + fluxRatio = pFlux/tFlux + if fluxRatio>limitfluxratio: + break + + f1 = spec_orders[self.beam][0][y_cent_pos-i:y_cent_pos+i+1].sum(0) + f2 = spec_orders[self.beam][0].sum(0) + ratio_vec = np.zeros_like(f1) + nozero_flag = f2 != 0 + + ratio_vec[nozero_flag] = f1[nozero_flag]/f2[nozero_flag] + # ratio_vec = spec_orders[self.beam][0][y_cent_pos-i:y_cent_pos+i+1].sum(0)/spec_orders[self.beam][0].sum(0) + y_range = i + # print(y_range, fluxRatio) + y_len_pix = 2 * y_range + 1 + for i in range(sh[1]): + spec_pix[i] = sum(Aimg[y_cent_pos-y_range:y_cent_pos+y_range+1, i]) + err2_pix[i] = sum(Aimg_orig[y_cent_pos-y_range:y_cent_pos+y_range+1, i]) + (self.skybg + self.dark)*self.t * y_len_pix * self.expNum + self.readout*self.readout * y_len_pix * self.expNum + + bRange = self.config.bandRanges[self.grating] + wave_flux = np.zeros(wave_pix.shape[0]) + err_flux = np.zeros(wave_pix.shape[0]) + specRangeImg = [] + + true_center = stamp.center + galsim.PositionD(self.xcenter-x_nominal, self.ycenter-y_nominal) + wavePos_x = true_center.x + wave_pos - wave_pos[0] + + wavePos_x_interp = np.arange(int(wavePos_x[0]), int(wavePos_x[-1])) + lam_trace = np.interp(wavePos_x_interp,wavePos_x,wave_pix) + + wave_flux = np.zeros(lam_trace.shape[0]) + err_flux = np.zeros(lam_trace.shape[0]) + + + + for i in np.arange(1, lam_trace.shape[0] - 1): + w = lam_trace[i] + wave2pix_pos=wavePos_x_interp[i] + + if (bRange[0] <= w <= bRange[1]): + thp_w = thp_i(w) + deltW = np.abs(w - lam_trace[i - 1]) / 2 + np.abs(lam_trace[i + 1] - w) / 2 + f = spec_pix[wave2pix_pos] + f_ratio = ratio_vec[wave2pix_pos] + if f_ratio==0: + f_ratio=1 + f = f / self.t / thp_w / deltW /self.expNum/f_ratio + err = err2_pix[wave2pix_pos] + # err = err/ t / deltW + err = np.sqrt(err)/ self.t / deltW/ thp_w /self.expNum/f_ratio + specRangeImg.append(wave2pix_pos) + # err = err / thp_w + else: + f = 0 + err = 0 + + wave_flux[i] = f + err_flux[i] = err + + Aimg_cal = Aimg_[y_cent_pos-y_range:y_cent_pos+y_range+1, specRangeImg] + ids = Aimg_cal > self.saturation + + #1. saturation pixel number, 2. total pixel number, 3 saturation ratio, 4.flux ratio in photo aperture,5.max value,6.min value + saturePix = np.zeros(6) + + saturePix[0] = Aimg_cal[ids].shape[0] + saturePix[1] = Aimg_cal.shape[0]*Aimg_cal.shape[1] + saturePix[2] = saturePix[0]/saturePix[1] + saturePix[3] = 1 + saturePix[4] = np.amax(Aimg_cal) + saturePix[5] = np.amin(Aimg_cal) + + + idx = (lam_trace >= bRange[0]-100) + idx1 = (lam_trace[idx] <= bRange[1]+100) + + w_select = lam_trace[idx][idx1] + f_select = wave_flux[idx][idx1] + e_select = err_flux[idx][idx1] + lam_index = np.argsort(w_select) + + specTab = Table(np.array([w_select[lam_index], f_select[lam_index], e_select[lam_index]]).T,names=('WAVELENGTH', 'FLUX','ERR')) + + # spec_orig = np.loadtxt(sedFile) + + # plt.figure() + # plt.plot(spec_orig[:,0], spec_orig[:,1]) + + # plt.figure() + # plt.errorbar(wave_pix[idx][idx1], wave_flux[idx][idx1],err_flux[idx][idx1]) + # plt.legend([self.sedFile]) + # # plt.plot(wave_pix[idx][idx1], wave_flux[idx][idx1]) + # plt.show() + return specTab, Aimg, stamp.array, saturePix + + + def addReadoutNois(self, img = None, readout = 5): random.seed(time.time()) diff --git a/data/galImg/gal.fits b/data/galImg/gal.fits new file mode 100755 index 0000000000000000000000000000000000000000..6193f2fde9381453412860e866470146e1287fe0 --- /dev/null +++ b/data/galImg/gal.fits @@ -0,0 +1,53 @@ +SIMPLE = T / conforms to FITS standard BITPIX = -64 / array data type NAXIS = 2 / number of array dimensions NAXIS1 = 77 NAXIS2 = 77 DATE = '2022-06-27' / last update FILETYPE= 'F160W ' / type of data found in data file TELESCOP= 'HST ' / telescope used to acquire data INSTRUME= 'WFC3 ' / identifier for instrument used to acquire data EQUINOX = 2000.0 / equinox of celestial coord. system EXPTIME = 1.0 / exposure duration (seconds)--calculated OBSTYPE = 'IMAGING ' / observation type - imaging or spectroscopic DETECTOR= 'IR ' / detector used FILTER = 'F160W ' / filter element selected BUNIT = 'ELECTRONS/S' / brightness units ZEROPNT = '25.94 ' / zeropoint AB magnitude TEXPTIME= 293676.249160998 / total exposure time PROPOSID= 13872 / PEP proposal identifier PR_INV_L= 'Illingworth' / last name of principal investigator PR_INV_F= 'Garth ' / first name of principal investigator PR_INV_M= 'D ' / middle initial of principal investigator WCSNAME = 'GAIA ' / GAIA GOODS-N WCS WCSAXES = 2 / number of World Coordinate System axes CRPIX1 = -2641.5 / x-coordinate of reference pixel CRPIX2 = -4703.5 / y-coordinate of reference pixel CDELT1 = 1.0 CDELT2 = 1.0 CUNIT1 = 'deg ' CUNIT2 = 'deg ' CRVAL1 = 189.228621 / first axis value at reference pixel CRVAL2 = 62.238572 / second axis value at reference pixel LONPOLE = 180.0 LATPOLE = 62.238572 RADESYS = 'FK5 ' CTYPE1 = 'RA---TAN' / the coordinate type for the first axis CTYPE2 = 'DEC--TAN' / the coordinate type for the second axis CD1_1 = -1.6666666E-05 / partial of first axis coordinate w.r.t. x CD1_2 = 0.0 / partial of first axis coordinate w.r.t. y CD2_1 = 0.0 / partial of second axis coordinate w.r.t. x CD2_2 = 1.6666666E-05 / partial of second axis coordinate w.r.t. y LTV1 = 0.0 / offset in X to subsection start LTV2 = 0.0 / offset in Y to subsection start LTM1_1 = 1.0 / reciprocal of sampling rate in X LTM2_2 = 1.0 / reciprocal of sampling rate in Y ORIENTAT= 0.0 / position angle of image y axis (deg. e of n) HLFVER = 'Hubble Legacy Field V2.5 GOODS-N 1 October 2021' / HLF version WCSNAMEA= 'GOODSN ' / original GOODS-N WCS WCSAXESA= 2 CRPIX1A = 10340.5 CRPIX2A = 10240.5 CDELT1A = 1.0 CDELT2A = 1.0 CUNIT1A = 'deg ' CUNIT2A = 'deg ' CTYPE1A = 'RA---TAN' CTYPE2A = 'DEC--TAN' CRVAL1A = 189.228621 CRVAL2A = 62.238572 LONPOLEA= 180.0 LATPOLEA= 62.238572 RADESYSA= 'FK5 ' EQUINOXA= 2000.0 CD1_1A = -1.6666666E-05 CD1_2A = 0.0 CD2_1A = 0.0 CD2_2A = 1.6666666E-05 FLAG1 = 1 NKRONIN = 0.9 NKRONOUT= 1.9 KRON1 = 3.5 A_IMAGE1= 5.208 B_IMAGE1= 4.091 THETA1 = -35.3 MULOBJ = 0 END ?z_>$Cx@*V+Y'7Q T=fPe?k0?qIf?q1<?n?ed?fbs?u`h?U.?]ݫ?rJ6H=x?]aj?Oшr UHEZ?s9@ &?Cٰq\?M0R(?[?Rqf0sn(O@?~`?s^(?ucV4pOPq(r?X$\?g@OO7udj`?`R?ur.?KR`?p ?qzq]`?WMp?|2|?UXkX҈Y?tдx?S5P@~0bh\ 8i#(Z(?u (?xshsZEb ~?N?@``A3t?R٨I.X-AD'toG/o bp?Y}:㱀J{6IӺqO?bKQ=?]Rlq<tmfS?4%?l<?RXX?RY$|?u_ ?wHg opfp&D g5o@f `?]`0?B?eF?cxm?o/?E͢?pH`s[Un?{"?/Z `@?r˰?nǨP?pp?bUv?u̾d?v ?<`uƌdyD{/>?@x?[9?M?=5`?VF?hg?p-n?s?pǚB?Wo?pS?Z?zG?w\?pu`En@?)@$IrbB}?]?cUa?/8gPhvpeyD(odQnky/ppWK9?C +8sQ6wH_?mՠO,?c$/QOÀa?`?dARGg?0?lZ&?6ԀC@?a| ^xC m<0L/3?AE)F?4IT@?\M``y?Mw?xi?W?7?Bk`bx?0oT2?Ve?F*?cqB?`Q?rBML?a4Psdj\F\?RF<EZ?T7\?PĄ`1?[ k`?4F_@c<3?S``f?M0?{dh?uq?r3?^*~@?DEG :`?3hB R5"7`?b?q'oL?4Q]BRǀ?U8gqpiA?t 8l0?[?)?Zo?UPzcpu(tY n @[? H?do{9Q? @@?s.Ȁ?p v|?m?sR?ov֠?_%cJN?@`E?>>`?uu?K:u@T5@?](fV@IpV<1pha8 yr}Gkt?]p?Vt;`B`?W>Ok niriլD ?i?R?Th?gи?O[@[S)si?P$Uz ?DNDN ?qq?qqÀpC?\\h?x5^nL\?om?t)?zJM?gXA@>B?U?Sg@i ?%?XNj2o< J ?p?pcXB`b) H:]?Vl?Q?fCePo ?8?3@HZqc2?g\?my?s"o?u2U?Vk?7d@?MHAsy?g` ?P2?vTF8`2v`,NU1n?\U0t?rt3>?M?CK a[FIy-y=?]?]Mr/`?A?7?ket}]P+<?\g?is0?3+@?13?U:Z?Yw !dx; 3p`v"?I\?i@?s?uL?b (G\?q2X?d w8Y&@rtpSmhlaQ=r?X(u?P!<?t?piDu`?$iT'^v?N8W-_@?6g"?c7DP`?iFXPjP@]8@?Pq1z@wb_!=@:S@G ?Zfxz`,O?bZqrKoZ ?9N?Zr4?o׸Ch 8?W @?X0tr?7Zg?p>?pU?BfF?c?S?N:?iXhto??N${?s1|?gL8?b*?u@?`?Q +Ym @q>p?HNbp?a?s~?kG#?p?1Us?fpb)T}@T4 rQp?$smT2?n?fG?e;?4?R׀??RtVc6f2?nF?s!E?~vAi uT@?p?M|,`?pL<4?[?hfkwəvb$dWj?pqP?tL3?Z FPpu(n89?mP?]](~{8@?Vn}WnB;RR[0?(b?Z0?Of?jm x4??[k3ʦ@?JO?`HXefϐ?u?l ?fN[?z(?Uo?tz ?xnk0?Q.K@?7?u8?m `t>JOvS mw rּ-N|`l?@@$Zn? ?M4)?w8?g\P?oI`' 8xXۨjee`L?O@?cc`?Xb?taRb`0@?[3+r#Xvi@wTxhK2`4H{?o5?L[7f?LH?hc?k98bNm ?to?LOl@Yʨ@ `;g?ie>cWKx?rR l{?R?49`?dM?z|,?~x1d?k1d8r-l?F?vp?r\?n(?N~?uv?wHT?GMgkM?2`uA`?W VG@gz0}<y.Z|+?"Vg?VY?lȨ?Cѓ@c ?WXT?,tqXtg rtgp?s ?c7>?cp#e`p?g[u?dҙQ{?zZd?Ae! zrnfu~w8?1%?u7W(?AC0rqZ{?n1p?O4&H`9?pq?GI{iov){?[ ?v=?v ?8wP_(@?mfrϬjرs?jS?f.1?O?f=X?B_-`P?uқ?|ˠE?Sd?V,l^k0?&?}6F&u@mф?WX:+FpnZ`d{`hУ?l@f?u`:<?m<t:PN?Dt?lP?#?E ?]h?d?ju?oXW?PF@`8ݠC΢?r9i|?Wj?P;qL?)?S?B(?g?q eS%<?svqgng˟"vT 4?m?q3?]" ?b݇ ?Q=0pc4b{2?T ,?Lg?c+S[jT?80΂FwR?oW?F凞s_?mKAAoq>jcu{s,y8@2-?ZtP?X$D?Qqmy;?rRjWX?p$?b0v4JP?t|?z?W}s?>?^A?#4bh??KQ?D#6`?RvSTP?l:?PoiIE?b\P?LX$c W?{d?Ƥ;i]Q?P't?P'.q?Q?H֮QB<5Cv0FrS&V?d>2?c2`PpP1=]~$?T#?e%Pah?m 0?Py??g=q.?Ej[Sgl?n?reڰE>q@qH$Lm/p?Up?c?p:0u~sC?xzh?a?pgY(?d ?sӛ?u Pk 0?Gn?pjU?r<T\}l0d˰e߶@TS62@jG9^?HXI FoJ9?t$r^4@iF[H?ld?k골?dp7(?\un?a/$?oQ?s?X?KF0?n.vln]Cm3˸78K<q)?n-;P?l8Rr?`g?k>{?f/ ?F'^1`PsEVhr?A%,?pH<h?dzX?M0{TE@@{?j9H??/AsCL?aq3?N?iq?r?c``?BAI(?RJh?n?zV|?v?"t?ft?el?9?h/i?^Z?]g?u18?{9s?fM< /0~?R=p|ehZ:`O rPnPyS ?i?y:?p?ye$?v ?.q?jܐ?r ?c?pL?o?k\uB f Zv pl?PK|`<q}?a¼mݟp?S~=*@?s& ?s,?F?Fq}]>j?M0g/H?a{?Rb?Y?aPRPSڠ?Tz0Il?b&ŀ?Y?c&iK0?ZPhT}a$?aD6ׁ=h?yQ!?u`P?p~<'@?NhqJ?p@?Mo?[ +ň?pEcX?wg?pvZVk?<?NRZQX@n[yg<u}"k1lpsYr?uUt?t$'?h#)?d?r"`0@?_`?aR?(@l rfu?aR}?g a<88]l0tٜ?KR?U/ >&UHglc0?20D`?iڨdR1?h+@q$?:X@J2a`?k98SO0?s- ?lt l0?p9A]&m:J@?*Il?ra7n|8P {~x?_ sSW?#qOx?pxyvvg0\ ?Cb?px ?y?j?D0^R s=G?s`?b_*B3>]?di lԻtth{(۰cHv(hzlzYb̹PpI4Aؠ?ec0?m;?toZ? O?w +njwV ?lg?p+p~p;| YUۈ?bhx?E:@` sA|f~?LK??=s]30?(?rn?eIIiˆI@`urp?q\pj ?t[+?eS(QL?e(ym( +RCw?b0H&wxy)8eo0p?(#@?i10?, [@&?, m?W^K՜?@Zp?gg?<2 ?rtH?Wg&wNRb?t1pK \c'?w@vXl=r}?9%?^#O$ ]8rpwh@{@?{x?y8C+kȖ?qCˀ?qT?.md YYޘcV4l^"?e?A0TdW)H?LPfѤb\=jG2?O + ?uMfq?Y~<Ao?yƬl)P?uZb£@?ESDH?V}0\?o?jP?x: h?kK\d6j0tq8eJlQV?y?g(p?jS?kwԢ8{?j?`&?Q?YL?o\?imG^j^`lb?_^а?I,P?t |bal(X9iqh?r\?C`Y ?sRPq_rJ`?[ 58br>?Euq`a`svs?[ +?s?pAd} R?rNF?G%p?s?F ?g$(_%,?=?ry?qFD?goq<\k7??pAsrdRuF?Iu,X?b`?j|?l8^HdP?p A%?U?aU?XN,?TQef?jZ?bb[TS?LnSX"yp,?`o0c͒8B?ijwHAs4kw9i!?4@nkwp[nhxwj8hlP\O?dgbWc$?BVg| s?N}?;Ӏ?4?9N?e#k{?M6?D v`;lYH?^AېN NJ@?r蚪?\5?]Ҁ?}?1?q."?\%?BH?laa?r/g?KmfjbQ?vK?:P?q}?4?dH?z@m1i@?eF?e^a?b҄?c]-xP?gp?p?jLfp?OkqC ?ctsx?y$?dI'?r?bHyQLy""kXbO`xx4L|}} O?b=ذU`GS `gtX$`?\gTE@kePD ?` 8 ?k@?P)XT`?hx1 ) ocd(jk +? ,?u?utTn]&r&R?$F@?P9{)`iwSi6?.ҋ@?A1XG3h?k T?O r ?r>*@`IT?@hpd B?dp>?7q(?^:?.?u_?N8?j$?u;Zf?d Ѱ?pRMt?n?J8?Zf?`ՙ?b|x?dD{h?NR.j`\q@?j-?v)j?eR4?aZH?[d+ Z.Omyi ?[0O'F`l\x1H<@?\N.?7N1@h"pF@?M?l|?iTT@U?a!? $?UK@fr?S??a7{r \@Pq@?xs?{P?LGtH"?D0?gtnjlj@r^Q6?h?\%?O?Qy?l*? +1l`lXh?rp~q\?Rj[>hluTer[рatڃ?K, ?r4*?h?tAۆqROL?q?78?]#0`|V?P?yX% \*pT]?[3?P(?O$@?n[u5s>Xr?S6u,@L?Yi?r{4!@C>q<`8?hX?jh?r|?`q}?a1`?jE LLf9_d nV?\pHX ?Nd?j@?Ej`a ?m4??|?Qި?e?e#`?S|`?mSdJ{a__kh?f̫?wmTbǹ8VLYZ?tٞ W @?nd,?5 t5 *d7(yqy?f)X?R?s:@?wȏ)? F>@Y?cbLQuD@X'PU=h?WJp?b4`H?g'Ā?xN?w<?h᱄?z +t?jP?kP?w=(u?eh?pl?s?l$?u?ehefm>prML(F?l3H?QqH?eL?g>&8?pBHJ/?P??%^US3p?dgJ@p8[?ctL?&IJšgYkp?0F8K]@?oP?40?~H?"E?m/I?rY?q +?gР?^q p To?l:0?lX?n~J?ejTFL?AQQ,H?Qch?h?Q\?GՀX)?S]?gG0?u~l?r ??xgh?moAVa?N/18[<?k|.f&?tab0?f?csH?uؤ(?b0r)X?q6?rب?yP?jYU(QPR7?k w?`r?aJJ0Z}I?U,X?iq?Aop?Zޤ?w?w݅?bs?T/`t`uڜ`0cG0?a`?Jz?R?kL?_s?pA?tijhPt?n13?w-?lWy9Eo PJt(X*H?Bb\?f0?a4@@?pDJ$?j;H?m~fɦ,?@?7@?o:_BvD|Z?{to?y0>?Z +(?]C?i΅0?DMK?b1?bm_?tJe0?téw?wsW?o"?uzX?QX.0,) sCL?kmH?Mu߰?k?kmlo9(pa?c?Lpv`g@?Xp?V ?dq?l(?T?Gp}A`tyP?<?dg?f@7?VèyVθpƍ8b0r?0U?cShW`?F?Q(<?V8?bHp?ZK( p-?r @@?oW1(?io(?{ +?;5/ODOxand?AY`?_%?p/E?BI8^R$S R?c,?+B?xؽ?kp?5b`?h,=?o?d?$? ?uE?h4?P>>?p 8?v-s@?fW?qrRX?wG~u?}T!?K1" ?XgG?aRE4@?z?Q?jS?jqPP{L]l?^?U"c?uh2cSvu\.2A`?:?i5TPw.wLrvCf ?\T?axW?e:Q`~^}M?WP`d<?V~?bWiJX?RJ@PqLL?d,mHJ?\8?0X 3/UTP??9?a(Rҙf?_8? ?B=?32 ?zJmN?p,?d?`??C?wH?pj?u(?p?jP?wNW?pU?LEB ?co!?q44 ^݀?k^hG??e ?ewhHmD@?SīX?e?cpdonu fOyd oSTV|bt:a4f9 `Yng@?E$p?Sٱ?Wj?tM?rw`۽|>h?R0?iX?ExiX ?gy4?xc ?9pS(?eGjQ ?W8j$_n?fU%7@?Mcfw?V rt?x4t?~:$?pY?p&?NB??{?G?@?5?1?ˇ?㧀?>'?o$߰?f[?{X?{/?t2?vC[qB?VG@^ۼPm[jTD?F.ts5V?@< ?n(?d@?i?c?R (?)5k9cq ?e0?X"d-$Ch2ٰoC R j/:(h)K:?;8:?2?3\p?r"7e[po7?SG?qAp?qX?m?B j8`0?it?N?pCU8PF@m?G^p*l?p~?l%pH?zY?y?N2?=~?$?{????\?z?jQ?8??=@?|k?%'@?m?iH?py@?xuEs?xJR?sv ?c?eL"?deQddZ`?F=@?VR?xK:gcrsA(?UkH?`W?b5@&iHq +hn+ԄKa(?bo?tjX?0b7?eEp2MZ,zR]9?I+0?9@?j?\`?u?@x?c@?fhq8*?X#K?fG ?zo?jLd`t?f_8?.XRx?7Psr6?:Ō(j h?a"?38b~?TG?R;?jH?}F?}űT?vҧ?8J@?y]?y>???"?-?<?B|??8t@?wmg@?BY?̅p?z5?h +al+m?`\&?f2v?I?i\?b)XPyW4A@?m4?xD-qXV-?g(P<?h'S;@b?$1? <?dB?@c;|?dW?b5?1t?lgQX?S9j@?Z] 'j?KyS$o q.|?%J?y9?Rxqq ?vK?SLrB*&@ ?yum{t.R(x?FW +PG~">m=?v!?Vn?2p?fӨZ?j:~z?bk?k5?d ? ?C?]P?p?q????0??5?'?h?og0aQ(d̑y?r?e2P H*%p4{ ?jx?am4?l??cS?xT?{d?mr?]ߓ?^^`?r0?q\S;v aHa?<@ ?^uPQwrntxOy@?n߈?7?U?Km`?Ac2C?l2?o/e?U2?M?EZ^@@a#L pHjˠ?TXZ1qnkQcPX1\0^h?^ڝ?r@CF$8?J?I ?gqT?s8[?o`xh?pEa?z ?rXd?od?[#?Ԧ@?a?x0?C"??@?j?5h ?Oup???կ?S'@?-?x$?j?p-T?yx?t`X6kM?s>U(PK#R{?rx? No?okP?g?`4?i(?Yg0?Q ?\4@3fy`_@`Go`l\E0?|t?b?q?hU]?V{h?}9?m?l@?IneS9([dʌc(UTHb Kg|JWLq>?gG:p?rXp5L?6?aJ?b>{|?Z׀?oP?tWB?y/܈?}T?y?/?%?T-?M?鳆?8Q?@?E4?GO4?#???`?á ?~c?r?d?b?`?F?de ?XwdQG8qZQ ?w)z?D89­@?<?SIPf6|?lĘ?pm?bUiX?t?aLOh|r?!f[΀?_?i姰?Qr?x_ (?oh?z@?F4H?g@Yi`xXn{f8?Us?jqzrh<pyjw)Pr9N"Nc `?`E`?dT%d?s|s5?5gk` ?u?R?m?pN?} +?j0?z?z??hv?=?Ξ0? $?UA??Z?)F(?@?f?]Ѐ?2GY@???~?p?r\?h{( ?`CD?Gq>x?Dg.?Gm?tBN?WQ9V`XՐ?V2NX ?eK?bpvP?C?{3?p ?Rp6l?sơ S3gx?Qzu<!G?v`?a?bhTflKw rEePxs+:}@?_p`9 v2Q{6v?RըaMkx?Q<?kH?p!dP(?b?Iq?w@@?;RR?_* ?cVB?cƞ?~O?t?Ht?tN? V?S`?%6#?W?A(?w:a?+?2 ?䇪P?g?=>?X?yg? ?)N?/?@8?gE?UR?bn?rT@I?pHctzD8h?Njb'?R?`?Cxp UW`v][5V?st?r@?eG H2cpk>xT +st$?q-}h?8wRI`ms4Xl:[XpP~!@w@@q0L?ex?]%?CA`ka+׬?rG?q?^xNQ{ ov?Lc40?xɈ?f.ZݼH?,_ ?aS2X7b-?2?rr??M`?,<?8I`? `?.g\ ?|?ݰ?ɣ ?J: P?RxP?+EQ?P?~#?ʹU?;|?"r&?6@?x?d(?o1p?A@?dC)0?t?uy@?u&@?y.Z?U,H?u, ?]0Z|hՅ0os<jf}H?Ex?c!mwprhZUX`j}pPI,N`ƀ?s?s#? J݀hS l}\'Xf1`ta! ?9F@?r ?_?d?S8pcH?p?q +P?-Hg7:gb`!,?wλ?uf?j4?S]h?f`?x5O?MQR?4?Ā?ci_? `?1T?Y ??e=?h?u/x?̄}P?``?W? +?Q????\?]9?,4?mBр>Ւx`??eƠWK9a(?u& ?p?L?s\5Rwpt=N?d!?B liY?]cv0rg4i#[@srU; ?zyrdW A5?Y`?q0 ~{i?:*@?>P>d?.?z՚UA`?ynWJ?} +?Jæ?I :?5o@?Qׇ(?M?nm?iObvV\g?L?3i?|?[EU?H?Ɏ?)?R?>?a/?b0?;0?IbP?2?ͱ?fp?G? ?,?;U?Mt?x?P?z?{g1?R?jP?v5 +d?pov?_?o0p?gq?78?Z(?1T?h`? 0TX`?iq?3?@?!?q4T?t,?;ZEuqe Fo?ej?s??>v?o}?gΰQ}=FIW?i<?{K!֓@?m}F?ok`?i=`?pL?`?fQ?ZCxk`iy?T?cU@Z'`iqpep?_N??`?ݟ@? @??Ej?s V?S @?p? *MP?w?k>?y??f?0?@? ?z??%vl?xlC?y?r26X?|\H?lv@?R$?{mk?y1HdQ?uUXS? ?F?sXejߵ`a`?C?YdoM2?h#?hj?ryzhA"shVI?Q`?\GP?d 8?ki@?hBT@Y."L]?>?m(/@?sU0r?m<lx?T5?Tø?f0?s?[(?O ?hͷP k0P?Wu?C<?agb?}~?W|?U?:?lo% ?3@?%?p?!?J1?&1P?P'@?n;??ː??a?q?+??׉?)?}Q`?|??pΈ?r H?w?Q<?$_?plw?@?eX a)?gHp?L7?@]. Vݚßtp?:g?t<?b2?AryXzD@iZl(j ?/?;y3GD&XZ(qc(ߠn^?a?l2 h?fqH?k@)c[`bou?>`?fa|?y?,JX?h}>X?u5Hap@tUTp|A?M +?y-Έ?`B!?ulx?Nn>?.?lB2??Ԏ`?o2u?^@?}`?+?&P?8s#??@?M?C??r?t?w2I? +?]>t?yR ?cP?J`$?jP?k?ZP?d/?l?chPueX`?sE H?`pH?lN_f ?O?c?E5c#g`oehaοPv6xh 08?0ĀbH4 @jryd:MJР?j?y?jX4?s`I eΚ?Q jR ?WwR?Mc?T#`?F6iXf\l?L?a>?p(?ba`?a?R0?n?X]$?$e?_"@?;=@?u??h`?fT ?7?=A@?&ؗ?l7?? {?XW`??S(@??r?~D?ՠ?t(?eK?wO?y?o ?`ikcTp?5 f@oPp㊠?k<0YQu?sIP?{^ ?tT?\ΓPhrR2?g`?Gxdt}q6<cɨO# ?FǀY(?dv?]Iۘl`s'ASFlWp?oD?r?X(Gv?m1p(?fCxlH\CO ?_?t;?f@a0`<?dX$?s#F?I?sg$?d]?%%)?'?, +?ұ?ct?gZ`?`?L@?xu@?d?H`?+?~?tz?{?D&`?!?L?y?RD?r +q?x?x?ND?mjb?o??J:*X<@cpV?r?o3?B- ?^:x?f^?j`?U2nx?Qw ?_h?dK@?PC0`nd]ې?m'QP?f2l?^h4Yѕ?mI`?]oFH$;?PDwPuύtw(l?] @?^|p?n*P?l gaۆ0?u0?z0dalr?~?x ˨zetFM(?d?RpE!*?o??k?F?3ʀ?} ?p`?ܻ(?Yg_?*oe? ?@uZ? !?ӕ?i?{ݪ?s?yp?p&?f?s ?}&B??|?I3oo?LeYX"`_G*s?b?Skl?#?uv? +Cx?@HC?hJ?E=`VI`?Rzh?Hʫ?f-\^?m"?Kq?'UYo@SO?[Ƞ?M?@?11?\Ʌ?nb ?\kkpr3$o0O?y7?}?df8?S 0?~?x OJ?e@x?mހr"jnZ\P?g88`?FrQs:B?Z?(?@?@?̀?R?@0??.?.I?$P???z׬?u"t?isQ?`?i4uP?Y@?pP?u?s/+a^I?eh?oà?t +?[#?yji?]?{̛?b2?{ ?Z ?\k??k_hCq ,,?]uv8?aBg<`K'pfX?d?LE?7[d0rL?a!M!fÏ`?j?g ?gL@?t 0@R`?q9?b?EMd ?z0l,L?x /^(GF`HY~_Smdm_f`KHHp_X?`$?~ 4?]I?yѿ`idPYP`??5?q??y5?v?z?s8?s&?Vc?p J ?rhb|?ON?Z?dwe U@?ni \C|?sP?WH. W?BG?bOM`Bf:b?f3X?S |?g ?LyOObP?"=7?BG@?x?Z{pb[f?j?k{Tq @d:`jS(qdn?^fIohr2?g2?cBlQa?%@d28ŀmh?a^Pa h?Lt?z!- ?xioPy KV T.qltkx?O@f-?Y\Kx?t}:l0|͠SUNߪ@?\ E?oPH;=?r`t +R[@?xPP?pr_MX?Tգ?p?z5?x$?Fz ?.p?S2H?M@?A?el?tB?dd?>?]dߠoVФ}B6?1?{?p|?j?sӌ?{j?x?C5N?np?_WoR& 2'?t?V?n0<?W8Ti(?gOq6?vy,M +1`X ?EiPI`aep)l<)?f7?\ +u?a@pJtk0nH4Xc=L?"6JQ?PT?U:?w?rP;TySlR?L?ep?sM ZX``Jv~ OTx?y+a?h?f/q%_^]?{Ё?d?E,s?xYmJv0?Ukb_?^ +?aTHe`?u?nמf>\[=?~Ŋ?^5?%O?vzX?zll?x/ ?s2QQR<`?I?5?qHCC|?d8 e>~HziѠ3s1:?Va*xD@L Y?s;s(8io>:kȌz 1fjZ/yYgvpv8hi ^r!\P@?\%"fG id?=?|4?{n?y?i˸dydvkUXW0?:$?ntX?kV(mhGOq`?-$j a L?X^?ir{d?CDs?Xh?17V +?DDzS]k\(cb]?XFP@?s?zc҂?S ?emd?s ,?}G?~Y?}x?rn?Xxlgz?Kpgd|?zX?V[Jqbk0}??@?|!?I>zJ?s?8?>L?ljV?,gtJjb8=d*P?lT?r rn: d(u;t|t?V1l?)?b?0`H`E?`I}?u,d?sfCG0a_)Ih?qt gh?tO?q?_:(?y4l?@I?vo:@?]V?aLnmtS?Ynha0?Z"?z&OZx?cu?ki?m?wzH?6voȰI)?e}(#V7e`?R\]h?1?e]?]KP?pcH?i/?aٝX?EhwGku`?/o?bU?`?~4?|RF?sy?uڷ?R3P?3{&d8s,?p|?bNqRXY 8?9q?} ?XHem\r^cf?R8?g?\Wʀ?V ?U=^]6NW'y5?$`^& ?g"?oOCH?aS?z?k+?O?jiB0}?aP?qk@?oc<S_J"?b~<π?RdJg(@?t1?bש?^B@?p{?qY" aP?~?uk װ?kEa0wȡi`;G{n>?MC- ??TB?U,RTXnٸpf$?hv?gɶ(?BX?gb]~Bq:Ji?fď(?4\jӨ?i ?nfW0m`9"?mR R=Pa>nQ)?g.?jVo^q$.aFږ?t/?_MRXhs?2{L?S Hpj5q?p!ۀi?X?y(&?l%P?Ulp?da00t?aͰ?z!4ih84+?a6pȋ?p@?dP?_y?UB?q?m](?6f@r( ?mҸ?3rh]D`kr?`i?f(i^i{XhKr~i0@^ ?fP?dp?V??fZ8"^,w8`?T'PPrq4[we?ydZ(?tJ^haHU\Ufxmb]5exjteOlq>U c$hQ;j{aG,?U-?hw?a?G\hd$6?O@X?ZF?a4b?1 ?P?i ?\CrdUP??u?m?RuH|:2?cC=,1D?j4?3?[ SN?V?g*@\`@e"?0jQ=efqv}7fuzmPe t(rj ?K5VL3?@j?z8(?s6?bx?*4?QKŠ?_p?c?KJm`og8`?qY?p?Un?mf?Z@3?Vmcp=`?mc!x?\Y:?:{e3`!P?T~Rr?qbz@0?vT?g"?t3?JC8?k8D ?nx?Fq`?Ig3a_`:T0?sP?tiWS`\`T;?g +X?m&n?jy?X?lpi2PjfJex-0jkP?V@?c(?I' ?i8H?e0glaM@W'sذV:BY Ui0?T [OPP?W?ODPxIB`=X?h!?b\<X +0?5@?e??RHP?]cI?A[O40?l-ep?R (]A]8z?K7JT?mbD?U{pg"?5{@USp?P?5ĀpF?q`?s??_S?c0e9ЀdL5P?f(0?gް?m?l(?<,ueA%?_H?r@?b?!mQx?HC?_cw?n>?s(?ai?uX?zt?tPL(?i&`D3?WO<t|smǐWt{ oW?5 r +x?t?i8?B?\bl|?E0jB9eH ?nqV?\)bBf!??Q'+]G`??QH?eH?rW?8?Cig8RB?p`?0ۀ?a>x(?q?gU??a" ;o?Vi[?n?~P?[7+7A?yJ9?z?%G̀kxl pVPQvX?.?P2#PK8ŀ?ek̰?f?qM?ahgHbmh?.ʎ?W?OM?q,l?qE<?v1N?nT?5 ywL?cKaP(?nYd]Lnj?Pf?V\?&@?`mqx?9O?kǴ?}!Vb y~@?`$?cF0nZx@PX>zP?`Ā?l=4ny`!TKhX@ #ds:0l~lg_ph=?0^u a9N?8?``*cWl?`/?^|h$-?Qi?bƔ?oc?u?r0?^&k-PmG=1-B%i?3h ?O \?F?G#h?ZTTh?`%?]kF~:N@XF<,n?_r?S`8@f7?`+?mW?]?>ĘaP(?`x?pmX8?D)Dp?Rt#z??]GZp?f\?hl?o S`?G`?P?`=CC{eC?S'?i?uW?7ː?w?^[z?e9P?ba3Q sq8?gd0?k1s8Y@sNr,?[H?Pߔj&wpV) a ?k[4?rh`C(v-H$b?HP(?V?[6?Dsp|?pb?v7S`_kڪ?i?HBRl?*E?TkqX*c^ht\FY?fzO?V'@!ـ?q|?fv?OElLd?aUo0_?]9?g!Kx +c@RAp@?kt?fL?1GY]B[G?sC8xM:?Zd]S`?O?r?cqnOH~?r(%?kCxv?p]Ǿx %|5P^r?\W8?qb?i2?`@?[WUP?amPWA?E;eDvqR؈itp?VH@?l8?e?rm02?JU8?tw`?rS ???qe[$`Lz +sa4m |4mN@?K i<2`?9;M9@pC[ cMH?Yv?5i?p.r?u,ܤ?d?J@?_Tg8Yr`w-?Q筰X7@g:?ag?\qP?b@8?rRQ"yiaa?d8Mp^l\|/?t?dp?peu?P[R<?P{t?Rz٠]ٔpdn:Y* {sUNko?]?qd?pj2?p2?~)?n p?GP?`OQXzlaϰ?rd?e ?nLE<?b ?pwd?v`?]ki=?D`H4 ?I 3Rpn0[_5"빀?sWl?a_xBlli h0@mdP\W\@?fX?ot΀"@q^P`?]M?F l?^`D?=$`gy&Hc\?sª?r?Q?Lcְ|Dzshi8xlL>rfk?Z(>͓?Oz.?qW D?oT?o>jd?l?V?*݄ 7 ?5B ?vD=%P?1 ?WK?S?B%?B?$ V?vl KiGl<u8Q?Ac-?afr`$Q~?p0?i?j?b`?pz Q@@ZЗxgK`?boHUX`?|Ð?y(\Ti@pbLVP?\D?X?c.?DۂCSmN`|tZ̸?d?pD?hsi`D?j?f5PYm:0?G"`WH6?[Q8UDusX(o@I \Tc?O6Pus86?Z}0?y@Nz`?qw?q@D=Pbmt?7(`?Qb?f??~rV?8g?av(PFUH?` MF?ej?63papnT0?\\qR||=?X0?np`]:eH`?=m>j??q?=Ҕ`bLjTb۝<?Kw\LHn"??d..L?WBp?ݜ?u?b?rsT#0bUSg'hnR0g$?j?fPC%?)h*e?oo(Oy 'fS??D?[xPg0?!jGV]N?jV{M8qlfdp!Վ?uOz]evDLPLh?]g?o ??, ?v8r:#@?p7?sb4B?Vg?=\xx?VvT?L0g$\{nwz633@PcSh?)yGCyp4P@?|cc0zr|EyBeW?40 KE0e(rpv^aVPrs +?J3?h?{]?u ?kvcP\|0R9;?rVX>'[?Zj?e0?Xx@co2?re9D@?[?Yۯ0?xET?a0o*e0<?aGP?vC4ifxͭ^+xA;8x?:``?1yPj?1?o3pfp?hIpa+?Uw:`?n.?p04V?xos=RkqjJ@vqyh3!`EkaYf0?.b0?ah?R?hbO(?t ^J?Ih?|O?]8?Eo?_@'?>|]by^oCh?%C?tu?SOg?D?_1? +Pf+hg~֘h?Wr(?l|biXp?jU@Nê`?5`sBj!oVpG( ?P?_`?p9?s?[0?wJ?q h#Bz ?t0h??os?p.B?kd?jBpWOpH$k$;?o%x jBzR|xh?f?; ?_?V ?B{ȠL?Vyhc@G$?9?!W%}?@ҷ?BӚPu(wm[hw?kW8?kI?s ]6Z3b(^)qw(?j'0?sTx?A`M@k@?mYP?Rw,Z`˰|b|bV4P?zCr?r%j?6=@?K5h?Tg \1{8nz<,5@?`@X?w>wi-8?pTwliQX rqJ?ZfP?9?$?D)1= ?K?IcG ?rÄK^?,?|֚?yt?b*?S`fFXt^l6 N;P?FVj?25?CF?s?vky Dk@?VސT&ߠ?0MSd?Ux?by?pt?b7?3`S/ ?RpY:prxrNXtV +5ڟ`?U;?P{o6aU?S%?e6?IX?\so?pp'H +ZBנ?y?jش?D9@?o?w0?Y B?v ?` d5Bx?y[e6?cG?j] @?j?vCxEe \<mg(Dex?~?o~?%)8WZ ?@??Y55pkɾ?\?Qx(?`ji20u~b9@?QB@?aO=L:k4I?iP?h0?gOˠqxm xX3Y`Wz?p?o㙬B(;[eHt[hHbXXy`{HdHSf?[?{$I5mH?Lx?wz?vN`?pi?@`?7K/?[mtg@`4^?]?y{?z?p.i?RJТ8,?7Va@?`m'dQ?VNh?qv +?K ?v4?D0vw|qjtN@``?Y?j!?:t Xo`?r?P.hp?Qԓ?QK?M4 frc[d"~pd`z?@߸ ?f?V۸bC1@/@cB[0?^1`?^KX?j-X8z8xewFXH0?P>?c +?fM?6@k$j?E+`?,?a ?V`UXHq)?j@{O?nȘgKV@?n6?qa(?h O?h?h@?m Upazp prz?@X?>`i1+Vl?^E?g`?k|s?uAUEbFFh?q??uwxk7? d?_|bu ss Ty`?Gs ?M`?'@J`?g?`.?`ń|A?nG(?R?<?`]@R?tzc?cU 2C VŃ?U[%?U fZ?=Q ?vu8?rT?"=?yZ(?STԨy &aqH??\E?pH[?ji0?m|oHX(@?=?`6S?i’lp{`Dn?FvWph@m?$?Pl?To ?W PXh8`{ny`b}E4|hKh;tj@M:?kc?y?|\?tHl HyVJ??aZ~b@b>L?TF?lK?t?" @puU*k@f/ ?D B?j`?NN?Y8?s?pZX?aʸ?fi8?mȜ?Qڰ?HG?N?`SR?gz+ ?BrX?: ?cVL0?Tz(?qj?9 ?P|h@|S >ڀuRLm3?c6ז?e?SnP?On?Z?C?nLY?o%?l?dU(g +e?`&lUMfTY0?Qd?d?qn0jTv?gmP?f?%v01ep??N?vZMr@?fp?cM1Ā>@?o2o?B" }b{d4??a0F A֠?o-H?` \?th?%bpaqr6B0?c1?l_@?b0?A>`g(b"?r+P?k?hV?d ?` `?Z~c>@w:`C`?[@?c#8P?5j?N @?%u?I?0bO(jnmcRxs&:}@?v* Q?^R_f?f_d!whh?g ?7?{?]p ?gzZi?Srbtiojc?N~c?[wE?_sa0_?#k?l ?lp?WOH?r?_`uor#8gL?5] ?Z<2?L܀td(P}p?PJp?s?fP ?Y'?U(d gd?d?lcH?7?WF<?xt1?T?mds1Bur?@?Wa ?f $(LɅpR;Pg,}TDct?d?O?>tV ?7 ?p4pt?J4?gK ?{=6?u7j?h ?6W?eӮ?e?Rta8?Mp??2\dp^4C?}v?`^P?k?eppfުa0`??p{ \?w\lSozpKhj0?nBP?{3?/?Xe(T@u1xqj}(h?aRP?Bp?Q?nk \ No newline at end of file diff --git a/data/galImg/gal1.fits b/data/galImg/gal1.fits new file mode 100644 index 0000000000000000000000000000000000000000..6192cba9afd5c61b81ba63d05f4e09cd646c135a Binary files /dev/null and b/data/galImg/gal1.fits differ diff --git a/data/galImg/gal2.fits b/data/galImg/gal2.fits new file mode 100644 index 0000000000000000000000000000000000000000..eaa99e7405f6fafae55edef40baa87ca64bc67e0 Binary files /dev/null and b/data/galImg/gal2.fits differ diff --git a/example/sim_demo1.py b/example/sim_demo1.py index e83d1dd8f64d5da74d3c1cda87cd109cc2067ce0..1eca1da3dc1c2b3326f2fb97f65b07b49c7a6b4e 100644 --- a/example/sim_demo1.py +++ b/example/sim_demo1.py @@ -1,8 +1,8 @@ ''' Author: xin zhangxinbjfu@gmail.com Date: 2022-08-18 23:13:26 -LastEditors: xin zhangxinbjfu@gmail.com -LastEditTime: 2023-02-24 01:05:33 +LastEditors: Zhang Xin zhangx@bao.ac.cn +LastEditTime: 2024-08-28 16:50:24 FilePath: /undefined/Users/zhangxin/Work/SlitlessSim/sls_1d_sim/sls_1d_gitlab/sls_1d_spec/example/sim_demo1.py Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE ''' @@ -23,12 +23,21 @@ if __name__ == '__main__': config = Config(dataDir = dataDir) sedFn = dataDir + 'sed/sed_44575.txt' psf = galsim.Gaussian(fwhm=0.39) - specG = SpecGenerator(sedFn = sedFn, grating = 'GI', beam = 'A', aper = 2.0, xcenter = 2000.,ycenter = 5000., p_size = 0.074, psf = psf, skybg = 0.3, dark = 0.02, readout = 5, t = 150., expNum = 1,config = config) - specTab, specImg, img, satPix=specG.generateSpec1dforStar() + # galaxy sersic model + # specG = SpecGenerator(sedFn = sedFn, grating = 'GI', beam = 'A', aper = 2.0, xcenter = 2000.,ycenter = 5000., p_size = 0.074, psf = psf, skybg = 0.3, dark = 0.02, readout = 5, t = 150., expNum = 1,config = config) + # specTab, specImg, img, satPix=specG.generateSpec1dforStar() + + #star # specG = SpecGenerator(sedFn = sedFn, grating = 'GI', beam = 'A', aper = 2.0, xcenter = 2000.,ycenter = 5000, p_size = 0.074, psf = psf, skybg = 0.3, dark = 0.02, readout = 5, t = 150., expNum = 1,config = config) # specTab, specImg, img, satPix=specG.generateSpec1dforGal(s_n = 1.0, re = 0.5, pa = 90,q_ell = 1.0,limitfluxratio=0.8) + # galaxy input image + galfn = dataDir + "galImg/gal2.fits" + galimg = fits.getdata(galfn) + specG = SpecGenerator(sedFn = sedFn, grating = 'GV', beam = 'A', aper = 2.0, xcenter = 2000.,ycenter = 5000., p_size = 0.074, psf = psf, skybg = 0.3, dark = 0.02, readout = 5, t = 1500., expNum = 1,config = config) + specTab, specImg, img, satPix=specG.generateSpec1dforInputImg(img = galimg,img_pixel_scale = 0.06, limitfluxratio=0.9,deltLamb = 0.01, pixel_size = 0.074) + fits.writeto("specImg.fits",specImg,overwrite=True) fits.writeto("DImg.fits",img,overwrite=True) specTab.write("specTab.fits",overwrite=True)