Updated class description: added class title, author;
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 21 Aug 2001 19:50:47 +0000 (19:50 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 21 Aug 2001 19:50:47 +0000 (19:50 +0000)
New implementation of class -  only stopping particle if it gets outside of
user defined tracking region.

AliGeant4/AliSteppingAction.cxx
AliGeant4/AliSteppingAction.h

index 2d4f333..c01ce35 100644 (file)
@@ -1,49 +1,30 @@
 // $Id$
 // Category: event
 //
+// Author: I. Hrivnacova
+//
+// Class AliSteppingAction
+// -----------------------
 // See the class description in the header file.
 
 #include "AliSteppingAction.h"
-#include "AliSteppingActionMessenger.h"
-#include "AliGlobals.h"
+#include "AliRun.h"
 
 #include <G4Track.hh>
 #include <G4SteppingManager.hh>
 
-const G4double AliSteppingAction::fgkTolerance = 1e-6*mm;
+#include <math.h>
 
 //_____________________________________________________________________________
 AliSteppingAction::AliSteppingAction()
-  : fKeptStepPoint(G4ThreeVector())
-{
-//
-  fMessenger = new AliSteppingActionMessenger(this);
-}
-
-//_____________________________________________________________________________
-AliSteppingAction::AliSteppingAction(const AliSteppingAction& right) {
+  : TG4SteppingAction(),
+     fMessenger(this) {
 //
-  AliGlobals::Exception("AliSteppingAction is protected from copying.");
 }
 
 //_____________________________________________________________________________
 AliSteppingAction::~AliSteppingAction() {
 //
-  delete fMessenger;
-}
-
-// operators
-
-//_____________________________________________________________________________
-AliSteppingAction& 
-AliSteppingAction::operator=(const AliSteppingAction &right)
-{
-  // check assignement to self
-  if (this == &right) return *this;
-  
-  AliGlobals::Exception("AliSteppingAction is protected from assigning.");
-
-  return *this;
 }
 
 // public methods
@@ -51,45 +32,23 @@ AliSteppingAction::operator=(const AliSteppingAction &right)
 //_____________________________________________________________________________
 void AliSteppingAction::SteppingAction(const G4Step* step)
 {
-// After processing the given number of steps (kCheckNofSteps)
-// the particle position is compared with the previus one
-// - in case the distance is less than fgkTolerance value
-// the verbose mode is switched on, particle is let 
-// to process a small number of steps (kMaxNofLoopSteps)
-// and then stopped and killed.
+// Stops particle if it gets outside of user defined tracking region.
 // ---
 
-  G4Track* track = step->GetTrack();  
-
-  // reset parameters at beginning of tracking
-  G4int stepNumber = track->GetCurrentStepNumber();
-  if (stepNumber == 1) {
-    fKeptStepPoint = G4ThreeVector();
-    return;
-  }  
-    
-  if (stepNumber % kCheckNofSteps == 0) {  
-    // detect looping track
-    G4ThreeVector newStepPoint = step->GetPreStepPoint()->GetPosition();
-    G4double trajectory = (newStepPoint-fKeptStepPoint).mag();
-    G4bool kill = false;
-    if (trajectory < fgkTolerance) {
-
-      // print looping info
-      if (fLoopVerboseLevel > 0) {
-        G4cout << "*** Particle is looping. ***" << G4endl;
-       if (fStandardVerboseLevel == 0) PrintTrackInfo(track);
-      }        
-      kill = true;
-    }
-    
-    if (kill) {
-
-      // set loop verbose level 
-      fpSteppingManager->SetVerboseLevel(fLoopVerboseLevel);
-      
-      fLoopStepCounter++;
+  G4ThreeVector position 
+    = step->GetPostStepPoint()->GetPosition();
+
+  if (position.mag()    > gAlice->TrackingRmax() ||
+      abs(position.z()) > gAlice->TrackingZmax()) {
+    // print looping info
+    if (fLoopVerboseLevel > 0) {
+      G4cout << "*** Particle has reached user defined tracking region. ***" 
+             << G4endl;
+      if (fStandardVerboseLevel == 0) PrintTrackInfo(step->GetTrack());
     }  
-    fKeptStepPoint = newStepPoint;
-  }  
+
+    // stop the track
+    step->GetTrack()->SetTrackStatus(fStopAndKill);      
+  }
 }
index 923fb6b..bac2bc9 100644 (file)
@@ -1,48 +1,33 @@
 // $Id$
 // Category: event
 //
-// Class for detecting and stopping looping particles
-// or particles that reached maximal number of steps.
+// Author: I. Hrivnacova
+//
+// Class AliSteppingAction
+// -----------------------
+// Class takes care of stopping particles
+// if they get outside of user defined tracking region
+// (in AliRun).
 
 #ifndef ALI_STEPPING_ACTION_H
 #define ALI_STEPPING_ACTION_H
 
-#include "TG4SteppingAction.h"
+#include "AliSteppingActionMessenger.h"
 
-#include <G4ThreeVector.hh>
-#include <globals.hh>
+#include "TG4SteppingAction.h"
 
-class AliSteppingActionMessenger;
 
 class AliSteppingAction : public TG4SteppingAction
 {
-  enum { 
-    kCheckNofSteps = 100
-  };
-
   public:
     AliSteppingAction();
-    // protected
-    // AliSteppingAction(const AliSteppingAction& right);
     virtual ~AliSteppingAction();
 
     // methods
     virtual void SteppingAction(const G4Step* step);
     
-  protected:
-    AliSteppingAction(const AliSteppingAction& right);
-
-    // operators
-    AliSteppingAction& operator=(const AliSteppingAction& right);
-
   private:
-    // static data members
-    static const G4double fgkTolerance; //tolerance used in detecting 
-                                        //of looping particles
-
-    // data members
-    G4ThreeVector  fKeptStepPoint;           //kept step point
-    AliSteppingActionMessenger*  fMessenger; //messenger
+    AliSteppingActionMessenger  fMessenger; //messenger
 };
 
 #endif //ALI_STEPPING_ACTION_H