Example #1
0
    def __init__(self,clustername):
        self.prefix=clustername
        self.image24=homedir+'research/LocalClusters/Images/'+self.prefix+'/24um/Full'+self.prefix+'ch1rf_mosaic_minus_median_extract.fits'
        self.noise24=homedir+'research/LocalClusters/Images/'+self.prefix+'/24um/Full'+self.prefix+'ch1rf_mosaic_unc.fits'
        if (clustername.find('A1367') > -1):
            self.image24='/home/rfinn/research/LocalClusters/Images/'+self.prefix+'/24um/'+self.prefix+'ch1r1_mosaic_minus_median_extract.fits'
            self.noise24='/home/rfinn/research/LocalClusters/Images/'+self.prefix+'/24um/'+self.prefix+'ch1r1_mosaic_unc.fits'
        elif (clustername.find('Herc')>-1):#for Abell 1367 and Hercules cluster
            self.image24='/home/rfinn/research/LocalClusters/Images/'+self.prefix+'/24um/'+self.prefix+'ch1r1_mosaic_minus_median_extract.fits'
            self.noise24='/home/rfinn/research/LocalClusters/Images/'+self.prefix+'/24um/'+self.prefix+'ch1r1_mosaic_unc.fits'

        # read NSA table for each cluster
        infile=homedir+'research/NSA/'+self.prefix+'_NSA.Fits'
        self.ndat=atpy.Table(infile,type='fits')
        self.nsadir=homedir+'research/NSA/'

        self.cra=clusterRA[self.prefix]
        self.cdec=clusterDec[self.prefix]
        self.cz=clusterz[self.prefix] 
        self.biweightvel=clusterbiweightcenter[self.prefix]
        self.biweightscale=clusterbiweightscale[self.prefix]
        self.r200=2.02*(self.biweightscale)/1000./sqrt(OmegaL+OmegaM*(1.+self.cz)**3)*H0/70. # in Mpc
        self.r200deg=self.r200*1000./my.DA(self.cz,h)/3600.

        self.cdMpc=self.biweightvel/H0
        self.cdcm=self.cdMpc*3.e24
        self.csigma=self.biweightscale
        self.mcl=my.clusterMass(self.csigma,self.cz,h)
        self.AngDistance=my.DA(self.cz,h)
Example #2
0
 def getnearest(self,j):
     self.sig5=N.zeros(len(self.ra),'f')
     self.sig10=N.zeros(len(self.ra),'f')
     self.sig5phot=N.zeros(len(self.ra),'f')
     self.sig10phot=N.zeros(len(self.ra),'f')
     self.nearest=N.zeros(len(self.ra),'f')#distance to nearest neighbor
     self.dmagnearest=N.zeros(len(self.ra),'f')#mag diff b/w spec obj and nearest
     for i in range(len(self.ra)):
         angdist=my.DA(c.z[j],h100)#kpc/arcsec
         if self.memb[i] > 0:
             dspec=N.sqrt((self.ra[i]-self.ra)**2+(self.dec[i]-self.dec)**2)#sorted array of distances in degrees
             dphot=N.sqrt((self.ra[i]-self.photra)**2+(self.dec[i]-self.photdec)**2)#sorted array of distances in degrees
             Mvsort=N.take(self.V,N.argsort(dspec))
             phMvsort=N.take(self.phMv,N.argsort(dphot))
             dspecsort=N.take(dspec,N.argsort(dspec))
             self.sig5[i]=5./(N.pi)/(dspecsort[5]*3600.*angdist/1000.)**2#convert from deg to arcsec, multiply by DA (kpc/arcsec), divide by 1000 to convert to Mpc, index 5 element b/c 0 is itself
             if (len(dspecsort) > 10):
                 self.sig10[i]=10./(N.pi)/(dspecsort[10]*3600.*angdist/1000.)**2
             else:
                 self.sig10[i]=0.
             dphotsort=N.take(dphot,N.argsort(dphot))
             self.nearest[i]=dphotsort[0]
             self.dmagnearest[i]=phMvsort[0]-Mvsort[0]
             self.sig5phot[i]=5./(N.pi)/(dphotsort[5]*3600.*angdist/1000.)**2
             self.sig10phot[i]=10./(N.pi)/(dphotsort[10]*3600.*angdist/1000.)**2
Example #3
0
    def __init__(self,clustername):
#Get current path so program can tell if this is being run on Becky or Rose's computer
	self.prefix=clustername
        self.cra=clusterRA[self.prefix]
        self.cdec=clusterDec[self.prefix]
        self.cz=clusterz[self.prefix]
	self.biweightvel=clustercbi[self.prefix]
	self.biweightscale=clustersbi[self.prefix]
	self.r200=2.02*(self.biweightscale)/1000./sqrt(OmegaL+OmegaM*(1.+self.cz)**3)*H0/70. # in Mpc
        self.r200deg=self.r200*1000./my.DA(self.cz,h)/3600.

        self.cdMpc=self.biweightvel/H0
        self.cdcm=self.cdMpc*3.e24
        self.csigma=self.biweightscale
        self.mcl=my.clusterMass(self.csigma,self.cz,h)
        self.AngDistance=my.DA(self.cz,h)
        mastertable=homedir+'research/LocalClusters/MasterTables/'+clustername+'mastertable.fits'
Example #4
0
def getnearestgen(self,ra1,dec1,ra2,dec2,j):#measure distances from ra1, dec1 to members in catalog ra2, dec2
    sig5=N.zeros(len(ra1),'f')
    sig10=N.zeros(len(ra1),'f')
    for i in range(len(ra1)):
        angdist=my.DA(c.z[j],h100)#kpc/arcsec
        dspec=N.sqrt((ra1[i]-ra2)**2+(dec1[i]-dec2)**2)#sorted array of distances in degrees
        dspecsort=N.take(dspec,N.argsort(dspec))
        sig5[i]=5./(N.pi)/(dspecsort[5]*3600.*angdist/1000.)**2#convert from deg to arcsec, multiply by DA (kpc/arcsec), divide by 1000 to convert to Mpc, index 5 element b/c 0 is itself
        sig10[i]=10./(N.pi)/(dspecsort[10]*3600.*angdist/1000.)**2#convert from deg to arcsec, multiply by DA (kpc/arcsec), divide by 1000 to convert to Mpc, index 5 element b/c 0 is itself
    return sig5, sig10
Example #5
0
def plotdVdz():
    nv = 3.
    nr = 1.
    ppgplot.pgbeg("dVdz.ps/vcps", 1, 1)  #color port.
    ppgplot.pgpap(8., 1.25)
    ppgplot.pgpage
    ppgplot.pgsch(1.2)  #font size
    ppgplot.pgslw(3)  #line width

    # 1st panel with symbols w/ stddev errorbars

    x1 = .15
    x2 = .45
    x3 = .6
    x4 = .95
    y1 = .15
    y2 = .425
    y3 = .575
    y4 = .85
    xlabel = 14.1 - 14.
    ylabel = 1.15
    schdef = 1.2
    slwdef = 4
    ppgplot.pgsch(schdef)
    xmin = 0.
    xmax = 1.1
    ymin = 0.
    ymax = 1.2

    ppgplot.pgsvp(x1, x4, y1, y4)  #sets viewport
    ppgplot.pgslw(slwdef)  #line width
    ppgplot.pgswin(xmin, xmax, ymin, ymax)  #axes limits
    ppgplot.pgbox('bcnst', .2, 2, 'bcvnst', .2, 2)  #tickmarks and labeling
    ppgplot.pgmtxt('b', 2.5, 0.5, 0.5, "z")  #xlabel
    ppgplot.pgmtxt('l', 2.6, 0.5, 0.5, "(1/DH)\u3\d c dV\dc\u/dv/d\gW")

    z = N.arange(0., 5., .1)
    beta = ((1 + z)**2 - 1) / ((1 + z)**2 + 1)
    dV = N.zeros(len(z), 'd')
    for i in range(len(z)):
        #dz=dv/(1+z[i])*(1- ((1+z[i])**2 -1)/((1+z[i])**2+1))**(-2)
        #z1=z[i]-0.5*dz
        #z2=z[i]+0.5*dz
        #dV[i]=my.dL(z2,h) - my.dL(z1,h)
        dA = my.DA(z[i], h) * 206264. / 1000.
        dV[i] = DH * (1 + z[i]) * (dA)**2 / (my.E(
            z[i])) / (1 - beta[i])**2 / DH**3
        #dV[i]=DH*(1+z[i])**2*(dA)**2/(my.E(z[i]))/DH**3#for comparison w/Hogg
        if z[i] < 1:
            print i, z[i], dV[i], dV[i]**(1. / 3.)

    ppgplot.pgline(z, dV)

    ppgplot.pgend()
Example #6
0
 def __init__(self):
     self.prefix = names[ncl]
     self.cra = clusterRA[self.prefix]
     self.cdec = clusterDec[self.prefix]
     self.cz = clusterz[self.prefix]
     self.biweightvel = clustercbi[self.prefix]
     self.biweightscale = clustersbi[self.prefix]
     self.r200 = 2.02 * (self.biweightscale) / 1000. / sqrt(
         OmegaL + OmegaM * (1. + self.cz)**3) * H0 / 70.  #in Mpc
     self.r200deg = self.r200 * 1000. / my.DA(self.cz,
                                              h) / 3600.  # in Degrees
     self.dr = 3.  #get galaxies w/in 3 degrees
Example #7
0
    def __init__(self, clustername):
        self.prefix = clustername

        # read NSA table for each cluster
        infile = homedir + 'research/NSA/' + self.prefix + '_NSA.Fits'
        self.ndat = fits.getdata(infile)
        self.nsadir = homedir + 'research/NSA/'

        self.cra = clusterRA[self.prefix]
        self.cdec = clusterDec[self.prefix]
        self.cz = clusterz[self.prefix]
        self.biweightvel = clusterbiweightcenter[self.prefix]
        self.biweightscale = clusterbiweightscale[self.prefix]
        self.r200 = 2.02 * (self.biweightscale) / 1000. / sqrt(
            OmegaL + OmegaM * (1. + self.cz)**3) * H0 / 70.  # in Mpc
        self.r200deg = self.r200 * 1000. / my.DA(self.cz, h) / 3600.

        self.cdMpc = self.biweightvel / H0
        self.cdcm = self.cdMpc * 3.e24
        self.csigma = self.biweightscale
        self.mcl = my.clusterMass(self.csigma, self.cz, h)
        self.AngDistance = my.DA(self.cz, h)
        self.sdssflag = (self.ndat.ISDSS > -1) & (self.ndat.ABSMAG[:, 4] <
                                                  args.magnitudecut)
Example #8
0
    def __init__(self,clustername):
        self.prefix=clustername
        self.john_prefix=john_prefix[self.prefix]
        self.cra=clusterRA[self.prefix]
        self.cdec=clusterDec[self.prefix]
        self.cz=clusterz[self.prefix]
        self.biweightvel=clusterbiweightcenter[self.prefix]
        self.biweightscale=clusterbiweightscale[self.prefix]
        #infile=homedir+'research/LocalClusters/NSAmastertables/NSAwithAGC/'+clustername+'_NSAmastertable_topcat.fits'
        #self.n=atpy.Table(infile)
        infile=homedir+'research/LocalClusters/NSAmastertables/'+clustername+'_NSA.fits'
        self.n=fits.getdata(infile)

        #infile=homedir+'research/LocalClusters/NSAmastertables/'+clustername+'_NSAmastertable.fits'
        #self.nsa=atpy.Table(infile)
        self.r200=2.02*(self.biweightscale)/1000./sqrt(OmegaL+OmegaM*(1.+self.cz)**3)*H0/70. # in Mpc
        self.r200deg=self.r200*1000./my.DA(self.biweightvel/3.e5,h)/3600.
        dr=sqrt((self.cra-self.n.RA)**2+(self.cdec-self.n.DEC)**2)/self.r200deg
        dv=abs(self.n.ZDIST*3.e5-self.biweightvel)/self.biweightscale
        self.membflag=(dv < 3.) & (dr < 1.)
