83 const double Eclus = shower.getEnergy();
89 const double thetaClus = shower.getTheta();
90 const double phiClus = shower.getPhi();
91 const double rClus = shower.getR();
93 const double sinTheta = sin(thetaClus);
94 const double cosTheta = cos(thetaClus);
95 const double sinPhi = sin(phiClus);
96 const double cosPhi = cos(phiClus);
98 ROOT::Math::XYZVector pos(rClus * sinTheta * cosPhi, rClus * sinTheta * sinPhi, rClus * cosTheta);
99 const double tanLambda = pos.Z() / pos.Rho();
111 ROOT::Math::XYZVector mom = Eclus / pos.R() * pos;
119 if (2. * rad < pos.Rho()) {
120 rad = pos.Rho() / 2.0 + 1.0;
124 double q = pos.Rho();
125 double y3 = pos.Y() / 2.0;
126 double x3 = pos.X() / 2.0;
128 double basex =
sqrt(rad * rad - q * q / 4.0) * (-pos.Y()) / q;
129 double basey =
sqrt(rad * rad - q * q / 4.0) * pos.X() / q;
131 double centerx1 = x3 + basex;
132 double centery1 = y3 + basey;
133 double centerx2 = x3 - basex;
134 double centery2 = y3 - basey;
137 double momx1 = pos.Y() - centery1;
138 double momy1 = - (pos.X() - centerx1);
139 double momx2 = pos.Y() - centery2;
140 double momy2 = - (pos.X() - centerx2);
144 if (momx1 * pos.X() + momy1 * pos.Y() < 0) {
148 if (momx2 * pos.X() + momy2 * pos.Y() < 0) {
154 double mom1abs =
sqrt(momx1 * momx1 + momy1 * momy1);
155 double mom2abs =
sqrt(momx2 * momx2 + momy2 * momy2);
156 momx1 = momx1 / mom1abs;
157 momy1 = momy1 / mom1abs;
158 momx2 = momx2 / mom2abs;
159 momy2 = momy2 / mom2abs;
161 ROOT::Math::XYZVector mom1(momx1 * mom.Rho(), momy1 * mom.Rho(), mom.Z());
162 ROOT::Math::XYZVector mom2(momx2 * mom.Rho(), momy2 * mom.Rho(), mom.Z());
166 bool clockwise1 =
true;
167 bool clockwise2 =
true;
168 if (pos.Y() * mom1.X() - pos.X() * mom1.Y() > 0) {
171 if (pos.Y() * mom2.X() - pos.X() * mom2.Y() > 0) {
175 if (clockwise1 == clockwise2) {
176 B2WARNING(
"Something went wrong during helix extrapolation. Skipping track.");
180 ROOT::Math::XYZVector mompos;
181 ROOT::Math::XYZVector momneg;
198 genfit::MeasuredStateOnPlane msopNeg(repNeg);
200 genfit::MeasuredStateOnPlane msopPos(repPos);
205 shower.getCovarianceMatrixAsArray(covArray);
208 double dx2 = rClus * cosTheta * cosPhi * rClus * cosTheta * cosPhi * covArray[5]
209 + rClus * sinTheta * sinPhi * rClus * sinTheta * sinPhi * covArray[2];
210 double dy2 = rClus * cosTheta * sinPhi * rClus * cosTheta * sinPhi * covArray[5]
211 + rClus * sinTheta * cosPhi * rClus * sinTheta * cosPhi * covArray[2];
212 double dz2 = rClus * sinTheta * rClus * sinTheta * covArray[5];
214 double dpx2 = std::abs(mom1.X() - mom2.X()) / 4.0 * std::abs(mom1.X() - mom2.X()) / 4.0;
215 double dpy2 = std::abs(mom1.Y() - mom2.Y()) / 4.0 * std::abs(mom1.Y() - mom2.Y()) / 4.0;
216 double dpz2 = 0.25 * 0.25 * mom.Z() * mom.Z();
229 msopNeg.setPlane(planeNeg);
231 msopPos.setPlane(planePos);
235 seeds.push_back({seedStateNeg});
237 seeds.push_back({seedStatePos});
static void registerRequiredRelations(StoreArray< RecoTrack > &recoTracks, std::string const &pxdHitsStoreArrayName="", std::string const &svdHitsStoreArrayName="", std::string const &cdcHitsStoreArrayName="", std::string const &bklmHitsStoreArrayName="", std::string const &eklmHitsStoreArrayName="", std::string const &recoHitInformationStoreArrayName="")
Convenience method which registers all relations required to fully use a RecoTrack.