The Gaudi Framework  v33r0 (d5ea422b)
Gaudi::ParticlePropertySvc Class Reference

This service provides access to particle properties. More...

#include <src/ParticlePropertySvc.h>

Inheritance diagram for Gaudi::ParticlePropertySvc:
Collaboration diagram for Gaudi::ParticlePropertySvc:

Public Types

typedef ParticlePropertymapped_type
 
typedef std::map< int, mapped_typeMapID
 
typedef std::map< std::string, mapped_typeMapName
 
typedef std::map< int, mapped_typeMapStdHepID
 
typedef std::map< int, mapped_typeMapPythiaID
 
typedef VectPP::const_iterator const_iterator
 
typedef VectPP::iterator iterator
 
typedef std::vector< ParticleProperty * > VectPP
 
- Public Types inherited from extends< Service, IParticlePropertySvc >
using base_class = extends
 Typedef to this class. More...
 
using extend_interfaces_base = extend_interfaces< Interfaces... >
 Typedef to the base of this class. More...
 
- Public Types inherited from Service
using Factory = Gaudi::PluginService::Factory< IService *(const std::string &, ISvcLocator *)>
 
- Public Types inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
using PropertyHolderImpl = PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 Typedef used to refer to this class from derived classes, as in. More...
 
- Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
using base_class = CommonMessaging
 
- Public Types inherited from extend_interfaces< Interfaces... >
using ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type
 take union of the ext_iids of all Interfaces... More...
 

Public Member Functions

StatusCode initialize () override
 Initialise the service. More...
 
StatusCode finalize () override
 Finalise the service. More...
 
StatusCode push_back (const std::string &particle, int geantId, int jetsetId, double charge, double mass, double tlife, const std::string &evtName, int pythiaId, double maxWidth) override
 Create a new particle property. More...
 
StatusCode push_back (ParticleProperty *pp) override
 Add a new particle property. More...
 
const_iterator begin () const override
 Get a const reference to the beginning of the container. More...
 
const_iterator end () const override
 Get a const reference to the end of the container. More...
 
int size () const override
 Get the container size. More...
 
ParticlePropertyfind (int geantId) override
 Retrieve a property by geant3 id. More...
 
ParticlePropertyfind (const std::string &name) override
 Retrieve a property by particle name. More...
 
ParticlePropertyfindByStdHepID (int stdHepId) override
 Retrieve a property by StdHep id. More...
 
ParticlePropertyfindByPythiaID (int pythiaID) override
 Retrieve a property by Pythia id. More...
 
StatusCode erase (int geantId) override
 Erase a property by geant3 id. More...
 
StatusCode erase (const std::string &name) override
 Erase a property by particle name. More...
 
StatusCode eraseByStdHepID (int stdHepId) override
 Erase a property by StdHep id ??? More...
 
 ParticlePropertySvc (const std::string &name, ISvcLocator *svc)
 Standard Constructor. More...
 
- Public Member Functions inherited from extends< Service, IParticlePropertySvc >
void * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast. More...
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface. More...
 
std::vector< std::stringgetInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
- Public Member Functions inherited from Service
const std::stringname () const override
 Retrieve name of the service. More...
 
StatusCode configure () override
 
StatusCode initialize () override
 
StatusCode start () override
 
StatusCode stop () override
 
StatusCode finalize () override
 
StatusCode terminate () override
 
Gaudi::StateMachine::State FSMState () const override
 
Gaudi::StateMachine::State targetFSMState () const override
 
StatusCode reinitialize () override
 
StatusCode restart () override
 
StatusCode sysInitialize () override
 Initialize Service. More...
 
StatusCode sysStart () override
 Initialize Service. More...
 
StatusCode sysStop () override
 Initialize Service. More...
 
StatusCode sysFinalize () override
 Finalize Service. More...
 
StatusCode sysReinitialize () override
 Re-initialize the Service. More...
 
StatusCode sysRestart () override
 Re-initialize the Service. More...
 
 Service (std::string name, ISvcLocator *svcloc)
 Standard Constructor. More...
 
SmartIF< ISvcLocator > & serviceLocator () const override
 Retrieve pointer to service locator. More...
 
StatusCode setProperties ()
 Method for setting declared properties to the values specified for the job. More...
 
template<class T >
StatusCode service (const std::string &name, const T *&psvc, bool createIf=true) const
 Access a service by name, creating it if it doesn't already exist. More...
 
template<class T >
StatusCode service (const std::string &name, T *&psvc, bool createIf=true) const
 
template<typename IFace = IService>
SmartIF< IFace > service (const std::string &name, bool createIf=true) const
 
template<class T >
StatusCode service (const std::string &svcType, const std::string &svcName, T *&psvc) const
 Access a service by name and type, creating it if it doesn't already exist. More...
 
template<class T >
StatusCode declareTool (ToolHandle< T > &handle, std::string toolTypeAndName, bool createIf=true)
 Declare used tool. More...
 
SmartIF< IAuditorSvc > & auditorSvc () const
 The standard auditor service.May not be invoked before sysInitialize() has been invoked. More...
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 PropertyHolder ()=default
 
Gaudi::Details::PropertyBasedeclareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, TYPE &value, const std::string &doc="none")
 Helper to wrap a regular data member and use it as a regular property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, Gaudi::Property< TYPE, VERIFIER, HANDLERS > &prop, const std::string &doc="none")
 Declare a PropertyBase instance setting name and documentation. More...
 
