Import Geant4 5.2.0 source tree
This commit is contained in:
@@ -93,22 +93,12 @@ public:
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
G4std::vector<G4DynamicParticle*>* SampleSecondaries(
|
||||
std::vector<G4DynamicParticle*>* SampleSecondaries(
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
G4double SampleCosineTheta(G4double& kineticEnergy,
|
||||
G4double& energyDeposition,
|
||||
G4double& stepLength,
|
||||
G4double& lambda) {return 1.0;};
|
||||
|
||||
G4double SampleDisplacement(G4double& kineticEnergy,
|
||||
G4double& truePathLength,
|
||||
G4double& stepLength,
|
||||
G4double& lambda) {return 0.0;};
|
||||
|
||||
G4double MaxSecondaryEnergy(const G4DynamicParticle*);
|
||||
|
||||
protected:
|
||||
@@ -140,7 +130,7 @@ private:
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4BetheBlochModel::MaxSecondaryEnergy(
|
||||
const G4ParticleDefinition* p,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kinEnergy)
|
||||
{
|
||||
|
||||
|
||||
@@ -87,6 +87,8 @@ private:
|
||||
|
||||
G4double minNumberInteractionsBohr;
|
||||
G4double minFraction;
|
||||
G4double xmin;
|
||||
G4double minLoss;
|
||||
// cash
|
||||
G4double kineticEnergy;
|
||||
G4double beta2;
|
||||
|
||||
@@ -92,22 +92,12 @@ public:
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
G4std::vector<G4DynamicParticle*>* SampleSecondaries(
|
||||
std::vector<G4DynamicParticle*>* SampleSecondaries(
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
G4double SampleCosineTheta(G4double& kineticEnergy,
|
||||
G4double& energyDeposition,
|
||||
G4double& stepLength,
|
||||
G4double& lambda) {return 1.0;};
|
||||
|
||||
G4double SampleDisplacement(G4double& kineticEnergy,
|
||||
G4double& truePathLength,
|
||||
G4double& stepLength,
|
||||
G4double& lambda) {return 0.0;};
|
||||
|
||||
G4double MaxSecondaryEnergy(const G4DynamicParticle*);
|
||||
|
||||
protected:
|
||||
@@ -159,7 +149,7 @@ private:
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4BraggModel::MaxSecondaryEnergy(
|
||||
const G4ParticleDefinition* p,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kinEnergy)
|
||||
{
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
// 13-02-03 The set of models is defined for region (V.Ivanchenko)
|
||||
// 26-03-03 Add GetDEDXDispersion (V.Ivanchenko)
|
||||
// 13-04-03 Add startFromNull (V.Ivanchenko)
|
||||
// 13-05-03 Add calculation of precise range (V.Ivanchenko)
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
@@ -70,7 +71,7 @@ public:
|
||||
|
||||
private:
|
||||
|
||||
G4RegionModels(G4int nMod, G4std::vector<G4int>& list, G4DataVector& lowE);
|
||||
G4RegionModels(G4int nMod, std::vector<G4int>& list, G4DataVector& lowE);
|
||||
|
||||
~G4RegionModels();
|
||||
|
||||
@@ -130,6 +131,8 @@ public:
|
||||
|
||||
void FillDEDXVector(G4PhysicsVector*, const G4MaterialCutsCouple*);
|
||||
|
||||
void FillDEDXVectorForPreciseRange(G4PhysicsVector*, const G4MaterialCutsCouple*);
|
||||
|
||||
void FillLambdaVector(G4PhysicsVector*, const G4MaterialCutsCouple*,
|
||||
G4bool startFromNull = true);
|
||||
|
||||
@@ -168,18 +171,18 @@ private:
|
||||
G4DataVector theCuts;
|
||||
G4DataVector theSubCuts;
|
||||
|
||||
G4std::vector<G4VEmModel*> models;
|
||||
G4std::vector<G4VEmFluctuationModel*> flucModels;
|
||||
G4std::vector<const G4Region*> regions;
|
||||
G4std::vector<G4int> orderOfModels;
|
||||
std::vector<G4VEmModel*> models;
|
||||
std::vector<G4VEmFluctuationModel*> flucModels;
|
||||
std::vector<const G4Region*> regions;
|
||||
std::vector<G4int> orderOfModels;
|
||||
G4DataVector upperEkin;
|
||||
|
||||
G4int nEmModels;
|
||||
G4int nRegions;
|
||||
G4int nCouples;
|
||||
|
||||
G4std::vector<G4int> idxOfRegionModels;
|
||||
G4std::vector<G4RegionModels*> setOfRegionModels;
|
||||
std::vector<G4int> idxOfRegionModels;
|
||||
std::vector<G4RegionModels*> setOfRegionModels;
|
||||
|
||||
G4double minSubRange;
|
||||
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4EnergyLossMessenger.hh,v 1.5 2003/04/04 14:33:33 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
// $Id: G4EnergyLossMessenger.hh,v 1.6 2003/05/13 14:16:27 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-02 $
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
@@ -76,6 +76,7 @@ class G4EnergyLossMessenger: public G4UImessenger
|
||||
G4UIcmdWithADoubleAndUnit* MinEnCmd;
|
||||
G4UIcmdWithADoubleAndUnit* MaxEnCmd;
|
||||
G4UIcmdWithABool* IntegCmd;
|
||||
G4UIcmdWithABool* rangeCmd;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4EnergyLossTables.hh,v 1.16 2003/04/12 17:54:39 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
// $Id: G4EnergyLossTables.hh,v 1.17 2003/06/16 17:02:34 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-05-02 $
|
||||
//
|
||||
// $Id:
|
||||
//
|
||||
@@ -31,7 +31,7 @@
|
||||
#ifndef included_G4EnergyLossTables
|
||||
#define included_G4EnergyLossTables
|
||||
|
||||
#include "g4std/map"
|
||||
#include <map>
|
||||
#include "globals.hh"
|
||||
|
||||
#include "G4PhysicsTable.hh"
|
||||
@@ -202,7 +202,7 @@ private:
|
||||
static void CPRWarning();
|
||||
static void ParticleHaveNoLoss(const G4ParticleDefinition* aParticle);
|
||||
|
||||
typedef G4std::map<K,G4EnergyLossTablesHelper,G4std::less<K> > helper_map;
|
||||
typedef std::map<K,G4EnergyLossTablesHelper,std::less<K> > helper_map;
|
||||
static helper_map dict;
|
||||
|
||||
static G4EnergyLossTablesHelper GetTables(const G4ParticleDefinition* p);
|
||||
|
||||
@@ -88,6 +88,8 @@ private:
|
||||
G4double minNumberInteractionsBohr;
|
||||
G4double theBohrBeta2;
|
||||
G4double minFraction;
|
||||
G4double xmin;
|
||||
G4double minLoss;
|
||||
// cash
|
||||
G4double kineticEnergy;
|
||||
G4double beta2;
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
#ifndef G4LossTableBuilder_h
|
||||
#define G4LossTableBuilder_h 1
|
||||
|
||||
#include "g4std/vector"
|
||||
#include <vector>
|
||||
#include "globals.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
|
||||
@@ -60,7 +60,7 @@ public:
|
||||
|
||||
~G4LossTableBuilder() {};
|
||||
|
||||
G4PhysicsTable* BuildDEDXTable(const G4std::vector<G4PhysicsTable*>&);
|
||||
G4PhysicsTable* BuildDEDXTable(const std::vector<G4PhysicsTable*>&);
|
||||
|
||||
G4PhysicsTable* BuildRangeTable(const G4PhysicsTable* dedxTable);
|
||||
|
||||
|
||||
@@ -59,8 +59,8 @@
|
||||
#define G4LossTableManager_h 1
|
||||
|
||||
|
||||
#include "g4std/map"
|
||||
#include "g4std/vector"
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include "globals.hh"
|
||||
#include "G4LossTableBuilder.hh"
|
||||
#include "G4VEnergyLossSTD.hh"
|
||||
@@ -134,6 +134,8 @@ public:
|
||||
|
||||
void SetStepLimits(G4double v1, G4double v2);
|
||||
|
||||
void SetBuildPreciseRange(G4bool val);
|
||||
|
||||
G4EnergyLossMessenger* GetMessenger();
|
||||
|
||||
private:
|
||||
@@ -151,16 +153,16 @@ private:
|
||||
static G4LossTableManager* theInstance;
|
||||
|
||||
typedef const G4ParticleDefinition* PD;
|
||||
G4std::map<PD,G4VEnergyLossSTD*,G4std::less<PD> > loss_map;
|
||||
std::map<PD,G4VEnergyLossSTD*,std::less<PD> > loss_map;
|
||||
|
||||
G4std::vector<G4VEnergyLossSTD*> loss_vector;
|
||||
G4std::vector<PD> part_vector;
|
||||
G4std::vector<PD> base_part_vector;
|
||||
G4std::vector<G4bool> tables_are_built;
|
||||
G4std::vector<G4PhysicsTable*> dedx_vector;
|
||||
G4std::vector<G4PhysicsTable*> range_vector;
|
||||
G4std::vector<G4PhysicsTable*> inv_range_vector;
|
||||
G4std::vector<G4VMultipleScattering*> msc_vector;
|
||||
std::vector<G4VEnergyLossSTD*> loss_vector;
|
||||
std::vector<PD> part_vector;
|
||||
std::vector<PD> base_part_vector;
|
||||
std::vector<G4bool> tables_are_built;
|
||||
std::vector<G4PhysicsTable*> dedx_vector;
|
||||
std::vector<G4PhysicsTable*> range_vector;
|
||||
std::vector<G4PhysicsTable*> inv_range_vector;
|
||||
std::vector<G4VMultipleScattering*> msc_vector;
|
||||
|
||||
// cash
|
||||
G4VEnergyLossSTD* currentLoss;
|
||||
@@ -176,7 +178,11 @@ private:
|
||||
G4bool subCutoffFlag;
|
||||
G4bool rndmStepFlag;
|
||||
G4bool integral;
|
||||
G4bool integralActive;
|
||||
G4bool all_tables_are_stored;
|
||||
G4bool buildPreciseRange;
|
||||
G4bool minEnergyActive;
|
||||
G4bool maxEnergyActive;
|
||||
|
||||
G4double minSubRange;
|
||||
G4double maxRangeVariation;
|
||||
@@ -201,7 +207,7 @@ inline G4double G4LossTableManager::GetDEDX(
|
||||
const G4MaterialCutsCouple *couple)
|
||||
{
|
||||
if(aParticle != currentParticle) {
|
||||
G4std::map<PD, G4VEnergyLossSTD*,G4std::less<PD> >::const_iterator pos;
|
||||
std::map<PD, G4VEnergyLossSTD*,std::less<PD> >::const_iterator pos;
|
||||
if ((pos = loss_map.find(aParticle)) != loss_map.end()) {
|
||||
currentParticle = aParticle;
|
||||
currentLoss = (*pos).second;
|
||||
@@ -220,7 +226,7 @@ inline G4double G4LossTableManager::GetRange(
|
||||
const G4MaterialCutsCouple *couple)
|
||||
{
|
||||
if(aParticle != currentParticle) {
|
||||
G4std::map<PD, G4VEnergyLossSTD*, G4std::less<PD> >::const_iterator pos;
|
||||
std::map<PD, G4VEnergyLossSTD*, std::less<PD> >::const_iterator pos;
|
||||
if ((pos = loss_map.find(aParticle)) != loss_map.end()) {
|
||||
currentParticle = aParticle;
|
||||
currentLoss = (*pos).second;
|
||||
@@ -239,7 +245,7 @@ inline G4double G4LossTableManager::GetEnergy(
|
||||
const G4MaterialCutsCouple *couple)
|
||||
{
|
||||
if(aParticle != currentParticle) {
|
||||
G4std::map<PD,G4VEnergyLossSTD*,G4std::less<PD> >::const_iterator pos;
|
||||
std::map<PD,G4VEnergyLossSTD*,std::less<PD> >::const_iterator pos;
|
||||
if ((pos = loss_map.find(aParticle)) != loss_map.end()) {
|
||||
currentParticle = aParticle;
|
||||
currentLoss = (*pos).second;
|
||||
@@ -259,7 +265,7 @@ inline G4double G4LossTableManager::GetDEDXDispersion(
|
||||
{
|
||||
const G4ParticleDefinition* aParticle = dp->GetDefinition();
|
||||
if(aParticle != currentParticle) {
|
||||
G4std::map<PD,G4VEnergyLossSTD*,G4std::less<PD> >::const_iterator pos;
|
||||
std::map<PD,G4VEnergyLossSTD*,std::less<PD> >::const_iterator pos;
|
||||
if ((pos = loss_map.find(aParticle)) != loss_map.end()) {
|
||||
currentParticle = aParticle;
|
||||
currentLoss = (*pos).second;
|
||||
|
||||
+23
-20
@@ -26,7 +26,7 @@
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4LewisModel
|
||||
// File name: G4MscModel
|
||||
//
|
||||
// Author: Laszlo Urban
|
||||
//
|
||||
@@ -35,30 +35,31 @@
|
||||
// Modifications:
|
||||
//
|
||||
// 27-03-03 Move model part from G4MultipleScattering (V.Ivanchenko)
|
||||
// 27-03-03 Rename (V.Ivanchenko)
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of Lewis model of multiple scattering
|
||||
// H.W.Lewis Phys Rev 78 (1950) 526
|
||||
// Implementation of the model of multiple scattering based on
|
||||
// H.W.Lewis Phys Rev 78 (1950) 526 and others
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4LewisModel_h
|
||||
#define G4LewisModel_h 1
|
||||
#ifndef G4MscModel_h
|
||||
#define G4MscModel_h 1
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
|
||||
class G4LewisModel : public G4VEmModel
|
||||
class G4MscModel : public G4VEmModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4LewisModel(G4double&, G4double&, G4double&, G4double&, G4bool&,
|
||||
const G4String& nam = "Lewis");
|
||||
G4MscModel(G4double&, G4double&, G4double&, G4double&, G4bool&,
|
||||
const G4String& nam = "MscUni");
|
||||
|
||||
~G4LewisModel();
|
||||
~G4MscModel();
|
||||
|
||||
void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
@@ -77,8 +78,8 @@ public:
|
||||
|
||||
G4double ComputeDEDX(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double cutEnergy) {return 0.0;};
|
||||
G4double,
|
||||
G4double) {return 0.0;};
|
||||
|
||||
G4double CrossSection(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
@@ -89,14 +90,14 @@ public:
|
||||
G4DynamicParticle* SampleSecondary(
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy) {return 0;};
|
||||
G4double,
|
||||
G4double) {return 0;};
|
||||
|
||||
G4std::vector<G4DynamicParticle*>* SampleSecondaries(
|
||||
std::vector<G4DynamicParticle*>* SampleSecondaries(
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy) {return 0;};
|
||||
G4double,
|
||||
G4double) {return 0;};
|
||||
|
||||
G4double GeomPathLength(G4PhysicsTable* theLambdaTable,
|
||||
const G4MaterialCutsCouple* couple,
|
||||
@@ -117,7 +118,7 @@ public:
|
||||
protected:
|
||||
|
||||
G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy) {return 0.0;};
|
||||
G4double) {return 0.0;};
|
||||
|
||||
private:
|
||||
|
||||
@@ -128,12 +129,12 @@ private:
|
||||
G4double AtomicWeight);
|
||||
|
||||
// hide assignment operator
|
||||
G4LewisModel & operator=(const G4LewisModel &right);
|
||||
G4LewisModel(const G4LewisModel&);
|
||||
G4MscModel & operator=(const G4MscModel &right);
|
||||
G4MscModel(const G4MscModel&);
|
||||
|
||||
const G4ParticleDefinition* particle;
|
||||
G4double mass;
|
||||
G4double chargeSquare;
|
||||
G4double charge;
|
||||
G4double massRate;
|
||||
G4double highKinEnergy;
|
||||
G4double lowKinEnergy;
|
||||
@@ -167,6 +168,8 @@ private:
|
||||
|
||||
G4double stepmin ;
|
||||
|
||||
G4double currentRadLength;
|
||||
G4double currentKinEnergy;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
@@ -21,7 +21,7 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4MultipleScattering.hh,v 1.16 2003/04/18 12:44:04 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
// GEANT4 tag $Name: geant4-05-02 $
|
||||
//
|
||||
//------------- G4MultipleScattering physics process --------------------------
|
||||
// by Laszlo Urban, March 2001
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
// * statement, and all its terms. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4MultipleScattering.icc,v 1.9 2003/04/18 12:44:05 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
// $Id: G4MultipleScattering.icc,v 1.11 2003/06/16 14:43:11 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-02 $
|
||||
//
|
||||
//------------ G4MultipleScattering physics process ---------------------------
|
||||
// by Laszlo Urban, March 2001
|
||||
@@ -36,6 +36,7 @@
|
||||
// 11-09-01 G4MultipleScatteringx put as default: G4MultipleScattering (mma)
|
||||
// 15-01-03 Migrade to cut per region (V.Ivanchenko)
|
||||
// 18-04-03 Change signature of GetTransportMeanFreePath (V.Ivanchenko)
|
||||
// 16-06-03: ShortLived are not applicable any more (V.Ivanchenko)
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@@ -44,7 +45,7 @@
|
||||
inline
|
||||
G4bool G4MultipleScattering::IsApplicable(const G4ParticleDefinition& particle)
|
||||
{
|
||||
return(particle.GetPDGCharge() != 0.);
|
||||
return(particle.GetPDGCharge() != 0. && !particle.IsShortLived());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
@@ -67,7 +68,7 @@ inline G4double G4MultipleScattering::AlongStepGetPhysicalInteractionLength(
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4MultipleScattering::GetMeanFreePath(
|
||||
const G4Track& track,
|
||||
const G4Track&,
|
||||
G4double,
|
||||
G4ForceCondition* condition)
|
||||
|
||||
|
||||
@@ -40,8 +40,14 @@
|
||||
// 30-10-02 changes in data members, L.Urban
|
||||
// 20-01-03 Migrade to cut per region (V.Ivanchenko)
|
||||
// 05-02-03 changes in data members, L.Urban
|
||||
// 28-03-03 Move to model design (V.Ivanchenko)
|
||||
// 18-04-03 Change name (V.Ivanchenko)
|
||||
// 16-06-03: ShortLived are not applicable any more (V.Ivanchenko)
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// $Id: G4MultipleScatteringSTD.hh,v 1.13 2003/06/16 14:44:10 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-02 $
|
||||
|
||||
// class description
|
||||
//
|
||||
@@ -56,181 +62,80 @@
|
||||
#ifndef G4MultipleScatteringSTD_h
|
||||
#define G4MultipleScatteringSTD_h 1
|
||||
|
||||
#include "G4VContinuousDiscreteProcess.hh"
|
||||
#include "G4GPILSelection.hh"
|
||||
#include "G4PhysicsLogVector.hh"
|
||||
#include "G4VPhysicalVolume.hh"
|
||||
#include "G4ParticleChangeForMSC.hh"
|
||||
#include "G4UnitsTable.hh"
|
||||
#include "G4VMultipleScattering.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4MultipleScatteringSTD : public G4VContinuousDiscreteProcess
|
||||
class G4MultipleScatteringSTD : public G4VMultipleScattering
|
||||
|
||||
{
|
||||
public: // with description
|
||||
public: // with description
|
||||
|
||||
G4MultipleScatteringSTD(const G4String& processName="msc");
|
||||
G4MultipleScatteringSTD(const G4String& processName="msc");
|
||||
|
||||
~G4MultipleScatteringSTD();
|
||||
|
||||
G4bool IsApplicable ( const G4ParticleDefinition& );
|
||||
|
||||
G4bool IsApplicable (const G4ParticleDefinition& p)
|
||||
{return (p.GetPDGCharge() != 0.0 && !p.IsShortLived());};
|
||||
// returns true for charged particles, false otherwise
|
||||
|
||||
void BuildPhysicsTable(const G4ParticleDefinition& aParticleType);
|
||||
// This function overloads the corresponding virtual function
|
||||
// of the base class G4VContinuousDiscreteProcess.
|
||||
// It is invoked by the G4ParticleWithCuts()::SetCut() method.
|
||||
// It prepares the table of the transport mean free paths
|
||||
// for every material.
|
||||
void InitialiseProcess(const G4ParticleDefinition&);
|
||||
// This function initialise models
|
||||
|
||||
void PrintInfoDefinition();
|
||||
G4double TruePathLengthLimit(const G4Track& track,
|
||||
G4double& lambda,
|
||||
G4double currentMinimalStep);
|
||||
|
||||
void PrintInfoDefinition();
|
||||
// Print few lines of informations about the process: validity range,
|
||||
// origine ..etc..
|
||||
// Invoked by BuildPhysicsTable().
|
||||
|
||||
|
||||
G4bool StorePhysicsTable(G4ParticleDefinition* ,
|
||||
const G4String& directory, G4bool);
|
||||
// store TransportMeanFreePath tables into an external file
|
||||
// specified by 'directory' (must exist before invokation)
|
||||
|
||||
G4bool RetrievePhysicsTable(G4ParticleDefinition* ,
|
||||
const G4String& directory, G4bool);
|
||||
// retrieve TransportMeanFreePath tables from an external file
|
||||
// specified by 'directory'
|
||||
|
||||
|
||||
G4double AlongStepGetPhysicalInteractionLength(const G4Track&,
|
||||
G4double previousStepSize,
|
||||
G4double currentMinimumStep,
|
||||
G4double& currentSafety,
|
||||
G4GPILSelection* selection);
|
||||
// The function overloads the corresponding function of the base
|
||||
// class.It limits the step near to boundaries only
|
||||
// and invokes the method GetContinuousStepLimit at every step.
|
||||
|
||||
G4double GetContinuousStepLimit(const G4Track& aTrack,
|
||||
G4double previousStepSize,
|
||||
G4double currentMinimumStep,
|
||||
G4double& currentSafety);
|
||||
// It performs the true step length --> geometrical step length
|
||||
// transformation. It is invoked by the
|
||||
// AlongStepGetPhysicalInteractionLength method.
|
||||
|
||||
G4double GetMeanFreePath(const G4Track& aTrack,
|
||||
G4double previousStepSize,
|
||||
G4ForceCondition* condition);
|
||||
// It sets the force condition to true only
|
||||
// in order to have the PostStepDoIt called at every step.
|
||||
// This function overloads a virtual function of the base class.
|
||||
// It is invoked by the ProcessManager of the Particle.
|
||||
|
||||
|
||||
G4double GetTransportMeanFreePath(
|
||||
G4double KineticEnergy,const G4MaterialCutsCouple* couple);
|
||||
// Just a utility method to get the values of the transport
|
||||
// mean free path . (It is not used inside the class.)
|
||||
|
||||
G4VParticleChange* AlongStepDoIt(const G4Track& aTrack,const G4Step& aStep);
|
||||
// The geometrical step length --> true path length transformation
|
||||
// is performed here (the inverse of the transformation done
|
||||
// by GetContinuousStepLimit).
|
||||
|
||||
G4VParticleChange* PostStepDoIt(const G4Track& aTrack,const G4Step& aStep);
|
||||
// It computes the final state of the particle: samples the
|
||||
// ScatteringSTD angle and computes the lateral displacement.
|
||||
// The final state is returned as a ParticleChange object.
|
||||
// This function overloads a virtual function of the base class.
|
||||
// It is invoked by the ProcessManager of the Particle.
|
||||
|
||||
void Setsamplez(G4bool value) {samplez = value;};
|
||||
void Setsamplez(G4bool value) {samplez = value;};
|
||||
// geom. step length distribution should be sampled or not
|
||||
|
||||
void Setdtrl(G4double value) {dtrl = value;};
|
||||
void Setdtrl(G4double value) {dtrl = value;};
|
||||
// to reduce the energy/step dependence
|
||||
|
||||
void SetBoundary(G4bool value) {boundary = value;};
|
||||
void Setfacxsi(G4double value) {facxsi = value;
|
||||
G4cout << " facxsi=" << facxsi << G4endl;};
|
||||
void SetFacrange(G4double val) {facrange=val;
|
||||
nsmallstep = G4int(log((cf+facrange-1.)/
|
||||
facrange)/log(cf))+1 ;
|
||||
G4cout << " fr=" << facrange
|
||||
<< " nsmall=" << nsmallstep << G4endl ;};
|
||||
void Setfacxsi(G4double value) {facxsi = value;}
|
||||
void SetFacrange(G4double val) {facrange=val;
|
||||
nsmallstep = G4int(log((cf+facrange-1.)/facrange)/log(cf))+1;}
|
||||
// Steplimit after boundary crossing = facrange*range
|
||||
// estimated nb of steps at boundary nsmallstep = 1/facrange
|
||||
|
||||
void SetLateralDisplacementFlag(G4bool flag) {fLatDisplFlag = flag;};
|
||||
// lateral displacement to be/not to be computed
|
||||
|
||||
void SetNuclCorrPar(G4double val) {NuclCorrPar = val;};
|
||||
void SetFactPar(G4double val) {FactPar = val;};
|
||||
void SetNuclCorrPar(G4double val) {NuclCorrPar = val;};
|
||||
void SetFactPar(G4double val) {FactPar = val;};
|
||||
// corrs to transport cross section for high energy
|
||||
|
||||
protected: // with description
|
||||
|
||||
virtual G4double ComputeTransportCrossSection(
|
||||
const G4ParticleDefinition& aParticleType,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double AtomicWeight);
|
||||
// It computes the transport cross section.
|
||||
// The transport mean free path is 1/(transport cross section).
|
||||
|
||||
private:
|
||||
private:
|
||||
|
||||
// hide assignment operator as private
|
||||
G4MultipleScatteringSTD & operator = (const G4MultipleScatteringSTD &right);
|
||||
G4MultipleScatteringSTD ( const G4MultipleScatteringSTD &);
|
||||
G4MultipleScatteringSTD & operator = (const G4MultipleScatteringSTD &right);
|
||||
G4MultipleScatteringSTD ( const G4MultipleScatteringSTD &);
|
||||
|
||||
private: // data members
|
||||
private: // data members
|
||||
|
||||
G4PhysicsTable* theTransportMeanFreePathTable;
|
||||
G4double lowKineticEnergy;
|
||||
G4double highKineticEnergy;
|
||||
G4int totBins;
|
||||
|
||||
G4double taubig,tausmall,taulim;
|
||||
G4double facrange;
|
||||
G4double tlimit;
|
||||
G4double tlimitmin;
|
||||
G4double dtrl;
|
||||
G4double NuclCorrPar;
|
||||
G4double FactPar;
|
||||
G4double facxsi;
|
||||
G4double cf;
|
||||
|
||||
G4double LowestKineticEnergy;
|
||||
G4double HighestKineticEnergy;
|
||||
G4int TotBin;
|
||||
G4int stepnolastmsc;
|
||||
G4int nsmallstep;
|
||||
|
||||
G4int materialIndex;
|
||||
|
||||
G4double tLast;
|
||||
G4double zLast;
|
||||
|
||||
// model parameters
|
||||
G4bool boundary; // spec. handling near boundaries
|
||||
G4double facrange,tlimit,tlimitmin,cf;
|
||||
G4int stepno, stepnolastmsc, nsmallstep;
|
||||
G4double laststep ;
|
||||
G4GPILSelection valueGPILSelectionMSC;
|
||||
|
||||
G4double zmean; // z(geom.step length)
|
||||
G4bool samplez ; // distribution
|
||||
|
||||
G4double range,T0,T1,lambda0,lambda1, // used to reduce the energy
|
||||
Tlow,alam,blam,dtrl,lambdam, // (or step length) dependence
|
||||
clam,zm,cthm;
|
||||
|
||||
// with/without lateral displacement
|
||||
G4bool fLatDisplFlag;
|
||||
|
||||
// nuclear size effect correction
|
||||
G4double NuclCorrPar;
|
||||
G4double FactPar;
|
||||
|
||||
G4ParticleChangeForMSC fParticleChange;
|
||||
|
||||
G4double alfa1,alfa2,alfa3,b,xsi,c0,facxsi ; // angle distr. parameters
|
||||
// facxsi : some tuning
|
||||
// possibility in the tail
|
||||
G4bool samplez;
|
||||
G4bool boundary;
|
||||
|
||||
};
|
||||
|
||||
#include "G4MultipleScatteringSTD.icc"
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * DISCLAIMER *
|
||||
// * *
|
||||
// * The following disclaimer summarizes all the specific disclaimers *
|
||||
// * of contributors to this software. The specific disclaimers,which *
|
||||
// * govern, are listed with their locations in: *
|
||||
// * http://cern.ch/geant4/license *
|
||||
// * *
|
||||
// * 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. *
|
||||
// * *
|
||||
// * This code implementation is the intellectual property of the *
|
||||
// * GEANT4 collaboration. *
|
||||
// * By copying, distributing or modifying the Program (or any work *
|
||||
// * based on the Program) you indicate your acceptance of this *
|
||||
// * statement, and all its terms. *
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4MultipleScatteringSTD.icc,v 1.4 2003/04/24 16:49:46 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
//
|
||||
//------------ G4MultipleScattering physics process ---------------------------
|
||||
// by Laszlo Urban, March 2001
|
||||
//
|
||||
// Modified:
|
||||
//
|
||||
// 18-05-01 V.Ivanchenko Clean up against Linux ANSI compilation
|
||||
// 23-08-01 new angle and z distribution,energy dependence reduced,
|
||||
// Store,Retrieve methods commented out temporarily, L.Urban
|
||||
// 27-08-01 bugfix in AlongStepDoIt, L.Urban
|
||||
// 28-08-01 GetContinuousStepLimit and AlongStepDoIt moved to .cc file (mma)
|
||||
// 11-09-01 G4MultipleScatteringx put as default: G4MultipleScattering (mma)
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4bool G4MultipleScatteringSTD::IsApplicable(const G4ParticleDefinition& particle)
|
||||
{
|
||||
return(particle.GetPDGCharge() != 0.);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4MultipleScatteringSTD::AlongStepGetPhysicalInteractionLength(
|
||||
const G4Track& track,
|
||||
G4double previousStepSize,
|
||||
G4double currentMinimumStep,
|
||||
G4double& currentSafety,
|
||||
G4GPILSelection* selection)
|
||||
{
|
||||
// get Step limit proposed by the process
|
||||
G4double steplength = GetContinuousStepLimit(track,previousStepSize,
|
||||
currentMinimumStep,currentSafety);
|
||||
// set return value for G4GPILSelection
|
||||
*selection = valueGPILSelectionMSC;
|
||||
return steplength;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4MultipleScatteringSTD::GetMeanFreePath(
|
||||
const G4Track& track,
|
||||
G4double,
|
||||
G4ForceCondition* condition)
|
||||
|
||||
// it does not limit the Step size , but it sets condition to
|
||||
// Forced , because the PostStepDoIt always has to be called
|
||||
|
||||
{
|
||||
*condition = Forced;
|
||||
return DBL_MAX;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4double G4MultipleScatteringSTD::GetTransportMeanFreePath(G4double KineticEnergy,
|
||||
const G4MaterialCutsCouple* couple)
|
||||
{
|
||||
G4bool isOut;
|
||||
|
||||
return (*theTransportMeanFreePathTable)
|
||||
(couple->GetIndex())->GetValue(KineticEnergy,isOut);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
@@ -66,7 +66,7 @@ public:
|
||||
|
||||
~G4SCProcessorStand();
|
||||
|
||||
virtual G4std::vector<G4Track*>* SampleSecondaries(const G4Step&,
|
||||
virtual std::vector<G4Track*>* SampleSecondaries(const G4Step&,
|
||||
G4double& tmax,
|
||||
G4double& meanLoss,
|
||||
G4VEmModel*) = 0;
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
#define G4VEmModel_h 1
|
||||
|
||||
#include "globals.hh"
|
||||
#include "g4std/vector"
|
||||
#include <vector>
|
||||
#include "G4DynamicParticle.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4Material.hh"
|
||||
@@ -102,23 +102,26 @@ public:
|
||||
G4double tmin,
|
||||
G4double tmax) = 0;
|
||||
|
||||
virtual G4std::vector<G4DynamicParticle*>* SampleSecondaries(
|
||||
virtual std::vector<G4DynamicParticle*>* SampleSecondaries(
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double tmax) = 0;
|
||||
|
||||
virtual G4double GeomPathLength(G4PhysicsTable* theLambdaTable,
|
||||
const G4MaterialCutsCouple* couple,
|
||||
const G4ParticleDefinition* particle,
|
||||
G4double& kineticEnergy,
|
||||
G4double lambda,
|
||||
G4double range,
|
||||
G4double truePathLength) {return truePathLength;};
|
||||
virtual G4double GeomPathLength(G4PhysicsTable*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double&,
|
||||
G4double,
|
||||
G4double,
|
||||
G4double truePathLength) {return truePathLength;};
|
||||
// G4double parameters: kinEnergy, lambda, range,
|
||||
// G4PhysicsTable: theLambdaTable
|
||||
|
||||
virtual G4double TrueStepLength(G4double geomStepLength) {return geomStepLength;};
|
||||
|
||||
virtual G4double SampleCosineTheta(G4double trueStepLength) {return 1.0;};
|
||||
virtual G4double SampleCosineTheta(G4double ) {return 1.0; };
|
||||
// G4double parrameter trueStepLength
|
||||
|
||||
virtual G4double SampleDisplacement() {return 0.0;};
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: G4VEnergyLoss.hh,v 1.17 2003/03/25 13:36:57 maire Exp $
|
||||
// GEANT4 tag $Name: geant4-05-01 $
|
||||
// GEANT4 tag $Name: geant4-05-02 $
|
||||
//
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
// 26-02-03 Region dependent step limit (V.Ivanchenko)
|
||||
// 26-03-03 Add GetDEDXDispersion (V.Ivanchenko)
|
||||
// 09-04-03 Fix problem of negative range limit for non integral (V.Ivanchenko)
|
||||
// 13-05-03 Add calculation of precise range (V.Ivanchenko)
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
@@ -93,7 +94,7 @@ public:
|
||||
|
||||
G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&);
|
||||
|
||||
virtual G4std::vector<G4Track*>* SecondariesAlongStep(
|
||||
virtual std::vector<G4Track*>* SecondariesAlongStep(
|
||||
const G4Step&,
|
||||
G4double& tmax,
|
||||
G4double& eloss,
|
||||
@@ -113,11 +114,14 @@ public:
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
// Build physics table during initialisation
|
||||
|
||||
virtual void PrintInfoDefinition() const;
|
||||
virtual void PrintInfoDefinition();
|
||||
|
||||
// Print out of the class parameters
|
||||
|
||||
G4PhysicsTable* BuildDEDXTable();
|
||||
|
||||
G4PhysicsTable* BuildDEDXTableForPreciseRange();
|
||||
|
||||
G4PhysicsTable* BuildLambdaTable();
|
||||
|
||||
G4PhysicsTable* BuildLambdaSubTable();
|
||||
@@ -133,23 +137,31 @@ public:
|
||||
const G4ParticleDefinition* Particle() const;
|
||||
const G4ParticleDefinition* BaseParticle() const;
|
||||
const G4ParticleDefinition* SecondaryParticle() const;
|
||||
// Print out of the class parameters
|
||||
// Particle definition
|
||||
|
||||
void SetDEDXBinning(G4int nbins);
|
||||
G4int DEDXBinning() const;
|
||||
// Print out of the class parameters
|
||||
// G4int DEDXBinning() const;
|
||||
// Binning for dEdx, range, and inverse range tables
|
||||
|
||||
void SetDEDXBinningForPreciseRange(G4int nbins);
|
||||
// G4int DEDXBinningForPreciseRange() const;
|
||||
// Binning for dEdx, range, and inverse range tables
|
||||
|
||||
void SetLambdaBinning(G4int nbins);
|
||||
G4int LambdaBinning() const;
|
||||
// Print out of the class parameters
|
||||
// G4int LambdaBinning() const;
|
||||
// Binning for lambda table
|
||||
|
||||
void SetMinKinEnergy(G4double e);
|
||||
G4double MinKinEnergy() const;
|
||||
// Print out of the class parameters
|
||||
// Min kinetic energy for tables
|
||||
|
||||
void SetMaxKinEnergy(G4double e);
|
||||
G4double MaxKinEnergy() const;
|
||||
// Print out of the class parameters
|
||||
// Max kinetic energy for tables
|
||||
|
||||
void SetMaxKinEnergyForPreciseRange(G4double e);
|
||||
// G4double MaxKinEnergyForPreciseRange() const;
|
||||
// Max kinetic energy for tables
|
||||
|
||||
G4bool StorePhysicsTable(G4ParticleDefinition*,
|
||||
const G4String& directory,
|
||||
@@ -213,6 +225,7 @@ public:
|
||||
void SetLossFluctuations(G4bool val) {lossFluctuationFlag = val;};
|
||||
|
||||
void SetIntegral(G4bool val) {integral = val;};
|
||||
G4bool IsIntegral() const {return integral;}
|
||||
|
||||
void SetRandomStep(G4bool val) {rndmStepFlag = val;};
|
||||
|
||||
@@ -220,6 +233,8 @@ public:
|
||||
|
||||
void SetStepLimits(G4double v1, G4double v2);
|
||||
|
||||
void SetRangeCoeff(G4double val);
|
||||
|
||||
G4bool TablesAreBuilt() const {return tablesAreBuilt;};
|
||||
|
||||
G4int NumberOfSubCutoffRegions() const {return nSCoffRegions;};
|
||||
@@ -256,6 +271,9 @@ protected:
|
||||
virtual
|
||||
G4PhysicsVector* DEDXPhysicsVector(const G4MaterialCutsCouple*);
|
||||
|
||||
virtual
|
||||
G4PhysicsVector* DEDXPhysicsVectorForPreciseRange(const G4MaterialCutsCouple*);
|
||||
|
||||
virtual
|
||||
G4PhysicsVector* LambdaPhysicsVector(const G4MaterialCutsCouple*);
|
||||
|
||||
@@ -297,10 +315,10 @@ private:
|
||||
private:
|
||||
|
||||
G4EmModelManager* modelManager;
|
||||
G4std::vector<G4VSubCutoffProcessor*> scoffProcessors;
|
||||
G4std::vector<const G4Region*> scoffRegions;
|
||||
std::vector<G4VSubCutoffProcessor*> scoffProcessors;
|
||||
std::vector<const G4Region*> scoffRegions;
|
||||
G4int nSCoffRegions;
|
||||
G4std::vector<G4int> idxSCoffRegions;
|
||||
std::vector<G4int> idxSCoffRegions;
|
||||
|
||||
// tables and vectors
|
||||
G4PhysicsTable* theDEDXTable;
|
||||
@@ -309,6 +327,8 @@ private:
|
||||
G4PhysicsTable* theInverseRangeTable;
|
||||
G4PhysicsTable* theLambdaTable;
|
||||
G4PhysicsTable* theSubLambdaTable;
|
||||
G4double* theDEDXAtMaxEnergy;
|
||||
G4double* theRangeAtMaxEnergy;
|
||||
|
||||
const G4DataVector* theCuts;
|
||||
|
||||
@@ -324,10 +344,15 @@ private:
|
||||
size_t currentMaterialIndex;
|
||||
|
||||
G4int nDEDXBins;
|
||||
G4int nDEDXBinsForRange;
|
||||
G4int nLambdaBins;
|
||||
|
||||
G4double faclow;
|
||||
G4double minKinEnergy;
|
||||
G4double maxKinEnergy;
|
||||
G4double maxKinEnergyForRange;
|
||||
G4double lowKinEnergy;
|
||||
G4double highKinEnergyForRange;
|
||||
|
||||
G4double massRatio;
|
||||
G4double reduceFactor;
|
||||
@@ -342,6 +367,7 @@ private:
|
||||
G4double minSubRange;
|
||||
G4double dRoverRange;
|
||||
G4double finalRange;
|
||||
G4double rangeCoeff;
|
||||
|
||||
G4bool lossFluctuationFlag;
|
||||
G4bool rndmStepFlag;
|
||||
@@ -377,7 +403,7 @@ inline G4double G4VEnergyLossSTD::GetDEDX(G4double& kineticEnergy,
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
/*
|
||||
inline G4double G4VEnergyLossSTD::GetRange(G4double& kineticEnergy,
|
||||
const G4MaterialCutsCouple* couple)
|
||||
{
|
||||
@@ -387,6 +413,25 @@ inline G4double G4VEnergyLossSTD::GetRange(G4double& kineticEnergy,
|
||||
GetValue(kineticEnergy*massRatio, b))*reduceFactor;
|
||||
}
|
||||
|
||||
*/
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4VEnergyLossSTD::GetRange(G4double& kineticEnergy,
|
||||
const G4MaterialCutsCouple* couple)
|
||||
{
|
||||
DefineMaterial(couple);
|
||||
G4bool b;
|
||||
G4double x;
|
||||
G4double e = kineticEnergy*massRatio;
|
||||
if (e < highKinEnergyForRange) {
|
||||
x = ((*theRangeTable)[currentMaterialIndex])->GetValue(e, b);
|
||||
} else {
|
||||
x = theRangeAtMaxEnergy[currentMaterialIndex] +
|
||||
(e - highKinEnergyForRange)/theDEDXAtMaxEnergy[currentMaterialIndex];
|
||||
}
|
||||
return x*reduceFactor;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4VEnergyLossSTD::GetKineticEnergy(G4double& range,
|
||||
@@ -407,7 +452,7 @@ inline G4double G4VEnergyLossSTD::GetDEDXDispersion(
|
||||
{
|
||||
DefineMaterial(couple);
|
||||
G4double tmax = MaxSecondaryEnergy(dp);
|
||||
tmax = G4std::min(tmax,(*theCuts)[currentMaterialIndex]);
|
||||
tmax = std::min(tmax,(*theCuts)[currentMaterialIndex]);
|
||||
return modelManager->GetDEDXDispersion(currentMaterial, dp, tmax, length,
|
||||
currentMaterialIndex);
|
||||
}
|
||||
@@ -438,7 +483,7 @@ inline G4double G4VEnergyLossSTD::GetMeanFreePath(const G4Track& track,
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4VEnergyLossSTD::GetContinuousStepLimit(const G4Track&,
|
||||
G4double, G4double, G4double&)
|
||||
G4double, G4double currentMinimumStep, G4double&)
|
||||
{
|
||||
G4double x = DBL_MAX;
|
||||
|
||||
@@ -447,10 +492,11 @@ inline G4double G4VEnergyLossSTD::GetContinuousStepLimit(const G4Track&,
|
||||
fRange = ((*theRangeTable)[currentMaterialIndex])->
|
||||
GetValue(preStepScaledEnergy, b)*reduceFactor;
|
||||
x = fRange;
|
||||
|
||||
if( !integral ) {
|
||||
G4double r = G4std::min(finalRange, currentCouple->GetProductionCuts()
|
||||
G4double r = std::min(finalRange, currentCouple->GetProductionCuts()
|
||||
->GetProductionCut(idxG4ElectronCut));
|
||||
if( integral ) {
|
||||
if(x < currentMinimumStep && x > r) x *= rangeCoeff;
|
||||
} else {
|
||||
if (fRange > r) {
|
||||
|
||||
x = dRoverRange*fRange + r*(1.0 - dRoverRange)*(2.0 - r/fRange);
|
||||
@@ -509,11 +555,18 @@ inline void G4VEnergyLossSTD::SetDEDXBinning(G4int nbins)
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4VEnergyLossSTD::SetDEDXBinningForPreciseRange(G4int nbins)
|
||||
{
|
||||
nDEDXBinsForRange = nbins;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
/*
|
||||
inline G4int G4VEnergyLossSTD::DEDXBinning() const
|
||||
{
|
||||
return nDEDXBins;
|
||||
}
|
||||
|
||||
*/
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4VEnergyLossSTD::SetLambdaBinning(G4int nbins)
|
||||
@@ -522,17 +575,18 @@ inline void G4VEnergyLossSTD::SetLambdaBinning(G4int nbins)
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
/*
|
||||
inline G4int G4VEnergyLossSTD::LambdaBinning() const
|
||||
{
|
||||
return nLambdaBins;
|
||||
}
|
||||
|
||||
*/
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4VEnergyLossSTD::SetMinKinEnergy(G4double e)
|
||||
{
|
||||
minKinEnergy = e;
|
||||
lowKinEnergy = minKinEnergy*faclow;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
@@ -547,6 +601,14 @@ inline G4double G4VEnergyLossSTD::MinKinEnergy() const
|
||||
inline void G4VEnergyLossSTD::SetMaxKinEnergy(G4double e)
|
||||
{
|
||||
maxKinEnergy = e;
|
||||
if(e < maxKinEnergyForRange) maxKinEnergyForRange = e;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4VEnergyLossSTD::SetMaxKinEnergyForPreciseRange(G4double e)
|
||||
{
|
||||
maxKinEnergyForRange = e;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
@@ -94,7 +94,7 @@ public:
|
||||
// class.It limits the step near to boundaries only
|
||||
// and invokes the method GetContinuousStepLimit at every step.
|
||||
|
||||
virtual void PrintInfoDefinition() const;
|
||||
virtual void PrintInfoDefinition();
|
||||
// Print out of the class parameters
|
||||
|
||||
void SetBinning(G4int nbins);
|
||||
@@ -233,7 +233,7 @@ inline void G4VMultipleScattering::DefineMaterial(const G4MaterialCutsCouple* co
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4VMultipleScattering::GetMeanFreePath(const G4Track& track,
|
||||
inline G4double G4VMultipleScattering::GetMeanFreePath(const G4Track&,
|
||||
G4double,
|
||||
G4ForceCondition* cond)
|
||||
{
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
|
||||
#include "globals.hh"
|
||||
#include "g4std/vector"
|
||||
#include <vector>
|
||||
|
||||
class G4Step;
|
||||
class G4Track;
|
||||
@@ -68,7 +68,7 @@ public:
|
||||
|
||||
virtual ~G4VSubCutoffProcessor() {};
|
||||
|
||||
virtual G4std::vector<G4Track*>* SampleSecondaries(const G4Step&,
|
||||
virtual std::vector<G4Track*>* SampleSecondaries(const G4Step&,
|
||||
G4double& tmax,
|
||||
G4double& meanLoss,
|
||||
G4VEmModel*) = 0;
|
||||
|
||||
Reference in New Issue
Block a user