Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-13 08:54:54

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2024 Wouter Deconinck
0003 
0004 #pragma once
0005 
0006 #include <algorithms/service.h>
0007 #include <map>
0008 #include <memory>
0009 #include <string>
0010 
0011 namespace algorithms {
0012 
0013 class ParticleSvc : public Service<ParticleSvc> {
0014 public:
0015   struct ParticleData {
0016     int pdgCode;
0017     int charge;
0018     double mass;
0019     std::string name;
0020   };
0021   using Particle    = ParticleData;
0022   using ParticleMap = std::map<int, Particle>;
0023 
0024 public:
0025   virtual void init(std::shared_ptr<ParticleMap> map = nullptr);
0026 
0027   virtual std::shared_ptr<ParticleMap> particleMap() const { return m_particleMap; };
0028 
0029   virtual Particle& particle(int pdg) const;
0030 
0031 protected:
0032   std::shared_ptr<ParticleMap> m_particleMap{nullptr};
0033 
0034   ALGORITHMS_DEFINE_SERVICE(ParticleSvc)
0035 
0036 private:
0037   /// Get the default particle map (defined in ParticleSvc.cc to avoid including large map in header)
0038   static const ParticleMap& getDefaultParticleMap();
0039 };
0040 
0041 } // namespace algorithms