ATLAS Offline Software
HadronOriginClassifier.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /*
6 
7  * @author Mirko Casolino
8  * @date June 2015
9  * @brief tool to compute oring of hadron to flag ttbar+HF
10 
11  */
12 
13 #ifndef DerivationFrameworkMCTruth_HadronOriginClassifier_H
14 #define DerivationFrameworkMCTruth_HadronOriginClassifier_H
15 
16 #include <vector>
17 #include <map>
18 #include <set>
19 #include <string>
20 #include <utility>
21 
25 
26 namespace DerivationFramework{
27 
28 
29  static const InterfaceID IID_HadronOriginClassifier("HadronOriginClassifier", 1, 0);
30 
32 
33 
34  public:
35  HadronOriginClassifier(const std::string& t, const std::string& n, const IInterface* p);
36  virtual ~HadronOriginClassifier();
37 
38  virtual StatusCode initialize() override;
39 
40  static const InterfaceID& interfaceID() { return IID_HadronOriginClassifier; }
41 
42 
43  typedef enum {extrajet=0,
44  c_MPI =-1, b_MPI =1,
45  c_FSR =-2, b_FSR =2,
46  c_from_W =-3, b_from_W =3,
49 
50  typedef enum { Pythia6=0, Pythia8=1, HerwigPP=2, Sherpa=3 } GEN_id;
51 
52  std::map<const xAOD::TruthParticle*, HF_id> GetOriginMap() const;
53 
54  private:
55 
56  void fillHadronMap(std::set<const xAOD::TruthParticle*>& usedHadron, std::map<const xAOD::TruthParticle*,int>& mainHadronMap, const xAOD::TruthParticle* mainhad, const xAOD::TruthParticle* ihad, bool decayed=false) const;
57 
58  void buildPartonsHadronsMaps(std::map<const xAOD::TruthParticle*,int>& mainHadronMap,
59  std::map<const xAOD::TruthParticle*,HF_id>& partonsOrigin) const;
60 
61  bool passHadronSelection(const xAOD::TruthParticle* part) const;
62 
63 
64  bool isQuarkFromHadron(const xAOD::TruthParticle* part) const;
65 
66  bool isCHadronFromB(const xAOD::TruthParticle* part) const;
67 
68 
71  bool isLooping(const xAOD::TruthParticle* part, std::set<const xAOD::TruthParticle*> init_part = std::set<const xAOD::TruthParticle*>()) const;
72 
73  const xAOD::TruthParticle* findInitial(const xAOD::TruthParticle* part, bool looping) const;
74 
75  bool isFromTop(const xAOD::TruthParticle* part, bool looping) const;
76  static bool isDirectlyFromTop(const xAOD::TruthParticle* part, bool looping) ;
77  bool isDirectlyFromWTop(const xAOD::TruthParticle* part, bool looping) const;
78 
79  static bool isDirectlyFromGluonQuark(const xAOD::TruthParticle* part, bool looping) ;
80  bool isFromGluonQuark(const xAOD::TruthParticle* part, bool looping) const;
81  bool isDirectlyFSRPythia6(const xAOD::TruthParticle* part, bool looping) const;
82 
83  bool isDirectlyFromQuarkTop(const xAOD::TruthParticle* part, bool looping) const;
84  bool isFromQuarkTop(const xAOD::TruthParticle* part, bool looping) const;
85  bool isDirectlyFSR(const xAOD::TruthParticle* part, bool looping) const;
86  bool isFromWTop(const xAOD::TruthParticle* part, bool looping) const;
87 
88  static bool isDirectlyMPIPythia6(const xAOD::TruthParticle* part, bool looping) ;
89 
90  bool isDirectlyMPIPythia8(const xAOD::TruthParticle* part, bool looping) const;
91  bool isDirectlyFromQuarkTopPythia8(const xAOD::TruthParticle* part, bool looping) const;
92  bool isFromQuarkTopPythia8(const xAOD::TruthParticle* part, bool looping) const;
93  bool isDirectlyFSRPythia8(const xAOD::TruthParticle* part, bool looping) const;
94 
95  static bool isDirectlyMPISherpa(const xAOD::TruthParticle* part) ;
96 
97 
98  inline bool IsHerwigPP() const {return m_GenUsed==HerwigPP;};
99  inline bool IsPythia8() const {return m_GenUsed==Pythia8;};
100  inline bool IsPythia6() const {return m_GenUsed==Pythia6;};
101  inline bool IsSherpa() const {return m_GenUsed==Sherpa;};
102  inline bool IsTtBb() const {return m_ttbb;}
103 
104  std::string m_mcName;
107  int m_DSID;
109  bool m_ttbb = false;
110 
111  };
112 
113 } //namespace
114 
115 
116 #endif //DerivationFrameworkMCTruth_HadronOriginClassifier_H
117 
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
DerivationFramework::HadronOriginClassifier::isDirectlyMPIPythia8
bool isDirectlyMPIPythia8(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:813
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
DerivationFramework::HadronOriginClassifier::isFromTop
bool isFromTop(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:531
DerivationFramework::HadronOriginClassifier::findInitial
const xAOD::TruthParticle * findInitial(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:873
DerivationFramework::HadronOriginClassifier::isDirectlyMPISherpa
static bool isDirectlyMPISherpa(const xAOD::TruthParticle *part)
Definition: HadronOriginClassifier.cxx:822
DerivationFramework::HadronOriginClassifier::interfaceID
static const InterfaceID & interfaceID()
Definition: HadronOriginClassifier.h:40
DerivationFramework::HadronOriginClassifier::b_FSR
@ b_FSR
Definition: HadronOriginClassifier.h:45
DerivationFramework::HadronOriginClassifier
Definition: HadronOriginClassifier.h:31
DerivationFramework::HadronOriginClassifier::c_from_H
@ c_from_H
Definition: HadronOriginClassifier.h:48
DerivationFramework::HadronOriginClassifier::c_FSR
@ c_FSR
Definition: HadronOriginClassifier.h:45
DerivationFramework::HadronOriginClassifier::IsHerwigPP
bool IsHerwigPP() const
Definition: HadronOriginClassifier.h:98
DerivationFramework::HadronOriginClassifier::GetOriginMap
std::map< const xAOD::TruthParticle *, HF_id > GetOriginMap() const
Definition: HadronOriginClassifier.cxx:165
DerivationFramework::HadronOriginClassifier::HerwigPP
@ HerwigPP
Definition: HadronOriginClassifier.h:50
DerivationFramework::HadronOriginClassifier::c_MPI
@ c_MPI
Definition: HadronOriginClassifier.h:44
DerivationFramework::HadronOriginClassifier::m_HadronEtaMaxCut
double m_HadronEtaMaxCut
Definition: HadronOriginClassifier.h:106
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
DerivationFramework::HadronOriginClassifier::HF_id
HF_id
Definition: HadronOriginClassifier.h:43
DerivationFramework::HadronOriginClassifier::c_from_W
@ c_from_W
Definition: HadronOriginClassifier.h:46
DerivationFramework::HadronOriginClassifier::isDirectlyFSR
bool isDirectlyFSR(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:657
DerivationFramework::HadronOriginClassifier::isFromGluonQuark
bool isFromGluonQuark(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:628
DerivationFramework::HadronOriginClassifier::c_from_top
@ c_from_top
Definition: HadronOriginClassifier.h:47
Pythia8
Author: James Monk (jmonk@cern.ch)
Definition: IPythia8Custom.h:13
DerivationFramework::HadronOriginClassifier::b_from_W
@ b_from_W
Definition: HadronOriginClassifier.h:46
DerivationFramework::HadronOriginClassifier::isFromQuarkTop
bool isFromQuarkTop(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:700
DerivationFramework::HadronOriginClassifier::fillHadronMap
void fillHadronMap(std::set< const xAOD::TruthParticle * > &usedHadron, std::map< const xAOD::TruthParticle *, int > &mainHadronMap, const xAOD::TruthParticle *mainhad, const xAOD::TruthParticle *ihad, bool decayed=false) const
Definition: HadronOriginClassifier.cxx:455
DerivationFramework::HadronOriginClassifier::~HadronOriginClassifier
virtual ~HadronOriginClassifier()
Definition: HadronOriginClassifier.cxx:25
DerivationFramework::HadronOriginClassifier::IsSherpa
bool IsSherpa() const
Definition: HadronOriginClassifier.h:101
DerivationFramework::HadronOriginClassifier::m_ttbb
bool m_ttbb
Definition: HadronOriginClassifier.h:109
DerivationFramework::HadronOriginClassifier::isDirectlyMPIPythia6
static bool isDirectlyMPIPythia6(const xAOD::TruthParticle *part, bool looping)
Definition: HadronOriginClassifier.cxx:796
DerivationFramework::HadronOriginClassifier::b_MPI
@ b_MPI
Definition: HadronOriginClassifier.h:44
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
DerivationFramework::HadronOriginClassifier::GEN_id
GEN_id
Definition: HadronOriginClassifier.h:50
DerivationFramework::HadronOriginClassifier::Pythia8
@ Pythia8
Definition: HadronOriginClassifier.h:50
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:41
DerivationFramework::HadronOriginClassifier::isFromWTop
bool isFromWTop(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:573
DerivationFramework::HadronOriginClassifier::isDirectlyFSRPythia8
bool isDirectlyFSRPythia8(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:710
AthAlgTool.h
DerivationFramework::HadronOriginClassifier::m_GenUsed
GEN_id m_GenUsed
Definition: HadronOriginClassifier.h:108
DerivationFramework::HadronOriginClassifier::m_HadronPtMinCut
double m_HadronPtMinCut
Definition: HadronOriginClassifier.h:105
DerivationFramework::HadronOriginClassifier::isDirectlyFSRPythia6
bool isDirectlyFSRPythia6(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:635
DerivationFramework
THE reconstruction tool.
Definition: ParticleSortingAlg.h:24
DerivationFramework::HadronOriginClassifier::Pythia6
@ Pythia6
Definition: HadronOriginClassifier.h:50
DerivationFramework::HadronOriginClassifier::isDirectlyFromGluonQuark
static bool isDirectlyFromGluonQuark(const xAOD::TruthParticle *part, bool looping)
Definition: HadronOriginClassifier.cxx:613
DerivationFramework::HadronOriginClassifier::HadronOriginClassifier
HadronOriginClassifier(const std::string &t, const std::string &n, const IInterface *p)
Definition: HadronOriginClassifier.cxx:9
DerivationFramework::HadronOriginClassifier::isLooping
bool isLooping(const xAOD::TruthParticle *part, std::set< const xAOD::TruthParticle * > init_part=std::set< const xAOD::TruthParticle * >()) const
init_part needed to detect looping graphs (sherpa) and to switch on using barcode to resolve it witho...
Definition: HadronOriginClassifier.cxx:839
DerivationFramework::HadronOriginClassifier::isCHadronFromB
bool isCHadronFromB(const xAOD::TruthParticle *part) const
Definition: HadronOriginClassifier.cxx:435
DerivationFramework::HadronOriginClassifier::isDirectlyFromQuarkTopPythia8
bool isDirectlyFromQuarkTopPythia8(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:739
DerivationFramework::HadronOriginClassifier::isDirectlyFromQuarkTop
bool isDirectlyFromQuarkTop(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:676
DerivationFramework::HadronOriginClassifier::isDirectlyFromTop
static bool isDirectlyFromTop(const xAOD::TruthParticle *part, bool looping)
Definition: HadronOriginClassifier.cxx:544
DerivationFramework::HadronOriginClassifier::IsPythia6
bool IsPythia6() const
Definition: HadronOriginClassifier.h:100
DerivationFramework::HadronOriginClassifier::b_from_H
@ b_from_H
Definition: HadronOriginClassifier.h:48
EventInfo.h
DerivationFramework::HadronOriginClassifier::IsPythia8
bool IsPythia8() const
Definition: HadronOriginClassifier.h:99
DerivationFramework::HadronOriginClassifier::m_mcName
std::string m_mcName
Definition: HadronOriginClassifier.h:104
DerivationFramework::HadronOriginClassifier::isQuarkFromHadron
bool isQuarkFromHadron(const xAOD::TruthParticle *part) const
Definition: HadronOriginClassifier.cxx:419
DerivationFramework::HadronOriginClassifier::isDirectlyFromWTop
bool isDirectlyFromWTop(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:586
DerivationFramework::HadronOriginClassifier::passHadronSelection
bool passHadronSelection(const xAOD::TruthParticle *part) const
Definition: HadronOriginClassifier.cxx:513
DerivationFramework::HadronOriginClassifier::IsTtBb
bool IsTtBb() const
Definition: HadronOriginClassifier.h:102
DerivationFramework::HadronOriginClassifier::isFromQuarkTopPythia8
bool isFromQuarkTopPythia8(const xAOD::TruthParticle *part, bool looping) const
Definition: HadronOriginClassifier.cxx:779
DerivationFramework::HadronOriginClassifier::m_DSID
int m_DSID
Definition: HadronOriginClassifier.h:107
DerivationFramework::HadronOriginClassifier::extrajet
@ extrajet
Definition: HadronOriginClassifier.h:43
AthAlgTool
Definition: AthAlgTool.h:26
TruthEventContainer.h
DerivationFramework::HadronOriginClassifier::buildPartonsHadronsMaps
void buildPartonsHadronsMaps(std::map< const xAOD::TruthParticle *, int > &mainHadronMap, std::map< const xAOD::TruthParticle *, HF_id > &partonsOrigin) const
Definition: HadronOriginClassifier.cxx:273
DerivationFramework::HadronOriginClassifier::b_from_top
@ b_from_top
Definition: HadronOriginClassifier.h:47
DerivationFramework::HadronOriginClassifier::Sherpa
@ Sherpa
Definition: HadronOriginClassifier.h:50
DerivationFramework::HadronOriginClassifier::initialize
virtual StatusCode initialize() override
Definition: HadronOriginClassifier.cxx:30