Jpp 20.0.0-195-g190c9e876
the software that should make you happy
Loading...
Searching...
No Matches
JRECONSTRUCTION::JShowerDirectionPrefit Class Reference

class to handle the direction fit of the shower reconstruction, mainly dedicated for ORCA More...

#include <JShowerDirectionPrefit.hh>

Inheritance diagram for JRECONSTRUCTION::JShowerDirectionPrefit:
JRECONSTRUCTION::JShowerDirectionPrefitParameters_t JFIT::JRegressor< JModel_t, JMinimiser_t > TObject

Classes

struct  input_type
 Input data type. More...
 

Public Types

typedef JRegressor< JShower3EZ, JAbstractMinimiserJRegressor_t
 
typedef JModuleL0 module_type
 
typedef std::vector< module_typedetector_type
 

Public Member Functions

std::vector< double > computeChi2 (const std::vector< double > &Ev, const std::vector< JFIT::JPMTW0 > &data, const JGEOMETRY3D::JRotation3D &R, const JShower3EZ &sh)
 Compute chi2 for a set of energies.
 
std::pair< double, double > findBestEnergy (std::vector< double > Ev, const std::vector< JFIT::JPMTW0 > &data, const JGEOMETRY3D::JRotation3D &R, const JShower3EZ &sh)
 Find best energy iteratively increasing the upper threshold if there is suspicion the best-fit is outside.
 
 JShowerDirectionPrefit (const JShowerDirectionPrefitParameters_t &parameters, const storage_type &storage, const JPMTParametersMap &pmtParameters, const int debug=0)
 Parameterized constructor.
 
input_type getInput (const JModuleRouter &router, const JSummaryRouter &summary, const JDAQEvent &event, const JEvt &in, const coverage_type &coverage) const
 Get input data.
 
JEvt operator() (const input_type &input)
 Fit function.
 
void reset ()
 Reset fit parameters.
 
bool equals (const JShowerDirectionPrefitParameters_t &parameters) const
 Equality.
 
 ClassDef (JShowerDirectionPrefitParameters_t, 2)
 

Public Attributes

std::vector< double > Ev
 
const JPMTParametersMappmtParameters
 
size_t numberOfPrefits
 number of prefits

 
double TMax_ns
 maximum time for local coincidences [ns]

 
double TMin_ns
 minimum time for local coincidences [ns]

 
double DMax_m
 maximal distance to optical module [m]
 
double R_Hz
 default rate [Hz]

 
double VMax_npe
 maximum number of of photo-electrons

 
double scanAngle_deg
 scanning angle step in [deg]
 
double Emin_GeV
 minimum energy to scan
 
double Emax_GeV
 maximum energy to scan
 
int En
 number of points to scan in energy range
 

Detailed Description

class to handle the direction fit of the shower reconstruction, mainly dedicated for ORCA

Definition at line 70 of file JShowerDirectionPrefit.hh.

Member Typedef Documentation

◆ JRegressor_t

◆ module_type

◆ detector_type

Constructor & Destructor Documentation

◆ JShowerDirectionPrefit()

JRECONSTRUCTION::JShowerDirectionPrefit::JShowerDirectionPrefit ( const JShowerDirectionPrefitParameters_t & parameters,
const storage_type & storage,
const JPMTParametersMap & pmtParameters,
const int debug = 0 )
inline

Parameterized constructor.

Parameters
parametersparameters
storagestorage
pmtParametersPMT parameters
debugdebug

Definition at line 222 of file JShowerDirectionPrefit.hh.

