52{
56
57 string detectorFile;
60 string regexp;
61 int labelInterval;
62 bool showPMTAddress;
63 bool relative;
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)");
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");
78
79 zap(argc, argv);
80 }
81 catch(const exception &error) {
82 FATAL(error.what() << endl);
83 }
84
86
87 try {
89 }
92 }
93
95 FATAL(
"Empty detector." << endl);
96 }
97
99
100 for (vector<string>::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
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
135
136 for (int i = 0; i != NUMBER_OF_FILES; ++i) {
137
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
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
178 }
179 }
180
182}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_CSTRING(A)
Make C-string.
Lookup table for PMT addresses in detector.
const JModuleAddressMap & get(const int id) const
Get module address map.
Auxiliary class for map of PMT parameters.
Utility class to parse parameter values.
Utility class to parse command line options.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
void setAxisLabels(TAxis *axis, const JModuleAddressMap &memo)
Set axis with PMT address labels.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
KM3NeT DAQ data structures and auxiliaries.
boost::property_tree::ptree parse(std::string str)