Exemple #1
0
    def __init__(self, VS):
        MyLogger.setSilent(["ClassJones", "ClassLOFARBeam"])
        self.VS = VS

        self.GD = copy.deepcopy(self.VS.GD)
        self.DoCentralNorm = self.GD["Beam"]["CenterNorm"]
        self.SmoothBeam = None
        self.CheckCache()
        if self.CacheValid:
            MyLogger.setLoud(["ClassJones", "ClassLOFARBeam"])
            return

        #self.GD["Beam"]["CenterNorm"]=0

        self.ListMS = self.VS.ListMS
        self.MS = self.ListMS[0]
        rac, decc = self.MS.radec
        self.CoordMachine = ModCoord.ClassCoordConv(rac, decc)
        self.CalcGrid()
        #self.Padding=Padding

        #self.SumJJsq=np.zeros((self.npix,self.npix,self.MS.Nchan),np.float64)
        #self.SumWsq=np.zeros((1,self.MS.Nchan),np.float64)

        self.StackedBeamDict = shared_dict.create("StackedBeamDict")
        for iDir in range(self.NDir):
            sd = self.StackedBeamDict.addSubdict(iDir)
            sd.addSharedArray("SumJJsq", (self.VS.NFreqBands, ), np.float64)
            sd.addSharedArray("SumWsq", (self.VS.NFreqBands, ), np.float64)

        self.DicoJonesMachine = {}
        for iMS, MS in enumerate(self.ListMS):
            JonesMachine = ClassJones.ClassJones(self.GD, MS,
                                                 self.VS.FacetMachine)
            JonesMachine.InitBeamMachine()
            self.DicoJonesMachine[iMS] = JonesMachine
        MyLogger.setLoud(["ClassJones", "ClassLOFARBeam"])
Exemple #2
0
    def StackBeam(self, ThisMSData, iDir):
        self.StackedBeamDict.reload()
        MyLogger.setSilent("ClassJones")
        Dt = self.GD["Beam"]["DtBeamMin"] * 60.
        JonesMachine = self.DicoJonesMachine[ThisMSData["iMS"]]
        RAs, DECs = self.radec

        times = ThisMSData["times"]
        A0 = ThisMSData["A0"]
        A1 = ThisMSData["A1"]
        flags = ThisMSData["flags"]
        W = ThisMSData["Weights"]
        ChanToFreqBand = ThisMSData["ChanMapping"]
        beam_times = np.array(
            JonesMachine.BeamMachine.getBeamSampleTimes(times, quiet=True))

        T2 = ClassTimeIt.ClassTimeIt()
        T2.disable()
        CurrentBeamITime = -1
        # #print "  Estimate beam in %i directions"%(RAs.size)
        # MS=self.ListMS[ThisMSData["iMS"]]
        # JonesMachine=ClassJones.ClassJones(self.GD,MS,self.VS.FacetMachine)
        # JonesMachine.InitBeamMachine()
        DicoBeam = JonesMachine.EstimateBeam(beam_times,
                                             RAs[iDir:iDir + 1],
                                             DECs[iDir:iDir + 1],
                                             progressBar=False,
                                             quiet=True)
        T2.timeit("GetBeam 1")
        #DicoBeam=JonesMachine.EstimateBeam(beam_times, RAs[0:10], DECs[0:10],progressBar=False)
        #T2.timeit("GetBeam 10")
        #print DicoBeam["Jones"].shape
        NTRange = DicoBeam["t0"].size
        #pBAR= ProgressBar(Title="      Mean Beam")
        #pBAR.render(0, '%4i/%i' % (0,NTRange))
        T = ClassTimeIt.ClassTimeIt("Stacking")
        T.disable()

        # DicoBeam["Jones"].shape = nt, nd, na, nch, _, _

        for iTRange in range(DicoBeam["t0"].size):

            t0 = DicoBeam["t0"][iTRange]
            t1 = DicoBeam["t1"][iTRange]
            J = np.abs(DicoBeam["Jones"][iTRange])
            ind = np.where((times >= t0) & (times < t1))[0]
            T.timeit("0")
            A0s = A0[ind]
            A1s = A1[ind]
            fs = flags[ind]
            Ws = W[ind]
            MSnchan = Ws.shape[1]
            T.timeit("1")

            nd, na, nch, _, _ = J.shape

            # ######################
            # This call is slow
            J0 = J[:, A0s, :, :, :]
            J1 = J[:, A1s, :, :, :]
            T.timeit("2")
            # ######################

            # J0=np.zeros((nd,A0s.size,nch,2,2),dtype=J.dtype)
            # #T.timeit("1a")
            # J0List=[J[:,A0s[i],:,:,:] for i in range(A0s.size)]
            # #T.timeit("1b")
            # J1=np.zeros((nd,A0s.size,nch,2,2),dtype=J.dtype)
            # #T.timeit("1c")
            # J1List=[J[:,A1s[i],:,:,:] for i in range(A0s.size)]
            # #T.timeit("1d")
            # for i in range(A0s.size):
            #     J0[:,i,:,:,:]=J0List[i]
            #     J1[:,i,:,:,:]=J1List[i]
            # T.timeit("2b")

            JJ = (J0[:, :, :, 0, 0] * J1[:, :, :, 0, 0] +
                  J0[:, :, :, 1, 1] * J1[:, :, :, 1, 1]) / 2.
            T.timeit("3")

            WW = Ws**2
            T.timeit("4")
            WW = WW.reshape((1, ind.size, MSnchan))
            T.timeit("5")
            JJsq = WW * JJ**2
            T.timeit("6")

            SumWsqThisRange = np.sum(JJsq, axis=1)
            T.timeit("7")

            #self.SumJJsq+=SumWsqThisRange.reshape((self.npix,self.npix,self.MS.Nchan))
            #T.timeit("8")
            SumWsq = np.sum(WW, axis=1)
            #self.SumWsq+=SumWsq

            for iBand in range(self.VS.NFreqBands):
                indFreqBand, = np.where(ChanToFreqBand == iBand)
                if indFreqBand.size == 0: continue
                self.StackedBeamDict[iDir]["SumJJsq"][iBand] += np.sum(
                    SumWsqThisRange.reshape((MSnchan, ))[indFreqBand])
                self.StackedBeamDict[iDir]["SumWsq"][iBand] += np.sum(
                    SumWsq.reshape((MSnchan, ))[indFreqBand])

            #print SumWsq,self.SumWsq,self.SumJJsq.shape,J0.shape
            T.timeit("9")

            #NDone = iTRange+1
            #intPercent = int(100 * NDone / float(NTRange))
            #pBAR.render(intPercent, '%4i/%i' % (NDone, NTRange))

        T2.timeit("Stack")
        MyLogger.setLoud("ClassJones")