ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/L1RpcTriggerAnalysis/src/SynchroSelectorMuon.cc
Revision: 1.4
Committed: Tue Oct 30 11:13:16 2012 UTC (12 years, 6 months ago) by konec
Content type: text/plain
Branch: MAIN
CVS Tags: Artur_11_07_2013_B, Artur_11_07_2013_A, Artur_11_07_2013, Artur_28_06_2013, HEAD
Changes since 1.3: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 konec 1.1 #include "UserCode/L1RpcTriggerAnalysis/interface/SynchroSelectorMuon.h"
2    
3    
4     #include "FWCore/Framework/interface/Event.h"
5     #include "FWCore/Framework/interface/EventSetup.h"
6     #include "FWCore/Framework/interface/ESHandle.h"
7     #include "FWCore/Utilities/interface/InputTag.h"
8    
9     #include "DataFormats/MuonReco/interface/Muon.h"
10     #include "DataFormats/MuonReco/interface/MuonFwd.h"
11     #include "DataFormats/TrackReco/interface/TrackFwd.h"
12     #include "DataFormats/TrackReco/interface/Track.h"
13    
14     #include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h"
15     #include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h"
16    
17     #include "Geometry/CommonDetUnit/interface/GeomDet.h"
18     #include "MagneticField/Engine/interface/MagneticField.h"
19     #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
20     #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
21    
22     #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
23     #include "TrackingTools/TrajectoryState/interface/TrajectoryStateTransform.h"
24    
25     #include "DataFormats/MuonDetId/interface/RPCDetId.h"
26     #include "DataFormats/BeamSpot/interface/BeamSpot.h"
27    
28     #include "TObjArray.h"
29     #include "TH1F.h"
30     #include <cmath>
31     using namespace edm;
32     using namespace std;
33    
34 konec 1.3 SynchroSelectorMuon::SynchroSelectorMuon(const edm::ParameterSet& cfg) : SynchroSelector(cfg)
35     { }
36    
37 konec 1.1 SynchroSelectorMuon::SynchroSelectorMuon(const edm::ParameterSet& cfg, TObjArray& histos)
38     : SynchroSelector(cfg)
39 konec 1.3 { initHistos(histos); }
40    
41     void SynchroSelectorMuon::initHistos(TObjArray& histos)
42 konec 1.1 {
43     hDxy = new TH1F("hDxy_SSMuon","hDxy_SSMuon",100.,0.,1.); histos.Add(hDxy);
44     SynchroSelector::hPullX = new TH1F("hPullX_Muon","hPullX_Muon",100,-10.,10.); histos.Add(hPullX);
45     SynchroSelector::hDistX = new TH1F("hDistX_Muon","hDistX_Muon",100,-100.,100.); histos.Add(hDistX);
46     }
47    
48     bool SynchroSelectorMuon::takeIt(const RPCDetId & det, const edm::Event&ev, const edm::EventSetup& es)
49     {
50    
51     math::XYZPoint reference(0.,0.,0.);
52     if (theConfig.exists("beamSpot")) {
53     edm::InputTag beamSpot = theConfig.getParameter<edm::InputTag>("beamSpot");
54     edm::Handle<reco::BeamSpot> bsHandle;
55     ev.getByLabel( beamSpot, bsHandle);
56     if (bsHandle.isValid()) reference = math::XYZPoint(bsHandle->x0(), bsHandle->y0(), bsHandle->z0());
57     }
58    
59     edm::Handle<reco::MuonCollection> muons;
60     ev.getByLabel( theConfig.getParameter<std::string>("muonColl"), muons);
61     const reco::Muon * theMuon = 0;
62     for (reco::MuonCollection::const_iterator im = muons->begin(); im != muons->end(); ++im) {
63     if (!im->isTrackerMuon()) continue;
64     if (!im->isStandAloneMuon()) continue;
65     if (!im->isGlobalMuon()) continue;
66     if (im->track()->pt() < theConfig.getParameter<double>("minPt")) continue;
67     if (fabs(im->track()->eta()) > theConfig.getParameter<double>("maxEta")) continue;
68     if (im->track()->dxy(reference) > theConfig.getParameter<double>("maxTIP")) continue;
69     if (!theMuon || (im->track()->pt() > theMuon->track()->pt()) ) theMuon = &(*im);
70     }
71    
72 konec 1.3 if (!theMuon) return false;
73 konec 1.1
74     edm::ESHandle<GlobalTrackingGeometry> globalGeometry;
75     es.get<GlobalTrackingGeometryRecord>().get(globalGeometry);
76     edm::ESHandle<MagneticField> magField;
77     es.get<IdealMagneticFieldRecord>().get(magField);
78    
79     if (hDxy) hDxy->Fill(fabs(theMuon->innerTrack()->dxy(reference)));
80 konec 1.2 TrajectoryStateOnSurface aTSOS = trajectoryStateTransform::innerStateOnSurface( *(theMuon->outerTrack()), *globalGeometry, magField.product());
81 konec 1.3 return checkTraj(aTSOS, det,ev,es);
82     }
83 konec 1.1
84 konec 1.3 bool SynchroSelectorMuon::checkTraj(TrajectoryStateOnSurface & aTSOS, const RPCDetId & det, const edm::Event&ev, const edm::EventSetup& es)
85     {
86     if (!checkRpcDetMatching(aTSOS,det,ev,es)) return false;
87 konec 1.4 if (!checkUniqueRecHitMatching(aTSOS,det,ev,es)) return false;
88 konec 1.3 return true;
89     }
90 konec 1.1
91    
92