Ejemplo n.º 1
0
 def __init__(self, filename):
     """Initializes a config file if does not exist. If exists, uses
     it to validate the file, and setup default initial parameters"""
     self.cfg_spec = ConfigObj(config_spec_text.splitlines(), list_values=False)
     self.cfg_filename = filename
     valid = Validator()
     if not os.path.exists(self.cfg_filename):
         #no configuration file found
         logger.info("File %s not found, so creating one from you from defaults" % self.cfg_filename)
         cfg = ConfigObj(configspec=self.cfg_spec, stringify=True, list_values=True)
         cfg.filename = self.cfg_filename
         test = cfg.validate(valid, copy=True)
         cfg.write()
     self.cfg = ConfigObj(self.cfg_filename, configspec=self.cfg_spec)
     rtn = self.cfg.validate(valid, preserve_errors=True)
     if type(rtn) == types.BooleanType and rtn:
         logger.info("Config file validated")
         self.tested = True
     else:
         self.tested = False
         res = flatten_errors(self.cfg, rtn)
         self.errortxt = ''
         for row in res:
             self.errortxt += 'In Section %s, key %s has error: %s' % (row[0], row[1], row[2])
         logger.error(self.errortxt)
Ejemplo n.º 2
0
 def open_devices(self):
     self.uni = None
     self.multimeter = None
     self.syn = None
     self.flukemeter = None
     if self.devices.use_unidex:
         try:
             self.uni = Unidex11()
             self.uni.reset()
             time.sleep(2.0)
             self.uni.home(axis='X')
             time.sleep(10.0)
             logger.info("Unidex 11 available, reset and homed")
         except:
             logger.error("Unidex11 Not available")
             raise BeamPatternGeneralError("open_devices", "Unidex11 Not available")
     if self.devices.use_vna:
         try:
             self.an = Analyzer_8510c()
             logger.info("HP8510C vector network analyzer initialized")
             time.sleep(0.5)
             self.freq_list = numpy.array(self.vna.freq)*1e9
             print self.freq_list
             meas = self.vna.meas
             avg_value = self.vna.avg_value
             self.an.initialize_vna(self.freq_list, measure=meas,
                                    avg_value=avg_value)
         except:
             logger.error("VNA not available")
             raise BeamPatternGeneralError("open_devices", "VNA not available")
Ejemplo n.º 3
0
 def _increase_power_level(self, plevel, vmin, vmax):
     iterate = True
     new_power = plevel
     while iterate:
         new_power += 1
         if new_power > 13:
             logger.error("Power level exceeded. Setting it to 13 dBm")
             return (13)
         self.syn.set_power_level(new_power)
         time.sleep(0.2)
         #vmean, vstd = self.multimeter.take_readings(nrdgs=self.multi.nrdgs)
         vmean, vstd = self.take_readings(nrdgs=self.nrdgs)
         if vmean > vmin:
             if vmean < vmax:
                 #success
                 return new_power
             else:
                 new_power -= 0.5
                 self.syn.set_power_level(new_power)
                 time.sleep(0.2)
                 #vmean, vstd = self.multimeter.take_readings(nrdgs=self.multi.nrdgs)
                 vmean, vstd = self.take_readings(nrdgs=self.nrdgs)
                 logger.info("Current voltage is: %s" % vmean)
                 return new_power
         else:
             iterate = True
Ejemplo n.º 4
0
 def __init__(self, filename):
     """Initializes a config file if does not exist. If exists, uses
     it to validate the file, and setup default initial parameters"""
     self.cfg_spec = ConfigObj(config_spec_text.splitlines(),
                               list_values=False)
     self.cfg_filename = filename
     valid = Validator()
     if not os.path.exists(self.cfg_filename):
         #no configuration file found
         logger.info(
             "File %s not found, so creating one from you from defaults" %
             self.cfg_filename)
         cfg = ConfigObj(configspec=self.cfg_spec,
                         stringify=True,
                         list_values=True)
         cfg.filename = self.cfg_filename
         test = cfg.validate(valid, copy=True)
         cfg.write()
     self.cfg = ConfigObj(self.cfg_filename, configspec=self.cfg_spec)
     rtn = self.cfg.validate(valid, preserve_errors=True)
     if type(rtn) == types.BooleanType and rtn:
         logger.info("Config file validated")
         self.tested = True
     else:
         self.tested = False
         res = flatten_errors(self.cfg, rtn)
         self.errortxt = ''
         for row in res:
             self.errortxt += 'In Section %s, key %s has error: %s' % (
                 row[0], row[1], row[2])
         logger.error(self.errortxt)
