Beispiel #1
0
def s2(r, b):
    if (b >= 1 + r):
        return (2 * np.pi / 3)
    elif (b <= r - 1):
        return 0
    r_ = np.array([r], dtype=float)
    b_ = np.array([b], dtype=float)
    flux = np.empty(1)
    mu0 = np.empty(1)
    try:
        occultquad.occultquad(b_, 1.0, 0.0, r_, flux, mu0)
    except:
        print("FOO")
    return (2 * np.pi / 3) * flux[0]
def simple_model(JD, period, inc, a_Rs, limbB1, limbB2,startpar0, startpar1):
    phase = (JD - startpar1)/period
    distance_vector = delta(phase,inc) * a_Rs
    #model = occultation_fn(distance_vector,startpar0,limbB1,limbB2,show=False)
    model = occultquad(distance_vector, limbB1, limbB2, startpar0, len(JD))

    return model
Beispiel #3
0
  def evaluate(self, time):
    """ 
     Calculate a light curve according to the analytical models
     given by Pal 2008.
        
     Parameters
     ----------
     time : array
         An array of time points at which the light curve
         shall be calculated.
        
     .. note:: time = 0 -> Planet is exactly in the line of sight (phase = 0).

     Returns
     -------
     Model : array
         The analytical light curve is stored in the property `lightcurve`.
    """

    # Translate the given parameters into an orbit and, finally,
    # into a projected, normalized distance (z-parameter)
    self._calcZList(time - self["T0"])

    # Use occultquad Fortran library to compute flux decrease
    df = numpy.zeros(len(time))
    if len(self._intrans) > 0:
      result = occultquad.occultquad(self._zlist[self._intrans],self["linLimb"],self["quadLimb"], \
                                     self["p"],len(self._intrans))
      df[self._intrans] = (1.0 - result[0])
    
    self.lightcurve = (1.-df)*1./(1.+self["b"]) + self["b"]/(1.0+self["b"])
    
    return self.lightcurve
Beispiel #4
0
def model_no_moon_nested_2(time,
                           ratio_P,
                           a_o_R,
                           impact_B,
                           phase_B,
                           period_B,
                           u1,
                           u2,
                           verbosity=0):
    const = a_o_R
    if verbosity > 1:
        print(const)
    z_B_x = const * np.sin(2.0 * np.pi * (time / period_B - phase_B))
    z_B_y = impact_B * np.cos(2.0 * np.pi * (time / period_B - phase_B))
    z_coord = np.cos(2.0 * np.pi * (time / period_B - phase_B))
    z_B_y[z_coord < 0.0] = 10.0 * a_o_R  #exclude if behind star

    z_B = np.sqrt(z_B_x**2.0 + z_B_y**2.0)

    transit_signal_P = np.ones(len(z_B))

    transit_signal_P[z_B < 1.0 + ratio_P] = occultquad(
        z_B[z_B < 1.0 + ratio_P], u1, u2, ratio_P)[0]

    return transit_signal_P
Beispiel #5
0
def ModLC(timeIn, RpRs, b, tR, t0, u1, u2):
    bsq  = b**2
    z0   = np.sqrt(bsq + ((timeIn-t0) / tR)**2)
    nz   = len(timeIn)
    muo1 = np.zeros((nz))
    mu0  = np.zeros((nz))
    _    = occultquad.occultquad(z0,u1,u2,RpRs,muo1,mu0,nz)
    return muo1
Beispiel #6
0
def distance():
    planets = ["Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus","Neptune"]
    infile = "solarsystem.txt"
    period = []; readcolumn(period,1,infile)
    inc = []; readcolumn(inc,2,infile)
    size = []; readcolumn(size,3,infile)
    a = []; readcolumn(a,4,infile)
    phase = -0.01+0.02*np.arange(10000)/10000.
    disarr = np.logspace(np.log10(1.),np.log10(1.e4),100)
    #plt.ion()
    #plt.show()
    time.sleep(1.0)
    count=0
    for dis in disarr:
        magsun = cal_mag(dis)
        sigma = cal_sigma(magsun)
        fig = plt.figure(figsize=[8,8])
        #plt.clf()
        #fig.suptitle("offset from the eliptical = %.2f" % offset, color='red')
        fig.suptitle("distance from sun = %.2f pc, Kepmag=%.2f, $\sigma$ = %.2f ppm" % (dis, magsun, sigma/1.e-6),color='red')
        for i in xrange(len(planets)):
            transit = tran()
            transit.P = period[i]*365.
            transit.inc = (90.)/180.*math.pi
            transit.u1 = 0.4352 
            transit.u2= 0.2965
            transit.sma = (a[i] / rsun*AU)
            z = transit.calZ(phase)
            #print z
            #break
            rmean = size[i]*6.378e8/rsun
            circularflux = occultquad(z,transit.u1,transit.u2,rmean)[0]
            circularmag = np.zeros(len(phase))+np.random.normal(loc=0,scale=sigma,size=phase.shape)+fluxtomag(circularflux)
            #circularmag = fluxtomag(circularflux)
            #print transit.inc,rmean
            yformatter = matplotlib.ticker.ScalarFormatter(useOffset=False)
        
            ax = fig.add_subplot(4,2,i+1)
            ax.text(-48,1-rmean**2.*0.3,planets[i])
            #if i%2==0:
            #    ax.set_title(planets[i],loc='left')
            #else:
            #    ax.set_title(planets[i],loc='right')

            ax.set_xlim([-60,60])
            ax.set_ylim([1+rmean**2.*1.4,1-rmean**2.*0.5])
            ax.plot(phase*transit.P*24.,1+circularmag)
            ax.yaxis.set_major_formatter(yformatter)
            #plt.plot(z,circularflux)
        #plt.tight_layout()
        plt.savefig('imgmag-%.3d.png' % count)
        plt.savefig('solar.png')
        #plt.show()
        count+=1
        plt.close()
        #break

    return
Beispiel #7
0
 def simple_model(JD, startpar0, startpar1):
     phase = (JD - startpar1) / period
     distance_vector = delta(phase, inc) * a_Rs
     # print distance_vector
     #model = occultation_fn(distance_vector,startpar0,limbB1,limbB2,show=False)
     model = occultquad(distance_vector, limbB1, limbB2,
                        startpar0)  #, len(hjd))
     model = model[0]
     return model