225 :
227 JRegressor_t(storage),
229 {
230 using namespace JPP;
231
232 JRegressor_t::debug = debug;
233 JRegressor_t::T_ns.setRange(parameters.TMin_ns, parameters.TMax_ns);
234 JRegressor_t::Vmax_npe = VMax_npe;
235
236 if (Emin_GeV > Emax_GeV || En <= 1) {
237 THROW(JException, "Invalid energy input " << Emin_GeV << ' ' << Emax_GeV << ' ' << En);
238 }
239
240 const double base = std::pow((Emax_GeV / Emin_GeV), 1.0 / (En - 1));
241
242 for (int i = 0; i != En; ++i) {
243 Ev.push_back(Emin_GeV * std::pow(base, i));
244 }
245 }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
int debug
debug level
Definition JSirene.cc:74
General exception.
Definition JException.hh:24
JRegressor< JShower3EZ, JAbstractMinimiser > JRegressor_t
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).

Member Function Documentation

◆ computeChi2()

std::vector< double > JRECONSTRUCTION::JShowerDirectionPrefit::computeChi2 ( const std::vector< double > & Ev,
const std::vector< JFIT::JPMTW0 > & data,
const JGEOMETRY3D::JRotation3D & R,
const JShower3EZ & sh )
inline

Compute chi2 for a set of energies.

Parameters
Evenergy vector
dataPMTs
RRotation
shshower

Definition at line 126 of file JShowerDirectionPrefit.hh.

131 {
132 using namespace JPP;
133
134 std::vector<double> chi2(Ev.size(), 0.0);
135
136 for (auto i = data.begin(); i != data.end(); ++i) {
137
138 JPMTW0 pmt = *i;
139 pmt.rotate(R);
140
141 auto H1 = getH1(sh, pmt);
142 auto H0 = getH0(pmt.getR());
143
144 const bool hit = pmt.getN() != 0;
145 const double chi2_bg = getChi2(get_value(H0), hit);
146
147 for (size_t j = 0; j < Ev.size(); ++j) {
148 chi2[j] += getChi2(get_value(Ev[j] * H1 + H0), hit) - chi2_bg; ; // H1 is linear with E, -log-lik ratio
149 }
150 }
151
152 return chi2;
153 }
JAxis3D & rotate(const JRotation3D &R)
Rotate axis.
Definition JAxis3D.hh:225
double getChi2(const double P)
Get chi2 corresponding to given probability.
int j
Definition JPolint.hh:801
JResultEvaluator< JResult_t >::result_type get_value(const JResult_t &value)
Helper method to recursively evaluate a to function value.
Definition JResult.hh:998
Auxiliary class for handling PMT geometry, rate and response.
Definition JPMTW0.hh:24
int getN() const
Get number of hits.
Definition JPMTW0.hh:82
double getR() const
Get rate.
Definition JPMTW0.hh:71

◆ findBestEnergy()

std::pair< double, double > JRECONSTRUCTION::JShowerDirectionPrefit::findBestEnergy ( std::vector< double > Ev,
const std::vector< JFIT::JPMTW0 > & data,
const JGEOMETRY3D::JRotation3D & R,
const JShower3EZ & sh )
inline

Find best energy iteratively increasing the upper threshold if there is suspicion the best-fit is outside.

Parameters
Evenergy vector
dataPMTs
RRotation
shshower

Definition at line 163 of file JShowerDirectionPrefit.hh.

168 {
169 using namespace JPP;
170
171 const int max_extensions = 5;
172 int extension_count = 0;
173
174 while (true) {
175
176 std::vector<double> chi2 = computeChi2(Ev, data, R, sh);
177
178 auto p = std::min_element(chi2.begin(), chi2.end());
179 size_t idx = p - chi2.begin();
180
181 bool at_upper_edge = (idx == Ev.size() - 1);
182
183 bool monotonic_tail = false;
184 if (Ev.size() >= 3) {
185 size_t n = Ev.size();
186 monotonic_tail = (chi2[n-3] > chi2[n-2]) &&
187 (chi2[n-2] > chi2[n-1]);
188 }
189
190 if (!(at_upper_edge && monotonic_tail)) {
191 return {Ev[idx], *p};
192 }
193
194 if (extension_count >= max_extensions) {
195 return {Ev[idx], *p};
196 }
197
198 extension_count++;
199
200 std::vector<double> Ev_ext;
201 double E_start = Ev.back();
202 double E_end = 100.0 * E_start;
203
204 size_t N = Ev.size();
205
206 for (size_t k = 0; k < N; ++k) {
207 double t = double (k) / (N - 1);
208 Ev_ext.push_back(E_start * std::pow(E_end / E_start, t));
209 }
210
211 Ev = std::move(Ev_ext);
212 }
213 }
std::vector< double > computeChi2(const std::vector< double > &Ev, const std::vector< JFIT::JPMTW0 > &data, const JGEOMETRY3D::JRotation3D &R, const JShower3EZ &sh)
Compute chi2 for a set of energies.
const int n
Definition JPolint.hh:791

