11 #include <tracking/dataobjects/RecoTrack.h>
12 #include <genfit/AbsTrackRep.h>
13 #include <framework/logging/Logger.h>
14 #include <framework/datastore/StoreArray.h>
15 #include <tracking/svdROIFinder/SVDInterceptor.h>
16 #include <vxd/geometry/GeoCache.h>
17 #include <vxd/geometry/SensorInfoBase.h>
22 SVDInterceptor::SVDInterceptor(
const ROIinfo* theROIinfo,
double toleranceZ,
double tolerancePhi):
23 m_theROIinfo(*theROIinfo)
40 for (
int i = 0; i < trackList.
getEntries(); ++i) {
42 B2DEBUG(20,
" %%%%% track candidate Nr. : " << i + 1);
44 if (! trackList[i] ->wasFitSuccessful()) {
45 B2DEBUG(20,
"%%%%% Fit not successful! discard this RecoTrack");
50 for (
unsigned int svdLayer = 0; svdLayer < svdLayers.size(); svdLayer++) {
52 B2DEBUG(20,
" .fill intercept List, Layer: " << svdLayer + 3);
59 B2DEBUG(20,
" .-extrapolation to cylinder failed");
63 std::list<ROIDetPlane> selectedPlanes;
64 B2DEBUG(20,
" ..append selected planes, position " << gfTrackState.getPos().X() <<
", " << gfTrackState.getPos().Y() <<
", " <<
65 gfTrackState.getPos().Z());
68 B2DEBUG(20,
" ...append intercepts for track " << i);
69 appendIntercepts(interceptList, selectedPlanes, trackList[i], i, recoTrackToSVDIntercepts);
86 std::list<ROIDetPlane>::iterator itPlanes = planeList.begin();
88 B2DEBUG(20,
" ...-appendIntercepts, checking " << planeList.size() <<
" planes");
93 for (
int propDir = -1; propDir <= 1; propDir += 2) {
96 while (itPlanes != planeList.end()) {
102 lambda = state.extrapolateToPlane(itPlanes->getSharedPlanePtr());
104 B2DEBUG(20,
" ...-extrapolation to plane failed");
109 const TVectorD& predictedIntersect = state.getState();
110 const TMatrixDSym& covMatrix = state.getCov();
112 tmpSVDIntercept.setCoorU(predictedIntersect[3]);
113 tmpSVDIntercept.setCoorV(predictedIntersect[4]);
114 tmpSVDIntercept.setSigmaU(sqrt(covMatrix(3, 3)));
115 tmpSVDIntercept.setSigmaV(sqrt(covMatrix(4, 4)));
116 tmpSVDIntercept.setSigmaUprime(sqrt(covMatrix(1, 1)));
117 tmpSVDIntercept.setSigmaVprime(sqrt(covMatrix(2, 2)));
118 tmpSVDIntercept.setLambda(lambda);
119 tmpSVDIntercept.setVxdID(itPlanes->getVxdID());
120 tmpSVDIntercept.setUprime(predictedIntersect[1]);
121 tmpSVDIntercept.setVprime(predictedIntersect[2]);
123 B2DEBUG(20,
"coordinates with getPos = " << state.getPos().X()
124 <<
", " << state.getPos().Y()
125 <<
", " << state.getPos().Z());
126 B2DEBUG(20,
"coordinates with predInter = " << predictedIntersect[3]
127 <<
", " << predictedIntersect[4]);
128 B2DEBUG(20,
"momentum with getMom = " << state.getMom().X()
129 <<
", " << state.getMom().Y()
130 <<
", " << state.getMom().Z());
131 B2DEBUG(20,
"U/V prime momentum with getMom = " << state.getMom().Z() / state.getMom().X()
132 <<
", " << state.getMom().Z() / state.getMom().Y());
133 B2DEBUG(20,
"U/V prime momentum with predInter = " << predictedIntersect[1]
134 <<
", " << predictedIntersect[2]);
136 interceptList->
appendNew(tmpSVDIntercept);
138 recoTrackToSVDIntercepts->
add(recoTrackIndex, interceptList->
getEntries() - 1);