def buildGrowthCurve(name, center, distances, pa, ba, inputImage, mask, isoA_max): band = Settings.getConstants().band #masked input array inputImageM = np.ma.masked_array(inputImage, mask=mask) ellipseMask = np.zeros((inputImage.shape), dtype=np.uint8) ellipseMaskM = ellipseMask.copy() fluxData = Photometry.initFluxData(inputImage, center, distances) #currentPixels = center #currentFlux = inputImage[center] Npix = 1 #init growthSlope = 200 #init md = np.max(distances) #print md, 'MD' for isoA in range(1, min(int(isoA_max), int(md))): #draw ellipse for all pixels: currentPixels = ellipse.draw_ellipse(inputImage.shape, center[0], center[1], pa, isoA, ba) #Npix = inputImage[currentPixels].shape[0] #currentFlux = np.sum(inputImage[currentPixels]) ellipseMask[currentPixels] = 1 Npix = inputImage[currentPixels].shape[0] #draw ellipse for masked pixels only: currentPixelsM = ellipse.draw_ellipse(inputImageM.shape, center[0], center[1], pa, isoA, ba) ellipseMaskM[currentPixelsM] = 1 maskedPixels = inputImageM[np.where((ellipseMaskM == 1) & (mask == 0))] #print np.sum(maskedPixels), np.sum(inputImage[np.where(ellipseMask == 1)]) fluxData[isoA, 0] = isoA fluxData[isoA, 1] = np.sum(inputImage[np.where(ellipseMask == 1)])# cumulative flux fluxData[isoA, 2] = inputImage[np.where(ellipseMask == 1)].shape[0] fluxData[isoA, 3] = np.sum(maskedPixels)# - maskedPixels.shape[0]*sky# cumulative flux, without masked pixels fluxData[isoA, 4] = maskedPixels.shape[0] #print Npix, NpixM, fluxData[isoA, 2], fluxData[isoA, 4] isoA = isoA +1 #gc_sky = np.mean(fluxData[isoA-width:isoA-1, 2]) #flux = np.sum(inputImage[np.where(ellipseMask == 1)]) - sky*inputImage[np.where(ellipseMask == 1)].shape[0] fluxData = fluxData[0:isoA-1,:] #fluxData[:, 3] = fluxData[:, 3] - fluxData[isoA-1, 4]*sky #print fluxData[isoA-1, 4], 'no pix' #fluxData[:, 3] = np.cumsum(fluxData[:, 3]) #fluxData[:, 1] = np.cumsum(fluxData[:, 1]) #the last isoA value was incremented, so it should be subtracted #fluxData[:, 1] = fluxData[:, 1] - sky*fluxData[:, 5]#cumulative flux, _sky_subtracted #fluxData[:, 3] = fluxData[:, 3] - sky*fluxData[:, 4] #fluxData[:, 2] = fluxData[:, 2] - sky #sky-subtracted flux per pixel #print inputImage[np.where(ellipseMask == 1)].shape[0], '***************************************' # --------------------------------------- writing an ellipse of counted points, testing only plotGrowthCurve.plotGrowthCurve(fluxData, Settings.getConstants().band, name) #hdu = pyfits.PrimaryHDU(ellipseMask) #hdu.writeto('vimos_masks/Mask'+name+"_"+Settings.getConstants().band+'.fits', clobber=True) np.savetxt('vimos_growth_curves/el/'+Settings.getConstants().band+'/gc_profile_el_new_'+name+'.csv', fluxData)
def calculateGrowthCurve(listFile, dataDir, i): CALIFA_ID = str(i+1) inputImage = Photometry.getInputFile(listFile, dataDir, i) dbDir = '../db/' imgDir = 'img/'+setBand()+'/' center = Photometry.getCenter(listFile, i, dataDir) distances = Photometry.createDistanceArray(listFile, i, dataDir) #hdu = pyfits.PrimaryHDU(distances) #hdu.writeto('distances.fits') sky = inputImage[np.where(distances > int(round(Photometry.iso25D)))] skyMean = np.mean(sky) skySD = np.std(sky) #i+1 in the next line reflects the fact that CALIFA id's start with 1 pa = db.dbUtils.getFromDB('PA', dbDir+'CALIFA.sqlite', 'nadine', ' where califa_id = '+ CALIFA_ID)[0][0] #parsing tuples ba = db.dbUtils.getFromDB('ba', dbDir+'CALIFA.sqlite', 'nadine', ' where califa_id = '+ CALIFA_ID)[0][0]#parsing tuples #ba = 1 #r_mag = db.dbUtils.getFromDB('r_mag', dbDir+'CALIFA.sqlite', 'nadine', ' where califa_id = '+ CALIFA_ID)[0][0]#parsing tuples #r_e = db.dbUtils.getFromDB('re', dbDir+'CALIFA.sqlite', 'nadine', ' where califa_id = '+ CALIFA_ID)[0][0]#parsing tuples #lucy_re = db.dbUtils.getFromDB('re', dbDir+'CALIFA.sqlite', 'lucie', ' where id = '+ CALIFA_ID)[0][0]#parsing tuples #l_SkyMean = db.dbUtils.getFromDB('sky', dbDir+'CALIFA.sqlite', 'lucie', ' where id = '+ CALIFA_ID)[0][0] - 1000#parsing tuples # print 'ba', ba #fluxData = Photometry.buildGrowthCurve(inputImage, center, distances, skyMean, pa, ba) #isoA = fluxData.shape[0] # --------------------------------------- starting GC photometry in circular annuli print 'CIRCULAR APERTURE' #circFlux, circFluxData = Photometry.circularFlux(inputImage, center, distances, skyMean) circFlux, circFluxData, gc_sky = Photometry.buildGrowthCurve(inputImage, center, distances, skyMean, pa, 1, str(i+1)) circRadius = circFluxData.shape[0] #print circRadius, 'circle radius' #otherFlux = circFluxData[-1, 1] #print 'fluxes: mask:', circFlux, 'sum', otherFlux try: circHLR = circFluxData[np.where(np.floor(circFlux/circFluxData[:,1]) == 1)][0][0] - 1 #Floor() -1 -- last element where the ratio is 2 except IndexError as e: circHLR = str(e) circMag = Photometry.calculateFlux(circFlux, listFile, i) # --------------------------------------- starting ellipse GC photometry print 'ELLIPTICAL APERTURE' totalFlux, fluxData, gc_sky = Photometry.buildGrowthCurve(inputImage, center, distances, skyMean, pa, ba, CALIFA_ID, e=True) otherFlux = fluxData[fluxData.shape[0]-1, 6] elMajAxis = fluxData.shape[0] #print totalFlux - otherFlux, 'flux diff' #print 't', totalFlux, 'o', otherFlux diff = [CALIFA_ID, totalFlux - otherFlux] utils.writeOut(diff, 'fluxdiff.txt') elMag = Photometry.calculateFlux(totalFlux, listFile, i) try: elHLR = fluxData[np.where(np.floor(totalFlux/fluxData[:, 1]) == 1)][0][0] - 1 #Floor() -1 -- last element where the ratio is 2 print elHLR except IndexError as e: print 'err' elHLR = e plotGrowthCurve.plotGrowthCurve(fluxData, CALIFA_ID) # --------------------- writing output jpg file with both outermost annuli outputImage = inputImage circpix = ellipse.draw_ellipse(inputImage.shape, center[0], center[1], pa, circRadius, 1) elPix = ellipse.draw_ellipse(inputImage.shape, center[0], center[1], pa, elMajAxis, ba) outputImage[circpix] = 0 outputImage[elPix] = 0 outputImage, cdf = imtools.histeq(outputImage) #scipy.misc.imsave('img/output/'+CALIFA_ID+'.jpg', outputImage) scipy.misc.imsave(imgDir+'snapshots/'+CALIFA_ID+'_gc.jpg', outputImage) #hdu = pyfits.PrimaryHDU(outputImage) #outputName = 'CALIFA'+CALIFA_ID+'.fits' #hdu.writeto(outputName) # ------------------------------------- formatting output row output = [CALIFA_ID, elMag, elHLR, circMag, circHLR, np.mean(sky), gc_sky] print output #print skyMean, oldSky, 'sky' return output