Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // $Id: G4NeutrinoNucleusModel.hh 90228 2015-05-21 08:49:57Z gcosmo $ 28 // 29 // Geant4 Header : G4NeutrinoNucleusModel 30 // 31 // Author : V.Grichine 12.2.19 32 // 33 // Modified: 34 // 35 // Class Description 36 // Default model for muon neutrino-nucleus charge current scattering; 37 // Class Description - End 38 39 #ifndef G4NeutrinoNucleusModel_h 40 #define G4NeutrinoNucleusModel_h 1 41 42 #include "globals.hh" 43 #include "G4HadronicInteraction.hh" 44 #include "G4HadProjectile.hh" 45 #include "G4Nucleus.hh" 46 #include "G4NucleiProperties.hh" 47 #include "G4LorentzVector.hh" 48 49 class G4ParticleDefinition; 50 class G4PreCompoundModel; 51 // class G4CascadeInterface; 52 // class G4BinaryCascade; 53 // class G4TheoFSGenerator; 54 // class G4LundStringFragmentation; 55 // class G4ExcitedStringDecay; 56 // class G4INCLXXInterface; 57 class G4Nucleus; 58 class G4Fragment; 59 class G4GeneratorPrecompoundInterface; 60 class G4ExcitationHandler; 61 62 class G4NeutrinoNucleusModel : public G4HadronicInteraction 63 { 64 public: 65 66 G4NeutrinoNucleusModel(const G4String& name = "neutrino-nucleus"); 67 68 virtual ~G4NeutrinoNucleusModel(); 69 70 virtual G4bool IsApplicable(const G4HadProjectile & aTrack, 71 G4Nucleus & targetNucleus); 72 73 G4double SampleXkr(G4double energy); 74 G4double GetXkr(G4int iEnergy, G4double prob); 75 G4double SampleQkr(G4double energy, G4double xx); 76 G4double GetQkr(G4int iE, G4int jX, G4double prob); 77 78 virtual G4HadFinalState * ApplyYourself(const G4HadProjectile & aTrack, 79 G4Nucleus & targetNucleus)=0; 80 81 //////// fragmentation functions ///////////////////////// 82 83 void ClusterDecay( G4LorentzVector & lvX, G4int qX); 84 85 void MesonDecay( G4LorentzVector & lvX, G4int qX); 86 87 void FinalBarion( G4LorentzVector & lvB, G4int qB, G4int pdgB); 88 89 void RecoilDeexcitation( G4Fragment& fragment); 90 91 void FinalMeson( G4LorentzVector & lvM, G4int qM, G4int pdgM); 92 93 void CoherentPion( G4LorentzVector & lvP, G4int pdgP, G4Nucleus & targetNucleus); 94 95 96 // set/get class fields 97 98 void SetCutEnergy(G4double ec){fCutEnergy=ec;}; 99 G4double GetCutEnergy(){return fCutEnergy;}; 100 101 G4double GetNuEnergy(){return fNuEnergy;}; 102 G4double GetQtransfer(){return fQtransfer;}; 103 G4double GetQ2(){return fQ2;}; 104 G4double GetXsample(){return fXsample;}; 105 106 G4int GetPDGencoding(){return fPDGencoding;}; 107 G4bool GetCascade(){return fCascade;}; 108 G4bool GetString(){return fString;}; 109 110 G4double GetCosTheta(){return fCosTheta;}; 111 G4double GetEmu(){return fEmu;}; 112 G4double GetEx(){return fEx;}; 113 G4double GetMuMass(){return fMu;}; 114 G4double GetW2(){return fW2;}; 115 G4double GetM1(){return fM1;}; 116 G4double GetMr(){return fMr;}; 117 G4double GetTr(){return fTr;}; 118 G4double GetDp(){return fDp;}; 119 120 G4bool GetfBreak() {return fBreak;}; 121 G4bool GetfCascade(){return fCascade;}; 122 G4bool GetfString() {return fString;}; 123 124 G4LorentzVector GetLVl(){return fLVl;}; 125 G4LorentzVector GetLVh(){return fLVh;}; 126 G4LorentzVector GetLVt(){return fLVt;}; 127 G4LorentzVector GetLVcpi(){return fLVcpi;}; 128 129 G4double GetMinNuMuEnergy(){ return fMu + 0.5*fMu*fMu/fM1 + 4.*CLHEP::MeV; }; // kinematics + accuracy for sqrts 130 131 G4double ThresholdEnergy(G4double mI, G4double mF, G4double mP) // for cluster decay 132 { 133 G4double w = std::sqrt(fW2); 134 return w + 0.5*( (mP+mF)*(mP+mF)-(w+mI)*(w+mI) )/mI; 135 }; 136 G4double GetQEratioA(){ return fQEratioA; }; 137 void SetQEratioA( G4double qea ){ fQEratioA = qea; }; 138 139 140 G4double FinalMomentum(G4double mI, G4double mF, G4double mP, G4LorentzVector lvX); // for cluster decay 141 142 // nucleon binding 143 144 G4double FermiMomentum( G4Nucleus & targetNucleus); 145 G4double NucleonMomentum( G4Nucleus & targetNucleus); 146 147 G4double GetEx( G4int A, G4bool fP ); 148 G4double GgSampleNM(G4Nucleus & nucl); 149 150 G4int GetEnergyIndex(G4double energy); 151 G4double GetNuMuQeTotRat(G4int index, G4double energy); 152 153 G4int GetOnePionIndex(G4double energy); 154 G4double GetNuMuOnePionProb(G4int index, G4double energy); 155 156 G4double CalculateQEratioA( G4int Z, G4int A, G4double energy, G4int nepdg); 157 158 virtual void ModelDescription(std::ostream&) const; 159 160 protected: 161 162 G4ParticleDefinition* theMuonMinus; 163 G4ParticleDefinition* theMuonPlus; 164 165 G4double fSin2tW; // sin^2theta_Weinberg 166 G4double fCutEnergy; // minimal recoil electron energy detected 167 168 G4int fNbin, fIndex, fEindex, fXindex, fQindex, fOnePionIndex, fPDGencoding; 169 G4bool fCascade, fString, fProton, f2p2h, fBreak; 170 171 G4double fNuEnergy, fQ2, fQtransfer, fXsample; 172 173 G4double fM1, fM2, fMt, fMu, fW2, fMpi, fW2pi, fMinNuEnergy, fDp, fTr; 174 175 G4double fEmu, fEmuPi, fEx, fMr, fCosTheta, fCosThetaPi, fQEratioA; 176 177 G4LorentzVector fLVh, fLVl, fLVt, fLVcpi; 178 179 G4GeneratorPrecompoundInterface* fPrecoInterface; 180 G4PreCompoundModel* fPreCompound; 181 G4ExcitationHandler* fDeExcitation; 182 183 G4Nucleus* fRecoil; 184 185 G4int fSecID; // Creator model ID for the secondaries created by this model 186 187 static const G4int fResNumber; 188 static const G4double fResMass[6]; // [fResNumber]; 189 190 static const G4int fClustNumber; 191 192 static const G4double fMesMass[4]; 193 static const G4int fMesPDG[4]; 194 195 static const G4double fBarMass[4]; 196 static const G4int fBarPDG[4]; 197 198 static const G4double fNuMuResQ[50][50]; 199 200 201 static const G4double fNuMuEnergy[50]; 202 static const G4double fNuMuQeTotRat[50]; 203 static const G4double fOnePionEnergy[58]; 204 static const G4double fOnePionProb[58]; 205 206 static const G4double fNuMuEnergyLogVector[50]; 207 208 // KR sample distributions, X at E_nu and Q2 at E_nu and X 209 210 static G4double fNuMuXarrayKR[50][51]; 211 static G4double fNuMuXdistrKR[50][50]; 212 static G4double fNuMuQarrayKR[50][51][51]; 213 static G4double fNuMuQdistrKR[50][51][50]; 214 215 // QEratio(Z,A,Enu) 216 217 static const G4double fQEnergy[50]; 218 static const G4double fANeMuQEratio[50]; 219 static const G4double fNeMuQEratio[50]; 220 221 }; 222 223 224 225 #endif 226