Example #9
0
    def __init__(self, clustername):
        #Get current path so program can tell if this is being run on Becky or Rose's computer
        self.prefix = clustername
        self.cra = clusterRA[self.prefix]
        self.cdec = clusterDec[self.prefix]
        self.cz = clusterz[self.prefix]
        self.biweightvel = clustercbi[self.prefix]
        self.biweightscale = clustersbi[self.prefix]
        self.r200 = 2.02 * (self.biweightscale) / 1000. / sqrt(
            OmegaL + OmegaM * (1. + self.cz)**3) * H0 / 70.  # in Mpc
        self.r200deg = self.r200 * 1000. / my.DA(self.cz, h) / 3600.

        mypath = os.getcwd()
        if mypath.find('Users') > -1:
            print "Running on Rose's mac pro"
            infile = '/Users/rfinn/research/LocalClusters/MasterTables/' + clustername + 'mastertable.fits'
        elif mypath.find('home') > -1:
            print "Running on coma"
            infile = '/home/rfinn/research/LocalClusters/MasterTables/' + clustername + 'mastertable.fits'

    #infile='/home/rfinn/LocalClusters/MasterTables/'+clustername+'mastertable.fits'

        tb = pyfits.open(infile)
        tbdata = tb[1].data
        tb.close()
        self.agcflag = tbdata.field('AGCflag')
        self.HIflag = tbdata.field('HIFLAG')
        self.sdssflag = tbdata.field('SDSSflag')
        self.sdssphotflag = tbdata.field('SDSSphotflag')
        self.mpaflag = tbdata.field('MPAFLAG')
        self.apexflag = tbdata.field('APEXFLAG')
        self.sexsdssflag = tbdata.field('SEXSDSSflag')
        self.sex24flag = tbdata.field('SEX24FLAG')
        self.agcvoptflag = tbdata.field('AGCVOPTFLAG')

        self.agcnumber = tbdata.field('AGCNUMBER')
        self.raagc = tbdata.field('AGCRA')
        self.decagc = tbdata.field('AGCDEC')
        self.a100 = tbdata.field('A100')
        self.b100 = tbdata.field('B100')
        self.mag10 = tbdata.field('MAG10')
        self.posang = tbdata.field('POSANG')
        self.bsteintype = tbdata.field('BSTEINTYPE')
        self.vopt = tbdata.field('VOPT')
        self.verr = tbdata.field('VERR')
        self.vsource = tbdata.field('VSOURCE')
        self.flux100 = tbdata.field('FLUX100')
        self.rms100 = tbdata.field('RMS100')
        self.v21 = tbdata.field('V21')
        self.width = tbdata.field('WIDTH')
        self.widtherr = tbdata.field('WIDTHERR')
        #sdss info
        self.sdssra = tbdata.field('SDSSRA')
        self.sdssdec = tbdata.field('SDSSDEC')
        self.sdssphotra = tbdata.field('SDSSphotRA')
        self.sdssphotdec = tbdata.field('SDSSphotDEC')
        self.sdssu = tbdata.field('SDSSU')
        self.sdssg = tbdata.field('SDSSG')
        self.sdssr = tbdata.field('SDSSR')
        self.sdssi = tbdata.field('SDSSI')
        self.sdssz = tbdata.field('SDSSZ')
        self.sdssspecz = tbdata.field('SDSSSPECZ')
        self.sdssvopt = tbdata.field('SDSSVOPT')
        self.sdsshaew = tbdata.field('SDSSHAEW')
        self.sdsshaewerr = tbdata.field('SDSSHAEWERR')
        self.sdssplate = tbdata.field('SDSSPLATE')
        self.sdssfiberid = tbdata.field('SDSSFIBERID')
        self.sdsstile = tbdata.field('SDSSTILE')
        self.mpahalpha = tbdata.field('MPAHALPHA')
        self.mpahbeta = tbdata.field('MPAHBETA')
        self.mpao3 = tbdata.field('MPAOIII')
        self.mpan2 = tbdata.field('MPANII')
        #sextractor info
        self.numberser = tbdata.field('NUMBERSER')
        self.ximageser = tbdata.field('XIMAGESER')
        self.yimageser = tbdata.field('YIMAGESER')
        self.xminimageser = tbdata.field('XMINIMAGESER')
        self.xmaximageser = tbdata.field('XMAXIMAGESER')
        self.yminimageser = tbdata.field('YMINIMAGESER')
        self.raser = tbdata.field('RASER')
        self.decser = tbdata.field('DECSER')
        self.fluxisoser = tbdata.field('FLUXISOSER')
        self.fluxerrisoser = tbdata.field('FLUXERRISOSER')
        self.magisoser = tbdata.field('MAGISOSER')
        self.magerrisoser = tbdata.field('MAGERRISOSER')
        self.fluxautoser = tbdata.field('FLUXAUTOSER')
        self.fluxerrautoser = tbdata.field('FLUXERRAUTOSER')
        self.magautoser = tbdata.field('MAGAUTOSER')
        self.magerrautoser = tbdata.field('MAGERRAUTOSER')
        self.fluxpetroser = tbdata.field('FLUXPETROSER')
        self.fluxerrpetroser = tbdata.field('FLUXERRPETROSER')
        self.magpetroser = tbdata.field('MAGPETROSER')
        self.magerrpetroser = tbdata.field('MAGERRPETROSER')
        self.kronradser = tbdata.field('KRONRADSER')  #kron radius
        self.petroradser = tbdata.field('PETRORADSER')  #petrosian radius
        self.fluxradser = tbdata.field('FLUXRADSER')  #1/2 light radius
        self.isoareaser = tbdata.field('ISOAREASER')
        self.aworldser = tbdata.field('AWORLDSER')
        self.bworldser = tbdata.field('BWORLDSER')
        self.thetaser = tbdata.field('THETASER')
        self.errthetaser = tbdata.field('ERRTHETASER')
        self.thetaj2000ser = tbdata.field('THETAJ2000SER')
        self.errthetaj2000ser = tbdata.field('ERRTHETAJ2000SER')
        self.elongser = tbdata.field('ELONGATIONSER')
        self.elliptser = tbdata.field('ELLIPTICITYSER')
        self.fwhmser = tbdata.field('FWHMSER')
        self.flagsser = tbdata.field('FLAGSSER')
        self.classstarser = tbdata.field('CLASSSTARSER')
        #SEXTRACTOR  output 24 micron data
        self.numberse24 = tbdata.field('NUMBERSE24')
        self.ximagese24 = tbdata.field('XIMAGESE24')
        self.yimagese24 = tbdata.field('YIMAGESE24')
        self.xminimagese24 = tbdata.field('XMINIMAGESE24')
        self.xmaximagese24 = tbdata.field('XMAXIMAGESE24')
        self.xminimagese24 = tbdata.field('YMINIMAGESE24')
        self.rase24 = tbdata.field('RASE24')
        self.decse24 = tbdata.field('DECSE24')
        self.fluxisose24 = tbdata.field('FLUXISOSE24')
        self.fluxerrisose24 = tbdata.field('FLUXERRISOSE24')
        self.magisose24 = tbdata.field('MAGISOSE24')
        self.magerrisose24 = tbdata.field('MAGERRISOSE24')
        self.fluxautose24 = tbdata.field('FLUXAUTOSE24')
        self.fluxerrautose24 = tbdata.field('FLUXERRAUTOSE24')
        self.magautose24 = tbdata.field('MAGAUTOSE24')
        self.magerrautose24 = tbdata.field('MAGERRAUTOSE24')
        self.fluxpetrose24 = tbdata.field('FLUXPETROSE24')
        self.fluxerrpetrose24 = tbdata.field('FLUXERRPETROSE24')
        self.magpetrose24 = tbdata.field('MAGPETROSE24')
        self.magerrpetrose24 = tbdata.field('MAGERRPETROSE24')
        self.kronradse24 = tbdata.field('KRONRADSE24')
        self.petroradse24 = tbdata.field('PETRORADSE24')
        self.fluxradse24 = tbdata.field('FLUXRADSE24')
        self.isoarease24 = tbdata.field('ISOAREASE24')
        self.aworldse24 = tbdata.field('AWORLDSE24')
        self.bworldse24 = tbdata.field('BWORLDSE24')
        self.thetase24 = tbdata.field('THETASE24')
        self.errthetase24 = tbdata.field('ERRTHETASE24')
        self.thetaj2000se24 = tbdata.field('THETAJ2000SE24')
        self.errthetaj2000se24 = tbdata.field('ERRTHETAJ2000SE24')
        self.elongse24 = tbdata.field('ELONGATIONSE24')
        self.elliptse24 = tbdata.field('ELLIPTICITYSE24')
        self.fwhmse24 = tbdata.field('FWHMSE24')
        self.flagsse24 = tbdata.field('FLAGSSE24')
        self.classstarse24 = tbdata.field('CLASSSTARSE24')
        self.f24dist = self.fluxautose24[self.sex24flag]
        #apex output
        self.mipsra = tbdata.field('MIPSRA')
        self.mipsdec = tbdata.field('MIPSDEC')
        self.mipsflux = tbdata.field('MIPSFLUX')
        self.mipsfluxerr = tbdata.field('MIPSFLUXERR')
        self.mipssnr = tbdata.field('MIPSSNR')
        self.mipsdeblend = tbdata.field('MIPSDEBLEND')
        self.mipsfluxap1 = tbdata.field('MIPSFLUXAP1')
        self.mipsfluxap1err = tbdata.field('MIPSFLUXAP1ERR')
        self.mipsfluxap2 = tbdata.field('MIPSFLUXAP2')
        self.mipsfluxap2err = tbdata.field('MIPSFLUXAP2ERR')
        self.mipsfluxap3 = tbdata.field('MIPSFLUXAP3')
        self.mipsfluxap4err = tbdata.field('MIPSFLUXAP3ERR')

        self.On24ImageFlag = tbdata.field('On24ImageFlag')
        self.supervopt = tbdata.field('SUPERVOPT')
        self.ra = tbdata.field('SUPERRA')
        self.dec = tbdata.field('SUPERDEC')

        self.stellarmass = tbdata.field('STELLARMASS')

        self.sdssMu = tbdata.field('SDSSMU')
        self.sdssLu = tbdata.field('SDSSLU')
        self.sdssMg = tbdata.field('SDSSMG')
        self.sdssLg = tbdata.field('SDSSLG')
        self.sdssMr = tbdata.field('SDSSMR')
        self.sdssLr = tbdata.field('SDSSLR')
        self.sdssMi = tbdata.field('SDSSMI')
        self.sdssLi = tbdata.field('SDSSLI')
        self.sdssMz = tbdata.field('SDSSMZ')
        self.sdssLz = tbdata.field('SDSSLZ')
        self.membflag = tbdata.field('MEMBFLAG')
        self.morphflag = tbdata.field('MORPHFLAG')
        self.morph = tbdata.field('MORPH')
        self.disturb = tbdata.field('DISTURB')
        self.localdens = tbdata.field('LOCALDENS')
        self.agn1 = tbdata.field('AGNKAUFF')
        self.agn2 = tbdata.field('AGNKEWLEY')
        self.agn3 = tbdata.field('AGNSTASIN')
        self.logn2halpha = log10(self.mpan2 / self.mpahalpha)
        self.logo3hbeta = log10(self.mpao3 / self.mpahbeta)
        self.ellipseflag24 = tbdata.field('ELLIPSEFLAG24')
        self.ellipseflagsdss = tbdata.field('ELLIPSEFLAGSDSS')
        self.ellipseflag = tbdata.field('ELLIPSEFLAG')

        # galaxy zoo fields
        self.galzooflag = tbdata.field('GALZOOFLAG')
        self.galzoonvote = tbdata.field('GALZOONVOTE')
        self.galzoopel = tbdata.field('GALZOOPEL')
        self.galzoopcw = tbdata.field('GALZOOPCW')
        self.galzoopacw = tbdata.field('GALZOOPACW')
        self.galzoopedge = tbdata.field('GALZOOPEDGE')
        self.galzoopdk = tbdata.field('GALZOOPDK')
        self.galzoopmg = tbdata.field('GALZOOPMG')
        self.galzoopcs = tbdata.field('GALZOOPCS')
        self.galzoopeldebiased = tbdata.field('GALZOOPELDEBIASED')
        self.galzoopcsdebiased = tbdata.field('GALZOOPCSDEBIASED')
        self.galzoospiral = tbdata.field('GALZOOSPIRAL')
        self.galzooelliptical = tbdata.field('GALZOOELLIPTICAL')
        self.galzoouncertain = tbdata.field('GALZOOUNCERTAIN')

        #end of master table!
        #self.spiralFlag=self.On24ImageFlag & self.galzooflag & self.ellipseflag & (self.galzoopcsdebiased > 0.6)
        self.spiralFlag = self.On24ImageFlag & self.galzooflag & self.ellipseflag & self.galzoospiral
        self.clustername = clustername
        self.clusterra = clusterRA[clustername]
        self.clusterdec = clusterDec[clustername]
        self.dr = sqrt((self.ra - self.clusterra)**2 +
                       (self.dec - self.clusterdec)**2)
        self.drR200 = self.dr / self.r200deg
        self.clustervel = clustervel[clustername]
        self.clustersigma = clustersigma[clustername]
        self.clustervmin = self.clustervel - 3. * self.clustersigma
        self.clustervmax = self.clustervel + 3. * self.clustersigma

        self.dist = sqrt((self.clusterra - self.ra)**2 +
                         (self.clusterdec - self.dec)**2)
        self.flagHI = (self.flux100 > 0.)
        self.flagmemb = ((self.vopt > self.clustervmin) &
                         (self.vopt < self.clustervmax)) | (
                             (self.v21 > self.clustervmin) &
                             (self.v21 < self.clustervmax))

        self.allvelocity = 3.e5 * self.sdssspecz
        for i in range(len(self.allvelocity)):
            if self.sdssflag[i] < 1:
                if self.v21[i] > 0:
                    self.allvelocity[i] = self.v21[i]
                else:
                    self.allvelocity[i] = self.vopt[i]

        self.nmemb = len(self.dist[self.membflag & self.On24ImageFlag])
        self.nfield = len(self.dist[self.On24ImageFlag]) - self.nmemb
        print self.clustername, ": ", "N members = ", self.nmemb, " N field = ", self.nfield
        print ' N spirals = ', sum(
            self.spiralFlag), ' Nspiral members = ', sum(self.spiralFlag
                                                         & self.membflag)