Gaudi::Details::PropertyBasedeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property. More...
 
StatusCode setProperty (const Gaudi::Details::PropertyBase &p) override
 set the property form another property More...
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string More...
 
StatusCode setProperty (const std::string &n, const std::string &v) override
 set the property from name and the value More...
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value More...
 
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property More...
 
const Gaudi::Details::PropertyBasegetProperty (const std::string &name) const override
 get the property by name More...
 
StatusCode getProperty (const std::string &n, std::string &v) const override
 convert the property to the string More...
 
const std::vector< Gaudi::Details::PropertyBase * > & getProperties () const override
 get all properties More...
 
bool hasProperty (const std::string &name) const override
 Return true if we have a property with the given name. More...
 
 PropertyHolder (const PropertyHolder &)=delete
 
PropertyHolderoperator= (const PropertyHolder &)=delete
 
- Public Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level msgLevel () const
 get the cached level (originally extracted from the embedded MsgStream) More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 
MSG::Level outputLevel () const
 Backward compatibility function for getting the output level. More...
 
- Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor. More...
 
const SmartIF< IMessageSvc > & msgSvc () const
 The standard message service. More...
 
MsgStreammsgStream () const
 Return an uninitialized MsgStream. More...
 
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts. More...
 
MsgStreamalways () const
 shortcut for the method msgStream(MSG::ALWAYS) More...
 
MsgStreamfatal () const
 shortcut for the method msgStream(MSG::FATAL) More...
 
MsgStreamerr () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamerror () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamwarning () const
 shortcut for the method msgStream(MSG::WARNING) More...
 
MsgStreaminfo () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MsgStreamdebug () const
 shortcut for the method msgStream(MSG::DEBUG) More...
 
MsgStreamverbose () const
 shortcut for the method msgStream(MSG::VERBOSE) More...
 
MsgStreammsg () const
 shortcut for the method msgStream(MSG::INFO) More...
 

Protected Member Functions

const ParticlePropertyanti (const ParticleProperty *pp) const
 helper (protected) function to find an antiparticle for the given particle ID (StdHepID) More...
 
StatusCode setAntiParticles ()
 helper (protected) function to set the valid particle<-->antiparticle relations More...
 
StatusCode rebuild ()
 rebuild "the linear container" from the map More...
 
StatusCode erase (const ParticleProperty *pp)
 remove particle property from all maps More...
 
StatusCode parse (const std::string &file)
 parse the file More...
 
StatusCode parse ()
 Parses the file and fill all the maps. More...
 
StatusCode addParticles ()
 
bool diff (const ParticleProperty *o, const ParticleProperty *n, const MSG::Level l=MSG::DEBUG) const
 
- Protected Member Functions inherited from Service
 ~Service () override
 Standard Destructor. More...
 
int outputLevel () const
 get the Service's output level More...
 
- Protected Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
Gaudi::Details::PropertyBaseproperty (const std::string &name) const
 
- Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level setUpMessaging () const
 Set up local caches. More...
 
MSG::Level resetMessaging ()
 Reinitialize internal states. More...
 
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream. More...
 

Private Attributes

Gaudi::Property< std::stringm_filename
 
Gaudi::Property< std::vector< std::string > > m_other {this, "OtherFiles", {}, "additional file names"}
 
Gaudi::Property< std::vector< std::string > > m_particles
 
VectPP m_vectpp
 Vector of all particle properties. More...
 
MapID m_idmap
 Map for geant IDs. More...
 
MapName m_namemap
 Map for particle names. More...
 
MapStdHepID m_stdhepidmap
 Map for StdHep Ids. More...
 
MapPythiaID m_pythiaidmap
 Map for Pythia Ids. More...
 
std::set< std::unique_ptr< ParticleProperty > > m_owned
 
std::set< std::stringm_replaced
 
SmartIF< IFileAccessm_fileAccess
 

Additional Inherited Members

- Protected Attributes inherited from Service
Gaudi::StateMachine::State m_state = Gaudi::StateMachine::OFFLINE
 Service state. More...
 
Gaudi::StateMachine::State m_targetState = Gaudi::StateMachine::OFFLINE
 Service state. More...
 
Gaudi::Property< int > m_outputLevel {this, "OutputLevel", MSG::NIL, "output level"}
 
Gaudi::Property< bool > m_auditInit {this, "AuditServices", false, " unused"}
 
Gaudi::Property< bool > m_auditorInitialize {this, "AuditInitialize", false, "trigger auditor on initialize()"}
 
Gaudi::Property< bool > m_auditorStart {this, "AuditStart", false, "trigger auditor on start()"}
 
Gaudi::Property< bool > m_auditorStop {this, "AuditStop", false, "trigger auditor on stop()"}
 
Gaudi::Property< bool > m_auditorFinalize {this, "AuditFinalize", false, "trigger auditor on finalize()"}
 
Gaudi::Property< bool > m_auditorReinitialize {this, "AuditReinitialize", false, "trigger auditor on reinitialize()"}
 
Gaudi::Property< bool > m_auditorRestart {this, "AuditRestart", false, "trigger auditor on restart()"}
 