Ejemplo n.º 5
0
 def open_devices(self):
     self.uni = None
     self.multimeter = None
     self.syn = None
     self.flukemeter = None
     if self.devices.use_unidex:
         try:
             self.uni = Unidex11()
             self.uni.reset()
             time.sleep(2.0)
             self.uni.home(axis='X')
             time.sleep(10.0)
             logger.info("Unidex 11 available, reset and homed")
         except:
             logger.error("Unidex11 Not available")
             raise BeamPatternGeneralError("open_devices",
                                           "Unidex11 Not available")
     if self.devices.use_vna:
         try:
             self.an = Analyzer_8510c()
             logger.info("HP8510C vector network analyzer initialized")
             time.sleep(0.5)
             self.freq_list = numpy.array(self.vna.freq) * 1e9
             print self.freq_list
             meas = self.vna.meas
             avg_value = self.vna.avg_value
             self.an.initialize_vna(self.freq_list,
                                    measure=meas,
                                    avg_value=avg_value)
         except:
             logger.error("VNA not available")
             raise BeamPatternGeneralError("open_devices",
                                           "VNA not available")
Ejemplo n.º 6
0
 def _increase_power_level(self, plevel, vmin, vmax):
     iterate = True
     new_power = plevel
     while iterate:
         new_power += 1
         if new_power > 13:
             logger.error("Power level exceeded. Setting it to 13 dBm")
             return (13)
         self.syn.set_power_level(new_power)
         time.sleep(0.2)
         #vmean, vstd = self.multimeter.take_readings(nrdgs=self.multi.nrdgs)
         vmean, vstd = self.take_readings(nrdgs=self.nrdgs)
         if vmean > vmin:
             if vmean < vmax:
                 #success
                 return new_power
             else:
                 new_power -= 0.5
                 self.syn.set_power_level(new_power)
                 time.sleep(0.2)
                 #vmean, vstd = self.multimeter.take_readings(nrdgs=self.multi.nrdgs)
                 vmean, vstd = self.take_readings(nrdgs=self.nrdgs)
                 logger.info("Current voltage is: %s" % vmean)
                 return new_power
         else:
             iterate = True
Ejemplo n.º 7
0
 def open_devices(self):
     self.prologix = PrologixGPIB()
     self.vv = None
     self.syn = HP83620A(self.prologix)
     logger.info("Synthesizer initialized")
     self.freq_list = numpy.array(self.synthesizer.freq)*1.e9
     print self.freq_list
     if self.devices.use_unidex:
         try:
             self.uni = Unidex11(self.prologix)
             self.uni.reset()
             time.sleep(2.0)
             self.uni.home(axis='X')
             time.sleep(10.0)
             logger.info("Unidex 11 available, reset and homed")
         except:
             logger.error("Unidex11 Not available")
             raise BeamPatternGeneralError("open_devices", "Unidex11 Not available")
     if self.devices.use_vv:
         try:
             self.vv = VectorVoltmeter(self.prologix)
             logger.info("Vector voltmeter initialized")
             self.average = self.vector_voltmeter.avg_value
             time.sleep(0.5)
         except:
             logger.error("Vector Voltmeter not available")
             raise BeamPatternGeneralError("open_devices", "Vector Voltmeter not available")
Ejemplo n.º 8
0
 def check_map_azimuth_parameters(self):
     if self.azimuth.xmin < -180.0:
         logger.error("xmin is set to %s, and is less than -180 degrees. Please fix" % self.azimuth.xmin)
         return False
     if self.azimuth.xmax > 180.0:
         logger.error("xmax is set to %s, and is greater than 180 degrees. Please fix" % self.azimuth.xmax)
         return False
     return True
Ejemplo n.º 9
0
 def check_map_azimuth_parameters(self):
     if self.azimuth.xmin < -180.0:
         logger.error("xmin is set to %s, and is less than -180 degrees. Please fix" % self.azimuth.xmin)
         return False
     if self.azimuth.xmax > 180.0:
         logger.error("xmax is set to %s, and is greater than 180 degrees. Please fix" % self.azimuth.xmax)
         return False
     return True
Ejemplo n.º 10
0
 def home(self, axis='X'):
     """
     Home the axis
     """
     if axis not in ('X', 'Y', 'x', 'y'):
         logger.error("Only X & Y axes can be homed")
         return
     self.write('I H %s *' % axis.upper())
     if axis.upper() == 'X':
         self.pos_az = 0.0
     if axis.upper() == 'Y':
         self.pos_el = 0.0
