示例#1
0
    def gettruedailybaseline(self,maxadc=None,corr=None):
        dataarray = []
        nrofday = int((self.time[-1] - self.time[0])/(24*60*60))
        firstday = utils.tstamptodatetime(self.time[0])
        lastday = utils.tstamptodatetime(self.time[-1])
        firstday = datetime.datetime(firstday.year,firstday.month,firstday.day,0,0,0)
        hour = 0
        minute = 0      
        length = 216
        for d in range(0,nrofday,1):
            t0 = firstday + datetime.timedelta(days=d)
            t1 = firstday + datetime.timedelta(days=d+1)
            t0 = utils.datettotimestamp(t0)
            t1 = utils.datettotimestamp(t1)
            daydata = self.getnewdataset(t0,t1)
            if len(daydata.radio)== length and len(daydata.tempLL)== length: 
                dataarray.append(daydata)
        count = 0
        truebls = []
        truetemps = []
        radtemp = []
        #produce fake signal
        if maxadc!=None:
            time = np.linspace(0,24,length)
            a = maxadc
            b = 17
            c = 2
            sig = utils.gauss(time,a,b,c)
        for dat in dataarray:
            rt = radiotemp.Radiotemp()
            if corr == None or corr==True:
                radiodata = dat.radioc
#                print 'dat.radio = ', dat.radio
                rt.corr = True
            else:
                radiodata = dat.radio
                rt.corr = False
            truebl = radiodata
            if maxadc!=None:
                truebl = truebl - sig
            truetemps.append(dat.tempLL)
            rt.radio = truebl
            rt.temp = dat.tempLL
            rt.date = dat.date
#            print 'rt.date = ' , rt.date
            radtemp.append(rt)
        return radtemp
示例#2
0
    def getXYdata(self,x,y,date1=None,date2=None):
        if date1 is None and date2 is None:
            xdata = self.data[x]
            ydata = self.data[y]
        elif date2 is None or date1 is None:
            date1 = utils.datestringtodate(date1)
            xdata = self.data[x][(self.data.Time > date1)]
            ydata = self.data[y][(self.data.Time > date1)]
        else:
            date1 = utils.datestringtodate(date1)
            date2 = utils.datestringtodate(date2)
            print type(date1)
            date1ts = utils.datettotimestamp(date1)
            date2ts = utils.datettotimestamp(date2)
            xdata = self.data[x][(self.data.Time > date1ts) & (self.data.Time < date2ts)]
            ydata = self.data[y][(self.data.Time > date1ts) & (self.data.Time < date2ts)]

        return [xdata,ydata]
示例#3
0
 def getfulldays(self):
     nrofday = int((self.time[-1] - self.time[0])/(24*60*60))
     firstday = utils.tstamptodatetime(self.time[0])
     lastday = utils.tstamptodatetime(self.time[-1])
     firstday = datetime.datetime(firstday.year,firstday.month,firstday.day,0,0,0)
     hour = 0
     minute = 0      
     length = 216
     days = []
     for d in range(0,nrofday,1):
         t0date = firstday + datetime.timedelta(days=d)
         t1date = firstday + datetime.timedelta(days=d+1)
         
         t0 = utils.datettotimestamp(t0date)
         t1 = utils.datettotimestamp(t1date)
         daydata = self.getnewdataset(t0,t1)
         if len(daydata.radio)== length and len(daydata.tempLL)== length: 
             days.append(t0date)
     return days
示例#4
0
#                beftransfo = ttime.time()
                newpos = utils.transformsunpos(pos[0],pos[1])
                newpos = utils.transformtrajectory(newpos[0],newpos[1],ant.rotationmatrix)
#                aftertransfo = ttime.time()
#                print 'transfi =  ', aftertransfo - beftransfo
            max = -10
            daytemp = np.array([])
            hourarray = np.array([])
            timearray = np.array([])
            for t,p,s in zip(newpos[0],newpos[1],sec):
                aeff = ant.getaeff(t,p)
                [h,m,s] = utils.secondinday(s)
                time = datetime.datetime(date.year,date.month,date.day,h,m,s)
                timearray = np.append(timearray,time)
                hourarray = np.append(hourarray,time.hour)
                dateutc = utils.datettotimestamp(time) + 3*60*60
                timeutc = utils.tstamptodatetime(dateutc)
#                yeardate = np.append(yeardate,timeutc)
                temp = polfactor*utils.sfutoSI(totsunflux)*aeff/1.38e-23
