Main Page
Namespaces
Classes
Package Documentation
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
Alignment
CommonAlignmentProducer
src
AlignmentGlobalTrackSelector.cc
Go to the documentation of this file.
1
//Framework
2
#include "
FWCore/MessageLogger/interface/MessageLogger.h
"
3
#include "
FWCore/Framework/interface/Event.h
"
4
#include "
FWCore/Utilities/interface/EDMException.h
"
5
6
//DataFormats
7
#include <
DataFormats/Candidate/interface/Particle.h
>
8
#include <
DataFormats/Candidate/interface/Candidate.h
>
9
#include <
DataFormats/TrackReco/interface/Track.h
>
10
#include <
DataFormats/JetReco/interface/CaloJet.h
>
11
#include <
DataFormats/MuonReco/interface/MuonFwd.h
>
12
#include <
DataFormats/MuonReco/interface/Muon.h
>
13
14
#include <
DataFormats/RecoCandidate/interface/RecoCandidate.h
>
//for the get<TrackRef>() Call
15
16
#include <
DataFormats/Math/interface/deltaR.h
>
17
18
//STL
19
#include <
math.h
>
20
21
#include "
Alignment/CommonAlignmentProducer/interface/AlignmentGlobalTrackSelector.h
"
22
23
24
using namespace
std;
25
using namespace
edm;
26
27
// constructor ----------------------------------------------------------------
28
AlignmentGlobalTrackSelector::AlignmentGlobalTrackSelector
(
const
edm::ParameterSet
& cfg) :
29
theGMFilterSwitch(cfg.getParameter<bool>(
"applyGlobalMuonFilter"
)),
30
theIsoFilterSwitch(cfg.getParameter<bool>(
"applyIsolationtest"
)),
31
theJetCountFilterSwitch(cfg.getParameter<bool>(
"applyJetCountFilter"
)),
32
theMuonSource(
"muons"
),
33
theJetIsoSource(
"fastjet6CaloJets"
),
34
theJetCountSource(
"fastjet6CaloJets"
)
35
{
36
if
(
theGMFilterSwitch
||
theIsoFilterSwitch
||
theJetCountFilterSwitch
)
37
LogDebug
(
"Alignment"
) <<
"> applying global Trackfilter ..."
;
38
39
if
(
theGMFilterSwitch
) {
40
theMuonSource
= cfg.
getParameter
<
InputTag
>(
"muonSource"
);
41
theMaxTrackDeltaR
=cfg.
getParameter
<
double
>(
"maxTrackDeltaR"
);
42
theMinGlobalMuonCount
= cfg.
getParameter
<
int
>(
"minGlobalMuonCount"
);
43
LogDebug
(
"Alignment"
) <<
"> GlobalMuonFilter : source, maxTrackDeltaR, min. Count : "
44
<<
theMuonSource
<<
" , "
45
<< theMaxTrackDeltaR <<
" , "
46
<<
theMinIsolatedCount
;
47
}
48
49
if
(
theIsoFilterSwitch
) {
50
theJetIsoSource
= cfg.
getParameter
<
InputTag
>(
"jetIsoSource"
);
51
theMaxJetPt
= cfg.
getParameter
<
double
>(
"maxJetPt"
);
52
theMinJetDeltaR
= cfg.
getParameter
<
double
>(
"minJetDeltaR"
);
53
theMinIsolatedCount
= cfg.
getParameter
<
int
>(
"minIsolatedCount"
);
54
LogDebug
(
"Alignment"
) <<
"> Isolationtest : source, maxJetPt, minJetDeltaR, min. Count: "
55
<<
theJetIsoSource
<<
" , "
56
<< theMaxJetPt <<
" ,"
57
<< theMinJetDeltaR <<
" ,"
58
<<
theMinGlobalMuonCount
;
59
}
60
61
if
(
theJetCountFilterSwitch
) {
62
theJetCountSource
= cfg.
getParameter
<
InputTag
>(
"jetCountSource"
);
63
theMinJetPt
= cfg.
getParameter
<
double
>(
"minJetPt"
);
64
theMaxJetCount
= cfg.
getParameter
<
int
>(
"maxJetCount"
);
65
LogDebug
(
"Alignment"
) <<
"> JetCountFilter : source, minJetPt, maxJetCount : "
66
<<
theJetCountSource
<<
" , "
67
<< theMinJetPt <<
" ,"
68
<<
theMaxJetCount
;
69
}
70
}
71
72
// destructor -----------------------------------------------------------------
73
AlignmentGlobalTrackSelector::~AlignmentGlobalTrackSelector
()
74
{}
75
77
bool
AlignmentGlobalTrackSelector::useThisFilter
()
78
{
79
return
theGMFilterSwitch
||
theIsoFilterSwitch
||
theJetCountFilterSwitch
;
80
}
81
82
// do selection ---------------------------------------------------------------
83
AlignmentGlobalTrackSelector::Tracks
84
AlignmentGlobalTrackSelector::select
(
const
Tracks
&
tracks
,
const
edm::Event
&
iEvent
)
85
{
86
Tracks
result
=
tracks
;
87
88
if
(
theGMFilterSwitch
) result =
findMuons
(result, iEvent);
89
if
(
theIsoFilterSwitch
) result =
checkIsolation
(result, iEvent);
90
if
(
theJetCountFilterSwitch
) result =
checkJetCount
(result, iEvent);
91
LogDebug
(
"Alignment"
) <<
"> Global: tracks all, kept: "
<< tracks.size() <<
", "
<< result.size();
92
// LogDebug("Alignment")<<"> o kept:";
93
// printTracks(result);
94
95
return
result
;
96
}
97
99
AlignmentGlobalTrackSelector::Tracks
100
AlignmentGlobalTrackSelector::findMuons
(
const
Tracks
&
tracks
,
const
edm::Event
&
iEvent
)
const
101
{
102
Tracks
result
;
103
Tracks
globalMuons
;
104
105
//fill globalMuons with muons
106
Handle<reco::MuonCollection>
muons
;
107
iEvent.
getByLabel
(
theMuonSource
, muons);
108
109
if
(muons.
isValid
()) {
110
for
(reco::MuonCollection::const_iterator itMuon = muons->begin();
111
itMuon != muons->end();
112
++itMuon) {
113
const
reco::Track
* muonTrack = (*itMuon).get<
reco::TrackRef
>().
get
();
114
if
(!muonTrack) {
115
LogDebug
(
"Alignment"
) <<
"@SUB=AlignmentGlobalTrackSelector::findMuons"
116
<<
"Found muon without track: Standalone Muon!"
;
117
}
else
{
118
globalMuons.push_back(muonTrack);
119
}
120
}
121
}
else
{
122
LogError
(
"Alignment"
) <<
"@SUB=AlignmentGlobalTrackSelector::findMuons"
123
<<
"> could not optain mounCollection!"
;
124
}
125
126
result = this->
matchTracks
(tracks, globalMuons);
127
128
if
(static_cast<int>(result.size()) <
theMinGlobalMuonCount
) result.clear();
129
130
return
result
;
131
}
132
134
AlignmentGlobalTrackSelector::Tracks
135
AlignmentGlobalTrackSelector::checkIsolation
(
const
Tracks
& cands,
const
edm::Event
&
iEvent
)
const
136
{
137
Tracks
result
; result.clear();
138
139
Handle<reco::CaloJetCollection>
jets
;
140
iEvent.
getByLabel
(
theJetIsoSource
, jets);
141
142
if
(jets.
isValid
()) {
143
for
(Tracks::const_iterator it = cands.begin();
144
it!=cands.end();
145
++it) {
146
bool
isolated =
true
;
147
for
(reco::CaloJetCollection::const_iterator itJet = jets->begin();
148
itJet!=jets->end();
149
++itJet)
150
isolated &= !((*itJet).pt() >
theMaxJetPt
&&
deltaR
(*(*it),(*itJet)) <
theMinJetDeltaR
);
151
152
if
(isolated)
153
result.push_back(*it);
154
}
155
// LogDebug("Alignment") << "D Found "<<result.size()<<" isolated of "<< cands.size()<<" Tracks!";
156
157
}
else
158
LogError
(
"Alignment"
)<<
"@SUB=AlignmentGlobalTrackSelector::checkIsolation"
159
<<
"> could not optain jetCollection!"
;
160
161
if
(static_cast<int>(result.size()) <
theMinIsolatedCount
) result.clear();
162
163
return
result
;
164
}
165
167
AlignmentGlobalTrackSelector::Tracks
168
AlignmentGlobalTrackSelector::checkJetCount
(
const
Tracks
&
tracks
,
const
edm::Event
&
iEvent
)
const
169
{
170
Tracks
result
; result.clear();
171
172
Handle<reco::CaloJetCollection>
jets
;
173
iEvent.
getByLabel
(
theJetCountSource
, jets);
174
175
if
(jets.
isValid
()) {
176
int
jetCount = 0;
177
for
(reco::CaloJetCollection::const_iterator itJet = jets->begin();
178
itJet!=jets->end();
179
++itJet) {
180
if
((*itJet).pt() >
theMinJetPt
)
181
jetCount++;
182
}
183
184
if
(jetCount <=
theMaxJetCount
)
185
result =
tracks
;
186
187
LogDebug
(
"Alignment"
) <<
"> found "
<< jetCount <<
" Jets"
;
188
}
else
189
LogError
(
"Alignment"
) <<
"@SUB=AlignmentGlobalTrackSelector::checkJetCount"
190
<<
"> could not optain jetCollection!"
;
191
192
return
result
;
193
}
194
195
//===================HELPERS===================
196
198
AlignmentGlobalTrackSelector::Tracks
199
AlignmentGlobalTrackSelector::matchTracks
(
const
Tracks
&
src
,
const
Tracks
& comp)
const
200
{
201
Tracks
result
;
202
for
(Tracks::const_iterator itComp = comp.begin();
203
itComp!=comp.end();
204
++itComp) {
205
int
match
= -1;
206
double
min
=
theMaxTrackDeltaR
;
207
for
(
unsigned
int
i
=0;
i
<src.size();
i
++) {
208
// LogDebug("Alignment") << "> Trackmatch dist: "<<deltaR(src.at(i),*itComp);
209
if
(min >
deltaR
(*(src.at(
i
)),*(*itComp))){
210
min =
deltaR
(*(src.at(
i
)),*(*itComp));
211
match =
static_cast<
int
>
(
i
);
212
}
213
}
214
if
(match > -1)
215
result.push_back(src.at(match));
216
}
217
return
result
;
218
}
219
221
void
AlignmentGlobalTrackSelector::printTracks
(
const
Tracks
& col)
const
222
{
223
int
count
= 0;
224
LogDebug
(
"Alignment"
) <<
">......................................"
;
225
for
(Tracks::const_iterator it = col.begin();
226
it < col.end();
227
++it,++
count
) {
228
LogDebug
(
"Alignment"
)
229
<<
"> Track No. "
<< count <<
": p = ("
230
<< (*it)->px() <<
","
231
<< (*it)->py() <<
","
232
<< (*it)->pz() <<
")\n"
233
<<
"> pT = "
234
<< (*it)->pt() <<
" eta = "
235
<< (*it)->eta() <<
" charge = "
236
<< (*it)->charge();
237
}
238
LogDebug
(
"Alignment"
) <<
">......................................"
;
239
}
LogDebug
#define LogDebug(id)
Definition:
MessageLogger.h:501
math.h
AlignmentGlobalTrackSelector::theGMFilterSwitch
bool theGMFilterSwitch
Definition:
AlignmentGlobalTrackSelector.h:45
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
i
int i
Definition:
DBlmapReader.cc:9
prof2calltree.count
list count
Definition:
prof2calltree.py:146
AlignmentGlobalTrackSelector::theMaxTrackDeltaR
double theMaxTrackDeltaR
Definition:
AlignmentGlobalTrackSelector.h:51
MessageLogger.h
AlignmentGlobalTrackSelector::theMinJetDeltaR
double theMinJetDeltaR
Definition:
AlignmentGlobalTrackSelector.h:57
AlignmentGlobalTrackSelector::theMaxJetPt
double theMaxJetPt
Definition:
AlignmentGlobalTrackSelector.h:56
AlignmentGlobalTrackSelector::theMaxJetCount
int theMaxJetCount
Definition:
AlignmentGlobalTrackSelector.h:63
AlignmentGlobalTrackSelector::theMinJetPt
double theMinJetPt
Definition:
AlignmentGlobalTrackSelector.h:62
AlignmentGlobalTrackSelector::theJetIsoSource
edm::InputTag theJetIsoSource
Definition:
AlignmentGlobalTrackSelector.h:55
Event.h
AlignmentGlobalTrackSelector.h
AlignmentGlobalTrackSelector::findMuons
Tracks findMuons(const Tracks &tracks, const edm::Event &iEvent) const
filter for Tracks that match the Track of a global Muon
Definition:
AlignmentGlobalTrackSelector.cc:100
min
#define min(a, b)
Definition:
mlp_lapack.h:161
AlignmentGlobalTrackSelector::Tracks
std::vector< const reco::Track * > Tracks
Definition:
AlignmentGlobalTrackSelector.h:19
edm::Handle< reco::MuonCollection >
MuonFwd.h
AlignmentGlobalTrackSelector::theMuonSource
edm::InputTag theMuonSource
Definition:
AlignmentGlobalTrackSelector.h:50
Candidate.h
edm::LogError
Definition:
MessageLogger.h:164
iEvent
int iEvent
Definition:
GenABIO.cc:243
deltaR.h
EDMException.h
AlignmentGlobalTrackSelector::theMinIsolatedCount
int theMinIsolatedCount
Definition:
AlignmentGlobalTrackSelector.h:58
fwrapper::jets
vector< PseudoJet > jets
Definition:
fastjetfortran_madfks.cc:43
AlignmentGlobalTrackSelector::checkJetCount
Tracks checkJetCount(const Tracks &cands, const edm::Event &iEvent) const
returns [tracks] if there are less than theMaxCount Jets with theMinJetPt and an empty set if not ...
Definition:
AlignmentGlobalTrackSelector.cc:168
query.result
tuple result
Definition:
query.py:137
AlignmentGlobalTrackSelector::theJetCountFilterSwitch
bool theJetCountFilterSwitch
Definition:
AlignmentGlobalTrackSelector.h:47
AlignmentGlobalTrackSelector::~AlignmentGlobalTrackSelector
~AlignmentGlobalTrackSelector()
destructor
Definition:
AlignmentGlobalTrackSelector.cc:73
AlignmentGlobalTrackSelector::printTracks
void printTracks(const Tracks &col) const
print Information on Track-Collection
Definition:
AlignmentGlobalTrackSelector.cc:221
alcazmumu_cfi.src
tuple src
Definition:
alcazmumu_cfi.py:30
AlignmentGlobalTrackSelector::theIsoFilterSwitch
bool theIsoFilterSwitch
Definition:
AlignmentGlobalTrackSelector.h:46
Muon.h
edm::HandleBase::isValid
bool isValid() const
Definition:
HandleBase.h:76
edm::Event::getByLabel
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition:
Event.h:356
deltaR
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition:
TreeUtility.cc:17
AlignmentGlobalTrackSelector::checkIsolation
Tracks checkIsolation(const Tracks &cands, const edm::Event &iEvent) const
returns only isolated tracks in [cands]
Definition:
AlignmentGlobalTrackSelector.cc:135
testEve_cfg.tracks
tuple tracks
Definition:
testEve_cfg.py:39
AlignmentGlobalTrackSelector::AlignmentGlobalTrackSelector
AlignmentGlobalTrackSelector(const edm::ParameterSet &cfg)
constructor
Definition:
AlignmentGlobalTrackSelector.cc:28
AlignmentGlobalTrackSelector::theMinGlobalMuonCount
int theMinGlobalMuonCount
Definition:
AlignmentGlobalTrackSelector.h:52
globalMuons_cfi.globalMuons
tuple globalMuons
Definition:
globalMuons_cfi.py:6
AlignmentGlobalTrackSelector::theJetCountSource
edm::InputTag theJetCountSource
Definition:
AlignmentGlobalTrackSelector.h:61
reco::Track
Definition:
Track.h:27
edm::InputTag
Definition:
InputTag.h:12
patZpeak.muons
tuple muons
Definition:
patZpeak.py:38
edm::ParameterSet
Definition:
ParameterSet.h:35
match
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition:
Utils.h:6
AlignmentGlobalTrackSelector::select
Tracks select(const Tracks &tracks, const edm::Event &iEvent)
select tracks
Definition:
AlignmentGlobalTrackSelector.cc:84
CaloJet.h
edm::Event
Definition:
Event.h:50
Track.h
Particle.h
edm::Ref< TrackCollection >
RecoCandidate.h
AlignmentGlobalTrackSelector::useThisFilter
bool useThisFilter()
returns if any of the Filters is used.
Definition:
AlignmentGlobalTrackSelector.cc:77
AlignmentGlobalTrackSelector::matchTracks
Tracks matchTracks(const Tracks &src, const Tracks &comp) const
matches [src] with [comp] returns collection with matching Tracks coming from [src] ...
Definition:
AlignmentGlobalTrackSelector.cc:199
Generated for CMSSW Reference Manual by
1.8.5