Jpp  18.0.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JMakeHDG.cc File Reference

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

#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
#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"
#include "JPhysics/JPDFTransformer.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 shower light to multi-dimensional PDFs.

Author
lquinn

Definition in file JMakeHDG.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 33 of file JMakeHDG.cc.

34 {
35  using namespace std;
36  using namespace JPP;
37 
38  string inputFile;
39  string fileDescriptor;
40  int debug;
41 
42  try {
43 
44  JParser<> zap("Program to convert multi-dimensional histograms of shower light to multi-dimensional PDFs.");
45 
46  zap['f'] = make_field(inputFile);
47  zap['o'] = make_field(fileDescriptor) = "J%p.dat";
48  zap['d'] = make_field(debug) = 1;
49 
50  zap(argc, argv);
51  }
52  catch(const exception &error) {
53  FATAL(error.what() << endl);
54  }
55 
56 
57  if (!hasWildCard(fileDescriptor)) {
58  FATAL("error file descriptor " << fileDescriptor << endl);
59  }
60 
61  typedef JHistogram1D_t::abscissa_type abscissa_type;
62 
63  typedef JTransformableMultiHistogram<JHistogram1D_t,
64  JMAPLIST<JHistogramMap_t,
65  JHistogramMap_t,
66  JHistogramGridMap_t,
67  JHistogramGridMap_t>::maplist> JMultiHistogram_t;
68 
69  typedef JPHYSICS::JPDFTransformer<4, abscissa_type> JFunction4DTransformer_t;
70 
71  JMultiHistogram_t h0; // occurrence rate of PMT (used for normalisation)
72  JMultiHistogram_t h1; // light from cascade
73 
74  h1.transformer.reset(new JFunction4DTransformer_t());
75 
76  // input
77 
78  NOTICE("Loading in input, " << flush);
79 
80  JFileStreamReader in(inputFile.c_str());
81 
82  for (JMultiHistogram_t* p : { &h0, &h1 }) {
83  in.load(*p);
84  }
85 
86  in.close();
87 
88  NOTICE("done." << endl);
89 
90  // rebin histograms according angle of incidence on PMT and normalise contents to PMT occurennce rate
91 
92  for (JMultiHistogram_t::super_iterator
93  i0 = h0.super_begin(),
94  i1 = h1.super_begin(); i1 != h1.super_end(); ++i0, ++i1) {
95 
96  const double W = i0.getValue().getIntegral();
97 
98  if (W != 0.0) {
99 
100  const JDirection3D u(JAngle3D(i0->second->first, i0->second->second->first));
101  const JDirection3D v(getSinThetaC(), 0.0, getCosThetaC());
102 
103  int number_of_bins = (int) (2 + u.getDot(v));
104 
105  i1.getValue().rebin(JHistogram1D_t::JRebin(number_of_bins));
106  i1.getValue().div(W);
107  }
108  }
109 
110  NOTICE("done." << endl);
111 
112  // output
113 
114  struct tuple {
115  const JPDFType_t type;
116  const JMultiHistogram_t& value;
117  };
118 
119  typedef JPDFTable<JPolint1Function1D_t,
120  JMAPLIST<JPolint1FunctionalMap,
121  JPolint1FunctionalMap,
122  JPolint1FunctionalGridMap,
123  JPolint1FunctionalGridMap>::maplist> JPDF_t;
124 
125  const string file_name = getFilename(fileDescriptor, DIRECT_LIGHT_FROM_EMSHOWER);
126 
127  try {
128  NOTICE("storing output to file " << file_name << "... " << flush);
129 
130  const JPDF_t pdf(h1);
131 
132  pdf.store(file_name.c_str());
133 
134  NOTICE("OK" << endl);
135  }
136  catch(const JException& error) {
137  FATAL(error.what() << endl);
138  }
139 }
Utility class to parse command line options.
Definition: JParser.hh:1514
Template definition of transformer of the probability density function (PDF) of the time response of ...
Auxiliary class for merging of fixed number of consecutive bins.
Definition: JHistogram1D.hh:30
double getCosThetaC()
Get average cosine of Cherenkov angle of water corresponding to group velocity.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1989
#define NOTICE(A)
Definition: JMessage.hh:64
direct light from EM shower
Definition: JPDFTypes.hh:37
JHistogram1D< JElement2D< double, double >, JCollection > JHistogram1D_t
Type definition of a 1 dimensional histogram based on a JCollection.
JPDFType_t
PDF types.
Definition: JPDFTypes.hh:24
#define FATAL(A)
Definition: JMessage.hh:67
collection_type::abscissa_type abscissa_type
std::string getFilename(const std::string &file_name)
Get file name part, i.e. part after last JEEP::PATHNAME_SEPARATOR if any.
Definition: JeepToolkit.hh:128
data_type v[N+1][M+1]
Definition: JPolint.hh:777
double u[N+1]
Definition: JPolint.hh:776
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Definition: JCanberra.sh:46
int debug
debug level
double getSinThetaC()
Get average sine of Cherenkov angle of water corresponding to group velocity.
bool hasWildCard(const std::string &file_name)
Check presence of wild card.
Definition: JeepToolkit.hh:53