From fcfee6779e4489c6c012cbe7adad3c6793e9ae9a Mon Sep 17 00:00:00 2001 From: fangyuedong Date: Fri, 26 Apr 2024 18:28:29 +0800 Subject: [PATCH 1/8] delete .coverage --- tests/.coverage | 1 - 1 file changed, 1 deletion(-) delete mode 100644 tests/.coverage diff --git a/tests/.coverage b/tests/.coverage deleted file mode 100644 index 27384e3..0000000 --- a/tests/.coverage +++ /dev/null @@ -1 +0,0 @@ -}q(U collectorqUcoverage v3.6b3qUlinesq}u. \ No newline at end of file -- GitLab From fe70f3663a82a736eed042bd3a2142fdf48e2aed Mon Sep 17 00:00:00 2001 From: fangyuedong Date: Sun, 28 Apr 2024 06:41:15 +0800 Subject: [PATCH 2/8] add unittest for focal plane --- ObservationSim/Instrument/Chip/Chip.py | 1542 +++++++++++------------ ObservationSim/Instrument/FocalPlane.py | 69 +- tests/test_focalplane.py | 31 + 3 files changed, 838 insertions(+), 804 deletions(-) create mode 100644 tests/test_focalplane.py diff --git a/ObservationSim/Instrument/Chip/Chip.py b/ObservationSim/Instrument/Chip/Chip.py index 4dc3563..03532ee 100755 --- a/ObservationSim/Instrument/Chip/Chip.py +++ b/ObservationSim/Instrument/Chip/Chip.py @@ -280,774 +280,774 @@ class Chip(FocalPlane): noise = self.dark_noise * exptime + self.read_noise**2 return noise - def addEffects(self, config, img, chip_output, filt, ra_cen, dec_cen, img_rot, exptime=150., pointing_ID=0, timestamp_obs=1621915200, pointing_type='SCI', sky_map=None, post_flash_map=None, tel=None, logger=None): - # Set random seeds - SeedGainNonuni = int(config["random_seeds"]["seed_gainNonUniform"]) - SeedBiasNonuni = int(config["random_seeds"]["seed_biasNonUniform"]) - SeedRnNonuni = int(config["random_seeds"]["seed_rnNonUniform"]) - SeedBadColumns = int(config["random_seeds"]["seed_badcolumns"]) - SeedDefective = int(config["random_seeds"]["seed_defective"]) - SeedCosmicRay = int(config["random_seeds"]["seed_CR"]) - fullwell = int(self.full_well) - if config["ins_effects"]["add_hotpixels"] == True: - BoolHotPix = True - else: - BoolHotPix = False - if config["ins_effects"]["add_deadpixels"] == True: - BoolDeadPix = True - else: - BoolDeadPix = False - self.logger = logger - - # Get Poisson noise generator - rng_poisson, poisson_noise = chip_utils.get_poisson( - seed=int(config["random_seeds"]["seed_poisson"]) + pointing_ID*30 + self.chipID, sky_level=0.) - - # Add sky background - if config["ins_effects"]["add_back"] == True: - img, sky_map = chip_utils.add_sky_background( - img=img, filt=filt, exptime=exptime, sky_map=sky_map, tel=tel) - del sky_map - - # Apply flat-field large scale structure for one chip - if config["ins_effects"]["flat_fielding"] == True: - chip_utils.log_info( - msg=" Creating and applying Flat-Fielding", logger=self.logger) - chip_utils.log_info(msg=str(img.bounds), logger=self.logger) - flat_img, flat_normal = chip_utils.get_flat( - img=img, seed=int(config["random_seeds"]["seed_flat"])) - if self.survey_type == "photometric": - img *= flat_normal - del flat_normal - if config["output_setting"]["flat_output"] == False: - del flat_img - - if post_flash_map is not None: - img = img + post_flash_map - - # Apply Shutter-effect for one chip - if config["ins_effects"]["shutter_effect"] == True: - chip_utils.log_info( - msg=" Apply shutter effect", logger=self.logger) - # shutter effect normalized image for this chip - shuttimg = effects.ShutterEffectArr( - img, t_shutter=1.3, dist_bearing=735, dt=1E-3) - if self.survey_type == "photometric": - img *= shuttimg - # output 16-bit shutter effect image with pixel value <=65535 - if config["output_setting"]["shutter_output"] == True: - shutt_gsimg = galsim.ImageUS(shuttimg*6E4) - shutt_gsimg.write("%s/ShutterEffect_%s_1.fits" % - (chip_output.subdir, self.chipID)) - del shutt_gsimg - del shuttimg - # # Add Poisson noise to the resulting images - # # (NOTE): this can only applied to the slitless image - # # since it dose not use photon shooting to draw stamps - # if self.survey_type == "spectroscopic": - # img.addNoise(poisson_noise) - - # Add cosmic-rays - if config["ins_effects"]["cosmic_ray"] == True and pointing_type == 'SCI': - chip_utils.log_info(msg=" Adding Cosmic-Ray", logger=self.logger) - img, crmap_gsimg, cr_event_num = chip_utils.add_cosmic_rays(img=img, chip=self, exptime=exptime, - seed=SeedCosmicRay+pointing_ID*30+self.chipID) - chip_utils.outputCal( - chip=self, - img=crmap_gsimg, - ra_cen=ra_cen, - dec_cen=dec_cen, - img_rot=img_rot, - im_type='CRS', - pointing_ID=pointing_ID, - output_dir=chip_output.subdir, - exptime=exptime, - project_cycle=config["project_cycle"], - run_counter=config["run_counter"], - timestamp=timestamp_obs) - del crmap_gsimg - - # Apply PRNU effect and output PRNU flat file: - if config["ins_effects"]["prnu_effect"] == True: - chip_utils.log_info( - msg=" Applying PRNU effect", logger=self.logger) - img, prnu_img = chip_utils.add_PRNU(img=img, chip=self, - seed=int(config["random_seeds"]["seed_prnu"]+self.chipID)) - if config["output_setting"]["prnu_output"] == True: - prnu_img.write("%s/FlatImg_PRNU_%s.fits" % - (chip_output.subdir, self.chipID)) - if config["output_setting"]["flat_output"] == False: - del prnu_img - - # # Add dark current - # if config["ins_effects"]["add_dark"] == True: - # dark_noise = galsim.DeviateNoise(galsim.PoissonDeviate(rng_poisson, self.dark_noise*(exptime+0.5*self.readout_time))) - # img.addNoise(dark_noise) - - # Add dark current & Poisson noise - InputDark = False - if config["ins_effects"]["add_dark"] == True: - if InputDark: - img = chip_utils.add_inputdark( - img=img, chip=self, exptime=exptime) - else: - img, _ = chip_utils.add_poisson( - img=img, chip=self, exptime=exptime, poisson_noise=poisson_noise) - else: - img, _ = chip_utils.add_poisson( - img=img, chip=self, exptime=exptime, poisson_noise=poisson_noise, dark_noise=0.) - - # Add diffusion & brighter-fatter effects - if config["ins_effects"]["bright_fatter"] == True: - img = chip_utils.add_brighter_fatter(img=img) - - # Add Hot Pixels or/and Dead Pixels - rgbadpix = Generator(PCG64(int(SeedDefective+self.chipID))) - badfraction = 5E-5*(rgbadpix.random()*0.5+0.7) - img = effects.DefectivePixels(img, IfHotPix=BoolHotPix, IfDeadPix=BoolDeadPix, - fraction=badfraction, seed=SeedDefective+self.chipID, biaslevel=0) - - # Apply Bad lines - if config["ins_effects"]["add_badcolumns"] == True: - img = effects.BadColumns( - img, seed=SeedBadColumns, chipid=self.chipID, logger=self.logger) - - # Apply Nonlinearity on the chip image - if config["ins_effects"]["non_linear"] == True: - chip_utils.log_info( - msg=" Applying Non-Linearity on the chip image", logger=self.logger) - img = effects.NonLinearity(GSImage=img, beta1=5.e-7, beta2=0) - - # Apply CCD Saturation & Blooming - if config["ins_effects"]["saturbloom"] == True: - chip_utils.log_info( - msg=" Applying CCD Saturation & Blooming", logger=self.logger) - 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) - # 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): - print('\n***add CTI effects: pointing-{:} chip-{:} channel-{:}***'.format( - pointing_ID, self.chipID, ichannel+1)) - # 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: - 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 - - # Add Bias level - if config["ins_effects"]["add_bias"] == True: - chip_utils.log_info( - msg=" Adding Bias level and 16-channel non-uniformity", logger=self.logger) - if config["ins_effects"]["bias_16channel"] == True: - img = effects.AddBiasNonUniform16(img, - bias_level=float( - self.bias_level), - nsecy=self.nsecy, nsecx=self.nsecx, - seed=SeedBiasNonuni+self.chipID, - logger=self.logger) - elif config["ins_effects"]["bias_16channel"] == False: - img += self.bias_level - - # Add Read-out Noise - if config["ins_effects"]["add_readout"] == True: - seed = int(config["random_seeds"]["seed_readout"] - ) + pointing_ID*30 + self.chipID - rng_readout = galsim.BaseDeviate(seed) - readout_noise = galsim.GaussianNoise( - rng=rng_readout, sigma=self.read_noise) - img.addNoise(readout_noise) - - # Apply Gain & Quantization - chip_utils.log_info( - msg=" Applying Gain (and 16 channel non-uniformity) & Quantization", logger=self.logger) - if config["ins_effects"]["gain_16channel"] == True: - img, self.gain_channel = effects.ApplyGainNonUniform16( - img, gain=self.gain, - nsecy=self.nsecy, nsecx=self.nsecx, - seed=SeedGainNonuni+self.chipID, - logger=self.logger) - elif config["ins_effects"]["gain_16channel"] == False: - img /= self.gain - - img.array[img.array > 65535] = 65535 - img.replaceNegative(replace_value=0) - img.quantize() - - ###################################################################################### - # Output images for calibration pointing - ###################################################################################### - # Bias output - if config["ins_effects"]["add_bias"] == True and config["output_setting"]["bias_output"] == True and pointing_type == 'CAL': - if self.logger is not None: - self.logger.info(" Output N frame Bias files") - else: - print(" Output N frame Bias files", flush=True) - NBias = int(config["output_setting"]["NBias"]) - for i in range(NBias): - # BiasCombImg, BiasTag = effects.MakeBiasNcomb( - # self.npix_x, self.npix_y, - # bias_level=float(self.bias_level), - # ncombine=1, read_noise=self.read_noise, gain=1, - # seed=SeedBiasNonuni+self.chipID, - # logger=self.logger) - BiasCombImg = galsim.Image( - self.npix_x, self.npix_y, init_value=0) - if config["ins_effects"]["add_bias"] == True: - biaslevel = self.bias_level - overscan = biaslevel-2 - elif config["ins_effects"]["add_bias"] == False: - biaslevel = 0 - overscan = 0 - - # Readout noise for Biases is not generated with random seeds. So readout noise for bias images can't be reproduced. - if config["ins_effects"]["cosmic_ray"] == True: - if config["ins_effects"]["cray_differ"] == True: - cr_map, cr_event_num = effects.produceCR_Map( - xLen=self.npix_x, yLen=self.npix_y, - exTime=0.01, - cr_pixelRatio=0.003 * - (0.01+0.5*self.readout_time)/150., - 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 - - # Apply Bad lines - if config["ins_effects"]["add_badcolumns"] == True: - BiasCombImg = effects.BadColumns( - BiasCombImg-float(self.bias_level)+5, seed=SeedBadColumns, chipid=self.chipID, logger=self.logger) + float(self.bias_level)-5 - - # Non-Linearity for Bias - if config["ins_effects"]["non_linear"] == True: - if self.logger is not None: - self.logger.info( - " Applying Non-Linearity on the Bias image") - else: - print( - " Applying Non-Linearity on the Bias image", flush=True) - BiasCombImg = effects.NonLinearity( - GSImage=BiasCombImg, beta1=5.e-7, beta2=0) - - # START - pre1 = self.prescan_x # 27 - over1 = self.overscan_x # 71 - pre2 = self.prescan_y # 0 #4 - over2 = self.overscan_y # 84 #80 - - # prescan & overscan - if config["ins_effects"]["add_prescan"] == True: - chip_utils.log_info( - msg=" Apply pre/over-scan", logger=self.logger) - BiasCombImg = chip_utils.AddPreScan( - GSImage=BiasCombImg, pre1=pre1, pre2=pre2, over1=over1, over2=over2) - - # 1*16 output - if config["ins_effects"]["format_output"] == True: - chip_utils.log_info( - msg=" Apply 1*16 format", logger=self.logger) - BiasCombImg = chip_utils.formatOutput(GSImage=BiasCombImg) - self.nsecy = 1 - self.nsecx = 16 - # END - - # Add Bias level - if config["ins_effects"]["add_bias"] == True: - if self.logger is not None: - self.logger.info( - " Adding Bias level and 16-channel non-uniformity") - else: - print(" Adding Bias level and 16-channel non-uniformity") - BiasCombImg = effects.AddBiasNonUniform16(BiasCombImg, - bias_level=biaslevel, - nsecy=self.nsecy, nsecx=self.nsecx, - seed=SeedBiasNonuni+self.chipID, - logger=self.logger) - rng = galsim.UniformDeviate() - ncombine = 1 - NoiseBias = galsim.GaussianNoise( - rng=rng, sigma=self.read_noise*ncombine**0.5) - BiasCombImg.addNoise(NoiseBias) - - BiasCombImg, self.gain_channel = effects.ApplyGainNonUniform16(BiasCombImg, gain=self.gain, - nsecy=self.nsecy, nsecx=self.nsecx, - seed=SeedGainNonuni+self.chipID, - logger=self.logger) - # BiasCombImg = effects.AddOverscan( - # BiasCombImg, - # overscan=float(config["ins_effects"]["bias_level"])-2, gain=self.gain, - # widthl=27, widthr=27, widtht=8, widthb=8) - BiasCombImg.replaceNegative(replace_value=0) - BiasCombImg.quantize() - BiasCombImg = galsim.ImageUS(BiasCombImg) - timestamp_obs += 10 * 60 - chip_utils.outputCal( - chip=self, - img=BiasCombImg, - ra_cen=ra_cen, - dec_cen=dec_cen, - img_rot=img_rot, - im_type='BIAS', - pointing_ID=pointing_ID, - output_dir=chip_output.subdir, - exptime=0.0, - project_cycle=config["project_cycle"], - run_counter=config["run_counter"], - timestamp=timestamp_obs) - del BiasCombImg - - # Export combined (ncombine, Vignetting + PRNU) & single vignetting flat-field file - if config["ins_effects"]["flat_fielding"] == True and config["output_setting"]["flat_output"] == True and pointing_type == 'CAL': - if self.logger is not None: - self.logger.info(" Output N frame Flat-Field files") - else: - print(" Output N frame Flat-Field files", flush=True) - NFlat = int(config["output_setting"]["NFlat"]) - if config["ins_effects"]["add_bias"] == True: - biaslevel = self.bias_level - overscan = biaslevel-2 - elif config["ins_effects"]["add_bias"] == False: - biaslevel = 0 - overscan = 0 - darklevel = self.dark_noise * \ - (self.flat_exptime+0.5*self.readout_time) - for i in range(NFlat): - FlatSingle = flat_img * prnu_img + darklevel - FlatCombImg, FlatTag = effects.MakeFlatNcomb( - flat_single_image=FlatSingle, - ncombine=1, - read_noise=self.read_noise, - gain=1, - overscan=overscan, - biaslevel=0, - seed_bias=SeedDefective+self.chipID, - logger=self.logger - ) - if config["ins_effects"]["cosmic_ray"] == True: - if config["ins_effects"]["cray_differ"] == True: - cr_map, cr_event_num = effects.produceCR_Map( - xLen=self.npix_x, yLen=self.npix_y, - exTime=self.flat_exptime+0.5*self.readout_time, - cr_pixelRatio=0.003 * - (self.flat_exptime+0.5*self.readout_time)/150., - 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 - - # Add Hot Pixels or/and Dead Pixels - rgbadpix = Generator(PCG64(int(SeedDefective+self.chipID))) - badfraction = 5E-5*(rgbadpix.random()*0.5+0.7) - FlatCombImg = effects.DefectivePixels( - FlatCombImg, IfHotPix=BoolHotPix, IfDeadPix=BoolDeadPix, fraction=badfraction, seed=SeedDefective+self.chipID, biaslevel=0) - - # Apply Bad lines - if config["ins_effects"]["add_badcolumns"] == True: - FlatCombImg = effects.BadColumns( - FlatCombImg, seed=SeedBadColumns, chipid=self.chipID, logger=self.logger) - - if config["ins_effects"]["non_linear"] == True: - if self.logger is not None: - self.logger.info( - " Applying Non-Linearity on the Flat image") - else: - print( - " Applying Non-Linearity on the Flat image", flush=True) - FlatCombImg = effects.NonLinearity( - GSImage=FlatCombImg, beta1=5.e-7, beta2=0) - - # if config["ins_effects"]["cte_trail"] == True: - # FlatCombImg = effects.CTE_Effect(GSImage=FlatCombImg, threshold=3) - # START - 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) - # CTI_modeling - # 2*8 -> 1*16 img-layout - FlatCombImg = chip_utils.formatOutput(GSImage=FlatCombImg) - self.nsecy = 1 - self.nsecx = 16 - - img_arr = FlatCombImg.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): - print('\n***add CTI effects: pointing-{:} chip-{:} channel-{:}***'.format( - pointing_ID, self.chipID, ichannel+1)) - # 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 = FlatCombImg.wcs - del FlatCombImg - FlatCombImg = newimg - - # 1*16 -> 2*8 img-layout - FlatCombImg = chip_utils.formatRevert(GSImage=FlatCombImg) - self.nsecy = 2 - self.nsecx = 8 - - # prescan & overscan - if config["ins_effects"]["add_prescan"] == True: - chip_utils.log_info( - msg=" Apply pre/over-scan", logger=self.logger) - if config["ins_effects"]["cte_trail"] == False: - FlatCombImg = chip_utils.AddPreScan( - GSImage=FlatCombImg, pre1=pre1, pre2=pre2, over1=over1, over2=over2) - if config["ins_effects"]["cte_trail"] == True: - FlatCombImg = chip_utils.AddPreScan( - GSImage=FlatCombImg, 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) - FlatCombImg = chip_utils.formatOutput(GSImage=FlatCombImg) - self.nsecy = 1 - self.nsecx = 16 - # END - - # Add Bias level - if config["ins_effects"]["add_bias"] == True: - if self.logger is not None: - self.logger.info( - " Adding Bias level and 16-channel non-uniformity") - else: - print(" Adding Bias level and 16-channel non-uniformity") - # img += float(config["ins_effects"]["bias_level"]) - FlatCombImg = effects.AddBiasNonUniform16(FlatCombImg, - bias_level=biaslevel, - nsecy=self.nsecy, nsecx=self.nsecx, - seed=SeedBiasNonuni+self.chipID, - logger=self.logger) - - # Add Read-out Noise - if config["ins_effects"]["add_readout"] == True: - seed = int(config["random_seeds"]["seed_readout"] - ) + pointing_ID*30 + self.chipID + 3 - rng_readout = galsim.BaseDeviate(seed) - readout_noise = galsim.GaussianNoise( - rng=rng_readout, sigma=self.read_noise) - FlatCombImg.addNoise(readout_noise) - - FlatCombImg, self.gain_channel = effects.ApplyGainNonUniform16(FlatCombImg, gain=self.gain, - nsecy=self.nsecy, nsecx=self.nsecx, - seed=SeedGainNonuni+self.chipID, - logger=self.logger) - # FlatCombImg = effects.AddOverscan(FlatCombImg, overscan=overscan, gain=self.gain, widthl=27, widthr=27, widtht=8, widthb=8) - FlatCombImg.replaceNegative(replace_value=0) - FlatCombImg.quantize() - FlatCombImg = galsim.ImageUS(FlatCombImg) - timestamp_obs += 10 * 60 - chip_utils.outputCal( - chip=self, - img=FlatCombImg, - ra_cen=ra_cen, - dec_cen=dec_cen, - img_rot=img_rot, - im_type='FLAT', - pointing_ID=pointing_ID, - output_dir=chip_output.subdir, - exptime=self.flat_exptime, - project_cycle=config["project_cycle"], - run_counter=config["run_counter"], - timestamp=timestamp_obs) - - del FlatCombImg, FlatSingle, prnu_img - # flat_img.replaceNegative(replace_value=0) - # flat_img.quantize() - # galsim.ImageUS(flat_img).write("%s/FlatImg_Vignette_%s.fits" % (chip_output.subdir, self.chipID)) - del flat_img - - # Export Dark current images - if config["ins_effects"]["add_dark"] == True and config["output_setting"]["dark_output"] == True and pointing_type == 'CAL': - if self.logger is not None: - self.logger.info(" Output N frame Dark Current files") - else: - print(" Output N frame Dark Current files", flush=True) - NDark = int(config["output_setting"]["NDark"]) - if config["ins_effects"]["add_bias"] == True: - biaslevel = self.bias_level - overscan = biaslevel-2 - elif config["ins_effects"]["add_bias"] == False: - biaslevel = 0 - overscan = 0 - for i in range(NDark): - DarkCombImg, DarkTag = effects.MakeDarkNcomb( - self.npix_x, self.npix_y, - overscan=overscan, bias_level=0, darkpsec=0.02, exptime=self.dark_exptime+0.5*self.readout_time, - ncombine=1, read_noise=self.read_noise, - gain=1, seed_bias=SeedBiasNonuni+self.chipID, - logger=self.logger) - if config["ins_effects"]["cosmic_ray"] == True: - if config["ins_effects"]["cray_differ"] == True: - cr_map, cr_event_num = effects.produceCR_Map( - xLen=self.npix_x, yLen=self.npix_y, - exTime=self.dark_exptime+0.5*self.readout_time, - cr_pixelRatio=0.003 * - (self.dark_exptime+0.5*self.readout_time)/150., - 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 - # START - # prescan & overscan - if config["ins_effects"]["add_prescan"] == True: - chip_utils.log_info( - msg=" Apply pre/over-scan", logger=self.logger) - crmap_gsimg = chip_utils.AddPreScan( - GSImage=crmap_gsimg, pre1=pre1, pre2=pre2, over1=over1, over2=over2) - - # 1*16 output - if config["ins_effects"]["format_output"] == True: - chip_utils.log_info( - msg=" Apply 1*16 format", logger=self.logger) - crmap_gsimg = chip_utils.formatOutput( - GSImage=crmap_gsimg) - self.nsecy = 1 - self.nsecx = 16 - # END - chip_utils.outputCal( - chip=self, - img=crmap_gsimg, - ra_cen=ra_cen, - dec_cen=dec_cen, - img_rot=img_rot, - im_type='CRD', - pointing_ID=pointing_ID, - output_dir=chip_output.subdir, - exptime=self.dark_exptime, - project_cycle=config["project_cycle"], - run_counter=config["run_counter"], - timestamp=timestamp_obs) - del crmap_gsimg - - # Add Hot Pixels or/and Dead Pixels - rgbadpix = Generator(PCG64(int(SeedDefective+self.chipID))) - badfraction = 5E-5*(rgbadpix.random()*0.5+0.7) - DarkCombImg = effects.DefectivePixels( - DarkCombImg, IfHotPix=BoolHotPix, IfDeadPix=BoolDeadPix, fraction=badfraction, seed=SeedDefective+self.chipID, biaslevel=0) - - # Apply Bad lines - if config["ins_effects"]["add_badcolumns"] == True: - DarkCombImg = effects.BadColumns( - DarkCombImg, seed=SeedBadColumns, chipid=self.chipID, logger=self.logger) - - # Non-Linearity for Dark - if config["ins_effects"]["non_linear"] == True: - if self.logger is not None: - self.logger.info( - " Applying Non-Linearity on the Dark image") - else: - print( - " Applying Non-Linearity on the Dark image", flush=True) - DarkCombImg = effects.NonLinearity( - GSImage=DarkCombImg, beta1=5.e-7, beta2=0) - - # if config["ins_effects"]["cte_trail"] == True: - # DarkCombImg = effects.CTE_Effect(GSImage=DarkCombImg, threshold=3) - # START - 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) - # CTI_modeling - # 2*8 -> 1*16 img-layout - DarkCombImg = chip_utils.formatOutput(GSImage=DarkCombImg) - self.nsecy = 1 - self.nsecx = 16 - - img_arr = DarkCombImg.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): - print('\n***add CTI effects: pointing-{:} chip-{:} channel-{:}***'.format( - pointing_ID, self.chipID, ichannel+1)) - # 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 = DarkCombImg.wcs - del DarkCombImg - DarkCombImg = newimg - - # 1*16 -> 2*8 img-layout - DarkCombImg = chip_utils.formatRevert(GSImage=DarkCombImg) - self.nsecy = 2 - self.nsecx = 8 - - # prescan & overscan - if config["ins_effects"]["add_prescan"] == True: - chip_utils.log_info( - msg=" Apply pre/over-scan", logger=self.logger) - if config["ins_effects"]["cte_trail"] == False: - DarkCombImg = chip_utils.AddPreScan( - GSImage=DarkCombImg, pre1=pre1, pre2=pre2, over1=over1, over2=over2) - if config["ins_effects"]["cte_trail"] == True: - DarkCombImg = chip_utils.AddPreScan( - GSImage=DarkCombImg, 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) - DarkCombImg = chip_utils.formatOutput(GSImage=DarkCombImg) - self.nsecy = 1 - self.nsecx = 16 - # END - - # Add Bias level - if config["ins_effects"]["add_bias"] == True: - if self.logger is not None: - self.logger.info( - " Adding Bias level and 16-channel non-uniformity") - else: - print(" Adding Bias level and 16-channel non-uniformity") - # img += float(config["ins_effects"]["bias_level"]) - DarkCombImg = effects.AddBiasNonUniform16(DarkCombImg, - bias_level=biaslevel, - nsecy=self.nsecy, nsecx=self.nsecx, - seed=SeedBiasNonuni+self.chipID, - logger=self.logger) - - # Add Read-out Noise - if config["ins_effects"]["add_readout"] == True: - seed = int(config["random_seeds"]["seed_readout"] - ) + pointing_ID*30 + self.chipID + 2 - rng_readout = galsim.BaseDeviate(seed) - readout_noise = galsim.GaussianNoise( - rng=rng_readout, sigma=self.read_noise) - DarkCombImg.addNoise(readout_noise) - - DarkCombImg, self.gain_channel = effects.ApplyGainNonUniform16( - DarkCombImg, gain=self.gain, - nsecy=self.nsecy, nsecx=self.nsecx, - seed=SeedGainNonuni+self.chipID, - logger=self.logger) - # DarkCombImg = effects.AddOverscan( - # DarkCombImg, - # overscan=overscan, gain=self.gain, - # widthl=27, widthr=27, widtht=8, widthb=8) - DarkCombImg.replaceNegative(replace_value=0) - DarkCombImg.quantize() - DarkCombImg = galsim.ImageUS(DarkCombImg) - timestamp_obs += 10 * 60 - chip_utils.outputCal( - chip=self, - img=DarkCombImg, - ra_cen=ra_cen, - dec_cen=dec_cen, - img_rot=img_rot, - im_type='DARK', - pointing_ID=pointing_ID, - output_dir=chip_output.subdir, - exptime=self.dark_exptime, - project_cycle=config["project_cycle"], - run_counter=config["run_counter"], - timestamp=timestamp_obs) - del DarkCombImg - # img = galsim.ImageUS(img) - - # # 16 output channel, with each a single image file - # if config["ins_effects"]["readout16"] == True: - # print(" 16 Output Channel simulation") - # for coli in [0, 1]: - # for rowi in range(8): - # sub_img = effects.readout16( - # GSImage=img, - # rowi=rowi, - # coli=coli, - # overscan_value=self.overscan) - # rowcoltag = str(rowi) + str(coli) - # img_name_root = chip_output.img_name.split(".")[0] - # sub_img.write("%s/%s_%s.fits" % (chip_output.subdir, img_name_root, rowcoltag)) - # del sub_img - return img + # def addEffects(self, config, img, chip_output, filt, ra_cen, dec_cen, img_rot, exptime=150., pointing_ID=0, timestamp_obs=1621915200, pointing_type='SCI', sky_map=None, post_flash_map=None, tel=None, logger=None): + # # Set random seeds + # SeedGainNonuni = int(config["random_seeds"]["seed_gainNonUniform"]) + # SeedBiasNonuni = int(config["random_seeds"]["seed_biasNonUniform"]) + # SeedRnNonuni = int(config["random_seeds"]["seed_rnNonUniform"]) + # SeedBadColumns = int(config["random_seeds"]["seed_badcolumns"]) + # SeedDefective = int(config["random_seeds"]["seed_defective"]) + # SeedCosmicRay = int(config["random_seeds"]["seed_CR"]) + # fullwell = int(self.full_well) + # if config["ins_effects"]["add_hotpixels"] == True: + # BoolHotPix = True + # else: + # BoolHotPix = False + # if config["ins_effects"]["add_deadpixels"] == True: + # BoolDeadPix = True + # else: + # BoolDeadPix = False + # self.logger = logger + + # # Get Poisson noise generator + # rng_poisson, poisson_noise = chip_utils.get_poisson( + # seed=int(config["random_seeds"]["seed_poisson"]) + pointing_ID*30 + self.chipID, sky_level=0.) + + # # Add sky background + # if config["ins_effects"]["add_back"] == True: + # img, sky_map = chip_utils.add_sky_background( + # img=img, filt=filt, exptime=exptime, sky_map=sky_map, tel=tel) + # del sky_map + + # # Apply flat-field large scale structure for one chip + # if config["ins_effects"]["flat_fielding"] == True: + # chip_utils.log_info( + # msg=" Creating and applying Flat-Fielding", logger=self.logger) + # chip_utils.log_info(msg=str(img.bounds), logger=self.logger) + # flat_img, flat_normal = chip_utils.get_flat( + # img=img, seed=int(config["random_seeds"]["seed_flat"])) + # if self.survey_type == "photometric": + # img *= flat_normal + # del flat_normal + # if config["output_setting"]["flat_output"] == False: + # del flat_img + + # if post_flash_map is not None: + # img = img + post_flash_map + + # # Apply Shutter-effect for one chip + # if config["ins_effects"]["shutter_effect"] == True: + # chip_utils.log_info( + # msg=" Apply shutter effect", logger=self.logger) + # # shutter effect normalized image for this chip + # shuttimg = effects.ShutterEffectArr( + # img, t_shutter=1.3, dist_bearing=735, dt=1E-3) + # if self.survey_type == "photometric": + # img *= shuttimg + # # output 16-bit shutter effect image with pixel value <=65535 + # if config["output_setting"]["shutter_output"] == True: + # shutt_gsimg = galsim.ImageUS(shuttimg*6E4) + # shutt_gsimg.write("%s/ShutterEffect_%s_1.fits" % + # (chip_output.subdir, self.chipID)) + # del shutt_gsimg + # del shuttimg + # # # Add Poisson noise to the resulting images + # # # (NOTE): this can only applied to the slitless image + # # # since it dose not use photon shooting to draw stamps + # # if self.survey_type == "spectroscopic": + # # img.addNoise(poisson_noise) + + # # Add cosmic-rays + # if config["ins_effects"]["cosmic_ray"] == True and pointing_type == 'SCI': + # chip_utils.log_info(msg=" Adding Cosmic-Ray", logger=self.logger) + # img, crmap_gsimg, cr_event_num = chip_utils.add_cosmic_rays(img=img, chip=self, exptime=exptime, + # seed=SeedCosmicRay+pointing_ID*30+self.chipID) + # chip_utils.outputCal( + # chip=self, + # img=crmap_gsimg, + # ra_cen=ra_cen, + # dec_cen=dec_cen, + # img_rot=img_rot, + # im_type='CRS', + # pointing_ID=pointing_ID, + # output_dir=chip_output.subdir, + # exptime=exptime, + # project_cycle=config["project_cycle"], + # run_counter=config["run_counter"], + # timestamp=timestamp_obs) + # del crmap_gsimg + + # # Apply PRNU effect and output PRNU flat file: + # if config["ins_effects"]["prnu_effect"] == True: + # chip_utils.log_info( + # msg=" Applying PRNU effect", logger=self.logger) + # img, prnu_img = chip_utils.add_PRNU(img=img, chip=self, + # seed=int(config["random_seeds"]["seed_prnu"]+self.chipID)) + # if config["output_setting"]["prnu_output"] == True: + # prnu_img.write("%s/FlatImg_PRNU_%s.fits" % + # (chip_output.subdir, self.chipID)) + # if config["output_setting"]["flat_output"] == False: + # del prnu_img + + # # # Add dark current + # # if config["ins_effects"]["add_dark"] == True: + # # dark_noise = galsim.DeviateNoise(galsim.PoissonDeviate(rng_poisson, self.dark_noise*(exptime+0.5*self.readout_time))) + # # img.addNoise(dark_noise) + + # # Add dark current & Poisson noise + # InputDark = False + # if config["ins_effects"]["add_dark"] == True: + # if InputDark: + # img = chip_utils.add_inputdark( + # img=img, chip=self, exptime=exptime) + # else: + # img, _ = chip_utils.add_poisson( + # img=img, chip=self, exptime=exptime, poisson_noise=poisson_noise) + # else: + # img, _ = chip_utils.add_poisson( + # img=img, chip=self, exptime=exptime, poisson_noise=poisson_noise, dark_noise=0.) + + # # Add diffusion & brighter-fatter effects + # if config["ins_effects"]["bright_fatter"] == True: + # img = chip_utils.add_brighter_fatter(img=img) + + # # Add Hot Pixels or/and Dead Pixels + # rgbadpix = Generator(PCG64(int(SeedDefective+self.chipID))) + # badfraction = 5E-5*(rgbadpix.random()*0.5+0.7) + # img = effects.DefectivePixels(img, IfHotPix=BoolHotPix, IfDeadPix=BoolDeadPix, + # fraction=badfraction, seed=SeedDefective+self.chipID, biaslevel=0) + + # # Apply Bad lines + # if config["ins_effects"]["add_badcolumns"] == True: + # img = effects.BadColumns( + # img, seed=SeedBadColumns, chipid=self.chipID, logger=self.logger) + + # # Apply Nonlinearity on the chip image + # if config["ins_effects"]["non_linear"] == True: + # chip_utils.log_info( + # msg=" Applying Non-Linearity on the chip image", logger=self.logger) + # img = effects.NonLinearity(GSImage=img, beta1=5.e-7, beta2=0) + + # # Apply CCD Saturation & Blooming + # if config["ins_effects"]["saturbloom"] == True: + # chip_utils.log_info( + # msg=" Applying CCD Saturation & Blooming", logger=self.logger) + # 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) + # # 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): + # print('\n***add CTI effects: pointing-{:} chip-{:} channel-{:}***'.format( + # pointing_ID, self.chipID, ichannel+1)) + # # 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: + # 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 + + # # Add Bias level + # if config["ins_effects"]["add_bias"] == True: + # chip_utils.log_info( + # msg=" Adding Bias level and 16-channel non-uniformity", logger=self.logger) + # if config["ins_effects"]["bias_16channel"] == True: + # img = effects.AddBiasNonUniform16(img, + # bias_level=float( + # self.bias_level), + # nsecy=self.nsecy, nsecx=self.nsecx, + # seed=SeedBiasNonuni+self.chipID, + # logger=self.logger) + # elif config["ins_effects"]["bias_16channel"] == False: + # img += self.bias_level + + # # Add Read-out Noise + # if config["ins_effects"]["add_readout"] == True: + # seed = int(config["random_seeds"]["seed_readout"] + # ) + pointing_ID*30 + self.chipID + # rng_readout = galsim.BaseDeviate(seed) + # readout_noise = galsim.GaussianNoise( + # rng=rng_readout, sigma=self.read_noise) + # img.addNoise(readout_noise) + + # # Apply Gain & Quantization + # chip_utils.log_info( + # msg=" Applying Gain (and 16 channel non-uniformity) & Quantization", logger=self.logger) + # if config["ins_effects"]["gain_16channel"] == True: + # img, self.gain_channel = effects.ApplyGainNonUniform16( + # img, gain=self.gain, + # nsecy=self.nsecy, nsecx=self.nsecx, + # seed=SeedGainNonuni+self.chipID, + # logger=self.logger) + # elif config["ins_effects"]["gain_16channel"] == False: + # img /= self.gain + + # img.array[img.array > 65535] = 65535 + # img.replaceNegative(replace_value=0) + # img.quantize() + + # ###################################################################################### + # # Output images for calibration pointing + # ###################################################################################### + # # Bias output + # if config["ins_effects"]["add_bias"] == True and config["output_setting"]["bias_output"] == True and pointing_type == 'CAL': + # if self.logger is not None: + # self.logger.info(" Output N frame Bias files") + # else: + # print(" Output N frame Bias files", flush=True) + # NBias = int(config["output_setting"]["NBias"]) + # for i in range(NBias): + # # BiasCombImg, BiasTag = effects.MakeBiasNcomb( + # # self.npix_x, self.npix_y, + # # bias_level=float(self.bias_level), + # # ncombine=1, read_noise=self.read_noise, gain=1, + # # seed=SeedBiasNonuni+self.chipID, + # # logger=self.logger) + # BiasCombImg = galsim.Image( + # self.npix_x, self.npix_y, init_value=0) + # if config["ins_effects"]["add_bias"] == True: + # biaslevel = self.bias_level + # overscan = biaslevel-2 + # elif config["ins_effects"]["add_bias"] == False: + # biaslevel = 0 + # overscan = 0 + + # # Readout noise for Biases is not generated with random seeds. So readout noise for bias images can't be reproduced. + # if config["ins_effects"]["cosmic_ray"] == True: + # if config["ins_effects"]["cray_differ"] == True: + # cr_map, cr_event_num = effects.produceCR_Map( + # xLen=self.npix_x, yLen=self.npix_y, + # exTime=0.01, + # cr_pixelRatio=0.003 * + # (0.01+0.5*self.readout_time)/150., + # 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 + + # # Apply Bad lines + # if config["ins_effects"]["add_badcolumns"] == True: + # BiasCombImg = effects.BadColumns( + # BiasCombImg-float(self.bias_level)+5, seed=SeedBadColumns, chipid=self.chipID, logger=self.logger) + float(self.bias_level)-5 + + # # Non-Linearity for Bias + # if config["ins_effects"]["non_linear"] == True: + # if self.logger is not None: + # self.logger.info( + # " Applying Non-Linearity on the Bias image") + # else: + # print( + # " Applying Non-Linearity on the Bias image", flush=True) + # BiasCombImg = effects.NonLinearity( + # GSImage=BiasCombImg, beta1=5.e-7, beta2=0) + + # # START + # pre1 = self.prescan_x # 27 + # over1 = self.overscan_x # 71 + # pre2 = self.prescan_y # 0 #4 + # over2 = self.overscan_y # 84 #80 + + # # prescan & overscan + # if config["ins_effects"]["add_prescan"] == True: + # chip_utils.log_info( + # msg=" Apply pre/over-scan", logger=self.logger) + # BiasCombImg = chip_utils.AddPreScan( + # GSImage=BiasCombImg, pre1=pre1, pre2=pre2, over1=over1, over2=over2) + + # # 1*16 output + # if config["ins_effects"]["format_output"] == True: + # chip_utils.log_info( + # msg=" Apply 1*16 format", logger=self.logger) + # BiasCombImg = chip_utils.formatOutput(GSImage=BiasCombImg) + # self.nsecy = 1 + # self.nsecx = 16 + # # END + + # # Add Bias level + # if config["ins_effects"]["add_bias"] == True: + # if self.logger is not None: + # self.logger.info( + # " Adding Bias level and 16-channel non-uniformity") + # else: + # print(" Adding Bias level and 16-channel non-uniformity") + # BiasCombImg = effects.AddBiasNonUniform16(BiasCombImg, + # bias_level=biaslevel, + # nsecy=self.nsecy, nsecx=self.nsecx, + # seed=SeedBiasNonuni+self.chipID, + # logger=self.logger) + # rng = galsim.UniformDeviate() + # ncombine = 1 + # NoiseBias = galsim.GaussianNoise( + # rng=rng, sigma=self.read_noise*ncombine**0.5) + # BiasCombImg.addNoise(NoiseBias) + + # BiasCombImg, self.gain_channel = effects.ApplyGainNonUniform16(BiasCombImg, gain=self.gain, + # nsecy=self.nsecy, nsecx=self.nsecx, + # seed=SeedGainNonuni+self.chipID, + # logger=self.logger) + # # BiasCombImg = effects.AddOverscan( + # # BiasCombImg, + # # overscan=float(config["ins_effects"]["bias_level"])-2, gain=self.gain, + # # widthl=27, widthr=27, widtht=8, widthb=8) + # BiasCombImg.replaceNegative(replace_value=0) + # BiasCombImg.quantize() + # BiasCombImg = galsim.ImageUS(BiasCombImg) + # timestamp_obs += 10 * 60 + # chip_utils.outputCal( + # chip=self, + # img=BiasCombImg, + # ra_cen=ra_cen, + # dec_cen=dec_cen, + # img_rot=img_rot, + # im_type='BIAS', + # pointing_ID=pointing_ID, + # output_dir=chip_output.subdir, + # exptime=0.0, + # project_cycle=config["project_cycle"], + # run_counter=config["run_counter"], + # timestamp=timestamp_obs) + # del BiasCombImg + + # # Export combined (ncombine, Vignetting + PRNU) & single vignetting flat-field file + # if config["ins_effects"]["flat_fielding"] == True and config["output_setting"]["flat_output"] == True and pointing_type == 'CAL': + # if self.logger is not None: + # self.logger.info(" Output N frame Flat-Field files") + # else: + # print(" Output N frame Flat-Field files", flush=True) + # NFlat = int(config["output_setting"]["NFlat"]) + # if config["ins_effects"]["add_bias"] == True: + # biaslevel = self.bias_level + # overscan = biaslevel-2 + # elif config["ins_effects"]["add_bias"] == False: + # biaslevel = 0 + # overscan = 0 + # darklevel = self.dark_noise * \ + # (self.flat_exptime+0.5*self.readout_time) + # for i in range(NFlat): + # FlatSingle = flat_img * prnu_img + darklevel + # FlatCombImg, FlatTag = effects.MakeFlatNcomb( + # flat_single_image=FlatSingle, + # ncombine=1, + # read_noise=self.read_noise, + # gain=1, + # overscan=overscan, + # biaslevel=0, + # seed_bias=SeedDefective+self.chipID, + # logger=self.logger + # ) + # if config["ins_effects"]["cosmic_ray"] == True: + # if config["ins_effects"]["cray_differ"] == True: + # cr_map, cr_event_num = effects.produceCR_Map( + # xLen=self.npix_x, yLen=self.npix_y, + # exTime=self.flat_exptime+0.5*self.readout_time, + # cr_pixelRatio=0.003 * + # (self.flat_exptime+0.5*self.readout_time)/150., + # 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 + + # # Add Hot Pixels or/and Dead Pixels + # rgbadpix = Generator(PCG64(int(SeedDefective+self.chipID))) + # badfraction = 5E-5*(rgbadpix.random()*0.5+0.7) + # FlatCombImg = effects.DefectivePixels( + # FlatCombImg, IfHotPix=BoolHotPix, IfDeadPix=BoolDeadPix, fraction=badfraction, seed=SeedDefective+self.chipID, biaslevel=0) + + # # Apply Bad lines + # if config["ins_effects"]["add_badcolumns"] == True: + # FlatCombImg = effects.BadColumns( + # FlatCombImg, seed=SeedBadColumns, chipid=self.chipID, logger=self.logger) + + # if config["ins_effects"]["non_linear"] == True: + # if self.logger is not None: + # self.logger.info( + # " Applying Non-Linearity on the Flat image") + # else: + # print( + # " Applying Non-Linearity on the Flat image", flush=True) + # FlatCombImg = effects.NonLinearity( + # GSImage=FlatCombImg, beta1=5.e-7, beta2=0) + + # # if config["ins_effects"]["cte_trail"] == True: + # # FlatCombImg = effects.CTE_Effect(GSImage=FlatCombImg, threshold=3) + # # START + # 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) + # # CTI_modeling + # # 2*8 -> 1*16 img-layout + # FlatCombImg = chip_utils.formatOutput(GSImage=FlatCombImg) + # self.nsecy = 1 + # self.nsecx = 16 + + # img_arr = FlatCombImg.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): + # print('\n***add CTI effects: pointing-{:} chip-{:} channel-{:}***'.format( + # pointing_ID, self.chipID, ichannel+1)) + # # 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 = FlatCombImg.wcs + # del FlatCombImg + # FlatCombImg = newimg + + # # 1*16 -> 2*8 img-layout + # FlatCombImg = chip_utils.formatRevert(GSImage=FlatCombImg) + # self.nsecy = 2 + # self.nsecx = 8 + + # # prescan & overscan + # if config["ins_effects"]["add_prescan"] == True: + # chip_utils.log_info( + # msg=" Apply pre/over-scan", logger=self.logger) + # if config["ins_effects"]["cte_trail"] == False: + # FlatCombImg = chip_utils.AddPreScan( + # GSImage=FlatCombImg, pre1=pre1, pre2=pre2, over1=over1, over2=over2) + # if config["ins_effects"]["cte_trail"] == True: + # FlatCombImg = chip_utils.AddPreScan( + # GSImage=FlatCombImg, 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) + # FlatCombImg = chip_utils.formatOutput(GSImage=FlatCombImg) + # self.nsecy = 1 + # self.nsecx = 16 + # # END + + # # Add Bias level + # if config["ins_effects"]["add_bias"] == True: + # if self.logger is not None: + # self.logger.info( + # " Adding Bias level and 16-channel non-uniformity") + # else: + # print(" Adding Bias level and 16-channel non-uniformity") + # # img += float(config["ins_effects"]["bias_level"]) + # FlatCombImg = effects.AddBiasNonUniform16(FlatCombImg, + # bias_level=biaslevel, + # nsecy=self.nsecy, nsecx=self.nsecx, + # seed=SeedBiasNonuni+self.chipID, + # logger=self.logger) + + # # Add Read-out Noise + # if config["ins_effects"]["add_readout"] == True: + # seed = int(config["random_seeds"]["seed_readout"] + # ) + pointing_ID*30 + self.chipID + 3 + # rng_readout = galsim.BaseDeviate(seed) + # readout_noise = galsim.GaussianNoise( + # rng=rng_readout, sigma=self.read_noise) + # FlatCombImg.addNoise(readout_noise) + + # FlatCombImg, self.gain_channel = effects.ApplyGainNonUniform16(FlatCombImg, gain=self.gain, + # nsecy=self.nsecy, nsecx=self.nsecx, + # seed=SeedGainNonuni+self.chipID, + # logger=self.logger) + # # FlatCombImg = effects.AddOverscan(FlatCombImg, overscan=overscan, gain=self.gain, widthl=27, widthr=27, widtht=8, widthb=8) + # FlatCombImg.replaceNegative(replace_value=0) + # FlatCombImg.quantize() + # FlatCombImg = galsim.ImageUS(FlatCombImg) + # timestamp_obs += 10 * 60 + # chip_utils.outputCal( + # chip=self, + # img=FlatCombImg, + # ra_cen=ra_cen, + # dec_cen=dec_cen, + # img_rot=img_rot, + # im_type='FLAT', + # pointing_ID=pointing_ID, + # output_dir=chip_output.subdir, + # exptime=self.flat_exptime, + # project_cycle=config["project_cycle"], + # run_counter=config["run_counter"], + # timestamp=timestamp_obs) + + # del FlatCombImg, FlatSingle, prnu_img + # # flat_img.replaceNegative(replace_value=0) + # # flat_img.quantize() + # # galsim.ImageUS(flat_img).write("%s/FlatImg_Vignette_%s.fits" % (chip_output.subdir, self.chipID)) + # del flat_img + + # # Export Dark current images + # if config["ins_effects"]["add_dark"] == True and config["output_setting"]["dark_output"] == True and pointing_type == 'CAL': + # if self.logger is not None: + # self.logger.info(" Output N frame Dark Current files") + # else: + # print(" Output N frame Dark Current files", flush=True) + # NDark = int(config["output_setting"]["NDark"]) + # if config["ins_effects"]["add_bias"] == True: + # biaslevel = self.bias_level + # overscan = biaslevel-2 + # elif config["ins_effects"]["add_bias"] == False: + # biaslevel = 0 + # overscan = 0 + # for i in range(NDark): + # DarkCombImg, DarkTag = effects.MakeDarkNcomb( + # self.npix_x, self.npix_y, + # overscan=overscan, bias_level=0, darkpsec=0.02, exptime=self.dark_exptime+0.5*self.readout_time, + # ncombine=1, read_noise=self.read_noise, + # gain=1, seed_bias=SeedBiasNonuni+self.chipID, + # logger=self.logger) + # if config["ins_effects"]["cosmic_ray"] == True: + # if config["ins_effects"]["cray_differ"] == True: + # cr_map, cr_event_num = effects.produceCR_Map( + # xLen=self.npix_x, yLen=self.npix_y, + # exTime=self.dark_exptime+0.5*self.readout_time, + # cr_pixelRatio=0.003 * + # (self.dark_exptime+0.5*self.readout_time)/150., + # 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 + # # START + # # prescan & overscan + # if config["ins_effects"]["add_prescan"] == True: + # chip_utils.log_info( + # msg=" Apply pre/over-scan", logger=self.logger) + # crmap_gsimg = chip_utils.AddPreScan( + # GSImage=crmap_gsimg, pre1=pre1, pre2=pre2, over1=over1, over2=over2) + + # # 1*16 output + # if config["ins_effects"]["format_output"] == True: + # chip_utils.log_info( + # msg=" Apply 1*16 format", logger=self.logger) + # crmap_gsimg = chip_utils.formatOutput( + # GSImage=crmap_gsimg) + # self.nsecy = 1 + # self.nsecx = 16 + # # END + # chip_utils.outputCal( + # chip=self, + # img=crmap_gsimg, + # ra_cen=ra_cen, + # dec_cen=dec_cen, + # img_rot=img_rot, + # im_type='CRD', + # pointing_ID=pointing_ID, + # output_dir=chip_output.subdir, + # exptime=self.dark_exptime, + # project_cycle=config["project_cycle"], + # run_counter=config["run_counter"], + # timestamp=timestamp_obs) + # del crmap_gsimg + + # # Add Hot Pixels or/and Dead Pixels + # rgbadpix = Generator(PCG64(int(SeedDefective+self.chipID))) + # badfraction = 5E-5*(rgbadpix.random()*0.5+0.7) + # DarkCombImg = effects.DefectivePixels( + # DarkCombImg, IfHotPix=BoolHotPix, IfDeadPix=BoolDeadPix, fraction=badfraction, seed=SeedDefective+self.chipID, biaslevel=0) + + # # Apply Bad lines + # if config["ins_effects"]["add_badcolumns"] == True: + # DarkCombImg = effects.BadColumns( + # DarkCombImg, seed=SeedBadColumns, chipid=self.chipID, logger=self.logger) + + # # Non-Linearity for Dark + # if config["ins_effects"]["non_linear"] == True: + # if self.logger is not None: + # self.logger.info( + # " Applying Non-Linearity on the Dark image") + # else: + # print( + # " Applying Non-Linearity on the Dark image", flush=True) + # DarkCombImg = effects.NonLinearity( + # GSImage=DarkCombImg, beta1=5.e-7, beta2=0) + + # # if config["ins_effects"]["cte_trail"] == True: + # # DarkCombImg = effects.CTE_Effect(GSImage=DarkCombImg, threshold=3) + # # START + # 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) + # # CTI_modeling + # # 2*8 -> 1*16 img-layout + # DarkCombImg = chip_utils.formatOutput(GSImage=DarkCombImg) + # self.nsecy = 1 + # self.nsecx = 16 + + # img_arr = DarkCombImg.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): + # print('\n***add CTI effects: pointing-{:} chip-{:} channel-{:}***'.format( + # pointing_ID, self.chipID, ichannel+1)) + # # 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 = DarkCombImg.wcs + # del DarkCombImg + # DarkCombImg = newimg + + # # 1*16 -> 2*8 img-layout + # DarkCombImg = chip_utils.formatRevert(GSImage=DarkCombImg) + # self.nsecy = 2 + # self.nsecx = 8 + + # # prescan & overscan + # if config["ins_effects"]["add_prescan"] == True: + # chip_utils.log_info( + # msg=" Apply pre/over-scan", logger=self.logger) + # if config["ins_effects"]["cte_trail"] == False: + # DarkCombImg = chip_utils.AddPreScan( + # GSImage=DarkCombImg, pre1=pre1, pre2=pre2, over1=over1, over2=over2) + # if config["ins_effects"]["cte_trail"] == True: + # DarkCombImg = chip_utils.AddPreScan( + # GSImage=DarkCombImg, 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) + # DarkCombImg = chip_utils.formatOutput(GSImage=DarkCombImg) + # self.nsecy = 1 + # self.nsecx = 16 + # # END + + # # Add Bias level + # if config["ins_effects"]["add_bias"] == True: + # if self.logger is not None: + # self.logger.info( + # " Adding Bias level and 16-channel non-uniformity") + # else: + # print(" Adding Bias level and 16-channel non-uniformity") + # # img += float(config["ins_effects"]["bias_level"]) + # DarkCombImg = effects.AddBiasNonUniform16(DarkCombImg, + # bias_level=biaslevel, + # nsecy=self.nsecy, nsecx=self.nsecx, + # seed=SeedBiasNonuni+self.chipID, + # logger=self.logger) + + # # Add Read-out Noise + # if config["ins_effects"]["add_readout"] == True: + # seed = int(config["random_seeds"]["seed_readout"] + # ) + pointing_ID*30 + self.chipID + 2 + # rng_readout = galsim.BaseDeviate(seed) + # readout_noise = galsim.GaussianNoise( + # rng=rng_readout, sigma=self.read_noise) + # DarkCombImg.addNoise(readout_noise) + + # DarkCombImg, self.gain_channel = effects.ApplyGainNonUniform16( + # DarkCombImg, gain=self.gain, + # nsecy=self.nsecy, nsecx=self.nsecx, + # seed=SeedGainNonuni+self.chipID, + # logger=self.logger) + # # DarkCombImg = effects.AddOverscan( + # # DarkCombImg, + # # overscan=overscan, gain=self.gain, + # # widthl=27, widthr=27, widtht=8, widthb=8) + # DarkCombImg.replaceNegative(replace_value=0) + # DarkCombImg.quantize() + # DarkCombImg = galsim.ImageUS(DarkCombImg) + # timestamp_obs += 10 * 60 + # chip_utils.outputCal( + # chip=self, + # img=DarkCombImg, + # ra_cen=ra_cen, + # dec_cen=dec_cen, + # img_rot=img_rot, + # im_type='DARK', + # pointing_ID=pointing_ID, + # output_dir=chip_output.subdir, + # exptime=self.dark_exptime, + # project_cycle=config["project_cycle"], + # run_counter=config["run_counter"], + # timestamp=timestamp_obs) + # del DarkCombImg + # # img = galsim.ImageUS(img) + + # # # 16 output channel, with each a single image file + # # if config["ins_effects"]["readout16"] == True: + # # print(" 16 Output Channel simulation") + # # for coli in [0, 1]: + # # for rowi in range(8): + # # sub_img = effects.readout16( + # # GSImage=img, + # # rowi=rowi, + # # coli=coli, + # # overscan_value=self.overscan) + # # rowcoltag = str(rowi) + str(coli) + # # img_name_root = chip_output.img_name.split(".")[0] + # # sub_img.write("%s/%s_%s.fits" % (chip_output.subdir, img_name_root, rowcoltag)) + # # del sub_img + # return img diff --git a/ObservationSim/Instrument/FocalPlane.py b/ObservationSim/Instrument/FocalPlane.py index 70ccbef..b3e309c 100755 --- a/ObservationSim/Instrument/FocalPlane.py +++ b/ObservationSim/Instrument/FocalPlane.py @@ -1,8 +1,9 @@ import galsim import numpy as np + class FocalPlane(object): - def __init__(self, config=None, chip_list=None, survey_type='Photometric', bad_chips=None): + def __init__(self, chip_list=None, survey_type='Photometric', bad_chips=None): """Get the focal plane layout """ self.nchips = 42 @@ -14,7 +15,7 @@ class FocalPlane(object): self.bad_chips = bad_chips for chip_id in bad_chips: self.ignore_chips.append(chip_id) - + if chip_list is not None: for i in range(42): if not (i+1 in chip_list): @@ -39,25 +40,25 @@ class FocalPlane(object): for i in range(1, 31): self.ignore_chips.append(i) - if config is not None: - self.nchip_x = config["nchip_x"] - self.nchip_y = config["nchip_y"] - self.npix_tot_x = config["npix_tot_x"] - self.npix_tot_y = config["npix_tot_y"] - self.npix_gap_x = config["npix_gap_x"] - self.npix_gap_y = config["npix_gap_y"] - if "chipLabelIDs" in config: - self.chipLabelIDs = config["chipLabelIDs"] - if "bad_chips" in config: - self.bad_chips = config["bad_chips"] - else: - self.nchip_x = 6 - self.nchip_y = 5 - self.npix_tot_x = 59516 - self.npix_tot_y = 49752 - self.npix_gap_x = (534, 1309) - self.npix_gap_y = 898 - + # if config is not None: + # self.nchip_x = config["nchip_x"] + # self.nchip_y = config["nchip_y"] + # self.npix_tot_x = config["npix_tot_x"] + # self.npix_tot_y = config["npix_tot_y"] + # self.npix_gap_x = config["npix_gap_x"] + # self.npix_gap_y = config["npix_gap_y"] + # if "chipLabelIDs" in config: + # self.chipLabelIDs = config["chipLabelIDs"] + # if "bad_chips" in config: + # self.bad_chips = config["bad_chips"] + # else: + self.nchip_x = 6 + self.nchip_y = 5 + self.npix_tot_x = 59516 + self.npix_tot_y = 49752 + self.npix_gap_x = (534, 1309) + self.npix_gap_y = 898 + self._getCenter() def _getCenter(self): @@ -65,7 +66,7 @@ class FocalPlane(object): self.cen_pix_y = 0 def getChipLabel(self, chipID): - return str("0%d"%chipID)[-2:] + return str("0%d" % chipID)[-2:] def isBadChip(self, chipID): """Check if chip #(chipID) on the focal plane is bad or not @@ -89,7 +90,8 @@ class FocalPlane(object): WCS of the focal plane """ if logger is not None: - logger.info(" Construct the wcs of the entire image mosaic using Gnomonic/TAN projection") + logger.info( + " Construct the wcs of the entire image mosaic using Gnomonic/TAN projection") if (xcen == None) or (ycen == None): xcen = self.cen_pix_x ycen = self.cen_pix_y @@ -98,13 +100,14 @@ class FocalPlane(object): # dvdx = -np.sin(img_rot.rad) * pix_scale # dvdy = +np.cos(img_rot.rad) * pix_scale - dudx = -np.cos(img_rot.rad) * pix_scale - dudy = +np.sin(img_rot.rad) * pix_scale - dvdx = -np.sin(img_rot.rad) * pix_scale - dvdy = -np.cos(img_rot.rad) * pix_scale - + dudx = -np.cos(img_rot.rad) * pix_scale + dudy = +np.sin(img_rot.rad) * pix_scale + dvdx = -np.sin(img_rot.rad) * pix_scale + dvdy = -np.cos(img_rot.rad) * pix_scale + moscen = galsim.PositionD(x=xcen, y=ycen) - sky_center = galsim.CelestialCoord(ra=ra*galsim.degrees, dec=dec*galsim.degrees) + sky_center = galsim.CelestialCoord( + ra=ra*galsim.degrees, dec=dec*galsim.degrees) affine = galsim.AffineTransform(dudx, dudy, dvdx, dvdy, origin=moscen) WCS = galsim.TanWCS(affine, sky_center, units=galsim.arcsec) @@ -115,10 +118,10 @@ class FocalPlane(object): The sky coverage of an area """ r2d = 180.0/np.pi - s1 = wcs.toWorld(galsim.PositionD(x0,y0)) - s2 = wcs.toWorld(galsim.PositionD(x0,y1)) - s3 = wcs.toWorld(galsim.PositionD(x1,y0)) - s4 = wcs.toWorld(galsim.PositionD(x1,y1)) + s1 = wcs.toWorld(galsim.PositionD(x0, y0)) + s2 = wcs.toWorld(galsim.PositionD(x0, y1)) + s3 = wcs.toWorld(galsim.PositionD(x1, y0)) + s4 = wcs.toWorld(galsim.PositionD(x1, y1)) ra = [s1.ra.rad*r2d, s2.ra.rad*r2d, s3.ra.rad*r2d, s4.ra.rad*r2d] dec = [s1.dec.rad*r2d, s2.dec.rad*r2d, s3.dec.rad*r2d, s4.dec.rad*r2d] diff --git a/tests/test_focalplane.py b/tests/test_focalplane.py new file mode 100644 index 0000000..43ea112 --- /dev/null +++ b/tests/test_focalplane.py @@ -0,0 +1,31 @@ +import unittest +import os +import galsim +from ObservationSim.Instrument import FocalPlane, Chip + + +class TestFocalPlane(unittest.TestCase): + def __init__(self, methodName='runTest'): + super(TestFocalPlane, self).__init__(methodName) + self.dataPath = os.path.join( + os.getenv('UNIT_TEST_DATA_ROOT'), 'csst_msc_sim/csst_fz_msc') + self.focal_plane = FocalPlane( + chip_list=['8']) + self.assertTrue(self.focal_plane.cen_pix_x == 0) + self.assertTrue(self.focal_plane.cen_pix_y == 0) + test_focal_plane_phot = FocalPlane(survey_type='Photometric') + test_focal_plane_spec = FocalPlane(survey_type='Spectroscopic') + test_focal_plane_FGS = FocalPlane(survey_type='FGS') + test_focal_plane_bad_chips = FocalPlane(bad_chips=["1"]) + + def test_fp_method(self): + wcs = self.focal_plane.getTanWCS( + 192.8595, 0., 0.*galsim.degrees, 0.0074) + sky_coverage = self.focal_plane.getSkyCoverage( + wcs, x0=-1, x1=0, y0=-1, y1=0) + print(sky_coverage.area()) + self.assertTrue(abs(sky_coverage.area() - 0.0074**2/(3600.**2)) < 1e13) + + +if __name__ == '__main_': + unittest.main() -- GitLab From 228262c43ba59563132a23c74a1bec713205f8fc Mon Sep 17 00:00:00 2001 From: fangyuedong Date: Sun, 28 Apr 2024 06:44:44 +0800 Subject: [PATCH 3/8] modify .ignore file --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e6e5446..8afedbd 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,6 @@ dist/* *interp.c !*libshao.so *.out -pnodes \ No newline at end of file +pnodes +.coverage +coverage \ No newline at end of file -- GitLab From a6e8b701ff91cda70b7ddd33846896495cc77c0a Mon Sep 17 00:00:00 2001 From: fangyuedong Date: Sun, 28 Apr 2024 06:46:40 +0800 Subject: [PATCH 4/8] modify .gitignore --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e6e5446..1f3b7ec 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,6 @@ dist/* *interp.c !*libshao.so *.out -pnodes \ No newline at end of file +pnodes +coverage +.coverage \ No newline at end of file -- GitLab From 557baafbdb8cad756e4ad1d7fe1c04230ac1fc72 Mon Sep 17 00:00:00 2001 From: zhangxin Date: Wed, 1 May 2024 00:12:52 +0800 Subject: [PATCH 5/8] fix header checksum issue; update straylight mode PSF file --- ObservationSim/Straylight/lib/PST | 146 ++++++++++----------- ObservationSim/sim_steps/readout_output.py | 19 ++- 2 files changed, 82 insertions(+), 83 deletions(-) mode change 100755 => 100644 ObservationSim/Straylight/lib/PST diff --git a/ObservationSim/Straylight/lib/PST b/ObservationSim/Straylight/lib/PST old mode 100755 new mode 100644 index 849cd60..5d8b6ab --- a/ObservationSim/Straylight/lib/PST +++ b/ObservationSim/Straylight/lib/PST @@ -1,73 +1,73 @@ - -5.6762217e-02 -1.1179007e+00 -2.0436628e+00 -2.8425037e+00 -3.5228787e+00 -4.0932431e+00 -4.5620519e+00 -4.9377604e+00 -5.2288239e+00 -5.4436975e+00 -5.5984256e+00 -5.7394089e+00 -5.9206373e+00 -6.1961006e+00 -6.6197888e+00 -7.2212055e+00 -7.9319101e+00 -8.6589761e+00 -9.3094766e+00 -9.7904850e+00 -1.0035258e+01 -1.0081788e+01 -9.9942484e+00 -9.8368156e+00 -9.6736641e+00 -9.5573981e+00 -9.4943368e+00 -9.4792287e+00 -9.5068220e+00 -9.5718652e+00 -9.6654976e+00 -9.7644232e+00 -9.8417369e+00 -9.8705338e+00 -9.8239087e+00 -9.6906665e+00 -9.5224502e+00 -9.3866128e+00 -9.3505071e+00 -9.4814861e+00 -9.8469024e+00 -1.0514109e+01 -1.1550459e+01 -1.3023305e+01 -1.5000000e+01 - -5.6565136e-02 -1.1151415e+00 -2.0405204e+00 -2.8405001e+00 -3.5228787e+00 -4.0954548e+00 -4.5660264e+00 -4.9423918e+00 -5.2323494e+00 -5.4436975e+00 -5.5924387e+00 -5.7273935e+00 -5.9055868e+00 -6.1840436e+00 -6.6197888e+00 -7.2437066e+00 -7.9821192e+00 -8.7352080e+00 -9.4031545e+00 -9.8861402e+00 -1.0113397e+01 -1.0130361e+01 -1.0011518e+01 -9.8313537e+00 -9.6643546e+00 -9.5696097e+00 -9.5446213e+00 -9.5714945e+00 -9.6323346e+00 -9.7092467e+00 -9.7850940e+00 -9.8457719e+00 -9.8779333e+00 -9.8682317e+00 -9.8033200e+00 -9.6816702e+00 -9.5490287e+00 -9.4629605e+00 -9.4810307e+00 -9.6608043e+00 -1.0059846e+01 -1.0735722e+01 -1.1745996e+01 -1.3148234e+01 -1.5000000e+01 - -5.6388704e-02 -1.1126715e+00 -2.0377073e+00 -2.8387063e+00 -3.5228787e+00 -4.0974347e+00 -4.5695844e+00 -4.9465380e+00 -5.2355056e+00 -5.4436975e+00 -5.5870791e+00 -5.7166370e+00 -5.8921133e+00 -6.1732499e+00 -6.6197888e+00 -7.2638482e+00 -8.0270519e+00 -8.8034000e+00 -9.4868924e+00 -9.9715293e+00 -1.0182945e+01 -1.0173315e+01 -1.0026446e+01 -9.8261467e+00 -9.6562267e+00 -9.5816195e+00 -9.5917603e+00 -9.6572096e+00 -9.7485279e+00 -9.8362757e+00 -9.8957676e+00 -9.9213351e+00 -9.9120638e+00 -9.8670391e+00 -9.7853468e+00 -9.6743218e+00 -9.5742972e+00 -9.5338552e+00 -9.6015784e+00 -9.8260490e+00 -1.0255850e+01 -1.0939563e+01 -1.1925770e+01 -1.3263055e+01 -1.5000000e+01 - -5.6232254e-02 -1.1104812e+00 -2.0352128e+00 -2.8371158e+00 -3.5228787e+00 -4.0991904e+00 -4.5727395e+00 -4.9502145e+00 -5.2383043e+00 -5.4436975e+00 -5.5823265e+00 -5.7070988e+00 -5.8801658e+00 -6.1636787e+00 -6.6197888e+00 -7.2817066e+00 -8.0668792e+00 -8.8638132e+00 -9.5610148e+00 -1.0046990e+01 -1.0244191e+01 -1.0210845e+01 -1.0039125e+01 -9.8212036e+00 -9.6492544e+00 -9.5934349e+00 -9.6358423e+00 -9.7365586e+00 -9.8556661e+00 -9.9532467e+00 -9.9977731e+00 -9.9912794e+00 -9.9441899e+00 -9.8669292e+00 -9.7699219e+00 -9.6685851e+00 -9.5983077e+00 -9.5994710e+00 -9.7124565e+00 -9.9776458e+00 -1.0435420e+01 -1.1126161e+01 -1.2090251e+01 -1.3368070e+01 -1.5000000e+01 - -5.6095120e-02 -1.1085613e+00 -2.0330263e+00 -2.8357216e+00 -3.5228787e+00 -4.1007294e+00 -4.5755050e+00 -4.9534372e+00 -5.2407575e+00 -5.4436975e+00 -5.5781606e+00 -5.6987382e+00 -5.8696933e+00 -6.1552891e+00 -6.6197888e+00 -7.2973579e+00 -8.1017720e+00 -8.9167088e+00 -9.6258462e+00 -1.0112862e+01 -1.0297422e+01 -1.0243148e+01 -1.0049649e+01 -9.8165337e+00 -9.6434115e+00 -9.6050633e+00 -9.6769555e+00 -9.8097261e+00 -9.9540131e+00 -1.0060454e+01 -1.0091365e+01 -1.0055771e+01 -9.9743735e+00 -9.8678750e+00 -9.7569779e+00 -9.6644239e+00 -9.6211123e+00 -9.6599819e+00 -9.8139715e+00 -1.0116020e+01 -1.0599066e+01 -1.1296048e+01 -1.2239905e+01 -1.3463576e+01 -1.5000000e+01 - -5.5976633e-02 -1.1069025e+00 -2.0311371e+00 -2.8345169e+00 -3.5228787e+00 -4.1020591e+00 -4.5778945e+00 -4.9562216e+00 -5.2428771e+00 -5.4436975e+00 -5.5745613e+00 -5.6915144e+00 -5.8606448e+00 -6.1480403e+00 -6.6197888e+00 -7.3108787e+00 -8.1319012e+00 -8.9623480e+00 -9.6817109e+00 -1.0169482e+01 -1.0342928e+01 -1.0270422e+01 -1.0058112e+01 -9.8121462e+00 -9.6386719e+00 -9.6165122e+00 -9.7151885e+00 -9.8768968e+00 -1.0043833e+01 -1.0158193e+01 -1.0176799e+01 -1.0114977e+01 -1.0002676e+01 -9.8698495e+00 -9.7464477e+00 -9.6618020e+00 -9.6427632e+00 -9.7155622e+00 -9.9064297e+00 -1.0241597e+01 -1.0747294e+01 -1.1449752e+01 -1.2375202e+01 -1.3549874e+01 -1.5000000e+01 - -5.5876127e-02 -1.1054954e+00 -2.0295345e+00 -2.8334951e+00 -3.5228787e+00 -4.1031870e+00 -4.5799214e+00 -4.9585835e+00 -5.2446751e+00 -5.4436975e+00 -5.5715081e+00 -5.6853869e+00 -5.8529695e+00 -6.1418916e+00 -6.6197888e+00 -7.3223450e+00 -8.1574376e+00 -9.0009919e+00 -9.7289336e+00 -1.0217188e+01 -1.0380997e+01 -1.0292864e+01 -1.0064608e+01 -9.8080503e+00 -9.6350093e+00 -9.6277891e+00 -9.7506297e+00 -9.9382553e+00 -1.0125390e+01 -1.0246758e+01 -1.0254329e+01 -1.0169062e+01 -1.0029160e+01 -9.8728258e+00 -9.7382640e+00 -9.6606832e+00 -9.6633125e+00 -9.7663858e+00 -9.9901375e+00 -1.0354801e+01 -1.0880612e+01 -1.1587803e+01 -1.2496608e+01 -1.3627263e+01 -1.5000000e+01 - -5.5792935e-02 -1.1043307e+00 -2.0282081e+00 -2.8326493e+00 -3.5228787e+00 -4.1041206e+00 -4.5815991e+00 -4.9605386e+00 -5.2461633e+00 -5.4436975e+00 -5.5689809e+00 -5.6803150e+00 -5.8466164e+00 -6.1368021e+00 -6.6197888e+00 -7.3318332e+00 -8.1785521e+00 -9.0329017e+00 -9.7678388e+00 -1.0256320e+01 -1.0411917e+01 -1.0310669e+01 -1.0069231e+01 -9.8042552e+00 -9.6323976e+00 -9.6389014e+00 -9.7833675e+00 -9.9939862e+00 -1.0198948e+01 -1.0326442e+01 -1.0324211e+01 -1.0218195e+01 -1.0053886e+01 -9.8767769e+00 -9.7323595e+00 -9.6610314e+00 -9.6828122e+00 -9.8126270e+00 -1.0065401e+01 -1.0456060e+01 -1.0999528e+01 -1.1710731e+01 -1.2604594e+01 -1.3696042e+01 -1.5000000e+01 - -5.5726389e-02 -1.1033991e+00 -2.0271471e+00 -2.8319728e+00 -3.5228787e+00 -4.1048674e+00 -4.5829411e+00 -4.9621024e+00 -5.2473537e+00 -5.4436975e+00 -5.5669594e+00 -5.6762579e+00 -5.8415345e+00 -6.1327309e+00 -6.6197888e+00 -7.3394197e+00 -8.1954156e+00 -9.0583386e+00 -9.7987508e+00 -1.0287214e+01 -1.0435977e+01 -1.0324036e+01 -1.0072073e+01 -9.8007702e+00 -9.6308107e+00 -9.6498566e+00 -9.8134904e+00 -1.0044274e+01 -1.0264771e+01 -1.0397542e+01 -1.0386698e+01 -1.0262540e+01 -1.0076916e+01 -9.8816759e+00 -9.7286670e+00 -9.6628103e+00 -9.7013144e+00 -9.8544599e+00 -1.0132527e+01 -1.0545797e+01 -1.1104550e+01 -1.1819066e+01 -1.2699626e+01 -1.3756510e+01 -1.5000000e+01 - -5.5675822e-02 -1.1026911e+00 -2.0263408e+00 -2.8314587e+00 -3.5228787e+00 -4.1054348e+00 -4.5839608e+00 -4.9632907e+00 -5.2482583e+00 -5.4436975e+00 -5.5654233e+00 -5.6731750e+00 -5.8376729e+00 -6.1296374e+00 -6.6197888e+00 -7.3451806e+00 -8.2081991e+00 -9.0775638e+00 -9.8219941e+00 -1.0310210e+01 -1.0453466e+01 -1.0333160e+01 -1.0073229e+01 -9.7976045e+00 -9.6302224e+00 -9.6606622e+00 -9.8410867e+00 -1.0089304e+01 -1.0323123e+01 -1.0460351e+01 -1.0442046e+01 -1.0302265e+01 -1.0098313e+01 -9.8874958e+00 -9.7271192e+00 -9.6659838e+00 -9.7188714e+00 -9.8920585e+00 -1.0191822e+01 -1.0624438e+01 -1.1196184e+01 -1.1913337e+01 -1.2782173e+01 -1.3808968e+01 -1.5000000e+01 - -5.5640568e-02 -1.1021976e+00 -2.0257787e+00 -2.8311003e+00 -3.5228787e+00 -4.1058305e+00 -4.5846718e+00 -4.9641192e+00 -5.2488889e+00 -5.4436975e+00 -5.5643524e+00 -5.6710257e+00 -5.8349807e+00 -6.1274806e+00 -6.6197888e+00 -7.3491922e+00 -8.2170733e+00 -9.0908383e+00 -9.8378934e+00 -1.0325645e+01 -1.0464671e+01 -1.0338240e+01 -1.0072792e+01 -9.7947672e+00 -9.6306064e+00 -9.6713256e+00 -9.8662449e+00 -1.0129260e+01 -1.0374268e+01 -1.0515163e+01 -1.0490510e+01 -1.0337536e+01 -1.0118137e+01 -9.8942098e+00 -9.7276488e+00 -9.6705157e+00 -9.7355351e+00 -9.9255970e+00 -1.0243592e+01 -1.0692409e+01 -1.1274940e+01 -1.1994075e+01 -1.2852703e+01 -1.3853714e+01 -1.5000000e+01 - -5.5619959e-02 -1.1019090e+00 -2.0254501e+00 -2.8308908e+00 -3.5228787e+00 -4.1060617e+00 -4.5850874e+00 -4.9646035e+00 -5.2492576e+00 -5.4436975e+00 -5.5637263e+00 -5.6697692e+00 -5.8334068e+00 -6.1262198e+00 -6.6197888e+00 -7.3515309e+00 -8.2222093e+00 -9.0984234e+00 -9.8467729e+00 -1.0333857e+01 -1.0469881e+01 -1.0339471e+01 -1.0070856e+01 -9.7922676e+00 -9.6319367e+00 -9.6818544e+00 -9.8890535e+00 -1.0164328e+01 -1.0418470e+01 -1.0562274e+01 -1.0532344e+01 -1.0368519e+01 -1.0136451e+01 -9.9017907e+00 -9.7301886e+00 -9.6763699e+00 -9.7513576e+00 -9.9552495e+00 -1.0288143e+01 -1.0750135e+01 -1.1341325e+01 -1.2061808e+01 -1.2911684e+01 -1.3891048e+01 -1.5000000e+01 - -5.5613327e-02 -1.1018162e+00 -2.0253443e+00 -2.8308233e+00 -3.5228787e+00 -4.1061362e+00 -4.5852212e+00 -4.9647593e+00 -5.2493763e+00 -5.4436975e+00 -5.5635248e+00 -5.6693649e+00 -5.8329004e+00 -6.1258141e+00 -6.6197888e+00 -7.3522729e+00 -8.2237778e+00 -9.1005803e+00 -9.8489573e+00 -1.0335186e+01 -1.0469386e+01 -1.0337050e+01 -1.0067515e+01 -9.7901149e+00 -9.6341872e+00 -9.6922558e+00 -9.9096008e+00 -1.0194690e+01 -1.0455993e+01 -1.0601978e+01 -1.0567803e+01 -1.0395381e+01 -1.0153316e+01 -9.9102118e+00 -9.7346713e+00 -9.6835100e+00 -9.7663912e+00 -9.9811900e+00 -1.0325782e+01 -1.0798042e+01 -1.1395845e+01 -1.2117068e+01 -1.2959584e+01 -1.3921270e+01 -1.5000000e+01 - -5.5620006e-02 -1.1019097e+00 -2.0254508e+00 -2.8308912e+00 -3.5228787e+00 -4.1060612e+00 -4.5850865e+00 -4.9646024e+00 -5.2492568e+00 -5.4436975e+00 -5.5637277e+00 -5.6697721e+00 -5.8334104e+00 -6.1262227e+00 -6.6197888e+00 -7.3514946e+00 -8.2219498e+00 -9.0975700e+00 -9.8447710e+00 -1.0329968e+01 -1.0463473e+01 -1.0331175e+01 -1.0062862e+01 -9.7883183e+00 -9.6373315e+00 -9.7025376e+00 -9.9279752e+00 -1.0220534e+01 -1.0487102e+01 -1.0634570e+01 -1.0597142e+01 -1.0418288e+01 -1.0168794e+01 -9.9194460e+00 -9.7410298e+00 -9.6919001e+00 -9.7806878e+00 -1.0003593e+01 -1.0356815e+01 -1.0836554e+01 -1.1439010e+01 -1.2160383e+01 -1.2996872e+01 -1.3944678e+01 -1.5000000e+01 - -5.5639328e-02 -1.1021802e+00 -2.0257589e+00 -2.8310877e+00 -3.5228787e+00 -4.1058444e+00 -4.5846968e+00 -4.9641483e+00 -5.2489111e+00 -5.4436975e+00 -5.5643147e+00 -5.6709501e+00 -5.8348860e+00 -6.1274048e+00 -6.6197888e+00 -7.3492721e+00 -8.2168961e+00 -9.0896539e+00 -9.8345384e+00 -1.0318543e+01 -1.0452430e+01 -1.0322042e+01 -1.0056991e+01 -9.7868871e+00 -9.6413436e+00 -9.7127070e+00 -9.9442653e+00 -1.0242042e+01 -1.0512060e+01 -1.0660343e+01 -1.0620615e+01 -1.0437406e+01 -1.0182946e+01 -9.9294664e+00 -9.7491966e+00 -9.7015038e+00 -9.7942996e+00 -1.0022632e+01 -1.0381549e+01 -1.0866097e+01 -1.1471326e+01 -1.2192283e+01 -1.3024016e+01 -1.3961572e+01 -1.5000000e+01 - -5.5670627e-02 -1.1026184e+00 -2.0262580e+00 -2.8314059e+00 -3.5228787e+00 -4.1054931e+00 -4.5840656e+00 -4.9634128e+00 -5.2483512e+00 -5.4436975e+00 -5.5652655e+00 -5.6728583e+00 -5.8372762e+00 -6.1293196e+00 -6.6197888e+00 -7.3456818e+00 -8.2087877e+00 -9.0770930e+00 -9.8185842e+00 -1.0301248e+01 -1.0436547e+01 -1.0309848e+01 -1.0049995e+01 -9.7858304e+00 -9.6461973e+00 -9.7227716e+00 -9.9585594e+00 -1.0259400e+01 -1.0531131e+01 -1.0679593e+01 -1.0638478e+01 -1.0452903e+01 -1.0195835e+01 -9.9402461e+00 -9.7591046e+00 -9.7122850e+00 -9.8072787e+00 -1.0038481e+01 -1.0400289e+01 -1.0887097e+01 -1.1493302e+01 -1.2213299e+01 -1.3041484e+01 -1.3972252e+01 -1.5000000e+01 - -5.5713235e-02 -1.1032149e+00 -2.0269373e+00 -2.8318391e+00 -3.5228787e+00 -4.1050150e+00 -4.5832064e+00 -4.9624115e+00 -5.2475890e+00 -5.4436975e+00 -5.5665598e+00 -5.6754559e+00 -5.8405300e+00 -6.1319262e+00 -6.6197888e+00 -7.3408001e+00 -8.1977954e+00 -9.0601485e+00 -9.7972327e+00 -1.0278422e+01 -1.0416112e+01 -1.0294791e+01 -1.0041969e+01 -9.7851574e+00 -9.6518664e+00 -9.7327388e+00 -9.9709460e+00 -1.0272792e+01 -1.0544580e+01 -1.0692614e+01 -1.0650986e+01 -1.0464944e+01 -1.0207522e+01 -9.9517580e+00 -9.7706865e+00 -9.7242075e+00 -9.8196771e+00 -1.0051316e+01 -1.0413343e+01 -1.0899979e+01 -1.1505445e+01 -1.2223959e+01 -1.3049743e+01 -1.3977017e+01 -1.5000000e+01 - -5.5766485e-02 -1.1039604e+00 -2.0277864e+00 -2.8323804e+00 -3.5228787e+00 -4.1044174e+00 -4.5821325e+00 -4.9611601e+00 -5.2466364e+00 -5.4436975e+00 -5.5681774e+00 -5.6787024e+00 -5.8445965e+00 -6.1351839e+00 -6.6197888e+00 -7.3347030e+00 -8.1840902e+00 -9.0390815e+00 -9.7708084e+00 -1.0250402e+01 -1.0391413e+01 -1.0277066e+01 -1.0033006e+01 -9.7848773e+00 -9.6583248e+00 -9.7426161e+00 -9.9815135e+00 -1.0282403e+01 -1.0552670e+01 -1.0699700e+01 -1.0658393e+01 -1.0473695e+01 -1.0218069e+01 -9.9639753e+00 -9.7838750e+00 -9.7372351e+00 -9.8315471e+00 -1.0061308e+01 -1.0421016e+01 -1.0905168e+01 -1.1508262e+01 -1.2224794e+01 -1.3049263e+01 -1.3976166e+01 -1.5000000e+01 - -5.5829710e-02 -1.1048456e+00 -2.0287944e+00 -2.8330232e+00 -3.5228787e+00 -4.1037079e+00 -4.5808575e+00 -4.9596743e+00 -5.2455054e+00 -5.4436975e+00 -5.5700981e+00 -5.6825570e+00 -5.8494248e+00 -6.1390519e+00 -6.6197888e+00 -7.3274671e+00 -8.1678429e+00 -9.0141534e+00 -9.7396358e+00 -1.0217527e+01 -1.0362738e+01 -1.0256871e+01 -1.0023199e+01 -9.7849995e+00 -9.6655462e+00 -9.7524109e+00 -9.9903503e+00 -1.0288417e+01 -1.0555665e+01 -1.0701147e+01 -1.0660953e+01 -1.0479324e+01 -1.0227537e+01 -9.9768710e+00 -9.7986029e+00 -9.7513317e+00 -9.8429406e+00 -1.0068634e+01 -1.0423616e+01 -1.0903090e+01 -1.1502261e+01 -1.2216334e+01 -1.3040512e+01 -1.3969999e+01 -1.5000000e+01 - -5.5902242e-02 -1.1058610e+00 -2.0299509e+00 -2.8337606e+00 -3.5228787e+00 -4.1028939e+00 -4.5793947e+00 -4.9579698e+00 -5.2442079e+00 -5.4436975e+00 -5.5723014e+00 -5.6869791e+00 -5.8549638e+00 -6.1434892e+00 -6.6197888e+00 -7.3191684e+00 -8.1492243e+00 -8.9856251e+00 -9.7040394e+00 -1.0180136e+01 -1.0330377e+01 -1.0234402e+01 -1.0012643e+01 -9.7855330e+00 -9.6735047e+00 -9.7621308e+00 -9.9975448e+00 -1.0291020e+01 -1.0553830e+01 -1.0697248e+01 -1.0658922e+01 -1.0481996e+01 -1.0235989e+01 -9.9904182e+00 -9.8148029e+00 -9.7664610e+00 -9.8539098e+00 -1.0073466e+01 -1.0421447e+01 -1.0894170e+01 -1.1487951e+01 -1.2199108e+01 -1.3023957e+01 -1.3958815e+01 -1.5000000e+01 - -5.5983415e-02 -1.1069974e+00 -2.0312452e+00 -2.8345859e+00 -3.5228787e+00 -4.1019830e+00 -4.5777577e+00 -4.9560623e+00 -5.2427558e+00 -5.4436975e+00 -5.5747673e+00 -5.6919279e+00 -5.8611627e+00 -6.1484552e+00 -6.6197888e+00 -7.3098834e+00 -8.1284055e+00 -8.9537580e+00 -9.6643437e+00 -1.0138566e+01 -1.0294618e+01 -1.0209857e+01 -1.0001431e+01 -9.7864872e+00 -9.6821739e+00 -9.7717832e+00 -1.0003185e+01 -1.0290396e+01 -1.0547428e+01 -1.0688299e+01 -1.0652555e+01 -1.0481879e+01 -1.0243485e+01 -1.0004590e+01 -9.8324078e+00 -9.7825869e+00 -9.8645068e+00 -1.0075980e+01 -1.0414818e+01 -1.0878833e+01 -1.1465838e+01 -1.2173645e+01 -1.3000066e+01 -1.3942914e+01 -1.5000000e+01 - -5.6072561e-02 -1.1082455e+00 -2.0326666e+00 -2.8354922e+00 -3.5228787e+00 -4.1009825e+00 -4.5759600e+00 -4.9539673e+00 -5.2411611e+00 -5.4436975e+00 -5.5774753e+00 -5.6973628e+00 -5.8679705e+00 -6.1539090e+00 -6.6197888e+00 -7.2996883e+00 -8.1055572e+00 -8.9188130e+00 -9.6208732e+00 -1.0093155e+01 -1.0255749e+01 -1.0183432e+01 -9.9896562e+00 -9.7878711e+00 -9.6915277e+00 -9.7813755e+00 -1.0007361e+01 -1.0286729e+01 -1.0536724e+01 -1.0674593e+01 -1.0642106e+01 -1.0479137e+01 -1.0250088e+01 -1.0019359e+01 -9.8513502e+00 -9.7996733e+00 -9.8747837e+00 -1.0076348e+01 -1.0404033e+01 -1.0857505e+01 -1.1436431e+01 -1.2140477e+01 -1.2969309e+01 -1.3922595e+01 -1.5000000e+01 - -5.6169013e-02 -1.1095958e+00 -2.0342045e+00 -2.8364728e+00 -3.5228787e+00 -4.0999001e+00 -4.5740148e+00 -4.9517007e+00 -5.2394356e+00 -5.4436975e+00 -5.5804054e+00 -5.7032432e+00 -5.8753362e+00 -6.1598097e+00 -6.6197888e+00 -7.2886594e+00 -8.0808504e+00 -8.8810516e+00 -9.5739523e+00 -1.0044242e+01 -1.0214058e+01 -1.0155325e+01 -9.9774128e+00 -9.7896941e+00 -9.7015399e+00 -9.7909153e+00 -1.0010159e+01 -1.0280204e+01 -1.0521982e+01 -1.0656426e+01 -1.0627830e+01 -1.0473939e+01 -1.0255860e+01 -1.0034699e+01 -9.8715631e+00 -9.8176838e+00 -9.8847927e+00 -1.0074746e+01 -1.0389400e+01 -1.0830611e+01 -1.1400236e+01 -1.2100131e+01 -1.2932153e+01 -1.3898157e+01 -1.5000000e+01 - -5.6272104e-02 -1.1110391e+00 -2.0358482e+00 -2.8375209e+00 -3.5228787e+00 -4.0987432e+00 -4.5719358e+00 -4.9492781e+00 -5.2375915e+00 -5.4436975e+00 -5.5835370e+00 -5.7095283e+00 -5.8832090e+00 -6.1661166e+00 -6.6197888e+00 -7.2768729e+00 -8.0544560e+00 -8.8407346e+00 -9.5239056e+00 -9.9921656e+00 -1.0169835e+01 -1.0125731e+01 -9.9647945e+00 -9.7919653e+00 -9.7121845e+00 -9.8004099e+00 -1.0011669e+01 -1.0271006e+01 -1.0503465e+01 -1.0634091e+01 -1.0609982e+01 -1.0466450e+01 -1.0260862e+01 -1.0050582e+01 -9.8929790e+00 -9.8365824e+00 -9.8945857e+00 -1.0071347e+01 -1.0371225e+01 -1.0798577e+01 -1.1357763e+01 -1.2053140e+01 -1.2889066e+01 -1.3869900e+01 -1.5000000e+01 - -5.6381167e-02 -1.1125660e+00 -2.0375871e+00 -2.8386297e+00 -3.5228787e+00 -4.0975193e+00 -4.5697364e+00 -4.9467151e+00 -5.2356404e+00 -5.4436975e+00 -5.5868501e+00 -5.7161775e+00 -5.8915378e+00 -6.1727888e+00 -6.6197888e+00 -7.2644053e+00 -8.0265448e+00 -8.7981235e+00 -9.4710575e+00 -9.9372628e+00 -1.0123368e+01 -1.0094849e+01 -9.9518947e+00 -9.7946939e+00 -9.7234351e+00 -9.8098670e+00 -1.0011979e+01 -1.0259319e+01 -1.0481438e+01 -1.0607884e+01 -1.0588816e+01 -1.0456836e+01 -1.0265155e+01 -1.0066983e+01 -9.9155307e+00 -9.8563328e+00 -9.9042149e+00 -1.0066326e+01 -1.0349814e+01 -1.0761828e+01 -1.1309518e+01 -1.2000031e+01 -1.2840516e+01 -1.3838123e+01 -1.5000000e+01 - -5.6495535e-02 -1.1141671e+00 -2.0394107e+00 -2.8397924e+00 -3.5228787e+00 -4.0962358e+00 -4.5674300e+00 -4.9440274e+00 -5.2335945e+00 -5.4436975e+00 -5.5903244e+00 -5.7231502e+00 -5.9002716e+00 -6.1797856e+00 -6.6197888e+00 -7.2513327e+00 -7.9972878e+00 -8.7534793e+00 -9.4157324e+00 -9.8798724e+00 -1.0074945e+01 -1.0062874e+01 -9.9388073e+00 -9.7978893e+00 -9.7352657e+00 -9.8192938e+00 -1.0011177e+01 -1.0245328e+01 -1.0456164e+01 -1.0578098e+01 -1.0564588e+01 -1.0445265e+01 -1.0268802e+01 -1.0083873e+01 -9.9391510e+00 -9.8768989e+00 -9.9137324e+00 -1.0059856e+01 -1.0325473e+01 -1.0720789e+01 -1.1256008e+01 -1.1941335e+01 -1.2786972e+01 -1.3803126e+01 -1.5000000e+01 - -5.6614540e-02 -1.1158332e+00 -2.0413081e+00 -2.8410023e+00 -3.5228787e+00 -4.0949003e+00 -4.5650300e+00 -4.9412308e+00 -5.2314657e+00 -5.4436975e+00 -5.5939395e+00 -5.7304055e+00 -5.9093597e+00 -6.1870661e+00 -6.6197888e+00 -7.2377314e+00 -7.9668557e+00 -8.7070632e+00 -9.3582550e+00 -9.8203325e+00 -1.0024854e+01 -1.0030004e+01 -9.9256259e+00 -9.8015605e+00 -9.7476501e+00 -9.8286979e+00 -1.0009351e+01 -1.0229219e+01 -1.0427908e+01 -1.0545029e+01 -1.0537553e+01 -1.0431902e+01 -1.0271864e+01 -1.0101226e+01 -9.9637726e+00 -9.8982445e+00 -9.9231904e+00 -1.0052112e+01 -1.0298510e+01 -1.0675886e+01 -1.1197743e+01 -1.1877581e+01 -1.2728902e+01 -1.3765208e+01 -1.5000000e+01 - -5.6737516e-02 -1.1175548e+00 -2.0432689e+00 -2.8422526e+00 -3.5228787e+00 -4.0935203e+00 -4.5625500e+00 -4.9383409e+00 -5.2292658e+00 -5.4436975e+00 -5.5976752e+00 -5.7379029e+00 -5.9187509e+00 -6.1945894e+00 -6.6197888e+00 -7.2236777e+00 -7.9354196e+00 -8.6591363e+00 -9.2989496e+00 -9.7589813e+00 -9.9733845e+00 -9.9964360e+00 -9.9124441e+00 -9.8057168e+00 -9.7605621e+00 -9.8380868e+00 -1.0006591e+01 -1.0211174e+01 -1.0396934e+01 -1.0508971e+01 -1.0507964e+01 -1.0416914e+01 -1.0274403e+01 -1.0119014e+01 -9.9893283e+00 -9.9203335e+00 -9.9326408e+00 -1.0043267e+01 -1.0269229e+01 -1.0627544e+01 -1.1135229e+01 -1.1809300e+01 -1.2666774e+01 -1.3724669e+01 -1.5000000e+01 - -5.6863795e-02 -1.1193228e+00 -2.0452824e+00 -2.8435364e+00 -3.5228787e+00 -4.0921031e+00 -4.5600034e+00 -4.9353733e+00 -5.2270068e+00 -5.4436975e+00 -5.6015113e+00 -5.7456017e+00 -5.9283944e+00 -6.2023149e+00 -6.6197888e+00 -7.2092480e+00 -7.9031503e+00 -8.6099598e+00 -9.2381407e+00 -9.6961570e+00 -9.9208247e+00 -9.9623661e+00 -9.8993556e+00 -9.8103673e+00 -9.7739756e+00 -9.8474678e+00 -1.0002985e+01 -1.0191379e+01 -1.0363506e+01 -1.0470219e+01 -1.0476077e+01 -1.0400467e+01 -1.0276481e+01 -1.0137212e+01 -1.0015751e+01 -9.9431295e+00 -9.9421359e+00 -1.0033497e+01 -1.0237939e+01 -1.0576189e+01 -1.1068974e+01 -1.1737021e+01 -1.2601056e+01 -1.3681807e+01 -1.5000000e+01 - -5.6992709e-02 -1.1211276e+00 -2.0473378e+00 -2.8448471e+00 -3.5228787e+00 -4.0906564e+00 -4.5574036e+00 -4.9323439e+00 -5.2247006e+00 -5.4436975e+00 -5.6054274e+00 -5.7534612e+00 -5.9382392e+00 -6.2102016e+00 -6.6197888e+00 -7.1945185e+00 -7.8702187e+00 -8.5597950e+00 -9.1761529e+00 -9.6321979e+00 -9.8674630e+00 -9.9279915e+00 -9.8864541e+00 -9.8155214e+00 -9.7878644e+00 -9.8568486e+00 -9.9986200e+00 -1.0170020e+01 -1.0327888e+01 -1.0429066e+01 -1.0442147e+01 -1.0382728e+01 -1.0278160e+01 -1.0155791e+01 -1.0042973e+01 -9.9665965e+00 -9.9517277e+00 -1.0022974e+01 -1.0204944e+01 -1.0522245e+01 -1.0999486e+01 -1.1661274e+01 -1.2532217e+01 -1.3636923e+01 -1.5000000e+01 - -5.7123593e-02 -1.1229599e+00 -2.0494247e+00 -2.8461777e+00 -3.5228787e+00 -4.0891876e+00 -4.5547641e+00 -4.9292681e+00 -5.2223593e+00 -5.4436975e+00 -5.6094034e+00 -5.7614408e+00 -5.9482343e+00 -6.2182088e+00 -6.6197888e+00 -7.1795654e+00 -7.8367957e+00 -8.5089029e+00 -9.1133106e+00 -9.5674420e+00 -9.8135880e+00 -9.8935091e+00 -9.8738332e+00 -9.8211883e+00 -9.8022023e+00 -9.8662365e+00 -9.9935859e+00 -1.0147279e+01 -1.0290344e+01 -1.0385809e+01 -1.0406428e+01 -1.0363863e+01 -1.0279500e+01 -1.0174726e+01 -1.0070927e+01 -9.9906982e+00 -9.9614683e+00 -1.0011874e+01 -1.0170552e+01 -1.0466139e+01 -1.0927272e+01 -1.1582588e+01 -1.2460724e+01 -1.3590315e+01 -1.5000000e+01 - -5.7255778e-02 -1.1248105e+00 -2.0515323e+00 -2.8475216e+00 -3.5228787e+00 -4.0877042e+00 -4.5520984e+00 -4.9261617e+00 -5.2199946e+00 -5.4436975e+00 -5.6134189e+00 -5.7694997e+00 -5.9583289e+00 -6.2262956e+00 -6.6197888e+00 -7.1644651e+00 -7.8030521e+00 -8.4575448e+00 -9.0499382e+00 -9.5022276e+00 -9.7594880e+00 -9.8591157e+00 -9.8615866e+00 -9.8273771e+00 -9.8169632e+00 -9.8756390e+00 -9.9879707e+00 -1.0123342e+01 -1.0251137e+01 -1.0340740e+01 -1.0369176e+01 -1.0344039e+01 -1.0280565e+01 -1.0193989e+01 -1.0099546e+01 -1.0015399e+01 -9.9714098e+00 -1.0000370e+01 -1.0135069e+01 -1.0408296e+01 -1.0852841e+01 -1.1501494e+01 -1.2387045e+01 -1.3542284e+01 -1.5000000e+01 - -5.7388598e-02 -1.1266700e+00 -2.0536501e+00 -2.8488719e+00 -3.5228787e+00 -4.0862137e+00 -4.5494199e+00 -4.9230405e+00 -5.2176186e+00 -5.4436975e+00 -5.6174536e+00 -5.7775972e+00 -5.9684719e+00 -6.2344212e+00 -6.6197888e+00 -7.1492939e+00 -7.7691589e+00 -8.4059817e+00 -8.9863604e+00 -9.4368928e+00 -9.7054517e+00 -9.8250082e+00 -9.8498080e+00 -9.8340970e+00 -9.8321208e+00 -9.8850637e+00 -9.9818628e+00 -1.0098394e+01 -1.0210533e+01 -1.0294155e+01 -1.0330644e+01 -1.0323422e+01 -1.0281415e+01 -1.0213553e+01 -1.0128763e+01 -1.0040661e+01 -9.9816044e+00 -9.9886362e+00 -1.0098800e+01 -1.0349140e+01 -1.0776699e+01 -1.1418521e+01 -1.2311649e+01 -1.3493128e+01 -1.5000000e+01 - -5.7521385e-02 -1.1285290e+00 -2.0557673e+00 -2.8502219e+00 -3.5228787e+00 -4.0847235e+00 -4.5467420e+00 -4.9199200e+00 -5.2152432e+00 -5.4436975e+00 -5.6214874e+00 -5.7856928e+00 -5.9786124e+00 -6.2425448e+00 -6.6197888e+00 -7.1341280e+00 -7.7352869e+00 -8.3544749e+00 -8.9229015e+00 -9.3717760e+00 -9.6517675e+00 -9.7913835e+00 -9.8385911e+00 -9.8413573e+00 -9.8476491e+00 -9.8945178e+00 -9.9753506e+00 -1.0072619e+01 -1.0168794e+01 -1.0246348e+01 -1.0291089e+01 -1.0302178e+01 -1.0282112e+01 -1.0233391e+01 -1.0158511e+01 -1.0066450e+01 -9.9921041e+00 -9.9768469e+00 -1.0062053e+01 -1.0289098e+01 -1.0699355e+01 -1.1334199e+01 -1.2235005e+01 -1.3443147e+01 -1.5000000e+01 - -5.7653472e-02 -1.1303782e+00 -2.0578733e+00 -2.8515648e+00 -3.5228787e+00 -4.0832412e+00 -4.5440782e+00 -4.9168159e+00 -5.2128803e+00 -5.4436975e+00 -5.6254999e+00 -5.7937457e+00 -5.9886995e+00 -6.2506256e+00 -6.6197888e+00 -7.1190438e+00 -7.7016071e+00 -8.3032856e+00 -8.8598860e+00 -9.3072152e+00 -9.5987239e+00 -9.7584385e+00 -9.8280295e+00 -9.8491671e+00 -9.8635219e+00 -9.9040090e+00 -9.9685226e+00 -1.0046202e+01 -1.0126186e+01 -1.0197614e+01 -1.0250764e+01 -1.0280473e+01 -1.0282719e+01 -1.0253476e+01 -1.0188721e+01 -1.0092729e+01 -1.0002961e+01 -9.9651763e+00 -1.0025134e+01 -1.0228594e+01 -1.0621316e+01 -1.1249058e+01 -1.2157579e+01 -1.3392640e+01 -1.5000000e+01 - -5.7784193e-02 -1.1322083e+00 -2.0599576e+00 -2.8528938e+00 -3.5228787e+00 -4.0817742e+00 -4.5414420e+00 -4.9137440e+00 -5.2105419e+00 -5.4436975e+00 -5.6294709e+00 -5.8017153e+00 -5.9986821e+00 -6.2586228e+00 -6.6197888e+00 -7.1041174e+00 -7.6682903e+00 -8.2526749e+00 -8.7976385e+00 -9.2435487e+00 -9.5466093e+00 -9.7263700e+00 -9.8182168e+00 -9.8575358e+00 -9.8797130e+00 -9.9135446e+00 -9.9614672e+00 -1.0019327e+01 -1.0082972e+01 -1.0148247e+01 -1.0209924e+01 -1.0258475e+01 -1.0283296e+01 -1.0273781e+01 -1.0219328e+01 -1.0119462e+01 -1.0014227e+01 -9.9537983e+00 -9.9883495e+00 -1.0168055e+01 -1.0543089e+01 -1.1163627e+01 -1.2079841e+01 -1.3341908e+01 -1.5000000e+01 - -5.7912879e-02 -1.1340099e+00 -2.0620094e+00 -2.8542021e+00 -3.5228787e+00 -4.0803301e+00 -4.5388469e+00 -4.9107199e+00 -5.2082398e+00 -5.4436975e+00 -5.6333801e+00 -5.8095609e+00 -6.0085095e+00 -6.2664955e+00 -6.6197888e+00 -7.0894253e+00 -7.6355075e+00 -8.2029039e+00 -8.7364833e+00 -9.1811146e+00 -9.4957123e+00 -9.6953749e+00 -9.8092468e+00 -9.8664725e+00 -9.8961963e+00 -9.9231322e+00 -9.9542727e+00 -9.9921798e+00 -1.0039415e+01 -1.0098542e+01 -1.0168825e+01 -1.0236350e+01 -1.0283905e+01 -1.0294280e+01 -1.0250264e+01 -1.0146613e+01 -1.0025955e+01 -9.9428872e+00 -9.9520053e+00 -1.0107905e+01 -1.0465184e+01 -1.1078436e+01 -1.2002259e+01 -1.3291248e+01 -1.5000000e+01 - -5.8038864e-02 -1.1357737e+00 -2.0640182e+00 -2.8554830e+00 -3.5228787e+00 -4.0789163e+00 -4.5363062e+00 -4.9077592e+00 -5.2059861e+00 -5.4436975e+00 -5.6372073e+00 -5.8172418e+00 -6.0181305e+00 -6.2742030e+00 -6.6197888e+00 -7.0750437e+00 -7.6034294e+00 -8.1542338e+00 -8.6767451e+00 -9.1202512e+00 -9.4463213e+00 -9.6656500e+00 -9.8012131e+00 -9.8759864e+00 -9.9129455e+00 -9.9327792e+00 -9.9470278e+00 -9.9649441e+00 -9.9957815e+00 -1.0048793e+01 -1.0127721e+01 -1.0214263e+01 -1.0284609e+01 -1.0314945e+01 -1.0281461e+01 -1.0174145e+01 -1.0038196e+01 -9.9326170e+00 -9.9164081e+00 -1.0048571e+01 -1.0388106e+01 -1.0994015e+01 -1.1925300e+01 -1.3240961e+01 -1.5000000e+01 - -5.8161480e-02 -1.1374903e+00 -2.0659732e+00 -2.8567296e+00 -3.5228787e+00 -4.0775402e+00 -4.5338334e+00 -4.9048777e+00 -5.2037926e+00 -5.4436975e+00 -5.6409321e+00 -5.8247173e+00 -6.0274943e+00 -6.2817044e+00 -6.6197888e+00 -7.0610488e+00 -7.5722270e+00 -8.1069259e+00 -8.6187482e+00 -9.0612966e+00 -9.3987249e+00 -9.6373923e+00 -9.7942094e+00 -9.8860867e+00 -9.9299346e+00 -9.9424931e+00 -9.9398206e+00 -9.9378049e+00 -9.9523338e+00 -9.9992951e+00 -1.0086866e+01 -1.0192382e+01 -1.0285469e+01 -1.0335750e+01 -1.0312852e+01 -1.0202022e+01 -1.0051003e+01 -9.9231618e+00 -9.8818641e+00 -9.9904762e+00 -1.0312364e+01 -1.0910894e+01 -1.1849433e+01 -1.3191346e+01 -1.5000000e+01 - -5.8280061e-02 -1.1391505e+00 -2.0678639e+00 -2.8579351e+00 -3.5228787e+00 -4.0762095e+00 -4.5314420e+00 -4.9020911e+00 -5.2016713e+00 -5.4436975e+00 -5.6445343e+00 -5.8319468e+00 -6.0365499e+00 -6.2889589e+00 -6.6197888e+00 -7.0475170e+00 -7.5420712e+00 -8.0612413e+00 -8.5628172e+00 -9.0045890e+00 -9.3532115e+00 -9.6107986e+00 -9.7883294e+00 -9.8967826e+00 -9.9471373e+00 -9.9522813e+00 -9.9327398e+00 -9.9109467e+00 -9.9093363e+00 -9.9503426e+00 -1.0046516e+01 -1.0170873e+01 -1.0286546e+01 -1.0356667e+01 -1.0344370e+01 -1.0230208e+01 -1.0064428e+01 -9.9146958e+00 -9.8486799e+00 -9.9340475e+00 -1.0238466e+01 -1.0829603e+01 -1.1775126e+01 -1.3142703e+01 -1.5000000e+01 - -5.8393939e-02 -1.1407448e+00 -2.0696797e+00 -2.8590929e+00 -3.5228787e+00 -4.0749315e+00 -4.5291455e+00 -4.8994150e+00 -5.1996342e+00 -5.4436975e+00 -5.6479937e+00 -5.8388895e+00 -6.0452464e+00 -6.2959257e+00 -6.6197888e+00 -7.0345246e+00 -7.5131329e+00 -8.0174411e+00 -8.5092765e+00 -8.9504667e+00 -9.3100696e+00 -9.5860658e+00 -9.7836667e+00 -9.9080835e+00 -9.9645274e+00 -9.9621514e+00 -9.9258737e+00 -9.8845543e+00 -9.8670531e+00 -9.9022301e+00 -1.0006926e+01 -1.0149902e+01 -1.0287903e+01 -1.0377670e+01 -1.0375948e+01 -1.0258668e+01 -1.0078522e+01 -9.9073931e+00 -9.8171617e+00 -9.8797099e+00 -1.0166919e+01 -1.0750671e+01 -1.1702847e+01 -1.3095330e+01 -1.5000000e+01 - -5.8502447e-02 -1.1422639e+00 -2.0714098e+00 -2.8601961e+00 -3.5228787e+00 -4.0737138e+00 -4.5269573e+00 -4.8968650e+00 -5.1976931e+00 -5.4436975e+00 -5.6512899e+00 -5.8455049e+00 -6.0535328e+00 -6.3025640e+00 -6.6197888e+00 -7.0221478e+00 -7.4855829e+00 -7.9757865e+00 -8.4584507e+00 -8.8992678e+00 -9.2695877e+00 -9.5633907e+00 -9.7803149e+00 -9.9199983e+00 -9.9820790e+00 -9.9721107e+00 -9.9193107e+00 -9.8588122e+00 -9.8257483e+00 -9.8552521e+00 -9.9683492e+00 -1.0129636e+01 -1.0289600e+01 -1.0398731e+01 -1.0407518e+01 -1.0287364e+01 -1.0093339e+01 -9.9014277e+00 -9.7876160e+00 -9.8278887e+00 -1.0098231e+01 -1.0674628e+01 -1.1633065e+01 -1.3049527e+01 -1.5000000e+01 - -5.8604918e-02 -1.1436985e+00 -2.0730436e+00 -2.8612378e+00 -3.5228787e+00 -4.0725639e+00 -4.5248908e+00 -4.8944570e+00 -5.1958600e+00 -5.4436975e+00 -5.6544027e+00 -5.8517522e+00 -6.0613582e+00 -6.3088329e+00 -6.6197888e+00 -7.0104629e+00 -7.4595922e+00 -7.9365387e+00 -8.4106641e+00 -8.8513305e+00 -9.2320543e+00 -9.5429702e+00 -9.7783679e+00 -9.9325365e+00 -9.9997656e+00 -9.9821667e+00 -9.9131393e+00 -9.8339051e+00 -9.7856858e+00 -9.8097031e+00 -9.9310419e+00 -1.0110241e+01 -1.0291701e+01 -1.0419824e+01 -1.0439013e+01 -1.0316260e+01 -1.0108929e+01 -9.8969738e+00 -9.7603490e+00 -9.7790094e+00 -1.0032909e+01 -1.0602004e+01 -1.1566248e+01 -1.3005595e+01 -1.5000000e+01 - -5.8700684e-02 -1.1450392e+00 -2.0745705e+00 -2.8622115e+00 -3.5228787e+00 -4.0714892e+00 -4.5229595e+00 -4.8922064e+00 -5.1941469e+00 -5.4436975e+00 -5.6573119e+00 -5.8575908e+00 -6.0686715e+00 -6.3146917e+00 -6.6197888e+00 -6.9995462e+00 -7.4353316e+00 -7.8999588e+00 -8.3662414e+00 -8.8069930e+00 -9.1977578e+00 -9.5250013e+00 -9.7779191e+00 -9.9457072e+00 -1.0017561e+01 -9.9923269e+00 -9.9074479e+00 -9.8100177e+00 -9.7471298e+00 -9.7658777e+00 -9.8952583e+00 -1.0091883e+01 -1.0294266e+01 -1.0440922e+01 -1.0470366e+01 -1.0345322e+01 -1.0125346e+01 -9.8942056e+00 -9.7356672e+00 -9.7334973e+00 -9.9714622e+00 -1.0533328e+01 -1.1502863e+01 -1.2963831e+01 -1.5000000e+01 - -5.8789079e-02 -1.1462767e+00 -2.0759800e+00 -2.8631101e+00 -3.5228787e+00 -4.0704972e+00 -4.5211768e+00 -4.8901292e+00 -5.1925656e+00 -5.4436975e+00 -5.6599971e+00 -5.8629799e+00 -6.0754220e+00 -6.3200995e+00 -6.6197888e+00 -6.9894740e+00 -7.4129721e+00 -7.8663080e+00 -8.3255069e+00 -8.7665936e+00 -9.1669869e+00 -9.5096806e+00 -9.7790623e+00 -9.9595196e+00 -1.0035440e+01 -1.0002599e+01 -9.9023250e+00 -9.7873346e+00 -9.7103442e+00 -9.7240703e+00 -9.8612533e+00 -1.0074729e+01 -1.0297357e+01 -1.0461998e+01 -1.0501510e+01 -1.0374511e+01 -1.0142641e+01 -9.8932970e+00 -9.7138770e+00 -9.6917778e+00 -9.9143969e+00 -1.0469131e+01 -1.1443379e+01 -1.2924536e+01 -1.5000000e+01 - -5.8869436e-02 -1.1474017e+00 -2.0772612e+00 -2.8639271e+00 -3.5228787e+00 -4.0695954e+00 -4.5195563e+00 -4.8882408e+00 -5.1911281e+00 -5.4436975e+00 -5.6624382e+00 -5.8678790e+00 -6.0815585e+00 -6.3250156e+00 -6.6197888e+00 -6.9803226e+00 -7.3926844e+00 -7.8358476e+00 -8.2887851e+00 -8.7304703e+00 -9.1400299e+00 -9.4972052e+00 -9.7818912e+00 -9.9739828e+00 -1.0053375e+01 -1.0012990e+01 -9.8978589e+00 -9.7660404e+00 -9.6755932e+00 -9.6845757e+00 -9.8292816e+00 -1.0058945e+01 -1.0301036e+01 -1.0483024e+01 -1.0532377e+01 -1.0403792e+01 -1.0160866e+01 -9.8944223e+00 -9.6952846e+00 -9.6542763e+00 -9.8622211e+00 -1.0409942e+01 -1.1388264e+01 -1.2888008e+01 -1.5000000e+01 - -5.8941086e-02 -1.1484048e+00 -2.0784036e+00 -2.8646556e+00 -3.5228787e+00 -4.0687913e+00 -4.5181114e+00 -4.8865570e+00 -5.1898463e+00 -5.4436975e+00 -5.6646148e+00 -5.8722473e+00 -6.0870303e+00 -6.3293990e+00 -6.6197888e+00 -6.9721682e+00 -7.3746396e+00 -7.8088385e+00 -8.2564006e+00 -8.6989614e+00 -9.1171753e+00 -9.4877719e+00 -9.7864994e+00 -9.9891063e+00 -1.0071341e+01 -1.0023508e+01 -9.8941380e+00 -9.7463198e+00 -9.6431406e+00 -9.6476882e+00 -9.7995982e+00 -1.0044699e+01 -1.0305365e+01 -1.0503974e+01 -1.0562901e+01 -1.0433129e+01 -1.0180074e+01 -9.8977556e+00 -9.6801965e+00 -9.6214182e+00 -9.8154426e+00 -1.0356291e+01 -1.1337986e+01 -1.2854548e+01 -1.5000000e+01 - -5.9003364e-02 -1.1492767e+00 -2.0793966e+00 -2.8652887e+00 -3.5228787e+00 -4.0680924e+00 -4.5168554e+00 -4.8850935e+00 -5.1887323e+00 -5.4436975e+00 -5.6665066e+00 -5.8760441e+00 -6.0917862e+00 -6.3332090e+00 -6.6197888e+00 -6.9650872e+00 -7.3590085e+00 -7.7855421e+00 -8.2286778e+00 -8.6724051e+00 -9.0987117e+00 -9.4815775e+00 -9.7929807e+00 -1.0004899e+01 -1.0089311e+01 -1.0034159e+01 -9.8912509e+00 -9.7283574e+00 -9.6132507e+00 -9.6137024e+00 -9.7724577e+00 -1.0032155e+01 -1.0310405e+01 -1.0524821e+01 -1.0593013e+01 -1.0462486e+01 -1.0200316e+01 -9.9034708e+00 -9.6689190e+00 -9.5936289e+00 -9.7745690e+00 -1.0308708e+01 -1.1293014e+01 -1.2824455e+01 -1.5000000e+01 - -5.9055602e-02 -1.1500081e+00 -2.0802295e+00 -2.8658198e+00 -3.5228787e+00 -4.0675062e+00 -4.5158020e+00 -4.8838659e+00 -5.1877978e+00 -5.4436975e+00 -5.6680935e+00 -5.8792289e+00 -6.0957754e+00 -6.3364048e+00 -6.6197888e+00 -6.9591559e+00 -7.3459619e+00 -7.7662195e+00 -8.2059412e+00 -8.6511395e+00 -9.0849275e+00 -9.4788190e+00 -9.8014285e+00 -1.0021370e+01 -1.0107259e+01 -1.0044953e+01 -9.8892860e+00 -9.7123380e+00 -9.5861873e+00 -9.5829128e+00 -9.7481149e+00 -1.0021481e+01 -1.0316219e+01 -1.0545538e+01 -1.0622647e+01 -1.0491827e+01 -1.0221645e+01 -9.9117423e+00 -9.6617585e+00 -9.5713337e+00 -9.7401081e+00 -1.0267722e+01 -1.1253815e+01 -1.2798028e+01 -1.5000000e+01 - -5.9097132e-02 -1.1505895e+00 -2.0808917e+00 -2.8662420e+00 -3.5228787e+00 -4.0670401e+00 -4.5149644e+00 -4.8828899e+00 -5.1870549e+00 -5.4436975e+00 -5.6693551e+00 -5.8817609e+00 -6.0989469e+00 -6.3389455e+00 -6.6197888e+00 -6.9544505e+00 -7.3356709e+00 -7.7511319e+00 -8.1885153e+00 -8.6355030e+00 -9.0761112e+00 -9.4796932e+00 -9.8119367e+00 -1.0038529e+01 -1.0125159e+01 -1.0055895e+01 -9.8883315e+00 -9.6984460e+00 -9.5622146e+00 -9.5556141e+00 -9.7268247e+00 -1.0012842e+01 -1.0322867e+01 -1.0566098e+01 -1.0651735e+01 -1.0521114e+01 -1.0244113e+01 -9.9227440e+00 -9.6590213e+00 -9.5549580e+00 -9.7125675e+00 -1.0233863e+01 -1.1220858e+01 -1.2775566e+01 -1.5000000e+01 - -5.9127288e-02 -1.1510117e+00 -2.0813725e+00 -2.8665486e+00 -3.5228787e+00 -4.0667017e+00 -4.5143563e+00 -4.8821813e+00 -5.1865154e+00 -5.4436975e+00 -5.6702712e+00 -5.8835994e+00 -6.1012498e+00 -6.3407904e+00 -6.6197888e+00 -6.9510472e+00 -7.3283062e+00 -7.7405403e+00 -8.1767245e+00 -8.6258336e+00 -9.0725513e+00 -9.4843969e+00 -9.8245989e+00 -1.0056386e+01 -1.0142985e+01 -1.0066993e+01 -9.8884761e+00 -9.6868662e+00 -9.5415967e+00 -9.5321006e+00 -9.7088418e+00 -1.0006407e+01 -1.0330412e+01 -1.0586474e+01 -1.0680211e+01 -1.0550313e+01 -1.0267772e+01 -9.9366502e+00 -9.6610139e+00 -9.5449272e+00 -9.6924548e+00 -1.0207661e+01 -1.1194611e+01 -1.2757369e+01 -1.5000000e+01 - -5.9145402e-02 -1.1512653e+00 -2.0816613e+00 -2.8667328e+00 -3.5228787e+00 -4.0664984e+00 -4.5139910e+00 -4.8817556e+00 -5.1861914e+00 -5.4436975e+00 -5.6708214e+00 -5.8847037e+00 -6.1026332e+00 -6.3418986e+00 -6.6197888e+00 -6.9490225e+00 -7.3240387e+00 -7.7347061e+00 -8.1708934e+00 -8.6224696e+00 -9.0745363e+00 -9.4931271e+00 -9.8395088e+00 -1.0074948e+01 -1.0160711e+01 -1.0078256e+01 -9.8898082e+00 -9.6777832e+00 -9.5245974e+00 -9.5126671e+00 -9.6944211e+00 -1.0002339e+01 -1.0338915e+01 -1.0606639e+01 -1.0708006e+01 -1.0579387e+01 -1.0292673e+01 -9.9536349e+00 -9.6680426e+00 -9.5416668e+00 -9.6802778e+00 -1.0189646e+01 -1.1175542e+01 -1.2743737e+01 -1.5000000e+01 - -5.9150808e-02 -1.1513409e+00 -2.0817475e+00 -2.8667877e+00 -3.5228787e+00 -4.0664378e+00 -4.5138820e+00 -4.8816285e+00 -5.1860947e+00 -5.4436975e+00 -5.6709857e+00 -5.8850333e+00 -6.1030460e+00 -6.3422293e+00 -6.6197888e+00 -6.9484526e+00 -7.3230394e+00 -7.7338903e+00 -8.1713464e+00 -8.6257491e+00 -9.0823546e+00 -9.5060806e+00 -9.8567600e+00 -1.0094226e+01 -1.0178310e+01 -1.0089690e+01 -9.8924160e+00 -9.6713816e+00 -9.5114809e+00 -9.4976079e+00 -9.6838174e+00 -1.0000808e+01 -1.0348438e+01 -1.0626567e+01 -1.0735054e+01 -1.0608299e+01 -1.0318870e+01 -9.9738721e+00 -9.6804137e+00 -9.5456020e+00 -9.6765442e+00 -1.0180348e+01 -1.1164120e+01 -1.2734968e+01 -1.5000000e+01 - -5.9142837e-02 -1.1512293e+00 -2.0816204e+00 -2.8667067e+00 -3.5228787e+00 -4.0665272e+00 -4.5140427e+00 -4.8818158e+00 -5.1862372e+00 -5.4436975e+00 -5.6707435e+00 -5.8845474e+00 -6.1024373e+00 -6.3417417e+00 -6.6197888e+00 -6.9494137e+00 -7.3254791e+00 -7.7383541e+00 -8.1784081e+00 -8.6360103e+00 -9.0962948e+00 -9.5234543e+00 -9.8764462e+00 -1.0114228e+01 -1.0195757e+01 -1.0101303e+01 -9.8963881e+00 -9.6678462e+00 -9.5025113e+00 -9.4872177e+00 -9.6772853e+00 -1.0001977e+01 -1.0359042e+01 -1.0646229e+01 -1.0761287e+01 -1.0637015e+01 -1.0346414e+01 -9.9975362e+00 -9.6984337e+00 -9.5571582e+00 -9.6817615e+00 -1.0180296e+01 -1.1160812e+01 -1.2731363e+01 -1.5000000e+01 - -5.9120824e-02 -1.1509212e+00 -2.0812694e+00 -2.8664829e+00 -3.5228787e+00 -4.0667743e+00 -4.5144867e+00 -4.8823332e+00 -5.1866310e+00 -5.4436975e+00 -5.6700748e+00 -5.8832053e+00 -6.1007562e+00 -6.3403949e+00 -6.6197888e+00 -6.9519822e+00 -7.3315287e+00 -7.7483587e+00 -8.1924028e+00 -8.6535915e+00 -9.1166454e+00 -9.5454451e+00 -9.8986611e+00 -1.0134964e+01 -1.0213025e+01 -1.0113102e+01 -9.9018130e+00 -9.6673614e+00 -9.4979525e+00 -9.4817910e+00 -9.6750798e+00 -1.0006015e+01 -1.0370790e+01 -1.0665600e+01 -1.0786638e+01 -1.0665496e+01 -1.0375357e+01 -1.0024801e+01 -9.7224089e+00 -9.5767609e+00 -9.6964375e+00 -1.0190019e+01 -1.1166087e+01 -1.2733220e+01 -1.5000000e+01 - -5.9084100e-02 -1.1504070e+00 -2.0806839e+00 -2.8661095e+00 -3.5228787e+00 -4.0671864e+00 -4.5152272e+00 -4.8831962e+00 -5.1872880e+00 -5.4436975e+00 -5.6689592e+00 -5.8809663e+00 -6.0979517e+00 -6.3381482e+00 -6.6197888e+00 -6.9562344e+00 -7.3413591e+00 -7.7641653e+00 -8.2136551e+00 -8.6788308e+00 -9.1436948e+00 -9.5722497e+00 -9.9234983e+00 -1.0156443e+01 -1.0230087e+01 -1.0125095e+01 -9.9087790e+00 -9.6701121e+00 -9.4980686e+00 -9.4816222e+00 -9.6774557e+00 -1.0013087e+01 -1.0383744e+01 -1.0684652e+01 -1.0811040e+01 -1.0693708e+01 -1.0405751e+01 -1.0055841e+01 -9.7526456e+00 -9.6048354e+00 -9.7210799e+00 -1.0210049e+01 -1.1180412e+01 -1.2740839e+01 -1.5000000e+01 - -5.9031999e-02 -1.1496776e+00 -2.0798532e+00 -2.8655798e+00 -3.5228787e+00 -4.0677711e+00 -4.5162780e+00 -4.8844206e+00 -5.1882200e+00 -5.4436975e+00 -5.6673765e+00 -5.8777899e+00 -6.0939729e+00 -6.3349608e+00 -6.6197888e+00 -6.9622465e+00 -7.3551413e+00 -7.7860350e+00 -8.2424895e+00 -8.7120665e+00 -9.1777316e+00 -9.6040652e+00 -9.9510515e+00 -1.0178675e+01 -1.0246919e+01 -1.0137290e+01 -9.9173745e+00 -9.6762828e+00 -9.5031236e+00 -9.4870060e+00 -9.6846676e+00 -1.0023360e+01 -1.0397964e+01 -1.0703359e+01 -1.0834425e+01 -1.0721613e+01 -1.0437650e+01 -1.0090830e+01 -9.7894502e+00 -9.6418071e+00 -9.7561963e+00 -1.0240914e+01 -1.1204257e+01 -1.2754520e+01 -1.5000000e+01 - -5.8963853e-02 -1.1487236e+00 -2.0787666e+00 -2.8648870e+00 -3.5228787e+00 -4.0685358e+00 -4.5176522e+00 -4.8860220e+00 -5.1894391e+00 -5.4436975e+00 -5.6653064e+00 -5.8736353e+00 -6.0887688e+00 -6.3307918e+00 -6.6197888e+00 -6.9700947e+00 -7.3730460e+00 -7.8142290e+00 -8.2792304e+00 -8.7536367e+00 -9.2190441e+00 -9.6410883e+00 -9.9814144e+00 -1.0201668e+01 -1.0263494e+01 -1.0149693e+01 -9.9276880e+00 -9.6860582e+00 -9.5133816e+00 -9.4982369e+00 -9.6969705e+00 -1.0037000e+01 -1.0413512e+01 -1.0721693e+01 -1.0856727e+01 -1.0749177e+01 -1.0471103e+01 -1.0129942e+01 -9.8331292e+00 -9.6881013e+00 -9.8022945e+00 -1.0283145e+01 -1.1238088e+01 -1.2774561e+01 -1.5000000e+01 - -5.8878995e-02 -1.1475356e+00 -2.0774136e+00 -2.8640243e+00 -3.5228787e+00 -4.0694881e+00 -4.5193635e+00 -4.8880161e+00 -5.1909571e+00 -5.4436975e+00 -5.6627286e+00 -5.8684618e+00 -6.0822886e+00 -6.3256004e+00 -6.6197888e+00 -6.9798555e+00 -7.3952442e+00 -7.8490085e+00 -8.3242023e+00 -8.8038795e+00 -9.2679210e+00 -9.6835159e+00 -1.0014681e+01 -1.0225431e+01 -1.0279784e+01 -1.0162312e+01 -9.9398079e+00 -9.6996229e+00 -9.5291067e+00 -9.5156095e+00 -9.7146190e+00 -1.0054174e+01 -1.0430451e+01 -1.0739627e+01 -1.0877878e+01 -1.0776362e+01 -1.0506165e+01 -1.0173351e+01 -9.8839888e+00 -9.7441436e+00 -9.8598820e+00 -1.0337270e+01 -1.1282375e+01 -1.2801263e+01 -1.5000000e+01 - -5.8776759e-02 -1.1461042e+00 -2.0757835e+00 -2.8629849e+00 -3.5228787e+00 -4.0706354e+00 -4.5214253e+00 -4.8904187e+00 -5.1927860e+00 -5.4436975e+00 -5.6596229e+00 -5.8622288e+00 -6.0744811e+00 -6.3193458e+00 -6.6197888e+00 -6.9916051e+00 -7.4219067e+00 -7.8906346e+00 -8.3777298e+00 -8.8631333e+00 -9.3246506e+00 -9.7315449e+00 -1.0050944e+01 -1.0249975e+01 -1.0295766e+01 -1.0175155e+01 -9.9538227e+00 -9.7171615e+00 -9.5505628e+00 -9.5394181e+00 -9.7378681e+00 -1.0075048e+01 -1.0448842e+01 -1.0757135e+01 -1.0897811e+01 -1.0803133e+01 -1.0542886e+01 -1.0221232e+01 -9.9423354e+00 -9.8103591e+00 -9.9294665e+00 -1.0403821e+01 -1.1337586e+01 -1.2834924e+01 -1.5000000e+01 - -5.8656476e-02 -1.1444203e+00 -2.0738657e+00 -2.8617620e+00 -3.5228787e+00 -4.0719853e+00 -4.5238510e+00 -4.8932453e+00 -5.1949377e+00 -5.4436975e+00 -5.6559690e+00 -5.8548955e+00 -6.0652955e+00 -6.3119872e+00 -6.6197888e+00 -7.0054198e+00 -7.4532045e+00 -7.9393685e+00 -8.4401372e+00 -8.9317362e+00 -9.3895216e+00 -9.7853722e+00 -1.0090298e+01 -1.0275308e+01 -1.0311411e+01 -1.0188229e+01 -9.9698208e+00 -9.7388588e+00 -9.5780139e+00 -9.5699575e+00 -9.7669725e+00 -1.0099789e+01 -1.0468747e+01 -1.0774190e+01 -1.0916458e+01 -1.0829453e+01 -1.0581319e+01 -1.0273758e+01 -1.0008475e+01 -9.8871735e+00 -1.0011556e+01 -1.0483326e+01 -1.1404188e+01 -1.2875845e+01 -1.5000000e+01 - -5.8517480e-02 -1.1424743e+00 -2.0716495e+00 -2.8603489e+00 -3.5228787e+00 -4.0735451e+00 -4.5266541e+00 -4.8965117e+00 -5.1974242e+00 -5.4436975e+00 -5.6517466e+00 -5.8464214e+00 -6.0546809e+00 -6.3034837e+00 -6.6197888e+00 -7.0213758e+00 -7.4893085e+00 -7.9954714e+00 -8.5117492e+00 -9.0100264e+00 -9.4628223e+00 -9.8451947e+00 -1.0132836e+01 -1.0301439e+01 -1.0326695e+01 -1.0201541e+01 -9.9878905e+00 -9.7648993e+00 -9.6117243e+00 -9.6075222e+00 -9.8021870e+00 -1.0128562e+01 -1.0490227e+01 -1.0790764e+01 -1.0933752e+01 -1.0855286e+01 -1.0621516e+01 -1.0331104e+01 -1.0082715e+01 -9.9750119e+00 -1.0106658e+01 -1.0576316e+01 -1.1482650e+01 -1.2924324e+01 -1.5000000e+01 - -5.8359104e-02 -1.1402571e+00 -2.0691242e+00 -2.8587387e+00 -3.5228787e+00 -4.0753224e+00 -4.5298480e+00 -4.9002336e+00 -5.2002574e+00 -5.4436975e+00 -5.6469355e+00 -5.8367657e+00 -6.0425862e+00 -6.2937946e+00 -6.6197888e+00 -7.0395495e+00 -7.5303895e+00 -8.0592044e+00 -8.5928900e+00 -9.0983421e+00 -9.5448413e+00 -9.9112091e+00 -1.0178652e+01 -1.0328377e+01 -1.0341590e+01 -1.0215100e+01 -1.0008120e+01 -9.7954677e+00 -9.6519577e+00 -9.6524065e+00 -9.8437663e+00 -1.0161534e+01 -1.0513345e+01 -1.0806831e+01 -1.0949627e+01 -1.0880596e+01 -1.0663529e+01 -1.0393444e+01 -1.0165361e+01 -1.0074300e+01 -1.0215279e+01 -1.0683320e+01 -1.1573440e+01 -1.2980660e+01 -1.5000000e+01 - -5.8180680e-02 -1.1377591e+00 -2.0662794e+00 -2.8569248e+00 -3.5228787e+00 -4.0773248e+00 -4.5334462e+00 -4.9044265e+00 -5.2034492e+00 -5.4436975e+00 -5.6415153e+00 -5.8258878e+00 -6.0289606e+00 -6.2828790e+00 -6.6197888e+00 -7.0600171e+00 -7.5766184e+00 -8.1308287e+00 -8.6838844e+00 -9.1970214e+00 -9.6358670e+00 -9.9836125e+00 -1.0227840e+01 -1.0356132e+01 -1.0356071e+01 -1.0228912e+01 -1.0030599e+01 -9.8307486e+00 -9.6989784e+00 -9.7049053e+00 -9.8919654e+00 -1.0198873e+01 -1.0538161e+01 -1.0822364e+01 -1.0964014e+01 -1.0905347e+01 -1.0707411e+01 -1.0460952e+01 -1.0256720e+01 -1.0185463e+01 -1.0337929e+01 -1.0804867e+01 -1.1677026e+01 -1.3045154e+01 -1.5000000e+01 - -5.7981542e-02 -1.1349712e+00 -2.0631042e+00 -2.8549002e+00 -3.5228787e+00 -4.0795595e+00 -4.5374622e+00 -4.9091063e+00 -5.2070115e+00 -5.4436975e+00 -5.6354659e+00 -5.8137470e+00 -6.0137530e+00 -6.2706962e+00 -6.6197888e+00 -7.0828549e+00 -7.6281661e+00 -8.2106055e+00 -8.7850566e+00 -9.3064026e+00 -9.7361880e+00 -1.0062602e+01 -1.0280493e+01 -1.0384714e+01 -1.0370112e+01 -1.0242985e+01 -1.0055414e+01 -9.8709267e+00 -9.7530504e+00 -9.7653128e+00 -9.9470389e+00 -1.0240743e+01 -1.0564738e+01 -1.0837335e+01 -1.0976846e+01 -1.0929503e+01 -1.0753212e+01 -1.0533801e+01 -1.0357097e+01 -1.0308926e+01 -1.0475114e+01 -1.0941489e+01 -1.1793877e+01 -1.3118105e+01 -1.5000000e+01 - -5.7761021e-02 -1.1318839e+00 -2.0595881e+00 -2.8526582e+00 -3.5228787e+00 -4.0820343e+00 -4.5419093e+00 -4.9142885e+00 -5.2109564e+00 -5.4436975e+00 -5.6287670e+00 -5.8003026e+00 -5.9969126e+00 -6.2572052e+00 -6.6197888e+00 -7.1081392e+00 -7.6852035e+00 -8.2987960e+00 -8.8967313e+00 -9.4268239e+00 -9.8460926e+00 -1.0148373e+01 -1.0336706e+01 -1.0414130e+01 -1.0383686e+01 -1.0257327e+01 -1.0082655e+01 -9.9161867e+00 -9.8144376e+00 -9.8339237e+00 -1.0009242e+01 -1.0287312e+01 -1.0593137e+01 -1.0851718e+01 -1.0988057e+01 -1.0953027e+01 -1.0800986e+01 -1.0612167e+01 -1.0466800e+01 -1.0445114e+01 -1.0627342e+01 -1.1093714e+01 -1.1924460e+01 -1.3199812e+01 -1.5000000e+01 - -5.7518451e-02 -1.1284879e+00 -2.0557205e+00 -2.8501921e+00 -3.5228787e+00 -4.0847564e+00 -4.5468012e+00 -4.9199889e+00 -5.2152957e+00 -5.4436975e+00 -5.6213983e+00 -5.7855140e+00 -5.9783884e+00 -6.2423653e+00 -6.6197888e+00 -7.1359464e+00 -7.7479014e+00 -8.3956612e+00 -9.0192328e+00 -9.5586234e+00 -9.9658695e+00 -1.0241124e+01 -1.0396571e+01 -1.0444391e+01 -1.0396767e+01 -1.0271944e+01 -1.0112410e+01 -9.9667131e+00 -9.8834042e+00 -9.9110326e+00 -1.0078829e+01 -1.0338746e+01 -1.0623421e+01 -1.0865486e+01 -1.0997579e+01 -1.0975883e+01 -1.0850785e+01 -1.0696223e+01 -1.0586134e+01 -1.0594454e+01 -1.0795121e+01 -1.1262072e+01 -1.2069244e+01 -1.3290575e+01 -1.5000000e+01 - -5.7253166e-02 -1.1247739e+00 -2.0514907e+00 -2.8474950e+00 -3.5228787e+00 -4.0877335e+00 -4.5521511e+00 -4.9262231e+00 -5.2200414e+00 -5.4436975e+00 -5.6133395e+00 -5.7693404e+00 -5.9581294e+00 -6.2261357e+00 -6.6197888e+00 -7.1663526e+00 -7.8164309e+00 -8.5014624e+00 -9.1528857e+00 -9.7021394e+00 -1.0095807e+01 -1.0341052e+01 -1.0460182e+01 -1.0475505e+01 -1.0409330e+01 -1.0286845e+01 -1.0144766e+01 -1.0022691e+01 -9.9602142e+00 -9.9969339e+00 -1.0156054e+01 -1.0395212e+01 -1.0655650e+01 -1.0878613e+01 -1.1005344e+01 -1.0998035e+01 -1.0902660e+01 -1.0786143e+01 -1.0715406e+01 -1.0757370e+01 -1.0978959e+01 -1.1447094e+01 -1.2228697e+01 -1.3390692e+01 -1.5000000e+01 - -5.6964496e-02 -1.1207326e+00 -2.0468880e+00 -2.8445602e+00 -3.5228787e+00 -4.0909730e+00 -4.5579726e+00 -4.9330069e+00 -5.2252053e+00 -5.4436975e+00 -5.6045704e+00 -5.7517412e+00 -5.9360847e+00 -6.2084756e+00 -6.6197888e+00 -7.1994341e+00 -7.8909627e+00 -8.6164608e+00 -9.2980145e+00 -9.8577101e+00 -1.0236194e+01 -1.0448353e+01 -1.0527633e+01 -1.0507482e+01 -1.0421347e+01 -1.0302037e+01 -1.0179814e+01 -1.0084304e+01 -1.0045132e+01 -1.0091922e+01 -1.0241174e+01 -1.0456875e+01 -1.0689886e+01 -1.0891070e+01 -1.1011286e+01 -1.1019447e+01 -1.0956664e+01 -1.0882102e+01 -1.0854922e+01 -1.0934288e+01 -1.1179362e+01 -1.1649308e+01 -1.2403287e+01 -1.3500464e+01 -1.5000000e+01 - -5.6651777e-02 -1.1163545e+00 -2.0419018e+00 -2.8413809e+00 -3.5228787e+00 -4.0944825e+00 -4.5642791e+00 -4.9403558e+00 -5.2307995e+00 -5.4436975e+00 -5.5950706e+00 -5.7326757e+00 -5.9122033e+00 -6.1893441e+00 -6.6197888e+00 -7.2352674e+00 -7.9716678e+00 -8.7409174e+00 -9.4549436e+00 -1.0025674e+01 -1.0387318e+01 -1.0563224e+01 -1.0599018e+01 -1.0540332e+01 -1.0432793e+01 -1.0317527e+01 -1.0217641e+01 -1.0151738e+01 -1.0138420e+01 -1.0196292e+01 -1.0334442e+01 -1.0523902e+01 -1.0726192e+01 -1.0902831e+01 -1.1015337e+01 -1.1040082e+01 -1.1012849e+01 -1.0984273e+01 -1.1004989e+01 -1.1125633e+01 -1.1396840e+01 -1.1869244e+01 -1.2593482e+01 -1.3620189e+01 -1.5000000e+01 - -5.6314339e-02 -1.1116304e+00 -2.0365216e+00 -2.8379503e+00 -3.5228787e+00 -4.0982693e+00 -4.5710841e+00 -4.9482856e+00 -5.2368359e+00 -5.4436975e+00 -5.5848200e+00 -5.7121032e+00 -5.8864343e+00 -6.1687004e+00 -6.6197888e+00 -7.2739285e+00 -8.0587170e+00 -8.8750936e+00 -9.6239975e+00 -1.0206368e+01 -1.0549469e+01 -1.0685861e+01 -1.0674431e+01 -1.0574062e+01 -1.0443641e+01 -1.0333323e+01 -1.0258335e+01 -1.0225176e+01 -1.0240345e+01 -1.0310338e+01 -1.0436113e+01 -1.0596460e+01 -1.0764629e+01 -1.0913869e+01 -1.1017430e+01 -1.1059905e+01 -1.1071267e+01 -1.1092831e+01 -1.1165914e+01 -1.1331831e+01 -1.1631898e+01 -1.2107433e+01 -1.2799751e+01 -1.3750168e+01 -1.5000000e+01 - -5.5951517e-02 -1.1065509e+00 -2.0307366e+00 -2.8342616e+00 -3.5228787e+00 -4.1023409e+00 -4.5784010e+00 -4.9568119e+00 -5.2433264e+00 -5.4436975e+00 -5.5737983e+00 -5.6899832e+00 -5.8587268e+00 -6.1465038e+00 -6.6197888e+00 -7.3154939e+00 -8.1522813e+00 -9.0192504e+00 -9.8055007e+00 -1.0400132e+01 -1.0722934e+01 -1.0816463e+01 -1.0753964e+01 -1.0608683e+01 -1.0453866e+01 -1.0349432e+01 -1.0301985e+01 -1.0304805e+01 -1.0351169e+01 -1.0434355e+01 -1.0546442e+01 -1.0674715e+01 -1.0805258e+01 -1.0924158e+01 -1.1017498e+01 -1.1078880e+01 -1.1131970e+01 -1.1207950e+01 -1.1338001e+01 -1.1553306e+01 -1.1885047e+01 -1.2364404e+01 -1.3022561e+01 -1.3890699e+01 -1.5000000e+01 - -5.5562642e-02 -1.1011066e+00 -2.0245362e+00 -2.8303080e+00 -3.5228787e+00 -4.1067050e+00 -4.5862433e+00 -4.9659504e+00 -5.2502830e+00 -5.4436975e+00 -5.5619852e+00 -5.6662748e+00 -5.8290297e+00 -6.1227133e+00 -6.6197888e+00 -7.3600398e+00 -8.2525315e+00 -9.1736490e+00 -9.9997778e+00 -1.0607303e+01 -1.0908003e+01 -1.0955225e+01 -1.0837712e+01 -1.0644204e+01 -1.0463442e+01 -1.0365861e+01 -1.0348680e+01 -1.0390808e+01 -1.0471156e+01 -1.0568636e+01 -1.0665684e+01 -1.0758833e+01 -1.0848142e+01 -1.0933669e+01 -1.1015473e+01 -1.1096969e+01 -1.1195010e+01 -1.1329803e+01 -1.1521559e+01 -1.1790485e+01 -1.2156791e+01 -1.2640687e+01 -1.3262381e+01 -1.4042082e+01 -1.5000000e+01 \ No newline at end of file +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.57635679021176 -7.34526645140160 -7.85073255601413 -8.02221820307311 -8.04431224968649 -8.07556632724485 -8.12601346721120 -8.16924554093974 -8.19468968686498 -8.20760831050175 -8.21395230723792 -8.21967257246139 -8.23072000156004 -8.25304548992176 -8.29259993293443 -8.35533422598593 -8.44719926446415 -8.57414594375697 -8.74212515925228 -8.95708780633797 -9.22498478040191 -9.55176697683200 -9.94338529101611 -10.4057906183421 -10.9449338541980 -11.5667658939715 -12.2772376330505 -13.0822999668231 -13.9879037906769 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.57954399257977 -7.35238615350243 -7.86214702493269 -8.03776993402027 -8.06380545228259 -8.09114618006360 -8.13767664069574 -8.17693540469025 -8.19835557279655 -8.20722566528701 -8.22441346710398 -8.24099267033252 -8.26293499177007 -8.29624357382127 -8.34695298449798 -8.39890647268186 -8.47993553408100 -8.59588909282390 -8.75258418808298 -8.95580597407452 -9.23070056516432 -9.56497042943397 -9.96471396342266 -10.4360477188144 -10.9851064024382 -11.6007298423735 -12.3042752338789 -13.1015070020966 -13.9981720983213 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.58273119494777 -7.35950585560325 -7.87356149385126 -8.05332166496743 -8.08329865487868 -8.10672603288236 -8.14933981418028 -8.18462526844077 -8.20202145872811 -8.20684302007228 -8.23487462697005 -8.26231276820364 -8.29514998198008 -8.33944165772078 -8.40130603606154 -8.44247871937780 -8.51267180369784 -8.61763224189084 -8.76304321691369 -8.95452414181107 -9.23641634992673 -9.57817388203595 -9.98604263582921 -10.4663048192867 -11.0252789506784 -11.6346937907754 -12.3313128347072 -13.1207140373701 -14.0084404059656 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.58591839731577 -7.36662555770408 -7.88497596276983 -8.06887339591459 -8.10279185747478 -8.12230588570111 -8.16100298766482 -8.19231513219128 -8.20568734465967 -8.20646037485755 -8.24533578683611 -8.28363286607477 -8.32736497219010 -8.38263974162029 -8.45565908762509 -8.48605096607374 -8.54540807331469 -8.63937539095777 -8.77350224574440 -8.95324230954762 -9.24213213468915 -9.59137733463793 -10.0073713082358 -10.4965619197590 -11.0654514989186 -11.6686577391774 -12.3583504355355 -13.1399210726437 -14.0187087136100 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.58910559968378 -7.37374525980490 -7.89639043168839 -8.08442512686175 -8.12228506007087 -8.13788573851986 -8.17266616114935 -8.20000499594179 -8.20935323059123 -8.20607772964282 -8.25579694670217 -8.30495296394589 -8.35957996240012 -8.42583782551980 -8.51001213918865 -8.52962321276968 -8.57814434293154 -8.66111854002470 -8.78396127457510 -8.95196047728417 -9.24784791945156 -9.60458078723991 -10.0286999806423 -10.5268190202313 -11.1056240471589 -11.7026216875794 -12.3853880363638 -13.1591281079172 -14.0289770212544 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.59229280205178 -7.38086496190573 -7.90780490060696 -8.09997685780891 -8.14177826266697 -8.15346559133862 -8.18432933463389 -8.20769485969230 -8.21301911652280 -8.20569508442809 -8.26625810656823 -8.32627306181702 -8.39179495261014 -8.46903590941931 -8.56436519075221 -8.57319545946561 -8.61088061254839 -8.68286168909163 -8.79442030340581 -8.95067864502072 -9.25356370421397 -9.61778423984188 -10.0500286530489 -10.5570761207036 -11.1457965953991 -11.7365856359814 -12.4124256371922 -13.1783351431907 -14.0392453288987 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.59548000441979 -7.38798466400656 -7.91921936952552 -8.11552858875607 -8.16127146526307 -8.16904544415737 -8.19599250811843 -8.21538472344282 -8.21668500245436 -8.20531243921336 -8.27671926643429 -8.34759315968814 -8.42400994282016 -8.51223399331882 -8.61871824231576 -8.61676770616155 -8.64361688216524 -8.70460483815857 -8.80487933223651 -8.94939681275727 -9.25927948897638 -9.63098769244386 -10.0713573254554 -10.5873332211759 -11.1859691436393 -11.7705495843834 -12.4394632380205 -13.1975421784643 -14.0495136365431 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.59866720678779 -7.39510436610738 -7.93063383844409 -8.13108031970323 -8.18076466785916 -8.18462529697612 -8.20765568160296 -8.22307458719333 -8.22035088838592 -8.20492979399862 -8.28718042630035 -8.36891325755927 -8.45622493303018 -8.55543207721833 -8.67307129387932 -8.66033995285749 -8.67635315178208 -8.72634798722550 -8.81533836106721 -8.94811498049382 -9.26499527373879 -9.64419114504584 -10.0926859978620 -10.6175903216482 -11.2261416918795 -11.8045135327854 -12.4665008388488 -13.2167492137378 -14.0597819441875 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.60185440915579 -7.40222406820821 -7.94204830736265 -8.14663205065039 -8.20025787045525 -8.20020514979488 -8.21931885508750 -8.23076445094384 -8.22401677431749 -8.20454714878389 -8.29764158616642 -8.39023335543039 -8.48843992324020 -8.59863016111783 -8.72742434544287 -8.70391219955343 -8.70908942139893 -8.74809113629243 -8.82579738989792 -8.94683314823037 -9.27071105850120 -9.65739459764781 -10.1140146702685 -10.6478474221205 -11.2663142401197 -11.8384774811874 -12.4935384396772 -13.2359562490114 -14.0700502518318 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.60504161152380 -7.40934377030903 -7.95346277628122 -8.16218378159755 -8.21975107305135 -8.21578500261363 -8.23098202857204 -8.23845431469435 -8.22768266024905 -8.20416450356916 -8.30810274603248 -8.41155345330152 -8.52065491345022 -8.64182824501734 -8.78177739700643 -8.74748444624936 -8.74182569101578 -8.76983428535936 -8.83625641872862 -8.94555131596692 -9.27642684326362 -9.67059805024979 -10.1353433426751 -10.6781045225928 -11.3064867883600 -11.8724414295894 -12.5205760405055 -13.2551632842849 -14.0803185594762 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.60822881389180 -7.41646347240986 -7.96487724519979 -8.17773551254471 -8.23924427564744 -8.23136485543239 -8.24264520205658 -8.24614417844486 -8.23134854618061 -8.20378185835443 -8.31856390589854 -8.43287355117264 -8.55286990366024 -8.68502632891685 -8.83613044856998 -8.79105669294530 -8.77456196063263 -8.79157743442629 -8.84671544755933 -8.94426948370347 -9.28214262802603 -9.68380150285177 -10.1566720150816 -10.7083616230651 -11.3466593366002 -11.9064053779913 -12.5476136413338 -13.2743703195584 -14.0905868671206 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.61141601625980 -7.42358317451068 -7.97629171411835 -8.19328724349187 -8.25873747824354 -8.24694470825114 -8.25430837554111 -8.25383404219538 -8.23501443211218 -8.20339921313969 -8.32902506576460 -8.45419364904377 -8.58508489387026 -8.72822441281636 -8.89048350013354 -8.83462893964124 -8.80729823024948 -8.81332058349323 -8.85717447639003 -8.94298765144002 -9.28785841278844 -9.69700495545375 -10.1780006874882 -10.7386187235374 -11.3868318848404 -11.9403693263933 -12.5746512421621 -13.2935773548320 -14.1008551747649 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.61460321862781 -7.43070287661151 -7.98770618303692 -8.20883897443903 -8.27823068083963 -8.26252456106989 -8.26597154902565 -8.26152390594589 -8.23868031804374 -8.20301656792496 -8.33948622563066 -8.47551374691489 -8.61729988408028 -8.77142249671587 -8.94483655169710 -8.87820118633717 -8.84003449986632 -8.83506373256016 -8.86763350522074 -8.94170581917657 -9.29357419755085 -9.71020840805572 -10.1993293598947 -10.7688758240097 -11.4270044330806 -11.9743332747953 -12.6016888429905 -13.3127843901055 -14.1111234824093 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.61779042099581 -7.43782257871233 -7.99912065195548 -8.22439070538619 -8.29772388343573 -8.27810441388865 -8.27763472251019 -8.26921376969640 -8.24234620397530 -8.20263392271023 -8.34994738549673 -8.49683384478602 -8.64951487429030 -8.81462058061538 -8.99918960326065 -8.92177343303311 -8.87277076948317 -8.85680688162709 -8.87809253405144 -8.94042398691312 -9.29928998231326 -9.72341186065770 -10.2206580323013 -10.7991329244820 -11.4671769813209 -12.0082972231973 -12.6287264438188 -13.3319914253790 -14.1213917900536 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.62097762336381 -7.44494228081316 -8.01053512087405 -8.23994243633335 -8.31721708603182 -8.29368426670740 -8.28929789599473 -8.27690363344691 -8.24601208990687 -8.20225127749550 -8.36040854536279 -8.51815394265714 -8.68172986450032 -8.85781866451489 -9.05354265482421 -8.96534567972905 -8.90550703910002 -8.87855003069402 -8.88855156288215 -8.93914215464967 -9.30500576707568 -9.73661531325968 -10.2419867047078 -10.8293900249543 -11.5073495295611 -12.0422611715993 -12.6557640446471 -13.3511984606526 -14.1316600976980 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.62416482573182 -7.45206198291398 -8.02194958979261 -8.25549416728051 -8.33671028862792 -8.30926411952616 -8.30096106947926 -8.28459349719742 -8.24967797583843 -8.20186863228077 -8.37086970522885 -8.53947404052827 -8.71394485471034 -8.90101674841440 -9.10789570638777 -9.00891792642499 -8.93824330871687 -8.90029317976096 -8.89901059171285 -8.93786032238622 -9.31072155183809 -9.74981876586166 -10.2633153771144 -10.8596471254266 -11.5475220778013 -12.0762251200013 -12.6828016454754 -13.3704054959261 -14.1419284053424 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.62735202809982 -7.45918168501481 -8.03336405871118 -8.27104589822767 -8.35620349122401 -8.32484397234491 -8.31262424296380 -8.29228336094794 -8.25334386176999 -8.20148598706603 -8.38133086509491 -8.56079413839939 -8.74615984492036 -8.94421483231391 -9.16224875795132 -9.05249017312092 -8.97097957833372 -8.92203632882789 -8.90946962054356 -8.93657849012277 -9.31643733660050 -9.76302221846364 -10.2846440495209 -10.8899042258989 -11.5876946260415 -12.1101890684033 -12.7098392463038 -13.3896125311997 -14.1521967129867 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.63053923046782 -7.46630138711563 -8.04477852762975 -8.28659762917483 -8.37569669382011 -8.34042382516366 -8.32428741644834 -8.29997322469845 -8.25700974770155 -8.20110334185130 -8.39179202496097 -8.58211423627052 -8.77837483513038 -8.98741291621342 -9.21660180951488 -9.09606241981686 -9.00371584795056 -8.94377947789482 -8.91992864937426 -8.93529665785932 -9.32215312136291 -9.77622567106561 -10.3059727219275 -10.9201613263712 -11.6278671742818 -12.1441530168053 -12.7368768471321 -13.4088195664732 -14.1624650206311 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.63372643283583 -7.47342108921646 -8.05619299654831 -8.30214936012199 -8.39518989641620 -8.35600367798242 -8.33595058993288 -8.30766308844896 -8.26067563363312 -8.20072069663657 -8.40225318482703 -8.60343433414164 -8.81058982534040 -9.03061100011293 -9.27095486107843 -9.13963466651280 -9.03645211756741 -8.96552262696176 -8.93038767820497 -8.93401482559587 -9.32786890612533 -9.78942912366759 -10.3273013943340 -10.9504184268435 -11.6680397225220 -12.1781169652073 -12.7639144479604 -13.4280266017467 -14.1727333282755 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.62599123517320 -7.45614189050547 -8.02849059076907 -8.26440600435648 -8.34788076516301 -8.32014873206375 -8.31158235610189 -8.29493820772242 -8.25972078529773 -8.21159262615475 -8.40521171072143 -8.59846759658195 -8.79767843406920 -9.00970507748518 -9.24195108510101 -9.12052435835738 -9.02735576883516 -8.96666729896348 -8.94213581264120 -8.95689305523694 -9.35531526260701 -9.82186917272379 -10.3652577925677 -10.9945209434079 -11.7190352608020 -12.2212312287217 -12.7982363187015 -13.4524082540303 -14.1857680472188 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.61825603751058 -7.43886269179447 -8.00078818498984 -8.22666264859097 -8.30057163390982 -8.28429378614508 -8.28721412227091 -8.28221332699589 -8.25876593696235 -8.22246455567293 -8.40817023661583 -8.59350085902226 -8.78476704279800 -8.98879915485744 -9.21294730912360 -9.10141405020195 -9.01825942010290 -8.96781197096521 -8.95388394707744 -8.97977128487801 -9.38276161908869 -9.85430922177999 -10.4032141908014 -11.0386234599723 -11.7700307990821 -12.2643454922361 -12.8325581894426 -13.4767899063138 -14.1988027661622 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.61052083984796 -7.42158349308348 -7.97308577921060 -8.18891929282547 -8.25326250265662 -8.24843884022642 -8.26284588843993 -8.26948844626935 -8.25781108862697 -8.23333648519112 -8.41112876251022 -8.58853412146257 -8.77185565152680 -8.96789323222970 -9.18394353314619 -9.08230374204653 -9.00916307137065 -8.96895664296694 -8.96563208151368 -9.00264951451907 -9.41020797557037 -9.88674927083619 -10.4411705890351 -11.0827259765367 -11.8210263373621 -12.3074597557505 -12.8668800601837 -13.5011715585974 -14.2118374851055 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.60278564218533 -7.40430429437249 -7.94538337343136 -8.15117593705996 -8.20595337140343 -8.21258389430775 -8.23847765460895 -8.25676356554281 -8.25685624029159 -8.24420841470930 -8.41408728840462 -8.58356738390288 -8.75894426025559 -8.94698730960195 -9.15493975716877 -9.06319343389111 -9.00006672263839 -8.97010131496866 -8.97738021594992 -9.02552774416014 -9.43765433205205 -9.91918931989238 -10.4791269872687 -11.1268284931012 -11.8720218756422 -12.3505740192650 -12.9012019309248 -13.5255532108810 -14.2248722040489 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.59505044452271 -7.38702509566149 -7.91768096765212 -8.11343258129445 -8.15864424015024 -8.17672894838908 -8.21410942077797 -8.24403868481627 -8.25590139195620 -8.25508034422748 -8.41704581429901 -8.57860064634319 -8.74603286898440 -8.92608138697421 -9.12593598119135 -9.04408312573569 -8.99097037390614 -8.97124598697039 -8.98912835038615 -9.04840597380121 -9.46510068853374 -9.95162936894858 -10.5170833855024 -11.1709310096656 -11.9230174139222 -12.3936882827794 -12.9355238016659 -13.5499348631645 -14.2379069229922 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.58731524686008 -7.36974589695050 -7.88997856187288 -8.07568922552894 -8.11133510889705 -8.14087400247042 -8.18974118694699 -8.23131380408973 -8.25494654362082 -8.26595227374566 -8.42000434019341 -8.57363390878350 -8.73312147771319 -8.90517546434646 -9.09693220521394 -9.02497281758027 -8.98187402517389 -8.97239065897212 -9.00087648482239 -9.07128420344228 -9.49254704501542 -9.98406941800478 -10.5550397837361 -11.2150335262300 -11.9740129522022 -12.4368025462938 -12.9698456724070 -13.5743165154481 -14.2509416419356 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.57958004919746 -7.35246669823951 -7.86227615609364 -8.03794586976344 -8.06402597764385 -8.10501905655175 -8.16537295311601 -8.21858892336320 -8.25399169528544 -8.27682420326384 -8.42296286608781 -8.56866717122381 -8.72021008644199 -8.88426954171872 -9.06792842923652 -9.00586250942485 -8.97277767644163 -8.97353533097384 -9.01262461925863 -9.09416243308334 -9.51999340149710 -10.0165094670610 -10.5929961819698 -11.2591360427944 -12.0250084904823 -12.4799168098082 -13.0041675431481 -13.5986981677317 -14.2639763608789 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.57184485153484 -7.33518749952851 -7.83457375031441 -8.00020251399793 -8.01671684639066 -8.06916411063308 -8.14100471928503 -8.20586404263666 -8.25303684695006 -8.28769613278202 -8.42592139198221 -8.56370043366411 -8.70729869517079 -8.86336361909098 -9.03892465325910 -8.98675220126942 -8.96368132770938 -8.97468000297557 -9.02437275369486 -9.11704066272441 -9.54743975797878 -10.0489495161172 -10.6309525802034 -11.3032385593589 -12.0760040287623 -12.5230310733227 -13.0384894138892 -13.6230798200152 -14.2770110798222 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.56410965387221 -7.31790830081752 -7.80687134453517 -7.96245915823242 -7.96940771513747 -8.03330916471442 -8.11663648545405 -8.19313916191012 -8.25208199861468 -8.29856806230020 -8.42887991787660 -8.55873369610442 -8.69438730389959 -8.84245769646323 -9.00992087728169 -8.96764189311400 -8.95458497897712 -8.97582467497730 -9.03612088813110 -9.13991889236548 -9.57488611446046 -10.0813895651734 -10.6689089784371 -11.3473410759233 -12.1269995670424 -12.5661453368371 -13.0728112846303 -13.6474614722988 -14.2900457987656 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.55637445620959 -7.30062910210652 -7.77916893875593 -7.92471580246691 -7.92209858388427 -7.99745421879575 -8.09226825162306 -8.18041428118358 -8.25112715027930 -8.30943999181839 -8.43183844377100 -8.55376695854473 -8.68147591262839 -8.82155177383549 -8.98091710130427 -8.94853158495858 -8.94548863024487 -8.97696934697902 -9.04786902256734 -9.16279712200655 -9.60233247094214 -10.1138296142296 -10.7068653766708 -11.3914435924877 -12.1779951053224 -12.6092596003515 -13.1071331553714 -13.6718431245824 -14.3030805177089 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.54863925854697 -7.28334990339553 -7.75146653297669 -7.88697244670140 -7.87478945263108 -7.96159927287709 -8.06790001779208 -8.16768940045705 -8.25017230194391 -8.32031192133657 -8.43479696966539 -8.54880022098504 -8.66856452135719 -8.80064585120774 -8.95191332532686 -8.92942127680316 -8.93639228151261 -8.97811401898075 -9.05961715700357 -9.18567535164761 -9.62977882742383 -10.1462696632858 -10.7448217749044 -11.4355461090521 -12.2289906436025 -12.6523738638659 -13.1414550261125 -13.6962247768659 -14.3161152366523 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.54090406088434 -7.26607070468454 -7.72376412719745 -7.84922909093590 -7.82748032137789 -7.92574432695842 -8.04353178396110 -8.15496451973051 -8.24921745360853 -8.33118385085475 -8.43775549555979 -8.54383348342535 -8.65565313008599 -8.77973992858000 -8.92290954934944 -8.91031096864774 -8.92729593278036 -8.97925869098248 -9.07136529143981 -9.20855358128868 -9.65722518390551 -10.1787097123420 -10.7827781731381 -11.4796486256166 -12.2799861818825 -12.6954881273804 -13.1757768968536 -13.7206064291495 -14.3291499555956 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.53316886322172 -7.24879150597354 -7.69606172141822 -7.81148573517039 -7.78017119012470 -7.88988938103975 -8.01916355013012 -8.14223963900397 -8.24826260527315 -8.34205578037293 -8.44071402145419 -8.53886674586566 -8.64274173881479 -8.75883400595226 -8.89390577337203 -8.89120066049232 -8.91819958404811 -8.98040336298420 -9.08311342587605 -9.23143181092975 -9.68467154038719 -10.2111497613982 -10.8207345713718 -11.5237511421810 -12.3309817201625 -12.7386023908948 -13.2100987675947 -13.7449880814330 -14.3421846745390 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.52543366555909 -7.23151230726255 -7.66835931563898 -7.77374237940488 -7.73286205887150 -7.85403443512109 -7.99479531629914 -8.12951475827743 -8.24730775693777 -8.35292770989111 -8.44367254734858 -8.53390000830597 -8.62983034754358 -8.73792808332451 -8.86490199739461 -8.87209035233689 -8.90910323531585 -8.98154803498593 -9.09486156031229 -9.25431004057081 -9.71211789686887 -10.2435898104544 -10.8586909696055 -11.5678536587454 -12.3819772584426 -12.7817166544092 -13.2444206383358 -13.7693697337166 -14.3552193934823 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.51769846789647 -7.21423310855156 -7.64065690985974 -7.73599902363937 -7.68555292761831 -7.81817948920242 -7.97042708246816 -8.11678987755089 -8.24635290860239 -8.36379963940929 -8.44663107324298 -8.52893327074628 -8.61691895627238 -8.71702216069677 -8.83589822141719 -8.85298004418147 -8.90000688658360 -8.98269270698765 -9.10660969474852 -9.27718827021188 -9.73956425335055 -10.2760298595106 -10.8966473678391 -11.6119561753099 -12.4329727967226 -12.8248309179236 -13.2787425090769 -13.7937513860002 -14.3682541124257 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.50996327023385 -7.19695390984056 -7.61295450408050 -7.69825566787387 -7.63824379636512 -7.78232454328375 -7.94605884863718 -8.10406499682436 -8.24539806026700 -8.37467156892747 -8.44958959913738 -8.52396653318659 -8.60400756500118 -8.69611623806902 -8.80689444543978 -8.83386973602605 -8.89091053785134 -8.98383737898938 -9.11835782918476 -9.30006649985295 -9.76701060983223 -10.3084699085668 -10.9346037660728 -11.6560586918743 -12.4839683350027 -12.8679451814381 -13.3130643798180 -13.8181330382837 -14.3812888313690 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.50222807257122 -7.17967471112957 -7.58525209830126 -7.66051231210836 -7.59093466511192 -7.74646959736509 -7.92169061480620 -8.09134011609782 -8.24444321193162 -8.38554349844566 -8.45254812503177 -8.51899979562690 -8.59109617372998 -8.67521031544128 -8.77789066946236 -8.81475942787063 -8.88181418911909 -8.98498205099111 -9.13010596362100 -9.32294472949402 -9.79445696631392 -10.3409099576230 -10.9725601643065 -11.7001612084387 -12.5349638732827 -12.9110594449525 -13.3473862505591 -13.8425146905673 -14.3943235503124 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.49449287490860 -7.16239551241858 -7.55754969252202 -7.62276895634285 -7.54362553385873 -7.71061465144642 -7.89732238097522 -8.07861523537128 -8.24348836359624 -8.39641542796384 -8.45550665092617 -8.51403305806721 -8.57818478245878 -8.65430439281354 -8.74888689348495 -8.79564911971521 -8.87271784038683 -8.98612672299284 -9.14185409805723 -9.34582295913508 -9.82190332279560 -10.3733500066791 -11.0105165625401 -11.7442637250031 -12.5859594115627 -12.9541737084669 -13.3817081213002 -13.8668963428509 -14.4073582692557 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.50513713726667 -7.18617309800062 -7.59567046046165 -7.67470688974349 -7.60872675388633 -7.76815948407767 -7.94736858445196 -8.12102778311636 -8.27810849340633 -8.42315312524878 -8.48139561520598 -8.53907004651466 -8.60238424676393 -8.67769595971136 -8.77151284528298 -8.82111812658596 -8.90116813775768 -9.01774643847585 -9.17688886341225 -9.38458352223268 -9.86343240783045 -10.4180164411176 -11.0587488561634 -11.7965542222769 -12.6428684440075 -13.0022875455579 -13.4200099908646 -13.8941053161779 -14.4219045073831 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.51578139962474 -7.20995068358267 -7.63379122840127 -7.72664482314413 -7.67382797391394 -7.82570431670891 -7.99741478792870 -8.16344033086145 -8.31272862321641 -8.44989082253373 -8.50728457948579 -8.56410703496210 -8.62658371106907 -8.70108752660919 -8.79413879708102 -8.84658713345672 -8.92961843512852 -9.04936615395887 -9.21192362876726 -9.42334408533029 -9.90496149286529 -10.4626828755561 -11.1069811497867 -11.8488447195507 -12.6997774764521 -13.0504013826488 -13.4583118604290 -13.9213142895050 -14.4364507455105 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.52642566198282 -7.23372826916471 -7.67191199634089 -7.77858275654476 -7.73892919394154 -7.88324914934016 -8.04746099140545 -8.20585287860653 -8.34734875302650 -8.47662851981867 -8.53317354376560 -8.58914402340955 -8.65078317537422 -8.72447909350702 -8.81676474887907 -8.87205614032748 -8.95806873249937 -9.08098586944189 -9.24695839412228 -9.46210464842789 -9.94649057790014 -10.5073493099946 -11.1552134434099 -11.9011352168245 -12.7566865088968 -13.0985152197398 -13.4966137299933 -13.9485232628320 -14.4509969836378 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.53706992434089 -7.25750585474676 -7.71003276428051 -7.83052068994540 -7.80403041396914 -7.94079398197141 -8.09750719488219 -8.24826542635162 -8.38196888283658 -8.50336621710362 -8.55906250804541 -8.61418101185700 -8.67498263967937 -8.74787066040484 -8.83939070067710 -8.89752514719823 -8.98651902987021 -9.11260558492491 -9.28199315947729 -9.50086521152549 -9.98801966293499 -10.5520157444331 -11.2034457370332 -11.9534257140983 -12.8135955413415 -13.1466290568308 -13.5349155995577 -13.9757322361591 -14.4655432217652 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.54771418669896 -7.28128344032881 -7.74815353222013 -7.88245862334604 -7.86913163399674 -7.99833881460266 -8.14755339835894 -8.29067797409670 -8.41658901264666 -8.53010391438856 -8.58495147232522 -8.63921800030444 -8.69918210398451 -8.77126222730267 -8.86201665247514 -8.92299415406898 -9.01496932724106 -9.14422530040793 -9.31702792483231 -9.53962577462309 -10.0295487479698 -10.5966821788716 -11.2516780306564 -12.0057162113721 -12.8705045737862 -13.1947428939217 -13.5732174691221 -14.0029412094862 -14.4800894598925 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.55835844905703 -7.30506102591085 -7.78627430015976 -7.93439655674668 -7.93423285402434 -8.05588364723391 -8.19759960183568 -8.33309052184179 -8.45120914245675 -8.55684161167351 -8.61084043660503 -8.66425498875189 -8.72338156828966 -8.79465379420049 -8.88464260427318 -8.94846316093974 -9.04341962461190 -9.17584501589094 -9.35206269018733 -9.57838633772069 -10.0710778330047 -10.6413486133101 -11.2999103242797 -12.0580067086459 -12.9274136062309 -13.2428567310127 -13.6115193386865 -14.0301501828132 -14.4946356980199 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.56900271141511 -7.32883861149290 -7.82439506809938 -7.98633449014732 -7.99933407405194 -8.11342847986516 -8.24764580531243 -8.37550306958687 -8.48582927226684 -8.58357930895845 -8.63672940088484 -8.68929197719934 -8.74758103259481 -8.81804536109832 -8.90726855607122 -8.97393216781050 -9.07186992198274 -9.20746473137396 -9.38709745554234 -9.61714690081829 -10.1126069180395 -10.6860150477486 -11.3481426179029 -12.1102972059197 -12.9843226386756 -13.2909705681036 -13.6498212082509 -14.0573591561403 -14.5091819361473 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.57964697377318 -7.35261619707494 -7.86251583603900 -8.03827242354796 -8.06443529407954 -8.17097331249640 -8.29769200878917 -8.41791561733196 -8.52044940207692 -8.61031700624340 -8.66261836516465 -8.71432896564679 -8.77178049689995 -8.84143692799615 -8.92989450786926 -8.99940117468125 -9.10032021935359 -9.23908444685698 -9.42213222089735 -9.65590746391589 -10.1541360030744 -10.7306814821871 -11.3963749115262 -12.1625877031935 -13.0412316711203 -13.3390844051946 -13.6881230778153 -14.0845681294673 -14.5237281742746 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.59029123613125 -7.37639378265699 -7.90063660397862 -8.09021035694859 -8.12953651410714 -8.22851814512765 -8.34773821226592 -8.46032816507704 -8.55506953188701 -8.63705470352834 -8.68850732944445 -8.73936595409423 -8.79597996120510 -8.86482849489397 -8.95252045966730 -9.02487018155201 -9.12877051672443 -9.27070416233999 -9.45716698625237 -9.69466802701349 -10.1956650881092 -10.7753479166256 -11.4446072051495 -12.2148782004673 -13.0981407035650 -13.3871982422856 -13.7264249473797 -14.1117771027944 -14.5382744124020 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.60093549848932 -7.40017136823904 -7.93875737191825 -8.14214829034923 -8.19463773413475 -8.28606297775890 -8.39778441574266 -8.50274071282213 -8.58968966169709 -8.66379240081329 -8.71439629372427 -8.76440294254168 -8.82017942551024 -8.88822006179180 -8.97514641146534 -9.05033918842276 -9.15722081409528 -9.30232387782301 -9.49220175160739 -9.73342859011109 -10.2371941731441 -10.8200143510641 -11.4928394987727 -12.2671686977411 -13.1550497360097 -13.4353120793765 -13.7647268169440 -14.1389860761214 -14.5528206505293 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.61157976084739 -7.42394895382108 -7.97687813985787 -8.19408622374987 -8.25973895416235 -8.34360781039015 -8.44783061921940 -8.54515326056721 -8.62430979150718 -8.69053009809823 -8.74028525800408 -8.78943993098913 -8.84437888981539 -8.91161162868963 -8.99777236326338 -9.07580819529352 -9.18567111146612 -9.33394359330603 -9.52723651696240 -9.77218915320869 -10.2787232581789 -10.8646807855026 -11.5410717923960 -12.3194591950149 -13.2119587684544 -13.4834259164675 -13.8030286865084 -14.1661950494485 -14.5673668886567 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.62222402320547 -7.44772653940313 -8.01499890779749 -8.24602415715050 -8.32484017418995 -8.40115264302139 -8.49787682269615 -8.58756580831230 -8.65892992131727 -8.71726779538318 -8.76617422228388 -8.81447691943657 -8.86857835412054 -8.93500319558745 -9.02039831506142 -9.10127720216427 -9.21412140883696 -9.36556330878905 -9.56227128231742 -9.81094971630629 -10.3202523432138 -10.9093472199410 -11.5893040860192 -12.3717496922887 -13.2688678008991 -13.5315397535584 -13.8413305560728 -14.1934040227756 -14.5819131267841 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.63286828556354 -7.47150412498517 -8.05311967573711 -8.29796209055114 -8.38994139421755 -8.45869747565264 -8.54792302617289 -8.62997835605738 -8.69355005112735 -8.74400549266813 -8.79206318656369 -8.83951390788402 -8.89277781842568 -8.95839476248528 -9.04302426685946 -9.12674620903503 -9.24257170620781 -9.39718302427207 -9.59730604767243 -9.84971027940389 -10.3617814282486 -10.9540136543795 -11.6375363796425 -12.4240401895625 -13.3257768333438 -13.5796535906494 -13.8796324256372 -14.2206129961026 -14.5964593649114 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.64351254792161 -7.49528171056722 -8.09124044367673 -8.34990002395178 -8.45504261424515 -8.51624230828389 -8.59796922964964 -8.67239090380247 -8.72817018093743 -8.77074318995307 -8.81795215084350 -8.86455089633147 -8.91697728273083 -8.98178632938311 -9.06565021865750 -9.15221521590579 -9.27102200357865 -9.42880273975509 -9.63234081302745 -9.88847084250149 -10.4033105132835 -10.9986800888180 -11.6857686732657 -12.4763306868363 -13.3826858657885 -13.6277674277404 -13.9179342952016 -14.2478219694297 -14.6110056030388 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.65415681027968 -7.51905929614927 -8.12936121161635 -8.40183795735242 -8.52014383427275 -8.57378714091514 -8.64801543312638 -8.71480345154755 -8.76279031074752 -8.79748088723801 -8.84384111512331 -8.88958788477892 -8.94117674703597 -9.00517789628093 -9.08827617045554 -9.17768422277654 -9.29947230094950 -9.46042245523810 -9.66737557838246 -9.92723140559910 -10.4448395983183 -11.0433465232565 -11.7340009668890 -12.5286211841101 -13.4395948982332 -13.6758812648313 -13.9562361647660 -14.2750309427567 -14.6255518411662 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.66480107263775 -7.54283688173131 -8.16748197955598 -8.45377589075306 -8.58524505430036 -8.63133197354639 -8.69806163660313 -8.75721599929264 -8.79741044055760 -8.82421858452296 -8.86973007940312 -8.91462487322636 -8.96537621134112 -9.02856946317876 -9.11090212225358 -9.20315322964730 -9.32792259832034 -9.49204217072112 -9.70241034373748 -9.96599196869670 -10.4863686833531 -11.0880129576950 -11.7822332605122 -12.5809116813839 -13.4965039306779 -13.7239951019223 -13.9945380343304 -14.3022399160838 -14.6400980792935 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.67544533499583 -7.56661446731336 -8.20560274749560 -8.50571382415370 -8.65034627432796 -8.68887680617763 -8.74810784007987 -8.79962854703772 -8.83203057036769 -8.85095628180791 -8.89561904368293 -8.93966186167381 -8.98957567564627 -9.05196103007659 -9.13352807405161 -9.22862223651805 -9.35637289569119 -9.52366188620414 -9.73744510909249 -10.0047525317943 -10.5278977683880 -11.1326793921335 -11.8304655541355 -12.6332021786577 -13.5534129631226 -13.7721089390132 -14.0328399038948 -14.3294488894108 -14.6546443174209 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.68608959735390 -7.59039205289540 -8.24372351543522 -8.55765175755433 -8.71544749435556 -8.74642163880888 -8.79815404355662 -8.84204109478281 -8.86665070017778 -8.87769397909285 -8.92150800796274 -8.96469885012126 -9.01377513995141 -9.07535259697441 -9.15615402584965 -9.25409124338881 -9.38482319306203 -9.55528160168716 -9.77247987444751 -10.0435130948919 -10.5694268534228 -11.1773458265720 -11.8786978477588 -12.6854926759315 -13.6103219955673 -13.8202227761042 -14.0711417734591 -14.3566578627379 -14.6691905555482 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.67999333029045 -7.57677396392353 -8.22189068435627 -8.52790544897204 -8.67816220298506 -8.70915189927755 -8.76081290042631 -8.80466356401375 -8.82931953277151 -8.84046699750446 -8.88219935792247 -8.92330850136238 -8.97027207670745 -9.02966886880482 -9.10817879846547 -9.20416029797754 -9.33273297480659 -9.50077406513548 -9.71523794582555 -9.98315613441668 -10.4947356271439 -11.0870358904753 -11.7711804834953 -12.5588425616209 -13.4622448766024 -13.6950307270968 -13.9714804323253 -14.2858602018537 -14.6313412908332 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.67389706322699 -7.56315587495165 -8.20005785327732 -8.49815914038975 -8.64087691161455 -8.67188215974621 -8.72347175729601 -8.76728603324469 -8.79198836536524 -8.80324001591606 -8.84289070788221 -8.88191815260350 -8.92676901346348 -8.98398514063523 -9.06020357108130 -9.15422935256627 -9.28064275655115 -9.44626652858380 -9.65799601720359 -9.92279917394146 -10.4200444008650 -10.9967259543787 -11.6636631192318 -12.4321924473104 -13.3141677576374 -13.5698386780894 -13.8718190911915 -14.2150625409696 -14.5934920261181 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.66780079616354 -7.54953778597977 -8.17822502219837 -8.46841283180746 -8.60359162024405 -8.63461242021488 -8.68613061416571 -8.72990850247563 -8.75465719795898 -8.76601303432767 -8.80358205784194 -8.84052780384462 -8.88326595021952 -8.93830141246564 -9.01222834369712 -9.10429840715500 -9.22855253829572 -9.39175899203213 -9.60075408858164 -9.86244221346624 -10.3453531745860 -10.9064160182820 -11.5561457549683 -12.3055423329999 -13.1660906386724 -13.4446466290821 -13.7721577500577 -14.1442648800854 -14.5556427614030 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.66170452910009 -7.53591969700789 -8.15639219111942 -8.43866652322517 -8.56630632887354 -8.59734268068354 -8.64878947103541 -8.69253097170657 -8.71732603055271 -8.72878605273927 -8.76427340780167 -8.79913745508573 -8.83976288697555 -8.89261768429604 -8.96425311631294 -9.05436746174372 -9.17646232004028 -9.33725145548045 -9.54351215995968 -9.80208525299102 -10.2706619483071 -10.8161060821853 -11.4486283907048 -12.1788922186894 -13.0180135197075 -13.3194545800747 -13.6724964089239 -14.0734672192013 -14.5177934966880 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.65560826203664 -7.52230160803601 -8.13455936004047 -8.40892021464288 -8.52902103750304 -8.56007294115221 -8.61144832790511 -8.65515344093751 -8.67999486314644 -8.69155907115088 -8.72496475776140 -8.75774710632685 -8.79625982373159 -8.84693395612645 -8.91627788892876 -9.00443651633245 -9.12437210178484 -9.28274391892877 -9.48627023133772 -9.74172829251581 -10.1959707220281 -10.7257961460887 -11.3411110264414 -12.0522421043789 -12.8699364007425 -13.1942625310673 -13.5728350677901 -14.0026695583171 -14.4799442319729 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.64951199497319 -7.50868351906414 -8.11272652896152 -8.37917390606059 -8.49173574613254 -8.52280320162087 -8.57410718477481 -8.61777591016845 -8.64266369574018 -8.65433208956248 -8.68565610772114 -8.71635675756797 -8.75275676048763 -8.80125022795686 -8.86830266154458 -8.95450557092118 -9.07228188352940 -9.22823638237709 -9.42902830271577 -9.68137133204059 -10.1212794957492 -10.6354862099920 -11.2335936621779 -11.9255919900684 -12.7218592817775 -13.0690704820600 -13.4731737266563 -13.9318718974330 -14.4420949672578 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.64341572790974 -7.49506543009226 -8.09089369788257 -8.34942759747830 -8.45445045476203 -8.48553346208954 -8.53676604164451 -8.58039837939939 -8.60533252833391 -8.61710510797409 -8.64634745768087 -8.67496640880909 -8.70925369724366 -8.75556649978727 -8.82032743416040 -8.90457462550991 -9.02019166527396 -9.17372884582542 -9.37178637409381 -9.62101437156537 -10.0465882694703 -10.5451762738953 -11.1260762979144 -11.7989418757578 -12.5737821628126 -12.9438784330526 -13.3735123855225 -13.8610742365488 -14.4042457025427 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.63731946084628 -7.48144734112038 -8.06906086680362 -8.31968128889601 -8.41716516339153 -8.44826372255820 -8.49942489851421 -8.54302084863033 -8.56800136092765 -8.57987812638569 -8.60703880764060 -8.63357606005021 -8.66575063399969 -8.70988277161768 -8.77235220677622 -8.85464368009864 -8.96810144701853 -9.11922130927374 -9.31454444547185 -9.56065741109015 -9.97189704319132 -10.4548663377987 -11.0185589336509 -11.6722917614473 -12.4257050438476 -12.8186863840452 -13.2738510443887 -13.7902765756646 -14.3663964378277 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.63122319378283 -7.46782925214850 -8.04722803572467 -8.28993498031372 -8.37987987202103 -8.41099398302687 -8.46208375538391 -8.50564331786127 -8.53067019352138 -8.54265114479730 -8.56773015760033 -8.59218571129133 -8.62224757075573 -8.66419904344808 -8.72437697939204 -8.80471273468737 -8.91601122876309 -9.06471377272206 -9.25730251684989 -9.50030045061493 -9.89720581691238 -10.3645564017020 -10.9110415693874 -11.5456416471368 -12.2776279248826 -12.6934943350378 -13.1741897032548 -13.7194789147805 -14.3285471731126 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.62512692671938 -7.45421116317663 -8.02539520464572 -8.26018867173143 -8.34259458065052 -8.37372424349553 -8.42474261225361 -8.46826578709221 -8.49333902611511 -8.50542416320890 -8.52842150756006 -8.55079536253244 -8.57874450751177 -8.61851531527849 -8.67640175200786 -8.75478178927610 -8.86392101050765 -9.01020623617039 -9.20006058822794 -9.43994349013971 -9.82251459063343 -10.2742464656053 -10.8035242051240 -11.4189915328263 -12.1295508059177 -12.5683022860305 -13.0745283621210 -13.6486812538963 -14.2906979083975 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.61903065965593 -7.44059307420475 -8.00356237356677 -8.23044236314914 -8.30530928928002 -8.33645450396420 -8.38740146912331 -8.43088825632316 -8.45600785870885 -8.46819718162051 -8.48911285751980 -8.50940501377356 -8.53524144426780 -8.57283158710890 -8.62842652462368 -8.70485084386482 -8.81183079225221 -8.95569869961871 -9.14281865960598 -9.37958652966450 -9.74782336435449 -10.1839365295087 -10.6960068408605 -11.2923414185158 -11.9814736869527 -12.4431102370231 -12.9748670209872 -13.5778835930122 -14.2528486436824 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.61293439259248 -7.42697498523287 -7.98172954248782 -8.20069605456685 -8.26802399790951 -8.29918476443286 -8.35006032599301 -8.39351072555410 -8.41867669130258 -8.43097020003211 -8.44980420747953 -8.46801466501468 -8.49173838102383 -8.52714785893931 -8.58045129723950 -8.65491989845356 -8.75974057399677 -8.90119116306703 -9.08557673098402 -9.31922956918928 -9.67313213807555 -10.0936265934120 -10.5884894765970 -11.1656913042052 -11.8333965679878 -12.3179181880157 -12.8752056798534 -13.5070859321280 -14.2149993789674 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.60683812552902 -7.41335689626099 -7.95989671140888 -8.17094974598456 -8.23073870653901 -8.26191502490153 -8.31271918286271 -8.35613319478504 -8.38134552389631 -8.39374321844372 -8.41049555743926 -8.42662431625580 -8.44823531777987 -8.48146413076972 -8.53247606985532 -8.60498895304228 -8.70765035574134 -8.84668362651535 -9.02833480236207 -9.25887260871406 -9.59844091179661 -10.0033166573153 -10.4809721123335 -11.0390411898947 -11.6853194490228 -12.1927261390083 -12.7755443387196 -13.4362882712439 -14.1771501142523 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.60074185846557 -7.39973880728911 -7.93806388032992 -8.14120343740227 -8.19345341516851 -8.22464528537019 -8.27537803973240 -8.31875566401598 -8.34401435649005 -8.35651623685532 -8.37118690739899 -8.38523396749692 -8.40473225453590 -8.43578040260013 -8.48450084247114 -8.55505800763101 -8.65556013748590 -8.79217608996368 -8.97109287374011 -9.19851564823884 -9.52374968551767 -9.91300672121866 -10.3734547480700 -10.9123910755842 -11.5372423300578 -12.0675340900010 -12.6758829975858 -13.3654906103597 -14.1393008495372 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.59464559140212 -7.38612071831724 -7.91623104925098 -8.11145712881998 -8.15616812379800 -8.18737554583885 -8.23803689660210 -8.28137813324692 -8.30668318908378 -8.31928925526693 -8.33187825735873 -8.34384361873804 -8.36122919129194 -8.39009667443053 -8.43652561508696 -8.50512706221974 -8.60346991923046 -8.73766855341200 -8.91385094511815 -9.13815868776362 -9.44905845923873 -9.82269678512200 -10.2659373838066 -10.7857409612737 -11.3891652110929 -11.9423420409936 -12.5762216564520 -13.2946929494755 -14.1014515848221 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.58854932433867 -7.37250262934536 -7.89439821817203 -8.08171082023769 -8.11888283242750 -8.15010580630752 -8.20069575347180 -8.24400060247786 -8.26935202167751 -8.28206227367854 -8.29256960731846 -8.30245326997916 -8.31772612804797 -8.34441294626094 -8.38855038770278 -8.45519611680847 -8.55137970097502 -8.68316101686032 -8.85660901649620 -9.07780172728840 -9.37436723295979 -9.73238684902533 -10.1584200195431 -10.6590908469632 -11.2410880921279 -11.8171499919862 -12.4765603153182 -13.2238952885914 -14.0636023201071 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.58245305727522 -7.35888454037348 -7.87256538709308 -8.05196451165540 -8.08159754105700 -8.11283606677618 -8.16335461034150 -8.20662307170880 -8.23202085427125 -8.24483529209014 -8.25326095727819 -8.26106292122027 -8.27422306480401 -8.29872921809135 -8.34057516031861 -8.40526517139720 -8.49928948271958 -8.62865348030865 -8.79936708787424 -9.01744476681319 -9.29967600668085 -9.64207691292866 -10.0509026552796 -10.5324407326527 -11.0930109731629 -11.6919579429788 -12.3768989741843 -13.1530976277072 -14.0257530553920 -15.0000000000000 +-0.0567627734246728 -2.08585431699901 -3.66273479121380 -4.83585031956519 -5.65364702554936 -6.16457103266246 -6.41706846440066 -6.45958544426012 -6.34056809573699 -6.10846254232744 -5.81909442918487 -5.55780748809170 -5.41732497248756 -5.49037013581211 -5.86966623150499 -6.57635679021176 -7.34526645140160 -7.85073255601413 -8.02221820307311 -8.04431224968649 -8.07556632724485 -8.12601346721120 -8.16924554093974 -8.19468968686498 -8.20760831050175 -8.21395230723792 -8.21967257246139 -8.23072000156004 -8.25304548992176 -8.29259993293443 -8.35533422598593 -8.44719926446415 -8.57414594375697 -8.74212515925228 -8.95708780633797 -9.22498478040191 -9.55176697683200 -9.94338529101611 -10.4057906183421 -10.9449338541980 -11.5667658939715 -12.2772376330505 -13.0822999668231 -13.9879037906769 -15.0000000000000 \ No newline at end of file diff --git a/ObservationSim/sim_steps/readout_output.py b/ObservationSim/sim_steps/readout_output.py index 086fc19..080baed 100644 --- a/ObservationSim/sim_steps/readout_output.py +++ b/ObservationSim/sim_steps/readout_output.py @@ -82,17 +82,16 @@ def quantization_and_output(self, chip, filt, tel, pointing, catalog, obs_param) hdu1 = fits.PrimaryHDU(header=self.h_prim) - hdu1.add_checksum() - hdu1.header.comments['CHECKSUM'] = 'HDU checksum' - hdu1.header.comments['DATASUM'] = 'data unit checksum' - self.updateHeaderInfo(header_flag='ext', keys = ['DATASECT'], values = [str(chip.img.array.shape[1])+'x'+str(chip.img.array.shape[0])]) + + self.updateHeaderInfo(header_flag='ext', keys = ['DATASECT'], values = [str(chip.img.array.shape[1]) + 'x' + str(chip.img.array.shape[0])]) hdu2 = fits.ImageHDU(chip.img.array, header=self.h_ext) - hdu2.add_checksum() - hdu2.header.comments['XTENSION'] = 'extension type' - hdu2.header.comments['CHECKSUM'] = 'HDU checksum' - hdu2.header.comments['DATASUM'] = 'data unit checksum' hdu2.header.comments["XTENSION"] = "image extension" - hdu1 = fits.HDUList([hdu1, hdu2]) - hdu1.writeto(fname, output_verify='ignore', overwrite=True) + + hdu = fits.HDUList([hdu1, hdu2]) + hdu[0].add_datasum(when='data unit checksum') + hdu[0].add_checksum(when='HDU checksum', override_datasum=True) + hdu[1].add_datasum(when='data unit checksum') + hdu[1].add_checksum(when='HDU checksum', override_datasum=True) + hdu.writeto(fname, output_verify='ignore', overwrite=True) return chip, filt, tel, pointing -- GitLab From cb20ea70ba17c4c41600bad06deb66d55853f627 Mon Sep 17 00:00:00 2001 From: fangyuedong Date: Thu, 2 May 2024 20:40:58 +0800 Subject: [PATCH 6/8] add error message output for galaxy --- ObservationSim/sim_steps/add_objects.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ObservationSim/sim_steps/add_objects.py b/ObservationSim/sim_steps/add_objects.py index 7b21e5d..1ec8001 100644 --- a/ObservationSim/sim_steps/add_objects.py +++ b/ObservationSim/sim_steps/add_objects.py @@ -206,6 +206,12 @@ def add_objects(self, chip, filt, tel, pointing, catalog, obs_param): except Exception as e: traceback.print_exc() self.chip_output.Log_error(e) + self.chip_output.Log_error( + "pointing: #%d, chipID: %d" % (pointing.id, chip.chipID)) + if obj.type == "galaxy": + self.chip_output.Log_error("obj id: %s" % (obj.param['id'])) + self.chip_output.Log_error(" e1: %.5f\n e2: %.5f\n size: %f\n bfrac: %f\n detA: %f\n g1: %.5f\n g2: %.5f\n" % ( + obj.param['e1'], obj.param['e2'], obj.param['size'], obj.param['bfrac'], obj.param['detA'], obj.param['g1'], obj.param['g2'])) # Unload SED: obj.unload_SED() -- GitLab From 0a7d5af03df8e3dda48672005aa7fa0d0843c40e Mon Sep 17 00:00:00 2001 From: fangyuedong Date: Thu, 2 May 2024 20:43:08 +0800 Subject: [PATCH 7/8] update submission file for Pukou usage --- config/config_overall.yaml | 15 +++++++++------ config/obs_config_SCI_WIDE_phot.yaml | 4 ++-- run_C6.pbs | 6 +++--- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/config/config_overall.yaml b/config/config_overall.yaml index ca4fc9b..85b6e93 100644 --- a/config/config_overall.yaml +++ b/config/config_overall.yaml @@ -11,7 +11,7 @@ # can add some of the command-line arguments here as well; # ok to pass either way or both, as long as they are consistent work_dir: "/public/home/fangyuedong/project/workplace/" -run_name: "magnification_test" +run_name: "no_nonlinearity_test" # Project cycle and run counter are used to name the outputs project_cycle: 9 @@ -32,11 +32,13 @@ run_option: catalog_options: input_path: cat_dir: "/public/share/yangxuliu/CSSOSDataProductsSims/data_50sqDeg/" - star_cat: "starcat/" + # star_cat: "starcat/" + star_cat: "starcat_C9/" galaxy_cat: "qsocat/cat2CSSTSim_bundle-50sqDeg/" SED_templates_path: - star_SED: "/public/share/yangxuliu/CSSOSDataProductsSims/data_50sqDeg/SpecLib.hdf5" + # star_SED: "/public/share/yangxuliu/CSSOSDataProductsSims/data_50sqDeg/SpecLib.hdf5" + star_SED: "/public/share/yangxuliu/CSSOSDataProductsSims/data_50sqDeg/starcat_C9/" galaxy_SED: "/public/share/yangxuliu/CSSOSDataProductsSims/data_50sqDeg/sedlibs/" AGN_SED: "/public/share/yangxuliu/CSSOSDataProductsSims/data_50sqDeg/qsocat/qsosed/" @@ -44,7 +46,7 @@ catalog_options: star_only: NO # Only simulate galaxies? - galaxy_only: YES + galaxy_only: NO # rotate galaxy ellipticity rotateEll: 0. # [degree] @@ -57,7 +59,8 @@ obs_setting: # if you just want to run default pointing: # - pointing_dir: null # - pointing_file: null - pointing_file: "/public/share/yangxuliu/CSSOSDataProductsSims/data_50sqDeg/pointing50_C9/pointing_50_1_n.dat" + # pointing_file: "/public/share/yangxuliu/CSSOSDataProductsSims/data_50sqDeg/pointing50_C9/pointing_50_1_n.dat" + pointing_file: "/public/home/fangyuedong/project/unit_test_data/pointing_for_test.dat" obs_config_file: "/public/home/fangyuedong/project/csst_msc_sim/config/obs_config_SCI_WIDE_phot.yaml" @@ -65,7 +68,7 @@ obs_setting: # - give a list of indexes of pointings: [ip_1, ip_2...] # - run all pointings: null # Note: only valid when a pointing list is specified - run_pointings: [0] + run_pointings: [1] # Whether to enable astrometric modeling enable_astrometric_model: True diff --git a/config/obs_config_SCI_WIDE_phot.yaml b/config/obs_config_SCI_WIDE_phot.yaml index cb15c98..634d95d 100644 --- a/config/obs_config_SCI_WIDE_phot.yaml +++ b/config/obs_config_SCI_WIDE_phot.yaml @@ -16,7 +16,7 @@ obs_id: "00000001" # this setting will only be used if pointing list file is not # Define list of chips # run_chips: [6,7,8,9,11,12,13,14,15,16,17,18,19,20,22,23,24,25] #run_chips: [1,2,3,4,5,10,21,26,27,28,29,30] -run_chips: [8] +run_chips: [9] # Define observation sequence call_sequence: @@ -63,7 +63,7 @@ call_sequence: dead_pixels: YES bad_columns: YES # Apply response nonlinearity - nonlinearity: {} + # nonlinearity: {} # Apply CCD Saturation & Blooming blooming: {} # Run CTE simulation diff --git a/run_C6.pbs b/run_C6.pbs index 37b8515..32cfa73 100755 --- a/run_C6.pbs +++ b/run_C6.pbs @@ -2,9 +2,9 @@ #SBATCH -J CSSTSim #SBATCH -N 1 -#SBATCH --ntasks-per-node=40 +#SBATCH --ntasks-per-node=6 #SBATCH -p debug -#SBATCH --mem=240G +#SBATCH --mem=60G module load mpi/hpcx/2.4.1/gcc-7.3.1 date @@ -12,4 +12,4 @@ date #限定单节点任务数 srun hostname -s | sort -n | awk -F"-" '{print $2}' | uniq > pnodes -mpirun -mca pml ucx -x UCX_NET_DEVICES=mlx5_0:1 -machinefile pnodes -np 40 --map-by node python3 /public/home/fangyuedong/project/csst_msc_sim/run_sim.py --config_file config_overall.yaml --catalog C6_50sqdeg -c /public/home/fangyuedong/project/csst_msc_sim/config \ No newline at end of file +mpirun -mca pml ucx -x UCX_NET_DEVICES=mlx5_0:1 -machinefile pnodes -np 6 --map-by node python3 /public/home/fangyuedong/project/csst_msc_sim/run_sim.py --config_file config_overall.yaml --catalog C6_50sqdeg_ns -c /public/home/fangyuedong/project/csst_msc_sim/config \ No newline at end of file -- GitLab From 5c59486a92c87fa2866a5422abe97d7ba4325c45 Mon Sep 17 00:00:00 2001 From: fangyuedong Date: Thu, 2 May 2024 20:46:16 +0800 Subject: [PATCH 8/8] add back nonlinearity --- config/obs_config_SCI_WIDE_phot.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/obs_config_SCI_WIDE_phot.yaml b/config/obs_config_SCI_WIDE_phot.yaml index 634d95d..e491dae 100644 --- a/config/obs_config_SCI_WIDE_phot.yaml +++ b/config/obs_config_SCI_WIDE_phot.yaml @@ -63,7 +63,7 @@ call_sequence: dead_pixels: YES bad_columns: YES # Apply response nonlinearity - # nonlinearity: {} + nonlinearity: {} # Apply CCD Saturation & Blooming blooming: {} # Run CTE simulation -- GitLab