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); << 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 73 virtual G4HadFinalState * ApplyYourself(const G4HadProjectile & aTrack, 79 G4Nucleus & targetNucleus)=0; 74 G4Nucleus & targetNucleus)=0; 80 75 81 //////// fragmentation functions //////////// 76 //////// fragmentation functions ///////////////////////// 82 77 83 void ClusterDecay( G4LorentzVector & lvX, G4 78 void ClusterDecay( G4LorentzVector & lvX, G4int qX); 84 79 85 void MesonDecay( G4LorentzVector & lvX, G4in 80 void MesonDecay( G4LorentzVector & lvX, G4int qX); 86 81 87 void FinalBarion( G4LorentzVector & lvB, G4i 82 void FinalBarion( G4LorentzVector & lvB, G4int qB, G4int pdgB); 88 83 89 void RecoilDeexcitation( G4Fragment& fragmen 84 void RecoilDeexcitation( G4Fragment& fragment); 90 85 91 void FinalMeson( G4LorentzVector & lvM, G4in 86 void FinalMeson( G4LorentzVector & lvM, G4int qM, G4int pdgM); 92 87 93 void CoherentPion( G4LorentzVector & lvP, G4 88 void CoherentPion( G4LorentzVector & lvP, G4int pdgP, G4Nucleus & targetNucleus); 94 89 95 90 96 // set/get class fields 91 // set/get class fields 97 92 98 void SetCutEnergy(G4double ec){fCutEnergy=ec 93 void SetCutEnergy(G4double ec){fCutEnergy=ec;}; 99 G4double GetCutEnergy(){return fCutEnergy;}; 94 G4double GetCutEnergy(){return fCutEnergy;}; 100 95 101 G4double GetNuEnergy(){return fNuEnergy;}; 96 G4double GetNuEnergy(){return fNuEnergy;}; 102 G4double GetQtransfer(){return fQtransfer;}; 97 G4double GetQtransfer(){return fQtransfer;}; 103 G4double GetQ2(){return fQ2;}; 98 G4double GetQ2(){return fQ2;}; 104 G4double GetXsample(){return fXsample;}; 99 G4double GetXsample(){return fXsample;}; 105 100 106 G4int GetPDGencoding(){return fPDGencodin 101 G4int GetPDGencoding(){return fPDGencoding;}; 107 G4bool GetCascade(){return fCascade;}; 102 G4bool GetCascade(){return fCascade;}; 108 G4bool GetString(){return fString;}; 103 G4bool GetString(){return fString;}; 109 104 110 G4double GetCosTheta(){return fCosTheta;}; 105 G4double GetCosTheta(){return fCosTheta;}; 111 G4double GetEmu(){return fEmu;}; 106 G4double GetEmu(){return fEmu;}; 112 G4double GetEx(){return fEx;}; 107 G4double GetEx(){return fEx;}; 113 G4double GetMuMass(){return fMu;}; 108 G4double GetMuMass(){return fMu;}; 114 G4double GetW2(){return fW2;}; 109 G4double GetW2(){return fW2;}; 115 G4double GetM1(){return fM1;}; 110 G4double GetM1(){return fM1;}; 116 G4double GetMr(){return fMr;}; 111 G4double GetMr(){return fMr;}; 117 G4double GetTr(){return fTr;}; 112 G4double GetTr(){return fTr;}; 118 G4double GetDp(){return fDp;}; 113 G4double GetDp(){return fDp;}; 119 114 120 G4bool GetfBreak() {return fBreak;}; << 121 G4bool GetfCascade(){return fCascade;}; << 122 G4bool GetfString() {return fString;}; << 123 << 124 G4LorentzVector GetLVl(){return fLVl;}; 115 G4LorentzVector GetLVl(){return fLVl;}; 125 G4LorentzVector GetLVh(){return fLVh;}; 116 G4LorentzVector GetLVh(){return fLVh;}; 126 G4LorentzVector GetLVt(){return fLVt;}; 117 G4LorentzVector GetLVt(){return fLVt;}; 127 G4LorentzVector GetLVcpi(){return fLVcpi;}; 118 G4LorentzVector GetLVcpi(){return fLVcpi;}; 128 119 129 G4double GetMinNuMuEnergy(){ return fMu + 0. 120 G4double GetMinNuMuEnergy(){ return fMu + 0.5*fMu*fMu/fM1 + 4.*CLHEP::MeV; }; // kinematics + accuracy for sqrts 130 121 131 G4double ThresholdEnergy(G4double mI, G4doub 122 G4double ThresholdEnergy(G4double mI, G4double mF, G4double mP) // for cluster decay 132 { 123 { 133 G4double w = std::sqrt(fW2); 124 G4double w = std::sqrt(fW2); 134 return w + 0.5*( (mP+mF)*(mP+mF)-(w+mI)*(w 125 return w + 0.5*( (mP+mF)*(mP+mF)-(w+mI)*(w+mI) )/mI; 135 }; 126 }; 136 G4double GetQEratioA(){ return fQEratioA; }; << 137 void SetQEratioA( G4double qea ){ fQErat << 138 << 139 << 140 G4double FinalMomentum(G4double mI, G4double 127 G4double FinalMomentum(G4double mI, G4double mF, G4double mP, G4LorentzVector lvX); // for cluster decay 141 128 142 // nucleon binding 129 // nucleon binding 143 130 144 G4double FermiMomentum( G4Nucleus & targetNu 131 G4double FermiMomentum( G4Nucleus & targetNucleus); 145 G4double NucleonMomentum( G4Nucleus & target 132 G4double NucleonMomentum( G4Nucleus & targetNucleus); 146 133 147 G4double GetEx( G4int A, G4bool fP ); 134 G4double GetEx( G4int A, G4bool fP ); 148 G4double GgSampleNM(G4Nucleus & nucl); 135 G4double GgSampleNM(G4Nucleus & nucl); 149 136 150 G4int GetEnergyIndex(G4double energy); 137 G4int GetEnergyIndex(G4double energy); 151 G4double GetNuMuQeTotRat(G4int index, G4doub 138 G4double GetNuMuQeTotRat(G4int index, G4double energy); 152 139 153 G4int GetOnePionIndex(G4double energy); 140 G4int GetOnePionIndex(G4double energy); 154 G4double GetNuMuOnePionProb(G4int index, G4d 141 G4double GetNuMuOnePionProb(G4int index, G4double energy); 155 << 156 G4double CalculateQEratioA( G4int Z, G4int A << 157 142 158 virtual void ModelDescription(std::ostream&) 143 virtual void ModelDescription(std::ostream&) const; 159 144 160 protected: 145 protected: 161 146 162 G4ParticleDefinition* theMuonMinus; 147 G4ParticleDefinition* theMuonMinus; 163 G4ParticleDefinition* theMuonPlus; 148 G4ParticleDefinition* theMuonPlus; 164 149 165 G4double fSin2tW; // sin^2theta_Weinberg 150 G4double fSin2tW; // sin^2theta_Weinberg 166 G4double fCutEnergy; // minimal recoil elect 151 G4double fCutEnergy; // minimal recoil electron energy detected 167 152 168 G4int fNbin, fIndex, fEindex, fXindex, fQind 153 G4int fNbin, fIndex, fEindex, fXindex, fQindex, fOnePionIndex, fPDGencoding; 169 G4bool fCascade, fString, fProton, f2p2h, fB 154 G4bool fCascade, fString, fProton, f2p2h, fBreak; 170 155 171 G4double fNuEnergy, fQ2, fQtransfer, fXsampl 156 G4double fNuEnergy, fQ2, fQtransfer, fXsample; 172 157 173 G4double fM1, fM2, fMt, fMu, fW2, fMpi, fW2 158 G4double fM1, fM2, fMt, fMu, fW2, fMpi, fW2pi, fMinNuEnergy, fDp, fTr; 174 159 175 G4double fEmu, fEmuPi, fEx, fMr, fCosTheta, << 160 G4double fEmu, fEmuPi, fEx, fMr, fCosTheta, fCosThetaPi; // final lepton 176 161 177 G4LorentzVector fLVh, fLVl, fLVt, fLVcpi; 162 G4LorentzVector fLVh, fLVl, fLVt, fLVcpi; 178 163 179 G4GeneratorPrecompoundInterface* fPrecoInter 164 G4GeneratorPrecompoundInterface* fPrecoInterface; 180 G4PreCompoundModel* fPreCompoun 165 G4PreCompoundModel* fPreCompound; 181 G4ExcitationHandler* fDeExcitati 166 G4ExcitationHandler* fDeExcitation; 182 167 >> 168 183 G4Nucleus* fRecoil; 169 G4Nucleus* fRecoil; 184 170 185 G4int fSecID; // Creator model ID for the s << 186 << 187 static const G4int fResNumber; 171 static const G4int fResNumber; 188 static const G4double fResMass[6]; // [fResN 172 static const G4double fResMass[6]; // [fResNumber]; 189 173 190 static const G4int fClustNumber; 174 static const G4int fClustNumber; 191 175 192 static const G4double fMesMass[4]; 176 static const G4double fMesMass[4]; 193 static const G4int fMesPDG[4]; 177 static const G4int fMesPDG[4]; 194 178 195 static const G4double fBarMass[4]; 179 static const G4double fBarMass[4]; 196 static const G4int fBarPDG[4]; 180 static const G4int fBarPDG[4]; 197 181 198 static const G4double fNuMuResQ[50][50]; 182 static const G4double fNuMuResQ[50][50]; 199 183 200 184 201 static const G4double fNuMuEnergy[50]; 185 static const G4double fNuMuEnergy[50]; 202 static const G4double fNuMuQeTotRat[50]; 186 static const G4double fNuMuQeTotRat[50]; 203 static const G4double fOnePionEnergy[58]; 187 static const G4double fOnePionEnergy[58]; 204 static const G4double fOnePionProb[58]; 188 static const G4double fOnePionProb[58]; 205 << 189 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 }; 190 }; 222 191 223 192 224 193 225 #endif 194 #endif 226 195