Beispiel #8
0
def main():
    planets = ["Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus","Neptune"]
    infile = "solarsystem.txt"
    period = []; readcolumn(period,1,infile)
    inc = []; readcolumn(inc,2,infile)
    size = []; readcolumn(size,3,infile)
    a = []; readcolumn(a,4,infile)
    phase = -0.05+0.1*np.arange(10000)/10000.
    offsetarr = np.linspace(-0.5,8,400)
    #offsetarr = np.array([0.])
    #plt.ion()
    #plt.show()
    time.sleep(1.0)
    count=0
    for offset in offsetarr:
        fig = plt.figure(figsize=[8,8])
        plt.clf()
        fig.suptitle("offset from the eliptical = %.2f" % offset, color='red')
        for i in xrange(len(planets)):
            transit = tran()
            transit.P = period[i]*365.
            transit.inc = (90.-offset+inc[i])/180.*math.pi
            transit.u1 = 0.4352 
            transit.u2= 0.2965
            transit.sma = (a[i] / rsun*AU)
            z = transit.calZ(phase)
            #print z
            #break
            rmean = size[i]*6.378e8/rsun
            circularflux = occultquad(z,transit.u1,transit.u2,rmean)[0]
            #print transit.inc,rmean
            yformatter = matplotlib.ticker.ScalarFormatter(useOffset=False)
        
            ax = fig.add_subplot(4,2,i+1)
            ax.text(-48,1+rmean**2.*0.1,planets[i])
            #if i%2==0:
            #    ax.set_title(planets[i],loc='left')
            #else:
            #    ax.set_title(planets[i],loc='right')

            ax.set_xlim([-60,60])
            ax.set_ylim([1-rmean**2.*1.4,1+rmean**2.*0.3])
            ax.plot(phase*transit.P*24.,circularflux)
            ax.yaxis.set_major_formatter(yformatter)
            #plt.plot(z,circularflux)
        #plt.tight_layout()
        plt.savefig('img-%.3d.png' % count)
        #plt.savefig('solar.png')
        count+=1
        plt.close()
        #break
        #plt.tight_layout()
        #plt.draw()
        #time.sleep(0.001)
    return
Beispiel #9
0
def testgd(b,phi,theta):
    #phi and theta should be in radiant
    
    #parameters match Barnes 2009
    rp = 0.1 #in solar radius units
    a = 0.05
    P = 3.04
    beta = 0.19
    #beta = 0.08
    fratio = 0.1947
    Ms = 1.8
    Req = 2.029
    #Req = 1.0
    Rpole = Req*(1-fratio)
    Tpole = 8450
    u1 = 0.32; u2 = 0.32
    Protot = 8.64 
   
    #derived parameters and compute circular flux
    inc = np.arccos(Rpole*b*rsun/a/AU)
    tarr = -10000+np.arange(1000)/1000.*20000.
    t0 = 0.
    phase = (tarr-t0)/P/day
    sma = a*AU*np.sin(inc)/Req/rsun
    #print sma
    z=sma*np.sqrt(np.sin(phase*2*np.pi)*np.sin(phase*2*np.pi)+np.cos(phase*2*np.pi)*np.cos(phase*2*np.pi)*cos(inc)*cos(inc));
    circularflux = occultquad(z,u1,u2,rp/Req)[0]

    #derived parameters for gravity darkening bit 
    G_MRsun_hour = 4*math.pi**2*(1.5e3/7)**3./(365.*24.)**2
    Omega = 2*math.pi/Protot

    ggraveq0 = G_MRsun_hour*Ms/Req**2.
    groteq0 = Omega**2.*Req
    gpole = ggraveq0*Req**2./Rpole**2.
    #inite Zeipel 
    #Warning, use beta to init Zeipel, instead of y; F = g**(4*beta)
    #gdmodel = Zeipel(fratio,phi,Req,ggraveq0,groteq0,beta)
    #the rp pass to code should be in solar units, I think
    gdmodel = Zeipel(fratio,phi,Req,ggraveq0,groteq0,beta,rp)
    F = np.zeros(len(phase))
    Rpole = Req*(1-fratio)

    #call Zeiple
    #Warning, a is the semimajor axis in units of AU/rsun, instead of rstar;
    #input b*Rpole(in rsun,see above) instead of b
    gdmodel.Cal_F(phase,F,theta,a*AU/rsun,b*Rpole)
    lum = gdmodel.Cal_Lum()
    print lum/gpole**(4.*beta)/(4.*np.pi*Req**3.)
    #correct the circular model
    model = (circularflux-max(circularflux))*F+1
    #model = (circularflux-max(circularflux))+1
    #model = F
    return model
Beispiel #10
0
def transitmodel(model_params,hjd,dummy1,dummy2,cadence):

    ### model_params t0 period rratio rsum inc u1 u2

    #t0,period,rpol,rsum,inc,u1,u2 = model_params
    edepth_i,rsum,rpol,u1,dummy,inc,ecosw_i,esinw_i,dummy,dummy,dummy,dummy,dummy,dummy,dummy,dummy,dummy,dummy,period,t0,u2,dummy=model_params

    sma = rsum/(1+rpol)
    sma = 1/sma
    inc = inc * np.pi/180.
    
    if cadence == "short":
        phi = (hjd - t0)/period

        z=sma*np.sqrt(np.sin(phi*2*np.pi)*np.sin(phi*2*np.pi)+np.cos(phi*2*np.pi)*np.cos(phi*2*np.pi)*cos(inc)*cos(inc));
        circularflux = occultquad(z,u1,u2,rpol)[0]
        index = np.cos(phi*2*np.pi)<0
        circularflux[index]=1.0
        flux = circularflux


    if cadence == "long":
        flux = []
        for i in hjd:
            delt = 0.00208
            phi = np.arange(i-0.0104,i+0.0104+delt,delt)
            phi_orig = phi
            phi = (phi-t0)/period

            z=sma*np.sqrt(np.sin(phi*2*np.pi)*np.sin(phi*2*np.pi)+np.cos(phi*2*np.pi)*np.cos(phi*2*np.pi)*cos(inc)*cos(inc));
            circularflux = occultquad(z,u1,u2,rpol)[0]
            index = np.cos(phi*2*np.pi)<0
            circularflux[index]=1.0

            flux.append(np.mean(circularflux))
        flux = np.array(flux)

    return flux
