Jpp  test_elongated_shower_pde
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JShowerFit.hh
Go to the documentation of this file.
1 #ifndef JSHOWERFIT_INCLUDE
2 #define JSHOWERFIT_INCLUDE
3 
4 #include <string>
5 #include <iostream>
6 #include <set>
7 #include <vector>
8 #include <algorithm>
9 #include <memory>
10 
13 
14 #include "JTrigger/JHit.hh"
15 #include "JTrigger/JTimeslice.hh"
16 #include "JTrigger/JHitL0.hh"
17 #include "JTrigger/JHitL1.hh"
18 #include "JTrigger/JHitR1.hh"
19 #include "JTrigger/JBuildL0.hh"
20 #include "JTrigger/JBuildL2.hh"
21 #include "JTrigger/JAlgorithm.hh"
22 #include "JTrigger/JMatch3G.hh"
23 #include "JTrigger/JBind2nd.hh"
24 
26 
28 #include "JFit/JFitToolkit.hh"
29 #include "JFit/JPoint4D.hh"
30 #include "JFit/JModel.hh"
31 #include "JFit/JSimplex.hh"
32 
33 #include "JAAnet/JAAnetToolkit.hh"
34 
36 #include "JReconstruction/JEvt.hh"
40 
41 #include "JDetector/JDetector.hh"
43 
44 #include "JGeometry3D/JVector3D.hh"
46 #include "JGeometry3D/JOmega3D.hh"
47 #include "JGeometry3D/JTrack3D.hh"
48 #include "JGeometry3D/JTrack3E.hh"
49 #include "JGeometry3D/JShower3E.hh"
50 
51 #include "JLang/JSharedPointer.hh"
52 
53 
54 /**
55  * \author adomi
56  */
57 namespace JRECONSTRUCTION {}
58 namespace JPP { using namespace JRECONSTRUCTION; }
59 
60 namespace JRECONSTRUCTION {
61 
65  using JFIT::JRegressor;
66  using JFIT::JEnergy;
67  using JFIT::JShower3EZ;
68  using JFIT::JSimplex;
69 
70  /**
71  * class to handle the direction fit of the shower reconstruction, mainly dedicated for ORCA
72  */
73  class JShowerFit :
75  public JRegressor<JShower3EZ, JSimplex>
76  {
77 
79  using JRegressor_t::operator();
80 
81  public:
82 
83  /**
84  * Parameterized constructor
85  *
86  * \param parameters struct that holds default-optimized parameters for the reconstruction, available in $JPP_DATA.
87  * \param router module router, this is built via detector file.
88  * \param summary summary router
89  * \param pdfFile PDF file
90  * \param correct energy correction
91  * \param debug debug
92  */
94  const JModuleRouter& router,
95  const JSummaryRouter& summary,
96  const std::string pdfFile,
98  const int debug = 0):
99  JShowerFitParameters_t(parameters),
100  JRegressor_t(pdfFile),
101  router(router),
102  summary(summary),
103  correct(correct)
104  {
105  using namespace JPP;
106 
108  JRegressor_t::T_ns.setRange(parameters.TMin_ns, parameters.TMax_ns);
109  JRegressor_t::Vmax_npe = 20.0;
111 
112  this->estimator.reset(getMEstimator(parameters.mestimator));
113  }
114 
115  /**
116  * Declaration of the member function that actually performs the reconstruction
117  *
118  * \param event = JDAQEvent
119  * \param in = input fits
120  */
122  {
123  using namespace std;
124  using namespace JPP;
125 
126  typedef vector<JHitL0> JDataL0_t;
127  JBuildL0<JHitL0> buildL0;
128 
129  JEvt out;
130 
132 
133  JDataL0_t dataL0;
134  buildL0(JDAQTimeslice(event, true), router, back_inserter(dataL0));
135 
136  for (JEvt::const_iterator shower = in.begin(); shower != in.end(); ++shower) {
137 
138  JShower3E sh(getPosition(*shower), getDirection(*shower), shower->getT(), shower->getE());
139 
141 
142  const JFIT::JModel<JPoint4D> match(JPoint4D(sh.getPosition(), sh.getT()), roadWidth_m, JRegressor_t::T_ns);
143 
144  for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
145 
146  if (match(*i)) {
147  top.insert(i->getPMTIdentifier());
148  }
149  }
150 
151  JDetectorSubset_t subdetector(detector, sh.getPosition(), roadWidth_m);
152 
153  const JDirection3D conversion(sh.getDirection());
154  const JRotation3D R(conversion);
155 
156  vector<JPMTW0> buffer;
157 
158  for (JDetectorSubset_t::iterator module = subdetector.begin();
159  module != subdetector.end(); ++module) {
160 
161  JModule dom(*module);
162  dom.rotate(R);
163 
164  for (unsigned int i = 0; i != dom.size(); ++i) {
165 
166  const JDAQPMTIdentifier id(dom.getID(), i);
167 
168  const double rate_Hz = summary.getRate(id);
169 
170  buffer.push_back(JPMTW0(dom.getPMT(i), rate_Hz, top.count(id)));
171  }
172  }
173 
174  this->step.resize(2);
175  this->step[0] = JShower3EZ(JPoint4D(JVector3D(), 0.0), JVersor3Z(fit_step, 0.0), JEnergy(0.4));
176  this->step[1] = JShower3EZ(JPoint4D(JVector3D(), 0.0), JVersor3Z(0.0, fit_step), JEnergy(0.4));
177 
178  double chi2 = (*this)(JShower3EZ(JVertex3D(JVector3D(0,0,0), sh.getT()), JVersor3Z(),
179  JEnergy(log10(sh.getE()))), buffer.begin(), buffer.end());
180 
181  double NDF = getCount(buffer.begin(), buffer.end()) - this->step.size();
182 
183  JShower3E sh_fit(this->value.getPosition(), this->value.getDirection(),
184  this->value.getT(), correct(this->value.getE()));
185 
186  sh_fit.rotate_back(R);
187 
188  sh_fit.add(sh.getPosition());
189 
190  out.push_back(getFit(JHistory(shower->getHistory()).add(JSHOWERCOMPLETEFIT), sh_fit, getQuality(chi2),
191  NDF, sh_fit.getE()));
192 
193  out.rbegin()->setW(JSHOWERFIT_ENERGY, this->value.getE()); // Uncorrected Energy
194  }
195 
196  return out;
197  }
198 
202  };
203 }
204 
205 #endif
206 
Auxiliary methods to evaluate Poisson probabilities and chi2.
static int debug
debug level (default is off).
Definition: JMessage.hh:45
Template definition of a data regressor of given model.
Definition: JRegressor.hh:68
double TMax_ns
maximum time for local coincidences [ns]
JEvt operator()(const KM3NETDAQ::JDAQEvent &event, const JFIT::JEvt &in)
Declaration of the member function that actually performs the reconstruction.
Definition: JShowerFit.hh:121
JShowerFit(const JShowerFitParameters_t &parameters, const JModuleRouter &router, const JSummaryRouter &summary, const std::string pdfFile, const JShowerEnergyCorrection &correct, const int debug=0)
Parameterized constructor.
Definition: JShowerFit.hh:93
Data structure for direction in three dimensions.
Definition: JDirection3D.hh:33
Data structure for a composite optical module.
Definition: JModule.hh:68
double getQuality(const double chi2, const int NDF)
Get quality of fit.
Algorithms for hit clustering and sorting.
Template specialisation of L0 builder for JHitL0 data type.
Definition: JBuildL0.hh:102
double TMin_ns
minimum time for local coincidences [ns]
Auxiliary class for handling PMT geometry, rate and response.
Definition: JPMTW0.hh:22
Data structure for vertex fit.
Definition: JPoint4D.hh:22
Detector data structure.
Definition: JDetector.hh:89
Auxiliary class for correction of energy determined by JShowerEnergy.cc.
Router for direct addressing of module data in detector data structure.
Rotation matrix.
Definition: JRotation3D.hh:111
double getRate() const
Get default rate.
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
Definition: diff-Tuna.sh:38
const JModuleRouter & router
Definition: JShowerFit.hh:199
Basic data structure for time and time over threshold information of hit.
3D track with energy.
Definition: JTrack3E.hh:30
Data structure for detector geometry and calibration.
JTime & add(const JTime &value)
Addition operator.
const JShowerEnergyCorrection & correct
Definition: JShowerFit.hh:201
Basic data structure for L0 hit.
Auxiliary class to extract a subset of optical modules from a detector.
const JSummaryRouter & summary
Definition: JShowerFit.hh:200
static const int JSHOWERFIT_ENERGY
uncorrected energy [GeV] from JShowerFit.cc
Data structure for fit of straight line in positive z-direction with energy.
Definition: JShower3EZ.hh:28
Detector file.
Definition: JHead.hh:224
JDirection3D getDirection(const Vec &dir)
Get direction.
double getE() const
Get energy.
Definition: JTrack3E.hh:93
Data structure for vector in three dimensions.
Definition: JVector3D.hh:34
set_variable E_E log10(E_{fit}/E_{#mu})"
static double Vmax_npe
Maximal integral of PDF [npe].
int getID() const
Get identifier.
Definition: JObjectID.hh:50
JPosition3D getPosition(const Vec &pos)
Get position.
Definition of hit and track types and auxiliary methods for handling Monte Carlo data.
Data time slice.
JAxis3D & rotate_back(const JRotation3D &R)
Rotate back axis.
Definition: JAxis3D.hh:240
int debug
debug level
Definition: JSirene.cc:68
Router for fast addressing of summary data in KM3NETDAQ::JDAQSummaryslice data structure as a functio...
Regressor function object for JShower3EZ fit using JSimplex minimiser.
const JPMT & getPMT(const int index) const
Get PMT.
Definition: JModule.hh:173
void rotate(const JRotation3D &R)
Rotate module.
Definition: JModule.hh:315
then usage $script[distance] fi case set_variable R
Definition: JDrawLED.sh:43
Detector subset without binary search functionality.
static const int JSHOWERCOMPLETEFIT
JFit getFit(const JHistory &history, const JTrack3D &track, const double Q, const int NDF, const double energy=0.0, const int status=0)
Get fit.
Reduced data structure for L1 hit.
JFIT::JHistory JHistory
Definition: JHistory.hh:301
const JClass_t & getReference() const
Get reference to object.
Definition: JReference.hh:38
Data structure for set of track fit results.
Data structure for fit parameters.
Simple fit method based on Powell&#39;s algorithm, see reference: Numerical Recipes in C++...
Definition: JSimplex.hh:42
JRegressor< JShower3EZ, JSimplex > JRegressor_t
Definition: JShowerFit.hh:78
int getCount(const T &hit)
Get hit count.
Data regression method for JFIT::JShower3EZ.
Data structure for fit of energy.
Definition: JEnergy.hh:28
static int MAXIMUM_ITERATIONS
maximal number of iterations
Definition: JSimplex.hh:237
JMEstimator * getMEstimator(const int type)
Get M-Estimator.
Definition: JMEstimator.hh:166
class to handle the direction fit of the shower reconstruction, mainly dedicated for ORCA ...
Definition: JShowerFit.hh:73
Template specialisation of class JModel to match hit with bright point.
Definition: JFit/JModel.hh:121
Data structure for normalised vector in positive z-direction.
Definition: JVersor3Z.hh:39
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 source JAcoustics sh $DETECTOR_ID CHECK_EXIT_CODE typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
Definition: JCanberra.sh:42
static JTimeRange T_ns
Time window with respect to Cherenkov hypothesis [ns].
Match operator for Cherenkov light from shower in any direction.
Basic data structure for L1 hit.