Example #10
0
    def __init__(self, clustername):
        #Get current path so program can tell if this is being run on Becky or Rose's computer
        self.prefix = clustername
        self.cra = clusterRA[self.prefix]
        self.cdec = clusterDec[self.prefix]
        self.cz = clusterz[self.prefix]
        self.biweightvel = clustercbi[self.prefix]
        self.biweightscale = clustersbi[self.prefix]
        self.r200 = 2.02 * (self.biweightscale) / 1000. / sqrt(
            OmegaL + OmegaM * (1. + self.cz)**3) * H0 / 70.  # in Mpc
        self.r200deg = self.r200 * 1000. / my.DA(self.cz, h) / 3600.

        self.cdMpc = self.biweightvel / H0
        self.cdcm = self.cdMpc * 3.e24

        mypath = os.getcwd()
        if mypath.find('Users') > -1:
            print "Running on Rose's mac pro"
            infile = '/Users/rfinn/research/LocalClusters/MasterTables/' + clustername + 'mastertable.WithProfileFits.fits'
            homedir = '/Users/rfinn/'
        elif mypath.find('home') > -1:
            print "Running on coma"
            infile = '/home/rfinn/research/LocalClusters/MasterTables/' + clustername + 'mastertable.WithProfileFits.fits'
            homedir = '/home/rfinn/'
        self.cutoutpath = homedir + 'research/LocalClusters/cutouts/' + self.prefix + '/'
        #infile='/home/rfinn/LocalClusters/MasterTables/'+clustername+'mastertable.fits'
        tb = pyfits.open(infile)
        tbdata = tb[1].data
        tb.close()
        self.agcflag = tbdata.field('AGCflag')
        self.HIflag = tbdata.field('HIFLAG')
        self.sdssflag = tbdata.field('SDSSflag')
        self.sdssphotflag = tbdata.field('SDSSphotflag')
        self.mpaflag = tbdata.field('MPAFLAG')
        self.apexflag = tbdata.field('APEXFLAG')
        self.sexsdssflag = tbdata.field('SEXSDSSflag')
        self.sex24flag = tbdata.field('SEX24FLAG')
        self.agcvoptflag = tbdata.field('AGCVOPTFLAG')

        self.agcnumber = tbdata.field('AGCNUMBER')
        self.raagc = tbdata.field('AGCRA')
        self.decagc = tbdata.field('AGCDEC')
        self.a100 = tbdata.field('A100')
        self.b100 = tbdata.field('B100')
        self.mag10 = tbdata.field('MAG10')
        self.posang = tbdata.field('POSANG')
        self.bsteintype = tbdata.field('BSTEINTYPE')
        self.vopt = tbdata.field('VOPT')
        self.verr = tbdata.field('VERR')
        self.vsource = tbdata.field('VSOURCE')
        self.flux100 = tbdata.field('FLUX100')
        self.rms100 = tbdata.field('RMS100')
        self.v21 = tbdata.field('V21')
        self.width = tbdata.field('WIDTH')
        self.widtherr = tbdata.field('WIDTHERR')
        #sdss info
        self.sdssra = tbdata.field('SDSSRA')
        self.sdssdec = tbdata.field('SDSSDEC')
        self.sdssphotra = tbdata.field('SDSSphotRA')
        self.sdssphotdec = tbdata.field('SDSSphotDEC')
        self.sdssu = tbdata.field('SDSSU')
        self.sdssg = tbdata.field('SDSSG')
        self.sdssr = tbdata.field('SDSSR')
        self.sdssi = tbdata.field('SDSSI')
        self.sdssz = tbdata.field('SDSSZ')
        self.sdssspecz = tbdata.field('SDSSSPECZ')
        self.sdssvopt = tbdata.field('SDSSVOPT')
        self.sdsshaew = tbdata.field('SDSSHAEW')
        self.sdsshaewerr = tbdata.field('SDSSHAEWERR')
        self.sdssplate = tbdata.field('SDSSPLATE')
        self.sdssfiberid = tbdata.field('SDSSFIBERID')
        self.sdsstile = tbdata.field('SDSSTILE')
        self.mpahalpha = tbdata.field('MPAHALPHA')
        self.mpahbeta = tbdata.field('MPAHBETA')
        self.mpao3 = tbdata.field('MPAOIII')
        self.mpan2 = tbdata.field('MPANII')
        #sextractor info
        self.numberser = tbdata.field('NUMBERSER')
        self.ximageser = tbdata.field('XIMAGESER')
        self.yimageser = tbdata.field('YIMAGESER')
        self.xminimageser = tbdata.field('XMINIMAGESER')
        self.xmaximageser = tbdata.field('XMAXIMAGESER')
        self.yminimageser = tbdata.field('YMINIMAGESER')
        self.raser = tbdata.field('RASER')
        self.decser = tbdata.field('DECSER')
        self.fluxisoser = tbdata.field('FLUXISOSER')
        self.fluxerrisoser = tbdata.field('FLUXERRISOSER')
        self.magisoser = tbdata.field('MAGISOSER')
        self.magerrisoser = tbdata.field('MAGERRISOSER')
        self.fluxautoser = tbdata.field('FLUXAUTOSER')
        self.fluxerrautoser = tbdata.field('FLUXERRAUTOSER')
        self.magautoser = tbdata.field('MAGAUTOSER')
        self.magerrautoser = tbdata.field('MAGERRAUTOSER')
        self.fluxpetroser = tbdata.field('FLUXPETROSER')
        self.fluxerrpetroser = tbdata.field('FLUXERRPETROSER')
        self.magpetroser = tbdata.field('MAGPETROSER')
        self.magerrpetroser = tbdata.field('MAGERRPETROSER')
        self.kronradser = tbdata.field('KRONRADSER')  #kron radius
        self.petroradser = tbdata.field('PETRORADSER')  #petrosian radius
        self.fluxradser = tbdata.field('FLUXRADSER')  #1/2 light radius
        self.isoareaser = tbdata.field('ISOAREASER')
        self.aworldser = tbdata.field('AWORLDSER')
        self.bworldser = tbdata.field('BWORLDSER')
        self.thetaser = tbdata.field('THETASER')
        self.errthetaser = tbdata.field('ERRTHETASER')
        self.thetaj2000ser = tbdata.field('THETAJ2000SER')
        self.errthetaj2000ser = tbdata.field('ERRTHETAJ2000SER')
        self.elongser = tbdata.field('ELONGATIONSER')
        self.elliptser = tbdata.field('ELLIPTICITYSER')
        self.fwhmser = tbdata.field('FWHMSER')
        self.flagsser = tbdata.field('FLAGSSER')
        self.classstarser = tbdata.field('CLASSSTARSER')
        #SEXTRACTOR  output 24 micron data
        self.numberse24 = tbdata.field('NUMBERSE24')
        self.ximagese24 = tbdata.field('XIMAGESE24')
        self.yimagese24 = tbdata.field('YIMAGESE24')
        self.xminimagese24 = tbdata.field('XMINIMAGESE24')
        self.xmaximagese24 = tbdata.field('XMAXIMAGESE24')
        self.xminimagese24 = tbdata.field('YMINIMAGESE24')
        self.rase24 = tbdata.field('RASE24')
        self.decse24 = tbdata.field('DECSE24')
        self.fluxisose24 = tbdata.field('FLUXISOSE24')
        self.fluxerrisose24 = tbdata.field('FLUXERRISOSE24')
        self.magisose24 = tbdata.field('MAGISOSE24')
        self.magerrisose24 = tbdata.field('MAGERRISOSE24')
        self.fluxautose24 = tbdata.field('FLUXAUTOSE24')
        self.fluxerrautose24 = tbdata.field('FLUXERRAUTOSE24')
        self.magautose24 = tbdata.field('MAGAUTOSE24')
        self.magerrautose24 = tbdata.field('MAGERRAUTOSE24')
        self.fluxpetrose24 = tbdata.field('FLUXPETROSE24')
        self.fluxerrpetrose24 = tbdata.field('FLUXERRPETROSE24')
        self.magpetrose24 = tbdata.field('MAGPETROSE24')
        self.magerrpetrose24 = tbdata.field('MAGERRPETROSE24')
        self.kronradse24 = tbdata.field('KRONRADSE24')
        self.petroradse24 = tbdata.field('PETRORADSE24')
        self.fluxradse24 = tbdata.field('FLUXRADSE24')
        self.isoarease24 = tbdata.field('ISOAREASE24')
        self.aworldse24 = tbdata.field('AWORLDSE24')
        self.bworldse24 = tbdata.field('BWORLDSE24')
        self.thetase24 = tbdata.field('THETASE24')
        self.errthetase24 = tbdata.field('ERRTHETASE24')
        self.thetaj2000se24 = tbdata.field('THETAJ2000SE24')
        self.errthetaj2000se24 = tbdata.field('ERRTHETAJ2000SE24')
        self.elongse24 = tbdata.field('ELONGATIONSE24')
        self.elliptse24 = tbdata.field('ELLIPTICITYSE24')
        self.fwhmse24 = tbdata.field('FWHMSE24')
        self.flagsse24 = tbdata.field('FLAGSSE24')
        self.classstarse24 = tbdata.field('CLASSSTARSE24')
        self.f24dist = self.fluxautose24[self.sex24flag]
        #apex output
        self.mipsra = tbdata.field('MIPSRA')
        self.mipsdec = tbdata.field('MIPSDEC')
        self.mipsflux = tbdata.field('MIPSFLUX')
        self.mipsfluxerr = tbdata.field('MIPSFLUXERR')
        self.mipssnr = tbdata.field('MIPSSNR')
        self.mipsdeblend = tbdata.field('MIPSDEBLEND')
        self.mipsfluxap1 = tbdata.field('MIPSFLUXAP1')
        self.mipsfluxap1err = tbdata.field('MIPSFLUXAP1ERR')
        self.mipsfluxap2 = tbdata.field('MIPSFLUXAP2')
        self.mipsfluxap2err = tbdata.field('MIPSFLUXAP2ERR')
        self.mipsfluxap3 = tbdata.field('MIPSFLUXAP3')
        self.mipsfluxap4err = tbdata.field('MIPSFLUXAP3ERR')

        self.On24ImageFlag = tbdata.field('On24ImageFlag')
        self.supervopt = tbdata.field('SUPERVOPT')
        self.ra = tbdata.field('SUPERRA')
        self.dec = tbdata.field('SUPERDEC')

        self.stellarmass = tbdata.field('STELLARMASS')

        self.sdssMu = tbdata.field('SDSSMU')
        self.sdssLu = tbdata.field('SDSSLU')
        self.sdssMg = tbdata.field('SDSSMG')
        self.sdssLg = tbdata.field('SDSSLG')
        self.sdssMr = tbdata.field('SDSSMR')
        self.sdssLr = tbdata.field('SDSSLR')
        self.sdssMi = tbdata.field('SDSSMI')
        self.sdssLi = tbdata.field('SDSSLI')
        self.sdssMz = tbdata.field('SDSSMZ')
        self.sdssLz = tbdata.field('SDSSLZ')
        self.membflag = tbdata.field('MEMBFLAG')
        self.morphflag = tbdata.field('MORPHFLAG')
        self.morph = tbdata.field('MORPH')
        self.disturb = tbdata.field('DISTURB')
        self.localdens = tbdata.field('LOCALDENS')
        self.agn1 = tbdata.field('AGNKAUFF')
        self.agn2 = tbdata.field('AGNKEWLEY')
        self.agn3 = tbdata.field('AGNSTASIN')
        self.logn2halpha = log10(self.mpan2 / self.mpahalpha)
        self.logo3hbeta = log10(self.mpao3 / self.mpahbeta)
        self.ellipseflag24 = tbdata.field('ELLIPSEFLAG24')
        self.ellipseflagsdss = tbdata.field('ELLIPSEFLAGSDSS')
        self.ellipseflag = tbdata.field('ELLIPSEFLAG')

        # galaxy zoo fields
        self.galzooflag = tbdata.field('GALZOOFLAG')
        self.galzoonvote = tbdata.field('GALZOONVOTE')
        self.galzoopel = tbdata.field('GALZOOPEL')
        self.galzoopcw = tbdata.field('GALZOOPCW')
        self.galzoopacw = tbdata.field('GALZOOPACW')
        self.galzoopedge = tbdata.field('GALZOOPEDGE')
        self.galzoopdk = tbdata.field('GALZOOPDK')
        self.galzoopmg = tbdata.field('GALZOOPMG')
        self.galzoopcs = tbdata.field('GALZOOPCS')
        self.galzoopeldebiased = tbdata.field('GALZOOPELDEBIASED')
        self.galzoopcsdebiased = tbdata.field('GALZOOPCSDEBIASED')
        self.galzoospiral = tbdata.field('GALZOOSPIRAL')
        self.galzooelliptical = tbdata.field('GALZOOELLIPTICAL')
        self.galzoouncertain = tbdata.field('GALZOOUNCERTAIN')

        #new SDSS fields that quantify radial extent of galaxy
        self.sdssIsoAr = tbdata.field('SDSSISOAR')
        self.sdssIsoBr = tbdata.field('SDSSISOBR')
        self.sdssIsoPhir = tbdata.field('SDSSISOPHIR')
        self.sdssIsoPhirErr = tbdata.field('SDSSISOPHIERRR')
        self.sdssExpRadr = tbdata.field('SDSSEXPRADR')
        self.sdssExpABr = tbdata.field('SDSSEXPABR')
        self.sdssExpABrErr = tbdata.field('SDSSEXPABRERR')
        self.sdssExpPhir = tbdata.field('SDSSEXPPHIR')
        self.sdssExpPhirErr = tbdata.field('SDSSEXPPHIERRR')

        self.sdssumag = tbdata.field('SDSSDEREDU')  #de-redened magnitudes
        self.sdssgmag = tbdata.field('SDSSDEREDG')
        self.sdssrmag = tbdata.field('SDSSDEREDR')
        self.sdssimag = tbdata.field('SDSSDEREDI')
        self.sdsszmag = tbdata.field('SDSSDEREDZ')

        #end of master table!

        #from mastertable WithProfileFits

        self.spiralFlag = tbdata.field('SPIRALFLAG')
        self.r0SDSS = tbdata.field('R0SDSS')
        self.r30SDSS = tbdata.field('R30SDSS')
        self.r50SDSS = tbdata.field('R50SDSS')
        self.r90SDSS = tbdata.field('R90SDSS')
        self.skySDSS = tbdata.field('SKYSDSS')
        self.r30EncFluxSDSS = tbdata.field('R30ENCFLUXSDSS')
        self.r90EncFluxSDSS = tbdata.field('R90ENCFLUXSDSS')
        self.MaxEncFluxSDSS = tbdata.field('MAXENCFLUXSDSS')

        self.SDSSF30 = tbdata.field('SDSSF30')
        self.SDSSF50 = tbdata.field('SDSSF50')
        self.SDSSF90 = tbdata.field('SDSSF90')

        self.r0F24 = tbdata.field('R0F24')
        self.r30F24 = tbdata.field('R30F24')
        self.r50F24 = tbdata.field('R50F24')
        self.r90F24 = tbdata.field('R90F24')
        self.skyF24 = tbdata.field('SKYF24')
        self.r30EncFluxF24 = tbdata.field('R30ENCFLUXF24')
        self.r90EncFluxF24 = tbdata.field('R90ENCFLUXF24')
        self.MaxEncFluxF24 = tbdata.field('MAXENCFLUXF24')

        self.mipsF30 = tbdata.field('MIPSF30')
        self.mipsF50 = tbdata.field('MIPSF50')
        self.mipsF90 = tbdata.field('MIPSF90')

        self.SDSSEllipseEllip = tbdata.field('SDSSEllipseEllip')
        self.SDSSEllipseEllipErr = tbdata.field('SDSSEllipseEllipErr')
        self.SDSSEllipsePhi = tbdata.field('SDSSEllipsePhi')
        self.SDSSEllipsePhiErr = tbdata.field('SDSSEllipsePhiErr')

        self.imagearea50 = pi * (self.r50SDSS /
                                 pscalesdss)**2 * (1 - self.SDSSEllipseEllip)
        self.imagearea90 = pi * (self.r90SDSS /
                                 pscalesdss)**2 * (1 - self.SDSSEllipseEllip)
        self.mipsimagearea50 = pi * (self.r50SDSS /
                                     pscale24)**2 * (1 - self.SDSSEllipseEllip)
        self.mipsimagearea90 = pi * (self.r90SDSS /
                                     pscale24)**2 * (1 - self.SDSSEllipseEllip)

        self.mipsF30err = tbdata.field('mipsF30err')
        self.mipsF50err = tbdata.field('mipsF50err')  #/sqrt(mipsimagearea50)
        self.mipsF90err = tbdata.field('mipsF90err')  #/sqrt(mipsimagearea90)

        self.SDSSF30err = tbdata.field('sdssF30err')
        self.SDSSF50err = tbdata.field('sdssF50err')  #/sqrt(imagearea50)
        self.SDSSF90err = tbdata.field('sdssF90err')  #/sqrt(imagearea90)

        #end of master table!
        #redefining noise estimates until I can deal w/this properly
        self.sdsssnr = self.fluxautoser / self.fluxerrautoser

        #        self.mipsF50err = self.mipsF50/(self.mipssnr*sqrt(self.mipsF50/self.fluxautose24))
        #        self.mipsF90err = self.mipsF90/(self.mipssnr*sqrt(self.mipsF90/self.fluxautose24))

        #        self.SDSSF50err = self.SDSSF50/(self.sdsssnr*sqrt(self.SDSSF50/self.fluxautoser))
        #        self.SDSSF90err = self.SDSSF90/(self.sdsssnr*sqrt(self.SDSSF90/self.fluxautoser))
        #self.mipsF50err = self.mipsF50/(self.mipssnr)
        #self.mipsF90err = self.mipsF90/(self.mipssnr)

        #self.SDSSF50err = self.SDSSF50/(self.sdsssnr)
        #self.SDSSF90err = self.SDSSF90/(self.sdsssnr)

        #self.spiralFlag=self.On24ImageFlag & self.galzooflag & self.ellipseflag & (self.galzoopcsdebiased > 0.6)
        #self.spiralFlag=self.On24ImageFlag & self.galzooflag & self.ellipseflag & self.galzoospiral
        self.clustername = clustername
        self.clusterra = clusterRA[clustername]
        self.clusterdec = clusterDec[clustername]
        self.dr = sqrt((self.ra - self.clusterra)**2 +
                       (self.dec - self.clusterdec)**2)
        self.drR200 = self.dr / self.r200deg
        self.clustervel = clustervel[clustername]
        self.clustersigma = clustersigma[clustername]
        self.clustervmin = self.clustervel - 3. * self.clustersigma
        self.clustervmax = self.clustervel + 3. * self.clustersigma

        self.dist = sqrt((self.clusterra - self.ra)**2 +
                         (self.clusterdec - self.dec)**2)
        self.flagHI = (self.flux100 > 0.)
        self.flagmemb = ((self.vopt > self.clustervmin) &
                         (self.vopt < self.clustervmax)) | (
                             (self.v21 > self.clustervmin) &
                             (self.v21 < self.clustervmax))

        self.dv = abs(self.supervopt - self.biweightvel) / self.biweightscale

        self.allvelocity = 3.e5 * self.sdssspecz
        for i in range(len(self.allvelocity)):
            if self.sdssflag[i] < 1:
                if self.v21[i] > 0:
                    self.allvelocity[i] = self.v21[i]
                else:
                    self.allvelocity[i] = self.vopt[i]

        self.nmemb = len(self.dist[self.membflag & self.On24ImageFlag])
        self.nfield = len(self.dist[self.On24ImageFlag]) - self.nmemb
        print self.clustername, ": ", "N members = ", self.nmemb, " N field = ", self.nfield
        print ' N spirals = ', sum(
            self.spiralFlag), ' Nspiral members = ', sum(self.spiralFlag
                                                         & self.membflag)
        self.agcdict = dict(
            (a, b)
            for a, b in zip(self.agcnumber, arange(len(self.agcnumber))))

        self.sSFR50 = self.mipsF50 / self.SDSSF50
        a = self.mipsF50
        b = self.SDSSF50
        aerr = self.mipsF50err
        berr = self.SDSSF50err
        self.sSFR50err = sqrt((aerr / b)**2 + (a * berr / b**2)**2)
        self.sSFR90 = self.mipsF90 / self.SDSSF90

        a = self.mipsF90
        b = self.SDSSF90
        aerr = self.mipsF90err
        berr = self.SDSSF90err
        self.sSFR90err = sqrt((aerr / b)**2 + (a * berr / b**2)**2)

        self.sSFR5090 = (self.mipsF90 - self.mipsF50) / (self.SDSSF90 -
                                                         self.SDSSF50)

        a = (self.mipsF90 - self.mipsF50)
        b = (self.SDSSF90 - self.SDSSF50)
        aerr = sqrt((self.mipsF50err)**2 + (self.mipsF90err)**2)
        berr = sqrt(self.SDSSF50err**2 + self.SDSSF90err**2)
        self.sSFR5090err = sqrt((aerr / b)**2 + (a * berr / b**2)**2)

        self.ratio0 = self.r0F24 / self.r0SDSS
        self.ratio30 = self.r30F24 / self.r30SDSS

        self.ratio90 = self.r90F24 / self.r90SDSS
        self.ratio30EncFlux = self.r30EncFluxF24 / self.r30EncFluxSDSS
        self.ratio90EncFlux = self.r90EncFluxF24 / self.r90EncFluxSDSS

        #self.L24=zeros(len(self.mipsflux),'d')
        #self.L24err=zeros(len(self.mipsflux),'d')

        ## these should be added to mastertable
        conv = 4 * pi * (self.cdcm**
                         2) * 1.e-6 * 1.e-23 * (3.e8 / 24.e-6) / Lsol
        print 'conversion from F24 to L24 = ', conv
        self.L24 = self.mipsflux * conv

        self.L24err = self.mipsfluxerr * conv
        self.SFR24 = self.L24 * 8. * 4.5e-44 * Lsol  #approx conv from papovich
        self.SFR24err = self.L24err * 8. * 4.5e-44 * Lsol  #approx conv from papovich

        self.SFR24se = (self.fluxautose24 * 141 *
                        conv) * 8. * 4.5e-44 * Lsol  #approx conv from papovich
        self.SFR24seerr = (self.fluxerrautose24 * 141 * conv
                           ) * 8. * 4.5e-44 * Lsol  #approx conv from papovich
        self.snr24se = abs(self.SFR24se / self.SFR24seerr)

        self.superSFR24 = self.SFR24 * self.apexflag + self.SFR24se * (
            ~self.apexflag & self.sex24flag)
        self.superSFR24err = self.SFR24err * self.apexflag + self.SFR24seerr * (
            ~self.apexflag & self.sex24flag)
        self.sSFR = self.SFR24 / self.stellarmass

        self.HImass = 2.356e5 * self.flux100 / 100. * self.cdMpc**2
    def __init__(self, clustername):
        #Get current path so program can tell if this is being run on Becky or Rose's computer
        self.prefix = clustername
        self.john_prefix = john_prefix[self.prefix]
        self.cra = clusterRA[self.prefix]
        self.cdec = clusterDec[self.prefix]
        self.cz = clusterz[self.prefix]
        self.biweightvel = clusterbiweightcenter[self.prefix]
        self.biweightscale = clusterbiweightscale[self.prefix]
        self.r200 = 2.02 * (self.biweightscale) / 1000. / sqrt(
            OmegaL + OmegaM * (1. + self.cz)**3) * H0 / 70.  # in Mpc
        self.r200deg = self.r200 * 1000. / my.DA(self.biweightvel / 3.e5,
                                                 h) / 3600.

        self.cdMpc = self.biweightvel / H0
        self.cdcm = self.cdMpc * 3.e24
        self.csigma = self.biweightscale
        self.mcl = my.clusterMass(self.biweightscale, self.biweightvel / 3.e5,
                                  h)
        self.cLx = clusterLx[self.prefix]
        self.mingalaxysize = mingalaxysize_kpc / my.DA(self.biweightvel / 3.e5,
                                                       h)
        #infile=homedir+'research/LocalClusters/NSAmastertables/'+clustername+'_NSAmastertable.fits'
        infile = homedir + 'research/LocalClusters/NSAmastertables/NSAwithAGC/' + clustername + '_NSAmastertable_topcat.fits'
        self.cutoutpath = homedir + 'research/LocalClusters/cutouts/' + self.prefix + '/'
        #infile='/home/rfinn/LocalClusters/MasterTables/'+clustername+'mastertable.fits'
        self.n = atpy.Table(infile)

        infile = homedir + 'research/LocalClusters/NSAmastertables/' + clustername + '_NSAmastertable.fits'
        self.nsa = atpy.Table(infile)

        # read in WISE catalogs
        infile = homedir + 'research/LocalClusters/NSAmastertables/WISETables/' + clustername + '_WISE_NSA.fits'
        self.wise = atpy.Table(infile)

        # read in Galaxy Zoo catalogs
        infile = homedir + 'research/LocalClusters/NSAmastertables/GalaxyZooTables/' + clustername + '_GalaxyZoo.fits'
        self.zoo = atpy.Table(infile)
        #self.zooflag=self.zoo.zoo_match_flag | self.zoo.zoo_phot_match_flag

        # read in GIM2D catalogs
        infile = homedir + 'research/LocalClusters/NSAmastertables/SimardGIM2D/' + clustername + '_GIM2D.fits'
        self.gim2d = atpy.Table(infile)
        # fields with _1 are from bulge+disk; fields with _2 are from pure sersic fit

        infile = homedir + 'research/LocalClusters/NSAmastertables/Sex24Tables/' + clustername + '_sex24.fits'
        self.sex24 = atpy.Table(infile)

        infile = homedir + 'research/LocalClusters/NSAmastertables/AGCTables/' + clustername + '_AGC.fits'
        self.agc = atpy.Table(infile)

        sersicparam24_file = homedir + 'research/LocalClusters/NSAmastertables/GalfitSersicResults/' + self.prefix + '_GalfitSersicParam_24.fits'
        self.galfit24 = atpy.Table(sersicparam24_file)

        infile = homedir + 'research/LocalClusters/NSAmastertables/LocalDensityTables/' + clustername + '_localdensity.fits'
        self.ld = atpy.Table(infile)

        infile = homedir + 'research/LocalClusters/NSAmastertables/CharyElbazTables/' + clustername + '_ce_lir.fits'
        self.ce = atpy.Table(infile)
        self.snrse = abs(self.ce.FLUX24 / self.ce.FLUX24ERR)

        # read in John's Lir catalogs - for his members only
        infile = homedir + 'research/LocalClusters/NSAmastertables/MoustakasLir/' + self.john_prefix + '_lir.fits'
        self.lir = atpy.Table(infile, type='fits')

        self.memb_id = self.lir.NSAID

        # calculating magnitudes from fluxes provided from NSA
        #
        # m = 22.5 - 2.5 log_10 (flux_nanomaggies)
        # from http://www.sdss3.org/dr8/algorithms/magnitudes.php#nmgy
        self.nsamag = 22.5 - 2.5 * log10(self.n.NMGY)

        self.sdssLr = 10.**(-1 * (self.n.ABSMAG[:, 4] - SolarMag['r']) / 2.5)
        a, b = bellgr['r']
        self.stellarmass = 10.**(
            -1. * a + b *
            (self.n.ABSMAG[:, 3] - self.n.ABSMAG[:, 4])) * self.sdssLr

        self.sdssLu = 10.**(-1 * (self.n.ABSMAG[:, 2] - SolarMag['u']) / 2.5)

        self.sdssLg = 10.**(-1 * (self.n.ABSMAG[:, 3] - SolarMag['g']) / 2.5)

        self.sdssLi = 10.**(-1 * (self.n.ABSMAG[:, 5] - SolarMag['i']) / 2.5)

        self.sdssLz = 10.**(-1 * (self.n.ABSMAG[:, 6] - SolarMag['z']) / 2.5)

        self.AngDistanceCl = my.DA(self.cz, h)
        self.AngDistanceAll = zeros(len(self.n.ZDIST), 'f')
        for i in range(len(self.n.ZDIST)):
            self.AngDistanceAll[i] = my.DA(self.n.ZDIST[i], h)

    # FOR BACKWARDS COMPATABILITY WITH EXISTING CODE

    # data from AGC-based mastertables
        self.agcflag = self.agc.AGCMATCHFLAG
        self.HIflag = (self.agc.FLUX100 > 0)
        self.sdssflag = self.n.SDSSflag
        self.sdssphotflag = self.n.SDSSphotflag
        self.mpaflag = self.n.MPAFLAG
        self.apexflag = self.n.APEXflag
        self.sexsdssflag = self.n.SEXSDSSflag
        self.sex24flag = self.n.SEX24FLAG
        self.agcvoptflag = (self.agc.VOPT > 0)

        self.agcnumber = self.agc.AGCNUMBER
        self.raagc = self.agc.RA
        self.decagc = self.agc.DEC
        self.a100 = self.agc.A100
        self.b100 = self.agc.B100
        self.mag10 = self.agc.MAG10
        self.posang = self.agc.POSANG
        self.bsteintype = self.agc.BSTEINTYPE
        self.vopt = self.agc.VOPT
        self.verr = self.agc.VERR
        self.vsource = self.agc.VSOURCE
        self.flux100 = self.agc.FLUX100
        self.rms100 = self.agc.RMS100
        self.v21 = self.agc.V21
        self.width = self.agc.WIDTH
        self.widtherr = self.agc.WIDTHERR
        #sdss info
        self.sdssra = self.n.SDSSRA
        self.sdssdec = self.n.SDSSDEC
        self.sdssphotra = self.n.SDSSphotRA
        self.sdssphotdec = self.n.SDSSphotDEC

        self.sdssmag = self.n.SDSSMAG
        self.sdssu = self.sdssmag[:, 0]
        self.sdssg = self.sdssmag[:, 1]
        self.sdssr = self.sdssmag[:, 2]
        self.sdssi = self.sdssmag[:, 3]
        self.sdssz = self.sdssmag[:, 4]
        self.sdssmagerr = self.n.SDSSMAGERR
        self.sdssuerr = self.sdssmagerr[:, 0]
        self.sdssgerr = self.sdssmagerr[:, 1]
        self.sdssrerr = self.sdssmagerr[:, 2]
        self.sdssierr = self.sdssmagerr[:, 3]
        self.sdsszerr = self.sdssmagerr[:, 4]

        self.sdssspecz = self.n.SDSSSPECZ
        self.sdssvopt = self.n.SDSSVOPT
        self.sdsshaew = self.n.SDSSHAEW
        self.sdsshaewerr = self.n.SDSSHAEWERR
        self.sdssplate = self.n.SDSSPLATE
        self.sdssfiberid = self.n.SDSSFIBERID
        self.sdsstile = self.n.SDSSTILE
        self.sdssrun = self.n.SDSSRUN
        self.sdssrerun = self.n.SDSSRERUN
        self.sdsscamcol = self.n.SDSSCAMCOL
        self.sdssfield = self.n.SDSSFIELD
        self.mpahalpha = self.n.MPAHALPHA
        self.mpahbeta = self.n.MPAHBETA
        self.mpao3 = self.n.MPAOIII
        self.mpan2 = self.n.MPANII
        #sextractor info
        self.numberser = self.n.NUMBERSER
        self.ximageser = self.n.XIMAGESER
        self.yimageser = self.n.YIMAGESER
        self.xminimageser = self.n.XMINIMAGESER
        self.xmaximageser = self.n.XMAXIMAGESER
        self.yminimageser = self.n.YMINIMAGESER
        self.raser = self.n.RASER
        self.decser = self.n.DECSER
        self.fluxisoser = self.n.FLUXISOSER
        self.fluxerrisoser = self.n.FLUXERRISOSER
        self.magisoser = self.n.MAGISOSER
        self.magerrisoser = self.n.MAGERRISOSER
        self.fluxautoser = self.n.FLUXAUTOSER
        self.fluxerrautoser = self.n.FLUXERRAUTOSER
        self.magautoser = self.n.MAGAUTOSER
        self.magerrautoser = self.n.MAGERRAUTOSER
        self.fluxpetroser = self.n.FLUXPETROSER
        self.fluxerrpetroser = self.n.FLUXERRPETROSER
        self.magpetroser = self.n.MAGPETROSER
        self.magerrpetroser = self.n.MAGERRPETROSER
        self.kronradser = self.n.KRONRADSER  #kron radius
        self.petroradser = self.n.PETRORADSER  #petrosian radius
        self.fluxradser = self.n.FLUXRADSER  #1/2 light radius
        self.isoareaser = self.n.ISOAREASER
        self.aworldser = self.n.AWORLDSER
        self.bworldser = self.n.BWORLDSER
        self.thetaser = self.n.THETASER
        self.errthetaser = self.n.ERRTHETASER
        self.thetaj2000ser = self.n.THETAJ2000SER
        self.errthetaj2000ser = self.n.ERRTHETAJ2000SER
        self.elongser = self.n.ELONGATIONSER
        self.elliptser = self.n.ELLIPTICITYSER
        self.fwhmser = self.n.FWHMSER
        self.flagsser = self.n.FLAGSSER
        self.classstarser = self.n.CLASSSTARSER
        #SEXTRACTOR  output 24 micron data
        self.numberse24 = self.n.NUMBERSE24
        self.ximagese24 = self.n.XIMAGESE24
        self.yimagese24 = self.n.YIMAGESE24
        self.xminimagese24 = self.n.XMINIMAGESE24
        self.xmaximagese24 = self.n.XMAXIMAGESE24
        self.xminimagese24 = self.n.YMINIMAGESE24
        self.rase24 = self.n.RASE24
        self.decse24 = self.n.DECSE24
        self.fluxisose24 = self.n.FLUXISOSE24
        self.fluxerrisose24 = self.n.FLUXERRISOSE24
        self.magisose24 = self.n.MAGISOSE24
        self.magerrisose24 = self.n.MAGERRISOSE24
        self.fluxautose24 = self.n.FLUXAUTOSE24
        self.fluxerrautose24 = self.n.FLUXERRAUTOSE24
        self.magautose24 = self.n.MAGAUTOSE24
        self.magerrautose24 = self.n.MAGERRAUTOSE24
        self.fluxpetrose24 = self.n.FLUXPETROSE24
        self.fluxerrpetrose24 = self.n.FLUXERRPETROSE24
        self.magpetrose24 = self.n.MAGPETROSE24
        self.magerrpetrose24 = self.n.MAGERRPETROSE24
        self.kronradse24 = self.n.KRONRADSE24
        self.petroradse24 = self.n.PETRORADSE24
        self.fluxradse24 = self.n.FLUXRADSE24
        self.isoarease24 = self.n.ISOAREASE24
        self.aworldse24 = self.n.AWORLDSE24
        self.bworldse24 = self.n.BWORLDSE24
        self.thetase24 = self.n.THETASE24
        self.errthetase24 = self.n.ERRTHETASE24
        self.thetaj2000se24 = self.n.THETAJ2000SE24
        self.errthetaj2000se24 = self.n.ERRTHETAJ2000SE24
        self.elongse24 = self.n.ELONGATIONSE24
        self.elliptse24 = self.n.ELLIPTICITYSE24
        self.fwhmse24 = self.n.FWHMSE24
        self.flagsse24 = self.n.FLAGSSE24
        self.classstarse24 = self.n.CLASSSTARSE24
        self.f24dist = self.fluxautose24[self.sex24flag]
        #apex output
        self.mipsra = self.n.MIPSRA
        self.mipsdec = self.n.MIPSDEC
        self.mipsflux = self.n.MIPSFLUX
        self.mipsfluxerr = self.n.MIPSFLUXERR
        self.mipssnr = self.n.MIPSSNR
        self.mipsdeblend = self.n.MIPSDEBLEND
        self.mipsfluxap1 = self.n.MIPSFLUXAP1
        self.mipsfluxap1err = self.n.MIPSFLUXAP1ERR
        self.mipsfluxap2 = self.n.MIPSFLUXAP2
        self.mipsfluxap2err = self.n.MIPSFLUXAP2ERR
        self.mipsfluxap3 = self.n.MIPSFLUXAP3
        self.mipsfluxap4err = self.n.MIPSFLUXAP3ERR

        self.On24ImageFlag_AGC = self.n.On24ImageFlag_2
        self.On24ImageFlag = self.n.On24ImageFlag_1
        self.supervopt = self.n.SUPERVOPT
        self.ra = self.n.RA
        self.dec = self.n.DEC

        #self.stellarmass=self.n.STELLARMASS
        #self.stellarmass_cl=self.n.STELLARMASS_CL

        self.sdssabsmag = self.n.SDSSABSMAG
        self.sdssMu = self.sdssabsmag[:, 0]
        self.sdssMg = self.sdssabsmag[:, 1]
        self.sdssMr = self.sdssabsmag[:, 2]
        self.sdssMi = self.sdssabsmag[:, 3]
        self.sdssMz = self.sdssabsmag[:, 4]

        self.sdsslum = self.n.SDSSLUM
        self.sdssLu = self.sdsslum[:, 0]
        self.sdssLg = self.sdsslum[:, 1]
        self.sdssLr = self.sdsslum[:, 2]
        self.sdssLi = self.sdsslum[:, 3]
        self.sdssLz = self.sdsslum[:, 4]

        self.sdssabsmag_cl = self.n.SDSSABSMAG_CL
        self.sdssMu = self.sdssabsmag_cl[:, 0]
        self.sdssMg = self.sdssabsmag_cl[:, 1]
        self.sdssMr = self.sdssabsmag_cl[:, 2]
        self.sdssMi = self.sdssabsmag_cl[:, 3]
        self.sdssMz = self.sdssabsmag_cl[:, 4]

        self.sdsslum_cl = self.n.SDSSLUM_CL
        self.sdssLu_cl = self.sdsslum_cl[:, 0]
        self.sdssLg_cl = self.sdsslum_cl[:, 1]
        self.sdssLr_cl = self.sdsslum_cl[:, 2]
        self.sdssLi_cl = self.sdsslum_cl[:, 3]
        self.sdssLz_cl = self.sdsslum_cl[:, 4]

        self.sdsscolc = self.n.SDSSCOLC
        self.sdssrowc = self.n.SDSSROWC

        self.membflag = self.n.MEMBFLAG
        self.morphflag = self.n.MORPHFLAG
        self.morph = self.n.MORPH
        self.disturb = self.n.DISTURB
        self.agn1 = self.n.AGNKAUFF
        self.agn2 = self.n.AGNKEWLEY
        self.agn3 = self.n.AGNSTASIN
        self.n2halpha = (self.mpan2 / self.mpahalpha)
        self.o3hbeta = (self.mpao3 / self.mpahbeta)
        self.logn2halpha = log10(self.mpan2 / self.mpahalpha)
        self.logo3hbeta = log10(self.mpao3 / self.mpahbeta)
        self.ellipseflag24 = self.n.ELLIPSEFLAG24
        self.ellipseflagsdss = self.n.ELLIPSEFLAGSDSS
        self.ellipseflag = self.n.ELLIPSEFLAG

        #new SDSS fields that quantify radial extent of galaxy
        self.sdssIsoAr = self.n.SDSSISOAR
        self.sdssIsoBr = self.n.SDSSISOBR
        self.sdssIsoPhir = self.n.SDSSISOPHIR
        self.sdssIsoPhirErr = self.n.SDSSISOPHIERRR
        self.sdssExpRadr = self.n.SDSSEXPRADR
        self.sdssExpABr = self.n.SDSSEXPABR
        self.sdssExpABrErr = self.n.SDSSEXPABRERR
        self.sdssExpPhir = self.n.SDSSEXPPHIR
        self.sdssExpPhirErr = self.n.SDSSEXPPHIERRR

        self.sdssPetroMag = self.n.SDSSPETROMAG
        self.sdssPetroMagr = self.sdssPetroMag[:, 2]

        self.sdssPetroRad = self.n.SDSSPETRORAD
        self.sdssPetroRadr = self.sdssPetroRad[:, 2]

        self.sdssPetroR50 = self.n.SDSSPETROR50
        self.sdssPetroR50r = self.sdssPetroR50[:, 2]

        self.sdssPetroR90 = self.n.SDSSPETROR90
        self.sdssPetroR90r = self.sdssPetroR90[:, 2]

        #de-redened magnitudes
        self.sdssdered = self.n.SDSSDERED
        self.sdssumag = self.sdssdered[:, 0]
        self.sdssgmag = self.sdssdered[:, 1]
        self.sdssrmag = self.sdssdered[:, 2]
        self.sdssimag = self.sdssdered[:, 3]
        self.sdsszmag = self.sdssdered[:, 4]

        conv = 4 * pi * (self.cdcm**
                         2) * 1.e-6 * 1.e-23 * (3.e8 / 24.e-6) / Lsol
        print 'conversion from F24 to L24 = ', conv
        self.L24_cl = array(
            self.sex24.FLUX_BEST * conv * mipsconv_MJysr_to_uJy, 'd')
        #self.L24_cl=array(t,'d')
        self.L24err_cl = self.sex24.FLUXERR_BEST * conv * mipsconv_MJysr_to_uJy
        self.Lir_cl = self.L24_cl * 8.  #approx conv from papovich
        self.Lirerr_cl = self.L24err_cl * 8.  #approx conv from papovich
        self.SFR24_cl = self.Lir_cl * 4.5e-44 * Lsol  #approx conv from papovich
        self.SFR24err_cl = self.Lirerr_cl * 4.5e-44 * Lsol  #approx conv from papovich

        #self.SFR24se_cl=(fluxautose24*141*conv)*8.*4.5e-44*Lsol#approx conv from papovich
        #self.SFR24seerr_cl=(fluxerrautose24*141*conv)*8.*4.5e-44*Lsol#approx conv from papovich
        #self.snr24se=abs(self.SFR24se_cl/self.SFR24seerr_cl)
        #self.superSFR24_cl=self.SFR24_cl*apexflag+self.SFR24se_cl*(~apexflag&sex24flag)
        #self.superSFR24err_cl=self.SFR24err_cl*apexflag+self.SFR24seerr_cl*(~apexflag&sex24flag)
        #self.sSFR_cl=self.SFR24_cl/self.stellarmassr_cl

        # other Lum and SFR
        self.HImass = self.n.HIMASS
        self.L24 = self.n.L24
        self.L24err = self.n.L24ERR
        self.Lir = self.n.LIR
        self.Lirerr = self.n.LIRERR
        self.SFR24 = self.n.SFR24
        self.SFR24err = self.n.SFR24ERR
        self.SuperSFR24 = self.n.SUPERSFR24
        self.SuperSFR24err = self.n.SUPERSFR24ERR

        self.HImass_cl = self.n.HIMASS_CL
        #self.L24_cl=self.n.L24_CL
        #self.L24err_cl=self.n.L24ERR_CL
        #self.Lir_cl=self.n.LIR_CL
        #self.Lirerr_cl=self.n.LIRERR_CL
        #self.SFR24_cl=self.n.SFR24_CL
        #self.SFR24err_cl=self.n.SFR24ERR_CL
        #self.SuperSFR24_cl=self.n.SUPERSFR24_CL
        #self.SuperSFR24err_cl=self.n.SUPERSFR24ERR_CL

        #define red, green and blue galaxies
        ur = self.n.ABSMAG[:, 2] - self.n.ABSMAG[:, 4]
        self.redflag = (ur > 2.3)
        self.greenflag = (ur > 1.8) & (ur < 2.3)
        self.blueflag = (ur < 1.8)
        #end of master table!
        #self.spiralFlag=self.On24ImageFlag & self.galzooflag & self.ellipseflag & (self.galzoopcsdebiased > 0.6)

        self.clustername = clustername
        self.clusterra = clusterRA[clustername]
        self.clusterdec = clusterDec[clustername]
        self.dr = sqrt((self.ra - self.clusterra)**2 +
                       (self.dec - self.clusterdec)**2)
        self.drR200 = self.dr / self.r200deg
        self.clustervel = clusterbiweightcenter[clustername]
        self.clustersigma = clusterbiweightscale[clustername]
        self.clustervmin = self.clustervel - 3. * self.clustersigma
        self.clustervmax = self.clustervel + 3. * self.clustersigma

        self.dist = sqrt((self.clusterra - self.ra)**2 +
                         (self.clusterdec - self.dec)**2)
        self.flagHI = (self.flux100 > 0.)
        self.vopt = self.n.Z * 3.e5

        self.dv = abs(self.vopt - self.biweightvel) / self.biweightscale

        #self.dvflag = ((self.vopt > self.clustervmin) & (self.vopt < self.clustervmax))
        self.dvflag = (self.dv < 3.)

        self.dist3d = sqrt(self.drR200**2 + (self.dv)**2)

        self.membflag = self.dvflag & (self.drR200 < 1)

        self.nmemb = len(self.dist[self.membflag & self.On24ImageFlag])
        self.nfield = len(self.dist[self.On24ImageFlag]) - self.nmemb

        self.agcdict = dict(
            (a, b)
            for a, b in zip(self.agcnumber, arange(len(self.agcnumber))))
        self.nsadict = dict(
            (a, b) for a, b in zip(self.n.NSAID, arange(len(self.n.NSAID))))

        self.spiralflag = (self.zoo.p_cs > 0.6)
        self.ellipticalflag = (self.zoo.p_el > 0.7)

        # set spiral flag for galaxies that are clearly spiral but have zoo.p_cs < .6
        slist = spiral_nozoo[self.prefix]
        for i in slist:
            self.spiralflag[self.nsadict[i]] = 1
        elist = elliptical_nozoo[self.prefix]
        for i in elist:
            self.ellipticalflag[self.nsadict[i]] = 1

        print self.clustername, ": ", "N members = ", self.nmemb, " N field = ", self.nfield
        #print ' N spirals = ',sum(self.spiralFlag),' Nspiral members = ',sum(self.spiralFlag&self.membflag)
        print ' N spirals on 24um image = ', sum(
            self.spiralflag & self.On24ImageFlag), ' Nspiral members = ', sum(
                self.spiralflag & self.membflag & self.On24ImageFlag)
        print ' N galaxies on 24um image = ', sum(
            self.On24ImageFlag), ' N members on 24um image = ', sum(
                self.membflag & self.On24ImageFlag)

        #self.L24=zeros(len(self.mipsflux),'d')
        #self.L24err=zeros(len(self.mipsflux),'d')

        # calculate HI deficiency using Toribio et al 2011 results
        # their relation is
        # log(M_HI/Msun) = 8.72 + 1.25 log(D_25,r/kpc)
        # and
        # log D_25 = log D_25(obs) + beta log(b/a), where beta = 0.35 in r-band
        # NOTE: SDSS isophotal radii are given in pixels!!!!
        a = self.sdssIsoAr
        b = self.sdssIsoBr
        # convert from arcsec to kpc with self.AngDistance (which is in units of kpc/arcsec)
        # multiply by 2 to convert from radius to diameter
        # multiply by sdss pixel scale (0.39) b/c isophotal radii are given in pixels
        self.D25obskpc = 2. * self.sdssIsoAr * sdsspixelscale * self.AngDistanceCl
        self.D25obskpcall = 2. * self.sdssIsoAr * sdsspixelscale * self.AngDistanceAll
        # apply correction from toribio et al 2011
        self.logD25kpc = log10(self.D25obskpc) + 0.35 * log10(b / a)
        self.logD25kpcall = log10(self.D25obskpcall) + 0.35 * log10(b / a)
        # use toribio et al relation to predict the expected HI mass, including factor of 2 correction
        self.HImassExpected = 10.**(8.72 + 1.25 * (self.logD25kpc - log10(2.)))
        self.HImassExpectedall = 10.**(8.72 + 1.25 *
                                       (self.logD25kpcall - log10(2.)))
        self.HImassExpFromMr = 10.**(6.44 - 0.18 * self.sdssMr)
        self.HImassExpFromgr = 10.**(8.84 + 1.81 *
                                     (self.sdssgmag - self.sdssrmag))
        # calculate deficiency as log expected - log observed
        self.HIDef = log10(self.HImassExpected) - log10(self.HImass)
        self.HIDef_zdist = log10(self.HImassExpectedall) - log10(self.HImass)
        self.myHIDef = log10(self.HImassExpected - self.HImass)

        # HI upper limit for clusters observed in alpha 40 sample (MKW11, A2052, A2063)
        # M(HI lim) = 2.36e5 * d^2 (W50 * 20)^(1/2) sigma_rms * S/N lim
        # W50 = W50,0 * sin(i)
        # cos^2(i) = ((b/a)^2 - q^2)/(1-q^2)
        # W50,0 = 100 km/s
        # sigma rms = 10 km/s
        # q = 0.32 for Sa
        # q = 0.23 for Sab
        # q = 0.18 for Sb-Sc  (from Gavazzi et al 2013)
        # assign upper limits for each galaxy based on its B/A
        W50 = 70.
        sigma_rms = 2.1e-3
        snlim = 6.5
        self.clHImass_ulim = 2.36e5 * (self.cdMpc)**2 * sqrt(
            W50 * 20.) * sigma_rms * snlim
        self.HIDef_ulim = log10(self.HImassExpected) - log10(
            self.clHImass_ulim)

        #self.agnflag=self.agn1#use Kauffmann et al 2003 cut
        self.agnflag = self.agn2  #use Kewley
        self.irflag = self.apexflag & self.membflag
        #set flag fot galaxies with dv < 3 sigma

        writesdssradec = 0
        if writesdssradec:
            # extra function for writing out RA and Dec to upload into SDSS query page
            # http://skyserver.sdss3.org/dr9/en/tools/search/IQS.asp
            offset = 30. / 60.
            outfile = homedir + 'research/LocalClusters/NSAmastertables/RADecfiles/' + self.prefix + '_RADEC.csv'
            out1 = open(outfile, 'w')
            out1.write('ra, dec, sep \n')
            for i in range(len(self.n.RA)):
                out1.write('%12.8f, %12.8f, %12.8f \n' %
                           (self.n.RA[i], self.n.DEC[i], offset))
            out1.close

    # calculate the angle between major axis and ellipse center
    # call is clusterphi (see page in ResearchNotes.nb entitles 'Angle between galaxy's major axis and cluster center')
    # in notes I call the angle psi, but a little too painful for a variable
    # if cluster_phi = 90 - galaxy falling face-on into cluster
    # if cluster_phi = 0  - galaxy falling edge-on into cluster
        self.delta_dec = self.dec - self.cdec
        self.delta_ra = self.ra - self.cra
        r = sqrt(self.delta_dec**2 + self.delta_ra**2)
        self.theta = arctan(
            abs(self.delta_dec) / abs(self.delta_ra)) * 180. / pi
        self.cluster_phi = zeros(len(self.ra), 'f')
        #for i in range(len(self.ra)):
        #    if (self.delta_dec[i]*self.delta_ra[i] > 1.):
        #        self.cluster_phi[i] = abs(90.- self.n.SERSIC_PHI[i] + self.theta[i])
        #    else:
        #        self.cluster_phi[i] = abs(self.n.SERSIC_PHI[i] - 90. + self.theta[i])
        phi = self.n.SERSIC_PHI / 180. * pi  # in radians
        theta = self.theta / 180. * pi
        self.cluster_phi = arccos(
            abs(sin(phi) * -1. * cos(theta) +
                cos(phi) * sin(theta))) * 180. / pi

        self.readsnr24NSA()

        self.snr24flag = self.snr24 > 1.5

        # define a blue flag based on NUV-r vs mass plot

        color = self.n.ABSMAG[:, 1] - self.n.ABSMAG[:, 4]
        self.NUVr_color = self.n.ABSMAG[:, 1] - self.n.ABSMAG[:, 4]
        mag = log10(self.stellarmass)

        self.blueflag = color < (.6 * (mag - 9) + 3.3)

        # define a blue flag based on NUV-r vs Mr plot
        mag = self.n.ABSMAG[:, 4]

        #yb=1.73-0.17*xl-2.
        self.blueflag = color < (1.73 - 0.17 * mag - 2.)
        self.redflag = color > (1.73 - 0.17 * mag - .5)
        self.greenflag = (color > (1.73 - 0.17 * mag - 2.)) & (
            color < (1.73 - 0.17 * mag - .5))

        # 80% completeness
        self.f80 = clusterf80MJysr[
            self.prefix] * mipsconv_MJysr_to_uJy  # in micro Jy
        print self.biweightvel / 3.e5, self.f80
        self.Lir80, self.SFRir80 = chary.chary_elbaz_24um(
            array([self.biweightvel / 3.e5], 'f'), array([self.f80], 'f'))

        #
        best_distance = self.membflag * self.cdMpc + ~self.membflag * (
            self.n.ZDIST * 3.e5 / H0)
        self.M24 = self.sex24.MAG_BEST - 25 - 5. * log10(best_distance)
        self.M24zdist = self.sex24.MAG_BEST - 25 - 5. * log10(
            self.n.ZDIST * 3.e5 / H0)
