52{
55
56
57
58
59
60
61 string inputFile;
63 string detectorFile;
64 int line;
66 int minMultiplicity;
67 int minLiveTime_s;
68
69
70 try {
71
72 JParser<> zap(
"Auxiliary program to find depth dependence of multiplicity rates");
73
74 zap[
'f'] =
make_field(inputFile,
"JMM input file");
76
80 zap[
'M'] =
make_field(minMultiplicity,
"Minimum multiplicity") = 8;
81 zap[
'T'] =
make_field(minLiveTime_s,
"Minimum DOM livetime [s] to be eligible for plotting") = 3600;
82
83 zap(argc, argv);
84 }
85
86 catch(const exception &error) {
87 FATAL(error.what() << endl);
88 }
89
90
91
92
93
94
96
97 try {
99 }
102 }
103
105 FATAL(
"Empty detector." << endl);
106
108
110
111 NOTICE(
"Detector base UTM z [m]: " << utm_z << endl);
112
113
114
115
116
117
118 DEBUG(
"Loading input file " << inputFile << endl);
119
120 TFile* in = TFile::Open(inputFile.c_str(), "exist");
121
122 if (in == NULL || !in->IsOpen()) {
123 FATAL(
"File: " << inputFile <<
" not opened." << endl);
124 }
125
126
127
128
129
130
131 DEBUG(
"Loading livetime histogram from " << inputFile << endl);
132
133 TH1D* liveTime = (TH1D*)in->Get("LiveTime");
134
135 if (liveTime == NULL) {
136 FATAL(
"Missing live time histogram.");
137 }
138
142
143 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
144
145 if (module->getString() != line) { continue; }
146
147 STATUS(
"Loading data histogram for from input file: " <<
getLabel(*module) <<
"\t ID = " << module->getID() << endl);
148
149 TH1D* data_histogram = (TH1D*)in->Get(TString(
getLabel(*module)) +
"_P");
150
151 if (data_histogram != NULL) {
152
153 double data_count =
getCount(data_histogram, minMultiplicity);
154 double data_livetime = getLiveTime(liveTime, *module);
155
156 double module_depth = - utm_z - module->getZ();
157
158 if (data_livetime > minLiveTime_s) {
159
160 double val = data_count / data_livetime;
161 double err = sqrt(data_count) / data_livetime;
162
163 NOTICE(module_depth <<
" " << val << endl);
164
165 rate_val.push_back(val);
166 rate_err.push_back(err);
167 depth.push_back( module_depth);
168
169 }
170
171 }
172
173 }
174
175
176 TGraph* gr_data =
new TGraphErrors(
depth.size(), &
depth[0], &rate_val[0], 0, &rate_err[0]);
177
178 gr_data->SetTitle(TString("KM3NeT Preliminary; Depth [m]; Inclusive ") + Form("%d", minMultiplicity) + TString("-fold coincidence rate [Hz]"));
179
181
182 gr_data->Write();
183
184 out.Close();
185
186 return 0;
187
188}
#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).