30 const IInterface*
p ) :
32 m_broker(
"PerformanceBroker")
34 declareInterface<Analysis::ICalibrationDataInterfaceTool>(
this);
37 "tagging algorithm name");
39 "operating points for this tagging algorithm");
41 "efficiency calibration curve for b jets");
43 "efficiency calibration curve for c jets");
45 "efficiency calibration curve for tau jets");
47 "efficiency calibration curve for light-flavour jets");
49 "scale factor calibration curve for b jets");
51 "scale factor calibration curve for c jets");
53 "scale factor calibration curve for tau jets");
55 "scale factor calibration curve for light-flavour jets");
57 "tool interfacing with COOL Database");
67 return StatusCode::SUCCESS;
70 return AthAlgTool::queryInterface( riid, ppvIf );
87 string::size_type
end;
89 std::vector<string> calibrationBNames;
90 if (m_EffcalibrationBName.size() > 0) {
92 end = m_EffcalibrationBName.find(
";");
93 calibrationBNames.push_back(m_EffcalibrationBName.substr(0,
end));
94 if (
end != string::npos) m_EffcalibrationBName = m_EffcalibrationBName.substr(
end+1);
95 }
while (
end != string::npos);
98 std::vector<string> calibrationCNames;
99 if (m_EffcalibrationCName.size() > 0) {
101 end = m_EffcalibrationCName.find(
";");
102 calibrationCNames.push_back(m_EffcalibrationCName.substr(0,
end));
103 if (
end != string::npos) m_EffcalibrationCName = m_EffcalibrationCName.substr(
end+1);
104 }
while (
end != string::npos);
107 std::vector<string> calibrationTNames;
108 if (m_EffcalibrationTName.size() > 0) {
110 end = m_EffcalibrationTName.find(
";");
111 calibrationTNames.push_back(m_EffcalibrationTName.substr(0,
end));
112 if (
end != string::npos) m_EffcalibrationTName = m_EffcalibrationTName.substr(
end+1);
113 }
while (
end != string::npos);
116 std::vector<string> calibrationLightNames;
117 if (m_EffcalibrationLightName.size() > 0) {
119 end = m_EffcalibrationLightName.find(
";");
120 calibrationLightNames.push_back(m_EffcalibrationLightName.substr(0,
end));
121 if (
end != string::npos) m_EffcalibrationLightName = m_EffcalibrationLightName.substr(
end+1);
122 }
while (
end != string::npos);
127 std::map<string, std::vector<string> > effNames;
128 effNames[
"B"] = calibrationBNames;
129 effNames[
"C"] = calibrationCNames;
130 effNames[
"T"] = calibrationTNames;
131 effNames[
"Light"] = calibrationLightNames;
132 setEffCalibrationNames(effNames);
135 std::map<string, string> calibrationNames;
136 calibrationNames[
"B"] = m_SFcalibrationBName;
137 calibrationNames[
"C"] = m_SFcalibrationCName;
138 calibrationNames[
"T"] = m_SFcalibrationTName;
139 calibrationNames[
"Light"] = m_SFcalibrationLightName;
140 setSFCalibrationNames(calibrationNames);
143 for (std::map<string, string>::const_iterator
it = calibrationNames.begin();
144 it != calibrationNames.end(); ++
it) {
145 for (std::vector<string>::const_iterator op = m_operatingPoints.begin();
146 op != m_operatingPoints.end(); ++op) {
147 registerObjects(
it->first, *op);
152 return StatusCode::SUCCESS;
167 string flavour(
label);
168 if (flavour ==
"N/A") flavour =
"Light";
172 string sfName(getBasename(OP, flavour,
"_SF",
true));
175 std::pair<CalibrationDataContainer*,bool>
ret =
180 <<
"tagger/jetCollection/flavour/operating point = "
181 << m_taggerName <<
"/" <<
author <<
"/" << flavour <<
"/" << OP);
203 cerr <<
"getScaleFactor: error retrieving Scale factor statistical uncertainty!"
209 cerr <<
"getScaleFactor: error retrieving Scale factor parameter systematic uncertainty!"
213 double uncertainty = combinedUncertainty(
stat, resSyst);
231 string flavour(
label);
232 if (flavour ==
"N/A") flavour =
"Light";
236 string effName(getBasename(OP, flavour,
"_Eff",
false));
239 std::pair<CalibrationDataContainer*,bool>
ret =
244 <<
"tagger/jetCollection/flavour/operating point = "
245 << m_taggerName <<
"/" <<
author <<
"/" << flavour <<
"/" << OP);
267 cerr <<
"getMCEfficiency: error retrieving MC efficiency statistical uncertainty!"
273 cerr <<
"getMCEfficiency: error retrieving MC efficiency parameter systematic uncertainty!"
277 double uncertainty = combinedUncertainty(
stat, resSyst);
294 double value = effResult.first*sfResult.first;
296 relative = effResult.second/effResult.first;
297 double sfRelative = sfResult.second/sfResult.first;
298 relative = std::sqrt(sfRelative*sfRelative + relative*relative);
301 <<
" MC eff=" << effResult.first);
311 const string& OP)
const
313 static const string slash(
"/");
317 string nameEff(
common); nameEff += EffCalibrationName(flavour); nameEff +=
"_Eff";
318 string nameSF(
common); nameSF += SFCalibrationName(flavour); nameSF +=
"_SF";
320 m_broker->registerHistogram(m_taggerName, nameSF);
321 m_broker->registerHistogram(m_taggerName, nameEff);
328 x.jetAuthor =
jet.jetAuthor();
329 x.jetPt =
jet.pt() * 0.001;
330 x.jetEta =
jet.eta();