//////////////////////////////////////////////////////////////////// /// \class RAT::VertexGen_PrimakoffRosen /// /// \brief Vertex Generator for double beta decay events. /// /// \author Jeanne Wilson -- contact person /// /// REVISION HISTORY: /// - first version : 23-July-2008 /// - 2014/06/30 A. Mastbaum - Brought back VertexGen_DoubleBeta after deletion, /// renamed to VertexGen_PrimakoffRosen /// - 2014/11/26 Matt Strait - doxygen fixes /// - 2015/08/04 Matt Mottram - Use G4IonTable to get ions /// /// \details This vertex generator (to be used in composite generators like combo or coincidence) produces /// double beta decay events using isotope information provided in DBD ratdb files. /// /// The code is based on that produced for the COBRA experiment with formulae derived from /// Tretyak & Zdesenko, "Tables of Double Beta Decay Data", Atomic Data and Nuclear Data Tables, 61, /// 43-90 (1995). Calculations use the Primakoff-Rosen approximation for the Fermi function. /// /// Currently the following methods are available. They are user selected via the mode value.\n /// mode = 0 : 0nuBB 0+0+ transition with 2n mechanism\n /// mode = 2 : 2nuBB 0+0+ transition with 2n mechanism /// //////////////////////////////////////////////////////////////////// #ifndef __RAT_VertexGen_PrimakoffRosen__ #define __RAT_VertexGen_PrimakoffRosen__ #include #include "RAT/DB.hh" #include #include #include #include namespace RAT { class VertexGen_PrimakoffRosen : public GLG4VertexGen { public: VertexGen_PrimakoffRosen(const char *arg_dbname="DoubleBeta"); virtual ~VertexGen_PrimakoffRosen(); /** generate and add new vertex to this event. Position and * time of vertex are offset from 0 by dx and dt. (These * are usually derived from GLG4PosGen and GLG4TimeGen.) */ virtual void GeneratePrimaryVertex( G4Event* argEvent, G4ThreeVector& dx, G4double dt); /** set the state for generator. Format: isotope (mode) * where isotope is the parent isotope (Nd150, Nd148), * and mode is the decay mode (0= 0nuBB, 2=2nuBB) */ virtual void SetState( G4String newValues ); /** return current state */ virtual G4String GetState(); /** calculate the energies for the two betas and the angle between them * for the neutrinoless case - 2n mechanism */ virtual void ZeroNu2nBasic(G4double& E1, G4double& E2, G4double& btheta); /** calculate the energies for the two betas and the angle between them * for the two neutrino case - 2n mechanism */ virtual void TwoNu2nBasic(G4double& E1, G4double& E2, G4double& btheta); /** output energies are only limitable for 2nuBB mode */ virtual bool ELimitable(); /** Set the limits on the generated energy */ virtual void LimitEnergies(float Elo, float Ehi); /** Return the maximum possible energy */ virtual float EMaximum(); /** Return the minimum possible energy */ virtual float EMinimum(); private: G4ParticleDefinition *fPDef; // particle definition is used multiple times G4String fIsotope; // parent isotope int fMode; // decay mode DBLinkPtr fLdbdb; // database pointer float fELimUniLow; // user applied universal limits on the generated energy float fELimUniHigh; float fELimTempLow; // temporary energy limits (apply to one event) float fELimTempHigh; }; } // namespace RAT #endif