#!/usr/bin/env python
import pyfits
from LCScommon import *
from pylab import *
import os, atpy
import mystuff as my

import chary_elbaz_24um as chary

mingalaxysize_kpc = my.DA(clusterbiweightcenter['Hercules'] / 3.e5,
                          h) * mingalaxysize


class baseClusterNSA:
    def __init__(self, clustername):
        #Get current path so program can tell if this is being run on Becky or Rose's computer
        self.prefix = clustername
        self.john_prefix = john_prefix[self.prefix]
        self.cra = clusterRA[self.prefix]
        self.cdec = clusterDec[self.prefix]
        self.cz = clusterz[self.prefix]
        self.biweightvel = clusterbiweightcenter[self.prefix]
        self.biweightscale = clusterbiweightscale[self.prefix]
        self.r200 = 2.02 * (self.biweightscale) / 1000. / sqrt(
            OmegaL + OmegaM * (1. + self.cz)**3) * H0 / 70.  # in Mpc
        self.r200deg = self.r200 * 1000. / my.DA(self.biweightvel / 3.e5,
                                                 h) / 3600.

        self.cdMpc = self.biweightvel / H0
        self.cdcm = self.cdMpc * 3.e24
        self.csigma = self.biweightscale
Example #13
0
    def getobsmemberids(self):  #get galaxies within nr*dr and nv*dv
        #print "within getobsmemberids(), nv,nr,len(x1) = ",nv,nr,len(g.x1)
        #print "within measurecontam(), nv,nr,len(x1) = ",nv,nr,len(g.x1),len(self.mass)
        #print self.mass
        self.obsmembids = N.zeros(len(self.x1), 'd')
        self.obsmembflag = N.ones(len(self.x1), 'd')
        self.obsmembids = list(self.obsmembids)
        self.obsdr = N.zeros(len(self.x1), 'd')
        self.obsdr = list(self.obsdr)
        self.obsdv = N.zeros(len(self.x1), 'd')
        self.obsdv = list(self.obsdv)
        self.obsmembincut = N.zeros(len(self.x1), 'd')
        nomemb = 0.
        vbox = my.vofz(
            zbox)  #redshift of box center given epoch of observation
        #i.e. recession velocity corresponding to z=0.2, 0.4, 0.6, etc of GIF observations
        for i in range(len(self.x1)):
            #self.obsmembids[i]=[]
            vcl = H0 * self.x3[i]
            deltar = nr * self.r200[i]  #tolerance for matching
            deltav = nv * self.sigma[i]  #tolerance for matching
            #print i,"cluster id, mass, r200, sigma = ",self.id[i],self.mass[i],self.r200[i],self.sigma[i],Mclmin
            temp = []
            #put cluster in middle of box
            x1 = g.x1 - self.x1[i] + 0.5 * simL
            #flip coordinates so galaxy x1 ranges from 0 to simL
            for j in range(len(x1)):
                if x1[j] > simL:
                    x1[j] = x1[j] - simL
                if x1[j] < 0:
                    x1[j] = x1[j] + simL
            x2 = g.x2 - self.x2[i] + 0.5 * simL
            for j in range(len(x2)):
                if x2[j] > simL:
                    x2[j] = x2[j] - simL
                if x2[j] < 0:
                    x2[j] = x2[j] + simL
            x3 = g.x3 - self.x3[i] + 0.5 * simL
            for j in range(len(x3)):
                if x3[j] > simL:
                    x3[j] = x3[j] - simL
                if x3[j] < 0:
                    x3[j] = x3[j] + simL
            gvobs = x3 * H0 + g.v3
            gvobs = my.relsumv(vbox, gvobs)
            gz = my.zofv(gvobs)
            (x1sort, x1index) = my.sortwindex(x1)
            (x2sort, x2index) = my.sortwindex(x2)
            (temp, matchflag1) = my.findmatch(0.5 * simL, x1sort, deltar)
            if (matchflag1 > 0):
                templist1 = []
                for j in range(len(temp)):
                    templist1.append(x1index[temp[j]])
            temp = []
            (temp, matchflag2) = my.findmatch(0.5 * simL, x2sort, deltar)
            if (matchflag2 > 0):
                templist2 = []
                for j in range(len(temp)):
                    templist2.append(x2index[temp[j]])
            if (matchflag1 + matchflag2) < 2.:
                nomemb = nomemb + 1.
                self.obsmembflag[i] = 0.
                print "no observed members in cluster ", i
                continue
            a = sets.Set(templist1)
            b = sets.Set(templist2)
            members = a & b
            members = list(members)

            #templist1=N.argsort(templist1)
            #templist2=N.argsort(templist2)
            subset = []
            odv = []
            odr = []

            ccvobs = my.relsumv(vbox, 0.5 * simL * H0)
            ccz = my.zofv(ccvobs)
            cdtheta = self.r200[i] / my.DA(ccz, h)
            ccx1 = 0.5 * simL
            ccx2 = 0.5 * simL
            for k in members:
                dr = (N.sqrt((x1[k] - ccx1)**2 +
                             (x2[k] - ccx2)**2)) / self.r200[i]
                if dr < nr:
                    dv = (gvobs[k] - ccvobs) / (1 - gvobs[k] * ccvobs /
                                                (9.e10)) / self.sigma[i]
                    if abs(dv) <= nv:  #deltav:
                        gdtheta = dr * self.r200[i] / my.DA(gz[k], h)
                        if gdtheta <= cdtheta:  #make sure galaxy is in cone field-of-view
                            subset.append(k)
                            odv.append(dv)
                            odr.append(dr)
            self.obsmembids[i] = subset
            self.obsdr[i] = odr
            self.obsdv[i] = odv
            self.obsmembincut[i] = len(subset)
            if self.obsmembincut[i] < 1.:
                nomemb = nomemb + 1.
                self.obsmembflag[i] = 0.
        print nomemb, " clusters with no observed members", nomemb / len(
            self.x1)
    def __init__(self, prefix):
        self.prefix = prefix
        self.fullname = fullname[self.prefix]
        self.cra = racenter[self.prefix]
        self.cdec = deccenter[self.prefix]
        self.cz = redshift[self.prefix]
        self.f80 = F80[self.prefix]
        self.errf80 = ErrorF80[self.prefix]
        self.csigma = sigma[self.prefix]
        self.csigmaerrplus = errsigmaplus[self.prefix]
        self.csigmaerrminus = errsigmaminus[self.prefix]
        self.r200 = 2.02 * (
            self.csigma) / 1000. / sqrt(OmegaL + OmegaM *
                                        (1. + self.cz)**3) * H0 / 70.  # in Mpc
        if self.r200 < .5:
            print 'WARNING:  R200 unrealistically small for ', self.prefix
            print 'resetting R200 to 0.5 Mpc'
            self.r200 = .5
        self.r200deg = self.r200 * 1000. / my.DA(self.cz, h) / 3600.
        self.mcl = my.clusterMass(self.csigma, self.cz, h)

        mastertable = mastertablepath + self.fullname + 'mastertable.fits'
        tb = pyfits.open(mastertable)
        tbdata = tb[1].data
        tb.close()

        self.ediscsID = tbdata.field('EDISCS-ID')
        self.ediscsIDold = tbdata.field('EDISCS-ID-OLD')
        self.ra = tbdata.field('RA')
        self.dec = tbdata.field('DEC')
        self.xcorr = tbdata.field('xcorr')
        self.ycorr = tbdata.field('ycorr')
        self.starflag = tbdata.field('starflag')
        self.EW = tbdata.field('EW')
        self.EWerr = tbdata.field('EWerr')
        self.SFR = tbdata.field('SFR')
        self.SFRerr = tbdata.field('SFRerr')
        self.matchflaghalpha = tbdata.field('matchflaghalpha')
        self.onHaimageflag = tbdata.field('onHaimageflag')
        self.sfflag = tbdata.field('sfflag')
        self.matchflag24 = tbdata.field('matchflag24')
        self.on24imageflag = tbdata.field('on24imageflag')
        self.flux24 = tbdata.field('flux24')
        self.flux24err = tbdata.field('flux24err')
        self.nmatchediscs24 = tbdata.field('nmatchediscs24')
        self.snr24 = tbdata.field('snr24')
        self.imagex24 = tbdata.field('imagex24')
        self.imagey24 = tbdata.field('imagey24')
        self.ra24 = tbdata.field('ra24')
        self.dec24 = tbdata.field('dec24')
        self.flux80flag = tbdata.field('flux80flag')
        self.L24 = tbdata.field('L24')
        self.L24err = tbdata.field('L24err')
        self.Lir = tbdata.field('Lir')
        self.errLir = tbdata.field('errLir')
        self.SFRir = tbdata.field('SFRir')
        self.SFRirerr = tbdata.field('SFRirerr')
        self.matchflagediscsirac = tbdata.field('matchflagediscsirac')
        self.iracf1 = tbdata.field('iracf1')
        self.iracf2 = tbdata.field('iracf2')
        self.iracf3 = tbdata.field('iracf3')
        self.iracf4 = tbdata.field('iracf4')
        self.erriracf1 = tbdata.field('erriracf1')
        self.erriracf2 = tbdata.field('erriracf2')
        self.erriracf3 = tbdata.field('erriracf3')
        self.erriracf4 = tbdata.field('erriracf4')
        self.iracsexflag0 = tbdata.field('iracsexflag0')
        self.iracsexflag1 = tbdata.field('iracsexflag1')
        self.iracwch1 = tbdata.field('iracwch1')
        self.iracwch2 = tbdata.field('iracwch2')
        self.iracwch3 = tbdata.field('iracwch3')
        self.iracwch4 = tbdata.field('iracwch4')
        self.iracwmin = tbdata.field('iracwmin')
        self.nmatchediscsirac = tbdata.field('nmatchediscsirac')
        self.matchflagmorphgimtype = tbdata.field('matchflagmorphgimtype')
        self.gimtype = tbdata.field('gimtype')
        self.matchflagvistype = tbdata.field('matchflagvistype')
        self.vistype = tbdata.field('vistype')
        self.misoV = tbdata.field('misoV')
        self.misoeVapsim = tbdata.field('misoeVapsim')
        self.misoR = tbdata.field('misoR')
        self.misoeRapsim = tbdata.field('misoeRapsim')
        self.misoI = tbdata.field('misoI')
        self.misoeIapsim = tbdata.field('misoeIapsim')
        self.misoJ = tbdata.field('misoJ')
        self.misoeJapsim = tbdata.field('misoeJapsim')
        self.misoK = tbdata.field('misoK')
        self.misoeKapsim = tbdata.field('misoeKapsim')
        self.magV = tbdata.field('magV')
        self.mageVapsim = tbdata.field('mageVapsim')
        self.magR = tbdata.field('magR')
        self.mageRapsim = tbdata.field('mageRapsim')
        self.magI = tbdata.field('magI')
        self.mageIapsim = tbdata.field('mageIapsim')
        self.magJ = tbdata.field('magJ')
        self.mageJapsim = tbdata.field('mageJapsim')
        self.magK = tbdata.field('magK')
        self.mageKapsim = tbdata.field('mageKapsim')
        self.membflag = tbdata.field('membflag')
        self.newspecmatchflag = tbdata.field('newspecmatchflag')
        self.defmembflag = tbdata.field('defmembflag')
        self.photmembflag = tbdata.field('photmembflag')
        self.supermembflag = tbdata.field('supermembflag')
        self.specz = tbdata.field('specz')
        self.spectype = tbdata.field('spectype')
        self.specEWOII = tbdata.field('specEWOII')
        self.matchflagspecediscs = tbdata.field('matchflagspecediscs')
        self.specEWOIIflag = tbdata.field('specEWOIIflag')
        self.bestz = tbdata.field('bestz')
        self.lowz = tbdata.field('lowz')
        self.highz = tbdata.field('highz')
        self.wmin = tbdata.field('wmin')
        self.Pclust = tbdata.field('Pclust')
        self.MR = tbdata.field('MR')
        self.MU = tbdata.field('MU')
        self.MV = tbdata.field('MV')
        self.MB = tbdata.field('MB')
        self.stellarmass = tbdata.field('stellmass')
        self.redflag = tbdata.field('redflag')
        self.LUlowzclust = tbdata.field('LUlowzclust')
        self.LUbestzclust = tbdata.field('LUbestzclust')
        self.LUhighzclust = tbdata.field('LUhighzclust')
        self.LBlowzclust = tbdata.field('LBlowzclust')
        self.LBbestzclust = tbdata.field('LBbestzclust')
        self.LBhighzclust = tbdata.field('LBhighzclust')
        self.LVlowzclust = tbdata.field('LVlowzclust ')
        self.LVbestzclust = tbdata.field('LVbestzclust')
        self.LVhighzclust = tbdata.field('LVhighzclust')
        self.LRlowzclust = tbdata.field('LRlowzclust')
        self.LRbestzclust = tbdata.field('LRbestzclust')
        self.LRhighzclust = tbdata.field('LRhighzclust')
        self.LIlowzclust = tbdata.field('LIlowzclust')
        self.LIbestzclust = tbdata.field('LIbestzclust')
        self.LIhighzclust = tbdata.field('LIhighzclust')
        self.LJlowzclust = tbdata.field('LJlowzclust')
        self.LJbestzclust = tbdata.field('LJbestzclust')
        self.LJhighzclust = tbdata.field('LJhighzclust')
        self.LKlowzclust = tbdata.field('LKlowzclust')
        self.LKbestzclust = tbdata.field('LKbestzclust')
        self.LKhighzclust = tbdata.field('LKhighzclust')

        # some extra quantities that are not included in the mastertable
        dr = sqrt((self.ra - self.cra)**2 + (self.dec - self.cdec)**2)
        self.drflag = (dr < self.r200deg)
