File indexing completed on 2025-01-18 09:58:44
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 #ifndef G4NeutrinoNucleusModel_h
0040 #define G4NeutrinoNucleusModel_h 1
0041
0042 #include "globals.hh"
0043 #include "G4HadronicInteraction.hh"
0044 #include "G4HadProjectile.hh"
0045 #include "G4Nucleus.hh"
0046 #include "G4NucleiProperties.hh"
0047 #include "G4LorentzVector.hh"
0048
0049 class G4ParticleDefinition;
0050 class G4PreCompoundModel;
0051
0052
0053
0054
0055
0056
0057 class G4Nucleus;
0058 class G4Fragment;
0059 class G4GeneratorPrecompoundInterface;
0060 class G4ExcitationHandler;
0061
0062 class G4NeutrinoNucleusModel : public G4HadronicInteraction
0063 {
0064 public:
0065
0066 G4NeutrinoNucleusModel(const G4String& name = "neutrino-nucleus");
0067
0068 virtual ~G4NeutrinoNucleusModel();
0069
0070 virtual G4bool IsApplicable(const G4HadProjectile & aTrack,
0071 G4Nucleus & targetNucleus);
0072
0073 G4double SampleXkr(G4double energy);
0074 G4double GetXkr(G4int iEnergy, G4double prob);
0075 G4double SampleQkr(G4double energy, G4double xx);
0076 G4double GetQkr(G4int iE, G4int jX, G4double prob);
0077
0078 virtual G4HadFinalState * ApplyYourself(const G4HadProjectile & aTrack,
0079 G4Nucleus & targetNucleus)=0;
0080
0081
0082
0083 void ClusterDecay( G4LorentzVector & lvX, G4int qX);
0084
0085 void MesonDecay( G4LorentzVector & lvX, G4int qX);
0086
0087 void FinalBarion( G4LorentzVector & lvB, G4int qB, G4int pdgB);
0088
0089 void RecoilDeexcitation( G4Fragment& fragment);
0090
0091 void FinalMeson( G4LorentzVector & lvM, G4int qM, G4int pdgM);
0092
0093 void CoherentPion( G4LorentzVector & lvP, G4int pdgP, G4Nucleus & targetNucleus);
0094
0095
0096
0097
0098 void SetCutEnergy(G4double ec){fCutEnergy=ec;};
0099 G4double GetCutEnergy(){return fCutEnergy;};
0100
0101 G4double GetNuEnergy(){return fNuEnergy;};
0102 G4double GetQtransfer(){return fQtransfer;};
0103 G4double GetQ2(){return fQ2;};
0104 G4double GetXsample(){return fXsample;};
0105
0106 G4int GetPDGencoding(){return fPDGencoding;};
0107 G4bool GetCascade(){return fCascade;};
0108 G4bool GetString(){return fString;};
0109
0110 G4double GetCosTheta(){return fCosTheta;};
0111 G4double GetEmu(){return fEmu;};
0112 G4double GetEx(){return fEx;};
0113 G4double GetMuMass(){return fMu;};
0114 G4double GetW2(){return fW2;};
0115 G4double GetM1(){return fM1;};
0116 G4double GetMr(){return fMr;};
0117 G4double GetTr(){return fTr;};
0118 G4double GetDp(){return fDp;};
0119
0120 G4bool GetfBreak() {return fBreak;};
0121 G4bool GetfCascade(){return fCascade;};
0122 G4bool GetfString() {return fString;};
0123
0124 G4LorentzVector GetLVl(){return fLVl;};
0125 G4LorentzVector GetLVh(){return fLVh;};
0126 G4LorentzVector GetLVt(){return fLVt;};
0127 G4LorentzVector GetLVcpi(){return fLVcpi;};
0128
0129 G4double GetMinNuMuEnergy(){ return fMu + 0.5*fMu*fMu/fM1 + 4.*CLHEP::MeV; };
0130
0131 G4double ThresholdEnergy(G4double mI, G4double mF, G4double mP)
0132 {
0133 G4double w = std::sqrt(fW2);
0134 return w + 0.5*( (mP+mF)*(mP+mF)-(w+mI)*(w+mI) )/mI;
0135 };
0136 G4double GetQEratioA(){ return fQEratioA; };
0137 void SetQEratioA( G4double qea ){ fQEratioA = qea; };
0138
0139
0140 G4double FinalMomentum(G4double mI, G4double mF, G4double mP, G4LorentzVector lvX);
0141
0142
0143
0144 G4double FermiMomentum( G4Nucleus & targetNucleus);
0145 G4double NucleonMomentum( G4Nucleus & targetNucleus);
0146
0147 G4double GetEx( G4int A, G4bool fP );
0148 G4double GgSampleNM(G4Nucleus & nucl);
0149
0150 G4int GetEnergyIndex(G4double energy);
0151 G4double GetNuMuQeTotRat(G4int index, G4double energy);
0152
0153 G4int GetOnePionIndex(G4double energy);
0154 G4double GetNuMuOnePionProb(G4int index, G4double energy);
0155
0156 G4double CalculateQEratioA( G4int Z, G4int A, G4double energy, G4int nepdg);
0157
0158 virtual void ModelDescription(std::ostream&) const;
0159
0160 protected:
0161
0162 G4ParticleDefinition* theMuonMinus;
0163 G4ParticleDefinition* theMuonPlus;
0164
0165 G4double fSin2tW;
0166 G4double fCutEnergy;
0167
0168 G4int fNbin, fIndex, fEindex, fXindex, fQindex, fOnePionIndex, fPDGencoding;
0169 G4bool fCascade, fString, fProton, f2p2h, fBreak;
0170
0171 G4double fNuEnergy, fQ2, fQtransfer, fXsample;
0172
0173 G4double fM1, fM2, fMt, fMu, fW2, fMpi, fW2pi, fMinNuEnergy, fDp, fTr;
0174
0175 G4double fEmu, fEmuPi, fEx, fMr, fCosTheta, fCosThetaPi, fQEratioA;
0176
0177 G4LorentzVector fLVh, fLVl, fLVt, fLVcpi;
0178
0179 G4GeneratorPrecompoundInterface* fPrecoInterface;
0180 G4PreCompoundModel* fPreCompound;
0181 G4ExcitationHandler* fDeExcitation;
0182
0183 G4Nucleus* fRecoil;
0184
0185 G4int fSecID;
0186
0187 static const G4int fResNumber;
0188 static const G4double fResMass[6];
0189
0190 static const G4int fClustNumber;
0191
0192 static const G4double fMesMass[4];
0193 static const G4int fMesPDG[4];
0194
0195 static const G4double fBarMass[4];
0196 static const G4int fBarPDG[4];
0197
0198 static const G4double fNuMuResQ[50][50];
0199
0200
0201 static const G4double fNuMuEnergy[50];
0202 static const G4double fNuMuQeTotRat[50];
0203 static const G4double fOnePionEnergy[58];
0204 static const G4double fOnePionProb[58];
0205
0206 static const G4double fNuMuEnergyLogVector[50];
0207
0208
0209
0210 static G4double fNuMuXarrayKR[50][51];
0211 static G4double fNuMuXdistrKR[50][50];
0212 static G4double fNuMuQarrayKR[50][51][51];
0213 static G4double fNuMuQdistrKR[50][51][50];
0214
0215
0216
0217 static const G4double fQEnergy[50];
0218 static const G4double fANeMuQEratio[50];
0219 static const G4double fNeMuQEratio[50];
0220
0221 };
0222
0223
0224
0225 #endif