
# daqHardReset          
# daqSoftReset          
# daqRefreshState       
# daqSetDefaults        
# daqLoadSettings       file
# daqSaveSettings       file
# daqOpenData           file
# daqCloseData          
# daqSetRunParameters   rate count
# daqSetRunState        state
# daqGetRunState        
# daqResetCounters      
# daqSendCommand        command
# daqReadStatus         
# daqGetStatus          
# daqReadConfig         
# daqVerifyConfig       
# daqSetConfig          variable arg
# daqGetConfig          variable
# daqGetSystemStatus    
# daqGetUserStatus      
# daqGetError           
# daqSendXml            xml_string
# daqDisableTimeout
# daqOpen               system id

#--- imports ---#
import pythonDaq
import time
import os
import sys
#import argparse

#---#
# Need to upgrade to python > 3.2
#parser = argparse.ArgumentParser()
#parser.add_argument("-r", "--run_number", help="Run Number")
#parser.add_argument("-m", "--half_module", help="Half-Module Number")
#args = parser.parse_args()

if len(sys.argv) != 3:
	print "Usage: calibrate.py <half-module number> <run number>"
	sys.exit(0)

pythonDaq.daqOpen("hps",1);

print("Starting calibration run ... ");

# Configure the DAQ
pythonDaq.daqHardReset();
#pythonDaq.daqLoadSettings('/u1/software/daq/config/devboard_new.xml');
pythonDaq.daqLoadSettings('/u1/software/daq/config/devboard.xml');
pythonDaq.daqSetConfig("cntrlFpga:AdcClkInvert", "False");
pythonDaq.daqSoftReset();

# Run baseline and calibrations
pythonDaq.daqSetRunParameters("1000Hz",2000);

half_module_n = sys.argv[1]
run_number = sys.argv[2]
 
#--- These parameters should be changed to reflect the run ---//
#test_struc   = "hybrid_t"; # module, hybrid_t, hybrid
#test_struc_n = "0"     ;   # 
#test_run_n   = "0"     ;   # Run #
#addon        = ""          # extra name 
#if len(sys.argv)>1:
#   test_struc = sys.argv[1]
#if len(sys.argv)>2:
#   test_struc_n = sys.argv[2]
#if len(sys.argv)>3:
#   test_run_n = sys.argv[3]
#if len(sys.argv)>4:
#   addon = "_" + sys.argv[4]
#-------------------------------------------------------------//

#if (test_struc == "hybrid_t"):
#   if (test_struc < 10):
#      test_struc = test_struc + "0" + test_struc_n;
#   else:
#      test_struc = test_struc + test_struc_n;
#
#   data_path = 'data/' + test_struc + addon + '/run' + test_run_n + '/calibration/';
#else:
#   data_path = 'data/' + test_struc + '_' + test_struc_n + addon + '/run' + test_run_n + '/calibration/';

data_path  = os.environ['BASE'] + 'data/SVT2014/half_module/'
data_path += half_module_n + '/' + run_number + '/data/calibrations/' 
os.system('mkdir -p '+data_path);

print 'Saving output to %s' % data_path

dut = 'halfmodule'
for iter in range (0,10):
   # Close any existing open files
   pythonDaq.daqCloseData();

   # Basline run
   if ( iter == 8 ):
      pythonDaq.daqSetConfig("cntrlFpga:hybrid:apv25:CalibInhibit","True");
      pythonDaq.daqSetConfig("cntrlFpga:ApvTrigType", "DoubleCalib" );
      pythonDaq.daqSetConfig("cntrlFpga:hybrid:apv25:CalGroup","0");
      file_path = data_path + dut + '_baseline_dcalib.bin';
      print("Running baseline (DoubleCalib)");
   
   elif ( iter == 9 ):
      pythonDaq.daqSetConfig("cntrlFpga:hybrid:apv25:CalibInhibit","True");
      pythonDaq.daqSetConfig("cntrlFpga:ApvTrigType", "DoubleTrig" );
      pythonDaq.daqSetConfig("cntrlFpga:hybrid:apv25:CalGroup","0");
      file_path = data_path + dut + '_baseline_dtrig.bin';
      print("Running baseline (DoubleTrig)");

   else:
      pythonDaq.daqSetConfig("cntrlFpga:hybrid:apv25:CalibInhibit","False");
      pythonDaq.daqSetConfig("cntrlFpga:ApvTrigType", "DoubleCalib" );
      pythonDaq.daqSetConfig("cntrlFpga:hybrid:apv25:CalGroup",str(iter));
      file_path = data_path + dut + '_cal_' + str(iter) + ".bin";
      print("Running calibration group: " + str(iter));

   os.system('rm -f '+file_path);
   pythonDaq.daqSetConfig('DataFile',file_path);
   pythonDaq.daqSendCommand('OpenDataFile','');
   pythonDaq.daqSetRunState('Running');
   while pythonDaq.daqGetRunState() == "Running":
      time.sleep(1);
      print("running");

   pythonDaq.daqCloseData();
   print("done");
   
print("script done");