Beispiel #11
0
  def evaluate(self, time):
    """ 
     Calculate a light curve according to the analytical models
     given by Mandel and Agol.
        
     Parameters
     ----------
     time : array
         An array of time points at which the light curve
         shall be calculated.

     Returns
     -------
     Model : array
         The analytical light curve is stored in the property `lightcurve`.
    """

    # Translate the given parameters into an orbit and, finally,
    # into a projected, normalized distance (z-parameter)
    if self._orbit == "circular":
      self._calcZList(time - self["T0"])
    else:
      # The orbit is keplerian
      self._calcZList(time)

    # Use occultquad Fortran library to compute flux decrease
    df = numpy.zeros(len(time))
    if len(self._intrans) > 0:
      if self._ld == "quad":
        # Use occultquad Fortran library to compute flux decrease
        result = occultquad.occultquad(self._zlist[self._intrans],self["linLimb"],self["quadLimb"], \
                                       self["p"],len(self._intrans))
      else:
        result = occultnl.occultnl(self["p"],self["a1"],self["a2"],self["a3"], \
                                   self["a4"],self._zlist[self._intrans])
      df[self._intrans] = (1.0 - result[0])
      
    self.lightcurve = (1.-df)*1./(1.+self["b"]) + self["b"]/(1.0+self["b"])
    
    return self.lightcurve
Beispiel #12
0
def simpletemp():
    infile = 'HAT-266-0008524.tfalc'
    time = []; readcolumn(time,2,infile); time = np.array(time)
    mag = []; readcolumn(mag,18,infile); mag = np.array(mag)
    period = 9.199166; epoch = 54774.2606359; q = 0.0243
    epoch+=period*q/2.
    rp = math.sqrt(0.0122)
    inc = math.pi/2.
    phase = abs((time-epoch)/period)-(abs((time-epoch)/period)).astype(int)
    ind = phase>0.5
    phase[ind]-=1.0
    sma = 1./(q*math.pi)
    #phase = phasefold(time,epoch,period)
    z=sma*np.sqrt(np.sin(phase*2*math.pi)*np.sin(phase*2*math.pi)+np.cos(phase*2*math.pi)*np.cos(phase*2*math.pi)*np.cos(inc)*np.cos(inc))
    circularflux = occultquad(z,0.0,0.0,rp)[0]
    index = np.cos(phase*2*np.pi)<0
    circularflux[index]=1.0
    circularmag = fluxtomag(circularflux)

    for i in xrange(len(time)):
        print time[i],phase[i],circularmag[i]+np.median(mag),mag[i]
    return 
Beispiel #13
0
def trangen(time,mag,transit,lcflag=False):
    '''functions to generate fake lightcurves'''
    rmean = math.sqrt(transit.dip)
    f = transit.f
    inc = transit.inc*math.pi/180.
    alpha = transit.alpha*np.pi/180.
    u1 = transit.u1
    u2 = transit.u2
    sma = 1./transit.q/np.pi
    #print sma,transit.P,transit.u1,transit.u2,transit.epoch,transit.q,transit.qg
    req = rmean/math.sqrt(1-f)
    rpol = math.sqrt(1-f)*rmean
    ntran=int((max(time)-transit.epoch)/transit.P)-int((min(time)-transit.epoch)/transit.P)+1
    
       
    tranwidth=transit.q*transit.P/2.
    obl = Obl.Oblateness(req,rpol,alpha,sma,inc,u1,u2)
    totalFlux = np.pi*(1.0-u1/3-u2/6)
    intran = gentran(time,transit.P,transit.epoch,transit.q)
    medianmag=np.median(mag[-intran])
    if transit.stdmag==-1:
        stdmag=np.std(mag[-intran])
    else:
        stdmag=transit.stdmag
    #print rpol,medianmag
    phase = (time-transit.epoch)/transit.P-((time-transit.epoch)/transit.P).astype(int)

    ind = phase>0.5
    phase[ind]-=1.0
    fkmag=medianmag+np.random.randn(len(time))*stdmag
    if(lcflag):
        #initial short cadence data
        circularfluxmeanlc=medianmag+np.random.randn(len(time))*stdmag
        cadence = 1./60./24.
        nt = (int)((max(time)-min(time))/cadence)
        fktime = min(time)+np.arange(nt)*cadence
        fkmagsc=medianmag+np.random.randn(len(fktime))*stdmag
        
        #initial short cadence pahse
        fkintran = gentran(fktime,transit.P,transit.epoch,transit.q) 
        fkphase = abs((fktime-transit.epoch)/transit.P)-(abs((fktime-transit.epoch)/transit.P)).astype(int)
        ind = fkphase>0.5
        fkphase[ind]-=1.0
        z=sma*np.sqrt(np.sin(fkphase*2*np.pi)*np.sin(fkphase*2*np.pi)+np.cos(fkphase*2*np.pi)*np.cos(fkphase*2*np.pi)*np.cos(inc)*np.cos(inc))
        
        #compute corrections
        fkdflux = np.zeros(len(fktime[fkintran]))
        obl.relativeFlux(fkphase[fkintran],fkdflux)
        #fkdflux/=totalFlux
        circularfluxmean = occultquad(z,u1,u2,rmean)[0]
        circularfluxmean = 1-(1-circularfluxmean)/(totalFlux/np.pi)
        circularflux = occultquad(z,u1,u2,rpol)[0]
        circularflux = 1-(1-circularflux)/(totalFlux/np.pi)
        index = np.cos(fkphase*2*np.pi)<0
        circularflux[index]=1.0
        circularfluxmean[index]=1.0
        
        fkmagsc[fkintran] = medianmag
        fkmagsc[fkintran]+=1-(circularflux[fkintran]-fkdflux)
        circularfluxmean=1-circularfluxmean+medianmag
        fkmag[intran] = binlc(time[intran],fktime[fkintran],fkmagsc[fkintran])
        residual = (fkmagsc-circularfluxmean)/1.e-6
        circularfluxmeanlc[intran] = binlc(time[intran],fktime[fkintran],circularfluxmean[fkintran]) + np.random.randn(len(time[intran]))*stdmag
        circularfluxmean = circularfluxmeanlc 
        plt.plot(fkphase[fkintran],residual[fkintran],'r') 
        plt.xlim([-0.01,0.01])

    else:
        dflux = np.zeros(len(time[intran]))
        obl.relativeFlux(phase[intran],dflux)
        dflux/=totalFlux
        z=sma*np.sqrt(np.sin(phase*2*np.pi)*np.sin(phase*2*np.pi)+np.cos(phase*2*np.pi)*np.cos(phase*2*np.pi)*np.cos(inc)*np.cos(inc))
    
        circularflux = occultquad(z,u1,u2,rpol)[0]
    
        index = np.cos(phase*2*np.pi)<0
        circularflux[index]=1.0
    
        circularfluxmean,check = occultquad(z,u1,u2,rmean)
        circularfluxmean[index]=1.0
        
        plt.plot(phase[intran],(circularfluxmean[intran]-circularflux[intran]+dflux)/1.e-6,'r')
        plt.xlim([-0.01,0.01])
        fkmag[intran] = medianmag+np.random.randn(len(fkmag[intran]))*stdmag
        fkmag[intran]+=1-(circularflux[intran]-dflux)
        circularfluxmean=1-circularfluxmean+medianmag+np.random.randn(len(fkmag))*stdmag

    plt.plot(phase[intran],(-circularfluxmean[intran]+fkmag[intran])/1.e-6,'o',mec='b',mfc='None',ms=1.5,mew=1)
    plt.show()
    
    return [fkmag,circularfluxmean]
