diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 01a4811..aa4d4fd 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -27,6 +27,18 @@ "cStandard": "gnu17", "cppStandard": "gnu++17", "intelliSenseMode": "linux-gcc-x64" + }, + { + "name": "WinLinux", + "includePath": [ + "${workspaceFolder}/**", + "/home/ryan/Downloads/root/include/**" + ], + "defines": [], + "compilerPath": "/usr/bin/gcc", + "cStandard": "gnu17", + "cppStandard": "gnu++17", + "intelliSenseMode": "linux-gcc-x64" } ], "version": 4 diff --git a/.vscode/settings.json b/.vscode/settings.json index 67b367e..1e65214 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -204,5 +204,6 @@ "bold": false, "italic": false } - ] + ], + "C_Cpp.errorSquiggles": "disabled" } \ No newline at end of file diff --git a/working/ChainMonitors.C b/working/ChainMonitors.C index d73a45e..936f13e 100644 --- a/working/ChainMonitors.C +++ b/working/ChainMonitors.C @@ -1,7 +1,36 @@ -#include "Monitors.C+" // the plus sign mean compilation +#include "Monitor.C+" // the plus sign mean compilation +#include "TObjArray.h" +#include "TFile.h" +#include "TMacro.h" + + +std::string create_range_string(const std::vector& nums) { + char range_str[100]; // buffer to hold the range string + int pos = 0; // current position in the buffer + int start = 0; // start of the current range + int end = 0; // end of the current range + for (int i = 1; i <= nums.size(); i++) { + if (i == nums.size() || nums[i] != nums[i-1]+1) { + end = i-1; + if (start == end) { + pos += std::sprintf(range_str+pos, "%d", nums[start]); + } else if (end == start+1) { + pos += std::sprintf(range_str+pos, "%d_%d", nums[start], nums[end]); + } else { + pos += std::sprintf(range_str+pos, "%d-%d", nums[start], nums[end]); + } + if (i < nums.size()) { + pos += std::sprintf(range_str+pos, "_"); + } + start = i; + } + } + return std::string(range_str, pos); +} + +void ChainMonitors(int RUNNUM = -1, int RUNNUM2 = -1) { + -void ChainMonitors(int RUNNUM = -1, int RUNNUM2 = -1, bool saveCanvas = false, bool isTraceON = false) { - ///default saveCanvas = false, no save Cavas /// = true, save Canvas @@ -11,7 +40,7 @@ void ChainMonitors(int RUNNUM = -1, int RUNNUM2 = -1, bool saveCanvas = false, b /// this list only for manual Chain sort ///********** start Marker for AutoCalibration. - ///chain->Add("../root_data/gen_run135.root"); + chain->Add("../root_data/gen_run005.root"); ///chain->Add("../root_data/trace_run135.root"); ///********** end Marker for AutoCalibration. @@ -24,25 +53,54 @@ void ChainMonitors(int RUNNUM = -1, int RUNNUM2 = -1, bool saveCanvas = false, b if( RUNNUM2 == -1) endRUNNUM = RUNNUM; for( int i = RUNNUM ; i <= endRUNNUM ; i++){ - - if( isTraceON == false )fileName.Form("../root_data/gen_run%03d.root", i); - if( isTraceON == true ) fileName.Form("../root_data/trace_run%03d.root", i); + fileName.Form("../root_data/gen_run%03d.root", i); chain->Add(fileName); } } + TObjArray * fileList = chain->GetListOfFiles(); - printf("\033[0;31m========================================== Number of Files : %2d\n",chain->GetListOfFiles()->GetEntries()); - chain->GetListOfFiles()->Print(); - printf("========================================== Number of Files : %2d\033[0m\n",chain->GetListOfFiles()->GetEntries()); + printf("\033[0;31m========================================== Number of Files : %2d\n",fileList->GetEntries()); + fileList->Print(); + printf("========================================== Number of Files : %2d\033[0m\n",fileList->GetEntries()); printf(" number of entries : %llu \n", chain->GetEntries()); + + double totDuration = 0; + std::vector startTime; + std::vector stopTime; + std::vector runList; - //Simple call TSelector - //chain->Process("Monitors.C+"); + for( int i = 0; i < fileList->GetEntries(); i++){ + TString fileName = fileList->At(i)->GetTitle(); + TFile file(fileName); + TMacro * timeStamp = (TMacro*) file.FindObjectAny("timeStamp"); + //timeStamp->Print(); + + TString haha = timeStamp->GetListOfLines()->At(0)->GetName(); + ULong64_t t1 = haha.Atoll(); + + haha = timeStamp->GetListOfLines()->At(1)->GetName(); + ULong64_t t2 = haha.Atoll(); + + haha = timeStamp->GetListOfLines()->At(2)->GetName(); + int RunID = haha.Atoi(); + + totDuration += (t2-t1)*8./1e9; + startTime.push_back(t1); + stopTime.push_back(t2); + runList.push_back(RunID); + } + + //======== format CanvasTitle + std::sort(runList.begin(), runList.end()); + TString title = "Run:" + create_range_string(runList); + title += Form(" | %.0f min", totDuration/60.) ; + + printf("%s\n", title.Data()); //Some input to TSelector - Monitors * selector = new Monitors(); - if( saveCanvas ) selector->printControl(0); //quit after terminated + Monitor * selector = new Monitor(); + selector->SetCanvasTitle(title); chain->Process(selector, ""); - + } \ No newline at end of file diff --git a/working/Monitor.C b/working/Monitor.C index 95a5298..be0b51b 100644 --- a/working/Monitor.C +++ b/working/Monitor.C @@ -780,17 +780,17 @@ void Monitor::Terminate(){ /************************************/ StpWatch.Start(kFALSE); - //gROOT->ProcessLine(".L ../Armory/Monitor_Util.C"); //TODO some pointer is empty + //gROOT->ProcessLine(".L ../armory/Monitor_Util.C"); //TODO some pointer is empty //printf("=============== loaded Monitor_Utils.C\n"); - gROOT->ProcessLine(".L ../Armory/AutoFit.C"); - printf("=============== loaded Armory/AutoFit.C\n"); - // gROOT->ProcessLine(".L ../Armory/RDTCutCreator.C"); - // printf("=============== loaded Armory/RDTCutCreator.C\n"); - // gROOT->ProcessLine(".L ../Armory/Check_rdtGate.C"); - // printf("=============== loaded Armory/Check_rdtGate.C\n"); - // gROOT->ProcessLine(".L ../Armory/readTrace.C"); + gROOT->ProcessLine(".L ../armory/AutoFit.C"); + printf("=============== loaded armory/AutoFit.C\n"); + // gROOT->ProcessLine(".L ../armory/RDTCutCreator.C"); + // printf("=============== loaded armory/RDTCutCreator.C\n"); + // gROOT->ProcessLine(".L ../armory/Check_rdtGate.C"); + // printf("=============== loaded armory/Check_rdtGate.C\n"); + // gROOT->ProcessLine(".L ../armory/readTrace.C"); // printf("=============== loaded Armory/readTrace.C\n"); - // gROOT->ProcessLine(".L ../Armory/readRawTrace.C"); + // gROOT->ProcessLine(".L ../armory/readRawTrace.C"); // printf("=============== loaded Armory/readRawTrace.C\n"); // gROOT->ProcessLine("listDraws()"); diff --git a/working/Monitor.h b/working/Monitor.h index 7009e0d..d746751 100644 --- a/working/Monitor.h +++ b/working/Monitor.h @@ -100,6 +100,9 @@ public : padID = 0; + timeRange[0] = 0; + timeRange[1] = 100; + } virtual ~Monitor() {