Declaration of Member function that actually performs the reconstruction.
144 const int FACTORY_LIMIT = 40;
145 const double STANDARD_DEVIATIONS = 1.0;
146 const int NUMBER_OF_L1HITS = (useL0 ? 1 : 4);
158 JDataL0_t dataL0_selected;
161 buildL0(timeSliceBuildL0, *
moduleRouter_, back_inserter(dataL0));
162 buildL2(timeSliceBuildL1, *
moduleRouter_, back_inserter(data));
164 JDataL1_t::iterator __end =
clusterizeWeight(data.begin(), data.end(), match3G);
166 if(std::distance(data.begin(), __end) >= NUMBER_OF_L1HITS){
169 std::copy(data.begin(), data.end(), std::back_inserter(dataL1));
170 JDataL1_t::iterator __end1 = dataL1.end();
176 dataL1.erase(__end1, dataL1.end());
177 dataL1.reserve(dataL1.size() + dataL0.size());
178 __end1 = dataL1.end();
180 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
184 if (std::count_if(dataL1.begin(), __end1,
JTRIGGER::JBind2nd(match3G,hit)) >= NUMBER_OF_L1HITS){
185 dataL1.push_back(hit);
189 std::sort(__end1, dataL1.end(), compare);
190 __end1 =
clusterize(__end1, dataL1.end(), match3G);
197 double chi2 = std::numeric_limits<double>::max();
201 if(std::distance(dataL1.begin(), __end1) <= FACTORY_LIMIT){
203 double ymin = std::numeric_limits<double>::max();
205 JDataL1_t::iterator __end2 = __end1;
207 for (
int n = 0; n <= numberOfOutliers && std::distance(dataL1.begin(), __end2) >
210 std::sort(dataL1.begin(), __end1, compare);
215 fit(dataL1.begin(), __end2);
216 double y =
JFIT::getChi2(fit, dataL1.begin(), __end2, sigma_ns);
219 std::cout <<
"chi2(1) " << y << std::endl;
220 }
else if (y < ymin) {
232 ymin -= STANDARD_DEVIATIONS * STANDARD_DEVIATIONS;
238 fit(dataL1.begin(), __end1);
239 NDF = std::distance(dataL1.begin(), __end1) - JEstimator<JFIT::JPoint4D>::NUMBER_OF_PARAMETERS;
257 dataL0_selected.clear();
262 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
264 const JHitL0 hit(*i);
267 dataL0_selected.push_back(hit);
271 double simplex_step = 2;
272 fit2_->step.resize(4);
278 chi2 = (*fit2_)(point_shifted, dataL0_selected.begin(), dataL0_selected.end());
283 const double energy(0);
285 fitResult,
getQuality(chi2, (useL0 ? N : NDF)),
288 OutFits.push_back(outFit);
289 OutFits.rbegin()->setW(13, chi2);
290 OutFits.rbegin()->setW(14, NDF);
299 std::cout<<
"Too few hits " << std::endl;
Data structure for L1 hit.
JBinder2nd< JHit_t > JBind2nd(const JMatch< JHit_t > &match, const JHit_t &second)
Auxiliary method to create JBinder2nd object.
JTOOLS::JRange< double > time_grid
JFIT::JShowerPrefitParameters_t parameters_
Data structure for vertex fit.
int getCount(const JHitL0 &hit)
Get hit count.
Container for historical events.
Template definition of linear fit.
JHitIterator_t clusterizeWeight(JHitIterator_t __begin, JHitIterator_t __end, const JMatch< JHit_t > &match)
Partition data according given binary match operator.
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.
Data structure for track fit results.
JLANG::JSharedPointer< const JDETECTOR::JModuleRouter > moduleRouter_
Auxiliary class for permutations of L1 hits.
JHitIterator_t clusterize(JHitIterator_t __begin, JHitIterator_t __end, const JMatch< JHit_t > &match, const int Nmin=1)
Partition data according given binary match operator.
Data structure for vector in three dimensions.
std::shared_ptr< JRegressor_t > fit2_
Auxiliary class to match data points with given model.
double getQuality(const double chi2, const int NDF)
Get quality of fit.
void copy(const Head &from, JHead &to)
Copy header from from to to.
bool qualitySorter(const JFit &first, const JFit &second)
Comparison of fit results.
double getChi2(const double P)
Get chi2 corresponding to given probability.
Data structure for normalised vector in positive z-direction.
JTOOLS::JRange< double > pos_grid