Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JShowerBjorkenY.hh
Go to the documentation of this file.
1#ifndef JSHOWERBJORKENY_INCLUDE
2#define JSHOWERBJORKENY_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"
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"
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#include "JFit/JShowerEH.hh"
33
35
41
44
51
53
54
55/**
56 * \author adomi
57 */
58namespace JRECONSTRUCTION {}
59namespace JPP { using namespace JRECONSTRUCTION; }
60
61namespace JRECONSTRUCTION {
62
66 using JFIT::JRegressor;
67 using JFIT::JEnergy;
68 using JFIT::JShowerEH;
69 using JFIT::JSimplex;
70
71 /**
72 * class to handle the direction fit of the shower reconstruction, mainly dedicated for ORCA
73 */
76 public JRegressor<JShowerEH, JSimplex>
77 {
78
80 using JRegressor_t::operator();
81
82 public:
83
84 /**
85 * Parameterized constructor
86 *
87 * \param parameters struct that holds default-optimized parameters for the reconstruction, available in $JPP_DATA.
88 * \param router module router, this is built via detector file.
89 * \param summary summary router
90 * \param pdfFile PDF file
91 * \param correct energy correction
92 * \param debug debug
93 */
95 const JModuleRouter& router,
97 const std::string pdfFile,
99 const int debug = 0):
100 JShowerBjorkenYParameters_t(parameters),
101 JRegressor_t(pdfFile),
102 router(router),
105 {
106 using namespace JPP;
107
108 JRegressor_t::debug = debug;
109 JRegressor_t::T_ns.setRange(parameters.TMin_ns, parameters.TMax_ns);
110 JRegressor_t::Vmax_npe = VMax_npe;
111 JRegressor_t::MAXIMUM_ITERATIONS = NMax;
112
113 this->estimator.reset(getMEstimator(parameters.mestimator));
114 }
115
116 /**
117 * Declaration of the member function that actually performs the reconstruction
118 *
119 * \param event = JDAQEvent
120 * \param in = input fits
121 */
123 {
124 using namespace std;
125 using namespace JPP;
126
127 typedef vector<JHitL0> JDataL0_t;
128 JBuildL0<JHitL0> buildL0;
129
130 JEvt out;
131
133
134 JDataL0_t dataL0;
135 buildL0(JDAQTimeslice(event, true), router, back_inserter(dataL0));
136
137 for (JEvt::const_iterator shower = in.begin(); shower != in.end(); ++shower) {
138
139 JShower3EY sh(getPosition(*shower), getDirection(*shower), shower->getT(),
140 shower->getE(), 0.0);
141
143
144 const JModel<JPoint4D> match(JPoint4D(sh.getPosition(), sh.getT()), roadWidth_m, JRegressor_t::T_ns);
145
146 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
147
148 if (match(*i)) {
149 top.insert(i->getPMTIdentifier());
150 }
151 }
152
154
155 const JDirection3D conversion(sh.getDirection());
156 const JRotation3D R(conversion);
157
158 vector<JPMTW0> buffer;
159
160 for (JDetectorSubset_t::iterator module = subdetector.begin();
161 module != subdetector.end(); ++module) {
162
163 const JDAQSummaryFrame& frame = summary.getSummaryFrame(module->getID(), R_Hz);
164
165 JModule dom(*module);
166
167 dom.rotate(R);
168
169 for (unsigned int i = 0; i != dom.size(); ++i) {
170
171 if (getDAQStatus(frame, *module, i) &&
172 getPMTStatus(frame, *module, i) &&
173 frame[i].is_valid() &&
174 !module->getPMT(i).has(PMT_DISABLE)) {
175
176 const JDAQPMTIdentifier id(module->getID(), i);
177
178 const double rate_Hz = summary.getRate(id, this->R_Hz);
179 const size_t count = top.count(id);
180
181 buffer.push_back(JPMTW0(dom.getPMT(i), rate_Hz, count));
182 }
183 }
184 }
185
186 this->step.resize(2);
187 this->step[0] = JShowerEH(JPoint4D(JVector3D(), 0.0), JVersor3Z(), fit_step, 0.0, 0.0);
188 this->step[1] = JShowerEH(JPoint4D(JVector3D(), 0.0), JVersor3Z(), 0.0, fit_step, 0.0);
189
190 double f_h = 1 - 0.681 * (std::pow(shower->getE()/0.863, -0.207));
191
192 double chi2 = (*this)(JShowerEH(JVertex3D(JVector3D(0,0,0), sh.getT()), JVersor3Z(),
193 log10(sh.getE()), log10(f_h*sh.getE()), sh.getBjY()),
194 buffer.begin(), buffer.end());
195
196 double NDF = getCount(buffer.begin(), buffer.end()) - this->step.size();
197
198 JShower3EY sh_fit(this->value.getPosition(), this->value.getDirection(),
199 this->value.getT(), correct(this->value.getEem() + this->value.getEh()), this->value.getBy());
200
201 double y = getFinalBjY(this->value.getEem(), this->value.getEh());
202
203 sh_fit.rotate_back(R);
204
205 sh_fit.add(sh.getPosition());
206
207 out.push_back(getFit(JHistory(shower->getHistory()).add(JSHOWER_BJORKEN_Y), sh_fit, getQuality(chi2),
208 NDF, sh_fit.getE()));
209
210 out.rbegin()->setW(5, y);
211 out.rbegin()->setW(6, this->value.getEem());
212 out.rbegin()->setW(7, this->value.getEh());
213
214 }
215
216 return out;
217 }
218
222
223 /*
224 * Function to get the reconstructed Bjorken Y from reconstructed energies.
225 *
226 * \param E_em reconstructed EM shower energy
227 * \param E_h reconstructed Hadronic shower energy
228 */
229 double getFinalBjY(double E_em, double E_h){
230 return E_h / (E_em + E_h);
231 }
232
233 };
234}
235
236#endif
237
Definition of hit and track types and auxiliary methods for handling Monte Carlo data.
Algorithms for hit clustering and sorting.
Auxiliary class to extract a subset of optical modules from a detector.
Data structure for detector geometry and calibration.
Auxiliary methods to evaluate Poisson probabilities and chi2.
Basic data structure for L0 hit.
Basic data structure for L1 hit.
Reduced data structure for L1 hit.
Match operator for Cherenkov light from shower in any direction.
int debug
debug level
Definition JSirene.cc:72
Data regression method for JFIT::JShowerEH.
Basic data structure for time and time over threshold information of hit.
Detector subset without binary search functionality.
Detector data structure.
Definition JDetector.hh:96
Router for direct addressing of module data in detector data structure.
Data structure for a composite optical module.
Definition JModule.hh:75
void rotate(const JRotation3D &R)
Rotate module.
Definition JModule.hh:314
const JPMT & getPMT(const int index) const
Get PMT.
Definition JModule.hh:172
Data structure for fit of energy.
Definition JEnergy.hh:31
Data structure for set of track fit results.
Data structure for vertex fit.
Definition JPoint4D.hh:24
Data structure for fit of straight line in positive z-direction with energy.
Definition JShowerEH.hh:32
Auxiliary class for correction of energy determined by JShowerEnergy.cc.
Simple fit method based on Powell's algorithm, see reference: Numerical Recipes in C++,...
Definition JSimplex.hh:44
JAxis3D & rotate_back(const JRotation3D &R)
Rotate back axis.
Definition JAxis3D.hh:240
Data structure for direction in three dimensions.
const JPosition3D & getPosition() const
Get position.
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
Definition JTrack3D.hh:126
JTime & add(const JTime &value)
Addition operator.
JVersor3D getDirection(const JVector3D &pos) const
Get photon direction of Cherenkov light on PMT.
Definition JTrack3D.hh:147
3D track with energy and Bjorken Y.
Definition JTrack3EY.hh:31
double getBjY() const
Get Bjorken Y.
Definition JTrack3EY.hh:96
double getE() const
Get energy.
Definition JTrack3E.hh:93
Data structure for vector in three dimensions.
Definition JVector3D.hh:36
Data structure for normalised vector in positive z-direction.
Definition JVersor3Z.hh:41
const JClass_t & getReference() const
Get reference to object.
Definition JReference.hh:38
class to handle the direction fit of the shower reconstruction, mainly dedicated for ORCA
JEvt operator()(const KM3NETDAQ::JDAQEvent &event, const JFIT::JEvt &in)
Declaration of the member function that actually performs the reconstruction.
const JShowerEnergyCorrection & correct
JRegressor< JShowerEH, JSimplex > JRegressor_t
double getFinalBjY(double E_em, double E_h)
JShowerBjorkenY(const JShowerBjorkenYParameters_t &parameters, const JModuleRouter &router, const JSummaryRouter &summary, const std::string pdfFile, const JShowerEnergyCorrection &correct, const int debug=0)
Parameterized constructor.
Router for fast addressing of summary data in KM3NETDAQ::JDAQSummaryslice data structure as a functio...
double getRate(const JDAQPMTIdentifier &id, const double rate_Hz) const
Get rate.
const JDAQSummaryFrame & getSummaryFrame(const JDAQModuleIdentifier &module) const
Get summary frame.
Template L0 hit builder.
Definition JBuildL0.hh:38
Data storage class for rate measurements of all PMTs in one module.
static const int JSHOWER_BJORKEN_Y
size_t getCount(const array_type< T > &buffer, const JCompare_t &compare)
Count number of unique values.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Model fits to data.
double getQuality(const double chi2, const int N, const int NDF)
Get quality of fit.
JPosition3D getPosition(const JFit &fit)
Get position.
JFIT::JHistory JHistory
Definition JHistory.hh:405
JFit getFit(const JHistory &history, const JTrack3D &track, const double Q, const int NDF, const double energy=0.0, const int status=SINGLE_STAGE)
Get fit.
JDirection3D getDirection(const JFit &fit)
Get direction.
bool is_valid(const json &js)
Check validity of JSon data.
bool getDAQStatus(const JDAQFrameStatus &frame, const JStatus &status)
Test status of DAQ.
bool getPMTStatus(const JStatus &status)
Test status of PMT.
static const int PMT_DISABLE
KM3NeT Data Definitions v3.6.0 https://git.km3net.de/common/km3net-dataformat.
Definition pmt_status.hh:12
Detector file.
Definition JHead.hh:227
Model for fit to acoustics data.
JHistory & add(const int type)
Add event to history.
Definition JHistory.hh:346
Auxiliary class for handling PMT geometry, rate and response.
Definition JPMTW0.hh:24
Template definition of a data regressor of given model.
Definition JRegressor.hh:70
double TMax_ns
maximum time for local coincidences [ns]
double VMax_npe
maximum number of of photo-electrons
double TMin_ns
minimum time for local coincidences [ns]