ATLAS Offline Software
Loading...
Searching...
No Matches
MuonTriggerSFTester Class Reference
Collaboration diagram for MuonTriggerSFTester:

Public Member Functions

 MuonTriggerSFTester (const char *appName, const std::string &trigger)
int initialiseTools (const std::string &customFileName, const std::string &customInputFolder, int year, const std::string &period)
int processEvent (xAOD::TEvent &event, int year, const std::string &period)
int checkASymDiMuonTrigger (const xAOD::EventInfo *ei, const xAOD::Muon &muon, unsigned int iquality, unsigned int ibin, unsigned int isystematic)
int checkSymDiMuonTrigger (const xAOD::EventInfo *ei, const xAOD::MuonContainer *muons, unsigned int iquality, unsigned int ibin, unsigned int isystematic)
int checkSingleMuonTrigger (const xAOD::EventInfo *ei, const xAOD::MuonContainer *muons, unsigned int iquality, unsigned int ibin, unsigned int isystematic)

Public Attributes

int m_errorsCount = 0
int m_warningsCount = 0

Private Attributes

std::vector< std::vector< CP::MuonTriggerScaleFactors * > > m_triggerSFTools
std::vector< CP::SystematicSetm_systematics
const char * m_appName
std::string m_trigger

Detailed Description

Definition at line 58 of file MuonTriggerSFRootCoreTest.cxx.

Constructor & Destructor Documentation

◆ MuonTriggerSFTester()

MuonTriggerSFTester::MuonTriggerSFTester ( const char * appName,
const std::string & trigger )
inline

Definition at line 61 of file MuonTriggerSFRootCoreTest.cxx.

61 :
62 m_errorsCount (0),
65 m_appName (appName),
66 m_trigger (trigger)
67 {
68 }
static SystematicRegistry & getInstance()
Get the singleton instance of the registry for the curren thread.
std::vector< CP::SystematicSet > m_systematics
std::vector< CP::SystematicSet > make_systematics_vector(const SystematicSet &systematics)
utility functions for working with systematics

Member Function Documentation

◆ checkASymDiMuonTrigger()

int MuonTriggerSFTester::checkASymDiMuonTrigger ( const xAOD::EventInfo * ei,
const xAOD::Muon & muon,
unsigned int iquality,
unsigned int ibin,
unsigned int isystematic )
inline

Definition at line 128 of file MuonTriggerSFRootCoreTest.cxx.

128 {
129 CHECK_CPSys(m_triggerSFTools[iquality][ibin]->applySystematicVariation(m_systematics[isystematic]));
130
131 Int_t threshold = 0;
132 CP::CorrectionCode result = getThreshold(threshold, m_trigger);
133 if (result != CP::CorrectionCode::Ok) {
134 Error("MuonTriggerSFRootCoreTest", "Could not extract threshold for trigger %s", m_trigger.c_str());
135 return 1;
136 }
137 if (muon.pt() < threshold or std::abs(muon.eta()) > 2.5)
138 return 1;
139
140 bool displayWarning = false;
141
142
143
144 double efficiencyMC = 0.;
145 double efficiencyData = 0.;
146
147 result = m_triggerSFTools[iquality][ibin]->getTriggerEfficiency(muon,
148 efficiencyMC,
149 m_trigger,
150 false);
151 if (result != CP::CorrectionCode::Ok) {
152 Error(m_appName, "Could not retrieve MC efficeincy. Parameters:\n Event number = %i,\n Quality = %s,\n Binning = %s,\n Systematic = %s", static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), m_systematics[isystematic].name().c_str());
154 }
155
156 result = m_triggerSFTools[iquality][ibin]->getTriggerEfficiency(muon,
157 efficiencyData,
158 m_trigger,
159 true);
160 if (result != CP::CorrectionCode::Ok) {
161 Error(m_appName, "Could not retrieve data efficeincy. Parameters:\n Event number = %i,\n Quality = %s,\n Binning = %s,\n Systematic = %s", static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), m_systematics[isystematic].name().c_str());
163 }
164 auto triggerSF = efficiencyMC/efficiencyData;
165 if (triggerSF < 0.2 || triggerSF > 1.2) {
166 if (displayWarning) {
167 Warning(m_appName, "Retrieved trigger scale factor %.3f is outside of expected range from 0.2 to 1.2. Parameters:\n Event number = %i,\n Quality = %s,\n Binning = %s,\n Systematic = %s", triggerSF, static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), m_systematics[isystematic].name().c_str());
169 }
170 }
171 return 0;
172 }
#define CHECK_CPSys(Arg)
static const std::vector< std::string > qualities
static const std::vector< std::string > binnings
CP::CorrectionCode getThreshold(Int_t &threshold, const std::string &trigger)
@ Ok
The correction was done successfully.
std::vector< std::vector< CP::MuonTriggerScaleFactors * > > m_triggerSFTools
uint64_t eventNumber() const
The current event's event number.
Error
The different types of error that can be flagged in the L1TopoRDO.
Definition Error.h:16