Ejemplo n.º 11
0
 def home(self, axis='X'):        
     """
     Home the axis
     """
     if axis not in ('X', 'Y', 'x', 'y'):
         logger.error("Only X & Y axes can be homed")
         return
     self.write('I H %s *' % axis.upper())
     if axis.upper() == 'X':
         self.pos_az = 0.0
     if axis.upper() == 'Y':
         self.pos_el = 0.0
Ejemplo n.º 12
0
 def __init__(self, errorname, reason):
     """
     @param errorname: The name of the error for exception.
     @type errorname: String
     @param reason: An explanatory text that details the error
     @type reason: String
     """
     self.errorname = errorname
     self.reason = reason
     self.args = (self.reason,)
     self.message = errorname
     self.message += ": "
     self.message += reason
     logger.error(self.message)
Ejemplo n.º 13
0
    def open_devices(self):
        self.uni = None
        self.multimeter = None
        self.syn = None
        self.flukemeter = None
        if self.devices.use_unidex:
            try:
                self.uni = Unidex11()
                time.sleep(2.0)
                self.uni.reset()
                time.sleep(2.0)
                self.uni.home(axis='Y')
                time.sleep(10.0)
                self.uni.home(axis='X')
                time.sleep(10.0)
                logger.info("Unidex 11 available, reset and homed")
            except:
                logger.error("Unidex11 Not available")
                raise BeamPatternGeneralError("open_devices", "Unidex11 Not available")
        if self.devices.use_multi:
            try:
                self.multimeter = Multimeter()
                #if self.multimeter.idstr != 'HP3457A':
                #    logger.error("Multimeter ID not right")
                #    raise BeamPatternGeneralError("open_devices", "Multimeter ID not right")
                logger.info("HP3478A multimeter initialized")
                time.sleep(0.5)
                self.multimeter.setup_ac(nplc=self.multi.nplc,
                                         range=self.multi.range,
                                         nrdgs=self.multi.nrdgs,
                                         resolution=self.multi.resolution)
                self.nrdgs = self.multi.nrdgs
                print self.nrdgs, self.multi.nplc, self.multi.range, self.multi.nrdgs, self.multi.resolution
            except:
                logger.error("Multimeter not available")
                raise BeamPatternGeneralError("open_devices", "Multimeter not available")
        
        if self.devices.use_synth:
            try:
                self.syn = HP83620A()
                self.syn.set_mult(self.synth.mult)
                time.sleep(0.2)
                logger.info("HP83620A synthesizer pulse mod setup")
                self.syn.setup_pulse()
                logger.info("HP83620A synthesizer available and online")
            except:
                logger.error("HP83620A not available")
                raise BeamPatternGeneralError("open_devices", "HP83620A not available")

        if self.devices.use_fluke:
            try:
                self.flukemeter = Fluke()
                logger.info("Fluke is online")
                time.sleep(0.5)
                self.nrdgs = self.fluke.nrdgs
            except:
                logger.error("Fluke 287 is not available. Error: %s" % sys.exc_info())
                raise BeamPatternGeneralError("open_devices", "Fluke 287 not available")
        if self.debug:
            print "Opened devices"
Ejemplo n.º 14
0
 def set_elevation(self, el_command, el_vel):
     """
     moves the stage in elevation to requested angle 
     with velocity given in degrees/second.
     Feedrate is calculated from this el_vel
     """
     if el_command < self.limits[0] or el_command > self.limits[1]:
         logger.error("Exceeds range of drive")
         return
     numsteps = int((el_command-self.pos_el)/self.step_size_el)
     feedrate = int(abs(el_vel)/self.step_size_el)
     if feedrate > self.max_feedrate:
         feedrate = self.max_feedrate
     self._set_position('Y', feedrate, numsteps)
     self.pos_el = el_command
Ejemplo n.º 15
0
 def set_elevation(self, el_command, el_vel):
     """
     moves the stage in elevation to requested angle 
     with velocity given in degrees/second.
     Feedrate is calculated from this el_vel
     """
     if el_command < self.limits[0] or el_command > self.limits[1]:
         logger.error("Exceeds range of drive")
         return
     numsteps = int((el_command - self.pos_el) / self.step_size_el)
     feedrate = int(abs(el_vel) / self.step_size_el)
     if feedrate > self.max_feedrate:
         feedrate = self.max_feedrate
     self._set_position('Y', feedrate, numsteps)
     self.pos_el = el_command
