Files
geant4/source/processes/hadronic/models/high_energy/include/G4HEInelastic.hh
T
2016-06-09 15:37:50 +02:00

253 lines
11 KiB
C++

//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// $Id: G4HEInelastic.hh,v 1.14 2007/04/11 18:11:30 dennis Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
//
// G4 Gheisha High Energy (GHE) model class -- header file
// H. Fesefeldt, RWTH Aachen 23-October-1996
// Last modified: 10-December-1996
// A prototype of the Gheisha High Energy collision model.
// It includes all Physics Routines from Geant3,
// relevant for simulation of hadronic processes
// above approx. 20 GeV incident momentum.
// Not included are the Physics Routines for
// stopping particles, the low energy neutron
// slowing down description and the low energy
// nuclear reactions a(A,A')b.
// All routines pass the compiler and give
// some reasonable numbers as output.
// A statistically significant comparison
// with GEANT3 and experimental data has
// still to be done.
#ifndef G4HEInelastic_h
#define G4HEInelastic_h 1
// Class description:
// Each of the high energy parameterized models (e.g. G4HEProtonInelastic)
// derives from the G4HEInelastic class. This class contains the various
// algorithms needed to implement the interaction. These include
// lambda-fragmentation, meson and nucleon cluster formation and decay,
// nuclear cascade, and nuclear de-excitation.
//
// This class is derived from G4HadronicInteraction.
// Class Description - End
#include "G4HEVector.hh"
#include "G4HadronicInteraction.hh"
class G4HEInelastic : public G4HadronicInteraction
{
public: // with description
G4HEInelastic(const G4String& modelName = "HEInelastic")
: G4HadronicInteraction(modelName)
{
SetParticles();
conserveEnergy = true;
};
~G4HEInelastic(){ };
void SetMaxNumberOfSecondaries( const G4int maxnumber )
{ MAXPART = maxnumber;}
void SetVerboseLevel( const G4int level)
{ verboseLevel = level;}
G4int verboseLevel;
G4int MAXPART;
G4bool conserveEnergy;
void ForceEnergyConservation(G4bool energyConservation)
{ conserveEnergy = energyConservation;}
G4bool EnergyConservation(void)
{ return conserveEnergy;}
G4double Amin(G4double a, G4double b);
G4double Amax(G4double a, G4double b);
G4int Imin(G4int a, G4int b);
G4int Imax(G4int a, G4int b);
void FillParticleChange(G4HEVector pv[], G4int aVecLength);
G4double pmltpc(G4int np, G4int nm, G4int nz, G4int n, G4double b, G4double c);
G4int Factorial(G4int n);
G4double NuclearInelasticity(G4double incidentKineticEnergy,
G4double atomicWeight,
G4double atomicNumber);
G4double NuclearExcitation(G4double incidentKineticEnergy,
G4double atomicWeight,
G4double atomicNumber,
G4double& excitationEnergyCascade,
G4double& excitationEnergyEvaporation);
void HighEnergyCascading(G4bool &successful,
G4HEVector pv[],
G4int &vecLen,
G4double &excitationEnergyGNP,
G4double &excitationEnergyDTA,
G4HEVector incidentParticle,
G4HEVector targetParticle,
G4double atomicWeight,
G4double atomicNumber);
void HighEnergyClusterProduction(G4bool &successful,
G4HEVector pv[],
G4int &vecLen,
G4double &excitationEnergyGNP,
G4double &excitationEnergyDTA,
G4HEVector incidentParticle,
G4HEVector targetParticle,
G4double atomicWeight,
G4double atomicNumber);
void TuningOfHighEnergyCascading(G4HEVector pv[],
G4int &vecLen,
G4HEVector incidentParticle,
G4HEVector targetParticle,
G4double atomicWeight,
G4double atomicNumber);
void MediumEnergyCascading(G4bool &successful,
G4HEVector pv[],
G4int &vecLen,
G4double &excitationEnergyGNP,
G4double &excitationEnergyDTA,
G4HEVector incidentParticle,
G4HEVector targetParticle,
G4double atomicWeight,
G4double atomicNumber);
void MediumEnergyClusterProduction(G4bool &successful,
G4HEVector pv[],
G4int &vecLen,
G4double &excitationEnergyGNP,
G4double &excitationEnergyDTA,
G4HEVector incidentParticle,
G4HEVector targetParticle,
G4double atomicWeight,
G4double atomicNumber);
void QuasiElasticScattering(G4bool &successful,
G4HEVector pv[],
G4int &vecLen,
G4double &excitationEnergyGNP,
G4double &excitationEnergyDTA,
G4HEVector incidentParticle,
G4HEVector targetParticle,
G4double atomicWeight,
G4double atomicNumber);
void ElasticScattering(G4bool &successful,
G4HEVector pv[],
G4int &vecLen,
G4HEVector incidentParticle,
G4double atomicWeight,
G4double atomicNumber);
G4int rtmi(G4double *x, G4double xli, G4double xri, G4double eps,
G4int iend, G4double aa, G4double bb, G4double cc,
G4double dd, G4double rr);
G4double fctcos(G4double t, G4double aa, G4double bb,G4double cc,
G4double dd, G4double rr);
void StrangeParticlePairProduction(const G4double availableEnergy,
const G4double centerOfMassEnergy,
G4HEVector pv[],
G4int &vecLen,
G4HEVector incidentParticle,
G4HEVector targetParticle);
G4double NBodyPhaseSpace(const G4double totalEnergy,
const G4bool constantCrossSection,
G4HEVector pv[],
G4int &vecLen);
G4double NBodyPhaseSpace(G4int npart,
G4HEVector pv[],
G4double wmax,
G4double wfcn,
G4int maxtrial,
G4int ntrial);
G4double gpdk(G4double a, G4double b, G4double c);
void QuickSort(G4double arr[], const G4int lidx, const G4int ridx);
G4double Alam(G4double a, G4double b, G4double c);
G4double CalculatePhaseSpaceWeight( G4int npart);
G4double normal(void);
G4double GammaRand(G4double avalue);
G4double Erlang(G4int mvalue);
G4int Poisson(G4double x);
void SetParticles(void);
G4HEVector PionPlus;
G4HEVector PionZero;
G4HEVector PionMinus;
G4HEVector KaonPlus;
G4HEVector KaonZero;
G4HEVector AntiKaonZero;
G4HEVector KaonMinus;
G4HEVector KaonZeroShort;
G4HEVector KaonZeroLong;
G4HEVector Proton;
G4HEVector AntiProton;
G4HEVector Neutron;
G4HEVector AntiNeutron;
G4HEVector Lambda;
G4HEVector AntiLambda;
G4HEVector SigmaPlus;
G4HEVector SigmaZero;
G4HEVector SigmaMinus;
G4HEVector AntiSigmaPlus;
G4HEVector AntiSigmaZero;
G4HEVector AntiSigmaMinus;
G4HEVector XiZero;
G4HEVector XiMinus;
G4HEVector AntiXiZero;
G4HEVector AntiXiMinus;
G4HEVector OmegaMinus;
G4HEVector AntiOmegaMinus;
G4HEVector Deuteron;
G4HEVector Triton;
G4HEVector Alpha;
G4HEVector Gamma;
};
#endif