SmartIF< IAuditorSvcm_pAuditorSvc
 Auditor Service. More...
 

Detailed Description

This service provides access to particle properties.

The settable property of this service is the ParticlePropertiesFile, an ASCII file containing the list of properties for the particles. The default file is: "$PARAMFILESROOT/data/ParticleTable.txt" or if $PARAMFILESROOT is not defined "ParticleTable.txt"

Author
Iain Last
Gloria Corti 8/11/1999 change default file from $CDF/particle.cdf to $LHCBDBASE/cdf/particle.cdf on Unix and use environment variable also on WinNT Also introduce finding of particle by StdHepID
Vanya BELYAEV
Date
2006-09-22 1) Modified to add possibility to redefine properties of existing particles and to read additional files. New property "OtherFiles" (default is empty vector) is introduces. Service parsed additional files after the main one.
// read additional properties
ParticlePropertySvc.OtherFiles = {
"$SOMELOCATION1/file1.txt" ,
"$SOMELOCATION2/file2.txt"
} ;

2) Add possibility to modify only certain particles through the new property "Particles" (default is empty list), Each line is interpreted as a line in particle data table, e.g.

// redefine the properties of H_20 and H_30 particles:
ParticlePropertySvc.Particles = {
"H_20 88 35 0.0 120.0 9.4e-26 Higgs'0 35 0.0e+00" ,
"H_30 89 36 0.0 40.0 1.0e-12 A0 36 0.0e+00"
} ;

The replaces/modified particles are reported.

Definition at line 81 of file ParticlePropertySvc.h.

Member Typedef Documentation

◆ const_iterator

typedef VectPP::const_iterator IParticlePropertySvc::const_iterator

Definition at line 36 of file IParticlePropertySvc.h.

◆ iterator

typedef VectPP::iterator IParticlePropertySvc::iterator

Definition at line 37 of file IParticlePropertySvc.h.

◆ MapID

typedef std::map<int, mapped_type> Gaudi::ParticlePropertySvc::MapID

Definition at line 85 of file ParticlePropertySvc.h.

◆ MapName

typedef std::map<std::string, mapped_type> Gaudi::ParticlePropertySvc::MapName

Definition at line 86 of file ParticlePropertySvc.h.

◆ mapped_type

typedef ParticleProperty* Gaudi::ParticlePropertySvc::mapped_type

Definition at line 84 of file ParticlePropertySvc.h.

◆ MapPythiaID

typedef std::map<int, mapped_type> Gaudi::ParticlePropertySvc::MapPythiaID

Definition at line 88 of file ParticlePropertySvc.h.

◆ MapStdHepID

typedef std::map<int, mapped_type> Gaudi::ParticlePropertySvc::MapStdHepID

Definition at line 87 of file ParticlePropertySvc.h.

◆ VectPP

Constructor & Destructor Documentation

◆ ParticlePropertySvc()

Gaudi::ParticlePropertySvc::ParticlePropertySvc ( const std::string name,
ISvcLocator svc 
)

Standard Constructor.

Parameters
nameString with service name
svcPointer to service locator interface
Todo:
: remove reference to LHCb-specific environment variable

Definition at line 56 of file ParticlePropertySvc.cpp.

56  : base_class( name, svc ) {
58  // Redefine the default name:
59  if ( System::getEnv( "PARAMFILESROOT", m_filename.value() ) ) { m_filename.value() += "/data/ParticleTable.txt"; }
60  }
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition: System.cpp:379
extends base_class
Typedef to this class.
Definition: extends.h:24
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:284
Gaudi::Property< std::string > m_filename

Member Function Documentation

◆ addParticles()

StatusCode Gaudi::ParticlePropertySvc::addParticles ( )
protected

Definition at line 348 of file ParticlePropertySvc.cpp.

348  {
349  // loop over all "explicit" particles
350  for ( const auto& item : m_particles ) {
351  std::istringstream input( item );
352  // get the name
353  std::string p_name;
354  int p_geant;
355  int p_jetset;
356  double p_charge;
357  double p_mass;
358  double p_ltime;
359  std::string p_evtgen;
360  int p_pythia;
361  double p_maxwid;
362  if ( input >> p_name >> p_geant >> p_jetset >> p_charge >> p_mass >> p_ltime >> p_evtgen >> p_pythia >>
363  p_maxwid ) {
364  always() << " Add/Modify the particle: "
365  << " name='" << p_name << "'"
366  << " geant=" << p_geant << " jetset=" << p_jetset << " charge=" << p_charge << " mass=" << p_mass
367  << " ltime=" << p_ltime << " evtgen='" << p_evtgen << "'"
368  << " pythia=" << p_pythia << " maxwid=" << p_maxwid << endmsg;
369  //
370  StatusCode sc = push_back( p_name, p_geant, p_jetset, p_charge, p_mass * Gaudi::Units::GeV,
371  p_ltime * Gaudi::Units::s, p_evtgen, p_pythia, p_maxwid * Gaudi::Units::GeV );
372  if ( sc.isFailure() ) { return sc; } // RETURN
373  } else {
374  error() << " could not parse '" << item << "'" << endmsg;
375  return StatusCode::FAILURE; // RETURN
376  }
377  }
378  //
379  return StatusCode::SUCCESS;
380  }
constexpr double s
constexpr static const auto SUCCESS
Definition: StatusCode.h:96
MsgStream & always() const
shortcut for the method msgStream(MSG::ALWAYS)
StatusCode push_back(const std::string &particle, int geantId, int jetsetId, double charge, double mass, double tlife, const std::string &evtName, int pythiaId, double maxWidth) override
Create a new particle property.
STL class.
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
constexpr static const auto FAILURE
Definition: StatusCode.h:97
Gaudi::Property< std::vector< std::string > > m_particles
constexpr double GeV
bool isFailure() const
Definition: StatusCode.h:141
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202

