コード例 #1
0
    def __init__(self,
                 theBank,
                 theMode,
                 theRoach=None,
                 theValon=None,
                 hpc_macs=None,
                 unit_test=False):
        """
        Creates an instance of the vegas internals for the L8LBW firmware.
        """

        #print str(theMode)
        # mode_number may be treated as a constant; the Player will
        # delete this backend object and create a new one on mode
        # change.
        VegasLBWBackend.__init__(self, theBank, theMode, \
                                 theRoach , theValon, hpc_macs, unit_test)

        if 'lbw8' in theMode.backend_name.lower():
            nsubbands = 8
        else:
            nsubbands = 1

        self.nsubbands = nsubbands

        if not self.gain:
            self.gain = [1024] * nsubbands

        # default dependent values, computed from Parameters:
        # a resonable default:
        self.subbandfreq = [convertToMHz(self.frequency / 2) * 1.0e6
                            ] * nsubbands
        self.actual_subband_freq = self.subbandfreq
        # L8 specific parameters
        self.params["subband_freq"] = self._setSubbandFreq
        self.lbwmixer = LBWMixerCalcs(self.frequency)

        self.progdev()
        self.net_config()

        if self.mode.roach_kvpairs:
            self.write_registers(**self.mode.roach_kvpairs)

        self.reset_roach()
        self.clear_switching_states()
        self.add_switching_state(1.0, blank=False, cal=False, sig_ref_1=False)

        self.prepare()
        self.start_hpc()
        self.start_fits_writer()
        self._init_gpu_resources()
コード例 #2
0
    def _setSubbandFreq(self, subbandfreq):
        """
        A list specifying the frequencies for each subband for a given bank.
        Should probably check to verify len(subbandfreq) is consistent with current mode.
        """
        if not isinstance(subbandfreq, list) or len(subbandfreq) not in [1,8]:
            raise Exception("The parameter 'subband_frq_list' " \
                            "must be a list of 1 or 8 frequencies for each bank subband")

        # convert the list of values into Hz
        self.subbandfreq = []

        for subband in range(len(subbandfreq)):
            self.subbandfreq.append(convertToMHz(subbandfreq[subband]) *1e6)
コード例 #3
0
    def _setSubbandFreq(self, subbandfreq):
        """
        A list specifying the frequencies for each subband for a given bank.
        Should probably check to verify len(subbandfreq) is consistent with current mode.
        """
        if not isinstance(subbandfreq, list) or len(subbandfreq) not in [1, 8]:
            raise Exception("The parameter 'subband_frq_list' " \
                            "must be a list of 1 or 8 frequencies for each bank subband")

        # convert the list of values into Hz
        self.subbandfreq = []

        for subband in range(len(subbandfreq)):
            self.subbandfreq.append(convertToMHz(subbandfreq[subband]) * 1e6)
コード例 #4
0
    def __init__(self, theBank, theMode, theRoach=None, theValon=None, hpc_macs=None, unit_test = False):
        """
        Creates an instance of the vegas internals for the L8LBW firmware.
        """

        #print str(theMode)
        # mode_number may be treated as a constant; the Player will
        # delete this backend object and create a new one on mode
        # change.
        VegasLBWBackend.__init__(self, theBank, theMode, \
                                 theRoach , theValon, hpc_macs, unit_test)

        if 'lbw8' in theMode.backend_name.lower():
            nsubbands = 8
        else:
            nsubbands = 1

        self.nsubbands = nsubbands

        if not self.gain:
            self.gain = [ 1024 ] * nsubbands

        # default dependent values, computed from Parameters:
        # a resonable default:
        self.subbandfreq = [ convertToMHz(self.frequency/2) * 1.0e6 ] * nsubbands
        self.actual_subband_freq = self.subbandfreq
        # L8 specific parameters
        self.params["subband_freq" ] = self._setSubbandFreq
        self.lbwmixer = LBWMixerCalcs(self.frequency)

        self.progdev()
        self.net_config()

        if self.mode.roach_kvpairs:
            self.write_registers(**self.mode.roach_kvpairs)

        self.reset_roach()
        self.clear_switching_states()
        self.add_switching_state(1.0, blank = False, cal = False, sig_ref_1 = False)

        self.prepare()
        self.start_hpc()
        self.start_fits_writer()
        self._init_gpu_resources()
コード例 #5
0
 def _sampler_frequency_dep(self):
     """
     Computes the effective frequency of the A/D sampler based on mode
     """
     self.sampler_frequency = convertToMHz(self.frequency) * 1e6 / 4
コード例 #6
0
    def computeSpecTick(self):
        """Returns the spec_tick value for this backend (the LBW value)

        """
        return 1024.0 / (convertToMHz(self.frequency) * 1e6)
