|  | ATLAS Offline Software
    | 
 
 
 
#include <TruthParticleCnvTool.h>
AlgTool that converts, on the fly, on demand, each GenParticle to a TruthParticle and builds the TruthParticleContainer. So the GEN_AOD and TruthParticleContainer are identical in contents, only the interfaces are different: the TruthParticle class has the same interface as other AOD particles. Hence the analysis tools can operate on all the AOD particles (ie: including Mc Truth). When the AOD is created, the TruthParticleContainer is empty. When the user requests the TruthParticleContainer in his/her analysis code, a custom converter is triggered where by the GEN_AOD is convertered into the TruthParticleContainer using the TruthParticleCnvTool.
In pile-up events, the many GenEvent are grouped into 5 TruthParticleContainer according to the classification of : https://twiki.cern.ch/twiki/bin/viewauth/Atlas/PileupDigitization#Arrangement_of_Truth_Information 
Definition at line 59 of file TruthParticleCnvTool.h.
◆ IsolTool_t
◆ TruthParticleCnvTool()
      
        
          | TruthParticleCnvTool::TruthParticleCnvTool | ( | const std::string & | type, | 
        
          |  |  | const std::string & | name, | 
        
          |  |  | const IInterface * | parent | 
        
          |  | ) |  |  | 
      
 
Constructor with parameters: 
Public methods: 
Constructors 
Definition at line 48 of file TruthParticleCnvTool.cxx.
   61   declareProperty( 
"DataType", 
 
   63            "Type of data we are dealing with (Full/Fast/Truth...)" );
 
   65   declareProperty( 
"TruthIsolationTool",
 
   67            "Pointer to the TruthIsolationTool to be able to compute " 
   68            "transverse energy isolations for various isolation cones cuts. " 
   69            "See McParticleEvent/TruthParticleParameters.h for cone cuts." );
 
   72   declareProperty( 
"DoEtIsolations",
 
   74            "Switch to compute or not the Et-isolations for TruthParticle " 
   75            "(and their underlying @c HepMC::GenParticle).\n" 
   76            "Default is to not compute these Et-isolations (and save CPU)." );
 
   80   declareProperty( 
"SelectSignalType",
 
   82            "Switch to select different type of signal\n" 
   84            " hard scatter plus minbias  1\n"  
   86            "Default is hard scatter only." );
 
   88   declareInterface<ITruthParticleCnvTool>(
this);
 
 
 
 
◆ ~TruthParticleCnvTool()
  
  | 
        
          | TruthParticleCnvTool::~TruthParticleCnvTool | ( |  | ) |  |  | virtual | 
 
 
