def EstimateBeam(self, TimesBeam, RA, DEC,progressBar=True, quiet=False): TimesBeam = np.float64(np.array(TimesBeam)) T0s = TimesBeam[:-1].copy() T1s = TimesBeam[1:].copy() Tm = (T0s+T1s)/2. # RA,DEC=self.BeamRAs,self.BeamDECs NDir=RA.size DicoBeam={} FreqDomains=self.BeamMachine.getFreqDomains() DicoBeam["VisToJonesChanMapping"]=self.GiveVisToJonesChanMapping(FreqDomains) if not quiet: print>>log,"VisToJonesChanMapping: %s"%DicoBeam["VisToJonesChanMapping"] DicoBeam["Jones"]=np.zeros((Tm.size,NDir,self.MS.na,FreqDomains.shape[0],2,2),dtype=np.complex64) DicoBeam["t0"]=np.zeros((Tm.size,),np.float64) DicoBeam["t1"]=np.zeros((Tm.size,),np.float64) DicoBeam["tm"]=np.zeros((Tm.size,),np.float64) rac,decc=self.MS.OriginalRadec pBAR= ProgressBar(Title=" Init E-Jones ")#, HeaderSize=10,TitleSize=13) if not progressBar: pBAR.disable() pBAR.render(0, Tm.size) for itime in range(Tm.size): DicoBeam["t0"][itime]=T0s[itime] DicoBeam["t1"][itime]=T1s[itime] DicoBeam["tm"][itime]=Tm[itime] ThisTime=Tm[itime] Beam=self.GiveInstrumentBeam(ThisTime,RA,DEC) # if self.GD["Beam"]["CenterNorm"]==1: Beam0=self.GiveInstrumentBeam(ThisTime,np.array([rac]),np.array([decc])) Beam0inv= ModLinAlg.BatchInverse(Beam0) nd,_,_,_,_=Beam.shape Ones=np.ones((nd, 1, 1, 1, 1),np.float32) Beam0inv=Beam0inv*Ones Beam= ModLinAlg.BatchDot(Beam0inv, Beam) DicoBeam["Jones"][itime]=Beam NDone=itime+1 pBAR.render(NDone,Tm.size) DicoBeam["Jones"][itime] = Beam nt, nd, na, nch, _, _ = DicoBeam["Jones"].shape # DicoBeam["Jones"]=np.mean(DicoBeam["Jones"],axis=3).reshape((nt,nd,na,1,2,2)) # print TimesBeam-TimesBeam[0] # print t0-t1 # print DicoBeam["t1"][-1]-DicoBeam["t0"][0] return DicoBeam
def CalcCrossIslandFlux(self, ListIslands): if self.PSFCross is None: self.CalcCrossIslandPSF(ListIslands) NIslands = len(ListIslands) print >> log, " grouping cross contaminating islands..." MaxIslandFlux = np.zeros((NIslands, ), np.float32) DicoIsland = {} Dirty = self.DicoDirty["MeanImage"] for iIsland in range(NIslands): x0, y0 = np.array(ListIslands[iIsland]).T PixVals0 = Dirty[0, 0, x0, y0] MaxIslandFlux[iIsland] = np.max(PixVals0) DicoIsland[iIsland] = ListIslands[iIsland] self.CrossFluxContrib = self.PSFCross * MaxIslandFlux.reshape( (1, NIslands)) self.DicoIsland = DicoIsland NDone = 0 NJobs = NIslands pBAR = ProgressBar(Title=" Group islands") pBAR.disable() pBAR.render(0, NJobs) Th = 0.05 ListIslandMerged = [] self.setCheckedIslands = set([]) for iIsland in range(NIslands): x0, y0 = np.array(ListIslands[iIsland]).T #print "Main %i (%f, %f)"%(iIsland,np.mean(x0),np.mean(y0)) NDone += 1 intPercent = int(100 * NDone / float(NJobs)) pBAR.render(NDone, NJobs) ListIslandMerged.append( list(self.GiveNearbyIsland(iIsland, set([])))) ListIslands = [] for indIsland in ListIslandMerged: if len(indIsland) == 0: continue ThisIsland = DicoIsland[indIsland[0]] for iIsland in indIsland[1::]: ThisIsland += DicoIsland[iIsland] ListIslands.append(ThisIsland) print >> log, " have grouped %i --> %i islands" % (NIslands, len(ListIslands)) return ListIslands