File indexing completed on 2024-10-25 05:06:52
0001 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateClosestToPoint.h"
0002 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0003
0004
0005
0006 TrajectoryStateClosestToPoint::TrajectoryStateClosestToPoint(const FTS& originalFTS, const GlobalPoint& referencePoint)
0007 : theFTS(originalFTS), theRefPoint(referencePoint), valid(true), theFTSavailable(true), errorIsAvailable(false) {
0008 auto params = PerigeeConversions::ftsToPerigeeParameters(originalFTS, referencePoint, thePt);
0009 if (not params) {
0010 valid = false;
0011 edm::LogInfo("TrajectoryStateClosestToPoint_PerigeeConversions") << "Track had pt == 0.";
0012 return;
0013 }
0014 theParameters = *params;
0015 if (theFTS.hasError()) {
0016 thePerigeeError = PerigeeConversions::ftsToPerigeeError(originalFTS);
0017 errorIsAvailable = true;
0018 }
0019 theField = &(originalFTS.parameters().magneticField());
0020 }
0021
0022 void TrajectoryStateClosestToPoint::calculateFTS() const {
0023 if (!isValid())
0024 throw TrajectoryStateException("TrajectoryStateClosestToPoint is invalid and cannot return any parameters");
0025 GlobalTrajectoryParameters gtp(PerigeeConversions::positionFromPerigee(theParameters, theRefPoint),
0026 PerigeeConversions::momentumFromPerigee(theParameters, thePt, theRefPoint),
0027 theParameters.charge(),
0028 theField);
0029 if (errorIsAvailable) {
0030 theFTS = FTS(gtp, PerigeeConversions::curvilinearError(thePerigeeError, gtp));
0031 } else {
0032 theFTS = FTS(gtp);
0033 }
0034 theFTSavailable = true;
0035 }