46 : m_straightline (rhs.m_straightline),
47 m_fieldprop (rhs.m_fieldprop),
50 m_prevchi2 (rhs.m_prevchi2),
51 m_nperpars (rhs.m_nperpars),
52 m_nscatterers (rhs.m_nscatterers),
53 m_ncaloscatterers (rhs.m_ncaloscatterers),
54 m_nbrems (rhs.m_nbrems),
55 m_nupstreamstates (rhs.m_nupstreamstates),
56 m_nupstreamscatterers (rhs.m_nupstreamscatterers),
57 m_nupstreamcaloscatterers (rhs.m_nupstreamcaloscatterers),
58 m_nupstreambrems (rhs.m_nupstreambrems),
59 m_nhits (rhs.m_nhits),
60 m_noutl (rhs.m_noutl),
61 m_nsihits (rhs.m_nsihits),
62 m_ntrthits (rhs.m_ntrthits),
63 m_ntrtprechits (rhs.m_ntrtprechits),
64 m_ntrttubehits (rhs.m_ntrttubehits),
65 m_npseudo (rhs.m_npseudo),
66 m_nmeasoutl (rhs.m_nmeasoutl),
67 m_refpar(rhs.m_refpar != nullptr ? rhs.m_refpar->
clone() : nullptr),
68 m_converged (rhs.m_converged),
69 m_scatteringangles (rhs.m_scatteringangles),
70 m_scatteringsigmas (rhs.m_scatteringsigmas),
71 m_brems (rhs.m_brems),
73 m_errors (rhs.m_errors),
74 m_weightresderiv (rhs.m_weightresderiv),
75 m_totx0 (rhs.m_totx0),
76 m_toteloss (rhs.m_toteloss),
78 m_prefit (rhs.m_prefit),
79 m_caloelossstate (nullptr),
80 m_upstreammat (rhs.m_upstreammat)
84 for (
const std::unique_ptr<GXFTrackState> &
i : rhs.
m_states) {
85 m_states.emplace_back(std::make_unique<GXFTrackState>(*
i));
123 for (
const std::unique_ptr<GXFTrackState> &
i : rhs.
m_states) {
124 m_states.push_back(std::make_unique<GXFTrackState>(*
i));
149 constexpr
double perpThreshold = 1400;
150 constexpr
double zThreshold = 3700;
160 (
par->position().perp() > perpThreshold || std::abs(
par->position().z()) > zThreshold)
181 double *
errors = state->measurementErrors();
183 for (
int i = 0;
i < 5;
i++) {
216 m_states.push_back(std::move(state));
230 if (meff->
deltaE() == 0) {
244 m_states.push_back(std::move(state));
251 int previousbrems = 0;
254 if ((
m_states[
i]->materialEffects() !=
nullptr)
255 &&
m_states[
i]->materialEffects()->sigmaDeltaE() > 0) {
268 m_states.push_back(std::move(state));
287 for (
const auto & state :
m_states) {
288 if (state->trackParameters() !=
nullptr) {
289 const double inprod =
m_refpar->momentum().dot(state->position() -
m_refpar->position());
296 state->associatedSurface().straightLineDistanceEstimate(
m_refpar->position(),
m_refpar->momentum().unit());
303 std::abs(distsol.
first()) < std::abs(distsol.
second()) ?
323 if (meff->
deltaE() == 0) {
359 for (
int i = 0;
i < 5;
i++) {
385 if (
error>1 && oldError<1) {
389 else if (error<1 && oldError>1) {
521 && ((
m_prefit == 0) || (*state).materialEffects()->deltaE() == 0)) {
522 double scatphi = (*state).materialEffects()->deltaPhi();
523 double scattheta = (*state).materialEffects()->deltaTheta();
525 double sigmascatphi = (*state).materialEffects()->sigmaDeltaPhi();
526 double sigmascattheta = (*state).materialEffects()->sigmaDeltaTheta();
528 emplace_back(sigmascatphi, sigmascattheta);
535 std::vector < std::pair < double, double >>&
550 double > >&scatteringangles) {
555 && ((
m_prefit == 0) || (*state).materialEffects()->deltaE() == 0)) {
556 double scatphi = scatteringangles[scatno].first;
557 double scattheta = scatteringangles[scatno].second;
558 (*state).materialEffects()->setScatteringAngles(scatphi, scattheta);
570 if (((*state).materialEffects() !=
nullptr)
571 && (*state).materialEffects()->sigmaDeltaE() > 0) {
572 (*state).materialEffects()->setdelta_p(
m_brems[bremno]);
587 if (
m_res.size() == 0) {
634 std::vector < std::pair < const Layer *, const Layer *>>&
643 for (std::unique_ptr<GXFTrackState> & hit :
trackStates()) {
644 if (hit->measurement() !=
nullptr) {
645 if (firstmeasstate ==
nullptr) {
646 firstmeasstate = hit.get();
648 lastmeasstate = hit.get();
652 if (firstmeasstate ==
nullptr) {
653 throw std::logic_error(
"no first measurement.");
656 return std::make_pair(firstmeasstate, lastmeasstate);
669 (hit->materialEffects() !=
nullptr) &&
670 hit->materialEffects()->isKink()
680 for (std::unique_ptr<GXFTrackState> & hit :
trackStates()) {
681 hit->setTrackCovariance(
nullptr);
686 return std::make_unique<const FitQuality>(
chi2(),
nDOF());