13 #include <tracking/trackFindingVXD/variableExtractors/VariableExtractor.h>
14 #include <tracking/dataobjects/RecoTrack.h>
15 #include <tracking/spacePointCreation/SpacePointTrackCand.h>
17 #include <genfit/MeasuredStateOnPlane.h>
18 #include <root/TVector3.h>
19 #include <root/TMatrixDSym.h>
26 class SubRecoTrackExtractor :
public VariableExtractor {
57 m_variables.at(
"PXD_QI") = isnan(pxdQI) ? 0. : pxdQI;
64 m_variables.at(
"CDC_QI") = isnan(cdcQI) ? 0. : cdcQI;
96 void initializeStats(
const std::string& prefix, std::vector<Named<float*>>& variables)
108 const TVector3* svdTrackVector,
109 const TVector3* cdcTrackVector)
111 if (not(svdTrackVector and cdcTrackVector)) {
120 m_variables.at(prefix +
"_diff_Z") = fabs(cdcTrackVector->Z() - svdTrackVector->Z());
121 m_variables.at(prefix +
"_diff_Pt") = fabs(cdcTrackVector->Pt() - svdTrackVector->Pt());
122 m_variables.at(prefix +
"_diff_Theta") = fabs(cdcTrackVector->Theta() - svdTrackVector->Theta());
123 m_variables.at(prefix +
"_diff_Phi") = fabs(cdcTrackVector->Phi() - svdTrackVector->Phi());
124 m_variables.at(prefix +
"_diff_Mag") = fabs(cdcTrackVector->Mag() - svdTrackVector->Mag());
125 m_variables.at(prefix +
"_diff_Eta") = fabs(cdcTrackVector->Eta() - svdTrackVector->Eta());
134 TVector3 center(0., 0., 0.);
135 TVector3 direction(0., 0., 1.);
141 svdTrackStateOnPlane = SVDRecoTrack->getMeasuredStateOnPlaneFromLastHit();
142 cdcTrackStateOnPlane = CDCRecoTrack->getMeasuredStateOnPlaneFromFirstHit();
143 cdcTrackStateOnPlane.extrapolateToCylinder(
m_CDC_wall_radius, center, direction);
144 svdTrackStateOnPlane.extrapolateToPlane(cdcTrackStateOnPlane.getPlane());
147 B2WARNING(
"SubRecoTrackExtractor: SVDRecoTrack and/or CDCRecoTrack extrapolation to the CDCwall failed!\n"
148 <<
"-->" << e.what());
156 const TVector3 svdTrackPositionOnPlaneAtCDCWall = svdTrackStateOnPlane.getPos();
157 const TVector3 svdTrackMomentumOnPlaneAtCDCWall = svdTrackStateOnPlane.getMom();
158 const TVector3 cdcTrackPositionOnPlaneAtCDCWall = cdcTrackStateOnPlane.getPos();
159 const TVector3 cdcTrackMomentumOnPlaneAtCDCWall = cdcTrackStateOnPlane.getMom();
164 const TMatrixDSym invCovariance = (svdTrackStateOnPlane.getCov() + cdcTrackStateOnPlane.getCov()).Invert();
165 TVectorD stateDifference = cdcTrackStateOnPlane.getState() - svdTrackStateOnPlane.getState();
166 stateDifference *= invCovariance;
167 const float chi2 = stateDifference * (cdcTrackStateOnPlane.getState() - svdTrackStateOnPlane.getState());
172 B2WARNING(
"SubRecoTrackExtractor: Matrix is singular!\n"
173 <<
"-->" <<
e.what());
185 const TVector3 linePoint(0., 0., 0.);
186 const TVector3 lineDirection(0., 0., 1.);
192 svdTrackStateOnPlane = SVDRecoTrack->getMeasuredStateOnPlaneFromFirstHit();
193 cdcTrackStateOnPlane = CDCRecoTrack->getMeasuredStateOnPlaneFromFirstHit();
194 cdcTrackStateOnPlane.extrapolateToLine(linePoint, lineDirection);
195 svdTrackStateOnPlane.extrapolateToLine(linePoint, lineDirection);
198 B2WARNING(
"SubRecoTrackExtractor: SVDRecoTrack and/or CDCRecoTrack extrapolation to POCA failed!\n"
199 <<
"-->" << e.what());
206 const TVector3 svdTrackPositionOnPlaneAtPOCA = svdTrackStateOnPlane.getPos();
207 const TVector3 svdTrackMomentumOnPlaneAtPOCA = svdTrackStateOnPlane.getMom();
208 const TVector3 cdcTrackPositionOnPlaneAtPOCA = cdcTrackStateOnPlane.getPos();
209 const TVector3 cdcTrackMomentumOnPlaneAtPOCA = cdcTrackStateOnPlane.getMom();