diff --git a/CEP/Calibration/ExpIon/src/MMionosphere.py b/CEP/Calibration/ExpIon/src/MMionosphere.py index 7174c7fa220792f209f4a5f8bfaa1d0bd47f4564..ec7a6c8fddc8784ffa4d28a71e6d702136bddbd2 100755 --- a/CEP/Calibration/ExpIon/src/MMionosphere.py +++ b/CEP/Calibration/ExpIon/src/MMionosphere.py @@ -142,7 +142,49 @@ class IonosphericModel: piercepoints_row.append() self.piercepoints.flush() p.finished() + + + def calculate_Sage_piercepoints(self, sage_group=0,time_steps = [], station_select=[],height = 200.e3): + if ( len( time_steps ) == 0 ): + n_list = range( self.times.shape[0] ) + else: + n_list = time_steps + self.sage_n_list = n_list + if 'sage%d_n_list'%sage_group in self.hdf5.root: self.hdf5.removeNode('\sage%d_n_list'%sage_group) + self.hdf5.createArray(self.hdf5.root, 'sage%d_n_list'%sage_group, self.sage_n_list) + if ( len( station_select ) == 0 ): + stat_select = range( self.stations[:].shape[0] ) + else: + stat_select = station_select + self.sage_stat_select = stat_select + if 'sage%d_stat_select'%sage_group in self.hdf5.root: self.hdf5.removeNode('\sage%d_stat_select'%sage_group) + self.hdf5.createArray(self.hdf5.root,'sage%d_stat_select'%sage_group, self.sage_stat_select) + + + self.sage_height = height + + N_stations=len(stat_select) + if 'sage%d_piercepoints'%sage_group in self.hdf5.root: self.hdf5.removeNode('\sage%d_piercepoints'%sage_group) + description = {'positions':tables.Float64Col((self.N_sources, N_stations,2)), \ + 'positions_xyz':tables.Float64Col((self.N_sources, N_stations,3)), \ + 'zenith_angles':tables.Float64Col((self.N_sources, N_stations))} + self.sage_piercepoints = self.hdf5.createTable(self.hdf5.root,'sage%d_piercepoints'%sage_group, description) + self.sage_piercepoints.attrs.height = self.sage_height + piercepoints_row = self.sage_piercepoints.row + source_positions=self.hdf5.getNode('sage_radec%d'%sage_group)[:] + p = ProgressBar(len(n_list), "Calculating piercepoints: ") + for (n, counter) in zip(n_list, range(len(n_list))): + p.update(counter) + piercepoints=PosTools.getPiercePoints(self.times[n],source_positions,self.station_positions[:][self.stat_select[:]],height=self.sage_height) + #piercepoints = PiercePoints( self.times[ n ], self.pointing, self.array_center, self.source_positions, self.station_positions[:][self.stat_select[:]], height = self.height ) + piercepoints_row['positions'] = piercepoints.positions + piercepoints_row['positions_xyz'] = piercepoints.positions_xyz + piercepoints_row['zenith_angles'] = piercepoints.zenith_angles + piercepoints_row.append() + self.sage_piercepoints.flush() + p.finished() + def calculate_basevectors(self, order = 15, beta = 5. / 3., r_0 = 1.): self.order = order self.beta = beta @@ -226,8 +268,8 @@ class IonosphericModel: if 'offsets' in self.hdf5.root: self.hdf5.root.offsets.remove() self.hdf5.createArray(self.hdf5.root, 'offsets', self.offsets) - def get_TEC_pp(self,radec,pol=0): - TEC_out=[] + def get_TEC_pp(self,radec,pol=0,new_stat_select=None): + TEC_out=[] N_stations = len(self.stat_select[:]) N_sources = len(self.sources) N_piercepoints = N_stations * N_sources @@ -237,10 +279,12 @@ class IonosphericModel: pp_out=[] am_out=[] TEC_out=[] - stations=self.station_positions[:][self.stat_select[:]] + stations=self.station_positions[:] + if not (new_stat_select is None): + stations=stations[new_stat_select] for i in range(len(self.n_list)) : if i%10==0: - sys.stdout.write(str(itm)+'...') + sys.stdout.write(str(i)+'...') sys.stdout.flush() time=self.times[i] piercepoints=PosTools.getPiercePoints(time,radec.reshape((1,-1)),stations,height=h) @@ -252,7 +296,7 @@ class IonosphericModel: #v=self.TECfit_white[ i, :, : ,pol][self.stat_select[:]].reshape((N_piercepoints,1)) v=self.TECfit_white[ i, :, : ,pol][self.stat_select[:]].reshape((N_piercepoints,1)) tecs=[] - for ist in range(self.stat_select.shape[0]): + for ist in range(stations.shape[0]): tecs.append(get_interpolated_TEC_white(Xp_table,v,beta,r_0,pp[0,ist])) TEC_out.append(tecs) return np.array(pp_out),np.array(am_out),np.array(TEC_out) diff --git a/CEP/Calibration/ExpIon/src/fitClockTEC.py b/CEP/Calibration/ExpIon/src/fitClockTEC.py index d319e623676f72593f176df0d1a049c50794fa4f..a1820cb9629f10fe2a3e1c5fe31d14741b217e35 100644 --- a/CEP/Calibration/ExpIon/src/fitClockTEC.py +++ b/CEP/Calibration/ExpIon/src/fitClockTEC.py @@ -538,8 +538,12 @@ def getAll(ionmodel,refstIdx=0,doClockTEC=True,doRM=False,add_to_h5=True,station ampdata=amp[timerange[0]:timerange[1],:,:,0,pol*(polshape-1)][:,SBselect][:,:,stationIndices] if hasattr(ionmodel,'TEC') and initFromPrevious: initSol=np.zeros((len(stations),2),dtype=np.float) - initSol[:,0]=ionmodel.TEC[:][timerange[0],stationIndices,pol] + if len(ionmodel.TEC.shape)>3: + initSol[:,0]=ionmodel.TEC[:][timerange[0],stationIndices,0,pol] + else: + initSol[:,0]=ionmodel.TEC[:][timerange[0],stationIndices,pol] initSol[:,1]=ionmodel.Clock[:][timerange[0],stationIndices,pol] + phdata+=ionmodel.clock_tec_offsets[:][timerange[0],stationIndices,pol] else: initSol=False diff --git a/CEP/Calibration/ExpIon/src/read_sagecal.py b/CEP/Calibration/ExpIon/src/read_sagecal.py index b0582204f5cf15362393fbccb67d9c8b833ed301..eee4ba0d36563125daffade29f6f9340db110187 100644 --- a/CEP/Calibration/ExpIon/src/read_sagecal.py +++ b/CEP/Calibration/ExpIon/src/read_sagecal.py @@ -199,7 +199,7 @@ def addToH5File(h5file,clusters,freqs,store_intermediate=False): cdata=clusters[clusteridx]['cdata'] pharray[:,:,:,idx,:]=np.angle(cdata) amparray[:,:,:,idx,:]=np.absolute(cdata) - srcarray[idx,:]=np.array([cluster['Ra'],clusters[clusteridx]['Dec']]) + srcarray[idx,:]=np.array([clusters[clusteridx]['Ra'],clusters[clusteridx]['Dec']]) clusters[clusteridx]['cdata']=[] if store_intermediate: call("rm tmp_store_cdata_%d.npy"%(clusteridx),shell=True)