Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Private Attributes | List of all members
JFIT::JMuonSimplex Class Reference

class to handle the Simplex angular reconstruction. More...

#include <JMuonSimplex.hh>

Public Member Functions

 JMuonSimplex ()
 Default constructor. More...
 
 JMuonSimplex (const JLANG::JSharedPointer< const JDETECTOR::JModuleRouter > &router, const JFIT::JMuonSimplexParameters_t &parameters)
 Parameterized constructor. More...
 
 ~JMuonSimplex ()
 
void getJEvt (const KM3NETDAQ::JDAQTimeslice &timeSlice, JFIT::JEvt &InPreFits, JFIT::JEvt &OutFits) const
 Declaration of Member function that actually performs the reconstruction. More...
 

Private Attributes

JLANG::JSharedPointer< const
JDETECTOR::JModuleRouter
router_
 
JFIT::JMuonSimplexParameters_t parameters_
 

Detailed Description

class to handle the Simplex angular reconstruction.

this should be combined with JMuonPrefit first, and subsequently with JMuonGandalf to achieve an optimal angular resolution.

Definition at line 50 of file JMuonSimplex.hh.

Constructor & Destructor Documentation

JFIT::JMuonSimplex::JMuonSimplex ( )
inline

Default constructor.

Definition at line 61 of file JMuonSimplex.hh.

62  {}
JFIT::JMuonSimplex::JMuonSimplex ( const JLANG::JSharedPointer< const JDETECTOR::JModuleRouter > &  router,
const JFIT::JMuonSimplexParameters_t parameters 
)
inline

Parameterized constructor.

Parameters
routerJSharedPointer of JModuleRouter, this is built via detector file.
parametersstruct that holds default-optimized parameters for the reconstruction, for ARCA and ORCA configuration.

Definition at line 70 of file JMuonSimplex.hh.

71  :
72  router_(router),
73  parameters_(parameters)
74  {}
JLANG::JSharedPointer< const JDETECTOR::JModuleRouter > router_
Definition: JMuonSimplex.hh:53
JFIT::JMuonSimplexParameters_t parameters_
Definition: JMuonSimplex.hh:54
JFIT::JMuonSimplex::~JMuonSimplex ( )
inline

Definition at line 76 of file JMuonSimplex.hh.

77  {}

Member Function Documentation

void JFIT::JMuonSimplex::getJEvt ( const KM3NETDAQ::JDAQTimeslice timeSlice,
JFIT::JEvt InPreFits,
JFIT::JEvt OutFits 
) const

Declaration of Member function that actually performs the reconstruction.

Member function definition.

Parameters
timeSlicewhich is contructed via a JDAQEvent
InPreFitsinput JEvt which is a container of prefits, normally JMuonPrefit
OutFitsnon const JEvt.

Definition at line 98 of file JMuonSimplex.hh.