◆ getInput()

input_type JRECONSTRUCTION::JShowerDirectionPrefit::getInput ( const JModuleRouter & router,
const JSummaryRouter & summary,
const JDAQEvent & event,
const JEvt & in,
const coverage_type & coverage ) const
inline

Get input data.

Parameters
routermodule router
summarysummary data
eventevent
instart values
coveragecoverage
Returns
input data

Definition at line 257 of file JShowerDirectionPrefit.hh.

262 {
263 using namespace std;
264 using namespace JTRIGGER;
265
266 input_type input(event.getDAQEventHeader(), in, coverage);
267
268 const JBuildL0 <JHitR0> buildL0;
270
271 const JDAQTimeslice timeslice(event, true);
272
273 JSuperFrame2D<JHit> buffer;
274
275 for (JDAQTimeslice::const_iterator i = timeslice.begin(); i != timeslice.end(); ++i) {
276
277 if (router.hasModule(i->getModuleID())) {
278
279 buffer(*i, router.getModule(i->getModuleID()));
280
281 buildL0(buffer, back_inserter(data[i->getModuleID()]));
282 }
283 }
284
285 for (const auto& module : router.getReference()) {
286 if (!module.empty()) {
287 input.data.push_back(module_type(module, summary.getSummaryFrame(module.getID(), R_Hz), data[module.getID()]));
288 }
289 }
290
291 return input;
292 }
bool hasModule(const JObjectID &id) const
Has module.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
const JClass_t & getReference() const
Get reference to object.
Definition JReference.hh:38
const JDAQSummaryFrame & getSummaryFrame(const JDAQModuleIdentifier &module) const
Get summary frame.
2-dimensional frame with time calibrated data from one optical module.
const JDAQEventHeader & getDAQEventHeader() const
Get DAQ event header.
Auxiliary classes and methods for triggering.

◆ operator()()

JEvt JRECONSTRUCTION::JShowerDirectionPrefit::operator() ( const input_type & input)
inline

Fit function.

Parameters
inputinput data
Returns
fit results

Definition at line 300 of file JShowerDirectionPrefit.hh.

