Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-08-02 08:29:02

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 //
0027 // -------------------------------------------------------------------
0028 //
0029 //      GEANT4 header file 
0030 //
0031 //      File name:     G4NuDEXNeutronCaptureModel
0032 //
0033 //      Author:        E.Mendoza & A.Ribon
0034 // 
0035 //      Creation date: 29 May 2024
0036 //
0037 //      Description:   This class (a proxy of the class G4NuDEX) uses
0038 //                     the NuDEX model to produce gammas and internal
0039 //                     conversion electrons from neutron capture.
0040 //                     Whenever NuDEX is not applicable, G4PhotonEvaporation
0041 //                     is used.
0042 //                     The implementation of this class follows the code
0043 //                     of the class G4NeutronRadCapture.
0044 //
0045 //      Modifications:
0046 //      
0047 // -------------------------------------------------------------------
0048 //
0049 // Class to use NuDEX model inside Geant4
0050 // 
0051 
0052 #ifndef G4NUDEXNEUTRONCAPTUREMODEL_HH
0053 #define G4NUDEXNEUTRONCAPTUREMODEL_HH 1
0054 
0055 #include "globals.hh"
0056 #include "G4HadronicInteraction.hh"
0057 #include "G4HadProjectile.hh"
0058 #include "G4Nucleus.hh"
0059 
0060 class G4NuDEXStatisticalNucleus;
0061 class G4VEvaporationChannel;
0062 
0063 
0064 #define G4NUDEX_MAXZA 120000
0065 
0066 
0067 class G4NuDEXNeutronCaptureModel : public G4HadronicInteraction {
0068   public:
0069     explicit G4NuDEXNeutronCaptureModel();
0070     virtual ~G4NuDEXNeutronCaptureModel();
0071   
0072     virtual G4HadFinalState* ApplyYourself( const G4HadProjectile &aTrack, G4Nucleus &targetNucleus ) final;
0073     virtual void InitialiseModel() final;
0074 
0075   private:
0076     G4NuDEXNeutronCaptureModel & operator=( const G4NuDEXNeutronCaptureModel &right ) = delete;
0077     G4NuDEXNeutronCaptureModel( const G4NuDEXNeutronCaptureModel& ) = delete;
0078 
0079     G4int GenerateNeutronCaptureCascade( G4int theZ, G4int theA, G4double NeutronEnergy, G4int InitialLevel,
0080                          std::vector< char >& pType, std::vector< G4double >& pEnergy, std::vector< G4double >& pTime );
0081 
0082     // Initial level for neutron capture. If jspinx2v < 0 it is sampled according to the 2J+1 rule
0083     // l-spin = 0, 1, 2 --> s-wave, p-wave, d-wave ...
0084     G4int SelectInitialLevel( G4int theCompoundZ, G4int theCompoundA, G4double NeutronEnergy, G4int lspin, G4int jspinx2 );
0085     G4int SampleJ( G4int theCompoundZ, G4int theCompoundA, G4int lspin );
0086     G4int GetAllowedJx2values( G4int theCompoundZ, G4int theCompoundA, G4int lspin, G4int* jx2vals );
0087 
0088     const G4NuDEXStatisticalNucleus* GetStatisticalNucleus( G4int za ) { return theStatisticalNucleus[za]; }
0089     G4int Init( G4int theZA, unsigned int seed1 = 0, unsigned int seed2 = 0, unsigned int seed3 = 0 );
0090     void SetBandWidth( G4double bandWidth ) { BandWidth = bandWidth; }
0091     void SetBrOption( G4int brOption ) { BrOption = brOption; }  
0092 
0093     G4NuDEXStatisticalNucleus* theStatisticalNucleus[G4NUDEX_MAXZA];
0094     G4int HasData[G4NUDEX_MAXZA];  // -1:no; 0:don't know; 1:yes
0095     G4String NuDEXLibDirectory;
0096     G4int BrOption;
0097     G4double BandWidth;
0098 
0099     G4int secID;  // creator model ID for the other secondaries produced by this model
0100     G4double lowestEnergyLimit;
0101     G4double minExcitation; 
0102     G4VEvaporationChannel* photonEvaporation;  // Needed when NuDEX is not applicable
0103 };
0104 
0105 #endif