6 #include <Math/Functor.h>
13 ISvcLocator* pSvcLocator)
21 return StatusCode::SUCCESS;
33 std::make_unique<MuonSegmentContainer>()));
35 for (
auto & seed : stationWithMax.getMaxima()){
44 return StatusCode::SUCCESS;
47 template <
class ContainerType>
50 const ContainerType*& contToPush)
const {
54 <<
typeid(ContainerType).
name());
55 return StatusCode::SUCCESS;
59 contToPush = readHandle.cptr();
60 return StatusCode::SUCCESS;
65 data.measurementsToFit = seed.getHitsInMax();
66 data.foundMin =
false;
67 data.x0 = seed.interceptX();
68 data.y0 = seed.interceptY();
69 data.tanTheta = seed.tanTheta();
70 data.tanPhi = seed.tanPhi();
79 data.minimizer->SetMaxFunctionCalls(1e8);
80 data.minimizer->SetMaxIterations(1e8);
81 data.minimizer->SetTolerance(0.0001);
82 data.minimizer->SetStrategy(1);
83 data.minimizer->SetPrintLevel(0);
84 data.chi2_per_measurement.clear();
85 data.chi2_per_measurement.resize(2 *
data.measurementsToFit.size());
86 return StatusCode::SUCCESS;
92 return StatusCode::SUCCESS;
97 data.minimizer->SetFunction(c2f);
99 if (!
data.minimizer->Minimize()){
100 data.minimizer->SetStrategy(2);
101 data.minimizer->Minimize();
103 data.minimizer->Hesse();
104 const double* xs =
data.minimizer->X();
105 const double* errs =
data.minimizer->Errors();
116 data.foundMin =
true;
118 return StatusCode::SUCCESS;
123 std::vector<const xAOD::UncalibratedMeasurement*> measurements;
124 for (
auto hit :
data.measurementsToFit){
125 if (hit->primaryMeasurement()) measurements.push_back(hit->primaryMeasurement());
126 if (hit->secondaryMeasurement()) measurements.push_back(hit->secondaryMeasurement());
130 segment.setChi2PerMeasurement(
data.chi2_per_measurement);