ToolDAQFramework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
Calibrate.cpp
Go to the documentation of this file.
1 #include "Calibrate.h"
2 #include <iostream>
4 
6 bool Calibrate::Initialise(std::string configfile, DataModel &data){
7  if(configfile!="") m_variables.Initialise(configfile);
8 //m_variables.Print();
9  m_variables.Get("verbose", m_verbose);
10 //Setup and start the stopwatch
11  bool use_stopwatch = false;
12  m_variables.Get("use_stopwatch", use_stopwatch);
13  m_stopwatch = use_stopwatch ? new util::Stopwatch("Calibrate") : 0;
14  m_variables.Get("stopwatch_file", m_stopwatch_file_name);
16  m_data= &data;
17 // Find the calibration_file configuration line and read in the calibration information
18  m_variables.Get("calibration_file", m_calibration_file_name);
19  if(m_verbose>INFO)std::cout<<"Read Calibration Information from "<<m_calibration_file_name<<std::endl;
21  if(m_stopwatch) Log(m_stopwatch->Result("Initialise"), INFO, m_verbose);
22  return true;
23 }
26 // Dump hits for debugging purposes
27  if(m_verbose>DEBUG2){
28  std::cout<<" Dump of all hits before calibration."<<std::endl;
29  DumpHits(m_data->IDSamples);
30  }
31  // Apply calibration to the inner detector data
32 
33  ApplyCalibration(m_data->IDSamples);
34 
35 // For debug purposes, dump all hits after calibration
36  if(m_verbose>DEBUG2){
37 
38  std::cout<<" Dump of all hits after calibration. "<<std::endl;
39 
40  DumpHits(m_data->IDSamples);
41  }
43  return true;
44 }
45 // Finish off, nothing special/
47  if(m_stopwatch) {
49  m_stopwatch->Start();
50  }
52  if(m_stopwatch) {
53  Log(m_stopwatch->Result("Finalise"), INFO, m_verbose);
54  delete m_stopwatch;
55  }
56  return true;
57 }
58 // Apply calibration to a single photomultiplier
59 void Calibrate::ApplyCalibration(const int& PMTid, float& charge, TimeDelta::short_time_t& time,bool& masked)
60 {
61  if(m_verbose>DEBUG1)std::cout<<" Apply calibration to PMT with ID "<<PMTid<<std::endl;
62  auto location=calibrationInformation.find(PMTid);
63  if(location != calibrationInformation.end())
64  {
65  if(m_verbose>DEBUG1)
66  std::cout<<" apply calibration, masked : "<<location->second.masked<<" and charge scaling "<<location->second.chargeScaling<<std::endl;
67  masked=location->second.masked;
68  charge*=location->second.chargeScaling;
69  }
70 }
71 // Apply calibration to a vector of SubSample objects
72 void Calibrate::ApplyCalibration(std::vector<SubSample> &samples)
73 {
74  for (auto& sample : samples )
75  {
76  // Loop over all hits in this sample and apply calibration to each one
77  for(int hit=sample.m_first_unique;hit<sample.m_PMTid.size();hit++)
78  {
79  bool masked=sample.m_masked[hit];
80  if(not masked ){
81  ApplyCalibration(sample.m_PMTid[hit],
82  sample.m_charge[hit],
83  sample.m_time[hit],
84  masked);
85  sample.m_masked[hit]=masked;
86  }
87  }
88  }
89 
90 }
91 // Read in calibration data and store it in memory.
92 void Calibrate::readCalibration(std::string calibrationFileName)
93 {
95 
96  std::ifstream input(calibrationFileName);
97  if(!input)
98  {
99  if(m_verbose>=WARN)
100  std::cout<<"Failed to open "<<calibrationFileName<<" to read in calibration information "<<std::endl;
101  }
102  else
103  {
104 // First read in the header to check the file is valid
105  std::string headerName ;
106  float headerVersion;
107  float calibrationVersion;
108  input >>headerName ;
109  if(headerName.compare("HKDAQCalibration")!=0)
110  {
111  if(m_verbose>=WARN)
112  std::cout<<" Calibration data header does not start with HKDAQCalibration - no calibration possible "<<std::endl;
113  return;
114  }
115  // Read in versions of file format and calibration data
117  input >>headerVersion;
118  input >>calibrationVersion;
119 
120  if(m_verbose>INFO)
121  {
122  std::ios oldState(nullptr);
123  oldState.copyfmt(std::cout);
124  std::cout<<" Calibration information read from "<<calibrationFileName<<std::endl<<
125  " File format "<<std::fixed<<std::setprecision( 2 )<<headerVersion<<" calibrationVersion "<<calibrationVersion <<std::endl<<
126  " PMT Channel ID : masked? : charge scaling factor "<<std::endl;
127  std::cout.copyfmt(oldState);
128  }
129  // Loop through the file and populate calibrationInformation map
130  while(!input.eof())
131  {
132  PMTChannelID ID;
133  input >>ID;
134  calibrationData data;
135  input >>data.masked ;
136  input >>data.chargeScaling ;
137  calibrationInformation[ID]=data;
138  if(m_verbose>INFO)
139  {
140  std::cout<<ID<<" "<<data.masked<<" "<<data.chargeScaling<<std::endl;
141  }
142  }
143  if(m_verbose>DEBUG1)
144  for (auto element : calibrationInformation)
145  {
146  std::cout<<element.first<<" "<<element.second.masked<<" "<<element.second.chargeScaling<<std::endl;
147  }
148  }
149  return;
150  }
151 
152 // Dump Hits - for debugging
153 void Calibrate::DumpHits(std::vector<SubSample> &samples)
154 {
155  std::cout<<" loop over "<<samples.size()<<" values "<<std::endl;
156  for (auto sample : samples)
157  {
158  std::cout<<" loop over "<<sample.m_PMTid.size()<<" hits "<<std::endl;
159 
160  for(int hit=sample.m_first_unique;hit<sample.m_PMTid.size();hit++)
161  {
162  bool masked=sample.m_masked[hit];
163  DumpHit(sample.m_PMTid[hit],
164  sample.m_charge[hit],
165  sample.m_time[hit],
166  masked);
167  }
168  }
169 }
170 // Dump one hit - for debugging
171 void Calibrate::DumpHit(const int& PMTid, float& charge, TimeDelta::short_time_t& time,bool& masked)
172 {
173  std::cout<<PMTid<<" "<<charge<<" "<<time<<" mask "<<masked<<std::endl;
174 }
std::string m_calibration_file_name
File name for file containg calibration information.
Definition: Calibrate.h:69
std::string Result(std::string method_name, std::string output_file="")
Definition: Stopwatch.cpp:38
bool Finalise()
Clean up resources.
Definition: Calibrate.cpp:46
float short_time_t
Type for relative hit times within a SubSample. Unit = ns.
Definition: TimeDelta.h:37
util::Stopwatch * m_stopwatch
The stopwatch, if we&#39;re using one.
Definition: Calibrate.h:65
void Start()
Start the stopwatch.
Definition: Stopwatch.cpp:18
StopwatchTimes Stop()
Stop the stopwatch, returning the CPU time.
Definition: Stopwatch.cpp:24
void DumpHit(const int &PMTid, float &charge, TimeDelta::short_time_t &time, bool &masked)
Definition: Calibrate.cpp:171
bool Initialise(std::string configfile, DataModel &data)
Definition: Calibrate.cpp:6
std::string m_stopwatch_file_name
Image filename to save the histogram to, if required.
Definition: Calibrate.h:67
std::map< PMTChannelID, calibrationData > calibrationInformation
Calibration data store.
Definition: Calibrate.h:94
Calibrate()
Constructor. Sets validCalibrationDataFound false.
Definition: Calibrate.cpp:5
void DumpHits(std::vector< SubSample > &samples)
Definition: Calibrate.cpp:153
void ApplyCalibration(std::vector< SubSample > &samples)
Definition: Calibrate.cpp:72
void readCalibration(std::string calibrationFileName)
Definition: Calibrate.cpp:92
bool Execute()
Applly the calibration to the contents of m_data . Calls ApplyCalibration to do the work...
Definition: Calibrate.cpp:24
void Log(const std::string &message, const int message_level)
Format messages in the same way as for tools.
Definition: Utilities.cpp:276
Calibration data format for use at run time.
Definition: Calibrate.h:87
int PMTChannelID
Definition: Calibrate.h:92
static bool validCalibrationDataFound
Remember whether a valid calibration data file has been read in or not.
Definition: Calibrate.h:29
int m_verbose
Verbosity level, as defined in tool parameter file.
Definition: Calibrate.h:75