32{
36
37 const char* const address_t = "address";
38 const char* const index_t = "index";
39
42 string detectorFile;
43 string option;
45
46 try {
47
49
50 zap[
'f'] =
make_field(inputFile,
"1st output of JMergeCalibrateK40 and 2nd output of JFitK40");
52 zap[
'a'] =
make_field(detectorFile,
"detector file.");
53 zap[
'O'] =
make_field(option,
"axis label") = address_t, index_t;
55
56 zap(argc, argv);
57 }
58 catch(const exception &error) {
59 FATAL(error.what() << endl);
60 }
61
62
64
65 try {
67 }
70 }
71
73
74
75 TFile* in[] = { NULL, NULL };
76
77 for (int i = 0; i != 2; ++i) {
78
79 in[i] = TFile::Open(inputFile[i].c_str(), "exist");
80
81 if (in[i] == NULL || !in[i]->IsOpen()) {
82 FATAL(
"File: " << inputFile[i] <<
" not opened." << endl);
83 }
84 }
85
86
88
89 for (JDetector::iterator module =
detector.begin(); module !=
detector.end(); ++module) {
90
91 if (module->getFloor() == 0) {
92 continue;
93 }
94
95 TH2D* h2[] = {
96 (TH2D*) in[0]->Get(
MAKE_CSTRING(module->getID() << _2R)),
98 };
99
100 if (h2[0] == NULL || h2[0]->GetEntries() == 0 ||
101 h2[1] == NULL || h2[1]->GetEntries() == 0) {
102 continue;
103 }
104
105 DEBUG(
"Module " << setw(10) << module->getID() <<
' ' <<
getLabel(module->getLocation()) << endl);
106
108
110
112 h2[0]->GetXaxis()->GetNbins(), h2[0]->GetXaxis()->GetXmin(), h2[0]->GetXaxis()->GetXmax());
113
115 NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS - 0.5,
116 NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS - 0.5);
117
118 for (int ix = 1; ix <= h2[0]->GetXaxis()->GetNbins(); ++ix) {
119
121
122 double Y = 0.0;
123 double F = 0.0;
124 double V = 0.0;
125 int N = 0;
126
127 for (int iy = 1; iy <= h2[0]->GetYaxis()->GetNbins(); ++iy) {
128
129 const double y1 = h2[0]->GetBinContent(ix,iy);
130 const double w1 = h2[0]->GetBinError (ix,iy);
131 const double f1 = h2[1]->GetBinContent(ix,iy);
132
133 if (w1 > 0.0) {
134 Y += y1;
137 N += 1;
138 }
139 }
140
141 if (N != 0) {
142
143 V /= N;
144
145 h1.SetBinContent(ix, V);
146
147 hx.Fill(
pair.first,
pair.second, V);
148 hx.Fill(
pair.second,
pair.first, V);
149 }
150
151 DEBUG(setw(3) << ix <<
' '
152 <<
"(" <<
FILL(2,
'0') <<
pair.first <<
"," <<
FILL(2,
'0') <<
pair.second <<
")" <<
FILL() <<
' '
154 <<
FIXED(9,2) << Y <<
' '
155 <<
FIXED(9,2) << F <<
' '
156 <<
FIXED(9,2) << V <<
' ' << (fabs(V) > 3.0 ?
"***" :
"") <<endl);
157 }
158
159 if (option == address_t) {
162 }
163
164 out << h1 << hx;
165 }
166
167 for (int i = 0; i != 2; ++i) {
168 in[i]->Close();
169 }
170
171 out.Write();
172 out.Close();
173}
#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.
Lookup table for PMT addresses in optical module.
const JPMTPhysicalAddress & getPMTPhysicalAddress(const int tdc) const
Get PMT physical address.
Utility class to parse command line options.
const JPolynome f1(1.0, 2.0, 3.0)
Function.
std::string getLabel(const JLocation &location)
Get module label for monitoring and other applications.
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.
Auxiliary data structure for sequence of same character.
Auxiliary data structure for floating point format specification.
PMT combinatorics for optical module.