◆ checkSingleMuonTrigger()

int MuonTriggerSFTester::checkSingleMuonTrigger ( const xAOD::EventInfo * ei,
const xAOD::MuonContainer * muons,
unsigned int iquality,
unsigned int ibin,
unsigned int isystematic )
inline

Definition at line 207 of file MuonTriggerSFRootCoreTest.cxx.

207 {
208
209 CHECK_CPSys(m_triggerSFTools[iquality][ibin]->applySystematicVariation(m_systematics[isystematic]));
210 CP::CorrectionCode result;
212 for (xAOD::MuonContainer::const_iterator mu_itr = muons->begin(); mu_itr != mu_end; ++mu_itr) {
213 for (size_t l = 0; l < types.size(); l++) {
214 if (types[l] != "data" || m_systematics[isystematic].name().find("TrigSystUncertainty") == std::string::npos) {
215 Double_t eff;
216 auto binNumber = m_triggerSFTools[iquality][ibin]->getBinNumber(**mu_itr, m_trigger);
217 result = m_triggerSFTools[iquality][ibin]->getTriggerEfficiency(**mu_itr, eff, m_trigger, types[l] == "data");
218 if (result != CP::CorrectionCode::Ok) {
219 Error(m_appName, "Could not retrieve trigger efficiency. Paramaters:\n Event number = %i,\n Quality = %s,\n Binning = %s,\n Systematic = %s,\n Type = %s ", static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), m_systematics[isystematic].name().c_str(), types[l].c_str());
221 }
222 if (eff < 0 || eff > 1) {
223 Warning(m_appName, "Retrieved trigger efficiency %.3f is outside of expected range from 0 to 1. Paramaters:\n Event number = %i,\n Quality = %s,\n Binning = %s,\n Systematic = %s", eff, static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), m_systematics[isystematic].name().c_str());
225 }
226 if (binNumber < 0 || binNumber > 238) {
227 Warning(m_appName, "Retrieved bin number %.i is outside of expected range from 0 to 238. Paramaters:\n Event number = %i,\n Quality = %s,\n Binning = %s,\n Systematic = %s", binNumber, static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), m_systematics[isystematic].name().c_str());
229 }
230
231 }
232 }
233 }
234
235 double triggerSF = 0.;
236 result = m_triggerSFTools[iquality][ibin]->getTriggerScaleFactor(*muons, triggerSF, m_trigger);
237 if (result != CP::CorrectionCode::Ok) {
238 Error(m_appName, "Could not retrieve trigger scale factors. Parameters:\n Event number = %i,\n Quality = %s,\n Binning = %s,\n Systematic = %s", static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), m_systematics[isystematic].name().c_str());
240 }
241 if (triggerSF < 0.2 || triggerSF > 1.2) {
242 // Allow scale factor to be outside of this range in case all the muons are below the threshold
243 Int_t threshold = 0;
244 CP::CorrectionCode result = getThreshold(threshold, m_trigger);
245 if (result != CP::CorrectionCode::Ok) {
246 Error("MuonTriggerSFRootCoreTest", "Could not extract threshold for trigger %s", m_trigger.c_str());
247 return 1;
248 }
249 bool displayWarning = false;
251 for (xAOD::MuonContainer::const_iterator mu_itr = muons->begin(); mu_itr != mu_end; ++mu_itr) {
252 if ((**mu_itr).pt() >= threshold and std::abs((**mu_itr).eta()) < 2.5) displayWarning = true;
253 }
254
255 if (displayWarning) {
256 Warning(m_appName, "Retrieved trigger scale factor %.3f is outside of expected range from 0.2 to 1.2. Parameters:\n Event number = %i,\n Quality = %s,\n Binning = %s,\n Systematic = %s", triggerSF, static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), m_systematics[isystematic].name().c_str());
258 }
259 }
260 double tmpEffData = 1.;
261 double tmpEffMC = 1.;
262 for (auto muon: *muons) {
263 double effData = 0.;
264 double effMC = 0.;
265 double scaleFactor = 0.;
266 if (m_triggerSFTools[iquality][ibin]->getTriggerEfficiency(*muon, effData, m_trigger, true) != CP::CorrectionCode::Ok) {
267 Error("MuonTriggerSFRootCoreTest", "Could not extract data trigger efficiency for %s which is %f. Parameters:\n Event number = %i,\n Quality = %s,\n Binning = %s,\n Systematic = %s \n muon pt: %f \n eta: %f \n phi: %f", m_trigger.c_str(), scaleFactor, static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), m_systematics[isystematic].name().c_str(), muon->pt(), muon->eta(), muon->phi());
268 return 1;
269 }
270 if (m_triggerSFTools[iquality][ibin]->getTriggerEfficiency(*muon, effMC, m_trigger, false) != CP::CorrectionCode::Ok) {
271 Error("MuonTriggerSFRootCoreTest", "Could not extract MC trigger efficiency for %s", m_trigger.c_str());
272 return 1;
273 }
274 if (m_triggerSFTools[iquality][ibin]->getTriggerScaleFactor(*muon, scaleFactor, m_trigger) != CP::CorrectionCode::Ok) {
275 Error("MuonTriggerSFRootCoreTest", "Could not extract MC trigger efficiency for %s", m_trigger.c_str());
276 return 1;
277 }
278 if (scaleFactor < 0.2 || scaleFactor > 1.2 ) {
279 Int_t threshold = 0;
280 if (getThreshold(threshold, m_trigger) != CP::CorrectionCode::Ok) {
281 Error("MuonTriggerSFRootCoreTest", "Could not extract threshold for trigger %s", m_trigger.c_str());
282 return 1;
283 }
284 if(muon->pt() >= threshold and std::abs(muon->eta()) < 2.5)
285 Warning(m_appName, "Retrieved single muon trigger scale factor %.3f is outside of expected range from 0.2 to 1.2. Parameters:\n Event number = %i,\n Quality = %s,\n Binning = %s,\n Systematic = %s \n muon pt: %f \n eta: %f \n phi: %f", scaleFactor, static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), m_systematics[isystematic].name().c_str(), muon->pt(), muon->eta(), muon->phi());
286 }
287 tmpEffData *= 1.-effData;
288 tmpEffMC *= 1.-effMC;
289 }
290 auto sfSingleCalc = (1. - tmpEffData)/(1. - tmpEffMC);
291 if ( triggerSF > 0.2 && (sfSingleCalc - triggerSF) / triggerSF > 0.02) {
292
293 // Warning(m_appName, "Invalid single muon SF result. Parameters:\n Event number = %i,\n Quality = %s,\n Binning = %s \n Systematic = %s \n single SF: %f \n combined SF %f \n ", static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), systematics[isystematic].name().c_str(), sfSingleCalc, triggerSFrSF);
295 }
296 return 0;
297 }
static const std::vector< std::string > types
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
std::string find(const std::string &s)
return a remapped string
Definition hcg.cxx:138
l
Printing final latex table to .tex output file.

