// $Id$
// Category: physics
//
+// Author: I. Hrivnacova
+//
+// Class TG4SpecialCuts
+// --------------------
// See the class description in the header file.
#include "TG4SpecialCuts.h"
-#include "TG4CutVector.h"
+#include "TG4G3CutVector.h"
#include "TG4Limits.h"
#include <G4UserLimits.hh>
#include <G4EnergyLossTables.hh>
-TG4SpecialCuts::TG4SpecialCuts(TG3ParticleWSP particle, TG4CutVector* cutVector,
+//_____________________________________________________________________________
+TG4SpecialCuts::TG4SpecialCuts(TG4G3ParticleWSP particle,
+ TG4G3CutVector* cutVector,
const G4String& processName)
: G4UserSpecialCuts(processName),
fCutVector(cutVector)
//
switch (particle) {
case kGamma:
- fPtrMinEkineInCutVector = &TG4CutVector::GetMinEkineForGamma;
+ fPtrMinEkineInCutVector = &TG4G3CutVector::GetMinEkineForGamma;
fPtrMinEkineInLimits = &TG4Limits::GetMinEkineForGamma;
break;
case kElectron: case kEplus:
- fPtrMinEkineInCutVector = &TG4CutVector::GetMinEkineForElectron;
+ fPtrMinEkineInCutVector = &TG4G3CutVector::GetMinEkineForElectron;
fPtrMinEkineInLimits = &TG4Limits::GetMinEkineForElectron;
break;
case kChargedHadron:
- fPtrMinEkineInCutVector = &TG4CutVector::GetMinEkineForHadron;
- fPtrMinEkineInLimits = &TG4Limits::GetMinEkineForHadron;
+ fPtrMinEkineInCutVector = &TG4G3CutVector::GetMinEkineForChargedHadron;
+ fPtrMinEkineInLimits = &TG4Limits::GetMinEkineForChargedHadron;
break;
case kNeutralHadron:
- fPtrMinEkineInCutVector = &TG4CutVector::GetMinEkineForNeutralHadron;
+ fPtrMinEkineInCutVector = &TG4G3CutVector::GetMinEkineForNeutralHadron;
fPtrMinEkineInLimits = &TG4Limits::GetMinEkineForNeutralHadron;
break;
case kMuon:
- fPtrMinEkineInCutVector = &TG4CutVector::GetMinEkineForMuon;
+ fPtrMinEkineInCutVector = &TG4G3CutVector::GetMinEkineForMuon;
fPtrMinEkineInLimits = &TG4Limits::GetMinEkineForMuon;
break;
case kAny:
- fPtrMinEkineInCutVector = &TG4CutVector::GetMinEkineForOther;
+ fPtrMinEkineInCutVector = &TG4G3CutVector::GetMinEkineForOther;
fPtrMinEkineInLimits = &TG4Limits::GetMinEkineForOther;
break;
case kNofParticlesWSP:
}
}
+//_____________________________________________________________________________
TG4SpecialCuts::TG4SpecialCuts() {
//
}
+//_____________________________________________________________________________
TG4SpecialCuts::TG4SpecialCuts(const TG4SpecialCuts& right) {
//
TG4Globals::Exception(
"TG4SpecialCuts is protected from copying.");
}
+//_____________________________________________________________________________
TG4SpecialCuts::~TG4SpecialCuts() {
//
}
// operators
+//_____________________________________________________________________________
TG4SpecialCuts& TG4SpecialCuts::operator=(const TG4SpecialCuts& right)
{
// check assignement to self
// public methods
+//_____________________________________________________________________________
G4double TG4SpecialCuts::PostStepGetPhysicalInteractionLength(
const G4Track& track, G4double previousStepSize,
G4ForceCondition* condition)
// min remaining range
G4ParticleDefinition* particle = track.GetDefinition();
- G4double kinEnergy = track.GetKineticEnergy();
- G4Material* material = track.GetMaterial();
- G4double rangeNow
- = G4EnergyLossTables::GetRange(particle, kinEnergy, material);
- temp = (rangeNow - limits->GetUserMinRange(track));
- if (temp < 0.) return 0.;
- if (proposedStep > temp) proposedStep = temp;
-
- // min kinetic energy (from limits)
- // the kin energy cut can be applied only in case
- // G4EnergyLossTables are defined for the particle
- if (G4EnergyLossTables::GetDEDXTable(particle)) {
- TG4Limits* tg4Limits = dynamic_cast<TG4Limits*>(limits);
- if (!tg4Limits) {
- G4String text = "TG4SpecialCuts::PostStepGetPhysicalInteractionLength:\n";
- text = text + " Unknown limits type.";
- TG4Globals::Exception(text);
- }
- G4double minEkine
- = (tg4Limits->*fPtrMinEkineInLimits)(track);
- G4double minR
- = G4EnergyLossTables::GetRange(particle, minEkine, material);
- temp = rangeNow - minR;
+ if (particle->GetPDGCharge() != 0.) {
+ G4double kinEnergy = track.GetKineticEnergy();
+ G4Material* material = track.GetMaterial();
+ G4double rangeNow
+ = G4EnergyLossTables::GetRange(particle, kinEnergy, material);
+ temp = (rangeNow - limits->GetUserMinRange(track));
if (temp < 0.) return 0.;
- if (proposedStep > temp) proposedStep = temp;
+ if (proposedStep > temp) proposedStep = temp;
+
+ // min kinetic energy (from limits)
+ // the kin energy cut can be applied only in case
+ // G4EnergyLossTables are defined for the particle
+ if (G4EnergyLossTables::GetDEDXTable(particle)) {
+ TG4Limits* tg4Limits = dynamic_cast<TG4Limits*>(limits);
+ if (!tg4Limits) {
+ G4String text = "TG4SpecialCuts::PostStepGetPhysicalInteractionLength:\n";
+ text = text + " Unknown limits type.";
+ TG4Globals::Exception(text);
+ }
+ G4double minEkine
+ = (tg4Limits->*fPtrMinEkineInLimits)(track);
+ G4double minR
+ = G4EnergyLossTables::GetRange(particle, minEkine, material);
+ temp = rangeNow - minR;
+ if (temp < 0.) return 0.;
+ if (proposedStep > temp) proposedStep = temp;
+ }
}
}
return proposedStep;
}
+//_____________________________________________________________________________
G4VParticleChange* TG4SpecialCuts::PostStepDoIt(const G4Track& track,
- const G4Step&)
+ const G4Step& step)
{
// Kills the current particle, if requested by G4UserLimits.
// ---