コード例 #7
0
    def _set_state_table_keywords(self):
        """
        Gather status sets here
        Not yet sure what to place here...
        """
        print "_set_state_table_keywords() called."
        DEFAULT_VALUE = "unspecified"

        self.set_status(BW_MODE  = DEFAULT_VALUE)
        self.set_status(CAL_DCYC = DEFAULT_VALUE)
        self.set_status(CAL_FREQ = DEFAULT_VALUE)
        self.set_status(CAL_MODE = DEFAULT_VALUE)
        self.set_status(CAL_PHS  = DEFAULT_VALUE)
        self.set_status(CHAN_BW  = DEFAULT_VALUE)

        self.set_status(DATADIR  = DEFAULT_VALUE)
        self.set_status(DATAHOST = DEFAULT_VALUE)
        self.set_status(DATAPORT = DEFAULT_VALUE)
        self.set_status(EFSAMPFR = DEFAULT_VALUE)
        self.set_status(EXPOSURE = DEFAULT_VALUE)
        self.set_status(FILENUM  = DEFAULT_VALUE)
        self.set_status(FPGACLK  = DEFAULT_VALUE)
        self.set_status(HWEXPOSR = DEFAULT_VALUE)
        self.set_status(M_STTMJD = 0)
        self.set_status(M_STTOFF = 0)
        self.set_status(NBITS    = 8)
        self.set_status(NBITSADC = 8)
        self.set_status(NCHAN    = DEFAULT_VALUE)

        self.set_status(NPKT     = DEFAULT_VALUE)
        self.set_status(NPOL     = DEFAULT_VALUE)
        self.set_status(NSUBBAND = DEFAULT_VALUE)
        self.set_status(OBSBW    = DEFAULT_VALUE)

        self.set_status(OBSFREQ  = DEFAULT_VALUE)
        self.set_status(OBSNCHAN = DEFAULT_VALUE)
        self.set_status(OBS_MODE = DEFAULT_VALUE)
        self.set_status(OBSERVER = DEFAULT_VALUE)
        self.set_status(OBSID    = DEFAULT_VALUE)
        self.set_status(PKTFMT   = DEFAULT_VALUE)
        self.set_status(SRC_NAME = DEFAULT_VALUE)
        self.set_status(RA       = DEFAULT_VALUE)
        self.set_status(DEC      = DEFAULT_VALUE)
        self.set_status(RA_STR   = DEFAULT_VALUE)
        self.set_status(DEC_STR  = DEFAULT_VALUE)
        self.set_status(SUB0FREQ = DEFAULT_VALUE)
        self.set_status(SUB1FREQ = DEFAULT_VALUE)
        self.set_status(SUB2FREQ = DEFAULT_VALUE)
        self.set_status(SUB3FREQ = DEFAULT_VALUE)
        self.set_status(SUB4FREQ = DEFAULT_VALUE)
        self.set_status(SUB5FREQ = DEFAULT_VALUE)
        self.set_status(SUB6FREQ = DEFAULT_VALUE)
        self.set_status(SUB7FREQ = DEFAULT_VALUE)
        self.set_status(SWVER    = DEFAULT_VALUE)
        self.set_status(TELESCOP = DEFAULT_VALUE)

        if self.mode.shmkvpairs:
            self.set_status(**self.mode.shmkvpairs)

        # set the switching signal stuff:
        self.set_status(**self._setSSKeys())

        # all the rest...
        self.set_status(OBSERVER = self.observer)
        self.set_status(SRC_NAME = self.source)

        if self.source_ra_dec:
            ra = self.source_ra_dec[0]
            dec = self.source_ra_dec[1]
            self.set_status(RA      = ra.degrees)
            self.set_status(DEC     = dec.degrees)
            self.set_status(RA_STR  = "%02i:%02i:%05.3f" % ra.hms)
            self.set_status(DEC_STR = apw.degreesToString(dec.degrees))

        self.set_status(TELESCOP = self.telescope)

        self.set_status(BOFFILE  = str(self.bof_file))
        self.set_status(CHAN_BW  = str(self.chan_bw))
        self.set_status(EFSAMPFR = str(self.sampler_frequency))
        self.set_status(EXPOSURE = str(self.exposure))
        self.set_status(FPGACLK  = str(self.fpga_clock))
        self.set_status(OBSNCHAN = str(self.nchan))
        self.set_status(HWEXPOSR = str(self.hwexposr))

        self.set_status(OBSBW    = self.obs_bw)
        self.set_status(PKTFMT   = "SPEAD")
        self.set_status(NCHAN    = str(self.nchan))
        self.set_status(NPOL     = str(2))
        self.set_status(NSUBBAND = self.nsubbands)
        # convertToMHz() normalizes the frequency to MHz, just in case
        # it is provided as Hz. So this will work in either case.
        self.set_status(SUB0FREQ = convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB1FREQ = convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB2FREQ = convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB3FREQ = convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB4FREQ = convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB5FREQ = convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB6FREQ = convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB7FREQ = convertToMHz(self.frequency) * 1e6 / 2)

        self.set_status(BASE_BW  = self.filter_bw) # From MODE
        self.set_status(BANKNAM  = self.bank.name if self.bank else 'NOBANK')
        self.set_status(MODENUM  = str(self.mode.name)) # from MODE
        self.set_status(NOISESRC = "OFF")  # TBD??
        self.set_status(NUMPHASE = str(self.nPhases))
        self.set_status(SWPERIOD = str(self.ss.total_duration()))
        self.set_status(SWMASTER = "VEGAS") # TBD
        self.set_status(POLARIZE = self.polarization)
        self.set_status(CRPIX1   = str(self.nchan/2 + 1))
        self.set_status(SWPERINT = str(int(self.exposure \
                                          / self.ss.total_duration() + 0.5)))
        self.set_status(NMSTOKES = str(self.num_stokes))
        # should this get set by Backend?
        self.set_status(DATAHOST = self.datahost)
        self.set_status(DATAPORT = self.dataport)
        self.set_status(DATADIR  = self.dataroot)
        self.set_status(PROJID   = self.projectid)
        self.set_status(SCANLEN  = self.scan_length)
        self.set_status(CAL_FREQ = self.cal_freq)

        for i in range(8):
            self.set_status(**{"_MCR1_%02d" % (i+1): str(self.chan_bw),
                               "_MCDL_%02d" % (i+1): str(self.chan_bw),
                               "_MFQR_%02d" % (i+1): str(self.frequency_resolution)})