Beispiel #14
0
def trangen(time,mag,transit,lcflag=False):
    '''functions to generate fake lightcurves'''
    rmean = math.sqrt(transit.dip)
    print rmean,transit.q*transit.P*24.
    f = transit.f
    inc = transit.inc*math.pi/180.
    alpha = transit.alpha*np.pi/180.
    u1 = transit.u1
    u2 = transit.u2
    sma = 1./transit.q/np.pi/np.sin(inc)
    print sma
    #print sma,transit.P,transit.u1,transit.u2,transit.epoch,transit.q,transit.qg
    req = rmean/math.sqrt(1-f)
    rpol = math.sqrt(1-f)*rmean
    ntran=int((max(time)-transit.epoch)/transit.P)-int((min(time)-transit.epoch)/transit.P)+1
    
       
    tranwidth=transit.q*transit.P/2.
    obl = Obl.Oblateness(req,rpol,alpha,sma,inc,u1,u2)
    totalFlux = np.pi*(1.0-u1/3-u2/6)
    intran = gentran(time,transit.P,transit.epoch,transit.q)
    medianmag=np.median(mag[-intran])
    if transit.stdmag==-1:
        stdmag=np.std(mag[-intran])
    else:
        stdmag=transit.stdmag
    #print rpol,medianmag
    phase = (time-transit.epoch)/transit.P-((time-transit.epoch)/transit.P).astype(int)

    ind = phase>0.5
    phase[ind]-=1.0
    fkmag=medianmag+np.random.randn(len(time))*stdmag
    fig=plt.figure()
    ax = fig.add_subplot(111)
    if(lcflag):
        #initial short cadence data
        circularfluxmeanlc=medianmag+np.random.randn(len(time))*stdmag
        cadence = 1./60./24.
        nt = (int)((max(time)-min(time))/cadence)
        fktime = min(time)+np.arange(nt)*cadence
        fkmagsc=medianmag+np.random.randn(len(fktime))*stdmag
        
        #initial short cadence pahse
        fkintran = gentran(fktime,transit.P,transit.epoch,transit.q) 
        fkphase = abs((fktime-transit.epoch)/transit.P)-(abs((fktime-transit.epoch)/transit.P)).astype(int)
        ind = fkphase>0.5
        fkphase[ind]-=1.0
        z=sma*np.sqrt(np.sin(fkphase*2*np.pi)*np.sin(fkphase*2*np.pi)+np.cos(fkphase*2*np.pi)*np.cos(fkphase*2*np.pi)*np.cos(inc)*np.cos(inc))
        
        #compute corrections
        fkdflux = np.zeros(len(fktime[fkintran]))
        obl.relativeFlux(fkphase[fkintran],fkdflux)
        #fkdflux/=totalFlux
        circularfluxmean = occultquad(z,u1,u2,rmean)[0]
        circularfluxmean = 1-(1-circularfluxmean)/(totalFlux/np.pi)
        circularflux = occultquad(z,u1,u2,rpol)[0]
        circularflux = 1-(1-circularflux)/(totalFlux/np.pi)
        index = np.cos(fkphase*2*np.pi)<0
        circularflux[index]=1.0
        circularfluxmean[index]=1.0
        
        fkmagsc[fkintran] = medianmag
        fkmagsc[fkintran]+=1-(circularflux[fkintran]-fkdflux)
        circularfluxmean=1-circularfluxmean+medianmag
        fkmag[intran] = binlc(time[intran],fktime[fkintran],fkmagsc[fkintran])
        residual = (fkmagsc-circularfluxmean)/1.e-6
        circularfluxmeanlc[intran] = binlc(time[intran],fktime[fkintran],circularfluxmean[fkintran]) + np.random.randn(len(time[intran]))*stdmag
        circularfluxmean = circularfluxmeanlc 
        ax.plot(fkphase[fkintran],residual[fkintran],'r') 
        ax.set_xlim([-0.01,0.01])

    else:
        dflux = np.zeros(len(time[intran]))
        obl.relativeFlux(phase[intran],dflux)
        dflux/=totalFlux
        z=sma*np.sqrt(np.sin(phase*2*np.pi)*np.sin(phase*2*np.pi)+np.cos(phase*2*np.pi)*np.cos(phase*2*np.pi)*np.cos(inc)*np.cos(inc))
    
        circularflux = occultquad(z,u1,u2,rpol)[0]
    
        index = np.cos(phase*2*np.pi)<0
        circularflux[index]=1.0
    
        circularfluxmean,check = occultquad(z,u1,u2,rmean)
        circularfluxmean[index]=1.0
        
        ax.plot(phase[intran],(circularfluxmean[intran]-circularflux[intran]+dflux)/1.e-6,'r')
        ax.set_xlim([-0.01,0.01])
        fkmag[intran] = medianmag+np.random.randn(len(fkmag[intran]))*stdmag
        fkmag[intran]+=1-(circularflux[intran]-dflux)
        circularfluxmean=1-circularfluxmean+medianmag+np.random.randn(len(fkmag))*stdmag
    ax.plot(phase[intran],(-circularfluxmean[intran]+fkmag[intran])/1.e-6,'o',mec='b',mfc='None',ms=1.5,mew=1)
    ax.set_xlabel('phase')
    ax.set_ylabel('residual(ppm)')
    plt.show()
    fig=plt.figure()
    ax = fig.add_subplot(111)
    #ax.plot(phase[intran]*transit.P*24.,circularfluxmean[intran],'o',mec='b',mfc='None',ms=1.5,mew=1)
    ax.plot(phase[intran]*transit.P*24.,fkmag[intran],'.',mec='r')
    #ax.plot(phase[intran],-circularfluxmean[intran]+mag[intran],'o',mec='b',mfc='None',ms=1.5,mew=1)
    #ax.set_xlabel('phase')
    #ax.set_ylabel('relativemag(ppm)')
    #yformatter = matplotlib.ticker.ScalarFormatter(useOffset=False)
    #ax.yaxis.set_major_formatter(yformatter)
    plt.show()
    #fig=plt.figure()
    #ax = fig.add_subplot(111)
    #ax.plot(phase[intran],-circularfluxmean[intran]+mag[intran]+medianmag+1-(circularflux[intran]-dflux),'o',mec='b',mfc='None',ms=1.5,mew=1)
    #ax.set_xlabel('phase')
    #ax.set_ylabel('relativemag(ppm)')
    #plt.show()
     
    return [fkmag,circularfluxmean]
