Jpp  18.0.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JPlotPMTParameters2D.cc File Reference

Auxiliary application to plot PMT parameters. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <vector>
#include <map>
#include "TROOT.h"
#include "TFile.h"
#include "TH2D.h"
#include "km3net-dataformat/online/JDAQ.hh"
#include "JDetector/JDetector.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JDetector/JPMTParametersMap.hh"
#include "JDetector/JPMTParametersToolkit.hh"
#include "JDetector/JDetectorAddressMap.hh"
#include "JDetector/JDetectorAddressMapToolkit.hh"
#include "JROOT/JManager.hh"
#include "JGizmo/JGizmoToolkit.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Auxiliary application to plot PMT parameters.

Author
mdejong, rgruiz

Definition in file JPlotPMTParameters2D.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 51 of file JPlotPMTParameters2D.cc.

52 {
53  using namespace std;
54  using namespace JPP;
55  using namespace KM3NETDAQ;
56 
57  string detectorFile;
58  vector<string> inputFile;
59  string outputFile;
60  string regexp;
61  int labelInterval;
62  bool showPMTAddress;
63  bool relative;
64  int debug;
65 
66  try {
67 
68  JParser<> zap("Auxiliary application to plot PMT parameters.");
69 
70  zap['a'] = make_field(detectorFile, "detector file.");
71  zap['P'] = make_field(inputFile, "PMT calibration data file(s)");
72  zap['o'] = make_field(outputFile, "output file.") = "pmt_parameters.root";
73  zap['r'] = make_field(regexp, "regular expresion to extract bin labels for the x-axis") = "";
74  zap['A'] = make_field(showPMTAddress, "show PMT address on y-axis");
75  zap['L'] = make_field(labelInterval, "interval between x-axis bins for which labels are shown") = 1;
76  zap['R'] = make_field(relative, "monitor changes relative to first input");
77  zap['d'] = make_field(debug, "debug") = 0;
78 
79  zap(argc, argv);
80  }
81  catch(const exception &error) {
82  FATAL(error.what() << endl);
83  }
84 
85  JDetector detector;
86 
87  try {
88  load(detectorFile, detector);
89  }
90  catch(const JException& error) {
91  FATAL(error);
92  }
93 
94  if (detector.empty()) {
95  FATAL("Empty detector." << endl);
96  }
97 
99 
100  for (vector<string>::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
101  parameters.push_back(JPMTParametersMap(i->c_str()));
102  }
103 
104 
105  const int NUMBER_OF_FILES = parameters.size();
106 
107  JManager<string, TH2D> manager(new TH2D("%", NULL,
108  NUMBER_OF_FILES, -0.5, NUMBER_OF_FILES - 0.5,
109  NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS - 0.5));
110 
111  manager->Sumw2(kFALSE);
112 
113  if (regexp != "") {
114 
115  const int n = (NUMBER_OF_FILES < labelInterval) ? 1 : labelInterval;
116 
117  const TPRegexp buffer(regexp);
118 
119  for (int i = 0; i != NUMBER_OF_FILES; ++i) {
120 
121  if(i%n == 0)
122  manager->GetXaxis()->SetBinLabel(i+1 , parse(buffer, TString(inputFile[i].c_str())));
123  else
124  manager->GetXaxis()->SetBinLabel(i+1 , " ");
125  }
126  }
127 
128  for (JDetector::iterator module = detector.begin(); module != detector.end(); ++module) {
129 
130  DEBUG("Module " << setw(10) << module->getID() << endl);
131 
132  for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
133 
134  map<string, double> buffer; // buffer values of first input
135 
136  for (int i = 0; i != NUMBER_OF_FILES; ++i) {
137 
138  const JProperties properties = parameters[i].getPMTParameters(JPMTIdentifier(module->getID(), pmt)).getProperties();
139 
140  for (JProperties::const_iterator p = properties.begin(); p != properties.end(); ++p) {
141 
142  double value = 0.0;
143 
144  try { value = (p->second.getValue<const double>()); } catch(const exception& error) {}
145  try { value = (p->second.getValue<const bool>() ? 1.0 : 0.0); } catch(const exception& error) {}
146 
147  if (i == 0) { buffer[p->first] = value; }
148  if (relative) { value -= buffer[p->first]; }
149 
150  manager[MAKE_CSTRING(module->getID() << "." << p->first)]->SetBinContent(i + 1, pmt + 1, value);
151  }
152 
153  double value = getEfficiency(parameters[i].getPMTParameters(JPMTIdentifier(module->getID(), pmt)));
154 
155  if (i == 0) { buffer[EFFICIENCY] = value; }
156  if (relative) { value -= buffer[EFFICIENCY]; }
157 
158  manager[MAKE_CSTRING(module->getID() << "." << EFFICIENCY)]->SetBinContent(i + 1, pmt + 1, value);
159  }
160  }
161  }
162 
163  for (JManager<string, TH2D>::iterator i = manager.begin(); i != manager.end(); ++i) {
164  i->second->Sumw2(kFALSE);
165  }
166 
167  if (showPMTAddress) {
168 
169  const JDetectorAddressMap& demo = getDetectorAddressMap(detector.getID());
170 
171  for (JManager<string, TH2D>::iterator i = manager.begin(); i != manager.end(); ++i) {
172 
173  int id;
174 
175  istringstream(i->first) >> id;
176 
177  setAxisLabels(*i->second, "Y", demo.get(id));
178  }
179  }
180 
181  manager.Write(outputFile.c_str());
182 }
Utility class to parse command line options.
Definition: JParser.hh:1514
Utility class to parse parameter values.
Definition: JProperties.hh:496
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
Definition: diff-Tuna.sh:38
#define MAKE_CSTRING(A)
Make C-string.
Definition: JPrint.hh:136
string outputFile
boost::property_tree::ptree parse(std::string str)
Definition: configure.hh:24
const int n
Definition: JPolint.hh:697
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1989
void setAxisLabels(TAxis *axis, const JModuleAddressMap &memo)
Set axis with PMT address labels.
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
#define FATAL(A)
Definition: JMessage.hh:67
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
do set_variable DETECTOR_TXT $WORKDIR detector
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Definition: JDAQ.hh:26
int debug
debug level
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62