|
ATLAS Offline Software
|
Go to the documentation of this file.
45 TString
fileName =
"/eos/atlas/atlascerngroupdisk/perf-jets/ReferenceFiles/DAOD_JETM2.Zprime.pool.root";
50 bool runSystematics=
true;
52 Info(
APP_NAME,
"==============================================" );
56 Info(
APP_NAME,
" $> %s -n X | X = number of events you want to run on",
APP_NAME );
57 Info(
APP_NAME,
" $> %s -e X | X = specific number of the event to run on - for debugging",
APP_NAME );
62 Info(
APP_NAME,
"==============================================" );
66 Info(
APP_NAME,
"No arguments - using default file" );
78 if(
options.find(
"-f")!=std::string::npos){
79 for(
int ipos=0; ipos<
argc ; ipos++ ) {
80 if(std::string(
argv[ipos]).compare(
"-f")==0){
81 if( ipos+1 ==
argc || std::string(
argv[ipos+1])[0]==
'-' ) {
82 Error(
APP_NAME,
"Please add the file name after -f argument" );
92 if(
options.find(
"-event")!=std::string::npos){
93 for(
int ipos=0; ipos<
argc ; ipos++ ) {
95 if( ipos+1 ==
argc || std::string(
argv[ipos+1])[0]==
'-' ) {
96 Error(
APP_NAME,
"Please add the event# after -event argument" );
100 Info(
APP_NAME,
"Argument (-event) : Running only on event # %i", ievent );
106 if(
options.find(
"-m")!=std::string::npos){
107 for(
int ipos=0; ipos<
argc ; ipos++ ) {
109 if( ipos+1 ==
argc || std::string(
argv[ipos+1])[0]==
'-' ) {
110 Error(
APP_NAME,
"Please add 0 or 1 after -m (IsMC) argument" );
120 if(
options.find(
"-n")!=std::string::npos){
121 for(
int ipos=0; ipos<
argc ; ipos++ ) {
123 if( ipos+1 ==
argc || std::string(
argv[ipos+1])[0]==
'-' ) {
134 if(
options.find(
"-noSys")!=std::string::npos){
135 runSystematics=
false;
136 Info(
APP_NAME,
"Argument (-noSys) : Setting runSystematics");
139 if(
options.find(
"-v")!=std::string::npos){
141 Info(
APP_NAME,
"Argument (-v) : Setting verbose");
148 StatusCode::enableFailure();
154 TChain *
chain =
new TChain (
"CollectionTree",
"CollectionTree");
165 Long64_t
entries =
event.getEntries();
168 std::unique_ptr<TFile>
outputFile(TFile::Open(
"output_JSSWTopTaggerDNN.root",
"recreate"));
169 int pass,truthLabel,
idx;
171 TTree*
Tree =
new TTree(
"tree",
"test_tree" );
172 Tree->Branch(
"pass", &pass,
"pass/I" );
173 Tree->Branch(
"sf", &
sf,
"sf/F" );
174 Tree->Branch(
"pt", &
pt,
"pt/F" );
175 Tree->Branch(
"m", &
m,
"m/F" );
176 Tree->Branch(
"eta", &
eta,
"eta/F" );
177 Tree->Branch(
"eff", &
eff,
"eff/F" );
178 Tree->Branch(
"effSF", &effSF,
"effSF/F" );
179 Tree->Branch(
"idx", &
idx,
"idx/I" );
180 Tree->Branch(
"truthLabel", &truthLabel,
"truthLabel/I" );
182 std::unique_ptr<JetUncertaintiesTool> jetUncToolSF(
new JetUncertaintiesTool((
"JetUncProvider_SF")));
183 std::vector<CP::SystematicSet> jetUnc_sysSets;
186 ANA_CHECK( jetUncToolSF->setProperty(
"JetDefinition",
"AntiKt10LCTopoTrimmedPtFrac5SmallR20") );
187 ANA_CHECK( jetUncToolSF->setProperty(
"ConfigFile",
"rel21/Fall2020/R10_SF_LCTopo_TopTagContained_SigEff80.config") );
188 ANA_CHECK( jetUncToolSF->setProperty(
"MCType",
"MC16") );
191 std::vector<std::string> pulls = {
"__1down",
"__1up"};
193 const std::set<std::string> sysNames = jetUnc_sysSet.
getBaseNames();
194 for (
const std::string &
sysName: sysNames) {
195 for (
const std::string &
pull : pulls) {
211 std::cout<<
"Initializing JSSWTopTaggerDNN Tagger"<<std::endl;
216 ANA_CHECK( m_Tagger.
setProperty(
"ConfigFile",
"DNNTagger_AntiKt10UFOSD_TopContained80_Oct30.dat") );
221 std::cout <<
"Total Events in File : " <<
entries << std::endl;
230 event.getEntry(
entry );
234 if(
event.
retrieve( evtInfo,
"EventInfo" ) != StatusCode::SUCCESS){
237 if(ievent!=-1 &&
static_cast <int> (evtInfo->
eventNumber())!=ievent) {
243 if(
event.
retrieve( myJets,
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets" ) != StatusCode::SUCCESS)
248 std::unique_ptr<xAOD::JetContainer> shallowJets(jets_shallowCopy.first);
249 std::unique_ptr<xAOD::ShallowAuxContainer> shallowAux(jets_shallowCopy.second);
255 std::cout <<
"Testing top Tagger " << std::endl;
256 std::cout <<
"jet pt = " << jetSC->pt() << std::endl;
257 std::cout <<
"RunningTag : " << jetSC->auxdata<
bool>(
"DNNTaggerTopQuarkContained80_Tagged") << std::endl;
258 std::cout <<
"Printing jet score : " << jetSC->auxdata<
float>(
"DNNTaggerTopQuarkContained80_Score") << std::endl;
259 std::cout <<
"result masspass = " << jetSC->auxdata<
bool>(
"DNNTaggerTopQuarkContained80_PassMass") << std::endl;
261 truthLabel = jetSC->auxdata<
int>(
"R10TruthLabel_R21Precision_2022v1");
263 pass = jetSC->getAttribute<
bool>(
"DNNTaggerTopQuarkContained80_Tagged");
264 sf = jetSC->auxdata<
float>(
"DNNTaggerTopQuarkContained80_SF");
268 eff = jetSC->auxdata<
float>(
"DNNTaggerTopQuarkContained80_efficiency");
269 effSF = jetSC->auxdata<
float>(
"DNNTaggerTopQuarkContained80_effSF");
275 if (
pt/1.
e3 > 350 && std::abs(jetSC->eta()) < 2.0 ) {
276 bool validForUncTool = (
pt/1.e3 >= 150 &&
pt/1.e3 < 2500 );
277 validForUncTool &= (
m/
pt >= 0 &&
m/
pt <= 1 );
278 validForUncTool &= ( std::abs(
eta) < 2 );
279 std::cout <<
"Pass: " << pass << std::endl;
280 std::cout <<
"Nominal SF=" <<
sf <<
" truthLabel=" << truthLabel <<
" (1: t->qqb) "
281 << jetSC->auxdata<
float>(
"DNNTaggerTopQuarkContained80_effSF")
283 << jetSC->auxdata<
float>(
"DNNTaggerTopQuarkContained80_efficiency")
285 if( validForUncTool ){
290 std::cout << sysSet.name() <<
" " << jetSC->auxdata<
float>(
"DNNTaggerTopQuarkContained80_SF") << std::endl;
298 Info(
APP_NAME,
"===>>> done processing event #%i, run #%i %i events processed so far <<<===",
static_cast< int >( evtInfo->
eventNumber() ),
static_cast< int >( evtInfo->
runNumber() ),
static_cast< int >(
entry + 1 ) );
314 std::cout<<std::endl<<std::endl;
315 std::cout<<
"Smart Slimming Checker :"<<std::endl;
317 std::cout<<std::endl<<std::endl;
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,...
uint64_t eventNumber() const
The current event's event number.
ReadStats & stats()
Access the object belonging to the current thread.
Scalar eta() const
pseudorapidity method
@ kAthenaAccess
Access containers/objects like Athena does.
Class to wrap a set of SystematicVariations.
uint32_t runNumber() const
The current event's run number.
POOL::TEvent event(POOL::TEvent::kClassAccess)
int main(int argc, char *argv[])
std::set< std::string > getBaseNames() const
description: get the set of base systematic names from this set
static IOStats & instance()
Singleton object accessor.
void printSmartSlimmingBranchList(bool autoIncludeLinks=false) const
Print the accessed variables, formatted for smart slimming.
std::pair< std::unique_ptr< T >, std::unique_ptr< ShallowAuxContainer > > shallowCopyContainer(const T &cont, [[maybe_unused]] const EventContext &ctx)
Function making a shallow copy of a constant container.
Class describing the basic event information.
A relatively simple transient store for objects created in analysis.
StatusCode retrieve(const T *&obj)
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Error
The different types of error that can be flagged in the L1TopoRDO.
Tool for accessing xAOD files outside of Athena.
virtual StatusCode tag(const xAOD::Jet &jet) const override
Decorate single jet with tagging info.
StatusCode Init(const char *appname)
Function initialising ROOT/PyROOT for using the ATLAS EDM.