88 double evtT0 = std::numeric_limits<double>::quiet_NaN();
89 double evtT0Err = std::numeric_limits<double>::quiet_NaN();
90 double armTimeSum = 0;
91 double armTimeErrSum = 0;
92 double quality = std::numeric_limits<double>::quiet_NaN();
93 int numberOfSVDClusters = 0;
94 int numberOfRecoTracksUsed = 0;
95 float outgoingArmTime = 0;
96 float ingoingArmTime = 0;
97 float outgoingArmTimeError = 0;
98 float ingoingArmTimeError = 0;
102 const B2Vector3D& p = recoTrack.getMomentumSeed();
105 double d0 = uncertainHelix.getD0();
107 double z0 = uncertainHelix.getZ0();
120 outgoingArmTime = recoTrack.getOutgoingArmTime();
121 ingoingArmTime = recoTrack.getIngoingArmTime();
122 outgoingArmTimeError = recoTrack.getOutgoingArmTimeError();
123 ingoingArmTimeError = recoTrack.getIngoingArmTimeError();
124 bool hasOutgoingArm = recoTrack.hasOutgoingArmTime();
125 bool hasIngoingArm = recoTrack.hasIngoingArmTime();
128 if (hasOutgoingArm && hasIngoingArm) {
130 if (outgoingArmTime <= ingoingArmTime) {
131 armTimeSum += outgoingArmTime * recoTrack.getNSVDHitsOfOutgoingArm();
132 armTimeErrSum += outgoingArmTimeError * outgoingArmTimeError * recoTrack.getNSVDHitsOfOutgoingArm() *
133 (recoTrack.getNSVDHitsOfOutgoingArm() - 1);
134 numberOfSVDClusters += recoTrack.getNSVDHitsOfOutgoingArm();
136 armTimeSum += ingoingArmTime * recoTrack.getNSVDHitsOfIngoingArm();
137 armTimeErrSum += ingoingArmTimeError * ingoingArmTimeError * recoTrack.getNSVDHitsOfIngoingArm() *
138 (recoTrack.getNSVDHitsOfIngoingArm() - 1);
139 numberOfSVDClusters += recoTrack.getNSVDHitsOfIngoingArm();
141 numberOfRecoTracksUsed += 1;
142 }
else if (hasOutgoingArm && !hasIngoingArm) {
143 armTimeSum += outgoingArmTime * recoTrack.getNSVDHitsOfOutgoingArm();
144 armTimeErrSum += outgoingArmTimeError * outgoingArmTimeError * recoTrack.getNSVDHitsOfOutgoingArm() *
145 (recoTrack.getNSVDHitsOfOutgoingArm() - 1);
146 numberOfSVDClusters += recoTrack.getNSVDHitsOfOutgoingArm();
147 numberOfRecoTracksUsed += 1;
148 }
else if (!hasOutgoingArm && hasIngoingArm) {
149 armTimeSum += ingoingArmTime * recoTrack.getNSVDHitsOfIngoingArm();
150 armTimeErrSum += ingoingArmTimeError * ingoingArmTimeError * recoTrack.getNSVDHitsOfIngoingArm() *
151 (recoTrack.getNSVDHitsOfIngoingArm() - 1);
152 numberOfSVDClusters += recoTrack.getNSVDHitsOfIngoingArm();
153 numberOfRecoTracksUsed += 1;
159 if ((numberOfRecoTracksUsed == 0) || !(
m_eventT0.isValid()))
return;
163 evtT0 = armTimeSum / numberOfSVDClusters;
164 quality = numberOfSVDClusters;
167 if (numberOfSVDClusters > 1)
168 evtT0Err = std::sqrt(armTimeErrSum / (numberOfSVDClusters * (numberOfSVDClusters - 1)));
170 evtT0Err = std::sqrt(armTimeErrSum);
174 m_eventT0->addTemporaryEventT0(evtT0Component);