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
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]
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
# 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')
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