31{
35
39 string regexp;
40 int labelInterval;
42
43 try {
44
45 JParser<> zap(
"Auxiliary application to plot detector parameters.");
46
47 zap[
'a'] =
make_field(detectorFileA,
"detector file.");
50 zap[
'r'] =
make_field(regexp,
"regular expresion to extract bin labels for the x-axis") =
" ";
51 zap[
'L'] =
make_field(labelInterval,
"interval between x-axis bins for which labels are shown") = 1;
53
54 zap(argc, argv);
55 }
56 catch(const exception &error) {
57 FATAL(error.what() << endl);
58 }
59
60
61 if (detectorFileA.empty()) {
62 FATAL(
"No detector file specified." << endl);
63 }
64
65 if (detectorFileB.size() != 0 && detectorFileB.size() != detectorFileA.size()) {
66 FATAL(
"Detector file size " << detectorFileA.size() <<
" != " << detectorFileB.size() << endl);
67 }
68
69
70 const int NUMBER_OF_FILES = detectorFileA.size();
71
72 JManager<string, TH2D> manager(new TH2D("%", NULL,
73 NUMBER_OF_FILES, -0.5, NUMBER_OF_FILES - 0.5,
74 NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS - 0.5));
75
76 manager->Sumw2(kFALSE);
77
78 if (regexp != " "){
79
80 const int n = (NUMBER_OF_FILES < labelInterval) ? 1 : labelInterval;
81
82 const TPRegexp buffer(regexp);
83
84 for (int i = 0; i != NUMBER_OF_FILES; ++i){
85
86 if(i%n == 0)
87 manager->GetXaxis()->SetBinLabel(i+1 ,
parse(buffer , TString(detectorFileA[i].c_str())));
88 else
89 manager->GetXaxis()->SetBinLabel(i+1 , " ");
90 }
91 }
92
93
94 if (detectorFileB.empty()) {
95
97
98 try {
100 }
103 }
104
106 FATAL(
"Empty detector." << endl);
107 }
108
109
110 for (int i = 0; i != NUMBER_OF_FILES; ++i) {
111
112 NOTICE(
"Histogram " << detectorFileA[i] <<
" relative to " << detectorFileA[0] << endl);
113
115
116 try {
117 load(detectorFileA[i], buffer);
118 }
121 }
122
124
125 for (JDetector::iterator module =
detector.begin(); module !=
detector.end(); ++module) {
126
127 TH2D* h2 = manager[
MAKE_CSTRING(module->getID() <<
"." <<
"t0")];
128
129 for (size_t pmt = 0; pmt != module->size(); ++pmt) {
130 h2->SetBinContent(i+1, pmt+1, router.getModule(module->getID()).getPMT(pmt).getT0() - module->getPMT(pmt).getT0());
131 }
132 }
133 }
134
135 } else {
136
137 for (int i = 0; i != NUMBER_OF_FILES; ++i) {
138
139 NOTICE(
"Histogram " << detectorFileA[i] <<
" relative to " << detectorFileB[i] << endl);
140
143
144 try {
145 load(detectorFileA[i], detectorA);
146 load(detectorFileB[i], detectorB);
147 }
150 }
151
153
154 for (JDetector::iterator module = detectorA.begin(); module != detectorA.end(); ++module) {
155
156 TH2D* h2 = manager[
MAKE_CSTRING(module->getID() <<
"." <<
"t0")];
157
158 for (size_t pmt = 0; pmt != module->size(); ++pmt) {
159 h2->SetBinContent(i+1, pmt+1, router.getModule(module->getID()).getPMT(pmt).getT0() - module->getPMT(pmt).getT0());
160 }
161 }
162 }
163 }
164
165
166 for (JManager<string, TH2D>::iterator i = manager.begin(); i != manager.end(); ++i) {
167 i->second->Sumw2(kFALSE);
168 }
169
171}
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_CSTRING(A)
Make C-string.
Router for direct addressing of module data in detector data structure.
Utility class to parse command line options.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
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)
Empty structure for specification of parser element that is initialised (i.e. does not require input)...