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();
104 double d0 = uncertainHelix.getD0();
105 double z0 = uncertainHelix.getZ0();
118 outgoingArmTime = recoTrack.getOutgoingArmTime();
119 ingoingArmTime = recoTrack.getIngoingArmTime();
120 outgoingArmTimeError = recoTrack.getOutgoingArmTimeError();
121 ingoingArmTimeError = recoTrack.getIngoingArmTimeError();
122 bool hasOutgoingArm = recoTrack.hasOutgoingArmTime();
123 bool hasIngoingArm = recoTrack.hasIngoingArmTime();
126 if (hasOutgoingArm && hasIngoingArm) {
128 if (outgoingArmTime <= ingoingArmTime) {
129 armTimeSum += outgoingArmTime * recoTrack.getNSVDHitsOfOutgoingArm();
130 armTimeErrSum += outgoingArmTimeError * outgoingArmTimeError * recoTrack.getNSVDHitsOfOutgoingArm() *
131 (recoTrack.getNSVDHitsOfOutgoingArm() - 1);
132 numberOfSVDClusters += recoTrack.getNSVDHitsOfOutgoingArm();
134 armTimeSum += ingoingArmTime * recoTrack.getNSVDHitsOfIngoingArm();
135 armTimeErrSum += ingoingArmTimeError * ingoingArmTimeError * recoTrack.getNSVDHitsOfIngoingArm() *
136 (recoTrack.getNSVDHitsOfIngoingArm() - 1);
137 numberOfSVDClusters += recoTrack.getNSVDHitsOfIngoingArm();
139 numberOfRecoTracksUsed += 1;
140 }
else if (hasOutgoingArm && !hasIngoingArm) {
141 armTimeSum += outgoingArmTime * recoTrack.getNSVDHitsOfOutgoingArm();
142 armTimeErrSum += outgoingArmTimeError * outgoingArmTimeError * recoTrack.getNSVDHitsOfOutgoingArm() *
143 (recoTrack.getNSVDHitsOfOutgoingArm() - 1);
144 numberOfSVDClusters += recoTrack.getNSVDHitsOfOutgoingArm();
145 numberOfRecoTracksUsed += 1;
146 }
else if (!hasOutgoingArm && hasIngoingArm) {
147 armTimeSum += ingoingArmTime * recoTrack.getNSVDHitsOfIngoingArm();
148 armTimeErrSum += ingoingArmTimeError * ingoingArmTimeError * recoTrack.getNSVDHitsOfIngoingArm() *
149 (recoTrack.getNSVDHitsOfIngoingArm() - 1);
150 numberOfSVDClusters += recoTrack.getNSVDHitsOfIngoingArm();
151 numberOfRecoTracksUsed += 1;
157 if ((numberOfRecoTracksUsed == 0) || !(
m_eventT0.isValid()))
return;
161 evtT0 = armTimeSum / numberOfSVDClusters;
162 quality = numberOfSVDClusters;
165 if (numberOfSVDClusters > 1)
166 evtT0Err = std::sqrt(armTimeErrSum / (numberOfSVDClusters * (numberOfSVDClusters - 1)));
168 evtT0Err = std::sqrt(armTimeErrSum);
172 m_eventT0->addTemporaryEventT0(evtT0Component);