◆ anti()

const ParticleProperty * Gaudi::ParticlePropertySvc::anti ( const ParticleProperty pp) const
protected

helper (protected) function to find an antiparticle for the given particle ID (StdHepID)

Helper (protected) function to find an antiparticle for the given particle ID (StdHepID)

Parameters
pppointer to particle property
Returns
pointer to antiparticle

Definition at line 296 of file ParticlePropertySvc.cpp.

296  {
297  if ( !pp ) { return nullptr; }
298  const int ID = pp->pdgID();
299  const int antiID = -1 * ID;
300  for ( const auto& ap : m_vectpp ) {
301  if ( ap && antiID == ap->pdgID() ) { return ap; } // RETURN
302  };
303  //
304  return pp; // RETURN
305  }
VectPP m_vectpp
Vector of all particle properties.

◆ begin()

const_iterator Gaudi::ParticlePropertySvc::begin ( ) const
inlineoverride

Get a const reference to the beginning of the container.

Definition at line 119 of file ParticlePropertySvc.h.

119 { return m_vectpp.begin(); }
T begin(T... args)
VectPP m_vectpp
Vector of all particle properties.

◆ diff()

bool Gaudi::ParticlePropertySvc::diff ( const ParticleProperty o,
const ParticleProperty n,
const MSG::Level  l = MSG::DEBUG 
) const
protected

Definition at line 388 of file ParticlePropertySvc.cpp.

388  {
389  //
390  if ( o == n ) { return false; }
391  //
392  auto& log = msgStream();
393  log << l;
394  if ( !o || !n ) {
395  log << MSG::WARNING << " ParticleProperty* point to NULL" << endmsg;
396  return true; // RETURN
397  }
398  //
399  bool result = false;
400  if ( o->particle() != n->particle() ) {
401  result = true;
402  log << " Name:'" << o->particle() << "'/'" << n->particle() << "'";
403  }
404  if ( o->geantID() != n->geantID() ) {
405  result = true;
406  log << " G3ID:" << o->geantID() << "/" << n->geantID() << "'";
407  }
408  if ( o->pdgID() != n->pdgID() ) {
409  result = true;
410  log << " PDGID:" << o->pdgID() << "/" << n->pdgID() << "'";
411  }
412  if ( o->pythiaID() != n->pythiaID() ) {
413  result = true;
414  log << " PYID:" << o->pythiaID() << "/" << n->pythiaID() << "'";
415  }
416  if ( o->charge() != n->charge() ) {
417  result = true;
418  log << " Q:" << o->charge() << "/" << n->charge() << "'";
419  }
420  if ( o->mass() != n->mass() ) {
421  result = true;
422  log << " M:" << o->mass() << "/" << n->mass() << "'";
423  }
424  if ( o->lifetime() != n->lifetime() ) {
425  result = true;
426  log << " T:" << o->lifetime() << "/" << n->lifetime() << "'";
427  }
428  if ( o->evtGenName() != n->evtGenName() ) {
429  result = true;
430  log << " EvtGen:" << o->evtGenName() << "/" << n->evtGenName() << "'";
431  }
432  if ( o->maxWidth() != n->maxWidth() ) {
433  result = true;
434  log << " WMAX:" << o->maxWidth() << "/" << n->maxWidth() << "'";
435  }
436  if ( result ) { log << endmsg; }
437  //
438  return result;
439  }
int pythiaID() const
Get the Pythia ID.
double maxWidth() const
Get the max width deviation.
int pdgID() const
Get the PDG (= JETSET) ID.
MsgStream & msgStream() const
Return an uninitialized MsgStream.
dictionary l
Definition: gaudirun.py:543
const std::string & evtGenName() const
Get the EvtGen name.
int geantID() const
Get the GEANT3 ID.
const std::string & particle() const
Get the particle name.
double mass() const
Get the particle mass.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202
double lifetime() const
Get the particle lifetime.
double charge() const
Get the particle charge.

◆ end()

const_iterator Gaudi::ParticlePropertySvc::end ( ) const
inlineoverride

Get a const reference to the end of the container.

Definition at line 121 of file ParticlePropertySvc.h.

121 { return m_vectpp.end(); }
T end(T... args)
VectPP m_vectpp
Vector of all particle properties.

◆ erase() [1/3]

StatusCode Gaudi::ParticlePropertySvc::erase ( int  geantId)
inlineoverride

Erase a property by geant3 id.

Definition at line 133 of file ParticlePropertySvc.h.

133 { return erase( find( geantId ) ); }
StatusCode erase(int geantId) override
Erase a property by geant3 id.
ParticleProperty * find(int geantId) override
Retrieve a property by geant3 id.

◆ erase() [2/3]

StatusCode Gaudi::ParticlePropertySvc::erase ( const std::string name)
inlineoverride

