Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /epic-lfhcal-tbana/NewStructure/CalibrateData.cc was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 #include <iostream>
0002 #include <fstream>
0003 #include <vector>
0004 #include <map>
0005 #include <utility>
0006 #include <ctype.h>
0007 #include <stdio.h>
0008 #include <stdlib.h>
0009 #include <unistd.h> // Add for use on Mac OS -> Same goes for Analyses.cc
0010 #include "TString.h"
0011 #include "TFile.h"
0012 #include "TTree.h"
0013 #include "TCanvas.h"
0014 #include "TF1.h"
0015 #include "TH1D.h"
0016 #include "TObjArray.h"
0017 #include "TObjString.h"
0018 
0019 #include "Setup.h"
0020 #include "Calib.h"
0021 #include "Event.h"
0022 #include "Tile.h"
0023 #include "HGCROC.h"
0024 #include "Caen.h"
0025 #include "Analyses.h"
0026 
0027 void PrintHelp(char* exe){
0028   std::cout<<"Usage:"<<std::endl;
0029   std::cout<<exe<<" [-option (arguments)]"<<std::endl;
0030   std::cout<<"Options:"<<std::endl;
0031   std::cout<<"-a       printing calib object to file (using name of output root or calib root file ending in txt)"<<std::endl;
0032   std::cout<<"-A aaa   stripping only calib and setup object to external file"<<std::endl;
0033   std::cout<<"-B lll   apply external bad channel map during transfer of calibs"<<std::endl;
0034   std::cout<<"-c [0-3] set calibration option:" <<std::endl;
0035   std::cout<<"          -> 0 - based on LG only & LG mip,"<<std::endl;
0036   std::cout<<"          -> 1 - based on LG only & LG calc mip,"<<std::endl;
0037   std::cout<<"          -> 2 - based on HG & LG & HG mip, LG mip, "<<std::endl;
0038   std::cout<<"          -> 3 - based on HG & LG & HG mip, LG calc mip"<<std::endl;
0039   std::cout<<"-C yyy   Apply calibrations stored in yyy root file to the input uncalibrated file"<<std::endl;
0040   std::cout<<"-d [0-n] switch on debug info with debug level 0 to n"<<std::endl;
0041   std::cout<<"-D [0-2] switch on event rejection due to data corruption "<<std::endl;
0042   std::cout<<"-E [1-3] extended plotting set to whatever value you specify"<<std::endl;
0043   std::cout<<"-f       Force to write output if already exist"<<std::endl;
0044   std::cout<<"-F fff   set explicit plot extension explicitly, default is pdf "<<std::endl;
0045   std::cout<<"-G GGG   use external ToA phase calib from GGG file "<<std::endl;
0046   std::cout<<"-i uuu   Input file in root format"<<std::endl;
0047   std::cout<<"-k kkk   enabling overwriting of calib file using external calib txt file"<<std::endl;
0048   std::cout<<"-l [0-n] skip plotting of single layers except multiples of defined number"<<std::endl;
0049   std::cout<<"-L LLL   enable testing with only limited number of events"<<std::endl;
0050   std::cout<<"-m mmm   Name of mapping file i.e 2024 PS TB [../configs/mappingFile_202409_CAEN.txt] "<<std::endl;
0051   std::cout<<"-M MMM   overwriting min cut off for calibrated data filtering with MMM. Experts only!"<<std::endl;
0052   std::cout<<"-o vvv   Output file name (mandatory)"<<std::endl;
0053   std::cout<<"-O kkk   Output directory name for plots (mandatory)"<<std::endl;
0054   std::cout<<"-q q     switch HGCROC signal to $q samples surrounding max sample "<<std::endl;
0055   std::cout<<"-Q q     switch HGCROC signal to $q samples surrounding max sample, force signal reevaluation "<<std::endl;
0056   std::cout<<"-r rrr   Name of run list file  2024 PS TB [../configs/DataTakingDB_202409_CAEN.csv] "<<std::endl;
0057   std::cout<<"-R mmm   Replace setup with mapping file specified as argument "<<std::endl;
0058   std::cout<<"-t       use local trigger eval from existing input, don't redo in calibrate"<<std::endl;
0059   std::cout<<"-T ttt   evaluate local triggers before calibrating, use external calib file ttt"<<std::endl;
0060   std::cout<<"-u       disable trigger primitive calc"<<std::endl;
0061   std::cout<<"-h       this help"<<std::endl<<std::endl;
0062   std::cout<<"Examples:"<<std::endl;
0063   std::cout<<exe<<" -C Calibration.root (-f) -o CalibratedOutput.root -i Input.root (-f to overwrite existing output)"<<std::endl;
0064 }
0065   
0066 
0067 int main(int argc, char* argv[]){
0068   if(argc<4) {
0069     PrintHelp(argv[0]);
0070     return 0;
0071   }
0072   Analyses AnAnalysis;
0073   int c;
0074   while((c=getopt(argc,argv,"aA:B:c:C:d:D:E:fF:G:hi:k:l:L:m:Mo:O:q:Q:r:R:tT:u"))!=-1){
0075     switch(c){
0076     case 'a':
0077       std::cout<<"CaibrateData: printing calib object to file"<<std::endl;
0078       AnAnalysis.IsCalibSaveToFile(true);
0079       break;
0080     case 'A':
0081       std::cout<<"CaibrateData: stripping calib object to file: " << optarg<<std::endl;
0082       AnAnalysis.IsToSaveCalibOnly(true);
0083       AnAnalysis.SetRootCalibOutput(optarg);
0084       break;
0085     case 'B':
0086       std::cout<<"CaibrateData: read bad channel map from external file: "<<optarg<<std::endl;
0087       AnAnalysis.SetExternalBadChannelMap(Form("%s",optarg));
0088       AnAnalysis.SetCalcBadChannel(1);
0089       break;
0090     case 'c':
0091       std::cout<<"CaibrateData: set calibration option "<<optarg<<std::endl;
0092       AnAnalysis.SetCalibOption(atoi(optarg));
0093       break;
0094     case 'C':
0095       std::cout<<"CaibrateData: Apply calibration (pedestal correction and scaling factor) from: "<<optarg<<std::endl;
0096       AnAnalysis.SetRootCalibInput(Form("%s",optarg));
0097       AnAnalysis.IsToApplyCalibration(true);
0098       break;
0099     case 'd':
0100       std::cout<<"CaibrateData: enable debug " << optarg <<std::endl;
0101       AnAnalysis.EnableDebug(atoi(optarg));
0102       break;
0103     case 'D':
0104       std::cout<<"CaibrateData: enable event rejection due to data corruption" << optarg<<std::endl;
0105       AnAnalysis.SetCleanupEvents(1);
0106       break;
0107     case 'E':
0108       std::cout<<"CaibrateData: enabling more extended plotting: "<< optarg<<std::endl;
0109       AnAnalysis.SetExtPlotting(atoi(optarg));
0110       break;
0111     case 'f':
0112       std::cout<<"CaibrateData: If output already exists it will be overwritten"<<std::endl;
0113       AnAnalysis.CanOverWrite(true);
0114       break;
0115     case 'F':
0116       std::cout<<"CaibrateData: Set Plot extension to: "<< optarg<<std::endl;
0117       AnAnalysis.SetPlotExtension(optarg);
0118       break;
0119     case 'G':
0120       std::cout<<"CaibrateData: use external TOA phase calib file: "<< optarg<<std::endl;
0121       AnAnalysis.SetExternalToACalibOffSetFile(optarg);
0122       break;
0123     case 'i':
0124       std::cout<<"CaibrateData: Root input file is: "<<optarg<<std::endl;
0125       AnAnalysis.SetRootInput(Form("%s",optarg));
0126       break;
0127     case 'k':
0128       std::cout<<"CaibrateData: enable overwrite from external text file: "<< optarg <<std::endl;
0129       AnAnalysis.SetExternalCalibFile(optarg);
0130       AnAnalysis.SetOverWriteCalib(true);
0131       break;
0132     case 'l':
0133       std::cout<<"CaibrateData: SetSkipLayer plotting processed:"<<optarg<<std::endl;
0134       AnAnalysis.SetPlotSkipLayer(atoi(optarg));
0135       break;
0136     case 'L':
0137       std::cout<<"CaibrateData: SetMaxEvents processed:"<<optarg<<std::endl;
0138       AnAnalysis.SetMaxEvents(atoi(optarg));
0139       break;
0140     case 'm':
0141       std::cout<<"CaibrateData: Mapping file from: "<<optarg<<std::endl;
0142       AnAnalysis.SetMapInput(Form("%s",optarg));
0143       break;
0144     case 'M':
0145       std::cout<<"CaibrateData: overwrite mip min cutoff (only for experts): "<<optarg<<std::endl;
0146       AnAnalysis.OverwriteMinMipFrac(atoi(optarg));
0147       break;
0148     case 'o':
0149       std::cout<<"CaibrateData: Output to be saved in: "<<optarg<<std::endl;
0150       AnAnalysis.SetRootOutput(Form("%s",optarg));
0151       break;
0152     case 'O':
0153       std::cout<<"CaibrateData: Outputdir plots to be saved in: "<<optarg<<std::endl;
0154       AnAnalysis.SetPlotOutputDir(Form("%s",optarg));
0155       break;
0156     case 'q':
0157       std::cout<<"CaibrateData: Switch HGCROC waveform integration, integrate " << optarg << " samples"<<std::endl;
0158       AnAnalysis.SetHGCROCNSampleInteg(atoi(optarg));
0159       break;
0160     case 'Q':
0161       std::cout<<"CaibrateData: Switch HGCROC waveform integration, forced, integrate " << optarg << " samples"<<std::endl;
0162       AnAnalysis.SetHGCROCNSampleIntegForced(atoi(optarg));
0163       break;
0164     case 'r':
0165       std::cout<<"CaibrateData: run list file from: "<<optarg<<std::endl;
0166       AnAnalysis.SetRunListInput(Form("%s",optarg));
0167       break;
0168     case 'R':
0169       std::cout<<"CaibrateData: overwrite mapping file from: "<<optarg<<std::endl;
0170       std::cout<<"CaibrateData: EXPERT USE ONLY!"<<std::endl;
0171       AnAnalysis.SetMapInput(Form("%s",optarg));
0172       AnAnalysis.SetOverWriteSetup(true);
0173       break;
0174     case 't':
0175       std::cout<<"CaibrateData: run without trigger eval, use from file" <<std::endl;
0176       AnAnalysis.UseLocTriggFromFile(true);
0177       break;
0178     case 'T':
0179       std::cout<<"CaibrateData: run local trigger, with calib file:" << optarg<<std::endl;
0180       AnAnalysis.IsToEvalLocalTrigg(true);
0181       AnAnalysis.SetRootCalibInput(Form("%s",optarg));
0182       break;
0183     case 'u':
0184       std::cout<<"CaibrateData: disable trigger primitive calculation" <<std::endl;
0185       AnAnalysis.DisableRecalcTriggPrimitives();
0186       break;
0187     case '?':
0188       std::cout<<"CaibrateData: Option "<<optarg <<" not supported, will be ignored "<<std::endl;
0189       break;
0190     case 'h':
0191       PrintHelp(argv[0]);
0192       return 0;
0193     }
0194   }
0195   if(!AnAnalysis.CheckAndOpenIO()){
0196     std::cout<<"Check input and configurations, inconsistency or error with I/O detected"<<std::endl;
0197     PrintHelp(argv[0]);
0198     return -1;
0199   }
0200 
0201   bool status = AnAnalysis.Process();
0202   if(!AnAnalysis.CheckOutputWriteStatus()) status = false;
0203   if(!status){
0204     std::cerr<<"CaibrateData: processing or output write failed"<<std::endl;
0205     return -1;
0206   }
0207   std::cout<<"Exiting"<<std::endl;
0208   return 0;
0209 }