コード例 #8
0
 def _fpga_clock_dep(self):
     """
     Computes the FPGA clock.
     """
     self.fpga_clock = convertToMHz(self.frequency) * 1e6 / 8
コード例 #9
0
    def computeSpecTick(self):
        """Returns the spec_tick value for this backend (the HBW value)

        """
        st = float(self.nchan) / (convertToMHz(self.frequency) * 1e6)
        return st
コード例 #10
0
    def _set_state_table_keywords(self):
        """
        Gather status sets here
        Not yet sure what to place here...
        """
        print "_set_state_table_keywords() called."
        DEFAULT_VALUE = "unspecified"

        self.set_status(BW_MODE=DEFAULT_VALUE)
        self.set_status(CAL_DCYC=DEFAULT_VALUE)
        self.set_status(CAL_FREQ=DEFAULT_VALUE)
        self.set_status(CAL_MODE=DEFAULT_VALUE)
        self.set_status(CAL_PHS=DEFAULT_VALUE)
        self.set_status(CHAN_BW=DEFAULT_VALUE)

        self.set_status(DATADIR=DEFAULT_VALUE)
        self.set_status(DATAHOST=DEFAULT_VALUE)
        self.set_status(DATAPORT=DEFAULT_VALUE)
        self.set_status(EFSAMPFR=DEFAULT_VALUE)
        self.set_status(EXPOSURE=DEFAULT_VALUE)
        self.set_status(FILENUM=DEFAULT_VALUE)
        self.set_status(FPGACLK=DEFAULT_VALUE)
        self.set_status(HWEXPOSR=DEFAULT_VALUE)
        self.set_status(M_STTMJD=0)
        self.set_status(M_STTOFF=0)
        self.set_status(NBITS=8)
        self.set_status(NBITSADC=8)
        self.set_status(NCHAN=DEFAULT_VALUE)

        self.set_status(NPKT=DEFAULT_VALUE)
        self.set_status(NPOL=DEFAULT_VALUE)
        self.set_status(NSUBBAND=DEFAULT_VALUE)
        self.set_status(OBSBW=DEFAULT_VALUE)

        self.set_status(OBSFREQ=DEFAULT_VALUE)
        self.set_status(OBSNCHAN=DEFAULT_VALUE)
        self.set_status(OBS_MODE=DEFAULT_VALUE)
        self.set_status(OBSERVER=DEFAULT_VALUE)
        self.set_status(OBSID=DEFAULT_VALUE)
        self.set_status(PKTFMT=DEFAULT_VALUE)
        self.set_status(SRC_NAME=DEFAULT_VALUE)
        self.set_status(RA=DEFAULT_VALUE)
        self.set_status(DEC=DEFAULT_VALUE)
        self.set_status(RA_STR=DEFAULT_VALUE)
        self.set_status(DEC_STR=DEFAULT_VALUE)
        self.set_status(SUB0FREQ=DEFAULT_VALUE)
        self.set_status(SUB1FREQ=DEFAULT_VALUE)
        self.set_status(SUB2FREQ=DEFAULT_VALUE)
        self.set_status(SUB3FREQ=DEFAULT_VALUE)
        self.set_status(SUB4FREQ=DEFAULT_VALUE)
        self.set_status(SUB5FREQ=DEFAULT_VALUE)
        self.set_status(SUB6FREQ=DEFAULT_VALUE)
        self.set_status(SUB7FREQ=DEFAULT_VALUE)
        self.set_status(SWVER=DEFAULT_VALUE)
        self.set_status(TELESCOP=DEFAULT_VALUE)

        if self.mode.shmkvpairs:
            self.set_status(**self.mode.shmkvpairs)

        # set the switching signal stuff:
        self.set_status(**self._setSSKeys())

        # all the rest...
        self.set_status(OBSERVER=self.observer)
        self.set_status(SRC_NAME=self.source)

        if self.source_ra_dec:
            ra = self.source_ra_dec[0]
            dec = self.source_ra_dec[1]
            self.set_status(RA=ra.degrees)
            self.set_status(DEC=dec.degrees)
            self.set_status(RA_STR="%02i:%02i:%05.3f" % ra.hms)
            self.set_status(DEC_STR=apw.degreesToString(dec.degrees))

        self.set_status(TELESCOP=self.telescope)

        self.set_status(BOFFILE=str(self.bof_file))
        self.set_status(CHAN_BW=str(self.chan_bw))
        self.set_status(EFSAMPFR=str(self.sampler_frequency))
        self.set_status(EXPOSURE=str(self.exposure))
        self.set_status(FPGACLK=str(self.fpga_clock))
        self.set_status(OBSNCHAN=str(self.nchan))
        self.set_status(HWEXPOSR=str(self.hwexposr))

        self.set_status(OBSBW=self.obs_bw)
        self.set_status(PKTFMT="SPEAD")
        self.set_status(NCHAN=str(self.nchan))
        self.set_status(NPOL=str(2))
        self.set_status(NSUBBAND=self.nsubbands)
        # convertToMHz() normalizes the frequency to MHz, just in case
        # it is provided as Hz. So this will work in either case.
        self.set_status(SUB0FREQ=convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB1FREQ=convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB2FREQ=convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB3FREQ=convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB4FREQ=convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB5FREQ=convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB6FREQ=convertToMHz(self.frequency) * 1e6 / 2)
        self.set_status(SUB7FREQ=convertToMHz(self.frequency) * 1e6 / 2)

        self.set_status(BASE_BW=self.filter_bw)  # From MODE
        self.set_status(BANKNAM=self.bank.name if self.bank else 'NOBANK')
        self.set_status(MODENUM=str(self.mode.name))  # from MODE
        self.set_status(NOISESRC="OFF")  # TBD??
        self.set_status(NUMPHASE=str(self.nPhases))
        self.set_status(SWPERIOD=str(self.ss.total_duration()))
        self.set_status(SWMASTER="VEGAS")  # TBD
        self.set_status(POLARIZE=self.polarization)
        self.set_status(CRPIX1=str(self.nchan / 2 + 1))
        self.set_status(SWPERINT = str(int(self.exposure \
                                          / self.ss.total_duration() + 0.5)))
        self.set_status(NMSTOKES=str(self.num_stokes))
        # should this get set by Backend?
        self.set_status(DATAHOST=self.datahost)
        self.set_status(DATAPORT=self.dataport)
        self.set_status(DATADIR=self.dataroot)
        self.set_status(PROJID=self.projectid)
        self.set_status(SCANLEN=self.scan_length)
        self.set_status(CAL_FREQ=self.cal_freq)

        for i in range(8):
            self.set_status(
                **{
                    "_MCR1_%02d" % (i + 1): str(self.chan_bw),
                    "_MCDL_%02d" % (i + 1): str(self.chan_bw),
                    "_MFQR_%02d" % (i + 1): str(self.frequency_resolution)
                })
コード例 #11
0
 def _fpga_clock_dep(self):
     """
     Computes the FPGA clock.
     """
     self.fpga_clock = convertToMHz(self.frequency) * 1e6 / 8
コード例 #12
0
    def computeSpecTick(self):
        """Returns the spec_tick value for this backend (the HBW value)

        """
        st = float(self.nchan) / (convertToMHz(self.frequency) * 1e6)
        return st
コード例 #13
0
 def _sampler_frequency_dep(self):
     """
     Computes the effective frequency of the A/D sampler based on mode
     """
     self.sampler_frequency = convertToMHz(self.frequency) * 1e6 / 32