]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TGeant4/TG4SpecialCuts.cxx
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / TGeant4 / TG4SpecialCuts.cxx
index 9f3a5a954a1e3217804012e0d349f8309f9ae9bd..f1d8ebb1dcf44856c0de257cd1345e9d2bfb0ebc 100644 (file)
@@ -1,17 +1,23 @@
 // $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)
@@ -19,27 +25,27 @@ TG4SpecialCuts::TG4SpecialCuts(TG3ParticleWSP particle, TG4CutVector* 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:
@@ -48,22 +54,26 @@ TG4SpecialCuts::TG4SpecialCuts(TG3ParticleWSP particle, TG4CutVector* cutVector,
   }
 }
 
+//_____________________________________________________________________________
 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
@@ -77,6 +87,7 @@ TG4SpecialCuts& TG4SpecialCuts::operator=(const TG4SpecialCuts& right)
           
 // public methods
 
+//_____________________________________________________________________________
 G4double TG4SpecialCuts::PostStepGetPhysicalInteractionLength(
                            const G4Track& track, G4double previousStepSize,
                           G4ForceCondition* condition)
@@ -109,31 +120,33 @@ G4double TG4SpecialCuts::PostStepGetPhysicalInteractionLength(
 
     // 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;  
+      }
     }  
 
   }
@@ -159,8 +172,9 @@ G4double TG4SpecialCuts::PostStepGetPhysicalInteractionLength(
   return proposedStep;
 }
 
+//_____________________________________________________________________________
 G4VParticleChange* TG4SpecialCuts::PostStepDoIt(const G4Track& track, 
-                                                const G4Step&)
+                                                const G4Step& step)
 {
 // Kills the current particle, if requested by G4UserLimits.
 // ---