|
ATLAS Offline Software
|
Go to the documentation of this file.
17 #ifdef XAOD_STANDALONE
39 #define FBT_CHECK1(x, FAIL) \
41 if(!successful(x)) { \
42 Error("fbtTestBasics", "failure encounted on l.%d", __LINE__); \
46 #define FBT_CHECK(x) FBT_CHECK1(x, false)
56 #ifdef XAOD_STANDALONE
57 using Store_t = std::unique_ptr<xAOD::TStore>;
85 std::string option =
argv[
i];
86 if(option==
"-v" || option==
"--verbose")
verbose =
true;
89 #ifdef XAOD_STANDALONE
93 StatusCode::enableFailure();
103 #ifndef XAOD_STANDALONE
111 std::vector<std::string>
config;
112 Result result0, result1, result2, result3, result4, result5;
114 if(
verbose) std::cout <<
"\nWill do minimal test with CP::ApplyFakeFactor\n";
118 if(
verbose) std::cout <<
"\nWill do minimal test with CP::AsymptMatrixTool\n";
121 if(
verbose) std::cout <<
"\nWill do minimal test with CP::LhoodMM_tools\n";
124 if(
verbose) std::cout <<
"\nWill test loading efficiencies from XML\n";
130 if(
verbose) std::cout <<
"\nWill test getEventWeight()\n";
139 if(
verbose) std::cout <<
"\nWill test parallel jobs and merging\n";
143 FBT_CHECK( gSystem->Exec(
"hadd -f fbt_merged.root fbt_job*.root") == 0 );
169 std::unique_ptr<TFile>
f(TFile::Open(saveAs.c_str(),
"RECREATE"));
177 std::cout <<
"Parallel job stored intermediate yield " <<
value <<
" +" <<
up <<
" -" << down << std::endl;
182 static std::atomic<long>
instance = 0;
184 template<
class Interface>
193 if(!progressFile.empty())
195 FBT_CHECK(
tool.setProperty(
"ProgressFileName", progressFile) );
196 FBT_CHECK(
tool.setProperty(
"ProgressFileDirectory",
"fakes") );
203 template<
class Interface>
206 auto eventInfo = std::make_unique<xAOD::EventInfo>();
207 auto eventAuxInfo = std::make_unique<xAOD::EventAuxInfo>();
208 eventInfo->setStore(eventAuxInfo.get());
210 flagAcc(*eventInfo) = 1;
215 auto e = std::make_unique<xAOD::Electron>();
216 e->makePrivateStore();
220 for(
int i=eventOffset;
i<
nEvents+eventOffset;++
i)
222 e->setP4((1 + (
i%3))*1
e4, 0., 0. ,0.511);
223 TightAcc(*
e) = (
i%4)? 0 : 1;
228 #ifdef XAOD_STANDALONE
244 for(
auto& sysvar :
tool->affectingSystematics())
248 result.variations[sysvar] +=
y;
258 template<
class Interface>
261 result.variations.clear();
265 for(
auto& sysvar :
tool->affectingSystematics())
283 std::cout <<
"ERROR: found different values for the equality test: " <<
x1 <<
" vs " <<
x2 << std::endl;
302 std::cout <<
"Result: total yield = " <<
value <<
" +" <<
statUp <<
" -" <<
statDown << std::endl;
305 std::cout <<
" variation " << kv.first.name() <<
" = " << kv.second << std::endl;
312 config.emplace_back(
"fbt_efficiencies.root");
313 TH1D hElFake(
"FakeEfficiency_el_pt",
"FakeEfficiency", 1, 10., 100.);
314 hElFake.SetBinContent(1, 0.05);
315 hElFake.SetBinError(1, 0.01);
316 TH1D hMuFake(
"FakeEfficiency_mu_pt",
"FakeEfficiency", 1, 10., 100.);
317 hMuFake.SetBinContent(1, 0.15);
318 hMuFake.SetBinError(1, 0.032);
319 TH1D hElReal(
"RealEfficiency_el_pt",
"RealEfficiency", 1, 10., 100.);
320 hElReal.SetBinContent(1, 0.90);
321 hElReal.SetBinError(1, 0.01);
322 TH1D hMuReal(
"RealEfficiency_mu_pt",
"RealEfficiency", 1, 10., 100.);
323 hMuReal.SetBinContent(1, 0.95);
324 hMuReal.SetBinError(1, 0.01);
325 std::unique_ptr<TFile>
f(TFile::Open(
config.back().c_str(),
"RECREATE"));
339 config.emplace_back(
"fbt_efficiencies.xml");
344 out <<
"<efficiencies>\n";
345 out <<
"<param type=\"int\" level=\"event\"> flag </param>\n";
346 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";
347 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";
348 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";
349 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";
350 out <<
"</efficiencies>\n";
std::atomic< bool > verbose
const bool readCPVariations
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
bool setup(asg::AnaToolHandle< Interface > &tool, const std::string &type, const std::vector< std::string > &config, const std::string &progressFile="")
mostly useful for athena, which will otherwise re-use the previous tool
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 eventLoop(asg::AnaToolHandle< Interface > &tool, Store_t &store, Result &result, int nEvents, int eventOffset=0)
bool minimalTest(const std::string &type, const std::vector< std::string > &config, Store_t &store, Result &result)
#define FBT_CHECK1(x, FAIL)
bool successful(bool arg)
IAppMgrUI * Init(const char *options="POOLRootAccess/basic.opts")
Bootstraps (creates and configures) the Gaudi Application with the provided options file.
The Athena Transient Store API.
bool allTests(Store_t &store)
POOL::TEvent event(POOL::TEvent::kClassAccess)
::StatusCode StatusCode
StatusCode definition for legacy code.
bool readFromXML(std::vector< std::string > &config)
bool fillResult(asg::AnaToolHandle< Interface > &tool, Result &result)
const std::string selection
std::string to_string(const DetectorType &type)
ServiceHandle< StoreGateSvc > & evtStore()
Helper class to provide type-safe access to aux data.
void record(const T *p, const std::string &key)
bool readFromROOT(std::vector< std::string > &config)
bool addEventWeight(asg::AnaToolHandle< CP::ILinearFakeBkgTool > &tool, Result &result)
const std::string process
bool parallelJob(const std::string &type, const std::vector< std::string > &config, Store_t &store, const std::string &saveAs, int nEvents, int eventOffset)
constexpr int pow(int base, int exp) noexcept
Tool for accessing xAOD files outside of Athena.
bool operator==(const Result &) const
StatusCode Init(const char *appname)
Function initialising ROOT/PyROOT for using the ATLAS EDM.