Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-09-27 07:02:49

0001 // ********************************************************************
0002 //
0003 // eASTHepMC3Interface.hh
0004 //   Header file of HepMC3 interface
0005 //
0006 // History
0007 //  June 23rd, 2021 : first empty class definition - Makoto Asai (SLAC)
0008 //
0009 // ********************************************************************
0010 
0011 #ifndef eASTHepMC3Interface_h
0012 #define eASTHepMC3Interface_h 1
0013 
0014 #include "G4VPrimaryGenerator.hh"
0015 #include "G4PrimaryVertex.hh"
0016 #include "globals.hh"
0017 
0018 #include <HepMC3/Reader.h>
0019 #include <set>
0020 #include <map>
0021 
0022 
0023 class G4Event;
0024 class G4GenericMessenger;
0025 
0026 class eASTHepMC3Interface : public G4VPrimaryGenerator
0027 {
0028 private:
0029   static eASTHepMC3Interface* instance;
0030   static G4bool instantiated;
0031 
0032 public:
0033   // Creat the singleton instance and return its pointer
0034   // Maybe nullptr if it has already deleted.
0035   static eASTHepMC3Interface* GetInstance();
0036 
0037 private:
0038   eASTHepMC3Interface();
0039 
0040 public:
0041   virtual ~eASTHepMC3Interface();
0042     
0043 public:
0044   // The method for filling primary vertex and
0045   // primary particles.
0046   virtual void GeneratePrimaryVertex(G4Event*);
0047  
0048 public:
0049   // Open the input HepMC3 file 
0050   // return false if the file cannot be opened.
0051   G4bool OpenFile(G4String);
0052 
0053   // Set/Get vertex position 
0054   void SetVertexPosition(G4ThreeVector vPos)
0055   { vPosition = vPos; }
0056   G4ThreeVector GetVertexPosition() const
0057   { return vPosition; }
0058 
0059   // SetGet vertex time
0060   void SetVertexTime(G4double t0)
0061   { vTime = t0; }
0062   G4double GetVertexTime() const
0063   { return vTime; }
0064 
0065   // Verbose level
0066   void SetVerbose(G4int vl)
0067   { verboseLevel = vl; }
0068     
0069 private:
0070   G4String            fileName;
0071   G4GenericMessenger* messenger;
0072 
0073   G4ThreeVector   vPosition = G4ThreeVector(0.,0.,0.);
0074   G4double        vTime = 0.;
0075   G4int           verboseLevel = 1;
0076 
0077   std::shared_ptr<HepMC3::Reader> HepMC3Reader;
0078   G4PrimaryParticle* MakeParticle ( const HepMC3::ConstGenParticlePtr hep_p,
0079                     const bool safetycheck, std::set<int>& used);
0080 
0081   std::map<int,G4PrimaryParticle*> created_daughters;
0082   
0083 };
0084 
0085 #endif