def init_voltage_beams (self):
   """initializes VoltageBeams for the given set of FITS files (per each _vb_key, that is).
   Returns list of 1 or 4 VoltageBeam objects."""
   # maintain a global dict of VoltageBeam objects per each filename set, so that we reuse them
   global _voltage_beams;
   if not '_voltage_beams' in globals():
     _voltage_beams = {};
   # get VoltageBeam object from global dict, or init new one if not already defined
   vbs,beam_max = _voltage_beams.get(self._vb_key,(None,None));
   if not vbs:
     vbs = [];
     for filename_real,filename_imag in self._vb_key:
       # if files do not exist, replace with blanks
       if not ( os.path.exists(filename_real) and os.path.exists(filename_imag) ) and self.missing_is_null:
         filename_real = None;
         print "No beam pattern %s or %s, assuming null beam"%(filename_real,filename_imag);
       # now, create VoltageBeam if at least the real part still exists
       if filename_real:
         vb = LMVoltageBeam(
                 l0=self.l_0,m0=self.m_0,
                 ampl_interpolation=self.ampl_interpolation,spline_order=self.spline_order,
                 verbose=self.verbose);
         vb.read(filename_real,filename_imag);
       else:
         vb = None;
       # work out norm of beam
       vbs.append(vb);
     xx = [ vb.beam() if vb else numpy.array([0]) for vb in vbs[:len(vbs)/2] ];
     yy = [ vb.beam() if vb else numpy.array([0]) for vb in vbs[len(vbs)/2:] ];
     beam_max = math.sqrt(max([ (abs(x)**2+abs(y)**2).max() for x,y in zip(xx,yy)]));
     _voltage_beams[self._vb_key] = vbs,beam_max;
   return vbs,beam_max;
Пример #2
0
 def init_voltage_beams(self):
     """initializes VoltageBeams for the given set of FITS files (per each _vb_key, that is).
 Returns list of 1 or 4 VoltageBeam objects."""
     # maintain a global dict of VoltageBeam objects per each filename set, so that we reuse them
     global _voltage_beams
     if not '_voltage_beams' in globals():
         _voltage_beams = {}
     # get VoltageBeam object from global dict, or init new one if not already defined
     vbs, beam_max = _voltage_beams.get(self._vb_key, (None, None))
     if not vbs:
         vbs = []
         for filename_real, filename_imag in self._vb_key:
             # if files do not exist, replace with blanks
             if not (os.path.exists(filename_real) and os.path.exists(
                     filename_imag)) and self.missing_is_null:
                 filename_real = None
                 print("No beam pattern %s or %s, assuming null beam" %
                       (filename_real, filename_imag))
             # now, create VoltageBeam if at least the real part still exists
             if filename_real:
                 vb = LMVoltageBeam(
                     l0=self.l_0,
                     m0=self.m_0,
                     ampl_interpolation=self.ampl_interpolation,
                     spline_order=self.spline_order,
                     verbose=self.verbose)
                 vb.read(filename_real, filename_imag)
             else:
                 vb = None
             # work out norm of beam
             vbs.append(vb)
         xx = [
             vb.beam() if vb else numpy.array([0])
             for vb in vbs[:len(vbs) // 2]
         ]
         yy = [
             vb.beam() if vb else numpy.array([0])
             for vb in vbs[len(vbs) // 2:]
         ]
         beam_max = math.sqrt(
             max([(abs(x)**2 + abs(y)**2).max() for x, y in zip(xx, yy)]))
         _voltage_beams[self._vb_key] = vbs, beam_max
     return vbs, beam_max
        # make vells and return result
        vellsets.append(meq.vellset(vells));
    # create result object
    cells = request.cells if hasfreq else getattr(lm,'cells',None);
    result = meq.result(vellsets[0],cells=cells);
    result.vellsets[1:] = vellsets[1:];
    result.dims = (2,len(vellsets)/2);
    return result;



# test clause
if __name__ == "__main__":
  _verbosity.set_verbose(5);

  vb = LMVoltageBeam(spline_order=3);
  vb.read("beam_xx_re.fits","beam_xx_im.fits");

  l0 = numpy.array([-2,-1,0,1,2])*DEG;
  l = numpy.vstack([l0]*len(l0));

  print vb.interpolate(l,l.T);

  vb = LMVoltageBeam(spline_order=3);
  vb.read("XX_0_Re.fits","XX_0_Im.fits");

  l0 = numpy.array([-4,-2,0,2,4])*DEG;
  l = numpy.vstack([l0]*len(l0));

  a = vb.interpolate(l,l.T,freq=[1e+9],freqaxis=2);
  b = vb.interpolate(l,l.T,freq=[1e+9,1.1e+9,1.2e+9],freqaxis=2);
Пример #4
0
                vells[...] = beam[...]
                # make vells and return result
                vellsets.append(meq.vellset(vells))
        # create result object
        cells = request.cells if hasfreq else getattr(lm, 'cells', None)
        result = meq.result(vellsets[0], cells=cells)
        result.vellsets[1:] = vellsets[1:]
        result.dims = (2, len(vellsets) // 2)
        return result


# test clause
if __name__ == "__main__":
    _verbosity.set_verbose(5)

    vb = LMVoltageBeam(spline_order=3)
    vb.read("beam_xx_re.fits", "beam_xx_im.fits")

    l0 = numpy.array([-2, -1, 0, 1, 2]) * DEG
    l = numpy.vstack([l0] * len(l0))

    print(vb.interpolate(l, l.T))

    vb = LMVoltageBeam(spline_order=3)
    vb.read("XX_0_Re.fits", "XX_0_Im.fits")

    l0 = numpy.array([-4, -2, 0, 2, 4]) * DEG
    l = numpy.vstack([l0] * len(l0))

    a = vb.interpolate(l, l.T, freq=[1e+9], freqaxis=2)
    b = vb.interpolate(l, l.T, freq=[1e+9, 1.1e+9, 1.2e+9], freqaxis=2)