54{
57
58
59
60
61
62
63 string inputFile;
65 string detectorFile;
66 int line;
68 int minMultiplicity;
69 int minLiveTime_s;
70
71
72 try {
73
74 JParser<> zap(
"Auxiliary program to find depth dependence of multiplicity rates");
75
76 zap[
'f'] =
make_field(inputFile,
"JMM input file");
78
82 zap[
'M'] =
make_field(minMultiplicity,
"Minimum multiplicity") = 8;
83 zap[
'T'] =
make_field(minLiveTime_s,
"Minimum DOM livetime [s] to be eligible for plotting") = 3600;
84
85 zap(argc, argv);
86 }
87
88 catch(const exception &error) {
89 FATAL(error.what() << endl);
90 }
91
92
93
94
95
96
98
99 try {
101 }
104 }
105
107 FATAL(
"Empty detector." << endl);
108
110
112
113 NOTICE(
"Detector base UTM z [m]: " << utm_z << endl);
114
115
116
117
118
119
120 DEBUG(
"Loading input file " << inputFile << endl);
121
122 TFile* in = TFile::Open(inputFile.c_str(), "exist");
123
124 if (in == NULL || !in->IsOpen()) {
125 FATAL(
"File: " << inputFile <<
" not opened." << endl);
126 }
127
128
129
130
131
132
133 DEBUG(
"Loading livetime histogram from " << inputFile << endl);
134
135 TH1D* liveTime = (TH1D*)in->Get("LiveTime");
136
137 if (liveTime == NULL) {
138 FATAL(
"Missing live time histogram.");
139 }
140
144
145 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
146
147 if (module->getString() != line) { continue; }
148
149 STATUS(
"Loading data histogram for from input file: " <<
getLabel(*module) <<
"\t ID = " << module->getID() << endl);
150
151 TH1D* data_histogram = (TH1D*)in->Get(TString(
getLabel(*module)) +
"_P");
152
153 if (data_histogram != NULL) {
154
155 double data_count =
getCount(data_histogram, minMultiplicity);
156 double data_livetime = getLiveTime(liveTime, *module);
157
158 double module_depth = - utm_z - module->getZ();
159
160 if (data_livetime > minLiveTime_s) {
161
162 double val = data_count / data_livetime;
163 double err = sqrt(data_count) / data_livetime;
164
165 NOTICE(module_depth <<
" " << val << endl);
166
167 rate_val.push_back(val);
168 rate_err.push_back(err);
169 depth.push_back( module_depth);
170
171 }
172
173 }
174
175 }
176
177
178 TGraph* gr_data =
new TGraphErrors(
depth.size(), &
depth[0], &rate_val[0], 0, &rate_err[0]);
179
180 gr_data->SetTitle(TString("KM3NeT Preliminary; Depth [m]; Inclusive ") + Form("%d", minMultiplicity) + TString("-fold coincidence rate [Hz]"));
181
183
184 gr_data->Write();
185
186 out.Close();
187
188 return 0;
189
190}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Router for direct addressing of module data in detector data structure.
Utility class to parse command line options.
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.
size_t getCount(const array_type< T > &buffer, const JCompare_t &compare)
Count number of unique values.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).