◆ checkSymDiMuonTrigger()

int MuonTriggerSFTester::checkSymDiMuonTrigger ( const xAOD::EventInfo * ei,
const xAOD::MuonContainer * muons,
unsigned int iquality,
unsigned int ibin,
unsigned int isystematic )
inline

Definition at line 174 of file MuonTriggerSFRootCoreTest.cxx.

174 {
175 CHECK_CPSys(m_triggerSFTools[iquality][ibin]->applySystematicVariation(m_systematics[isystematic]));
176 double triggerSF = 0.;
177 CP::CorrectionCode result;
178 result = m_triggerSFTools[iquality][ibin]->getTriggerScaleFactor(*muons, triggerSF, m_trigger);
179 if (result != CP::CorrectionCode::Ok) {
180 Error(m_appName, "Could not retrieve trigger scale factors. Parameters:\n Event number = %i,\n Quality = %s,\n Binning = %s,\n Systematic = %s", static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), m_systematics[isystematic].name().c_str());
182 }
183 if (triggerSF < 0.2 || triggerSF > 1.2) {
184 // Allow scale factor to be outside of this range in case all the muons are below the threshold
185 Int_t threshold = 0;
186 CP::CorrectionCode result = getThreshold(threshold, m_trigger);
187 if (result != CP::CorrectionCode::Ok) {
188 Error("MuonTriggerSFRootCoreTest", "Could not extract threshold for trigger %s", m_trigger.c_str());
189 return 1;
190 }
191 bool displayWarning = false;
193 for (xAOD::MuonContainer::const_iterator mu_itr = muons->begin(); mu_itr != mu_end; ++mu_itr) {
194 if ((**mu_itr).pt() >= threshold and std::abs((**mu_itr).eta()) < 2.5) displayWarning = true;
195 }
196
197 if (displayWarning) {
198 Warning(m_appName, "Retrieved trigger scale factor %.3f is outside of expected range from 0.2 to 1.2. Parameters:\n Event number = %i,\n Quality = %s,\n Binning = %s,\n Systematic = %s", triggerSF, static_cast<int>(ei->eventNumber()), qualities[iquality].c_str(), binnings[ibin].c_str(), m_systematics[isystematic].name().c_str());
200 }
201 }
202
203 return 0;
204 }

