Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JMakeHDF.cc File Reference

Program to convert multi-dimensional histograms of muon light to multi-dimensional PDFs. More...

#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
#include "JPhysics/JPDFTransformer.hh"
#include "JPhysics/JPDFTable.hh"
#include "JPhysics/JPDFTypes.hh"
#include "JIO/JFileStreamIO.hh"
#include "JTools/JHistogram1D_t.hh"
#include "JTools/JHistogramMap_t.hh"
#include "JTools/JTransformableMultiHistogram.hh"
#include "JTools/JFunction1D_t.hh"
#include "JTools/JFunctionalMap_t.hh"
#include "JGeometry3D/JAngle3D.hh"
#include "JGeometry3D/JDirection3D.hh"
#include "JPhysics/JConstants.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Program to convert multi-dimensional histograms of muon light to multi-dimensional PDFs.

Author
mdejong

Definition in file JMakeHDF.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 32 of file JMakeHDF.cc.

33{
34 using namespace std;
35 using namespace JPP;
36
37 string inputFile;
38 string fileDescriptor;
39 int debug;
40
41 try {
42
43 JParser<> zap("Program to convert multi-dimensional histograms of muon light to multi-dimensional PDFs.");
44
45 zap['f'] = make_field(inputFile);
46 zap['o'] = make_field(fileDescriptor) = "J%p.dat";
47 zap['d'] = make_field(debug) = 1;
48
49 zap(argc, argv);
50 }
51 catch(const exception &error) {
52 FATAL(error.what() << endl);
53 }
54
55
56 if (!hasWildCard(fileDescriptor)) {
57 FATAL("error file descriptor " << fileDescriptor << endl);
58 }
59
60 typedef JHistogram1D_t::abscissa_type abscissa_type;
61
65 JHistogramGridMap_t>::maplist> JMultiHistogram_t;
66
67 typedef JPDFTransformer<3, abscissa_type> JFunction3DTransformer_t;
68
69 JMultiHistogram_t h0; // occurrence rate of PMT (used for normalisation)
70 JMultiHistogram_t h1; // light from muon
71 JMultiHistogram_t h2; // light from EM showers
72
73 h1.transformer.reset(new JFunction3DTransformer_t());
74 h2.transformer.reset(new JFunction3DTransformer_t());
75
76
77 // input
78
79 JFileStreamReader in(inputFile.c_str());
80
81 for (JMultiHistogram_t* p : { &h0, &h1, &h2 }) {
82 in.load(*p);
83 }
84
85 in.close();
86
87
88 // rebin histograms according angle of incidence on PMT and normalise contents to PMT occurrence rate
89
90 for (JMultiHistogram_t::super_iterator
91 i0 = h0.super_begin(),
92 i1 = h1.super_begin(),
93 i2 = h2.super_begin(); i0 != h0.super_end(); ++i0, ++i1, ++i2) {
94
95 const double W = i0.getValue().getIntegral();
96
97 if (W != 0.0) {
98
99 const JDirection3D u(JAngle3D(i0->second->first, i0->second->second->first));
100 const JDirection3D v(getSinThetaC(), 0.0, getCosThetaC());
101
102 int number_of_bins = (int) (2 + u.getDot(v));
103
104 for (JHistogram1D_t* p : { &i1.getValue(), &i2.getValue() }) {
105 p->rebin(JHistogram1D_t::JRebin(number_of_bins));
106 p->div(W);
107 }
108 }
109 }
110
111
112 // output
113
114 struct tuple {
115 const JPDFType_t type;
116 const JMultiHistogram_t& value;
117 };
118
119 tuple ntuple[] = { // map histogram to PDF type
120 { SCATTERED_LIGHT_FROM_MUON, h1 },
121 { SCATTERED_LIGHT_FROM_EMSHOWERS, h2 }
122 };
123
124
128 JPolint1FunctionalGridMap>::maplist> JPDF_t;
129
130 for (int i = 0; i != sizeof(ntuple)/sizeof(ntuple[0]); ++i) {
131
132 const string file_name = getFilename(fileDescriptor, ntuple[i].type);
133
134 try {
135
136 NOTICE("storing output to file " << file_name << "... " << flush);
137
138 const JPDF_t pdf(ntuple[i].value);
139
140 pdf.store(file_name.c_str());
141
142 NOTICE("OK" << endl);
143 }
144 catch(const JException& error) {
145 FATAL(error.what() << endl);
146 }
147 }
148}
#define NOTICE(A)
Definition JMessage.hh:64
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Data structure for angles in three dimensions.
Definition JAngle3D.hh:35
Data structure for direction in three dimensions.
Binary buffered file input.
General exception.
Definition JException.hh:24
virtual const char * what() const override
Get error message.
Definition JException.hh:64
Utility class to parse command line options.
Definition JParser.hh:1698
Multi-dimensional PDF table for arrival time of Cherenkov light.
Definition JPDFTable.hh:44
Template definition of transformer of the probability density function (PDF) of the time response of ...
Histogram in 1D.
collection_type::abscissa_type abscissa_type
Transformable multidimensional histogram.
bool hasWildCard(const std::string &file_name)
Check presence of wild card.
double getCosThetaC()
Get average cosine of Cherenkov angle of water corresponding to group velocity.
JPDFType_t
PDF types.
Definition JPDFTypes.hh:24
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Type definition of a JHistogramMap based on JGridMap implementation.
Type definition of a JHistogramMap based on JMap implementation.
Auxiliary class for recursive map list generation.
Definition JMapList.hh:109
Type definition of a 1st degree polynomial interpolation with result type double.
Type definition of a 1st degree polynomial interpolation based on a JGridMap implementation.
Type definition of a 1st degree polynomial interpolation based on a JMap implementation.
Auxiliary class for merging of fixed number of consecutive bins.