Erase a property by particle name.

Definition at line 135 of file ParticlePropertySvc.h.

135 { return erase( find( name ) ); }
StatusCode erase(int geantId) override
Erase a property by geant3 id.
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:284
ParticleProperty * find(int geantId) override
Retrieve a property by geant3 id.

◆ erase() [3/3]

StatusCode Gaudi::ParticlePropertySvc::erase ( const ParticleProperty pp)
protected

remove particle property from all maps

Definition at line 214 of file ParticlePropertySvc.cpp.

214  {
215  if ( !pp ) { return StatusCode::FAILURE; }
216 
217  _remove_( m_idmap, pp );
218  _remove_( m_namemap, pp );
219  _remove_( m_stdhepidmap, pp );
220  _remove_( m_pythiaidmap, pp );
221  //
222  return rebuild();
223  }
StatusCode rebuild()
rebuild "the linear container" from the map
MapName m_namemap
Map for particle names.
MapStdHepID m_stdhepidmap
Map for StdHep Ids.
constexpr static const auto FAILURE
Definition: StatusCode.h:97
MapID m_idmap
Map for geant IDs.
MapPythiaID m_pythiaidmap
Map for Pythia Ids.

◆ eraseByStdHepID()

StatusCode Gaudi::ParticlePropertySvc::eraseByStdHepID ( int  stdHepId)
inlineoverride

Erase a property by StdHep id ???

Definition at line 137 of file ParticlePropertySvc.h.

137 { return erase( findByStdHepID( stdHepId ) ); }
StatusCode erase(int geantId) override
Erase a property by geant3 id.
ParticleProperty * findByStdHepID(int stdHepId) override
Retrieve a property by StdHep id.

◆ finalize()

StatusCode Gaudi::ParticlePropertySvc::finalize ( )
override

Finalise the service.

finalize

finalize the base class

Definition at line 115 of file ParticlePropertySvc.cpp.

115  {
116  if ( !m_other.empty() ) {
117  info() << "Additional Properties have been read from files: " << Gaudi::Utils::toString( m_other ) << endmsg;
118  }
119 
120  if ( !m_replaced.empty() ) {
121  always() << "Properties have been redefined for " << m_replaced.size()
122  << " particles : " << Gaudi::Utils::toString( m_replaced ) << endmsg;
123  }
124 
126 
128  return Service::finalize();
129  }
T empty(T... args)
StatusCode finalize() override
Definition: Service.cpp:174
std::string toString(const TYPE &obj)
the generic implementation of the type conversion to the string
Definition: ToStream.h:341
MsgStream & always() const
shortcut for the method msgStream(MSG::ALWAYS)
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
SmartIF< IFileAccess > m_fileAccess
std::set< std::string > m_replaced
T size(T... args)
Gaudi::Property< std::vector< std::string > > m_other
void reset(TYPE *ptr=nullptr)
Set the internal pointer to the passed one disposing of the old one.
Definition: SmartIF.h:96
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202

◆ find() [1/2]

ParticleProperty* Gaudi::ParticlePropertySvc::find ( int  geantId)
inlineoverride

Retrieve a property by geant3 id.

Definition at line 125 of file ParticlePropertySvc.h.

125 { return m_idmap[geantId]; }
MapID m_idmap
Map for geant IDs.

◆ find() [2/2]

ParticleProperty* Gaudi::ParticlePropertySvc::find ( const std::string name)
inlineoverride

Retrieve a property by particle name.

Definition at line 127 of file ParticlePropertySvc.h.

127 { return m_namemap[name]; }
MapName m_namemap
Map for particle names.
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:284

◆ findByPythiaID()

ParticleProperty* Gaudi::ParticlePropertySvc::findByPythiaID ( int  pythiaID)
inlineoverride

Retrieve a property by Pythia id.

Definition at line 131 of file ParticlePropertySvc.h.

131 { return m_pythiaidmap[pythiaID]; }
MapPythiaID m_pythiaidmap
Map for Pythia Ids.

◆ findByStdHepID()

ParticleProperty* Gaudi::ParticlePropertySvc::findByStdHepID ( int  stdHepId)
inlineoverride

Retrieve a property by StdHep id.

Definition at line 129 of file ParticlePropertySvc.h.

129 { return m_stdhepidmap[stdHepId]; }
MapStdHepID m_stdhepidmap
Map for StdHep Ids.

◆ initialize()

StatusCode Gaudi::ParticlePropertySvc::initialize ( )
override

Initialise the service.

initialize the service and setProperties

Definition at line 64 of file ParticlePropertySvc.cpp.