Ejemplo n.º 16
0
def validate_dictionary(cdic):
    """This function validates a dictionary against the config spec here"""
    cfg_spec = ConfigObj(config_spec_text.splitlines(), list_values=False)
    valid = Validator()
    cfg = ConfigObj(cdic, configspec=cfg_spec)
    rtn = cfg.validate(valid, preserve_errors=True)
    if type(rtn) == types.BooleanType and rtn:
        return True
    else:
        res = flatten_errors(cfg, rtn)
        errortxt = ''
        for row in res:
            errortxt += 'In Section %s, key %s has error: %s' % (row[0], row[1], row[2])
            logger.error(errortxt)
        return False
Ejemplo n.º 17
0
def validate_dictionary(cdic):
    """This function validates a dictionary against the config spec here"""
    cfg_spec = ConfigObj(config_spec_text.splitlines(), list_values=False)
    valid = Validator()
    cfg = ConfigObj(cdic, configspec=cfg_spec)
    rtn = cfg.validate(valid, preserve_errors=True)
    if type(rtn) == types.BooleanType and rtn:
        return True
    else:
        res = flatten_errors(cfg, rtn)
        errortxt = ''
        for row in res:
            errortxt += 'In Section %s, key %s has error: %s' % (
                row[0], row[1], row[2])
            logger.error(errortxt)
        return False
Ejemplo n.º 18
0
 def __init__(self, cfg, filename, datetime_str, cfgfile):
     self.plot_symbols = ['o', 's', 'v', '^', '<', '>',
                          '1', '2', '3', '4', 'p', '*',
                          'h', 'H', '+', 'x', 'D', 'd']
                          
     self.cfg = cfg
     self._get_config_parameters()
     self.filename = filename
     self.datetime_str = datetime_str
     self.cfgfile = cfgfile
     self.freq_list = []
     self.offset = 0.0
     self.offset_std = 0.0
     self.nrdgs = 1
     if not self.check_map_azimuth_parameters():
         logger.error("Map Parameters Malformed")
         raise BeamPatternGeneralError("AzimuthMap", "Map Parameters Malformed")
Ejemplo n.º 19
0
 def _set_position(self, axis, feedrate, numsteps):
     """
     Given a feedrate and number of steps
     move the stage to the number of steps
     """
     if axis not in ('X', 'Y', 'x', 'y'):
         logger.error("Only X & Y axes can be moved")
         return
     self.write('I %s F%d D%d *' % (axis.upper(), feedrate, numsteps))
     time.sleep(0.25)
     # count = 0
     # while self.command_in_progress():
     #     time.sleep(0.5)
     #     count += 1
     #     if count % 4 == 0:
     #         print "Command in progress, Time = %.2f seconds" % (count*0.5)
     # time.sleep(0.5)
     logger.debug("Position set")
Ejemplo n.º 20
0
 def _set_position(self, axis, feedrate, numsteps):
     """
     Given a feedrate and number of steps
     move the stage to the number of steps
     """
     if axis not in ('X', 'Y', 'x', 'y'):
         logger.error("Only X & Y axes can be moved")
         return
     self.write('I %s F%d D%d *' % (axis.upper(), feedrate, numsteps))
     time.sleep(0.25)
     # count = 0
     # while self.command_in_progress():
     #     time.sleep(0.5)
     #     count += 1
     #     if count % 4 == 0:
     #         print "Command in progress, Time = %.2f seconds" % (count*0.5)
     # time.sleep(0.5)
     logger.debug("Position set")
Ejemplo n.º 21
0
    def __init__(self, cfg, filename, datetime_str, cfgfile, debug=True):
        self.plot_symbols = [
            'o', 's', 'v', '^', '<', '>', '1', '2', '3', '4', 'p', '*', 'h',
            'H', '+', 'x', 'D', 'd'
        ]

        self.debug = debug
        self.cfg = cfg
        self._get_config_parameters()
        self.filename = filename
        self.datetime_str = datetime_str
        self.cfgfile = cfgfile
        self.offset = 0.0
        self.offset_std = 0.0
        self.nrdgs = 1
        if not self.check_map_azimuth_parameters():
            logger.error("Map Parameters Malformed")
            raise BeamPatternGeneralError("AzimuthMap",
                                          "Map Parameters Malformed")
