27 m_borderCut(config.getUntrackedParameter<double>(
"borderCut")),
28 m_dxCut(config.getUntrackedParameter<double>(
"dx_cut")),
29 m_detailedAnalysis(config.getUntrackedParameter<bool>(
"detailedAnalysis")),
30 m_primaryVerticesToken(
31 consumes<std::
vector<
reco::Vertex>>(config.getUntrackedParameter<edm::
InputTag>(
"inputTagPrimaryVertices"))),
32 m_triggerResultsToken(
33 consumes<edm::TriggerResults>(config.getUntrackedParameter<edm::
InputTag>(
"trigResultsTag"))),
34 m_triggerEventToken(consumes<trigger::TriggerEvent>(config.getUntrackedParameter<edm::
InputTag>(
"trigEventTag"))),
35 m_trigName(config.getUntrackedParameter<std::
string>(
"trigName")),
36 m_probeSelector(config.getUntrackedParameter<std::
string>(
"probeCut")),
37 m_dxyCut(config.getUntrackedParameter<double>(
"probeDxyCut")),
38 m_dzCut(config.getUntrackedParameter<double>(
"probeDzCut")),
39 m_tagSelector(config.getUntrackedParameter<std::
string>(
"tagCut")),
40 m_lowPairMassCut(config.getUntrackedParameter<double>(
"lowPairMassCut")),
41 m_highPairMassCut(config.getUntrackedParameter<double>(
"highPairMassCut")) {
42 LogTrace(
"DQMOffline|MuonDPG|BaseTnPEfficiencyTask") <<
"[BaseTnPEfficiencyTask]: Constructor" << std::endl;
46 LogTrace(
"DQMOffline|MuonDPG|BaseTnPEfficiencyTask")
47 <<
"[BaseTnPEfficiencyTask]: analyzed " <<
m_nEvents <<
" events" << std::endl;
54 bool enableWildCard =
true;
57 TRegexp tNamePattern = TRegexp(tName, enableWildCard);
61 if (pathName.Contains(tNamePattern)) {
70 LogTrace(
"DQMOffline|MuonDPG|BaseTnPEfficiencyTask") <<
"[BaseTnPEfficiencyTask]: bookHistograms" << std::endl;
76 LogTrace(
"DQMOffline|MuonDPG|BaseTnPEfficiencyTask")
77 <<
"[BaseTnPEfficiencyTask]: booking histos in " << baseDir << std::endl;
79 m_histos[
"probePt"] = iBooker.
book1D(
"probePt",
"probePt;probe p_{T} [GeV];Events", 125, 0., 250.);
80 m_histos[
"probeEta"] = iBooker.
book1D(
"probeEta",
"probeEta;probe #eta;Events", 24, -2.4, 2.4);
83 "probeNumberOfMatchedStations",
"probeNumberOfMatchedStations;Number of matched stations;Events", 5, 0., 5);
84 m_histos[
"pairMass"] = iBooker.
book1D(
"pairMass",
"pairMass", 25, 70., 120.);
109 std::vector<unsigned> preSel_tag_indices;
110 std::vector<unsigned> tag_indices;
111 std::vector<unsigned> preSel_probe_indices;
112 std::vector<unsigned> probe_indices;
116 for (
auto [
muon, muonColl_index] = std::tuple{std::vector<reco::Muon>::const_iterator{(*muons).begin()}, 0};
117 muon != (*muons).end();
118 ++
muon, ++muonColl_index) {
119 bool trigMatch =
false;
130 preSel_probe_indices.push_back(muonColl_index);
134 preSel_tag_indices.push_back(muonColl_index);
141 for (
const auto i_tag : preSel_tag_indices) {
145 bool pair_found =
false;
147 for (
const auto i_probe : preSel_probe_indices) {
149 if (i_probe == i_tag)
152 reco::Muon preSel_probe = (*muons).at(i_probe);
154 int pair_charge_product = tag.
charge() * preSel_probe.
charge();
157 if (pair_charge_product > 0)
161 m_histos.find(
"pairMass")->second->Fill(pair_mass);
167 if (pair_pt > pt_max) {
170 max_pt_idx = i_probe;
174 probe_indices.push_back(max_pt_idx);
175 tag_indices.push_back(i_tag);
187 float dR2match = 999.;
188 for (
int trigIdx : trigIndices) {
190 const unsigned trigModuleIndex = trigModuleLabels.size() - 2;
191 const unsigned hltFilterIndex = trigEvent->filterIndex(
edm::InputTag(trigModuleLabels[trigModuleIndex],
"",
"HLT"));
192 if (hltFilterIndex < trigEvent->sizeFilters()) {
194 const trigger::Vids vids = trigEvent->filterIds(hltFilterIndex);
195 const unsigned nTriggers = vids.size();
197 for (
unsigned iTrig = 0; iTrig < nTriggers; ++iTrig) {
199 float dR2 =
deltaR2(muon, trigObj);
205 return dR2match < 0.01;
unsigned int size() const
number of trigger paths in trigger table
const std::string m_trigName
virtual std::string topFolder() const =0
Return the top folder.
~BaseTnPEfficiencyTask() override
Destructor.
const std::string & triggerName(unsigned int triggerIndex) const
bool hasTrigger(std::vector< int > &trigIndices, const trigger::TriggerObjectCollection &trigObjs, edm::Handle< trigger::TriggerEvent > &trigEvent, const reco::Muon &muon)
virtual void setCurrentFolder(std::string const &fullpath)
std::vector< std::vector< unsigned > > m_tagIndices
bool getByToken(EDGetToken token, Handle< PROD > &result) const
const edm::EDGetTokenT< edm::TriggerResults > m_triggerResultsToken
const edm::EDGetTokenT< reco::MuonCollection > m_muToken
const Point & position() const
position
const edm::EDGetTokenT< trigger::TriggerEvent > m_triggerEventToken
std::vector< Muon > MuonCollection
collection of Muon objects
const edm::EDGetTokenT< std::vector< reco::Vertex > > m_primaryVerticesToken
Single trigger physics object (e.g., an isolated muon)
std::vector< std::vector< unsigned > > m_probeIndices
const bool m_detailedAnalysis
const StringCutObjectSelector< reco::Candidate, true > m_probeSelector
std::vector< int > m_trigIndices
const PolarLorentzVector & polarP4() const final
four-momentum Lorentz vector
Abs< T >::type abs(const T &t)
std::map< std::string, MonitorElement * > m_histos
static std::string const triggerResults
void analyze(const edm::Event &event, const edm::EventSetup &context) override
Analyze.
const StringCutObjectSelector< reco::Muon, true > m_tagSelector
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
void bookHistograms(DQMStore::IBooker &iBooker, edm::Run const &run, edm::EventSetup const &context) override
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
std::vector< size_type > Keys
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d'tor
void dqmBeginRun(const edm::Run &run, const edm::EventSetup &context) override
BeginRun.
tuple config
parse the configuration file
HLTConfigProvider m_hltConfig
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
BaseTnPEfficiencyTask(const edm::ParameterSet &config)
Constructor.
int charge() const final
electric charge
const double m_highPairMassCut