Beispiel #15
0
def main():
    #rmean = 0.154679
    rmean = 0.08453
    f = 0.1
    alpha =45./180.*np.pi
    #sma = 8.924
    sma = 49.584
    #period = 2.218573 
    period = 110.3216229
    #inc = 85.749/180.*np.pi
    inc = 89.209/180.*np.pi
    #inc = 90./180.*np.pi
    u1 = 0.242
    u2 = 0.289
    Npoint = 1000
    percent = 0.025
    #percent = 1.0
    dflux = np.zeros(Npoint)
    dfluxF = np.zeros(Npoint)
    req = rmean/sqrt(1-f)
    rpol = sqrt(1-f)*rmean
    #initial
    start = time.clock()
    #print '0',time.time(),time.clock()
    obl = Obl.Oblateness(req,rpol,alpha,sma,inc,u1,u2)
    oblf = OblF.Oblateness(req,rpol,alpha,sma,inc,u1,u2)
    print '0',time.time(),time.clock()-start
    b0 = sma*cos(inc)
    if(b0>(1+req)):
        print 'no transit happen'
        return
    dphi = 2*percent/(Npoint-1)
    totalFlux = np.pi*(1.0-u1/3-u2/6)
    phi=-1*percent+dphi*np.arange(Npoint)
    #call
    start = time.clock()
    #print '1',time.time(),time.clock()-start
    obl.relativeFlux(phi,dflux)
    print '1old',time.time(),time.clock()-start
    start = time.clock()
    oblf.relativeFlux(phi,dfluxF)
    print '1',time.time(),time.clock()-start
    #print phi,dflux
    z=sma*np.sqrt(np.sin(phi*2*np.pi)*np.sin(phi*2*np.pi)+np.cos(phi*2*np.pi)*np.cos(phi*2*np.pi)*cos(inc)*cos(inc));
    #z = abs(np.sin(phi*np.pi))*sma#/abs(np.sin(inc))
    #print '3',time.time(),time.clock()-start
    start = time.clock()
    circularflux = occultquad(z,u1,u2,rpol)[0]
    print '3',time.time(),time.clock()-start
    index = np.cos(phi*2*np.pi)<0
    circularflux[index]=1.0
    #print z.shape,circularflux.shape
    #plt.plot(phi,circularflux)
    #plt.plot(phi,z)
    #plt.plot(phi,dflux/totalFlux)
    #plt.xlim([-0.006,0.006])
    start = time.clock()
    #print '5',time.time(),time.clock()-start
    circularfluxmean = occultquad(z,u1,u2,rmean)[0]
    print '4',time.time(),time.clock()-start
    #plt.plot(phi,circularflux-dflux/totalFlux)
    plt.xlim([-0.01,0.01])
    plt.plot(phi,(-circularfluxmean+circularflux-dflux/totalFlux)/1.e-6)
    plt.plot(phi,(-circularfluxmean+circularflux-dfluxF/totalFlux)/1.e-6,'+')
    plt.show()
    return
Beispiel #16
0
def GenLC(lcfile,transit):
    req = transit.rmean/sqrt(1-transit.f)
    rpol = sqrt(1-transit.f)*transit.rmean
    totalFlux = np.pi*(1.0-transit.u1/3-transit.u2/6)
    if lcfile.cadence =='short':
        wn = 24.*60.
        minlen=transit.q*transit.P*24.*60.*4.
    else:
        wn = 24.*2.
        minlen=transit.q*transit.P*24.*2.*4.

    time,mag=readcol(lcfile.name,lcfile.coljd,lcfile.colmag)
    time=np.array(time)
    mag=np.array(mag)
    #rm transit
    newtime,newmag,newftime=windowtran(time,mag,transit.epoch,transit.P,transit.q)
    fragtime=[]
    print minlen,transit.q,transit.P,lcfile.cadence
    #return
    #generate random segment of lc 
    ideal = False
    if(ideal):
        fragtime = time
        fragmag = np.zeros(len(mag))+np.median(newmag)
        fragftime = phasefold(time,transit.epoch,transit.P)
        ph=0.5
        #fragtime,fragmag,fragftime=windowphase(newtime,newmag,epoch,period,qvar,ph)
    else:
        while len(fragtime)<minlen:
            ph = random.random()
            print ph,transit.q
            while (abs(ph-0.5)<2.*transit.q):
                ph = random.random()
            fragtime,fragmag,fragftime=windowphase(newtime,newmag,transit.epoch,transit.P,transit.q,ph)
    newepoch = transit.epoch+(ph-0.5)*transit.P
    #print newepoch
    #print 'reach here', transit.u1,transit.u2, transit.rmean,transit.sma,lcfile.cadence,transit.P,transit.epoch
    if lcfile.cadence =='short':
        fkintran = gentran(fragtime,transit.P,newepoch,transit.q)
        fkphase = abs((fragtime-newepoch)/transit.P)-(abs((fragtime-newepoch)/transit.P)).astype(int)
        ind = fkphase>0.5
        fkphase[ind]-=1.0
        #print fkphase
        z = transit.calZ(fkphase)
        #print z[abs(z)<2.216]
        #compute corrections
        fkdflux = np.zeros(len(fragtime[fkintran]))
        #print req,rpol,transit.alpha,transit.sma,transit.inc,transit.u1,transit.u2
        obl = Obl.Oblateness(req,rpol,transit.alpha,transit.sma,transit.inc,transit.u1,transit.u2)
        obl.relativeFlux(fkphase[fkintran],1.+np.zeros(len(fkdflux)),fkdflux)
        #print fkphase[fkintran]
        circularfluxmean = occultquad(z,transit.u1,transit.u2,transit.rmean)[0]
        #plt.plot(fkphase,z)
        #plt.show()
        circularflux = occultquad(z,transit.u1,transit.u2,rpol)[0]
        index = np.cos(fkphase*2*np.pi)<0
        circularflux[index]=1.0
        circularflux[fkintran]-=fkdflux/totalFlux
        circularfluxmean[index]=1.0
        circularmag = fluxtomag(circularflux)
        circularmagmean = fluxtomag(circularfluxmean)
        fragmagcircular=fragmag+circularmagmean
        #fragmagcircular=11.+np.zeros(len(fragmag))+np.random.normal(0,1.e-4,len(fragmag))+circularmagmean
        fragmag+=circularmag
        #fragmag=11.+circularmag+np.zeros(len(fragmag))+np.random.normal(0,1.e-4,len(fragmag))
        residual = (fragmag-fragmagcircular)/1.e-6
    elif lcfile.cadence=='long':
        npoints = int(round((max(fragtime)-min(fragtime))*24.*60.))
        fragtimesc = np.arange(npoints)*(1./24./60.)+min(fragtime) 
        fkintransc = gentran(fragtimesc,transit.P,newepoch,transit.q) 
        fkphasesc = abs((fragtimesc-newepoch)/transit.P)-(abs((fragtimesc-newepoch)/transit.P)).astype(int)
        ind = fkphasesc>0.5
        fkphasesc[ind]-=1.0
        z = transit.calZ(fkphasesc)
        print max(fragtime), min(fragtime) 
        #compute corrections
        fkdfluxsc = np.zeros(len(fragtimesc[fkintransc]))
        obl = Obl.Oblateness(req,rpol,transit.alpha,transit.sma,transit.inc,transit.u1,transit.u2)
        obl.relativeFlux(fkphasesc[fkintransc],fkdfluxsc)
        circularfluxmeansc = occultquad(z,transit.u1,transit.u2,transit.rmean)[0]
        circularfluxsc = occultquad(z,transit.u1,transit.u2,rpol)[0]
        index = np.cos(fkphasesc*2*np.pi)<0
        circularfluxsc[index]=1.0
        circularfluxmeansc[index]=1.0
        circularfluxsc[fkintransc]-=fkdfluxsc/totalFlux
        circularmagsc = fluxtomag(circularfluxsc)
        circularflux=binlc(fragtime,fragtimesc,circularmagsc)
        circularmagmean = fluxtomag(circularfluxmeansc)
        circularfluxmean=binlc(fragtime,fragtimesc,circularmagmean)
        fragmagcircular=fragmag+circularfluxmean
        fragmag+=circularflux
        residual = (fragmag-fragmagcircular)/1.e-6
    fragtime -= (newepoch-transit.epoch)
    return [fragtime,fragmag,residual,fragftime,fragmagcircular] 