#                yeartemp = np.append(yeartemp,temp)
                daytemp = np.append(daytemp,temp)
            if detector == 'norsat':
                filename = folder + str(constant.GDstationidbyname[stname]) + '/exptemp_' + stname + '_' + str(delt) + '_' + str(delp) + '_' + str(y) + '_' + str(d) + '.txt'
#                print filename

            elif detector == 'helix':
                filename = folder + str(constant.Helixstationidbyname[stname]) + '/exptemp_' + stname + '_' + str(delt) + '_' + str(delp) + '_' + str(y) + '_' + str(d) + '.txt'
            f = open(filename,'w')
#            befwriting = ttime.time()
            for t,temp  in zip(timearray,daytemp):
                f.write(str(t.hour) +  ' ' + str(t.minute) + ' ' + str(temp) + '\n') 
示例#5
0
    def getfakedailybaseline(self,typeofbl=None,maxadc=None,corr=None):
        #        self.tempcorrection(1)
        dataarray = []
        nrofday = int((self.time[-1] - self.time[0])/(24*60*60))
        firstday = utils.tstamptodatetime(self.time[0])
        lastday = utils.tstamptodatetime(self.time[-1])
        firstday = datetime.datetime(firstday.year,firstday.month,firstday.day,0,0,0)
        hour = 0
        minute = 0      
        for d in range(0,nrofday,1):
            t0 = firstday + datetime.timedelta(days=d)
            t1 = firstday + datetime.timedelta(days=d+1)
            t0 = utils.datettotimestamp(t0)
            t1 = utils.datettotimestamp(t1)
            daydata = self.getnewdataset(t0,t1)
            if len(daydata.radio) > 215: 
                dataarray.append(daydata)

        sizeofdat = len(dataarray)
        maxlen = 216 # maximum nr of point in one day (1 point every 400s)
        # 1) create a average spectrum
        maxfreq = np.fft.rfftfreq(maxlen,400)
        specarray = np.ndarray(shape= (len(dataarray), len(maxfreq) ) )
        phasearray =np.ndarray(shape= (len(dataarray), len(maxfreq) ) )
        count = 0        
        for dat in dataarray:
            if corr == None or corr==True:
                radiodata = dat.radioc
            else:
                radiodata = dat.radio
            fft = np.fft.rfft(radiodata)
            spec = np.absolute(fft)
            phase = np.angle(fft)
            freq = np.fft.rfftfreq(len(radiodata),400)
            spec = np.interp(maxfreq,freq,spec)
            phase = np.interp(maxfreq,freq,phase)
            specarray[count] = spec
            phasearray[count] = phase
            count +=1
        meanspec = np.mean(specarray,axis=0)
        stdspec = np.std(specarray,axis=0)
        # we set the number of possible baseline as the possible combination 
        # of spectrum/phase from real data
        nrfake = sizeofdat*sizeofdat    
        # we have implemented two possibilities to produce fake baseline:
        # - either we draw a random spectrum around the mean spectrum and then 
        # assume one of the phase of the data
        # -  either we combine one spectrum with one phase.
        # 2) draw random spectrum:
        radtemp = []
        fakebls = []
        random = False
        combine = False
        if typeofbl.lower()=='random':
            for i in range(nrfake):
                fakespec = np.array([])
                for m,s in zip(meanspec,stdspec):
                    specpoint = np.random.normal(m,s)
                    fakespec = np.append(fakespec,specpoint)
                phaseindex = int(np.random.uniform(0,sizeofdat))
                fakephase = phasearray[phaseindex]
                fakefft = fakespec*np.exp(1J*fakephase)
                fakebl = np.fft.irfft(fakefft)
                fakebls.append(fakebl)
        # 3) draw a particular phase
        elif typeofbl.lower() == 'combine' or typeofbl==None:
            for i in range(sizeofdat):
                specindex = i
                for j in range(i, i+sizeofdat):
                    phaseindex = j%sizeofdat
                    fakespec = specarray[specindex]
                    fakephase = phasearray[phaseindex]
                    fakefft = fakespec*np.exp(1J*fakephase)
                    fakebl = np.fft.irfft(fakefft)
                    fakebls.append(fakebl)
        if maxadc == None:
            maxadc = 0
        #produce fake signal
        time = np.linspace(0,24,len(fakebls[0]))
        a = maxadc
        b = 17
        c = 2
        sig = utils.gauss(time,a,b,c)
        count = 0 
        for bl in fakebls:
            rt = radiotemp.Radiotemp()
            bl = bl - sig
            fakebls[count] = bl
            rt.radio  = bl
            rt.corr  = corr
            radtemp.append(rt)
            count +=1
        return radtemp