13 |
|
#include "DataFormats/TrackReco/interface/Track.h" |
14 |
|
|
15 |
|
#include "UserCode/L1RpcTriggerAnalysis/interface/Utilities.h" |
16 |
+ |
#include "DataFormats/Math/interface/deltaR.h" |
17 |
+ |
#include "DataFormats/Math/interface/deltaPhi.h" |
18 |
|
#include "TObjArray.h" |
19 |
|
#include "TH1D.h" |
20 |
|
#include "TH2D.h" |
22 |
|
//TH2D* hMuHitsCSCvsEta; |
23 |
|
|
24 |
|
BestMuonFinder::BestMuonFinder(const edm::ParameterSet& cfg) |
25 |
< |
: lastEvent(0), lastRun(0), theConfig(cfg), theUnique(true), theMuon(0), |
25 |
> |
: lastEvent(0), lastRun(0), theConfig(cfg), theUnique(true), theAllMuons(0), theMuon(0), |
26 |
|
hMuChi2Tk(0), hMuChi2Gl(0), hMuNHitsTk(0), |
27 |
< |
hMuPtVsEta(0), hMuHitsRPCvsCSC(0), hMuHitsRPCvsDT(0) |
27 |
> |
hMuPtVsEta(0), hMuHitsRPCvsCSC(0), hMuHitsRPCvsDT(0), |
28 |
> |
hMuonPt_BMF(0),hMuonEta_BMF (0),hMuonPhi_BMF(0) |
29 |
|
{} |
30 |
|
|
31 |
|
bool BestMuonFinder::run(const edm::Event &ev, const edm::EventSetup &es) |
47 |
|
//get Muon |
48 |
|
edm::Handle<reco::MuonCollection> muons; |
49 |
|
ev.getByLabel( theConfig.getParameter<std::string>("muonColl"), muons); |
50 |
+ |
theAllMuons = muons->size(); |
51 |
|
|
52 |
|
for (reco::MuonCollection::const_iterator im = muons->begin(); im != muons->end(); ++im) { |
53 |
|
|
54 |
< |
// |
55 |
< |
// FIXME - UNCOMMENT SELECTED LINES |
56 |
< |
// |
57 |
< |
|
54 |
> |
/* |
55 |
> |
if (ev.id().event() == 352597514) { |
56 |
> |
std::cout << "HERE Muon: matched stations:"<<im->numberOfMatchedStations() <<std::endl; |
57 |
> |
if (im->isGlobalMuon()) { |
58 |
> |
std::cout <<" GlobalMuon: " |
59 |
> |
<<" pt="<<im->combinedMuon()->pt() |
60 |
> |
<<" eta="<<im->combinedMuon()->eta() |
61 |
> |
<<" phi="<<im->combinedMuon()->phi() |
62 |
> |
<<" chi2: "<<im->combinedMuon()->normalizedChi2()<<std::endl; |
63 |
> |
} |
64 |
> |
if (im->isTrackerMuon() && im->innerTrack().isNonnull()) { |
65 |
> |
std::cout <<" TrackerMuon: " |
66 |
> |
<<" pt="<<im->innerTrack()->pt() |
67 |
> |
<<" eta="<<im->innerTrack()->eta() |
68 |
> |
<<" phi="<<im->innerTrack()->phi() |
69 |
> |
<< std::endl; |
70 |
> |
} |
71 |
> |
if (im->isStandAloneMuon()) std::cout <<" StandaloneMuon"<<std::endl; |
72 |
> |
} |
73 |
> |
*/ |
74 |
|
|
75 |
|
if (!im->isTrackerMuon() || !im->innerTrack().isNonnull()) continue; |
76 |
+ |
if (hMuonPt_BMF) hMuonPt_BMF->Fill( im->innerTrack()->pt()); |
77 |
+ |
if (hMuonEta_BMF) hMuonEta_BMF->Fill( im->innerTrack()->eta()); |
78 |
+ |
if (hMuonPhi_BMF) hMuonPhi_BMF->Fill( im->innerTrack()->phi()); |
79 |
|
if (hMuPtVsEta) hMuPtVsEta->Fill(im->innerTrack()->eta(), im->innerTrack()->pt()); |
80 |
|
if (im->innerTrack()->pt() < theConfig.getParameter<double>("minPt")) continue; |
81 |
|
if (fabs(im->innerTrack()->eta()) > theConfig.getParameter<double>("maxEta")) continue; |
82 |
+ |
if (im->innerTrack()->dxy(reference) > theConfig.getParameter<double>("maxTIP")) continue; |
83 |
|
if (hMuChi2Tk) hMuChi2Tk->Fill(im->innerTrack()->normalizedChi2()); |
84 |
|
if (im->innerTrack()->normalizedChi2() > theConfig.getParameter<double>("maxChi2Tk")) continue; |
85 |
|
if (hMuChi2Gl && im->isGlobalMuon()) hMuChi2Gl->Fill(im->combinedMuon()->normalizedChi2()); |
62 |
– |
/* |
63 |
– |
if (im->innerTrack()->dxy(reference) > theConfig.getParameter<double>("maxTIP")) continue; |
86 |
|
if ( theConfig.getParameter<bool>("requireOuterTrack")){ |
87 |
< |
if(!im->isStandAloneMuon() || !im->outerTrack().isNonnull())continue; |
87 |
> |
if(!im->isStandAloneMuon() || !im->outerTrack().isNonnull())continue; |
88 |
|
if(im->standAloneMuon()->normalizedChi2() > theConfig.getParameter<double>("maxChi2Sa")) continue; |
89 |
|
} |
90 |
|
if ( theConfig.getParameter<bool>("requireGlobalTrack")) { |
91 |
|
if(!im->isGlobalMuon() || !im->globalTrack().isNonnull()) continue; |
92 |
|
if(im->combinedMuon()->normalizedChi2() > theConfig.getParameter<double>("maxChi2Mu")) continue; |
93 |
|
} |
94 |
< |
*/ |
94 |
> |
|
95 |
> |
if (im->numberOfMatchedStations() < theConfig.getParameter<int>("minNumberOfMatchedStations")) continue; |
96 |
> |
if (! (im->track()->hitPattern().numberOfValidPixelHits() > 0)) continue; |
97 |
> |
|
98 |
|
// |
99 |
|
// TMP TIGHT SELECTION FOR IVAN |
100 |
< |
if (! im->isGlobalMuon()) continue; |
101 |
< |
if (! (im->globalTrack()->normalizedChi2() < 10)) continue; |
102 |
< |
if (! (im->globalTrack()->hitPattern().numberOfValidMuonHits() > 0)) continue; |
103 |
< |
if (! (im->numberOfMatchedStations() > 1)) continue; |
104 |
< |
if (! (fabs(im->innerTrack()->dxy(reference)) < 0.2)) continue; |
105 |
< |
if (! (im->track()->hitPattern().numberOfValidPixelHits() > 0)) continue; |
106 |
< |
if (! (im->track()->hitPattern().numberOfValidTrackerHits() > 10)) continue; |
100 |
> |
// if (! im->isGlobalMuon()) continue; |
101 |
> |
// if (! (im->globalTrack()->normalizedChi2() < 10)) continue; |
102 |
> |
// if (! (im->globalTrack()->hitPattern().numberOfValidMuonHits() > 0)) continue; |
103 |
> |
// if (! (im->numberOfMatchedStations() > 1)) continue; |
104 |
> |
// if (! (fabs(im->innerTrack()->dxy(reference)) < 0.2)) continue; |
105 |
> |
// if (! (im->track()->hitPattern().numberOfValidPixelHits() > 0)) continue; |
106 |
> |
// if (! (im->track()->hitPattern().numberOfValidTrackerHits() > 10)) continue; |
107 |
|
// TMP END OF TIGHT MUON SELECTION FROM IVAN |
108 |
|
|
109 |
|
//remove muons without valid hits in tk and mu system |
125 |
|
if (nCSCHits==0 && hMuHitsRPCvsDT) hMuHitsRPCvsDT->Fill(nDTHits,nRPCHits); |
126 |
|
} |
127 |
|
|
103 |
– |
/* |
128 |
|
if (nTrackerHits< theConfig.getParameter<int>("minNumberTrackerHits")) continue; |
129 |
|
if ( nRPCHits < theConfig.getParameter<int>("minNumberRpcHits")) continue; |
130 |
|
if ( nDTHits + nCSCHits < theConfig.getParameter<int>("minNumberDtCscHits") ) continue; |
107 |
– |
*/ |
131 |
|
|
109 |
– |
if (theMuon) theUnique = false; |
132 |
|
if (!theMuon || (im->track()->pt() > theMuon->track()->pt()) ) theMuon = &(*im); |
133 |
|
} |
134 |
+ |
|
135 |
+ |
// |
136 |
+ |
// check if muon is unigue |
137 |
+ |
// |
138 |
+ |
if (theMuon) { |
139 |
+ |
double muonEta = theMuon->innerTrack()->eta(); |
140 |
+ |
double muonPhi = theMuon->innerTrack()->phi(); |
141 |
+ |
for (reco::MuonCollection::const_iterator im = muons->begin(); im != muons->end(); ++im) { |
142 |
+ |
if (!im->isTrackerMuon() || !im->innerTrack().isNonnull()) continue; |
143 |
+ |
if (&(*im) == theMuon) continue; |
144 |
+ |
if ( fabs(reco::deltaPhi(muonPhi, im->innerTrack()->phi())) > theConfig.getParameter<double>("deltaPhiUnique")) continue; |
145 |
+ |
if ( fabs(muonEta-im->innerTrack()->eta()) > theConfig.getParameter<double>("deltaEtaUnique")) continue; |
146 |
+ |
theUnique = false; |
147 |
+ |
} |
148 |
+ |
} |
149 |
|
return true; |
150 |
|
} |
151 |
|
|
158 |
|
hMuHitsRPCvsCSC = new TH2D("hMuHitsRPCvsCSC","hMuHitsRPCvsCSC", 40,0.,40., 6,0.,6.); histos.Add(hMuHitsRPCvsCSC); |
159 |
|
hMuHitsRPCvsDT = new TH2D("hMuHitsRPCvsDT","hMuHitsRPCvsDT", 30,0.,60., 6,0.,6.); histos.Add(hMuHitsRPCvsDT); |
160 |
|
// hMuHitsCSCvsEta = new TH2D("hMuHitsCSCvsEta","hMuHitsCSCvsEta",17, 0.8,2.5, 40,0.,40); histos.Add(hMuHitsCSCvsEta); |
161 |
+ |
hMuonPt_BMF = new TH1D("hMuonPt_BMF","All global muons Pt;Glb.muon p_{T} [GeV];Muons / bin",L1PtScale::nPtBins,L1PtScale::ptBins); histos.Add(hMuonPt_BMF); |
162 |
+ |
hMuonEta_BMF = new TH1D("hMuonEta_BMF","All global muons Eta;Glb.muon #eta;Muons / bin",84, -2.1, 2.1); histos.Add(hMuonEta_BMF); |
163 |
+ |
hMuonPhi_BMF = new TH1D("hMuonPhi_BMF","All global muons Phi;Glb.muon #phi [rad];Muons / bin",90,-M_PI,M_PI); histos.Add(hMuonPhi_BMF); |
164 |
+ |
|
165 |
|
} |