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