Beispiel #17
0
def main():
    #rmean = 0.154679
    rmean = 0.08453
    f = 0.1
    f2 = 0.12
    #alpha =45./180.*np.pi
    alpha = 30. / 180. * np.pi
    alpha2 = 70. / 180. * np.pi
    #sma = 8.924
    sma = 49.584
    #period = 2.218573
    period = 110.3216229
    #inc = 85.749/180.*np.pi
    inc = 89.209 / 180. * np.pi
    #inc = 90./180.*np.pi
    u1 = 0.242
    u2 = 0.289
    Npoint = 1000
    percent = 0.025
    #percent = 1.0
    dflux = np.zeros(Npoint)
    dfluxF = np.zeros(Npoint)
    req = rmean / sqrt(1 - f)
    rpol = sqrt(1 - f) * rmean
    req2 = rmean / sqrt(1 - f2)
    rpol2 = sqrt(1 - f2) * rmean
    #initial
    start = time.clock()
    #print '0',time.time(),time.clock()
    obl = Obl.Oblateness(req, rpol, alpha, sma, inc, u1, u2)
    oblf = OblF.Oblateness(req2, rpol2, alpha2, sma, inc, u1, u2)
    print '0', time.time(), time.clock() - start
    b0 = sma * cos(inc)
    if (b0 > (1 + req)):
        print 'no transit happen'
        return
    dphi = 2 * percent / (Npoint - 1)
    totalFlux = np.pi * (1.0 - u1 / 3 - u2 / 6)
    phi = -1 * percent + dphi * np.arange(Npoint)
    #call
    start = time.clock()
    #print '1',time.time(),time.clock()-start
    obl.relativeFlux(phi, dflux)
    print '1old', time.time(), time.clock() - start
    start = time.clock()
    oblf.relativeFlux(phi, dfluxF)
    print '1', time.time(), time.clock() - start
    #print phi,dflux
    z = sma * np.sqrt(
        np.sin(phi * 2 * np.pi) * np.sin(phi * 2 * np.pi) +
        np.cos(phi * 2 * np.pi) * np.cos(phi * 2 * np.pi) * cos(inc) *
        cos(inc))
    #z = abs(np.sin(phi*np.pi))*sma#/abs(np.sin(inc))
    #print '3',time.time(),time.clock()-start
    start = time.clock()
    circularflux = occultquad(z, u1, u2, rpol)[0]
    circularflux2 = occultquad(z, u1, u2, rpol2)[0]
    print '3', time.time(), time.clock() - start
    index = np.cos(phi * 2 * np.pi) < 0
    circularflux[index] = 1.0
    #print z.shape,circularflux.shape
    #plt.plot(phi,circularflux)
    #plt.plot(phi,z)
    #plt.plot(phi,dflux/totalFlux)
    #plt.xlim([-0.006,0.006])
    start = time.clock()
    #print '5',time.time(),time.clock()-start
    circularfluxmean = occultquad(z, u1, u2, rmean)[0]
    print '4', time.time(), time.clock() - start
    #plt.plot(phi,circularflux-dflux/totalFlux)
    plt.xlim([-0.01, 0.01])
    plt.plot(phi,
             (-circularfluxmean + circularflux - dflux / totalFlux) / 1.e-6)
    plt.plot(phi,
             (-circularfluxmean + circularflux2 - dfluxF / totalFlux) / 1.e-6,
             '+')
    plt.show()
    return
