Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JRECONSTRUCTION::JMuonGandalf Struct Reference

Wrapper class to make final fit of muon trajectory. More...

#include <JMuonGandalf.hh>

Inheritance diagram for JRECONSTRUCTION::JMuonGandalf:
JRECONSTRUCTION::JMuonGandalfParameters_t JFIT::JRegressor< JModel_t, JMinimiser_t > TObject

Classes

struct  input_type
 Input data type. More...
 

Public Types

typedef JRegressor< JLine3Z, JGandalfJRegressor_t
 
typedef JHitW0 hit_type
 
typedef std::vector< hit_typebuffer_type
 

Public Member Functions

 JMuonGandalf (const JMuonGandalfParameters_t &parameters, const storage_type &storage, const int debug=0)
 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 JMuonGandalfParameters_t &parameters) const
 Equality.
 
 ClassDef (JMuonGandalfParameters_t, 3)
 

Public Attributes

double roadWidth_m
 road width [m]
 
double R_Hz
 default rate [Hz]
 
size_t numberOfPrefits
 number of prefits
 
double TTS_ns
 transition-time spread [ns]
 
double E_GeV
 energy [GeV]
 
double TMin_ns
 minimal time w.r.t. Cherenkov hypothesis [ns]
 
double TMax_ns
 maximal time w.r.t. Cherenkov hypothesis [ns]
 
double ZMin_m
 minimal z-positon [m]
 
double ZMax_m
 maximal z-positon [m]
 
double VMax_npe
 maximum number of of photo-electrons
 
int NMax
 maximum number of iterations
 

Detailed Description

Wrapper class to make final fit of muon trajectory.

The JMuonGandalf fit uses one or more start values (usually taken from the output of JMuonSimplex).
All hits of which the PMT position lies within a set road width (JMuonGandalfParameters_t::roadWidth_m) and time is within a set window (JMuonGandalfParameters_t::TMin_ns, JMuonGandalfParameters_t::TMax_ns) around the Cherenkov hypothesis are taken.
In case there are multiple hits from the same PMT is the specified window, the first hit is taken and the other hits are discarded.
The PDF is accordingly evaluated, i.e. the normalised probability for a first hit at the given time of the hit is taken. The normalisation is consistently based on the specified time window.
Note that this hit selection is unbiased with respect to the PDF of a single PMT.

Definition at line 77 of file JMuonGandalf.hh.

Member Typedef Documentation

◆ JRegressor_t

◆ hit_type

◆ buffer_type

Constructor & Destructor Documentation

◆ JMuonGandalf()

JRECONSTRUCTION::JMuonGandalf::JMuonGandalf ( const JMuonGandalfParameters_t & parameters,
const storage_type & storage,
const int debug = 0 )
inline

Constructor.

Parameters
parametersparameters
storagestorage
debugdebug

Definition at line 128 of file JMuonGandalf.hh.

130 :
131 JMuonGandalfParameters_t(parameters),
132 JRegressor_t(storage)
133 {
134 if (this->getRmax() < roadWidth_m) {
135 roadWidth_m = this->getRmax();
136 }
137
138 JRegressor_t::debug = debug;
139 JRegressor_t::Vmax_npe = VMax_npe;
140 JRegressor_t::MAXIMUM_ITERATIONS = NMax;
141
142 this->parameters.resize(5);
143
144 this->parameters[0] = JLine3Z::pX();
145 this->parameters[1] = JLine3Z::pY();
146 this->parameters[2] = JLine3Z::pT();
147 this->parameters[3] = JLine3Z::pDX();
148 this->parameters[4] = JLine3Z::pDY();
149 }
int debug
debug level
Definition JSirene.cc:72
static parameter_type pY()
Definition JLine1Z.hh:181
static parameter_type pX()
Definition JLine1Z.hh:180
static parameter_type pT()
Definition JLine1Z.hh:182
static parameter_type pDY()
Definition JLine3Z.hh:320
static parameter_type pDX()
Definition JLine3Z.hh:319
double VMax_npe
maximum number of of photo-electrons
JRegressor< JLine3Z, JGandalf > JRegressor_t

Member Function Documentation

◆ getInput()

input_type JRECONSTRUCTION::JMuonGandalf::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 162 of file JMuonGandalf.hh.

167 {
168 using namespace std;
169 using namespace JTRIGGER;
170
171 const JBuildL0<JHitL0> buildL0;
172
173 input_type input(event.getDAQEventHeader(), in, coverage);
174
176
177 buildL0(event, router, true, back_inserter(data));
178
179 for (const auto& hit : data) {
180 input.data.push_back(hit_type(hit, summary.getRate(hit.getPMTIdentifier(), this->R_Hz)));
181 }
182
183 return input;
184 }
double getRate(const JDAQPMTIdentifier &id, const double rate_Hz) const
Get rate.
Template L0 hit builder.
Definition JBuildL0.hh:38
const JDAQEventHeader & getDAQEventHeader() const
Get DAQ event header.
Auxiliary classes and methods for triggering.

◆ operator()()

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

Fit function.

