ToolDAQFramework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
TriggersComparison.cpp
Go to the documentation of this file.
1 #include "TriggersComparison.h"
2 
4 
5 bool TriggersComparison::Initialise(std::string configfile, DataModel &data){
6 
7  if(configfile!="") m_variables.Initialise(configfile);
8  //m_variables.Print();
9 
10  m_verbose = 0;
11  m_variables.Get("verbose", m_verbose);
12 
13  //Setup and start the stopwatch
14  bool use_stopwatch = false;
15  m_variables.Get("use_stopwatch", use_stopwatch);
16  m_stopwatch = use_stopwatch ? new util::Stopwatch("TriggersComparison") : 0;
17 
18  m_stopwatch_file = "";
19  m_variables.Get("stopwatch_file", m_stopwatch_file);
20 
22 
23  //open the output file
24  Log("DEBUG: TriggersComparison::Initialise opening output file...", DEBUG2, m_verbose);
25  if(! m_variables.Get("outfilename", m_output_filename)) {
26  Log("ERROR: outfilename configuration not found. Cancelling initialisation", ERROR, m_verbose);
27  return false;
28  }
29  m_output_file = new TFile(m_output_filename.c_str(), "RECREATE");
30 
31  //open the input files
32  Log("DEBUG: TriggersComparison::Initialise opening input file 1...", DEBUG2, m_verbose);
33  if(! m_variables.Get("inputfilename1", m_input_filename1)) {
34  Log("ERROR: inputfilename1 configuration not found. Cancelling initialisation", ERROR, m_verbose);
35  return false;
36  }
37  m_input_file1 = new TFile(m_input_filename1.c_str(), "READ");
38  m_header_tree1 = (TTree*)m_input_file1->Get("header");
39  m_header_tree1->SetBranchAddress("interpose_interval",&m_interpose_interval1);
40  m_header_tree1->GetEntry(0);
41  m_triggers_tree1 = (TTree*)m_input_file1->Get("triggers");
42  m_triggers_tree1->SetBranchAddress("trigger_time",&the_trigger_time1);
43  m_triggers_tree1->SetBranchAddress("readout_start_time",&the_readout_start_time1);
44  m_triggers_tree1->SetBranchAddress("readout_end_time",&the_readout_end_time1);
45 
46  Log("DEBUG: TriggersComparison::Initialise opening input file 2...", DEBUG2, m_verbose);
47  if(! m_variables.Get("inputfilename2", m_input_filename2)) {
48  Log("ERROR: inputfilename2 configuration not found. Cancelling initialisation", ERROR, m_verbose);
49  return false;
50  }
51  m_input_file2 = new TFile(m_input_filename2.c_str(), "READ");
52  m_header_tree2 = (TTree*)m_input_file2->Get("header");
53  m_header_tree2->SetBranchAddress("interpose_interval",&m_interpose_interval2);
54  m_header_tree2->GetEntry(0);
55  m_triggers_tree2 = (TTree*)m_input_file2->Get("triggers");
56  m_triggers_tree2->SetBranchAddress("trigger_time",&the_trigger_time2);
57  m_triggers_tree2->SetBranchAddress("readout_start_time",&the_readout_start_time2);
58  m_triggers_tree2->SetBranchAddress("readout_end_time",&the_readout_end_time2);
59 
60  std::clog << " m_interpose_interval1 " << m_interpose_interval1 << " m_interpose_interval2 " << m_interpose_interval2 << std::endl;
61 
62  //set number of events
63  if(! m_variables.Get("nevents1", m_n_events1) ) {
64  m_n_events1 = -1;
65  }
66  if(! m_variables.Get("first_event1", m_first_event_num1) ) {
68  }
69  if(m_n_events1 <= 0)
70  m_n_events1 = m_triggers_tree1->GetEntries();
71  else if (m_n_events1 > m_triggers_tree1->GetEntries())
72  m_n_events1 = m_triggers_tree1->GetEntries();
75  }
76  else if(m_first_event_num1 < 0) {
78  }
80  if(! m_variables.Get("nevents2", m_n_events2) ) {
81  m_n_events2 = -1;
82  }
83  if(! m_variables.Get("first_event2", m_first_event_num2) ) {
85  }
86  if(m_n_events2 <= 0)
87  m_n_events2 = m_triggers_tree2->GetEntries();
88  else if (m_n_events2 > m_triggers_tree2->GetEntries())
89  m_n_events2 = m_triggers_tree2->GetEntries();
92  }
93  else if(m_first_event_num2 < 0) {
95  }
97 
98  m_variables.Get("timebinsize", timebinsize);
99 
100 
101  float min_trigger_time_1 = m_triggers_tree1->GetMinimum("trigger_time");
102  float max_trigger_time_1 = m_triggers_tree1->GetMaximum("trigger_time");
103 
104  float min_trigger_time_2 = m_triggers_tree2->GetMinimum("trigger_time");
105  float max_trigger_time_2 = m_triggers_tree2->GetMaximum("trigger_time");
106 
107  min_readout_time_1 = m_triggers_tree1->GetMinimum("readout_start_time");
108  max_readout_time_1 = m_triggers_tree1->GetMaximum("readout_end_time");
109 
110  min_readout_time_2 = m_triggers_tree2->GetMinimum("readout_start_time");
111  max_readout_time_2 = m_triggers_tree2->GetMaximum("readout_end_time");
112 
113  h_triggertime_1 = new TH1F("h_triggertime_1","h_triggertime_1; time [ns];",(int)((max_trigger_time_1 - min_trigger_time_1 + 1)/timebinsize), min_trigger_time_1-timebinsize/2.,max_trigger_time_1+timebinsize/2.);
114  h_triggertime_1->SetLineColor(kBlack);
115  h_triggertime_1->SetLineWidth(2);
116  h_triggertime_2 = new TH1F("h_triggertime_2","h_triggertime_2; time [ns];",(int)((max_trigger_time_2 - min_trigger_time_2 + 1)/timebinsize), min_trigger_time_2-timebinsize/2.,max_trigger_time_2+timebinsize/2.);
117  h_triggertime_2->SetLineColor(kRed);
118  h_triggertime_2->SetLineWidth(2);
119 
120  h_acceptedtime_1 = new TH1I("h_acceptedtime_1","h_acceptedtime_1; time [ns];",(int)((max_readout_time_1 - min_readout_time_1 + 1)/timebinsize), min_readout_time_1-timebinsize/2.,max_readout_time_1+timebinsize/2.);
121  h_acceptedtime_1->SetLineColor(kBlack);
122  h_acceptedtime_1->SetLineWidth(2);
123  h_acceptedtime_2 = new TH1I("h_acceptedtime_2","h_acceptedtime_2; time [ns];",(int)((max_readout_time_2 - min_readout_time_2 + 1)/timebinsize), min_readout_time_2-timebinsize/2.,max_readout_time_2+timebinsize/2.);
124  h_acceptedtime_2->SetLineColor(kRed);
125  h_acceptedtime_2->SetLineWidth(2);
126 
127  h_selections_intersection = new TH1F("h_selections_intersection","h_selections_intersection",3,-2.5,1.5);
128  h_selections_intersection->SetLineColor(kBlack);
129  h_selections_intersection->SetLineWidth(2);
130 
131  if(m_stopwatch) Log(m_stopwatch->Result("Initialise"), INFO, m_verbose);
132 
133  return true;
134 }
135 
136 
139 
140  if(m_n_events1 <= 0) {
141  return true;
142  }
143 
144  //get the digits
145  if(m_triggers_tree1->GetEntry(m_current_event_num1)) {
147  for(int ibin = h_acceptedtime_1->GetXaxis()->FindBin(the_readout_start_time1); ibin <= h_acceptedtime_1->GetXaxis()->FindBin(the_readout_end_time1); ibin ++){
148  h_acceptedtime_1->SetBinContent(ibin,1);
149  }
150  }
151 
152  if(m_triggers_tree2->GetEntry(m_current_event_num2)) {
154  for(int ibin = h_acceptedtime_2->GetXaxis()->FindBin(the_readout_start_time2); ibin <= h_acceptedtime_2->GetXaxis()->FindBin(the_readout_end_time2); ibin ++){
155  h_acceptedtime_2->SetBinContent(ibin,1);
156  }
157  }
158 
159 
160  std::clog << " m_current_event_num1 " << m_current_event_num1 << std::endl;
161  std::clog << " m_current_event_num2 " << m_current_event_num2 << std::endl;
162 
163  //and finally, increment event counter
166 
167  //and flag to exit the Execute() loop, if appropriate
171  return false;
172  }
173 
175 
176  return true;
177 }
178 
179 
181 
182  if(m_stopwatch) {
184  m_stopwatch->Start();
185  }
186 
187  float time_min = std::min(min_readout_time_1, min_readout_time_2);
188  float time_max = std::max(max_readout_time_1, max_readout_time_2);
189  float local_time;
190 
191  for(int itime = 0; itime <= (int)(time_max - time_min + 1)/timebinsize; itime ++){
192  local_time = time_min + itime*timebinsize;
193  bool trigger1 = (bool)h_acceptedtime_1->GetBinContent(h_acceptedtime_1->FindBin(local_time));
194  bool trigger2 = (bool)h_acceptedtime_2->GetBinContent(h_acceptedtime_2->FindBin(local_time));
195 
196  if( trigger1 && trigger2 )
197  h_selections_intersection->Fill(0.,timebinsize);
198  else if( trigger1 )
199  h_selections_intersection->Fill(-1.,timebinsize);
200  else if( trigger2 )
201  h_selections_intersection->Fill(1.,timebinsize);
202  else
203  h_selections_intersection->Fill(-2.,timebinsize);
204  }
205 
206  m_output_file->cd();
207 
208  h_triggertime_1->Write();
209  h_triggertime_2->Write();
210  h_acceptedtime_1->Write();
211  h_acceptedtime_2->Write();
212  h_selections_intersection->Write();
213 
214  m_output_file->Close();
215 
216  m_input_file1->Close();
217  m_input_file2->Close();
218 
219  delete m_input_file1;
220  delete m_input_file2;
221  delete m_output_file;
222 
223  if(m_stopwatch) {
224  Log(m_stopwatch->Result("Finalise"), INFO, m_verbose);
225  delete m_stopwatch;
226  }
227 
228  return true;
229 }
util::Stopwatch * m_stopwatch
The stopwatch, if we&#39;re using one.
std::string Result(std::string method_name, std::string output_file="")
Definition: Stopwatch.cpp:38
std::string m_input_filename1
names of input ROOT trees
long int m_n_events2
The total number of events from file2.
void Start()
Start the stopwatch.
Definition: Stopwatch.cpp:18
long int m_first_event_num1
The first event number from file1 to read.
StopwatchTimes Stop()
Stop the stopwatch, returning the CPU time.
Definition: Stopwatch.cpp:24
TH1F * h_triggertime_1
output histograms
std::string m_output_filename
Output ROOT filename that this tool RECREATE&#39;s.
long int m_current_event_num1
The current event number from file1.
TFile * m_output_file
Output ROOT file.
std::string m_input_filename2
long int m_first_event_num2
The first event number from file2 to read.
TFile * m_input_file1
input ROOT files
std::string m_stopwatch_file
Image filename to save the histogram to, if required.
TTree * m_triggers_tree1
input trees containing triggers
long int m_current_event_num2
The current event number from file2.
int m_verbose
Verbosity level, as defined in tool parameter file.
float the_trigger_time1
trigger time
long int m_n_events1
The total number of events from file1.
TTree * m_header_tree1
input headers trees
void Log(const std::string &message, const int message_level)
Format messages in the same way as for tools.
Definition: Utilities.cpp:276
bool Initialise(std::string configfile, DataModel &data)