64  {
66  if ( sc.isFailure() ) { return sc; }
67 
68  sc = setProperties();
69  if ( sc.isFailure() ) {
70  error() << " Could not set the properties " << endmsg;
71  return sc;
72  }
73 
74  m_fileAccess = service( "VFSSvc" );
75  if ( !m_fileAccess ) {
76  error() << " Cannot retrieve the VFS service " << endmsg;
77  return StatusCode::FAILURE;
78  }
79 
80  sc = parse();
81  if ( sc.isFailure() ) {
82  error() << " Could not parse the file " << endmsg;
83  return sc;
84  }
85  if ( !m_particles.empty() ) {
86  sc = addParticles();
87  if ( sc.isFailure() ) {
88  error() << " Could not treat particles! " << endmsg;
89  return sc;
90  }
91  }
92  debug() << "ParticleProperties parsed successfully" << endmsg;
93 
94  debug() << "Access properties" << endmsg;
95  // For debugging purposes print out the size of the internal maps
96  // particle name as key: all particles in database are present here
97  debug() << "NameMap size =" << m_namemap.size() << endmsg;
98  // Geant3 ID as key: all particles in database are present here
99  debug() << "GeantID Map size =" << m_idmap.size() << endmsg;
100  // StdHep ID as key: some particles have no valid StdHep ID
101  debug() << "StdHepID Map size =" << m_stdhepidmap.size() << endmsg;
102  // Pythia ID as key: some particles are not defined in Pythia
103  debug() << "PythiaID Map size =" << m_pythiaidmap.size() << endmsg;
104 
105  if ( !m_replaced.empty() ) {
106  info() << "Properties have been redefined for " << m_replaced.size()
107  << " particles : " << Gaudi::Utils::toString( m_replaced ) << endmsg;
108  }
109 
110  return StatusCode::SUCCESS;
111  }
StatusCode initialize() override
Definition: Service.cpp:70
T empty(T... args)
std::string toString(const TYPE &obj)
the generic implementation of the type conversion to the string
Definition: ToStream.h:341
constexpr static const auto SUCCESS
Definition: StatusCode.h:96
MapName m_namemap
Map for particle names.
StatusCode parse()
Parses the file and fill all the maps.
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
SmartIF< IFileAccess > m_fileAccess
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
std::set< std::string > m_replaced
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
StatusCode setProperties()
Method for setting declared properties to the values specified for the job.
Definition: Service.cpp:290
MapStdHepID m_stdhepidmap
Map for StdHep Ids.
T size(T... args)
constexpr static const auto FAILURE
Definition: StatusCode.h:97
MapID m_idmap
Map for geant IDs.
StatusCode service(const std::string &name, const T *&psvc, bool createIf=true) const
Access a service by name, creating it if it doesn't already exist.
Definition: Service.h:93
Gaudi::Property< std::vector< std::string > > m_particles
bool isFailure() const
Definition: StatusCode.h:141
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202
MapPythiaID m_pythiaidmap
Map for Pythia Ids.

◆ parse() [1/2]

StatusCode Gaudi::ParticlePropertySvc::parse ( const std::string file)
protected

parse the file

Definition at line 250 of file ParticlePropertySvc.cpp.

250  {
251  auto infile = ( m_fileAccess ? m_fileAccess->open( file ) : nullptr );
252  if ( !infile ) {
253  error() << "Unable to open properties file : " << file << endmsg;
254  return StatusCode::FAILURE;
255  }
256 
258  info() << "Opened particle properties file : " << file << endmsg;
259 
261  tokens.reserve( 9 );
263  while ( std::getline( *infile, line ) ) {
264  // parse each line of the file (comment lines begin with # in the cdf
265  // file,
266  if ( line.front() == '#' ) continue;
267 
268  tokens.clear();
269  ba::trim_left_if( line, ba::is_space() );
270  ba::split( tokens, line, ba::is_space(), boost::token_compress_on );
271  if ( tokens.size() != 9 ) continue;
272 
273  auto gid = std::stoi( tokens[1] );
274  auto jid = std::stoi( tokens[2] );
275  // Change the particles that do not correspond to a pdg number
276  if ( jid == 0 ) jid = 10000000 * gid;
277 
278  // add a particle property
279  sc = push_back( tokens[0], gid, jid, std::stod( tokens[3] ), std::stod( tokens[4] ) * Gaudi::Units::GeV,
280  std::stod( tokens[5] ) * Gaudi::Units::s, tokens[6], std::stoi( tokens[7] ),
281  std::stod( tokens[8] ) * Gaudi::Units::GeV );
282 
283  if ( sc.isFailure() ) {
284  error() << "Error from ParticlePropertySvc::push_back for particle='" << tokens[0] << "'" << endmsg;
285  }
286  }
287  return StatusCode::SUCCESS;
288  }
constexpr double s
T stod(T... args)
T getline(T... args)
constexpr static const auto SUCCESS
Definition: StatusCode.h:96
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
SmartIF< IFileAccess > m_fileAccess
StatusCode push_back(const std::string &particle, int geantId, int jetsetId, double charge, double mass, double tlife, const std::string &evtName, int pythiaId, double maxWidth) override
Create a new particle property.
STL class.
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
T clear(T... args)
T size(T... args)
constexpr static const auto FAILURE
Definition: StatusCode.h:97
constexpr double GeV
bool isFailure() const
Definition: StatusCode.h:141
T stoi(T... args)
virtual std::unique_ptr< std::istream > open(const std::string &url)=0
Find the URL and returns a unique_ptr to an input stream interface of an object that can be used to r...
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202
T reserve(T... args)

◆ parse() [2/2]

StatusCode Gaudi::ParticlePropertySvc::parse ( )
protected

Parses the file and fill all the maps.

Definition at line 227 of file ParticlePropertySvc.cpp.

