ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/L1RpcTriggerAnalysis/src/SynchroSelector.cc
Revision: 1.4
Committed: Thu Jun 17 00:47:04 2010 UTC (14 years, 10 months ago) by konec
Content type: text/plain
Branch: MAIN
CVS Tags: Mikolaj_cmssw533, Mikolaj_cmssw52x, Kasia_30_04_2012, Mikolaj_08_10_2011, Mikolaj_05_10_2011, Mikolaj_14_09_2011, Artur_27_07_2011, Artur_25_07_2011, V00-02-01, V00-02-00, V00-01-00
Changes since 1.3: +8 -122 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 konec 1.1 #include "UserCode/L1RpcTriggerAnalysis/interface/SynchroSelector.h"
2 konec 1.4
3 konec 1.1 #include "FWCore/Framework/interface/Event.h"
4     #include "FWCore/Framework/interface/EventSetup.h"
5     #include "FWCore/Framework/interface/ESHandle.h"
6     #include "FWCore/Utilities/interface/InputTag.h"
7    
8     #include "DataFormats/TrackReco/interface/TrackFwd.h"
9     #include "DataFormats/TrackReco/interface/Track.h"
10    
11    
12     #include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h"
13     #include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h"
14    
15     #include "Geometry/CommonDetUnit/interface/GeomDet.h"
16     #include "MagneticField/Engine/interface/MagneticField.h"
17     #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
18     #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
19     #include "TrackingTools/GeomPropagators/interface/Propagator.h"
20    
21     #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
22    
23     #include "DataFormats/MuonDetId/interface/RPCDetId.h"
24 konec 1.2 #include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h"
25    
26 konec 1.1 #include "TH1.h"
27     #include <cmath>
28     using namespace edm;
29     using namespace std;
30    
31     SynchroSelector::SynchroSelector(const edm::ParameterSet & cfg)
32 konec 1.4 : theConfig(cfg), hPullX(0),hDistX(0)
33 konec 1.1 { }
34    
35 konec 1.2 bool SynchroSelector::checkRpcDetMatching( const TrajectoryStateOnSurface & tsos, const RPCDetId & det, const edm::Event&ev, const edm::EventSetup& es)
36     {
37     edm::ESHandle<Propagator> propagator;
38 konec 1.3 es.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAlong", propagator);
39 konec 1.1
40 konec 1.2 edm::ESHandle<GlobalTrackingGeometry> globalGeometry;
41     es.get<GlobalTrackingGeometryRecord>().get(globalGeometry);
42 konec 1.1
43 konec 1.2 GlobalPoint detPos, trackPos;
44 konec 1.4 // std::cout <<"BEFORE PROPAGATION POSITION:"<< tsos.globalPosition().perp()<<" GLOBAL MOMENTUM:"<<tsos.globalMomentum().mag()<< std::endl;
45 konec 1.2 TrajectoryStateOnSurface trackAtRPC = propagator->propagate(tsos, globalGeometry->idToDet(det)->surface());
46     if (!trackAtRPC.isValid()) return false;
47 konec 1.4 // std::cout <<"AFTER PROPAGATION POSITION:"<< trackAtRPC.globalPosition().perp()<<" GLOBAL MOMENTUM:"<<trackAtRPC.globalMomentum().mag()<< std::endl;
48 konec 1.2 detPos = globalGeometry->idToDet(det)->position();
49     trackPos = trackAtRPC.globalPosition();
50    
51     /*
52     std::cout <<" **** "<<theConfig.getParameter<std::string>("collection")<<" position at RPC det:"<<det.rawId()
53     //<< is :"<globalGeometry->idToDet(det)->position()
54     <<", r= "<<trackAtRPC.globalPosition().perp()
55     <<", z= "<<trackAtRPC.globalPosition().z()
56     <<", phi= "<<trackAtRPC.globalPosition().phi()
57     <<", eta= "<<trackAtRPC.globalPosition().eta()
58     //<<" localPosition: "<<trackAtRPC.localPosition()
59     //<<" localError: (xx:"<<trackAtRPC.localError().positionError()
60     <<" isInside: "<< globalGeometry->idToDet(det)->surface().bounds().inside( trackAtRPC.localPosition())
61     << std::endl;
62     */
63     float scale = 0.;
64     if ( trackAtRPC.localError().positionError().xx() > 2500 || trackAtRPC.localError().positionError().yy() > 2500) return false;
65     else if (trackAtRPC.localError().positionError().xx() > 1000 || trackAtRPC.localError().positionError().yy() > 1000) scale = 0;
66     else if (trackAtRPC.localError().positionError().xx() > 500 || trackAtRPC.localError().positionError().yy() > 500) scale = 1;
67     else if (trackAtRPC.localError().positionError().xx() > 100 || trackAtRPC.localError().positionError().yy() > 100) scale = 2;
68     else scale = 3.;
69    
70     bool inside = globalGeometry->idToDet(det)->surface().bounds().inside( trackAtRPC.localPosition(), trackAtRPC.localError().positionError(), scale);
71 konec 1.4 //std::cout<<"In:"<<inside <<" detector r:" << detPos.perp()<<" phi:"<<detPos.phi()<<" z:"<<detPos.z()
72     // <<" track r:"<< trackPos.perp()<<" phi:"<<trackPos.phi()<<" z:"<<trackPos.z() <<"Error: "<<trackAtRPC.localError().positionError()<< std::endl;
73 konec 1.1 return inside;
74 konec 1.2 }
75    
76     bool SynchroSelector::checkUniqueRecHitMatching( const TrajectoryStateOnSurface & tsos, const RPCDetId & det, const edm::Event&ev, const edm::EventSetup& es)
77     {
78     //propagate to det
79     edm::ESHandle<Propagator> propagator;
80 konec 1.4 es.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny", propagator);
81 konec 1.2 edm::ESHandle<GlobalTrackingGeometry> globalGeometry;
82     es.get<GlobalTrackingGeometryRecord>().get(globalGeometry);
83     TrajectoryStateOnSurface trackAtRPC = propagator->propagate(tsos, globalGeometry->idToDet(det)->surface());
84     if (!trackAtRPC.isValid()) return false;
85    
86     LocalPoint trackAtRPCPoint = trackAtRPC.localPosition() ;
87     LocalError trackAtRPCError = trackAtRPC.localError().positionError();
88    
89     edm::Handle<RPCRecHitCollection> rpcHits;
90     ev.getByType(rpcHits);
91     bool matched = false;
92     bool unique = true;
93     pair<RPCRecHitCollection::const_iterator, RPCRecHitCollection::const_iterator> recHitsInDet = rpcHits->get(det);
94     for (RPCRecHitCollection::const_iterator ih = recHitsInDet.first; ih != recHitsInDet.second; ++ih) {
95     LocalPoint hitPoint = ih->localPosition();
96     LocalError hitError = ih->localPositionError();
97     float distX = hitPoint.x()-trackAtRPCPoint.x();
98     float pullX = distX/ sqrt( trackAtRPCError.xx()+hitError.xx());
99    
100 konec 1.4 if (fabs(pullX) < 2. && fabs(distX) < 5.) {
101 konec 1.2 matched = true;
102     } else {
103     unique = false;
104     }
105     if (hPullX) hPullX->Fill(pullX);
106     if (hDistX) hDistX->Fill(distX);
107     }
108    
109     return (matched && unique);
110     }