101 {
102  if ( InPreFits.empty() ) return;
103 
104  const bool useL0 = parameters_.useL0;
105  const bool reprocess = parameters_.reprocess;
106  const double sigma_ns = parameters_.sigma_ns;
107  const size_t numberOfPrefits = parameters_.numberOfPrefits;
108  const double Tmax_ns = parameters_.Tmax_ns;
109  const double roadWidth_m = parameters_.roadWidth_m;
110  const double ctMin = parameters_.ctMin;
111 
112  typedef std::vector<JTRIGGER::JHitL0> JDataL0_t;
113  typedef std::vector<JTRIGGER::JHitL1> JDataL1_t;
114  typedef std::vector<JTRIGGER::JHitR1> JDataR1_t;
115 
118  const JTRIGGER::JBuildL2<JTRIGGER::JHitL1> buildL2(2, Tmax_ns, ctMin);
119 
121 
122  JRegressor_t fit(sigma_ns);
123 
124  fit.estimator.reset(new JMEstimatorLorentzian());
125 
126  //JRegressor_t::debug = debug;
127  JRegressor_t::MAXIMUM_ITERATIONS = 10000;
128 
129  const double TMAX_NS = 50.0; //[ns]
130 
131  JEvt::iterator __end = InPreFits.end();
132 
133  if (reprocess) {
134  __end = std::partition(InPreFits.begin(), __end, JHistory::is_not_event(JFIT::JMUONSIMPLEX));
135  }
136 
137  if (InPreFits.begin() != __end) {
138 
139  std::copy(InPreFits.begin(), __end, std::back_inserter(OutFits));
140 
141  if (numberOfPrefits > 0) {
142  std::advance(__end = InPreFits.begin(), std::min(numberOfPrefits, OutFits.size()));
143  }
144 
145  std::partial_sort(InPreFits.begin(), __end, InPreFits.end(), qualitySorter);
146 
147  __end = std::partition( InPreFits.begin(), __end,
148  JFIT::JHistory::is_event(InPreFits.begin()->getHistory())
149  );
150 
151  JDataL0_t dataL0;
152  JDataL1_t dataL1;
153 
154  for (KM3NETDAQ::JDAQTimeslice::const_iterator i = timeSlice.begin();
155  i != timeSlice.end(); ++i) {
156 
157  if (router_->hasModule(i->getModuleID())) {
158 
159  buffer(*i, router_->getModule(i->getModuleID()));
160 
161  buildL0(buffer, std::back_inserter(dataL0));
162  buildL2(buffer, std::back_inserter(dataL1));
163  }
164  }
165 
166  JDataR1_t data;
167 
168  for (JFIT::JEvt::const_iterator track = InPreFits.begin(); track != __end; ++track) {
169 
171  const JFIT::JLine1Z tz(getPosition (*track).rotate(R), track->getT());
172  const JFIT::JModel<JFIT::JLine1Z> match(tz, roadWidth_m, JTimeRange(-TMAX_NS, +TMAX_NS));
173 
174  data.clear();
175 
176  for (JDataL1_t::const_iterator i = dataL1.begin(); i != dataL1.end(); ++i) {
177 
178  JTRIGGER::JHitR1 hit(*i);
179 
180  hit.rotate(R);
181 
182  if (match(hit)) {
183  data.push_back(hit);
184  }
185  }
186 
187  if (useL0) {
188 
189  data.reserve(data.size() + dataL0.size());
190 
191  JDataR1_t::iterator __end1 = data.end();
192 
193  for (JDataL0_t::iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
194 
195  if ( std::find_if( data.begin(), __end1,
196  std::bind2nd(std::equal_to<KM3NETDAQ::JDAQModuleIdentifier>(), i->getModuleID()))
197  == __end1) {
198 
199  JTRIGGER::JHitR1 hit(*i);
200 
201  hit.rotate(R);
202 
203  if (match(hit)) {
204  data.push_back(hit);
205  }
206  }
207  }
208  }
209 
210  fit.step.resize(5);
211 
212  fit.step[0] = JFIT::JLine3Z( JFIT::JLine1Z( JGEOMETRY3D::JVector3D(0.5, 0.0, 0.0), 0.0) );
213  fit.step[1] = JFIT::JLine3Z( JFIT::JLine1Z( JGEOMETRY3D::JVector3D(0.0, 0.5, 0.0), 0.0) );
214  fit.step[2] = JFIT::JLine3Z( JFIT::JLine1Z( JGEOMETRY3D::JVector3D(0.0, 0.0, 0.0), 1.0) );
215  fit.step[3] = JFIT::JLine3Z( JFIT::JLine1Z( JGEOMETRY3D::JVector3D(), 0.0), JGEOMETRY3D::JVersor3Z(0.005, 0.0) );
216  fit.step[4] = JFIT::JLine3Z( JFIT::JLine1Z( JGEOMETRY3D::JVector3D(), 0.0), JGEOMETRY3D::JVersor3Z(0.0, 0.005) );
217 
218  const int NDF = JFIT::getCount(data.begin(), data.end()) - fit.step.size();
219 
220  if (NDF >= 0) {
221 
222  const double chi2 = fit( JFIT::JLine3Z(tz), data.begin(), data.end() );
223 
224  JGEOMETRY3D::JTrack3D track3D(fit.value);
225 
226  track3D.rotate_back(R);
227 
228  const double energy(0);
229  OutFits.push_back( JFIT::getFit(JFIT::JHistory(track->getHistory()).add(JFIT::JFitApplication_t::JMUONSIMPLEX), track3D,
230  JFIT::getQuality(chi2, NDF), NDF,energy,JFIT::JFitStatus_t::OKAY) );
231  }
232  }
233 
234  // apply default sorter
235 
236  std::sort(OutFits.begin(), OutFits.end(), qualitySorter);
237  }
238 
239 }
Template definition of a data regressor of given model.
Definition: JRegressor.hh:66
const JModule & getModule(const JObjectID &id) const
Get module parameters.
int getCount(const JHitL0 &hit)
Get hit count.
Definition: JEvtToolkit.hh:728
Rotation matrix.
Definition: JRotation3D.hh:108
Data structure for fit of straight line in positive z-direction.
Definition: JLine3Z.hh:35
Container for historical events.
Definition: JHistory.hh:95
JRange< double > JTimeRange
Type definition for time range.
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.
Definition: JEvtToolkit.hh:116
Template L2 builder.
Definition: JBuildL2.hh:47
Data structure for vector in three dimensions.
Definition: JVector3D.hh:32
Auxiliary class to test history.
Definition: JHistory.hh:101
JDirection3D getDirection(const JFit &fit)
Get direction.
Definition: JEvtToolkit.hh:75
Auxiliary class to match data points with given model.
Definition: JModel.hh:24
counter_type advance(counter_type &counter, const counter_type value, const counter_type limit=std::numeric_limits< counter_type >::max())
Advance counter.
Definition: JCounter.hh:35
JLANG::JSharedPointer< const JDETECTOR::JModuleRouter > router_
Definition: JMuonSimplex.hh:53
JPosition3D getPosition(const JFit &fit)
Get position.
Definition: JEvtToolkit.hh:63
double getQuality(const double chi2, const int NDF)
Get quality of fit.
Definition: JEvtToolkit.hh:195
Data structure for fit of straight line paralel to z-axis.
Definition: JLine1Z.hh:27
bool hasModule(const JObjectID &id) const
Has module.
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:40
Reduced data structure for L1 hit.
Definition: JHitR1.hh:31
2-dimensional frame with time calibrated data from one optical module.
bool qualitySorter(const JFit &first, const JFit &second)
Comparison of fit results.
Definition: JEvtToolkit.hh:223
Template L0 hit builder.
Definition: JBuildL0.hh:35
Data structure for normalised vector in positive z-direction.
Definition: JVersor3Z.hh:36
JPosition3D & rotate(const JRotation3D &R)
Rotate.
Definition: JPosition3D.hh:185
JFIT::JMuonSimplexParameters_t parameters_
Definition: JMuonSimplex.hh:54

Member Data Documentation

JLANG::JSharedPointer<const JDETECTOR::JModuleRouter> JFIT::JMuonSimplex::router_
private

Definition at line 53 of file JMuonSimplex.hh.

JFIT::JMuonSimplexParameters_t JFIT::JMuonSimplex::parameters_
private

Definition at line 54 of file JMuonSimplex.hh.


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