68int main(
int argc,
char **argv)
77 typedef JSingleFileScanner_t::pointer_type pointer_type;
82 JLimit_t& numberOfEvents = inputFile.getLimit();
84 JCalibration_t calibrationFile;
92 JParser<> zap(
"Program to extract information about hits and all PMTs in the detector for water property studies");
106 catch(
const exception& error) {
107 FATAL(error.what() << endl);
120 unique_ptr<JDynamics> dynamics;
124 dynamics->load(calibrationFile);
126 catch(
const exception& error) {
127 if (!calibrationFile.empty()) {
134 out =
new TFile(
outputFile.c_str(),
"RECREATE");
136 catch(
const exception& error){
137 FATAL(error.what() << endl);
144 TTree *hits_tree =
new TTree(
"Hits",
"Tree with hits");
145 vector<float> hit_rate, hit_QE, hit_pos_x, hit_pos_y, hit_pos_z, hit_dir_x, hit_dir_y, hit_dir_z, hit_time, hit_tot;
146 vector<int> hit_first, hit_HRV, hit_status, hit_dom_id, hit_channel_id;
147 hits_tree->Branch(
"first",&hit_first);
148 hits_tree->Branch(
"QE",&hit_QE);
149 hits_tree->Branch(
"rate",&hit_rate);
150 hits_tree->Branch(
"status",&hit_status);
151 hits_tree->Branch(
"HRV",&hit_HRV);
152 hits_tree->Branch(
"pos_x",&hit_pos_x);
153 hits_tree->Branch(
"pos_y",&hit_pos_y);
154 hits_tree->Branch(
"pos_z",&hit_pos_z);
155 hits_tree->Branch(
"dir_x",&hit_dir_x);
156 hits_tree->Branch(
"dir_y",&hit_dir_y);
157 hits_tree->Branch(
"dir_z",&hit_dir_z);
158 hits_tree->Branch(
"time",&hit_time);
159 hits_tree->Branch(
"tot",&hit_tot);
160 hits_tree->Branch(
"channel_id",&hit_channel_id);
161 hits_tree->Branch(
"dom_id",&hit_dom_id);
164 TTree *pmts_tree =
new TTree(
"PMTs",
"Tree with PMTs");
165 vector<float> pmt_pos_x, pmt_pos_y, pmt_pos_z, pmt_dir_x, pmt_dir_y, pmt_dir_z, pmt_QE, pmt_rate;
167 pmts_tree->Branch(
"pos_x",&pmt_pos_x);
168 pmts_tree->Branch(
"pos_y",&pmt_pos_y);
169 pmts_tree->Branch(
"pos_z",&pmt_pos_z);
170 pmts_tree->Branch(
"dir_x",&pmt_dir_x);
171 pmts_tree->Branch(
"dir_y",&pmt_dir_y);
172 pmts_tree->Branch(
"dir_z",&pmt_dir_z);
173 pmts_tree->Branch(
"QE",&pmt_QE);
174 pmts_tree->Branch(
"channel_id",&pmt_channel_id);
175 pmts_tree->Branch(
"dom_id",&pmt_dom_id);
176 pmts_tree->Branch(
"rate",&pmt_rate);
178 pmts_tree->Branch(
"HRV",&pmt_HRV);
191 while (in.hasNext()) {
193 STATUS(
"event: " << setw(10) << in.getCounter() <<
'\r');
DEBUG(endl);
195 pointer_type ps = in.next();
202 dynamics->update(*tev);
207 buildL0(*tev, router,
true, back_inserter(dataL0));
211 int module_id_last = -1;
212 int channel_id_last = -1;
215 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
221 const int type = wip.
getType();
222 const double QE = wip.
QE;
223 const double R_Hz = summary.
getRate(i->getPMTIdentifier(), rate_Hz);
225 JHitW0 hit(*i, type, QE, R_Hz);
228 hit_pos_x.push_back(hit.
getX());
229 hit_pos_y.push_back(hit.
getY());
230 hit_pos_z.push_back(hit.
getZ());
232 hit_dir_x.push_back(hit.
getDX());
233 hit_dir_y.push_back(hit.
getDY());
234 hit_dir_z.push_back(hit.
getDZ());
236 hit_time.push_back(hit.
getT());
237 hit_tot.push_back(hit.
getToT());
246 hit_QE.push_back(hit.
getQE());
253 hit_rate.push_back(hit.
getR());
257 hit_first.push_back(0);
260 hit_first.push_back(1);
270 for (JDetector::const_iterator i =
detector.begin(); i !=
detector.end(); ++i) {
274 for (
size_t pmt = 0; pmt !=
module.size(); ++pmt) {
276 pmt_pos_x.push_back(module[pmt].getX());
277 pmt_pos_y.push_back(module[pmt].getY());
278 pmt_pos_z.push_back(module[pmt].getZ());
280 pmt_dir_x.push_back(module[pmt].getDX());
281 pmt_dir_y.push_back(module[pmt].getDY());
282 pmt_dir_z.push_back(module[pmt].getDZ());
288 pmt_channel_id.push_back(pmt);
289 pmt_dom_id.push_back(module.
getID());
315 hit_channel_id.clear();
325 pmt_channel_id.clear();