Beispiel #18
0
def testgd(b):
    rp = 0.1
    a = 0.05
    P = 3.04
    beta = 0.19
    fratio = 0.1947
    Ms = 1.8
    Req = 2.029
    Rpole = Req*(1-fratio)
    Tpole = 8450
    #theta = 90.0
    theta = 0.0
    phi = 0.0
    #phi = 30./180.*math.pi
    #phi = 90./180.*math.pi
    #inc = 90.0/180.*math.pi
    #inc = np.arccos(Req*b*rsun/a/AU)
    inc = np.arccos(Rpole*b*rsun/a/AU)
    #print inc/math.pi*180.
    tarr = -10000+np.arange(500)/500.*20000.
    t0 = 0.
    phase = (tarr-t0)/P/day
    u1 = 0.32; u2 = 0.32
    Protot = 8.64 
    sma = a*AU*np.sin(inc)/Req/rsun
    #print sma
    z=sma*np.sqrt(np.sin(phase*2*np.pi)*np.sin(phase*2*np.pi)+np.cos(phase*2*np.pi)*np.cos(phase*2*np.pi)*cos(inc)*cos(inc));
    circularflux = occultquad(z,u1,u2,rp/Req)[0]
    #plt.plot(phi,circularflux)
    #plt.show()

    theta = theta*math.pi/180.
    
    #Protot = Protot #Protot is in hour
    G_MRsun_hour = 4*math.pi**2*(1.5e3/7)**3./(365.*24.)**2
    Omega = 2*math.pi/Protot

    ggraveq0 = G_MRsun_hour*Ms/Req**2.
    groteq0 = Omega**2.*Req
    #ggraveq = 1.0
    #groteq = ggraveq/ggraveq0*groteq0
    Rpole = Req*(1-fratio)
    #gpole=ggraveq*Req**2/Rpole**2.
    #x = tarr*math.pi*a*AU*cos(theta)/P/day+b*sin(theta)
    #y = -1*x*tan(theta)+rsun*Req*b*cos(theta)+rsun*Req*b*sin(theta)*tan(theta)
    x = phase*2.*math.pi*a*AU*cos(theta)-Rpole*rsun*b*sin(theta)
    #y = -1*x*tan(theta)+rsun*Rpole*b*cos(theta)+rsun*Rpole*b*sin(theta)*tan(theta)
    y = -phase*2.*math.pi*a*AU*sin(theta)+rsun*Rpole*b*cos(theta)
    #x = x/(rsun*Req)
    #y = y/(rsun*Req)
    x = x/(rsun)
    y = y/(rsun)
    #print x,y
    #print phi,fratio,ggraveq,groteq
    g = Zeipel.cal_geff(x,y,fratio,phi,Req,ggraveq0,groteq0)
    #g = Zeipel.cal_geff(x,y,fratio,phi,1.,1,groteq/ggraveq)
    #g0 = Zeipel.cal_geff(0,0,fratio,phi,1.,ggraveq,groteq)
   
    def func(x,y):
        #x,y is r, theta
        x0 = x*cos(y)
        y0 = x*sin(y)
        #print x0,y0
        g = Zeipel.cal_geff(x0,y0,fratio,phi,Req,ggraveq0,groteq0)
        #g = Zeipel.cal_geff(x0,y0,fratio,phi,1.0,1.0,groteq/ggraveq)
        return g**(4.*beta)
    #F0 = dblquad(lambda x,y: x*f(x,y),0,2.*np.pi,lambda x: 0,lambda x: 1.0)
    F0 = dblquad(lambda x,y: x*func(x,y),0,2.*np.pi,lambda x: 0,lambda x: Req)
    feff = 1- ((1-fratio)**2.*np.cos(phi)**2.+np.sin(phi)**2.)**0.5

    F = (g)**(4.*beta)/(F0[0]/np.pi/Req**2.*(1-feff))
    #F = (g/gpole)**(4.*beta)
    
    #model = (model-max(model))*(1-fratio_i)*F+1
    
    #model = (circularflux-max(circularflux))*(1-fratio)*F+1
    model = (circularflux-max(circularflux))*F+1
    #print F
    #model = circularflux
    #model = (circularflux-max(circularflux))*F+1
    #plt.plot(phi,circularflux)
    #plt.show()

    return model
Beispiel #19
0
def testgd(b,phi,theta):
    #phi and theta should be in radiant
    
    #parameters match Barnes 2009
    rp = 0.1
    a = 0.05
    P = 3.04
    beta = 0.19
    fratio = 0.1947
    Ms = 1.8
    Req = 2.029
    #Req = 1.0
    Rpole = Req*(1-fratio)
    Tpole = 8450
    u1 = 0.32; u2 = 0.32
    Protot = 8.2 
   
    #derived parameters and compute circular flux
    inc = np.arccos(Rpole*b*rsun/a/AU)
    tarr = -10000+np.arange(1000)/1000.*20000.
    t0 = 0.
    phase = (tarr-t0)/P/day
    sma = a*AU*np.sin(inc)/Req/rsun
    #print sma
    z=sma*np.sqrt(np.sin(phase*2*np.pi)*np.sin(phase*2*np.pi)+np.cos(phase*2*np.pi)*np.cos(phase*2*np.pi)*cos(inc)*cos(inc));
    circularflux = occultquad(z,u1,u2,rp/Req)[0]

    #derived parameters for gravity darkening bit 
    G_MRsun_hour = 4*math.pi**2*(1.5e3/7)**3./(365.*24.)**2
    Omega = 2*math.pi/Protot

    ggraveq0 = G_MRsun_hour*Ms/Req**2.
    groteq0 = Omega**2.*Req
    gpole = ggraveq0*Req**2./Rpole**2.
    w = (groteq0/ggraveq0)**0.5
    fratio = 1.-(1./(0.5*w**2.+1))

    #inite a gravity darkening model using Zeipel 
    #Warning, use beta to init Zeipel, instead of y; F = g**(4*beta)
    gdmodel = Lara(fratio,phi,Req,ggraveq0,groteq0)
    F = np.zeros(len(phase))
    Rpole = Req*(1-fratio)

    #use Zeiple to compute the flux correction for a transit
    #Warning, a is the semimajor axis in units of AU/rsun, instead of rstar;
    #input b*Rpole(in rsun,see above) instead of b
    gdmodel.Cal_F(phase,F,theta,a*AU/rsun,b*Rpole)
    
    F0 = np.array([0.])
    #use Zeiple to compute the total Flux, integrated along line of sight
    gdmodel.Cal_F0(F0)
    #the ratio of total Flux compare to use the Teff at pole 
    F0ratio = F0/(np.pi*Req**2.)
    print 'total Flux ratio along line of sight compare to piReq^2Tpole^4',F0ratio
    #use Zeiple to compute the luminosity, integrated over the 3-d luminosity
    lum = gdmodel.Cal_Lum()
    #the ratio of total lum compare to use the Teff at pole 
    lumratio = lum/(4.*np.pi*Req**2.)  
    print 'total luminosity compare to 4piReq^2Tpole^4',lumratio
    #print lum/gpole**(4.*beta)/(4./3*np.pi*Req**3.)
    #correct the circular model
    model = (circularflux-max(circularflux))*F+1

    return model
