ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/L1RpcTriggerAnalysis/src/TrackAtSurface.cc
Revision: 1.1
Committed: Mon Nov 28 18:39:48 2011 UTC (13 years, 5 months ago) by konec
Content type: text/plain
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 konec 1.1 #include "UserCode/L1RpcTriggerAnalysis/interface/TrackAtSurface.h"
2    
3     #include <vector>
4    
5     #include "FWCore/Framework/interface/Event.h"
6     #include "FWCore/Framework/interface/EventSetup.h"
7     #include "FWCore/Framework/interface/ESHandle.h"
8     #include "DataFormats/Common/interface/Handle.h"
9    
10     #include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h"
11     #include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h"
12     #include "MagneticField/Engine/interface/MagneticField.h"
13     #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
14    
15     #include "DataFormats/MuonReco/interface/Muon.h"
16     #include "DataFormats/MuonReco/interface/MuonFwd.h"
17     #include "DataFormats/TrackReco/interface/Track.h"
18     #include "DataFormats/TrackReco/interface/TrackFwd.h"
19    
20     #include "DataFormats/Math/interface/deltaR.h"
21     #include "TrackingTools/GeomPropagators/interface/Propagator.h"
22     #include "TrackingTools/PatternTools/interface/Trajectory.h"
23     #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
24     #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
25     #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
26    
27    
28     #include "DataFormats/GeometrySurface/interface/BoundCylinder.h"
29     #include "DataFormats/GeometrySurface/interface/SimpleCylinderBounds.h"
30     #include "DataFormats/GeometrySurface/interface/BoundDisk.h"
31     #include "DataFormats/GeometrySurface/interface/SimpleDiskBounds.h"
32    
33     #include "Geometry/CommonDetUnit/interface/GeomDet.h"
34     #include "DataFormats/MuonDetId/interface/RPCDetId.h"
35    
36    
37    
38    
39     TrackAtSurface::TrackAtSurface(const reco::Muon* mu,const edm::Event &ev, const edm::EventSetup &es)
40     : theEv(ev), theEs(es)
41     {
42     edm::ESHandle<GlobalTrackingGeometry> globalGeometry;
43     es.get<GlobalTrackingGeometryRecord>().get(globalGeometry);
44     edm::ESHandle<MagneticField> magField;
45     es.get<IdealMagneticFieldRecord>().get(magField);
46    
47    
48     //refit global muons, take tracjctory colsest to Mu.
49     typedef std::vector<Trajectory> Trajectories;
50     edm::Handle<Trajectories> trajectories;
51     edm::InputTag refitTag("globalMuons","Refitted");
52     ev.getByLabel(refitTag,trajectories);
53     double minDR = 0.3;
54     for (Trajectories::const_iterator it=trajectories->begin(); it != trajectories->end(); ++it) {
55     double diff = deltaR(mu->track()->eta(), mu->track()->phi(), it->geometricalInnermostState().globalMomentum().eta(), it->geometricalInnermostState().globalMomentum().phi());
56     if (diff < minDR) { minDR = diff; theTrajectory = *it; }
57     }
58     theState = TrajectoryStateTransform().outerStateOnSurface(*(mu->track()), *globalGeometry, &*magField);
59    
60     }
61    
62     TrajectoryStateOnSurface TrackAtSurface::atPoint( const GlobalPoint& point) const
63     {
64     TrajectoryStateOnSurface muTSOS = theTrajectory.empty() ? theState : theTrajectory.closestMeasurement(point).updatedState();
65    
66     bool barrel = fabs(point.z()) < 680. ? true : false;
67     ReferenceCountingPointer<Surface> surface = barrel ?
68     ReferenceCountingPointer<Surface>( new BoundCylinder( GlobalPoint(0.,0.,0.), TkRotation<float>(), SimpleCylinderBounds( point.perp(), point.perp(), -680., 680. ) ))
69     : ReferenceCountingPointer<Surface>( new BoundDisk( GlobalPoint(0.,0.,point.z()), TkRotation<float>(), SimpleDiskBounds( 260., 720., -0.0001, 0.0001 ) ) );
70    
71     edm::ESHandle<Propagator> propagator;
72     theEs.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny", propagator);
73     TrajectoryStateOnSurface result = propagator->propagate(muTSOS, *surface);
74    
75     return result;
76     }
77    
78     TrajectoryStateOnSurface TrackAtSurface::atDetFromClose( const RPCDetId& rpc, const GlobalPoint& point) const
79     {
80    
81     edm::ESHandle<GlobalTrackingGeometry> globalGeometry;
82     theEs.get<GlobalTrackingGeometryRecord>().get(globalGeometry);
83     edm::ESHandle<Propagator> propagator;
84    
85     const GeomDet * det = globalGeometry->idToDet(rpc);
86     TrajectoryStateOnSurface muTSOS;
87     if (!theTrajectory.empty()) muTSOS = theTrajectory.closestMeasurement(point).updatedState();
88     theEs.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny",propagator);
89     Plane::PlanePointer surface = Plane::build(det->position(), det->rotation());
90     TrajectoryStateOnSurface result;
91     if (muTSOS.isValid()) result = propagator->propagate(muTSOS, *surface);
92    
93     return result;
94     }
95    
96     TrajectoryStateOnSurface TrackAtSurface::atDetFromTrack( const RPCDetId& rpc) const
97     {
98    
99     edm::ESHandle<GlobalTrackingGeometry> globalGeometry;
100     theEs.get<GlobalTrackingGeometryRecord>().get(globalGeometry);
101     edm::ESHandle<Propagator> propagator;
102    
103     const GeomDet * det = globalGeometry->idToDet(rpc);
104     TrajectoryStateOnSurface muTSOS = theState;
105     theEs.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAlong",propagator);
106     Plane::PlanePointer surface = Plane::build(det->position(), det->rotation());
107     TrajectoryStateOnSurface result;
108     if (muTSOS.isValid()) result = propagator->propagate(muTSOS, *surface);
109    
110     return result;
111     }
112    
113     TrajectoryStateOnSurface TrackAtSurface::atStation2( float eta) const
114     {
115     ReferenceCountingPointer<Surface> rpc;
116     if (eta < -1.04) rpc = ReferenceCountingPointer<Surface>(new BoundDisk( GlobalPoint(0.,0.,-790.), TkRotation<float>(), SimpleDiskBounds( 300., 710., -10., 10. ) ) );
117     else if (eta < -0.72) rpc = ReferenceCountingPointer<Surface>(new BoundCylinder( GlobalPoint(0.,0.,0.), TkRotation<float>(), SimpleCylinderBounds( 520, 520, -700, 700 ) ) );
118     else if (eta < 0.72) rpc = ReferenceCountingPointer<Surface>(new BoundCylinder( GlobalPoint(0.,0.,0.), TkRotation<float>(), SimpleCylinderBounds( 500, 500, -700, 700 ) ) );
119     else if (eta < 1.04) rpc = ReferenceCountingPointer<Surface>(new BoundCylinder( GlobalPoint(0.,0.,0.), TkRotation<float>(), SimpleCylinderBounds( 520, 520, -700, 700 ) ) );
120     else rpc = ReferenceCountingPointer<Surface>(new BoundDisk( GlobalPoint(0.,0.,790.), TkRotation<float>(), SimpleDiskBounds( 300., 710., -10., 10. ) ) );
121     edm::ESHandle<Propagator> propagator;
122     theEs.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAlong", propagator);
123     TrajectoryStateOnSurface trackAtRPC = propagator->propagate( theState, *rpc);
124     return trackAtRPC;
125     }