Example #15
0
    def __init__(self,clustername):
#Get current path so program can tell if this is being run on Becky or Rose's computer
	self.prefix=clustername
        self.cra=clusterRA[self.prefix]
        self.cdec=clusterDec[self.prefix]
        self.cz=clusterz[self.prefix]
	self.biweightvel=clustercbi[self.prefix]
	self.biweightscale=clustersbi[self.prefix]
	self.r200=2.02*(self.biweightscale)/1000./sqrt(OmegaL+OmegaM*(1.+self.cz)**3)*H0/70. # in Mpc
        self.r200deg=self.r200*1000./my.DA(self.cz,h)/3600.

        self.cdMpc=self.biweightvel/H0
        self.cdcm=self.cdMpc*3.e24
        self.csigma=self.biweightscale
        self.mcl=my.clusterMass(self.csigma,self.cz,h)
        self.AngDistance=my.DA(self.cz,h)
        mypath=os.getcwd()
        if mypath.find('Users') > -1:
            print "Running on Rose's mac pro"
            infile='/Users/rfinn/research/LocalClusters/MasterTables/'+clustername+'mastertable.fits'
            homedir='/Users/rfinn/'
        elif mypath.find('home') > -1:
            print "Running on coma"
            infile='/home/rfinn/research/LocalClusters/MasterTables/'+clustername+'mastertable.fits'
            homedir='/home/rfinn/'
        self.cutoutpath=homedir+'research/LocalClusters/cutouts/'+self.prefix+'/'
        #infile='/home/rfinn/LocalClusters/MasterTables/'+clustername+'mastertable.fits'
        tb=pyfits.open(infile)
        tbdata=tb[1].data
        tb.close()
        self.agcflag=tbdata.field('AGCflag')
        self.HIflag=tbdata.field('HIFLAG')
        self.sdssflag=tbdata.field('SDSSflag')
        self.sdssphotflag=tbdata.field('SDSSphotflag')
        self.mpaflag=tbdata.field('MPAFLAG')
        self.apexflag=tbdata.field('APEXFLAG')
        self.sexsdssflag=tbdata.field('SEXSDSSflag')
        self.sex24flag=tbdata.field('SEX24FLAG')
        self.agcvoptflag=tbdata.field('AGCVOPTFLAG')

        self.agcnumber=tbdata.field('AGCNUMBER')
        self.raagc=tbdata.field('AGCRA')
        self.decagc=tbdata.field('AGCDEC')
        self.a100=tbdata.field('A100')
        self.b100=tbdata.field('B100')
        self.mag10=tbdata.field('MAG10')
        self.posang=tbdata.field('POSANG')
        self.bsteintype=tbdata.field('BSTEINTYPE')
        self.vopt=tbdata.field('VOPT')
        self.verr=tbdata.field('VERR')
        self.vsource=tbdata.field('VSOURCE')
        self.flux100=tbdata.field('FLUX100')
        self.rms100=tbdata.field('RMS100')
        self.v21=tbdata.field('V21')
        self.width=tbdata.field('WIDTH')
        self.widtherr=tbdata.field('WIDTHERR')
        #sdss info
        self.sdssra=tbdata.field('SDSSRA')
        self.sdssdec=tbdata.field('SDSSDEC')
        self.sdssphotra=tbdata.field('SDSSphotRA')
        self.sdssphotdec=tbdata.field('SDSSphotDEC')

        self.sdssmag=tbdata.field('SDSSMAG')
        self.sdssu=self.sdssmag[:,0]
        self.sdssg=self.sdssmag[:,1]
        self.sdssr=self.sdssmag[:,2]
        self.sdssi=self.sdssmag[:,3]
        self.sdssz=self.sdssmag[:,4]
        self.sdssmagerr=tbdata.field('SDSSMAGERR')
        self.sdssuerr=self.sdssmagerr[:,0]
        self.sdssgerr=self.sdssmagerr[:,1]
        self.sdssrerr=self.sdssmagerr[:,2]
        self.sdssierr=self.sdssmagerr[:,3]
        self.sdsszerr=self.sdssmagerr[:,4]

        
                
        self.sdssspecz=tbdata.field('SDSSSPECZ')
        self.sdssvopt=tbdata.field('SDSSVOPT')
        self.sdsshaew=tbdata.field('SDSSHAEW')
        self.sdsshaewerr=tbdata.field('SDSSHAEWERR')
        self.sdssplate=tbdata.field('SDSSPLATE')
        self.sdssfiberid=tbdata.field('SDSSFIBERID')
        self.sdsstile=tbdata.field('SDSSTILE')
        self.sdssrun=tbdata.field('SDSSRUN')
        self.sdssrerun=tbdata.field('SDSSRERUN')
        self.sdsscamcol=tbdata.field('SDSSCAMCOL')
        self.sdssfield=tbdata.field('SDSSFIELD')
        self.mpahalpha=tbdata.field('MPAHALPHA')
        self.mpahbeta=tbdata.field('MPAHBETA')
        self.mpao3=tbdata.field('MPAOIII')
        self.mpan2=tbdata.field('MPANII')
        #sextractor info
        self.numberser=tbdata.field('NUMBERSER')
        self.ximageser=tbdata.field('XIMAGESER')
        self.yimageser=tbdata.field('YIMAGESER')
        self.xminimageser=tbdata.field('XMINIMAGESER')
        self.xmaximageser=tbdata.field('XMAXIMAGESER')
        self.yminimageser=tbdata.field('YMINIMAGESER')
        self.raser=tbdata.field('RASER')
        self.decser=tbdata.field('DECSER')
        self.fluxisoser=tbdata.field('FLUXISOSER')
        self.fluxerrisoser=tbdata.field('FLUXERRISOSER')
        self.magisoser=tbdata.field('MAGISOSER')
        self.magerrisoser=tbdata.field('MAGERRISOSER')
        self.fluxautoser=tbdata.field('FLUXAUTOSER')
        self.fluxerrautoser=tbdata.field('FLUXERRAUTOSER')
        self.magautoser=tbdata.field('MAGAUTOSER')
        self.magerrautoser=tbdata.field('MAGERRAUTOSER')
        self.fluxpetroser=tbdata.field('FLUXPETROSER')
        self.fluxerrpetroser=tbdata.field('FLUXERRPETROSER')
        self.magpetroser=tbdata.field('MAGPETROSER')
        self.magerrpetroser=tbdata.field('MAGERRPETROSER')
        self.kronradser=tbdata.field('KRONRADSER')#kron radius
        self.petroradser=tbdata.field('PETRORADSER')#petrosian radius
        self.fluxradser=tbdata.field('FLUXRADSER')#1/2 light radius
        self.isoareaser=tbdata.field('ISOAREASER')
        self.aworldser=tbdata.field('AWORLDSER')
        self.bworldser=tbdata.field('BWORLDSER')
        self.thetaser=tbdata.field('THETASER')
        self.errthetaser=tbdata.field('ERRTHETASER')
        self.thetaj2000ser=tbdata.field('THETAJ2000SER')
        self.errthetaj2000ser=tbdata.field('ERRTHETAJ2000SER')
        self.elongser=tbdata.field('ELONGATIONSER')
        self.elliptser=tbdata.field('ELLIPTICITYSER')
        self.fwhmser=tbdata.field('FWHMSER')
        self.flagsser=tbdata.field('FLAGSSER')
        self.classstarser=tbdata.field('CLASSSTARSER')
        #SEXTRACTOR  output 24 micron data
        self.numberse24=tbdata.field('NUMBERSE24')
        self.ximagese24=tbdata.field('XIMAGESE24')
        self.yimagese24=tbdata.field('YIMAGESE24')
        self.xminimagese24=tbdata.field('XMINIMAGESE24')
        self.xmaximagese24=tbdata.field('XMAXIMAGESE24')
        self.xminimagese24=tbdata.field('YMINIMAGESE24')
        self.rase24=tbdata.field('RASE24')
        self.decse24=tbdata.field('DECSE24')
        self.fluxisose24=tbdata.field('FLUXISOSE24')
        self.fluxerrisose24=tbdata.field('FLUXERRISOSE24')
        self.magisose24=tbdata.field('MAGISOSE24')
        self.magerrisose24=tbdata.field('MAGERRISOSE24')
        self.fluxautose24=tbdata.field('FLUXAUTOSE24')
        self.fluxerrautose24=tbdata.field('FLUXERRAUTOSE24')
        self.magautose24=tbdata.field('MAGAUTOSE24')
        self.magerrautose24=tbdata.field('MAGERRAUTOSE24')
        self.fluxpetrose24=tbdata.field('FLUXPETROSE24')
        self.fluxerrpetrose24=tbdata.field('FLUXERRPETROSE24')
        self.magpetrose24=tbdata.field('MAGPETROSE24')
        self.magerrpetrose24=tbdata.field('MAGERRPETROSE24')
        self.kronradse24=tbdata.field('KRONRADSE24')
        self.petroradse24=tbdata.field('PETRORADSE24')
        self.fluxradse24=tbdata.field('FLUXRADSE24')
        self.isoarease24=tbdata.field('ISOAREASE24')
        self.aworldse24=tbdata.field('AWORLDSE24')
        self.bworldse24=tbdata.field('BWORLDSE24')
        self.thetase24=tbdata.field('THETASE24')
        self.errthetase24=tbdata.field('ERRTHETASE24')
        self.thetaj2000se24=tbdata.field('THETAJ2000SE24')
        self.errthetaj2000se24=tbdata.field('ERRTHETAJ2000SE24')
        self.elongse24=tbdata.field('ELONGATIONSE24')
        self.elliptse24=tbdata.field('ELLIPTICITYSE24')
        self.fwhmse24=tbdata.field('FWHMSE24')
        self.flagsse24=tbdata.field('FLAGSSE24')
        self.classstarse24=tbdata.field('CLASSSTARSE24')
        self.f24dist=self.fluxautose24[self.sex24flag]
        #apex output
        self.mipsra=tbdata.field('MIPSRA')
        self.mipsdec=tbdata.field('MIPSDEC')
        self.mipsflux=tbdata.field('MIPSFLUX')
        self.mipsfluxerr=tbdata.field('MIPSFLUXERR')
        self.mipssnr=tbdata.field('MIPSSNR')
        self.mipsdeblend=tbdata.field('MIPSDEBLEND')
        self.mipsfluxap1=tbdata.field('MIPSFLUXAP1')
        self.mipsfluxap1err=tbdata.field('MIPSFLUXAP1ERR')
        self.mipsfluxap2=tbdata.field('MIPSFLUXAP2')
        self.mipsfluxap2err=tbdata.field('MIPSFLUXAP2ERR')
        self.mipsfluxap3=tbdata.field('MIPSFLUXAP3')
        self.mipsfluxap4err=tbdata.field('MIPSFLUXAP3ERR')
                        

        self.On24ImageFlag=tbdata.field('On24ImageFlag')
        self.supervopt=tbdata.field('SUPERVOPT')
        self.ra=tbdata.field('SUPERRA')
        self.dec=tbdata.field('SUPERDEC')



        self.stellarmass=tbdata.field('STELLARMASS')
        self.stellarmass_cl=tbdata.field('STELLARMASS_CL')

        self.sdssabsmag=tbdata.field('SDSSABSMAG')
        self.sdssMu=self.sdssabsmag[:,0]
        self.sdssMg=self.sdssabsmag[:,1]
        self.sdssMr=self.sdssabsmag[:,2]
        self.sdssMi=self.sdssabsmag[:,3]
        self.sdssMz=self.sdssabsmag[:,4]


        self.sdsslum=tbdata.field('SDSSLUM')
        self.sdssLu=self.sdsslum[:,0]
        self.sdssLg=self.sdsslum[:,1]
        self.sdssLr=self.sdsslum[:,2]
        self.sdssLi=self.sdsslum[:,3]
        self.sdssLz=self.sdsslum[:,4]

        self.sdssabsmag_cl=tbdata.field('SDSSABSMAG_CL')
        self.sdssMu=self.sdssabsmag_cl[:,0]
        self.sdssMg=self.sdssabsmag_cl[:,1]
        self.sdssMr=self.sdssabsmag_cl[:,2]
        self.sdssMi=self.sdssabsmag_cl[:,3]
        self.sdssMz=self.sdssabsmag_cl[:,4]

        self.sdsslum_cl=tbdata.field('SDSSLUM_CL')
        self.sdssLu_cl=self.sdsslum_cl[:,0]
        self.sdssLg_cl=self.sdsslum_cl[:,1]
        self.sdssLr_cl=self.sdsslum_cl[:,2]
        self.sdssLi_cl=self.sdsslum_cl[:,3]
        self.sdssLz_cl=self.sdsslum_cl[:,4]

        self.sdsscolc=tbdata.field('SDSSCOLC')
        self.sdssrowc=tbdata.field('SDSSROWC')

        self.membflag =tbdata.field('MEMBFLAG')
        self.morphflag =tbdata.field('MORPHFLAG')
        self.morph =tbdata.field('MORPH')
        self.disturb =tbdata.field('DISTURB')
        self.localdens =tbdata.field('LOCALDENS')
        self.agn1 =tbdata.field('AGNKAUFF')
        self.agn2 =tbdata.field('AGNKEWLEY')
        self.agn3 =tbdata.field('AGNSTASIN')
        self.n2halpha=(self.mpan2/self.mpahalpha)
        self.o3hbeta=(self.mpao3/self.mpahbeta)
        self.logn2halpha=log10(self.mpan2/self.mpahalpha)
        self.logo3hbeta=log10(self.mpao3/self.mpahbeta)
        self.ellipseflag24 =tbdata.field('ELLIPSEFLAG24')
        self.ellipseflagsdss =tbdata.field('ELLIPSEFLAGSDSS')
        self.ellipseflag =tbdata.field('ELLIPSEFLAG')

        # galaxy zoo fields
        self.galzooflag =tbdata.field('GALZOOFLAG')
        self.galzoonvote =tbdata.field('GALZOONVOTE')
        self.galzoopel =tbdata.field('GALZOOPEL')
        self.galzoopcw =tbdata.field('GALZOOPCW')
        self.galzoopacw =tbdata.field('GALZOOPACW')
        self.galzoopedge =tbdata.field('GALZOOPEDGE')
        self.galzoopdk =tbdata.field('GALZOOPDK')
        self.galzoopmg =tbdata.field('GALZOOPMG')
        self.galzoopcs =tbdata.field('GALZOOPCS')
        self.galzoopeldebiased =tbdata.field('GALZOOPELDEBIASED')
        self.galzoopcsdebiased =tbdata.field('GALZOOPCSDEBIASED')
        self.galzoospiral =tbdata.field('GALZOOSPIRAL')
        self.galzooelliptical =tbdata.field('GALZOOELLIPTICAL')
        self.galzoouncertain =tbdata.field('GALZOOUNCERTAIN')

        #new SDSS fields that quantify radial extent of galaxy
        self.sdssIsoAr =tbdata.field('SDSSISOAR')
        self.sdssIsoBr =tbdata.field('SDSSISOBR')
        self.sdssIsoPhir =tbdata.field('SDSSISOPHIR')
        self.sdssIsoPhirErr =tbdata.field('SDSSISOPHIERRR')
        self.sdssExpRadr =tbdata.field('SDSSEXPRADR')
        self.sdssExpABr =tbdata.field('SDSSEXPABR')
        self.sdssExpABrErr =tbdata.field('SDSSEXPABRERR')
        self.sdssExpPhir =tbdata.field('SDSSEXPPHIR')
        self.sdssExpPhirErr =tbdata.field('SDSSEXPPHIERRR')

        self.sdssPetroMag=tbdata.field('SDSSPETROMAG')
        self.sdssPetroMagr=self.sdssPetroMag[:,2]

        self.sdssPetroRad=tbdata.field('SDSSPETRORAD')
        self.sdssPetroRadr=self.sdssPetroRad[:,2]

        self.sdssPetroR50=tbdata.field('SDSSPETROR50')
        self.sdssPetroR50r=self.sdssPetroR50[:,2]

        self.sdssPetroR90=tbdata.field('SDSSPETROR90')
        self.sdssPetroR90r=self.sdssPetroR90[:,2]

        #de-redened magnitudes
        self.sdssdered=tbdata.field('SDSSDERED')
        self.sdssumag=self.sdssdered[:,0]
        self.sdssgmag=self.sdssdered[:,1]
        self.sdssrmag=self.sdssdered[:,2]
        self.sdssimag=self.sdssdered[:,3]
        self.sdsszmag=self.sdssdered[:,4]

        # other Lum and SFR
        self.HImass=tbdata.field('HIMASS')
        self.L24=tbdata.field('L24')
        self.L24err=tbdata.field('L24ERR')
        self.Lir=tbdata.field('LIR')
        self.Lirerr=tbdata.field('LIRERR')
        self.SFR24=tbdata.field('SFR24')
        self.SFR24err=tbdata.field('SFR24ERR')
        self.SuperSFR24=tbdata.field('SUPERSFR24')
        self.SuperSFR24err=tbdata.field('SUPERSFR24ERR')

        self.HImass_cl=tbdata.field('HIMASS_CL')
        self.L24_cl=tbdata.field('L24_CL')
        self.L24err_cl=tbdata.field('L24ERR_CL')
        self.Lir_cl=tbdata.field('LIR_CL')
        self.Lirerr_cl=tbdata.field('LIRERR_CL')
        self.SFR24_cl=tbdata.field('SFR24_CL')
        self.SFR24err_cl=tbdata.field('SFR24ERR_CL')
        self.SuperSFR24_cl=tbdata.field('SUPERSFR24_CL')
        self.SuperSFR24err_cl=tbdata.field('SUPERSFR24ERR_CL')

        
        #define red, green and blue galaxies
        ur=self.sdssumag-self.sdssrmag
        self.redflag=(ur > 2.3)
        self.greenflag=(ur > 1.8) & (ur < 2.3)
        self.blueflag=(ur<1.8)
        #end of master table!
        #self.spiralFlag=self.On24ImageFlag & self.galzooflag & self.ellipseflag & (self.galzoopcsdebiased > 0.6)
        self.spiralFlag=self.galzooflag & self.galzoospiral
        self.clustername=clustername
        self.clusterra=clusterRA[clustername]
        self.clusterdec=clusterDec[clustername]
        self.dr=sqrt((self.ra-self.clusterra)**2+(self.dec-self.clusterdec)**2)
        self.drR200=self.dr/self.r200deg
        self.clustervel=clustervel[clustername]
        self.clustersigma=clustersigma[clustername]
        self.clustervmin=self.clustervel-3.*self.clustersigma
        self.clustervmax=self.clustervel+3.*self.clustersigma

        self.dist=sqrt((self.clusterra-self.ra)**2 + (self.clusterdec-self.dec)**2)
        self.flagHI = (self.flux100 > 0.)
        self.flagmemb = ((self.vopt > self.clustervmin) & (self.vopt < self.clustervmax)) |  ((self.v21 > self.clustervmin) & (self.v21 < self.clustervmax))

        self.dv=abs(self.supervopt-self.biweightvel)/self.biweightscale


        self.allvelocity=3.e5*self.sdssspecz
        for i in range(len(self.allvelocity)):
            if self.sdssflag[i] < 1:
                if self.v21[i] > 0:
                    self.allvelocity[i]=self.v21[i]
                else:
                    self.allvelocity[i]=self.vopt[i]

        self.nmemb=len(self.dist[self.membflag & self.On24ImageFlag])
        self.nfield=len(self.dist[self.On24ImageFlag])-self.nmemb
        print self.clustername,": ","N members = ",self.nmemb," N field = ",self.nfield
        print ' N spirals = ',sum(self.spiralFlag),' Nspiral members = ',sum(self.spiralFlag&self.membflag)
        print ' N spirals on 24um image = ',sum(self.spiralFlag & self.On24ImageFlag),' Nspiral members = ',sum(self.spiralFlag&self.membflag & self.On24ImageFlag)
        print ' N galaxies on 24um image = ',sum(self.On24ImageFlag),' Nspiral members = ',sum(self.membflag & self.On24ImageFlag)
        self.agcdict=dict((a,b) for a,b in zip(self.agcnumber,arange(len(self.agcnumber))))




        #self.L24=zeros(len(self.mipsflux),'d')
        #self.L24err=zeros(len(self.mipsflux),'d')

        # calculate HI deficiency using Toribio et al 2011 results
        # their relation is
        # log(M_HI/Msun) = 8.72 + 1.25 log(D_25,r/kpc)
        # and
        # log D_25 = log D_25(obs) + beta log(b/a), where beta = 0.35 in r-band
        # NOTE: SDSS isophotal radii are given in pixels!!!!
        a=self.sdssIsoAr
        b=self.sdssIsoBr
        # convert from arcsec to kpc with self.AngDistance (which is in units of kpc/arcsec)
        # multiply by 2 to convert from radius to diameter
        # multiply by sdss pixel scale (0.39) b/c isophotal radii are given in pixels
        self.D25obskpc=2.*self.sdssIsoAr*sdsspixelscale*self.AngDistance
        # apply correction from toribio et al 2011 
        self.logD25kpc=log10(self.D25obskpc) + 0.35*log10(b/a)
        # use toribio et al relation to predict the expected HI mass, including factor of 2 correction
        self.HImassExpected = 10.**(8.72 + 1.25*(self.logD25kpc-log10(2.)))
        self.HImassExpFromMr=10.**(6.44-0.18*self.sdssMr)
        self.HImassExpFromgr=10.**(8.84+1.81*(self.sdssgmag-self.sdssrmag))
        # calculate deficiency as log expected - log observed
        self.HIDef = log10(self.HImassExpected) - log10(self.HImass)
        self.myHIDef = log10(self.HImassExpected -self.HImass)
        self.agnflag=self.agn1#use Kauffmann et al 2003 cut
        self.irflag = self.apexflag  & self.membflag
        #set flag fot galaxies with dv < 3 sigma
        self.dvflag = self.dv < 3.