Beispiel #20
0
def trangen(time,mag,transit,lcflag=0):
    '''functions to generate fake lightcurves'''
    rmean = math.sqrt(transit.dip)
    print rmean,transit.q*transit.P*24.
    f = transit.f
    #inc = transit.inc*math.pi/180.
    #alpha = transit.alpha*np.pi/180.
    transit.calLD()
    u1 = transit.u1
    u2 = transit.u2
    alpha = transit.alpha
    sma = transit.sma
    inc = transit.inc
    req = rmean/math.sqrt(1-f)
    rpol = math.sqrt(1-f)*rmean
    print sma,transit.P,transit.u1,transit.u2,transit.epoch,transit.q,transit.qg,rpol
    ntran=int((max(time)-transit.epoch)/transit.P)-int((min(time)-transit.epoch)/transit.P)+1
    
       
    tranwidth=transit.q*transit.P/2.
    #print req,rpol,alpha,transit.sma,transit.inc,transit.u1,transit.u2
    #obl = Obl.Oblateness(req,rpol,alpha,transit.sma,transit.inc,transit.u1,transit.u2)
    totalFlux = np.pi*(1.0-u1/3-u2/6)
    intran = gentran(time,transit.P,transit.epoch,transit.q)
    medianmag=np.median(mag[-intran])
    transit.stdmag = 0.0012*np.sqrt(2.)
    if transit.stdmag==-1:
        stdmag=np.std(mag[-intran])
    else:
        stdmag=transit.stdmag
    #print stdmag/np.sqrt(2.)
    stdmag/=np.sqrt(2.)
    print stdmag
    #print rpol,medianmag
    phase = (time-transit.epoch)/transit.P-((time-transit.epoch)/transit.P).astype(int)

    ind = phase>0.5
    phase[ind]-=1.0
    fkmag=medianmag+np.random.randn(len(time))*stdmag
    
    if(lcflag==0):
        #initial short cadence data
        fktime = time
        fkmagsc=medianmag+np.random.randn(len(fktime))*stdmag
        #print 'doing sc stuff' 
        #initial short cadence pahse
        fkintran = gentran(fktime,transit.P,transit.epoch,transit.q) 
        fkphase = abs((fktime-transit.epoch)/transit.P)-(abs((fktime-transit.epoch)/transit.P)).astype(int)
        ind = fkphase>0.5
        fkphase[ind]-=1.0
        z=sma*np.sqrt(np.sin(fkphase*2*np.pi)*np.sin(fkphase*2*np.pi)+np.cos(fkphase*2*np.pi)*np.cos(fkphase*2*np.pi)*np.cos(inc)*np.cos(inc))
        
        #compute corrections
        #fkdflux = np.zeros(len(fktime))
        fkdflux = np.zeros(len(fktime[fkintran]))
        obl.relativeFlux(fkphase[fkintran],fkdflux)
        #obl.relativeFlux(fkphase,fkdflux)
        #print (fkdflux==0).all()
        #return
        #print fkphase[fkintran]
        #fkdflux/=totalFlux
        circularfluxmean = occultquad(z,u1,u2,rmean)[0]
        #circularfluxmean = 1-(1-circularfluxmean)/(totalFlux/np.pi)
        circularflux = occultquad(z,u1,u2,rpol)[0]
        circularflux[fkintran]-=fkdflux/totalFlux
        #circularflux = 1-(1-circularflux)/(totalFlux/np.pi)
        index = np.cos(fkphase*2*np.pi)<0
        circularflux[index]=1.0
        circularfluxmean[index]=1.0
        
        #fkmagsc[fkintran] = medianmag
        #fkmagsc[fkintran]+=1-(circularflux[fkintran]-fkdflux)
        #print fkdflux
        circularmag = fluxtomag(circularflux)
        circularmagmean = fluxtomag(circularfluxmean)
        #plt.plot(phase[fkintran],circularmag[fkintran])
        #plt.show()
        fkmag = fkmagsc+circularmag
        circularfluxmean=circularmagmean+fkmagsc
        #circularmagmean=circularmagmean+fkmagsc
        #ax.plot(fkphase[fkintran],residual[fkintran],'r') 
        #ax.plot(fkphase[fkintran],fkmagsc[fkintran],'r') 
        #ax.set_xlim([-0.01,0.01])
        #plt.show()

    else:
        #dflux = np.zeros(len(time[intran]))
        #obl.relativeFlux(phase[intran],dflux)
        #dflux/=totalFlux
        z=sma*np.sqrt(np.sin(phase*2*np.pi)*np.sin(phase*2*np.pi)+np.cos(phase*2*np.pi)*np.cos(phase*2*np.pi)*np.cos(inc)*np.cos(inc))
    
        circularflux = occultquad(z,u1,u2,rpol)[0]
    
        index = np.cos(phase*2*np.pi)<0
        circularflux[index]=1.0
    
        circularfluxmean,check = occultquad(z,u1,u2,rmean)
        circularfluxmean[index]=1.0
        
        #circularflux = 1-(1-circularflux)/(totalFlux/np.pi)
        #circularfluxmean = 1-(1-circularfluxmean)/(totalFlux/np.pi)
        #ax.plot(phase[intran],circularfluxmean[intran],'r')
        #ax.plot(phase[intran],(circularfluxmean[intran]-circularflux[intran]+dflux)/1.e-6,'r')
        #ax.set_xlim([-0.01,0.01])
        #plt.show()
        fkmag = mag
        print len(circularflux[intran])
        #fkmag[intran] = medianmag+np.random.randn(len(fkmag[intran]))*stdmag
        #fkmag[intran]+=1-(circularflux[intran]-dflux)
        fkmag[intran]+=1-(circularflux[intran])
        circularfluxmean=1-circularfluxmean+medianmag
        #+np.random.randn(len(fkmag))*stdmag
    #ax.plot(phase[intran],(-circularfluxmean[intran]+fkmag[intran])/1.e-6,'o',mec='b',mfc='None',ms=1.5,mew=1)
    #ax.set_xlabel('phase')
    #ax.set_ylabel('residual(ppm)')
    #plt.show()
    #fig=plt.figure()
    #ax = fig.add_subplot(111)
    #ax.plot(phase[intran]*transit.P*24.,circularfluxmean[intran],'o',mec='b',mfc='None',ms=1.5,mew=1)
    #ax.plot(phase[intran]*transit.P*24.,fkmag[intran],'.',mec='r')
    #ax.plot(phase[intran],-circularfluxmean[intran]+mag[intran],'o',mec='b',mfc='None',ms=1.5,mew=1)
    #ax.set_xlabel('phase')
    #ax.set_ylabel('relativemag(ppm)')
    #yformatter = matplotlib.ticker.ScalarFormatter(useOffset=False)
    #ax.yaxis.set_major_formatter(yformatter)
    #plt.show()
    #fig=plt.figure()
    #ax = fig.add_subplot(111)
    #ax.plot(phase[intran],-circularfluxmean[intran]+mag[intran]+medianmag+1-(circularflux[intran]-dflux),'o',mec='b',mfc='None',ms=1.5,mew=1)
    #ax.set_xlabel('phase')
    #ax.set_ylabel('relativemag(ppm)')
    #plt.show()
     
    return [phase,fkmag,circularfluxmean]