Exemplo n.º 1
0
    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