76int main(
int argc,
char **argv)
91 JParser<> zap(
"Program to histogram event-by-event data of shower light for making PDFs.");
101 if (zap.
read(argc, argv) != 0)
104 catch(
const exception &error) {
105 FATAL(error.what() << endl);
111 sort(particles.begin(), particles.end());
112 string prefix_t =
"";
114 prefix_t +=
to_string((
long long int)*ptype) +
"_";
116 prefix_t.erase(prefix_t.size() - 1);
117 string::size_type pos_1 =
outputFile.find(
'%');
132 NOTICE(
"Apply detector offset " << offset << endl);
138 const double P_atm = NAMESPACE::getAmbientPressure();
158 JMultiHistogram_t h0;
159 JMultiHistogram_t h1;
161 h1.transformer.reset(
new JFunction5DTransformer_t(21.5, 2, ng[0], 0.0,
JGeant(
JGeanx(1.00, -2.2)), 1e-2, NAMESPACE::getAngularAcceptance, 0.05));
176 const double E_b[] = {0.01, 0.2, 0.4, 0.6, 0.8, 1.0, 1.5, 2.0, 3.0, 4.0, 5.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0, 25.0, 30.0, 40.0, 55.0, 70.0, 85.0, 100.0};
178 const double R[] = {0.0, 1.0, 2.5, 5.0, 7.5, 10.0, 12.5, 15.0, 17.5, 20.0, 25.0, 30.0, 35.0, 40.0, 50.0, 65.0, 80.0};
179 const double Dmax_m = R[
sizeof(R)/
sizeof(R[0]) - 1];
181 for (
int iE = 0; iE !=
sizeof(E_b)/
sizeof(E_b[0]); ++iE) {
183 const double E_m = E_b[iE];
185 for (
int i = 0; i !=
sizeof(R)/
sizeof(R[0]); ++i) {
187 const double R_m = R[i];
191 const double cd = *c;
193 const double grid = 10.0 + 0.0 * R_m/100.0;
194 const double alpha = 2.0 * sqrt(1.0 - cos(grid * PI / 180.0));
196 const int number_of_theta_points = (max(2, (
int) (180.0/(1.4 * grid))));
197 const double theta_step = PI / (number_of_theta_points + 1);
199 for (
double theta = -0.5*theta_step; theta < PI + theta_step; theta += theta_step) {
200 const int number_of_phi_points = (max(2, (
int) (PI * sin(theta) / alpha)));
201 const double phi_step = PI / (number_of_phi_points + 1);
203 for (
double phi = -0.5*phi_step; phi < PI + phi_step; phi += phi_step) {
205 for (JMultiHistogram_t* p : { &h0, &h1 }) {
206 (*p)[E_m][R_m][cd][theta][phi];
214 double buffer[] = {-15.0,-10.0,-7.5,-5,-4,-3,-2,-1.5,-1.0,-0.5,-0.1, 0.0,0.1, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 5.0, 7.5, 10.0, 15.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 85.0, 100.0 };
215 for (JMultiHistogram_t::super_iterator
216 i1 = h1.super_begin(); i1 != h1.super_end(); ++i1) {
217 for (
int j = 0;
j !=
sizeof(buffer)/
sizeof(buffer[0]); ++
j) {
218 i1.getValue()[buffer[
j]];
223 long long int h0_fillcount = 0;
224 long long int h1_fillcount = 0;
231 const Evt*
event = inputFile.
next();
240 for (vector<Trk>::const_iterator i = mc_tracks->begin(); i != mc_tracks->end(); ++i) {
241 hit_remap.push_back(i->id);
243 }
else if(fix_bug == 1){
245 }
else if(fix_bug == 2){
246 bool skipevent =
false;
247 for (vector<Trk>::const_iterator i = mc_tracks->begin(); i != mc_tracks->end(); ++i) {
252 hit_remap.push_back(i->id);
254 if(skipevent)
continue;
258 double t0 = (*mc_tracks)[1].t;
260 for (vector<Hit>::const_iterator hit = event->mc_hits.begin(); hit != event->mc_hits.end(); ++hit) {
264 if(hit->origin >= (
int)(*mc_tracks).size()){
265 std::out_of_range err(
"Hit origin not in tracklist. Avoided segfault");
269 Int_t corr_origin = hit_remap[hit->origin];
270 Trk curr_track = (*mc_tracks)[corr_origin];
276 const double E = curr_track.
E;
279 const double cd = axis.
getZ()/D_m;
280 const double theta = axis.
getTheta();
281 const double phi = fabs(axis.
getPhi());
282 const double dt =
getTime(*hit) - t1;
283 const double npe =
getNPE (*hit);
286 h1.fill(E, D_m, cd, theta, phi, dt, npe);
290 catch(
const exception& error) {
291 std::cout <<
"Fatal error for event: " << inputFile.
getCounter() << std::endl;
292 FATAL(error.what() << endl);
297 for (vector<Trk>::const_iterator tr = event->mc_trks.begin() + 1; tr != event->mc_trks.end(); ++tr) {
299 if(find(particles.begin(), particles.end(), tr->type) == particles.end()){
309 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
319 for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
331 if(h1_fillcount > h0_fillcount){
332 std::cout <<
"WARNING: recorded hits in normalization histogram that were not recorded in normalization histogram. This should not happen." << std::endl;
333 std::cout <<
"h1_fillcount: " << h1_fillcount <<
", h0_fillcount: " << h0_fillcount << std::endl;
338 for (JMultiHistogram_t::super_iterator i = h0.super_begin(); i != h0.super_end(); ++i) {
339 integral+=i.getValue().getIntegral();
341 DEBUG(
"Integral:\t" << integral << endl);
349 for (
const JMultiHistogram_t* p : { &h0, &h1 }) {
354 NOTICE(
"JHistHDE done. " << endl);
Definition of particle types.