Ejemplo n.º 22
0
 def __init__(self, cfg, filename, datetime_str, cfgfile,
              digital=False):
     self.plot_symbols = ['o', 's', 'v', '^', '<', '>',
                          '1', '2', '3', '4', 'p', '*',
                          'h', 'H', '+', 'x', 'D', 'd', '|', '_'] * 5 # lots of symbols
     self.cfg = cfg
     self._get_config_parameters()
     self.filename = filename
     self.datetime_str = datetime_str
     self.cfgfile = cfgfile
     self.freq_list = []
     self.offset = 0.0
     self.offset_std = 0.0
     self.nrdgs = 1
     if not self.check_map_azimuth_parameters():
         logger.error("Map Parameters Malformed")
         raise BeamPatternGeneralError("AzimuthMap", "Map Parameters Malformed")
     self.digital = digital
     if self.digital:
         self.labjack = LabJackT7()
Ejemplo n.º 23
0
 def _decrease_power_level(self, plevel, vmin, vmax):
     iterate = True
     new_power = plevel
     while iterate:
         new_power -= 1
         if new_power < -5:
             logger.error("Power level too low. Setting it to -5 dBm")
             return (-5)
         self.syn.set_power_level(new_power)
         time.sleep(0.2)
         vmean, vstd = self.take_readings(nrdgs=self.nrdgs)
         if vmean < vmax:
             if vmean > vmin:
                 #success
                 return new_power
             else:
                 new_power += 0.5
                 self.syn.set_power_level(new_power)
                 time.sleep(0.2)
                 vmean, vstd = self.take_readings(nrdgs=self.nrdgs)
                 logger.info("Current voltage is: %s" % vmean)
                 return new_power
         else:
             iterate = True
Ejemplo n.º 24
0
 def _decrease_power_level(self, plevel, vmin, vmax):
     iterate = True
     new_power = plevel
     while iterate:
         new_power -= 1
         if new_power < -5:
             logger.error("Power level too low. Setting it to -5 dBm")
             return (-5)
         self.syn.set_power_level(new_power)
         time.sleep(0.2)
         vmean, vstd = self.take_readings(nrdgs=self.nrdgs)
         if vmean < vmax:
             if vmean > vmin:
                 #success
                 return new_power
             else:
                 new_power += 0.5
                 self.syn.set_power_level(new_power)
                 time.sleep(0.2)
                 vmean, vstd = self.take_readings(nrdgs=self.nrdgs)
                 logger.info("Current voltage is: %s" % vmean)
                 return new_power
         else:
             iterate = True
Ejemplo n.º 25
0
    def open_devices(self):
        self.uni = None
        self.multimeter = None
        self.syn = None
        self.flukemeter = None
        if self.devices.use_unidex:
            try:
                self.uni = Unidex11()
                time.sleep(2.0)
                self.uni.reset()
                time.sleep(2.0)
                self.uni.home(axis='Y')
                time.sleep(10.0)
                self.uni.home(axis='X')
                time.sleep(10.0)
                logger.info("Unidex 11 available, reset and homed")
            except:
                logger.error("Unidex11 Not available")
                raise BeamPatternGeneralError("open_devices",
                                              "Unidex11 Not available")
        if self.devices.use_multi:
            try:
                self.multimeter = Multimeter()
                #if self.multimeter.idstr != 'HP3457A':
                #    logger.error("Multimeter ID not right")
                #    raise BeamPatternGeneralError("open_devices", "Multimeter ID not right")
                logger.info("HP3478A multimeter initialized")
                time.sleep(0.5)
                self.multimeter.setup_ac(nplc=self.multi.nplc,
                                         range=self.multi.range,
                                         nrdgs=self.multi.nrdgs,
                                         resolution=self.multi.resolution)
                self.nrdgs = self.multi.nrdgs
                print self.nrdgs, self.multi.nplc, self.multi.range, self.multi.nrdgs, self.multi.resolution
            except:
                logger.error("Multimeter not available")
                raise BeamPatternGeneralError("open_devices",
                                              "Multimeter not available")

        if self.devices.use_synth:
            try:
                self.syn = HP83620A()
                self.syn.set_mult(self.synth.mult)
                time.sleep(0.2)
                logger.info("HP83620A synthesizer pulse mod setup")
                self.syn.setup_pulse()
                logger.info("HP83620A synthesizer available and online")
            except:
                logger.error("HP83620A not available")
                raise BeamPatternGeneralError("open_devices",
                                              "HP83620A not available")

        if self.devices.use_fluke:
            try:
                self.flukemeter = Fluke()
                logger.info("Fluke is online")
                time.sleep(0.5)
                self.nrdgs = self.fluke.nrdgs
            except:
                logger.error("Fluke 287 is not available. Error: %s" %
                             sys.exc_info())
                raise BeamPatternGeneralError("open_devices",
                                              "Fluke 287 not available")
        if self.debug:
            print "Opened devices"