◆ initialiseTools()

int MuonTriggerSFTester::initialiseTools ( const std::string & customFileName,
const std::string & customInputFolder,
int year,
const std::string & period )
inline

Definition at line 70 of file MuonTriggerSFRootCoreTest.cxx.

70 {
71 for (size_t i = 0; i < qualities.size(); i++) {
72 std::vector<CP::MuonTriggerScaleFactors*> tools{};
73 for (size_t j = 0; j < binnings.size(); j++) {
74 CP::MuonTriggerScaleFactors* tool = new CP::MuonTriggerScaleFactors("TrigSF_" + qualities[i] + "_" + binnings[j]);
75 ASG_CHECK_SA(m_appName, tool->setProperty("MuonQuality", qualities[i]));
76 ASG_CHECK_SA(m_appName, tool->setProperty("Binning", binnings[j]));
77 ASG_CHECK_SA(m_appName, tool->setProperty("filename", customFileName));
78 ASG_CHECK_SA(m_appName, tool->setProperty("CustomInputFolder", customInputFolder));
79 ASG_CHECK_SA(m_appName, tool->setProperty("UseExperimental", true));
80 ASG_CHECK_SA(m_appName, tool->setProperty("AllowZeroSF", true));
81 ASG_CHECK_SA(m_appName, tool->setProperty("forceYear", year));
82 ASG_CHECK_SA(m_appName, tool->setProperty("forcePeriod", period));
83
84 tool->msg().setLevel( MSG::WARNING );
85 ASG_CHECK_SA(m_appName, tool->initialize());
86 //CP::CorrectionCode result = tool->setRunNumber(atoi(runNumber));
87 //if (result != CP::CorrectionCode::Ok){
88 // Error(m_appName, "Could not set run number");
89 // return 1;
90 //}
91 tools.push_back(tool);
92 }
93 m_triggerSFTools.push_back(tools);
94 }
95 return 0;
96 }
#define ASG_CHECK_SA(SOURCE, EXP)
Helper macro for checking the status code of a call outside of an ASG tool.
Definition Check.h:76
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)

