class ADCCalibrationsTest(unittest.TestCase):
    'Unit tests for .'

    def setUp(self):
        # setup this class for unit tests
        now =  datetime(2014, 4, 24, 9, 8, 38)
        self.adc = ADCCalibrations(data_dir = 'testdata'
                                 , test = True
                                 , conf_dir = 'testdata'
                                 , mmcm_trials = 1
                                 , roaches = ['noroach']
                                 , now = now
                                  )
        





        # Uncomment this code if you want the logs to stdout 
        #logging.config.fileConfig('adc5g_logging_config.conf')
        #logger = logging.getLogger('adc5gLogging')
        #logger.info("Started")

    # TBF: need to do this still?
    #def tearDown(self):

        # clean up all the generated files
        #files = []
        #basename = "%s/snapshot_raw_%s_z%d_%s.dat.%s" 
        #exts = ["fit", "ogp", "a", "b", "c", "d", "res"]
        #for zdok in [0,1]:
        #    for i in range(10):
        #        for ext in exts:
        #            e = "%d.%s" % (i, ext) 
        #            f = basename % (self.adc.dir, self.adc.roach_name, zdok, self.adc.current_time, e)
        #            files.append(f)
        #for f in files:
        #    if os.path.isfile(f):
        #        os.remove(f)

        # clean up .png's
        #fs = os.listdir(self.adc.dir)

    def test_find_all_mmcms(self):

        self.adc.find_all_mmcms()
 def setUp(self):
     # setup this class for unit tests
     now =  datetime(2014, 4, 24, 9, 8, 38)
     self.adc = ADCCalibrations(data_dir = 'testdata'
                              , test = True
                              , conf_dir = 'testdata'
                              , mmcm_trials = 1
                              , roaches = ['noroach']
                              , now = now
                               )
def main():

    p = OptionParser()
    
    p.set_usage('%prog [options]')
    p.set_description(__doc__)
    p.add_option('-v', '--verbosity', dest='verbosity',type='int', default=1,
        help='Verbosity level. Default: 1')
    p.add_option('-r', '--roaches', dest='roaches',type='str', default='srbsr2-1',
        help='Comma-separated list of roach hostnames. Default: srbsr2-1')
    p.add_option('-M', '--n_mmcm_trials', dest='n_mmcm_trials',type='int', default=5,
        help='Number of mmcm trials. Default: 5')
    p.add_option('-N', '--n_trials', dest='n_trials',type='int', default=10,
        help='Number of snap/fit trials. Default: 10')
    p.add_option('-f', '--testfreq', dest='testfreq', type='float', default=18.3105,
        help='sine wave test frequency input in MHz. Default = 18.3105')
    p.add_option('-l', '--ampl', dest='ampl', type='float', default=3.0,
        help='Power level of test tone input in dBm. Default = 3.0')
    p.add_option('-g', '--gpibaddr', dest='gpibaddr', type='str', default='10.16.96.174',
        help='IP Address of the GPIB.  Current default is set to tape room machine. Default = 10.16.96.174')
    p.add_option('-d', '--data_dir', dest='data_dir', type='str', default='.',    
        help='name of directory to put all files')
    p.add_option('-c', '--conf_dir', dest='conf_dir', type='str', default='.',    
        help='name of directory where configuration files are found') 
    p.add_option('-m', '--manual', dest='manual', action='store_true', default=False,
        help='Manual control of the calibration process. Default=False')
    p.add_option('-O', '--ogp_only', dest='ogp_only', action='store_true', default=False,
        help='Don t do MMCMs, just OGPs. Default=False')
    p.add_option('-C', '--mmcm_only', dest='mmcm_only', action='store_true', default=False,
        help='Don t do OGPs, just MMCMs. Default=False')
    opts, args = p.parse_args(sys.argv[1:])

    # setup log file name:
    current_time = datetime.datetime.now().strftime('%Y-%m%d-%H%M%S')
    timestamp = "_all_%s"%current_time
    AdcCalLoggingFileHandler.timestamp = timestamp

    # load log config file
    if opts.conf_dir is not None:
        conf_dir = opts.conf_dir
    else:
        # if they haven't specified configuration directory, try to use env
        var = "YGOR_TELESCOPE"
        conf_dir = '.' if not os.environ.has_key(var) else  os.path.join(os.environ[var], "etc/config")
    conffile = "%s/%s" % (conf_dir, 'adc_cal_logging.conf')
    if not os.path.isfile(conffile):
        print "Cannot find config file for logging: %s" % conffile
        sys.exit(0)

    logging.config.fileConfig(conffile)
    logger = logging.getLogger('adc5gLogging')
    logger.info("Started")
    
    if not opts.verbosity:
        logger.setLevel(logging.INFO)

    logger.info("opts :\n\t" + str(opts))
    logger.info("args :\n\t" + str(args))
    logger.info("log file name:\n\t" + AdcCalLoggingFileHandler.logfilename)

    roaches = [s.strip() for s in opts.roaches.split(",")]
    # Time to make our worker class
    cal = ADCCalibrations(data_dir = opts.data_dir 
                     , conf_dir = conf_dir
                     , roaches = roaches
                     , gpib_addr = opts.gpibaddr
                     , mmcm_trials = opts.n_mmcm_trials 
                     , ogp_trials = opts.n_trials
                     , test_tone = opts.testfreq
                     , ampl = opts.ampl
                     , manual = opts.manual
                     , do_ogps = not opts.mmcm_only
                     , do_mmcms = not opts.ogp_only
                         )

     # and use it                    
    cal.find_all_calibrations()