301 {
302 using namespace std;
303 using namespace JPP;
304
306
307 JEvt out;
308
309 JEvt in = input.in;
310
311 in.select(numberOfPrefits, qualitySorter);
312
313 if (!in.empty()) {
314 in.select(JHistory::is_event(in.begin()->getHistory()));
315 }
316
317 for (JEvt::const_iterator shower = in.begin(); shower != in.end(); ++shower) {
318
320
321 const JPosition3D vertex(getPosition(*shower));
322 const double time = shower->getT();
323
324 for (const auto& module : input.data) {
325
326 JPosition3D pos(module->getPosition());
327
328 pos.sub(vertex);
329
330 if (pos.getLength() <= DMax_m) {
331
332 const double t1 = time + pos.getLength() * getInverseSpeedOfLight() * getIndexOfRefraction();
333
334 for (size_t i = 0; i != module->size(); ++i) {
335
336 if (module.getStatus(i)) {
337
338 struct {
339
340 bool operator()(const JHitR0& hit) const
341 {
342 return (hit.getPMT() == pmt && T_ns(hit.getT()));
343 }
344
345 const JTimeRange T_ns;
346 const size_t pmt;
347
348 } match = { JRegressor_t::T_ns + t1, i };
349
350 const JPMTIdentifier id(module->getID(), i);
351
353
354 const size_t ns = count_if(module.begin(), module.end(), match);
355 const double QE = wip.QE;
356
357 JPMT pmt = module->getPMT(i);
358
359 pmt.sub(vertex);
360
361 data.push_back(JPMTW0(pmt, QE, module.frame.getRate(i), ns));
362
363 }
364 }
365 }
366 }
367
368 JVector3D start_dir(0,0,0);
369
370 for (vector<JPMTW0>::const_iterator i = data.begin(); i != data.end(); ++i) {
371 if (i->getN() != 0) start_dir.add(i->getPosition());
372 }
373
374 JOmega3D scan_directions(JDirection3D(start_dir),
375 JOmega3D::range_type(0.0,PI),
376 scanAngle_deg * PI / 180.0);
377
378 const JShower3EZ sh(JVertex3D(JVector3D(0,0,0), shower->getT()), JVersor3Z(), 1);
379
380 for (JOmega3D_t::const_iterator dir = scan_directions.begin(); dir != scan_directions.end(); ++dir) {
381
382 const JGEOMETRY3D::JRotation3D R(*dir);
383
385
386 out.push_back(getFit(JHistory(shower->getHistory(), event()),
387 JShower3D(JVertex3D(vertex,time), JDirection3D(*dir)),
388 getQuality(result.second),
389 data.size(),
390 result.first));
391
392 // set additional values
393 out.rbegin()->setW(JPP_COVERAGE_ORIENTATION, input.coverage.orientation);
394 out.rbegin()->setW(JPP_COVERAGE_POSITION, input.coverage.position);
395
396 }
397 }
398
399 // apply default sorter
400
401 sort(out.begin(), out.end(), qualitySorter);
402
403 copy(input.in.begin(), input.in.end(), back_inserter(out));
404
405 return out;
406
407 }
const JPMTParameters & getPMTParameters(const JPMTIdentifier &id) const
Get PMT parameters.
Data structure for PMT parameters.
double QE
relative quantum efficiency
Data structure for PMT geometry, calibration and status.
Definition JPMT.hh:49
Data structure for fit of straight line in positive z-direction with energy.
Definition JShower3EZ.hh:30
Data structure for direction in three dimensions.
Direction set covering (part of) solid angle.
Definition JOmega3D.hh:68
Data structure for position in three dimensions.
Data structure for vector in three dimensions.
Definition JVector3D.hh:36
JVector3D & sub(const JVector3D &vector)
Subtract vector.
Definition JVector3D.hh:158
Data structure for normalised vector in positive z-direction.
Definition JVersor3Z.hh:41
std::pair< double, double > findBestEnergy(std::vector< double > Ev, const std::vector< JFIT::JPMTW0 > &data, const JGEOMETRY3D::JRotation3D &R, const JShower3EZ &sh)
Find best energy iteratively increasing the upper threshold if there is suspicion the best-fit is out...
JEvt operator()(const input_type &input)
Fit function.
Reduced data structure for L0 hit.
Definition JHitR0.hh:27
JPMT_t getPMT() const
Get PMT.
Definition JHitR0.hh:60
double getT() const
Get calibrated time of hit.
static const int JPP_COVERAGE_POSITION
coverage of dynamic position calibration of this event
static const int JPP_COVERAGE_ORIENTATION
coverage of dynamic orientation calibration of this event
double getIndexOfRefraction()
Get average index of refraction of water corresponding to group velocity.
const double getInverseSpeedOfLight()
Get inverse speed of light.
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:455
void copy(const JFIT::JEvt::const_iterator __begin, const JFIT::JEvt::const_iterator __end, Evt &out)
Copy tracks.
bool qualitySorter(const JFit &first, const JFit &second)
Comparison of fit results.
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.
return result
Definition JPolint.hh:862
Acoustic event fit.
Auxiliary class to test history.
Definition JHistory.hh:157

