CMS 3D CMS Logo

TrackTransientTrack.cc

Go to the documentation of this file.
00001 #include "TrackingTools/TransientTrack/interface/TrackTransientTrack.h"
00002 #include "TrackingTools/PatternTools/interface/TransverseImpactPointExtrapolator.h"
00003 #include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h"
00004 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
00005 #include "TrackingTools/PatternTools/interface/TrajectoryStateClosestToBeamLineBuilder.h"
00006 #include <iostream>
00007 
00008 using namespace reco;
00009 
00010 TrackTransientTrack::TrackTransientTrack() : 
00011   Track(), tkr_(), theField(0), initialTSOSAvailable(false),
00012   initialTSCPAvailable(false), blStateAvailable(false)
00013 {
00014 }
00015 
00016 TrackTransientTrack::TrackTransientTrack( const Track & tk , const MagneticField* field) : 
00017   Track(tk), tkr_(), theField(field), initialTSOSAvailable(false),
00018   initialTSCPAvailable(false), blStateAvailable(false)
00019 {
00020   TrajectoryStateTransform theTransform;
00021   initialFTS = theTransform.initialFreeState(tk, field);
00022 }
00023 
00024 
00025 TrackTransientTrack::TrackTransientTrack( const TrackRef & tk , const MagneticField* field) : 
00026   Track(*tk), tkr_(tk), theField(field), initialTSOSAvailable(false),
00027   initialTSCPAvailable(false), blStateAvailable(false)
00028 {
00029   TrajectoryStateTransform theTransform;
00030   initialFTS = theTransform.initialFreeState(*tk, field);
00031 }
00032 
00033 TrackTransientTrack::TrackTransientTrack( const Track & tk , const MagneticField* field, const edm::ESHandle<GlobalTrackingGeometry>& tg) :
00034   Track(tk), tkr_(), theField(field), initialTSOSAvailable(false),
00035   initialTSCPAvailable(false), blStateAvailable(false), theTrackingGeometry(tg)
00036 {
00037   TrajectoryStateTransform theTransform;
00038   initialFTS = theTransform.initialFreeState(tk, field);
00039 }
00040 
00041 TrackTransientTrack::TrackTransientTrack( const TrackRef & tk , const MagneticField* field, const edm::ESHandle<GlobalTrackingGeometry>& tg) :
00042   Track(*tk), tkr_(tk), theField(field), initialTSOSAvailable(false),
00043   initialTSCPAvailable(false), blStateAvailable(false), theTrackingGeometry(tg)
00044 {
00045   TrajectoryStateTransform theTransform;
00046   initialFTS = theTransform.initialFreeState(*tk, field);
00047 }
00048 
00049 
00050 TrackTransientTrack::TrackTransientTrack( const TrackTransientTrack & tt ) :
00051   Track(tt), tkr_(tt.persistentTrackRef()), theField(tt.field()), 
00052   initialFTS(tt.initialFreeState()), initialTSOSAvailable(false),
00053   initialTSCPAvailable(false)
00054 {
00055   if (tt.initialTSOSAvailable) {
00056     initialTSOS= tt.impactPointState();
00057     initialTSOSAvailable = true;
00058   }
00059   if (tt.initialTSCPAvailable) {
00060     initialTSCP= tt.impactPointTSCP();
00061     initialTSCPAvailable = true;
00062   }
00063 }
00064 
00065 void TrackTransientTrack::setES(const edm::EventSetup& setup) {
00066 
00067   setup.get<GlobalTrackingGeometryRecord>().get(theTrackingGeometry); 
00068 
00069 }
00070 
00071 void TrackTransientTrack::setTrackingGeometry(const edm::ESHandle<GlobalTrackingGeometry>& tg) {
00072 
00073   theTrackingGeometry = tg;
00074 
00075 }
00076 
00077 void TrackTransientTrack::setBeamSpot(const BeamSpot& beamSpot)
00078 {
00079   theBeamSpot = beamSpot;
00080 }
00081 
00082 TrajectoryStateOnSurface TrackTransientTrack::impactPointState() const
00083 {
00084   if (!initialTSOSAvailable) calculateTSOSAtVertex();
00085   return initialTSOS;
00086 }
00087 
00088 TrajectoryStateClosestToPoint TrackTransientTrack::impactPointTSCP() const
00089 {
00090   if (!initialTSCPAvailable) {
00091     initialTSCP = builder(initialFTS, initialFTS.position());
00092     initialTSCPAvailable = true;
00093   }
00094   return initialTSCP;
00095 }
00096 
00097 TrajectoryStateOnSurface TrackTransientTrack::outermostMeasurementState() const
00098 {
00099     TrajectoryStateTransform theTransform;
00100     return theTransform.outerStateOnSurface((*this),*theTrackingGeometry,theField);
00101 }
00102 
00103 TrajectoryStateOnSurface TrackTransientTrack::innermostMeasurementState() const
00104 {
00105     TrajectoryStateTransform theTransform;
00106     return theTransform.innerStateOnSurface((*this),*theTrackingGeometry,theField);
00107 }
00108 
00109 void TrackTransientTrack::calculateTSOSAtVertex() const
00110 {
00111   TransverseImpactPointExtrapolator tipe(theField);
00112   initialTSOS = tipe.extrapolate(initialFTS, initialFTS.position());
00113   initialTSOSAvailable = true;
00114 }
00115 
00116 TrajectoryStateOnSurface 
00117 TrackTransientTrack::stateOnSurface(const GlobalPoint & point) const
00118 {
00119   TransverseImpactPointExtrapolator tipe(theField);
00120   return tipe.extrapolate(initialFTS, point);
00121 }
00122 
00123 TrajectoryStateClosestToBeamLine TrackTransientTrack::stateAtBeamLine() const
00124 {
00125   if (!blStateAvailable) {
00126     TrajectoryStateClosestToBeamLineBuilder blsBuilder;
00127     trajectoryStateClosestToBeamLine = blsBuilder(initialFTS, theBeamSpot);
00128     blStateAvailable = true;
00129   }
00130   return trajectoryStateClosestToBeamLine;
00131 }
00132 

Generated on Tue Jun 9 17:48:40 2009 for CMSSW by  doxygen 1.5.4