227  {
228 
229  // parse "the main" file
230  StatusCode sc = parse( m_filename );
231  if ( sc.isFailure() ) { return sc; }
232 
233  // parse "other" files
234  for ( auto& file : m_other ) {
235  sc = parse( file );
236  if ( sc.isFailure() ) { return sc; }
237  }
238 
239  // Now check that the file format was consistent with what parser
240  // expected
241  if ( m_namemap.empty() ) {
242  error() << "Format of input file inconsistent with what expected"
243  << " - Check you are using ParticleData.txt" << endmsg;
244  return StatusCode::FAILURE;
245  }
246 
247  return sc;
248  }
T empty(T... args)
MapName m_namemap
Map for particle names.
StatusCode parse()
Parses the file and fill all the maps.
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
Gaudi::Property< std::vector< std::string > > m_other
constexpr static const auto FAILURE
Definition: StatusCode.h:97
Gaudi::Property< std::string > m_filename
bool isFailure() const
Definition: StatusCode.h:141
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202

◆ push_back() [1/2]

StatusCode Gaudi::ParticlePropertySvc::push_back ( const std::string particle,
int  geantId,
int  jetsetId,
double  charge,
double  mass,
double  tlife,
const std::string evtName,
int  pythiaId,
double  maxWidth 
)
override

Create a new particle property.

Create a particle property and insert it in the maps.

Attention
ParticlePropertySvc IS the owner if this property! @paramparticle String name of the particle.
Parameters
geantIdGeant3 ID of the particle.
jetsetIdJetset ID of the particle.
chargeParticle charge (/e).
massParticle mass (GeV).
tlifeParticle lifetime (s).
evtNameString name of the particle in EvtGen.
pythiaIdPythia ID of the particle.
Returns
StatusCode - SUCCESS if the particle property was added.

Definition at line 133 of file ParticlePropertySvc.cpp.

135  {
136  //
137  auto i = m_owned.insert( std::make_unique<ParticleProperty>( particle, geantId, jetsetId, charge, mass, tlife,
138  evtName, pythiaId, maxWidth ) );
139  //
140  return i.second ? push_back( i.first->get() ) : StatusCode::FAILURE;
141  }
StatusCode push_back(const std::string &particle, int geantId, int jetsetId, double charge, double mass, double tlife, const std::string &evtName, int pythiaId, double maxWidth) override
Create a new particle property.
T insert(T... args)
constexpr static const auto FAILURE
Definition: StatusCode.h:97
std::set< std::unique_ptr< ParticleProperty > > m_owned

◆ push_back() [2/2]

StatusCode Gaudi::ParticlePropertySvc::push_back ( ParticleProperty pp)
override

Add a new particle property.

Add a particle property.

Attention
ParticlePropertySvc is not the owner of this property!
Parameters
pp,aparticle property class.
Returns
StatusCode - SUCCESS if the particle property was added.

Definition at line 145 of file ParticlePropertySvc.cpp.

145  {
146  if ( !pp ) { return StatusCode::FAILURE; }
147  //
148  { // try to add into Geant(3)ID map
149  const int ID = pp->geantID();
150  // is this already in the map?
151  auto ifind = m_idmap.find( ID );
152  if ( m_idmap.end() != ifind && 0 != m_idmap[ID] ) {
153  diff( ifind->second, pp );
154  m_replaced.insert( m_idmap[ID]->particle() );
155  }
156  // put it into the map
157  m_idmap[ID] = pp;
158  }
159  //
160  { // try to add into Name map
161  const std::string& particle = pp->particle();
162  // is this already in the map?
163  auto ifind = m_namemap.find( particle );
164  if ( ifind != m_namemap.end() && ifind->second ) {
165  diff( ifind->second, pp );
166  m_replaced.insert( ifind->second->particle() );
167  }
168  // put it into the map
169  m_namemap[particle] = pp;
170  }
171  //
172  // add to StdHep map only if StdHep ID different from zero and if
173  // not Cerenkov (StdHep ID = gamma)
174  if ( 0 != pp->jetsetID() && "Tcherenkov" != pp->particle() ) { // try to add into StdHepID map
175  const int ID = pp->jetsetID();
176  // is this already in the map?
177  auto ifind = m_stdhepidmap.find( ID );
178  if ( m_stdhepidmap.end() != ifind && ifind->second ) {
179  diff( ifind->second, pp );
180  m_replaced.insert( ifind->second->particle() );
181  }
182  // put it into the map
183  m_stdhepidmap[ID] = pp;
184  }
185  //
186  // add to Pythia map only if Pythia ID is different from
187  // zero ( StdHep id is always different from zero in this case )
188  if ( 0 != pp->pythiaID() && 0 != pp->jetsetID() && "Tcherenkov" != pp->particle() ) { // try to add into PythiaID
189  // map
190  const int ID = pp->pythiaID();
191  // is this already in the map?
192  auto ifind = m_pythiaidmap.find( ID );
193  if ( m_pythiaidmap.end() != ifind && ifind->second ) {
194  diff( ifind->second, pp );
195  m_replaced.insert( ifind->second->particle() );
196  }
197  // put it into the map
198  m_pythiaidmap[ID] = pp;
199  }
200  //
201  return rebuild();
202  }
bool diff(const ParticleProperty *o, const ParticleProperty *n, const MSG::Level l=MSG::DEBUG) const
StatusCode rebuild()
rebuild "the linear container" from the map
MapName m_namemap
Map for particle names.
T end(T... args)
STL class.
std::set< std::string > m_replaced
MapStdHepID m_stdhepidmap
Map for StdHep Ids.
T insert(T... args)
T find(T... args)
constexpr static const auto FAILURE
Definition: StatusCode.h:97
MapID m_idmap
Map for geant IDs.
MapPythiaID m_pythiaidmap
Map for Pythia Ids.

