def test(log, file='data/psf1x.fits', oversample=1.0, sigma=0.75, scale=1e2, level=10, covering=1.4, single=False): #read in PSF and renormalize it to norm data = pf.getdata(file) data /= np.max(data) #derive reference values from clean PSF settings = dict(sampling=1.0 / oversample, sigma=sigma, iterations=10) scaled = data.copy() * scale sh = shape.shapeMeasurement(scaled.copy(), log, **settings) reference = sh.measureRefinedEllipticity() print 'Reference:' pprint.pprint(reference) cosmics = cosmicrays.cosmicrays(log, np.zeros((2, 2))) crInfo = cosmics._readCosmicrayInformation() print 'Deposited Energy of Cosmic Rays: %i electrons' % level #add cosmic rays to the scaled image cosmics = cosmicrays.cosmicrays(log, scaled, crInfo=crInfo) if single: #only one cosmic with a given energy level, length drawn from a distribution newdata = cosmics.addSingleEvent(limit=level) else: #x cosmic ray events to reach a covering fraction, say 1.4 per cent newdata = cosmics.addUpToFraction(covering, limit=level) #write out new data for inspection fileIO.writeFITS(newdata, 'example.fits', int=False) #measure e and R2 from the postage stamp image sh = shape.shapeMeasurement(newdata.copy(), log, **settings) results = sh.measureRefinedEllipticity() print 'Results:' pprint.pprint(results) print 'delta e_1: ', results['e1'] - reference['e1'] print 'delta e_2: ', results['e2'] - reference['e2'] print 'delta e: ', results['ellipticity'] - reference['ellipticity'] print 'delta R**2: ', results['R2'] - reference['R2']
def test(log, file="data/psf1x.fits", oversample=1.0, sigma=0.75, scale=1e2, level=10, covering=1.4, single=False): # read in PSF and renormalize it to norm data = pf.getdata(file) data /= np.max(data) # derive reference values from clean PSF settings = dict(sampling=1.0 / oversample, sigma=sigma, iterations=10) scaled = data.copy() * scale sh = shape.shapeMeasurement(scaled.copy(), log, **settings) reference = sh.measureRefinedEllipticity() print "Reference:" pprint.pprint(reference) cosmics = cosmicrays.cosmicrays(log, np.zeros((2, 2))) crInfo = cosmics._readCosmicrayInformation() print "Deposited Energy of Cosmic Rays: %i electrons" % level # add cosmic rays to the scaled image cosmics = cosmicrays.cosmicrays(log, scaled, crInfo=crInfo) if single: # only one cosmic with a given energy level, length drawn from a distribution newdata = cosmics.addSingleEvent(limit=level) else: # x cosmic ray events to reach a covering fraction, say 1.4 per cent newdata = cosmics.addUpToFraction(covering, limit=level) # write out new data for inspection fileIO.writeFITS(newdata, "example.fits", int=False) # measure e and R2 from the postage stamp image sh = shape.shapeMeasurement(newdata.copy(), log, **settings) results = sh.measureRefinedEllipticity() print "Results:" pprint.pprint(results) print "delta e_1: ", results["e1"] - reference["e1"] print "delta e_2: ", results["e2"] - reference["e2"] print "delta e: ", results["ellipticity"] - reference["ellipticity"] print "delta R**2: ", results["R2"] - reference["R2"]
def testCosmicrayRejection(log, file='data/psf1x.fits', oversample=1.0, sigma=0.75, psfs=20000, scale=1e3, min=1e-5, max=50, levels=15, covering=1.4, single=False): """ This is for a single PSF. :param log: :param file: :param oversample: :param sigma: :param psfs: :param scale: :param min: :param max: :param levels: :param covering: :param single: :return: """ data = pf.getdata(file) data /= np.max(data) #derive reference values from clean PSF settings = dict(sampling=1.0 / oversample, sigma=sigma, iterations=6) scaled = data.copy() * scale sh = shape.shapeMeasurement(scaled.copy(), log, **settings) reference = sh.measureRefinedEllipticity() cosmics = cosmicrays.cosmicrays(log, np.zeros((2, 2))) crInfo = cosmics._readCosmicrayInformation() out = {} #loop over all the amplitudes to be studied for level in np.logspace(np.log10(min), np.log10(max), levels): print 'Deposited Energy of Cosmic Rays: %e electrons' % level de1 = [] de2 = [] de = [] R2 = [] dR2 = [] e1 = [] e2 = [] e = [] for i in range(psfs): print 'Run %i / %i' % (i + 1, psfs) #add cosmic rays to the scaled image cosmics = cosmicrays.cosmicrays(log, scaled.copy(), crInfo=crInfo) #newdata = cosmics.addCosmicRays(limit=level) if single: newdata = cosmics.addSingleEvent(limit=level) else: newdata = cosmics.addUpToFraction(covering, limit=level) #measure e and R2 from the postage stamp image sh = shape.shapeMeasurement(newdata.copy(), log, **settings) results = sh.measureRefinedEllipticity() #save values e1.append(results['e1']) e2.append(results['e2']) e.append(results['ellipticity']) R2.append(results['R2']) de1.append(results['e1'] - reference['e1']) de2.append(results['e2'] - reference['e2']) de.append(results['ellipticity'] - reference['ellipticity']) dR2.append(results['R2'] - reference['R2']) out[level] = [e1, e2, e, R2, de1, de2, de, dR2] return reference, out
def testCosmicrayRejection( log, file="data/psf1x.fits", oversample=1.0, sigma=0.75, psfs=20000, scale=1e3, min=1e-5, max=50, levels=15, covering=1.4, single=False, ): """ This is for a single PSF. :param log: :param file: :param oversample: :param sigma: :param psfs: :param scale: :param min: :param max: :param levels: :param covering: :param single: :return: """ data = pf.getdata(file) data /= np.max(data) # derive reference values from clean PSF settings = dict(sampling=1.0 / oversample, sigma=sigma, iterations=6) scaled = data.copy() * scale sh = shape.shapeMeasurement(scaled.copy(), log, **settings) reference = sh.measureRefinedEllipticity() cosmics = cosmicrays.cosmicrays(log, np.zeros((2, 2))) crInfo = cosmics._readCosmicrayInformation() out = {} # loop over all the amplitudes to be studied for level in np.logspace(np.log10(min), np.log10(max), levels): print "Deposited Energy of Cosmic Rays: %e electrons" % level de1 = [] de2 = [] de = [] R2 = [] dR2 = [] e1 = [] e2 = [] e = [] for i in range(psfs): print "Run %i / %i" % (i + 1, psfs) # add cosmic rays to the scaled image cosmics = cosmicrays.cosmicrays(log, scaled.copy(), crInfo=crInfo) # newdata = cosmics.addCosmicRays(limit=level) if single: newdata = cosmics.addSingleEvent(limit=level) else: newdata = cosmics.addUpToFraction(covering, limit=level) # measure e and R2 from the postage stamp image sh = shape.shapeMeasurement(newdata.copy(), log, **settings) results = sh.measureRefinedEllipticity() # save values e1.append(results["e1"]) e2.append(results["e2"]) e.append(results["ellipticity"]) R2.append(results["R2"]) de1.append(results["e1"] - reference["e1"]) de2.append(results["e2"] - reference["e2"]) de.append(results["ellipticity"] - reference["ellipticity"]) dR2.append(results["R2"] - reference["R2"]) out[level] = [e1, e2, e, R2, de1, de2, de, dR2] return reference, out