Parameters
inputinput data
Returns
fit results

Definition at line 193 of file JMuonGandalf.hh.

194 {
195 using namespace std;
196 using namespace JFIT;
197 using namespace JGEOMETRY3D;
198
199 JEvent event(JMUONGANDALF);
200
201 JEvt out;
202
203 const buffer_type& data = input.data;
204
205 // select start values
206
207 JEvt in = input.in;
208
209 in.select(numberOfPrefits, qualitySorter);
210
211 if (!in.empty()) {
212 in.select(JHistory::is_event(in.begin()->getHistory()));
213 }
214
215 for (JEvt::const_iterator track = in.begin(); track != in.end(); ++track) {
216
217 const JRotation3D R (getDirection(*track));
218 const JLine1Z tz(getPosition (*track).rotate(R), track->getT());
219 JRange<double> Z_m;
220
221 if (track->hasW(JSTART_LENGTH_METRES) &&
222 track->getW(JSTART_LENGTH_METRES) > 0.0) {
223 Z_m = JZRange(ZMin_m, ZMax_m + track->getW(JSTART_LENGTH_METRES));
224 }
225
226 const JModel<JLine1Z> match(tz, roadWidth_m, T_ns, Z_m);
227
228 // hit selection based on start value
229
230 buffer_type buffer;
231
232 for (buffer_type::const_iterator i = data.begin(); i != data.end(); ++i) {
233
234 hit_type hit(*i);
235
236 hit.rotate(R);
237
238 if (match(hit)) {
239 buffer.push_back(hit);
240 }
241 }
242
243 // select first hit
244
245 sort(buffer.begin(), buffer.end(), JHitL0::compare);
246
247 buffer_type::iterator __end = unique(buffer.begin(), buffer.end(), equal_to<JDAQPMTIdentifier>());
248
249
250 const int NDF = distance(buffer.begin(), __end) - this->parameters.size();
251
252 if (NDF > 0) {
253
254 // set fit parameters
255
256 if (track->getE() > 0.1)
257 JRegressor_t::E_GeV = track->getE();
258 else
259 JRegressor_t::E_GeV = this->JMuonGandalfParameters_t::E_GeV;
260
261 const double chi2 = (*this)(JLine3Z(tz), buffer.begin(), __end);
262
263 // check error matrix
264
265 bool status = true;
266
267 for (size_t i = 0; i != this->V.size(); ++i) {
268 if (std::isnan(this->V(i,i)) || this->V(i,i) < 0.0) {
269 status = false;
270 }
271 }
272
273 if (status) {
274
275 JTrack3D tb(this->value);
276
277 tb.rotate_back(R);
278
279 out.push_back(getFit(JHistory(track->getHistory(), event()), tb, getQuality(chi2), NDF));
280
281 // set additional values
282
283 out.rbegin()->setV(this->V.size(), this->V);
284
285 out.rbegin()->setW(track->getW());
286 out.rbegin()->setW(JGANDALF_BETA0_RAD, sqrt(this->error.getDX() * this->error.getDX() +
287 this->error.getDY() * this->error.getDY()));
288 out.rbegin()->setW(JGANDALF_BETA1_RAD, sqrt(this->error.getDX() * this->error.getDY()));
289 out.rbegin()->setW(JGANDALF_CHI2, chi2);
290 out.rbegin()->setW(JGANDALF_NUMBER_OF_HITS, distance(buffer.begin(), __end));
291 out.rbegin()->setW(JGANDALF_LAMBDA, this->lambda);
292 out.rbegin()->setW(JGANDALF_NUMBER_OF_ITERATIONS, this->numberOfIterations);
293 out.rbegin()->setW(JPP_COVERAGE_ORIENTATION, input.coverage.orientation);
294 out.rbegin()->setW(JPP_COVERAGE_POSITION, input.coverage.position);
295 }
296 }
297 }
298
299 // apply default sorter
300
301 sort(out.begin(), out.end(), qualitySorter);
302
303 copy(input.in.begin(), input.in.end(), back_inserter(out));
304
305 return out;
306 }
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Data structure for fit of straight line paralel to z-axis.
Definition JLine1Z.hh:29
Data structure for fit of straight line in positive z-direction.
Definition JLine3Z.hh:40
JPosition3D & rotate(const JRotation3D &R)
Rotate.
Range of values.
Definition JRange.hh:42
static const int JMUONGANDALF
static const int JGANDALF_LAMBDA
control parameter from JGandalf.cc
static const int JPP_COVERAGE_POSITION
coverage of dynamic position calibration from any Jpp application
static const int JSTART_LENGTH_METRES
distance between projected positions on the track of optical modules for which the response does not ...
static const int JGANDALF_BETA0_RAD
KM3NeT Data Definitions v3.6.0 https://git.km3net.de/common/km3net-dataformat.
static const int JGANDALF_NUMBER_OF_ITERATIONS
number of iterations from JGandalf.cc
static const int JPP_COVERAGE_ORIENTATION
coverage of dynamic orientation calibration from any Jpp application
static const int JGANDALF_BETA1_RAD
angular resolution [rad] from JGandalf.cc
static const int JGANDALF_NUMBER_OF_HITS
number of hits from JGandalf.cc
static const int JGANDALF_CHI2
chi2 from JGandalf.cc
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition JHead.cc:163
Auxiliary classes and methods for linear and iterative data regression.
Definition JEnergy.hh:15
JTOOLS::JRange< double > JZRange
Auxiliary classes and methods for 3D geometrical objects and operations.
Definition JAngle3D.hh:19
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
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.
JDirection3D getDirection(const JFit &fit)
Get direction.
Acoustic event fit.
Model for fit to acoustics data.
Acoustic hit.
Definition JBillabong.cc:70
Auxiliary class to test history.
Definition JHistory.hh:136
Auxiliary data structure for sorting of hits.
Definition JHitL0.hh:85

◆ reset()

void JRECONSTRUCTION::JMuonGandalfParameters_t::reset ( )
inlineinherited

Reset fit parameters.

Definition at line 41 of file JMuonGandalfParameters_t.hh.

42 {
43 roadWidth_m = std::numeric_limits<double>::max();
44 R_Hz = 6.0e3;
46 TTS_ns = 2;
47 E_GeV = 1.0e3;
48 TMin_ns = -50.0;
49 TMax_ns = +450.0;
50 ZMin_m = 0.0;
51 ZMax_m = 0.0;
52 VMax_npe = 10.0;
53 NMax = 1000;
54 }
double TMin_ns
minimal time w.r.t. Cherenkov hypothesis [ns]
double TMax_ns
maximal time w.r.t. Cherenkov hypothesis [ns]

◆ equals()

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

Equality.

Parameters
parametersfit parameters
Returns
true if equals; else false

Definition at line 62 of file JMuonGandalfParameters_t.hh.

63 {
64 return (this->roadWidth_m == parameters.roadWidth_m &&
65 this->R_Hz == parameters.R_Hz &&
66 this->numberOfPrefits == parameters.numberOfPrefits &&
67 this->TTS_ns == parameters.TTS_ns &&
68 this->E_GeV == parameters.E_GeV &&
69 this->TMin_ns == parameters.TMin_ns &&
70 this->TMax_ns == parameters.TMax_ns &&
71 this->ZMin_m == parameters.ZMin_m &&
72 this->ZMax_m == parameters.ZMax_m &&
73 this->VMax_npe == parameters.VMax_npe &&
74 this->NMax == parameters.NMax);
75 }

◆ ClassDef()

JRECONSTRUCTION::JMuonGandalfParameters_t::ClassDef ( JMuonGandalfParameters_t ,
3  )
inherited

Member Data Documentation

◆ roadWidth_m

double JRECONSTRUCTION::JMuonGandalfParameters_t::roadWidth_m
inherited

road width [m]

Definition at line 79 of file JMuonGandalfParameters_t.hh.

◆ R_Hz

double JRECONSTRUCTION::JMuonGandalfParameters_t::R_Hz
inherited

default rate [Hz]

Definition at line 80 of file JMuonGandalfParameters_t.hh.

◆ numberOfPrefits

size_t JRECONSTRUCTION::JMuonGandalfParameters_t::numberOfPrefits
inherited

number of prefits

Definition at line 81 of file JMuonGandalfParameters_t.hh.

◆ TTS_ns

double JRECONSTRUCTION::JMuonGandalfParameters_t::TTS_ns
inherited

transition-time spread [ns]

Definition at line 82 of file JMuonGandalfParameters_t.hh.

◆ E_GeV

double JRECONSTRUCTION::JMuonGandalfParameters_t::E_GeV
inherited

energy [GeV]

Definition at line 83 of file JMuonGandalfParameters_t.hh.

◆ TMin_ns

double JRECONSTRUCTION::JMuonGandalfParameters_t::TMin_ns
inherited

minimal time w.r.t. Cherenkov hypothesis [ns]

Definition at line 84 of file JMuonGandalfParameters_t.hh.

◆ TMax_ns

double JRECONSTRUCTION::JMuonGandalfParameters_t::TMax_ns
inherited

maximal time w.r.t. Cherenkov hypothesis [ns]

Definition at line 85 of file JMuonGandalfParameters_t.hh.

◆ ZMin_m

double JRECONSTRUCTION::JMuonGandalfParameters_t::ZMin_m
inherited

minimal z-positon [m]

Definition at line 86 of file JMuonGandalfParameters_t.hh.

◆ ZMax_m

double JRECONSTRUCTION::JMuonGandalfParameters_t::ZMax_m
inherited

maximal z-positon [m]

Definition at line 87 of file JMuonGandalfParameters_t.hh.

◆ VMax_npe

double JRECONSTRUCTION::JMuonGandalfParameters_t::VMax_npe
inherited

maximum number of of photo-electrons

Definition at line 88 of file JMuonGandalfParameters_t.hh.

◆ NMax

int JRECONSTRUCTION::JMuonGandalfParameters_t::NMax
inherited

maximum number of iterations

Definition at line 89 of file JMuonGandalfParameters_t.hh.


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