◆ rebuild()

StatusCode Gaudi::ParticlePropertySvc::rebuild ( )
protected

rebuild "the linear container" from the map

Definition at line 332 of file ParticlePropertySvc.cpp.

332  {
333  std::set<mapped_type> local;
334  m_vectpp.clear();
335  m_vectpp.reserve( m_idmap.size() + 100 );
336  // load information from maps into the set
337  _load_( m_idmap, local );
338  _load_( m_namemap, local );
339  _load_( m_stdhepidmap, local );
340  _load_( m_pythiaidmap, local );
341  // load information from set to the linear container vector
342  std::copy( std::begin( local ), std::end( local ), std::back_inserter( m_vectpp ) );
343  return setAntiParticles();
344  }
T copy(T... args)
MapName m_namemap
Map for particle names.
T end(T... args)
T clear(T... args)
MapStdHepID m_stdhepidmap
Map for StdHep Ids.
T size(T... args)
STL class.
T begin(T... args)
T back_inserter(T... args)
MapID m_idmap
Map for geant IDs.
StatusCode setAntiParticles()
helper (protected) function to set the valid particle<-->antiparticle relations
VectPP m_vectpp
Vector of all particle properties.
MapPythiaID m_pythiaidmap
Map for Pythia Ids.
T reserve(T... args)

◆ setAntiParticles()

StatusCode Gaudi::ParticlePropertySvc::setAntiParticles ( )
protected

helper (protected) function to set the valid particle<-->antiparticle relations

Returns
status code

Definition at line 312 of file ParticlePropertySvc.cpp.

312  {
313  // initialize particle<-->antiParticle relations
314  for ( auto& pp : m_vectpp ) {
315  if ( !pp ) { continue; } // CONTINUE
316  const ParticleProperty* ap = anti( pp );
317  if ( ap ) { pp->setAntiParticle( ap ); }
318  }
319  return StatusCode::SUCCESS;
320  }
A trivial class to hold information about a single particle properties.
constexpr static const auto SUCCESS
Definition: StatusCode.h:96
const ParticleProperty * anti(const ParticleProperty *pp) const
helper (protected) function to find an antiparticle for the given particle ID (StdHepID)
VectPP m_vectpp
Vector of all particle properties.

◆ size()

int Gaudi::ParticlePropertySvc::size ( ) const
inlineoverride

Get the container size.

Definition at line 123 of file ParticlePropertySvc.h.

123 { return m_vectpp.size(); };
T size(T... args)
VectPP m_vectpp
Vector of all particle properties.

Member Data Documentation

◆ m_fileAccess

SmartIF<IFileAccess> Gaudi::ParticlePropertySvc::m_fileAccess
private

Definition at line 186 of file ParticlePropertySvc.h.

◆ m_filename

Gaudi::Property<std::string> Gaudi::ParticlePropertySvc::m_filename
private
Initial value:
{this, "ParticlePropertiesFile", "ParticleTable.txt",
"Filename of the particle properties file"}

Definition at line 170 of file ParticlePropertySvc.h.

◆ m_idmap

MapID Gaudi::ParticlePropertySvc::m_idmap
private

Map for geant IDs.

Definition at line 177 of file ParticlePropertySvc.h.

◆ m_namemap

MapName Gaudi::ParticlePropertySvc::m_namemap
private

Map for particle names.

Definition at line 178 of file ParticlePropertySvc.h.

◆ m_other

Gaudi::Property<std::vector<std::string> > Gaudi::ParticlePropertySvc::m_other {this, "OtherFiles", {}, "additional file names"}
private

Definition at line 172 of file ParticlePropertySvc.h.

◆ m_owned

std::set<std::unique_ptr<ParticleProperty> > Gaudi::ParticlePropertySvc::m_owned
private

Definition at line 183 of file ParticlePropertySvc.h.

◆ m_particles

Gaudi::Property<std::vector<std::string> > Gaudi::ParticlePropertySvc::m_particles
private
Initial value:
{
this, "Particles", {}, "properties to be redefined explicitly"}

Definition at line 173 of file ParticlePropertySvc.h.

◆ m_pythiaidmap

MapPythiaID Gaudi::ParticlePropertySvc::m_pythiaidmap
private

Map for Pythia Ids.

Definition at line 180 of file ParticlePropertySvc.h.

◆ m_replaced

std::set<std::string> Gaudi::ParticlePropertySvc::m_replaced
private

Definition at line 184 of file ParticlePropertySvc.h.

◆ m_stdhepidmap

MapStdHepID Gaudi::ParticlePropertySvc::m_stdhepidmap
private

Map for StdHep Ids.

Definition at line 179 of file ParticlePropertySvc.h.

◆ m_vectpp

VectPP Gaudi::ParticlePropertySvc::m_vectpp
private

Vector of all particle properties.

Definition at line 176 of file ParticlePropertySvc.h.


The documentation for this class was generated from the following files: