Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 // $Id: G4NeutrinoNucleusModel.hh 90228 2015-0 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 cha 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 G4Hadron 63 { 64 public: 65 66 G4NeutrinoNucleusModel(const G4String& name 67 68 virtual ~G4NeutrinoNucleusModel(); 69 70 virtual G4bool IsApplicable(const G4HadProje 71 G4Nucleus & targetNucleus); 72 73 G4double SampleXkr(G4double energy); 74 G4double GetXkr(G4int iEnergy, G4double prob 75 G4double SampleQkr(G4double energy, G4double 76 G4double GetQkr(G4int iE, G4int jX, G4double 77 78 virtual G4HadFinalState * ApplyYourself(cons 79 G4Nucleus & targetNucleus)=0; 80 81 //////// fragmentation functions //////////// 82 83 void ClusterDecay( G4LorentzVector & lvX, G4 84 85 void MesonDecay( G4LorentzVector & lvX, G4in 86 87 void FinalBarion( G4LorentzVector & lvB, G4i 88 89 void RecoilDeexcitation( G4Fragment& fragmen 90 91 void FinalMeson( G4LorentzVector & lvM, G4in 92 93 void CoherentPion( G4LorentzVector & lvP, G4 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 fPDGencodin 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. 130 131 G4double ThresholdEnergy(G4double mI, G4doub 132 { 133 G4double w = std::sqrt(fW2); 134 return w + 0.5*( (mP+mF)*(mP+mF)-(w+mI)*(w 135 }; 136 G4double GetQEratioA(){ return fQEratioA; }; 137 void SetQEratioA( G4double qea ){ fQErat 138 139 140 G4double FinalMomentum(G4double mI, G4double 141 142 // nucleon binding 143 144 G4double FermiMomentum( G4Nucleus & targetNu 145 G4double NucleonMomentum( G4Nucleus & target 146 147 G4double GetEx( G4int A, G4bool fP ); 148 G4double GgSampleNM(G4Nucleus & nucl); 149 150 G4int GetEnergyIndex(G4double energy); 151 G4double GetNuMuQeTotRat(G4int index, G4doub 152 153 G4int GetOnePionIndex(G4double energy); 154 G4double GetNuMuOnePionProb(G4int index, G4d 155 156 G4double CalculateQEratioA( G4int Z, G4int A 157 158 virtual void ModelDescription(std::ostream&) 159 160 protected: 161 162 G4ParticleDefinition* theMuonMinus; 163 G4ParticleDefinition* theMuonPlus; 164 165 G4double fSin2tW; // sin^2theta_Weinberg 166 G4double fCutEnergy; // minimal recoil elect 167 168 G4int fNbin, fIndex, fEindex, fXindex, fQind 169 G4bool fCascade, fString, fProton, f2p2h, fB 170 171 G4double fNuEnergy, fQ2, fQtransfer, fXsampl 172 173 G4double fM1, fM2, fMt, fMu, fW2, fMpi, fW2 174 175 G4double fEmu, fEmuPi, fEx, fMr, fCosTheta, 176 177 G4LorentzVector fLVh, fLVl, fLVt, fLVcpi; 178 179 G4GeneratorPrecompoundInterface* fPrecoInter 180 G4PreCompoundModel* fPreCompoun 181 G4ExcitationHandler* fDeExcitati 182 183 G4Nucleus* fRecoil; 184 185 G4int fSecID; // Creator model ID for the s 186 187 static const G4int fResNumber; 188 static const G4double fResMass[6]; // [fResN 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[5 207 208 // KR sample distributions, X at E_nu and Q2 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