#ifndef DESCSS_PrimaryGeneratorAction_h
#define DESCSS_PrimaryGeneratorAction_h

#include "G4GeneralParticleSource.hh"
#include "G4ParticleGun.hh"
#include "G4VUserPrimaryGeneratorAction.hh"
#include "globals.hh"

class G4GeneralParticleSource;
class G4ParticleGun;
class G4Event;

extern G4String particleType;

template <typename T>
class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction {
public:
    PrimaryGeneratorAction();

    ~PrimaryGeneratorAction();
    virtual void GeneratePrimaries(G4Event*);
    const T* GetParticleGun() const { return fParticleGun; }

private:
    T* fParticleGun = nullptr;
};

#endif