◆ reset()

void JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::reset ( )
inlineinherited

Reset fit parameters.

Definition at line 35 of file JShowerDirectionPrefitParameters_t.hh.

36 {
38 TMax_ns = 30;
39 TMin_ns = -30;
40 DMax_m = 80;
41 scanAngle_deg = 10;
42 R_Hz = 10.0e3;
43 VMax_npe = 20.0;
44 Emin_GeV = 1;
45 Emax_GeV = 1000;
46 En = 50;
47 }

◆ equals()

bool JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::equals ( const JShowerDirectionPrefitParameters_t & parameters) const
inlineinherited

Equality.

Parameters
parametersfit parameters
Returns
true if equals; else false

Definition at line 55 of file JShowerDirectionPrefitParameters_t.hh.

56 {
57 return (this->TMax_ns == parameters.TMax_ns &&
58 this->TMin_ns == parameters.TMin_ns &&
59 this->numberOfPrefits == parameters.numberOfPrefits &&
60 this->DMax_m == parameters.DMax_m &&
61 this->R_Hz == parameters.R_Hz &&
62 this->scanAngle_deg == parameters.scanAngle_deg &&
63 this->VMax_npe == parameters.VMax_npe &&
64 this->Emin_GeV == parameters.Emin_GeV &&
65 this->Emax_GeV == parameters.Emax_GeV &&
66 this->En == parameters.En );
67 }

◆ ClassDef()

JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::ClassDef ( JShowerDirectionPrefitParameters_t ,
2  )
inherited

Member Data Documentation

◆ Ev

std::vector<double> JRECONSTRUCTION::JShowerDirectionPrefit::Ev

Definition at line 83 of file JShowerDirectionPrefit.hh.

◆ pmtParameters

const JPMTParametersMap& JRECONSTRUCTION::JShowerDirectionPrefit::pmtParameters

Definition at line 409 of file JShowerDirectionPrefit.hh.

◆ numberOfPrefits

size_t JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::numberOfPrefits
inherited

number of prefits

Definition at line 71 of file JShowerDirectionPrefitParameters_t.hh.

◆ TMax_ns

double JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::TMax_ns
inherited

maximum time for local coincidences [ns]

Definition at line 72 of file JShowerDirectionPrefitParameters_t.hh.

◆ TMin_ns

double JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::TMin_ns
inherited

minimum time for local coincidences [ns]

Definition at line 73 of file JShowerDirectionPrefitParameters_t.hh.

◆ DMax_m

double JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::DMax_m
inherited

maximal distance to optical module [m]

Definition at line 74 of file JShowerDirectionPrefitParameters_t.hh.

◆ R_Hz

double JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::R_Hz
inherited

default rate [Hz]

Definition at line 75 of file JShowerDirectionPrefitParameters_t.hh.

◆ VMax_npe

double JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::VMax_npe
inherited

maximum number of of photo-electrons

Definition at line 76 of file JShowerDirectionPrefitParameters_t.hh.

◆ scanAngle_deg

double JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::scanAngle_deg
inherited

scanning angle step in [deg]

Definition at line 77 of file JShowerDirectionPrefitParameters_t.hh.

◆ Emin_GeV

double JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::Emin_GeV
inherited

minimum energy to scan

Definition at line 78 of file JShowerDirectionPrefitParameters_t.hh.

◆ Emax_GeV

double JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::Emax_GeV
inherited

maximum energy to scan

Definition at line 79 of file JShowerDirectionPrefitParameters_t.hh.

◆ En

int JRECONSTRUCTION::JShowerDirectionPrefitParameters_t::En
inherited

number of points to scan in energy range

Definition at line 80 of file JShowerDirectionPrefitParameters_t.hh.


The documentation for this class was generated from the following file: