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

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

#include <JMuonSimplex.hh>

Inheritance diagram for JRECONSTRUCTION::JMuonSimplex:
JRECONSTRUCTION::JMuonSimplexParameters_t JFIT::JRegressor< JModel_t, JMinimiser_t > TObject

Classes

struct  input_type
 Input data type. More...
 

Public Types

typedef JRegressor< JLine3Z, JSimplexJRegressor_t
 
typedef JTRIGGER::JHitR1 hit_type
 
typedef std::vector< hit_typebuffer_type
 

Public Member Functions

 JMuonSimplex (const JMuonSimplexParameters_t &parameters, const int debug=0)
 Constructor.
 
input_type getInput (const JModuleRouter &router, 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 JMuonSimplexParameters_t &parameters) const
 Equality.
 
 ClassDef (JMuonSimplexParameters_t, 3)
 

Public Attributes

double sigma_ns
 time resolution [ns]
 
bool useL0
 option for L0 hit use
 
size_t numberOfPrefits
 number of prefits
 
double TMaxLocal_ns
 time window for local coincidences [ns]
 
double ctMin
 minimal cosine space angle between PMT axes
 
double roadWidth_m
 road width [m]
 
double TMin_ns
 minimal time w.r.t. Cherenkov hypothesis [ns]
 
double TMax_ns
 maximal time w.r.t. Cherenkov hypothesis [ns]
 
int NMax
 maximum number of iterations
 

Detailed Description

Wrapper class to make intermediate fit of muon trajectory.

The JMuonSimplex fit uses one or more start values (usually taken from the output of JMuonPrefit) and produces new start values for subsequent fits (usually JMuonGandalf).
All hits of which the PMT position lies within a set road width (JMuonSimplexParameters_t::roadWidth_m) and time is within a set window (JMuonSimplexParameters_t::TMin_ns, JMuonSimplexParameters_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 chi-squared is based on an M-estimator of the time residuals.

Definition at line 70 of file JMuonSimplex.hh.

Member Typedef Documentation

◆ JRegressor_t

◆ hit_type

◆ buffer_type

Constructor & Destructor Documentation

◆ JMuonSimplex()

JRECONSTRUCTION::JMuonSimplex::JMuonSimplex ( const JMuonSimplexParameters_t & parameters,
const int debug = 0 )
inline

Constructor.

Parameters
parametersparameters
debugdebug

Definition at line 121 of file JMuonSimplex.hh.

122 :
123 JMuonSimplexParameters_t(parameters),
124 JRegressor_t(parameters.sigma_ns)
125 {
126 using namespace JFIT;
127
128 this->estimator.reset(new JMEstimatorLorentzian());
129
130 JRegressor_t::debug = debug;
131 JRegressor_t::MAXIMUM_ITERATIONS = NMax;
132 }
int debug
debug level
Definition JSirene.cc:72
Auxiliary classes and methods for linear and iterative data regression.
Definition JEnergy.hh:15
Lorentzian M-estimator.
JRegressor< JLine3Z, JSimplex > JRegressor_t

Member Function Documentation

◆ getInput()

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

Get input data.

Parameters
routermodule router
eventevent
instart values
coveragecoverage
Returns
input data

Definition at line 144 of file JMuonSimplex.hh.

148 {
149 using namespace std;
150 using namespace JTRIGGER;
151 using namespace KM3NETDAQ;
152
153 const JBuildL0<hit_type> buildL0;
155
156 input_type input(event.getDAQEventHeader(), in, coverage);
157
158 buffer_type& dataL0 = input.dataL0;
159 buffer_type& dataL1 = input.dataL1;
160
161 const JDAQTimeslice timeslice(event, true);
162 JSuperFrame2D<JHit> buffer;
163
164 for (JDAQTimeslice::const_iterator i = timeslice.begin(); i != timeslice.end(); ++i) {
165
166 if (router.hasModule(i->getModuleID())) {
167
168 buffer(*i, router.getModule(i->getModuleID()));
169
170 if (useL0) {
171 buildL0(buffer, back_inserter(dataL0));
172 }
173 {
174 buildL2(buffer, back_inserter(dataL1));
175 }
176 }
177 }
178
179 return input;
180 }
bool hasModule(const JObjectID &id) const
Has module.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
Template L0 hit builder.
Definition JBuildL0.hh:38
Template L2 builder.
Definition JBuildL2.hh:49
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.
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
double TMaxLocal_ns
time window for local coincidences [ns]
double ctMin
minimal cosine space angle between PMT axes
Data structure for L2 parameters.

◆ operator()()

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

Fit function.

Parameters
inputinput data
Returns
fit results

Definition at line 189 of file JMuonSimplex.hh.

190 {
191 using namespace std;
192 using namespace JFIT;
193 using namespace JGEOMETRY3D;
194 using namespace JLANG;
195
196 JEvent event(JMUONSIMPLEX);
197
198 JEvt out;
199
200 const buffer_type& dataL0 = input.dataL0;
201 const buffer_type& dataL1 = input.dataL1;
202
203 // select start values
204
205 JEvt in = input.in;
206
207 in.select(numberOfPrefits, qualitySorter);
208
209 if (!in.empty()) {
210 in.select(JHistory::is_event(in.begin()->getHistory()));
211 }
212
214
215 data.reserve(dataL0.size() +
216 dataL1.size());
217
218 for (JEvt::const_iterator track = in.begin(); track != in.end(); ++track) {
219
220 const JRotation3D R (getDirection(*track));
221 const JLine1Z tz(getPosition (*track).rotate(R), track->getT());
223
224 data.clear();
225
226 for (buffer_type::const_iterator i = dataL1.begin(); i != dataL1.end(); ++i) {
227
228 hit_type hit(*i);
229
230 hit.rotate(R);
231
232 if (match(hit)) {
233 data.push_back(hit);
234 }
235 }
236
237 if (useL0) {
238
239 buffer_type::iterator __end = data.end();
240
241 for (buffer_type::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
242
243 if (find_if(data.begin(), __end, make_predicate(&hit_type::getModuleID, i->getModuleID())) == __end) {
244
245 hit_type hit(*i);
246
247 hit.rotate(R);
248
249 if (match(hit)) {
250 data.push_back(hit);
251 }
252 }
253 }
254 }
255
256
257 this->step.resize(5);
258
259 this->step[0] = JLine3Z(JLine1Z(JVector3D(0.5, 0.0, 0.0), 0.0));
260 this->step[1] = JLine3Z(JLine1Z(JVector3D(0.0, 0.5, 0.0), 0.0));
261 this->step[2] = JLine3Z(JLine1Z(JVector3D(0.0, 0.0, 0.0), 1.0));
262 this->step[3] = JLine3Z(JLine1Z(JVector3D(), 0.0), JVersor3Z(0.005, 0.0));
263 this->step[4] = JLine3Z(JLine1Z(JVector3D(), 0.0), JVersor3Z(0.0, 0.005));
264
265 const int NDF = getCount(data.begin(), data.end()) - this->step.size();
266
267 if (NDF > 0) {
268
269 const double chi2 = (*this)(JLine3Z(tz), data.begin(), data.end());
270
271 JTrack3D tb(this->value);
272
273 tb.rotate_back(R);
274
275 out.push_back(getFit(JHistory(track->getHistory(), event()), tb, getQuality(chi2, NDF), NDF));
276
277 // set additional values
278
279 out.rbegin()->setW(track->getW());
280 out.rbegin()->setW(JPP_COVERAGE_ORIENTATION, input.coverage.orientation);
281 out.rbegin()->setW(JPP_COVERAGE_POSITION, input.coverage.position);
282 }
283 }
284
285 // apply default sorter
286
287 sort(out.begin(), out.end(), qualitySorter);
288
289 copy(input.in.begin(), input.in.end(), back_inserter(out));
290
291 return out;
292 }
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.
Data structure for vector in three dimensions.
Definition JVector3D.hh:36
Data structure for normalised vector in positive z-direction.
Definition JVersor3Z.hh:41
int getModuleID() const
Get module identifier.
static const int JMUONSIMPLEX
static const int JPP_COVERAGE_POSITION
coverage of dynamic position calibration from any Jpp application
static const int JPP_COVERAGE_ORIENTATION
coverage of dynamic orientation calibration from any Jpp application
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition JHead.cc:163
Auxiliary classes and methods for 3D geometrical objects and operations.
Definition JAngle3D.hh:19
Auxiliary classes and methods for language specific functionality.
size_t getCount(const array_type< T > &buffer, const JCompare_t &compare)
Count number of unique values.
JTOOLS::JRange< double > JTimeRange
Type definition for time range (unit [ns]).
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
double TMax_ns
maximal time w.r.t. Cherenkov hypothesis [ns]
double TMin_ns
minimal time w.r.t. Cherenkov hypothesis [ns]

◆ reset()

void JRECONSTRUCTION::JMuonSimplexParameters_t::reset ( )
inlineinherited

Reset fit parameters.

Definition at line 39 of file JMuonSimplexParameters_t.hh.

40 {
41 sigma_ns = 3;
42 useL0 = true;
44 TMaxLocal_ns = 15.0;
45 ctMin = 0.0;
46 roadWidth_m = 200.0;
47 TMin_ns = -50.0;
48 TMax_ns = +50.0;
49 NMax = 1000;
50 }

◆ equals()

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

Equality.

Parameters
parametersfit parameters
Returns
true if equals; else false

Definition at line 58 of file JMuonSimplexParameters_t.hh.

59 {
60 return (this->sigma_ns == parameters.sigma_ns &&
61 this->useL0 == parameters.useL0 &&
62 this->numberOfPrefits == parameters.numberOfPrefits &&
63 this->TMaxLocal_ns == parameters.TMaxLocal_ns &&
64 this->ctMin == parameters.ctMin &&
65 this->roadWidth_m == parameters.roadWidth_m &&
66 this->TMin_ns == parameters.TMin_ns &&
67 this->TMax_ns == parameters.TMax_ns &&
68 this->NMax == parameters.NMax);
69 }

◆ ClassDef()

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

Member Data Documentation

◆ sigma_ns

double JRECONSTRUCTION::JMuonSimplexParameters_t::sigma_ns
inherited

time resolution [ns]

Definition at line 73 of file JMuonSimplexParameters_t.hh.

◆ useL0

bool JRECONSTRUCTION::JMuonSimplexParameters_t::useL0
inherited

option for L0 hit use

Definition at line 74 of file JMuonSimplexParameters_t.hh.

◆ numberOfPrefits

size_t JRECONSTRUCTION::JMuonSimplexParameters_t::numberOfPrefits
inherited

number of prefits

Definition at line 75 of file JMuonSimplexParameters_t.hh.

◆ TMaxLocal_ns

double JRECONSTRUCTION::JMuonSimplexParameters_t::TMaxLocal_ns
inherited

time window for local coincidences [ns]

Definition at line 76 of file JMuonSimplexParameters_t.hh.

◆ ctMin

double JRECONSTRUCTION::JMuonSimplexParameters_t::ctMin
inherited

minimal cosine space angle between PMT axes

Definition at line 77 of file JMuonSimplexParameters_t.hh.

◆ roadWidth_m

double JRECONSTRUCTION::JMuonSimplexParameters_t::roadWidth_m
inherited

road width [m]

Definition at line 78 of file JMuonSimplexParameters_t.hh.

◆ TMin_ns

double JRECONSTRUCTION::JMuonSimplexParameters_t::TMin_ns
inherited

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

Definition at line 79 of file JMuonSimplexParameters_t.hh.

◆ TMax_ns

double JRECONSTRUCTION::JMuonSimplexParameters_t::TMax_ns
inherited

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

Definition at line 80 of file JMuonSimplexParameters_t.hh.

◆ NMax

int JRECONSTRUCTION::JMuonSimplexParameters_t::NMax
inherited

maximum number of iterations

Definition at line 81 of file JMuonSimplexParameters_t.hh.


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