ATLAS Offline Software
Loading...
Searching...
No Matches
EffiCollection.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4#ifndef EFFICOLLECTION_H_
5#define EFFICOLLECTION_H_
6
7// @class EffiCollection
10
11
14#include <xAODMuon/Muon.h>
15#include <map>
16#include <string>
17#include <iostream>
18
23
24namespace CP {
25 class SystematicSet;
27}
28
29namespace ADD_CMODE(CP) {
30 class MuonEfficiencyScaleFactors;
31 class EfficiencyScaleFactor;
32 class CollectionContainer;
37 class EffiCollection final : public columnar::ColumnarTool<> {
38 public:
39 explicit EffiCollection(MuonEfficiencyScaleFactors& ref_tool);
41 EffiCollection(const EffiCollection* Nominal, MuonEfficiencyScaleFactors& ref_tool, const std::string& syst, int syst_bit_map, bool is_up);
42
44 EfficiencyScaleFactor* retrieveSF(const xAOD::Muon & mu, unsigned int RunNumber) const;
45 EfficiencyScaleFactor* retrieveSF(columnar::MuonId mu, unsigned int RunNumber) const;
46 enum CollectionType {
48 Central = 1,
49 Calo = 1<<1,
50 Forward = 1<<2,
51 CentralLowPt = 1<<3,
52 CaloLowPt = 1<<4,
54 LRTCentral = 1<<10,
55 LRTCentralLowPt = 1<<11,
56
57 ZAnalysis = Central | Calo | Forward | LRTCentral,
60 JPsiAnalysis = CentralLowPt | CaloLowPt | LRTCentralLowPt,
61
62
63 };
64 enum Systematic{
65 Symmetric = 1<<6,
66 PtDependent = 1<<7,
67 UnCorrelated = 1<<8,
68 UpVariation = 1<<9,
69 };
70 static std::string FileTypeName(EffiCollection::CollectionType T);
71
72
75 bool CheckConsistency();
76
79 unsigned int nBins() const;
80
85 bool SetSystematicBin(unsigned int Bin);
86
88 bool IsLowPtBin(unsigned int Bin) const;
90 bool IsForwardBin(unsigned int Bin) const;
91
94 std::string GetBinName(unsigned int bin) const;
95
98 int getUnCorrelatedSystBin(const xAOD::Muon& mu) const;
99
100
102 CP::SystematicSet* getSystSet() const;
104 bool isAffectedBySystematic(const CP::SystematicVariation& variation) const;
105 bool isAffectedBySystematic(const CP::SystematicSet& set) const;
106
107
111 std::shared_ptr<CollectionContainer> retrieveContainer(CollectionType Type) const;
112
113 private:
114 CollectionContainer* FindContainer(unsigned int bin) const;
115 CollectionContainer* FindContainer(columnar::MuonId mu) const;
116 CollectionContainer* FindLRTContainer(columnar::MuonId mu) const;
117
118 const MuonEfficiencyScaleFactors& m_ref_tool;
119
123 std::shared_ptr<CollectionContainer> m_central_eff;
124 std::shared_ptr<CollectionContainer> m_calo_eff;
125 std::shared_ptr<CollectionContainer> m_forward_eff;
126 std::shared_ptr<CollectionContainer> m_lowpt_central_eff;
127 std::shared_ptr<CollectionContainer> m_lowpt_calo_eff;
128 std::shared_ptr<CollectionContainer> m_lrt_central_eff;
129 std::shared_ptr<CollectionContainer> m_lrt_lowpt_central_eff;
130
133 std::unique_ptr<CP::SystematicSet> m_syst_set;
134
135 public:
136
137 columnar::MuonAccessor<columnar::ObjectColumn> m_muons {*this, "Muons"};
141 columnar::MuonAccessor<char> isLRTmuon {*this, "isLRT", {.isOptional = true}};
142 };
143
146 class CollectionContainer final {
147 public:
149 CollectionContainer(const MuonEfficiencyScaleFactors& ref_tool, EffiCollection::CollectionType FileType);
150 CollectionContainer(const MuonEfficiencyScaleFactors& ref_tool, CollectionContainer* Nominal, const std::string& syst_name, unsigned int syst_bit_map);
151
153 EfficiencyScaleFactor* retrieve(unsigned int RunNumer);
154
156 bool isBinInMap (unsigned int bin) const;
158 bool CheckConsistency();
159
161 std::string sysname() const;
162
164 bool SetSystematicBin(unsigned int Bin);
165
168 void SetGlobalOffSet(unsigned int OffSet);
169
171 unsigned int nBins() const;
173 unsigned int nOverFlowBins() const;
175 bool isOverFlowBin(int b) const;
176
177
179 unsigned int globalOffSet() const;
180
182 std::string GetBinName(unsigned int Bin) const;
183
186 int FindBinSF(const xAOD::Muon &mu) const;
187
189 EffiCollection::CollectionType type() const;
190
191 bool isNominal() const;
192 bool isUpVariation() const;
193 bool separateBinSyst() const;
194
195 private:
196 std::map<std::string, std::pair<unsigned int, unsigned int>> findPeriods(const MuonEfficiencyScaleFactors& ref_tool) const;
197 std::string fileName(const MuonEfficiencyScaleFactors& ref_tool) const;
198
199 bool LoadPeriod(unsigned int RunNumber);
200
201 std::vector<std::shared_ptr<EfficiencyScaleFactor>> m_SF;
202 EfficiencyScaleFactor* m_currentSF;
203 std::unordered_set<unsigned int> m_warnedForRunNumber;
204
205 EffiCollection::CollectionType m_FileType;
208 unsigned int m_binOffSet;
209
210 public:
211 void addSubtoolsTo (columnar::ColumnarTool<>& parentTool);
212
213 };
214
215}
216#endif /* EFFICOLLECTION_H_ */
RootType Type
Class to wrap a set of SystematicVariations.
Select isolated Photons, Electrons and Muons.
ObjectId< MuonDef > MuonId
Definition MuonDef.h:22
AccessorTemplate< MuonDef, CT, ColumnAccessMode::input, CM > MuonAccessor
Definition MuonDef.h:24
Muon_v1 Muon
Reference the current persistent version:
Definition Muon.h:13