![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
ATLAS Offline Software
|
Go to the documentation of this file.
17 #ifdef XAOD_STANDALONE
39 #define FBT_CHECK(x) \
41 if(successful(x)) break; \
42 Error("fbtTestBasics", "%s", ("failure encounted on l." + std::to_string(__LINE__)).c_str()); \
66 #ifdef XAOD_STANDALONE
67 std::unique_ptr<xAOD::TStore>
store;
86 std::string option =
argv[
i];
87 if(option==
"-v" || option==
"--verbose")
verbose =
true;
90 #ifdef XAOD_STANDALONE
93 store = std::make_unique<xAOD::TStore>();
94 StatusCode::enableFailure();
99 store =
event.evtStore().get();
104 #ifndef XAOD_STANDALONE
113 Result result0, result1, result2, result3, result4, result5;
115 if(
verbose) std::cout <<
"\nWill do minimal test with CP::ApplyFakeFactor\n";
119 if(
verbose) std::cout <<
"\nWill do minimal test with CP::AsymptMatrixTool\n";
122 if(
verbose) std::cout <<
"\nWill do minimal test with CP::LhoodMM_tools\n";
125 if(
verbose) std::cout <<
"\nWill test loading efficiencies from XML\n";
131 if(
verbose) std::cout <<
"\nWill test getEventWeight()\n";
140 if(
verbose) std::cout <<
"\nWill test parallel jobs and merging\n";
149 FBT_CHECK( gSystem->Exec(
"hadd -f fbt_merged.root fbt_job*.root") == 0 );
177 std::unique_ptr<TFile>
f(TFile::Open(saveAs.c_str(),
"RECREATE"));
185 std::cout <<
"Parallel job stored intermediate yield " <<
value <<
" +" <<
up <<
" -" << down << std::endl;
192 template<
class Interface>
204 FBT_CHECK(
tool.setProperty(
"ProgressFileDirectory",
"fakes") );
211 template<
class Interface>
214 auto eventInfo = std::make_unique<xAOD::EventInfo>();
215 auto eventAuxInfo = std::make_unique<xAOD::EventAuxInfo>();
216 eventInfo->setStore(eventAuxInfo.get());
217 eventInfo->auxdata<
int>(
"flag") = 1;
222 auto e = std::make_unique<xAOD::Electron>();
223 e->makePrivateStore();
228 e->setP4((1 + (
i%3))*1
e4, 0., 0. ,0.511);
229 e->auxdecor<
char>(
"Tight") = (
i%4)? 0 : 1;
234 #ifdef XAOD_STANDALONE
250 for(
auto& sysvar :
tool->affectingSystematics())
254 result.variations[sysvar] +=
y;
264 template<
class Interface>
267 result.variations.clear();
271 for(
auto& sysvar :
tool->affectingSystematics())
289 std::cout <<
"ERROR: found different values for the equality test: " <<
x1 <<
" vs " <<
x2 << std::endl;
308 std::cout <<
"Result: total yield = " <<
value <<
" +" <<
statUp <<
" -" <<
statDown << std::endl;
311 std::cout <<
" variation " << kv.first.name() <<
" = " << kv.second << std::endl;
318 config.emplace_back(
"fbt_efficiencies.root");
319 TH1D hElFake(
"FakeEfficiency_el_pt",
"FakeEfficiency", 1, 10., 100.);
321 hElFake.SetBinError(1, 0.01);
322 TH1D hMuFake(
"FakeEfficiency_mu_pt",
"FakeEfficiency", 1, 10., 100.);
324 hMuFake.SetBinError(1, 0.032);
325 TH1D hElReal(
"RealEfficiency_el_pt",
"RealEfficiency", 1, 10., 100.);
327 hElReal.SetBinError(1, 0.01);
328 TH1D hMuReal(
"RealEfficiency_mu_pt",
"RealEfficiency", 1, 10., 100.);
330 hMuReal.SetBinError(1, 0.01);
331 std::unique_ptr<TFile>
f(TFile::Open(
config.back().c_str(),
"RECREATE"));
345 config.emplace_back(
"fbt_efficiencies.xml");
350 out <<
"<efficiencies>\n";
351 out <<
"<param type=\"int\" level=\"event\"> flag </param>\n";
352 out <<
"<electron type=\"fake-efficiency\" input=\"central-value\" stat=\"per-bin\" >\n\t<bin flag=\"1\">\n 0.05 +- 0.01 (stat) </bin>\n</electron>\n";
353 out <<
"<electron type=\"real-efficiency\" input=\"central-value\" stat=\"global\" >\n\t<bin flag=\"1\">\n 0.90 +- 0.01 (stat) </bin>\n</electron>\n";
354 out <<
"<muon type=\"fake-efficiency\" input=\"central-value\" stat=\"per-bin\" >\n\t<bin flag=\"1\">\n 0.15 +- 0.032 (stat) </bin>\n</muon>\n";
355 out <<
"<muon type=\"real-efficiency\" input=\"central-value\" stat=\"global\" >\n\t<bin flag=\"1\">\n 0.95 +- 0.01 (stat) </bin>\n</muon>\n";
356 out <<
"</efficiencies>\n";
bool parallelJob(const std::string &type, const std::string &saveAs)
StatusCode record(T *p2BRegistered, const TKEY &key)
Record an object with a key.
std::pair< int, int > compare(const AmgSymMatrix(N) &m1, const AmgSymMatrix(N) &m2, double precision=1e-9, bool relative=false)
compare two matrices, returns the indices of the first element that fails the condition,...
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
int main(int argc, char *argv[])
std::map< CP::SystematicVariation, float > variations
@ kClassAccess
Access auxiliary data using the aux containers.
Class providing the definition of the 4-vector interface.
bool successful(bool arg)
IAppMgrUI * Init(const char *options="POOLRootAccess/basic.opts")
Bootstraps (creates and configures) the Gaudi Application with the provided options file.
bool minimalTest(const std::string &type, Result &result)
The Athena Transient Store API.
POOL::TEvent event(POOL::TEvent::kClassAccess)
::StatusCode StatusCode
StatusCode definition for legacy code.
bool fillResult(asg::AnaToolHandle< Interface > &tool, Result &result)
virtual StatusCode clearStore(bool forceRemove=false) override final
clear DataStore contents: called by the event loop mgrs
bool eventLoop(asg::AnaToolHandle< Interface > &tool, Result &result)
std::string to_string(const DetectorType &type)
ServiceHandle< StoreGateSvc > & evtStore()
void SetBinContent(int, double)
bool addEventWeight(asg::AnaToolHandle< CP::ILinearFakeBkgTool > &tool, Result &result)
std::vector< std::string > config
bool setup(asg::AnaToolHandle< Interface > &tool, const std::string &type)
mostly useful for athena, which will otherwise re-use the previous tool
Tool for accessing xAOD files outside of Athena.
bool operator==(const Result &) const
Base class for elements of a container that can have aux data.
StatusCode Init(const char *appname)
Function initialising ROOT/PyROOT for using the ATLAS EDM.