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()
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)
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)
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()
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
def computeSpecTick(self): """Returns the spec_tick value for this backend (the LBW value) """ return 1024.0 / (convertToMHz(self.frequency) * 1e6)
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)})
def _fpga_clock_dep(self): """ Computes the FPGA clock. """ self.fpga_clock = convertToMHz(self.frequency) * 1e6 / 8
def computeSpecTick(self): """Returns the spec_tick value for this backend (the HBW value) """ st = float(self.nchan) / (convertToMHz(self.frequency) * 1e6) return st
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) })
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