16 ATH_CHECK( m_trackTruthOriginTool.retrieve() );
17 return StatusCode::SUCCESS;
23 std::vector< const xAOD::TruthParticle* > selected;
26 if(
accept( truth ) ) selected.push_back( truth );
31 "\t Size after selection: " << selected.size() );
36 return StatusCode::SUCCESS;
42 return getParentRec( truth, flav, 0 );
47 if ( truth ==
nullptr )
return nullptr;
49 if (
depth > 30 )
return nullptr;
51 if( flav != MC::BQUARK && flav != MC::CQUARK && flav != MC::TAU )
return nullptr;
55 if( flav == MC::CQUARK && truth->
isCharmHadron() )
return truth;
57 if( flav == MC::TAU &&
MC::isTau(truth) )
return truth;
62 if(
parent == truth ) continue ;
74 if( not m_truthTool->accept( truth ) )
return false;
77 if (m_maxEta!=-9999. and (
eta(*truth)) > m_maxEta )
return false;
78 if (m_minEta!=-9999. and (
eta(*truth)) < m_minEta )
return false;
79 if (m_minPhi!=-9999. and (
phi(*truth)) < m_minPhi )
return false;
80 if (m_maxPhi!=-9999. and (
phi(*truth)) > m_maxPhi )
return false;
81 if (m_minD0!=-9999. and (
d0(*truth)) < m_minD0 )
return false;
82 if (m_maxD0!=-9999. and (
d0(*truth)) > m_maxD0 )
return false;
83 if (m_minZ0!=-9999. and (
z0(*truth)) < m_minZ0 )
return false;
84 if (m_maxZ0!=-9999. and (
z0(*truth)) > m_maxZ0 )
return false;
85 if (m_minQoPT!=-9999. and (
qOverPT(*truth)) < m_minQoPT )
return false;
86 if (m_maxQoPT!=-9999. and (
qOverPT(*truth)) > m_maxQoPT )
return false;
87 if (m_minAbsEta!=-9999. and std::fabs(
eta(*truth)) < m_minAbsEta )
return false;
88 if (m_minAbsPhi!=-9999. and std::fabs(
phi(*truth)) < m_minAbsPhi )
return false;
89 if (m_maxAbsPhi!=-9999. and std::fabs(
phi(*truth)) > m_maxAbsPhi )
return false;
90 if (m_minAbsD0!=-9999. and std::fabs(
d0(*truth)) < m_minAbsD0 )
return false;
91 if (m_maxAbsD0!=-9999. and std::fabs(
d0(*truth)) > m_maxAbsD0 )
return false;
92 if (m_minAbsZ0!=-9999. and std::fabs(
z0(*truth)) < m_minAbsZ0 )
return false;
93 if (m_maxAbsZ0!=-9999. and std::fabs(
z0(*truth)) > m_maxAbsZ0 )
return false;
94 if (m_minAbsQoPT!=-9999. and std::fabs(
qOverPT(*truth)) < m_minAbsQoPT )
return false;
95 if (m_maxAbsQoPT!=-9999. and std::fabs(
qOverPT(*truth)) > m_maxAbsQoPT )
return false;
96 if (m_isHadron and not
isHadron(*truth) )
return false;
97 if (m_isPion and not
isPion(*truth) )
return false;
99 if ( m_isFromTau or m_isFromB or m_isFromC or m_isFromHeavyFlav or m_isFromLightFlav ) {
101 if( m_isFromTau ) truthParent = getParent(truth, MC::TAU);
102 if( m_isFromB ) truthParent = getParent(truth, MC::BQUARK);
103 if( m_isFromC ) truthParent = getParent(truth, MC::CQUARK);
104 if(m_isFromHeavyFlav or m_isFromLightFlav){
107 truthParent = truthParentB ? truthParentB : (truthParentC ? truthParentC :
nullptr);
109 if (m_isFromLightFlav and truthParent )
return false;
110 if (not m_isFromLightFlav and not truthParent)
return false;
111 if (m_minParentPt!=-9999. and truthParent->pt() < m_minParentPt )
return false;
112 if (m_maxParentPt!=-9999. and truthParent->pt() > m_maxParentPt )
return false;