◆ processEvent()

int MuonTriggerSFTester::processEvent ( xAOD::TEvent & event,
int year,
const std::string & period )
inline

Definition at line 98 of file MuonTriggerSFRootCoreTest.cxx.

98 {
99 const xAOD::EventInfo* ei = nullptr;
100 RETURN_CHECK(m_appName, event.retrieve(ei, "EventInfo"));
101
102 const xAOD::MuonContainer* muons = nullptr;
103 RETURN_CHECK(m_appName, event.retrieve(muons, "Muons"));
104 if(year == -1 && period == "")
105 static const SG::AuxElement::ConstAccessor<unsigned int> acc_rnd("RandomRunNumber");
106 for (size_t i = 0; i < qualities.size(); i++) {
107 for (size_t j = 0; j < binnings.size(); j++) {
108 for (size_t k = 0; k < m_systematics.size(); k++) {
109 if(m_trigger == "HLT_mu26_ivarmedium" || m_trigger == "HLT_mu50" || m_trigger == "HLT_mu26_ivarmedium_OR_HLT_mu50")
110 checkSingleMuonTrigger(ei, muons, i, j, k);
111 if(muons->size() != 2)
112 continue;
113 if(binnings[j] == "coarse")
114 continue; // not supported right now
115 if(m_trigger == "HLT_2mu14" || m_trigger == "HLT_2mu10"){
116 checkSymDiMuonTrigger(ei, muons, i, j, k);
117 }
118 else{
119 for(auto muon : *muons)
120 checkASymDiMuonTrigger(ei, *muon, i, j, k);
121 }
122 }
123 }
124 }
125 return 0;
126 }
#define RETURN_CHECK(CONTEXT, EXP)
Helper macro for checking return codes in a compact form in the code.
Definition ReturnCheck.h:26
size_type size() const noexcept
Returns the number of elements in the collection.
int checkASymDiMuonTrigger(const xAOD::EventInfo *ei, const xAOD::Muon &muon, unsigned int iquality, unsigned int ibin, unsigned int isystematic)
int checkSymDiMuonTrigger(const xAOD::EventInfo *ei, const xAOD::MuonContainer *muons, unsigned int iquality, unsigned int ibin, unsigned int isystematic)
int checkSingleMuonTrigger(const xAOD::EventInfo *ei, const xAOD::MuonContainer *muons, unsigned int iquality, unsigned int ibin, unsigned int isystematic)
EventInfo_v1 EventInfo
Definition of the latest event info version.
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".

Member Data Documentation

◆ m_appName

const char* MuonTriggerSFTester::m_appName
private

Definition at line 307 of file MuonTriggerSFRootCoreTest.cxx.

◆ m_errorsCount

int MuonTriggerSFTester::m_errorsCount = 0

Definition at line 301 of file MuonTriggerSFRootCoreTest.cxx.

◆ m_systematics

std::vector<CP::SystematicSet> MuonTriggerSFTester::m_systematics
private

Definition at line 306 of file MuonTriggerSFRootCoreTest.cxx.

◆ m_trigger

std::string MuonTriggerSFTester::m_trigger
private

Definition at line 308 of file MuonTriggerSFRootCoreTest.cxx.

◆ m_triggerSFTools

std::vector<std::vector<CP::MuonTriggerScaleFactors*> > MuonTriggerSFTester::m_triggerSFTools
private

Definition at line 305 of file MuonTriggerSFRootCoreTest.cxx.

◆ m_warningsCount

int MuonTriggerSFTester::m_warningsCount = 0

Definition at line 302 of file MuonTriggerSFRootCoreTest.cxx.


The documentation for this class was generated from the following file: