File indexing completed on 2024-04-06 12:11:54
0001
0002
0003
0004
0005
0006
0007 #include "Math/Vector3D.h"
0008 #include "DataFormats/TrackReco/interface/Track.h"
0009 #include "Fireworks/Tracks/interface/estimate_field.h"
0010
0011 double fw::estimate_field(const reco::Track& track, bool highQuality) {
0012 if (!track.extra().isAvailable())
0013 return -1;
0014
0015
0016
0017
0018
0019 double estimate = -1;
0020 if (pow(track.outerPosition().x() - track.vx(), 2) + pow(track.outerPosition().y() - track.vy(), 2) <
0021 pow(track.innerPosition().x() - track.vx(), 2) + pow(track.innerPosition().y() - track.vy(), 2)) {
0022 estimate = estimate_field(
0023 track.outerPosition().x(), track.outerPosition().y(), track.vx(), track.vy(), track.px(), track.py());
0024 } else {
0025 estimate = estimate_field(
0026 track.innerPosition().x(), track.innerPosition().y(), track.vx(), track.vy(), track.px(), track.py());
0027 }
0028
0029 if (highQuality) {
0030 if (fabs(track.outerMomentum().rho() / track.pt() - 1) < 0.1 && track.innerPosition().rho() < 129 &&
0031 track.outerPosition().rho() < 129) {
0032
0033
0034
0035 return estimate;
0036 } else {
0037 return -1;
0038 }
0039 } else
0040 return estimate;
0041 }
0042
0043 double fw::estimate_field(double vx1, double vy1, double vx2, double vy2, double px, double py) {
0044 math::XYZVector displacement(vx2 - vx1, vy2 - vy1, 0);
0045 math::XYZVector transverseMomentum(px, py, 0);
0046 double cosAlpha = transverseMomentum.Dot(displacement) / transverseMomentum.r() / displacement.r();
0047 return 200 * sqrt(1 - cosAlpha * cosAlpha) / 0.2998 * transverseMomentum.r() / displacement.r();
0048 }