◆ convert()
Converts a McEventCollection into an TruthParticleContainer (ie: converts it into an AOD compliant collection). 
Const methods:
@in mcEvts the McEventCollection holding the HepMC::GenEvent we want to convert into a TruthParticleContainer @in genEvtIndex the index to the HepMC::GenEvent to be converted @out mcParts a valid pointer to a TruthParticleContainer which will be filled with adaptors to HepMC::GenParticles. 
Get GenEvent from McEventCollection
Create a map to enhance access between GenParticles and TruthParticles
Definition at line 224 of file TruthParticleCnvTool.cxx.
  229   ATH_MSG_DEBUG(
"Converting McEventCollection to TruthParticleContainer");
 
  231   if ( 
nullptr == 
m_pdt ) {
 
  233           "TruthParticleContainer if NO ParticleDataTable is "\
 
  235     return StatusCode::FAILURE;
 
  238   if ( 
nullptr == mcCollection ) {
 
  240     return StatusCode::RECOVERABLE;
 
  243   if ( mcCollection->size() <= genEventIndex ) {
 
  246             << 
"Requested element nbr : " << genEventIndex << 
" !!");
 
  247     return StatusCode::RECOVERABLE;
 
  253   ATH_MSG_DEBUG(
"Retrieve the GenEvent from given McEventCollection");
 
  254   const HepMC::GenEvent * 
evt = (*mcCollection)[genEventIndex];
 
  255   container->setGenEvent( mcCollection, genEventIndex, sg );
 
  258   container->reserve( container->size() + 
evt->particles_size() );
 
  266   auto bcmapatt = 
evt->attribute<HepMC::GenEventBarcodes>(
"barcodes");
 
  267   if (!bcmapatt) 
ATH_MSG_ERROR(
"TruthParticleCnvTool.cxx: Event does not contain barcodes attribute"); 
 
  268   std::map<int, HepMC3::ConstGenParticlePtr> bcmap = bcmapatt->barcode_to_particle_map();
 
  269   for (
const auto &[bc,hepMcPart]: bcmap) {
 
  271   for (
auto hepMcPart: *
evt) {
 
  276     container->push_back( mcPart );
 
  279       visitor->
visit( mcPart );
 
  286       ATH_MSG_ERROR(
"TruthParticle is not wrapping the GenParticle : "  
  287             << hepMcPart << 
" !!");
 
  290     bcToMcPart[ mcLink.compress() ] = mcPart;
 
  296   container->setParticles( bcToMcPart );
 
  301     const std::string& etIsolName 
 
  303     if ( etIsolName.empty() ) {
 
  305               "TruthEtIsolations container (requested: ["  
  306               << container->genEventName() << 
"])");
 
  307       return StatusCode::RECOVERABLE;
 
  311     if ( !evtStore()->
retrieve( etIsols, etIsolName ).isSuccess() ) {
 
  312       ATH_MSG_WARNING(
"Could not retrieve the TruthEtIsolations container at [" 
  313               << etIsolName << 
"] !!");
 
  314       return StatusCode::RECOVERABLE;
 
  319     container->setEtIsolations( etIsols, genEventIndex );
 
  322   return StatusCode::SUCCESS;
 
 
 
 
◆ execute() [1/2]
  
  | 
        
          | StatusCode TruthParticleCnvTool::execute | ( |  | ) | const |  | overridevirtual | 
 
 
◆ execute() [2/2]
  
  | 
        
          | StatusCode TruthParticleCnvTool::execute | ( | const EventContext & | ctx | ) | const |  | overridevirtual | 
 
Definition at line 152 of file TruthParticleCnvTool.cxx.
  158   ATH_CHECK(mcPartsOutputWriteHandle.record(std::make_unique<TruthParticleContainer>()));  
 
  160   if (!mcPartsOutputWriteHandle.isValid()){
 
  162     return StatusCode::FAILURE;
 
  168   if (!mcEventsReadHandle.isValid()){
 
  173              << 
"] will be EMPTY !!");
 
  174      return StatusCode::RECOVERABLE;
 
  177   ATH_MSG_DEBUG(
" Found McEventCollection of size = "<< mcEventsReadHandle->size() );
 
  181   std::size_t genEventIndex = 0;
 
  183   bool all_good = 
true;
 
  189   ATH_MSG_DEBUG(
" Found McEventCollection iterators : "<< (fEvt-mcEventsReadHandle->begin()) << 
" to "<< (lEvt-mcEventsReadHandle->begin()) );
 
  192     const HepMC::GenEvent* 
evt = *
it;
 
  195     if (
nullptr == 
evt) {
 
  198     genEventIndex = (
it - mcEventsReadHandle->begin());
 
  202     if (!this->
convert( mcEventsReadHandle.ptr(), genEventIndex, mcPartsOutputWriteHandle.ptr(), dummyVisitor ).isSuccess()) {
 
  210   mcPartsOutputWriteHandle->setGenEvent( mcEventsReadHandle.ptr(), (fEvt - mcEventsReadHandle->begin() ) );
 
  214     ? StatusCode::SUCCESS
 
  215     : StatusCode::RECOVERABLE;
 
 
 
 
◆ initialize()
  
  | 
        
          | StatusCode TruthParticleCnvTool::initialize | ( |  | ) |  |  | overridevirtual | 
 
Athena Algorithm's Hooks. 
Definition at line 100 of file TruthParticleCnvTool.cxx.
  106   if ( !partPropSvc.retrieve().isSuccess() ) {
 
  107     ATH_MSG_ERROR(
" Could not initialize Particle Properties Service");
 
  108     return StatusCode::FAILURE;
 
  111   m_pdt = partPropSvc->PDT();
 
  112   if ( 
nullptr == 
m_pdt ) {
 
  113     ATH_MSG_ERROR(
"Could not retrieve HepPDT::ParticleDataTable from "\
 
  114           "ParticleProperties Service !!");
 
  115     return StatusCode::FAILURE;
 
  136     (
" DoEtIsolations:       [" << std::boolalpha 
 
  143   return StatusCode::SUCCESS;
 
 
 
 
◆ setDataType()
  
  | 
        
          | void TruthParticleCnvTool::setDataType | ( | const int | type | ) |  |  | inline | 
 
 
◆ setVxCandidateName()
  
  | 
        
          | void TruthParticleCnvTool::setVxCandidateName | ( | const std::string & | name | ) |  |  | inline | 
 
 
◆ m_dataType
◆ m_dataType_int
  
  | 
        
          | int TruthParticleCnvTool::m_dataType_int |  | private | 
 
 
◆ m_doEtIsolation
  
  | 
        
          | BooleanProperty TruthParticleCnvTool::m_doEtIsolation |  | protected | 
 
 
◆ m_isolationTool
◆ m_mcEventsReadHandleKey
◆ m_mcPartsOutputWriteHandleKey
◆ m_pdt
  
  | 
        
          | const HepPDT::ParticleDataTable* TruthParticleCnvTool::m_pdt |  | private | 
 
 
◆ m_selectSignalType
◆ m_selectSignalTypeProp
  
  | 
        
          | int TruthParticleCnvTool::m_selectSignalTypeProp |  | private | 
 
 
◆ m_vxCandidatesName
  
  | 
        
          | std::string TruthParticleCnvTool::m_vxCandidatesName |  | private | 
 
 
The documentation for this class was generated from the following files:
 
def retrieve(aClass, aKey=None)
SG::ReadHandleKey< McEventCollection > m_mcEventsReadHandleKey
ReadHandleKey for the McEventCollection the TruthParticles will be made from.
Const iterator class for DataVector/DataList.
virtual int pdgId() const
Return enum indicating particle id the enum file is available in Event/EventKernel/PdtPdg....
const HepPDT::ParticleDataTable * m_pdt
Particle Property service.
int signal_process_id(const GenEvent &e)
ToolHandle< ITruthIsolationTool > IsolTool_t
PileuType_t
define some Pile-up classification Important : this classification is copied in McParticleAlgs/python...
ParticleDataType::DataType m_dataType
Type of data we are dealing with (Full/Fast/Truth/...)
std::string m_vxCandidatesName
static IProxyDict * store()
Fetch the current store.
IsolTool_t m_isolationTool
Pointer to the ITruthIsolationTool to be able to retrieve the previously computed transverse energy i...
const std::string & key() const
Return the StoreGate ID for the referenced object.
HepMC::ConstGenParticlePtr genParticle() const
Retrieve the GenParticle this TruthParticle has been made from (if any)
void setGenEventIndex(size_t index)
set the GenEvent index
a link optimized in size for a GenParticle in a McEventCollection
BooleanProperty m_doEtIsolation
Switch to compute or not the Et-isolations for TruthParticle (and their underlying HepMC::GenParticle...
virtual StatusCode execute() const override
PileUpClassification::PileuType_t m_selectSignalType
Type of truth particle we want to create.
TruthParticle_v1 TruthParticle
Typedef to implementation.
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
std::unordered_map< long, const TruthParticle * > Map_t
barcode to TruthParticle dictionary
double charge(const T &p)
int m_selectSignalTypeProp
Type of truth particle we want to create (property to be set by jobO)
virtual void visit(TruthParticle *truthParticle) const =0
The method to visit a TruthParticle to apply further modifications to the instance at hand.
#define ATH_MSG_WARNING(x)
SG::WriteHandleKey< TruthParticleContainer > m_mcPartsOutputWriteHandleKey
Output TruthParticle WriteHandleKey (built from the McEventCollection)
void setDataType(const int type)
Inline methods:
void setCharge(const ChargeType charge)
Set the charge of this TruthParticle.
StatusCode convert(const McEventCollection *mcEvts, const unsigned int genEvtIndex, TruthParticleContainer *mcParts, const ITruthParticleVisitor *visitor) const override
Converts a McEventCollection into an TruthParticleContainer (ie: converts it into an AOD compliant co...
static void findEventIterators(PileuType_t putype, McEventCollection::const_iterator &fEvt, McEventCollection::const_iterator &lEvt)
Find interval [fEvt,lEvt] containing all GenEvents of type putype from the McEventCollection.