//////////////////////////////////////////////////////////////////// ///\class RAT::AxionGenerator ///\author Christopher Jones ///\author Esther Turner -- contact person ///\date 10-Feb-2015 ///\brief Generator for Solar Axions ///\details This class implements solar axion interactions within SNO+ /// /// REVISION HISTORY: /// - 10-Feb-2015: Christopher Jones: Doxygen fixes. First Instance of adding solar axions into RAT for SNO+ /// - 24-May-2015: Christopher Jones: Fixed bug and now all four interactions produce results. /// /// /// //////////////////////////////////////////////////////////////////// #ifndef __RAT_VERTEXGEN_SOLARAXION__ #define __RAT_VERTEXGEN_SOLARAXION__ #include #include #include #include #include #include #include #include // ROOT headers #include #include #include class G4Event; namespace RAT { class VertexGen_Axion : public GLG4VertexGen { public: /** Default constructor*/ VertexGen_Axion(); /** Destructor */ virtual ~VertexGen_Axion(); /** Method for generating primary verticies in Geant4 */ virtual void GeneratePrimaryVertex(G4Event *event, G4ThreeVector &dx, G4double dt); /** Defines repeatability of the generator. */ virtual bool IsRepeatable() const { return true; }; /** Sets the state of the generator. */ virtual void SetState(G4String state); /** Getter for state of the position generator. */ virtual G4String GetState(); protected: /** Settings of the generator that is used */ G4String fStateStr; /** Interaction type within the vertex generator e.g. 'compton_axion' */ G4String fInteractionType; /** Direction of the incoming solar axion */ G4ThreeVector fAxionDirection; /** Direction of the sun for a given interaction */ G4ThreeVector fSolarDirection; /** Average nuclear mass number of the generating material */ double fNuclearZ; /** Mass of the electron */ double fMassElectron; /** EventTime object to deal with the non-sequentiality of the generated events. */ EventTime fEvTime; /** Kinetic energy of the axion which is emitted */ double faxionEnergy; /** Mass of a solar Axion */ double faxionMass; private: /** Gamma particle within an interaction */ G4ParticleDefinition *fGamma; /** Electron within an interaction */ G4ParticleDefinition *fElectron; /** ROOT TGraph for differential cross section of solar axion interaction*/ TGraph *fDiffCrossSection; /** * Normalised probability of compton axion conversion at different interaction angles * \details This method calculates the probability of inverse primakoff conversion for different interaction angles using the formulation set out in * Avignone et al. (PRD 37, 3, p.618) . /param theta interaction angle * @return normalised probability of interaction at different interaction angles * */ double ComptonAxionDifferentialCrossSection(double theta) const; /** * Normalised probability of inverse primakoff conversion of axions at different interaction angles * \details This method calculates the probability of inverse primakoff conversion for different interaction angles using the formulation set out in * Avignone et al. (PRD 37, 3, p.618) . Angle calculated is within the nuclear rest frame. /param theta interaction angle * @return normalised probability of interaction at different interaction angles * */ double InversePrimakoffConversionDifferentialCrossSection(double theta) const; /** * Updates the differential cross section of several solar axion interactions in SNO+ * \details This method draws a TGraph with 10,000 points between 0.0 and Pi radians for the compton conversion and inverse primakoff interactions of solar * axions in SNO+ both calculated from Avignone et al. (PRD 37, 3, p.618) . * */ void DrawDiffCrossSection() const; /** * Samples the differential cross section for either compton conversion or inverse primakoff interactions of solar axions in SNO+ * and returns a value for the interaction angle for the chosen process. * @return TGraph with differential cross section * */ double SampleDifferentialCrossSection() const; }; } // namespace RAT #endif // __RAT_VERTEXGEN_SOLARAXION__