
# 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

import pythonDaq
import time
import os
import sys

#if len(sys.argv)<2:
#   usage()
#   sys.exit(1)



pythonDaq.daqOpen("hps",1);


print("Starting Calibration ... ");

pythonDaq.daqHardReset();
#pythonDaq.daqLoadSettings('/u1/software/daq/config/devboard_new.xml');
#pythonDaq.daqSetConfig("cntrlFpga:AdcClkInvert", "False");
pythonDaq.daqLoadSettings('/u1/software/daq/config/local_defaults.xml');
pythonDaq.daqLoadSettings('/u1/software/daq/config/coda_groupC.xml');
pythonDaq.daqSetConfig("cntrlFpga:TholdEnable", "False");
pythonDaq.daqSetConfig("cntrlFpga:FiltEnable", "False");

# Following changing coda_defaults -> devboard_new
#pythonDaq.daqSetConfig("config:IntTrigEn", "False");
#pythonDaq.daqSetConfig("config:TrigPollEn", "False");
#pythonDaq.daqSetConfig("cntrlFpga:ApvTrigSource", "Software");
#pythonDaq.daqSetConfig("cntrlFpga:ApvTrigType", "DoubleTrig");
#pythonDaq.daqSetConfig("cntrlFpga:DataByPass", "False");
pythonDaq.daqSoftReset();
# Run baseline and calibrations
pythonDaq.daqSetRunParameters("100Hz",1000);

#--- These parameters should be changed to reflect the run ---//
test_struc   = "svt_t"; # module, hybrid_t, hybrid
test_struc_n = "0"     ;   # 
test_run_n   = "1"     ;   # Run #
#-------------------------------------------------------------//

if (test_struc == "svt_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 + '/run' + test_run_n + '/calibration/';
else:
   data_path = 'data/' + test_struc + '_' + test_struc_n + '/run' + test_run_n + '/calibration/';

os.system('mkdir -p '+data_path);

for iter in range (0,10):
   # Close any existing open files
   pythonDaq.daqCloseData();

   # Baseline 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 + test_struc + '_baseline_dcalib.bin';
      print("Dont run 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 + test_struc + '_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 + test_struc + '_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");

