87 fNewPosition(0.,0.,0.),
88 fNewDirection(0.,0.,1.)
120 if(
nullptr == ptr) {
return; }
130 if(
nullptr == ptr) {
return; }
132 for(
auto & msc :
mscModels) {
if(msc == ptr) {
return; } }
143 G4cout <<
"### G4VMultipleScattering::PrepearPhysicsTable() for "
160 G4cout <<
"### G4VMultipleScattering::PrepearPhysicsTable() for "
164 <<
" isIon: " <<
isIon <<
" isMaster: " << master
199 if(
nullptr == msc) {
continue; }
228 G4cout <<
"### G4VMultipleScattering::BuildPhysicsTable() for "
230 <<
" and particle " << num <<
" isIon: " <<
isIon
231 <<
" IsMaster: " << master <<
G4endl;
255 if(
nullptr == msc) {
continue; }
269 num ==
"e+" || num ==
"mu+" ||
270 num ==
"mu-" || num ==
"proton"||
271 num ==
"pi+" || num ==
"pi-" ||
272 num ==
"kaon+" || num ==
"kaon-" ||
273 num ==
"alpha" || num ==
"anti_proton" ||
274 num ==
"GenericIon" || num ==
"alpha+" ||
281 G4cout <<
"### G4VMultipleScattering::BuildPhysicsTable() done for "
283 <<
" and particle " << num <<
G4endl;
326 if(
nullptr != eloss) {
436 if(tPathLength < range && tPathLength >
geomMin) {
456 if(postSafety > 0.0 && dispR <= postSafety) {
463 if(dispR < postSafety) {
467 }
else if(postSafety >
geomMin) {
543 if(
nullptr != masterProcess && masterProcess !=
this) {
return yes; }
546 static const G4String ss[4] = {
"1",
"2",
"3",
"4"};
547 for(
G4int i=0; i<nmod; ++i) {
549 if(
nullptr == msc) {
continue; }
552 if (
nullptr != table) {
560 G4cout <<
"Physics table are stored for "
563 <<
" with a name <" <<
name <<
"> " <<
G4endl;
566 G4cout <<
"Fail to store Physics Table for "
569 <<
" in the directory <" << directory
static const G4double emax
G4double condition(const G4ErrorSymMatrix &m)
@ NotCandidateForSelection
G4GLOB_DLL std::ostream G4cout
static G4Electron * Electron()
void AddEmModel(G4int, G4VEmModel *, G4VEmFluctuationModel *fm, const G4Region *r)
void DumpModelList(std::ostream &out, G4int verb)
G4int NumberOfModels() const
const G4DataVector * Initialise(const G4ParticleDefinition *part, const G4ParticleDefinition *secPart, G4double, G4int verb)
G4VEmModel * GetModel(G4int idx, G4bool ver=false)
G4bool IsPrintLocked() const
static G4EmParameters * Instance()
G4double MscMuHadRangeFactor() const
G4double MscThetaLimit() const
G4MscStepLimitType MscMuHadStepLimitType() const
G4int WorkerVerbose() const
G4MscStepLimitType MscStepLimitType() const
G4double MaxKinEnergy() const
G4bool LateralDisplacement() const
G4bool MuHadLateralDisplacement() const
G4double MscRangeFactor() const
G4bool GetBaseMaterialFlag()
static G4LossTableManager * Instance()
G4VEnergyLossProcess * GetEnergyLossProcess(const G4ParticleDefinition *)
G4LossTableBuilder * GetTableBuilder()
void PreparePhysicsTable(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p, G4bool theMaster)
void BuildPhysicsTable(const G4ParticleDefinition *aParticle)
void DeRegister(G4VEnergyLossProcess *p)
void Register(G4VEnergyLossProcess *p)
virtual void Initialize(const G4Track &)
void ProposeMomentumDirection(const G4ThreeVector &Pfinal)
void ProposePosition(const G4ThreeVector &finalPosition)
G4double GetPDGMass() const
const G4String & GetParticleName() const
G4bool StorePhysicsTable(const G4String &filename, G4bool ascii=false)
G4double ComputeSafety(const G4ThreeVector &pGlobalPoint, G4double maxRadius=DBL_MAX)
void ReLocateWithinVolume(const G4ThreeVector &pGlobalPoint)
const G4ThreeVector & GetPosition() const
const G4ThreeVector & GetMomentumDirection() const
G4double GetStepLength() const
G4StepPoint * GetPostStepPoint() const
const G4ParticleDefinition * GetParticleDefinition() const
G4double GetKineticEnergy() const
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
static G4TransportationManager * GetTransportationManager()
G4SafetyHelper * GetSafetyHelper() const
void SetCrossSectionTable(G4PhysicsTable *, G4bool isLocal)
void SetPolarAngleLimit(G4double)
void SetHighEnergyLimit(G4double)
void SetMasterThread(G4bool val)
void SetCurrentCouple(const G4MaterialCutsCouple *)
void SetParticleChange(G4VParticleChange *, G4VEmFluctuationModel *f=nullptr)
G4double HighEnergyLimit() const
G4bool IsActive(G4double kinEnergy) const
G4PhysicsTable * GetCrossSectionTable()
void SetUseBaseMaterials(G4bool val)
virtual void StartTracking(G4Track *)
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel)
virtual G4double ComputeTruePathLengthLimit(const G4Track &track, G4double &stepLimit)=0
void SetIonisation(G4VEnergyLossProcess *, const G4ParticleDefinition *part)
virtual G4double ComputeTrueStepLength(G4double geomPathLength)=0
G4double GetRange(const G4ParticleDefinition *part, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
virtual G4ThreeVector & SampleScattering(const G4ThreeVector &, G4double safety)=0
void SetIonisation(G4VEnergyLossProcess *)
G4double minDisplacement2
G4EmModelManager * modelManager
G4double GetMeanFreePath(const G4Track &track, G4double, G4ForceCondition *condition) override
G4ParticleChangeForMSC fParticleChange
void AddEmModel(G4int order, G4VEmModel *, const G4Region *region=nullptr)
G4LossTableManager * emManager
G4VEnergyLossProcess * fIonisation
void StartTracking(G4Track *) override
void PreparePhysicsTable(const G4ParticleDefinition &) override
void BuildPhysicsTable(const G4ParticleDefinition &) override
G4double ContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimalStep, G4double ¤tSafety)
G4VMultipleScattering(const G4String &name="msc", G4ProcessType type=fElectromagnetic)
G4VMscModel * GetModelByIndex(G4int idx=0, G4bool ver=false) const
void ProcessDescription(std::ostream &outFile) const override
G4bool RetrievePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii) override
G4VMscModel * currentModel
const G4ParticleDefinition * firstParticle
void SetEmModel(G4VMscModel *, G4int idx=0)
virtual void InitialiseProcess(const G4ParticleDefinition *)=0
G4SafetyHelper * safetyHelper
G4double AlongStepGetPhysicalInteractionLength(const G4Track &, G4double previousStepSize, G4double currentMinimalStep, G4double ¤tSafety, G4GPILSelection *selection) override
void StreamInfo(std::ostream &outFile, const G4ParticleDefinition &, G4bool rst=false) const
G4MscStepLimitType stepLimit
std::vector< G4VMscModel * > mscModels
G4double PostStepGetPhysicalInteractionLength(const G4Track &, G4double previousStepSize, G4ForceCondition *condition) override
G4VParticleChange * AlongStepDoIt(const G4Track &, const G4Step &) override
G4EmParameters * theParameters
G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &) override
G4bool StorePhysicsTable(const G4ParticleDefinition *, const G4String &directory, G4bool ascii=false) override
~G4VMultipleScattering() override
G4VEmModel * SelectModel(G4double kinEnergy, size_t idx)
const G4ParticleDefinition * currParticle
G4double GetContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimalStep, G4double ¤tSafety) override
G4ThreeVector fNewPosition
G4bool UseBaseMaterial() const
void ProposeTrueStepLength(G4double truePathLength)
void SetVerboseLevel(G4int value)
const G4VProcess * GetMasterProcess() const
void SetProcessSubType(G4int)
G4VParticleChange * pParticleChange
G4int GetProcessSubType() const
const G4String & GetPhysicsTableFileName(const G4ParticleDefinition *, const G4String &directory, const G4String &tableName, G4bool ascii=false)
const G4String & GetProcessName() const
static constexpr double GeV
static constexpr double MeV
static constexpr double eV
static constexpr double nm
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
const char * name(G4int ptype)