Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/tracking/src/G4TrackingManager.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /tracking/src/G4TrackingManager.cc (Version 11.3.0) and /tracking/src/G4TrackingManager.cc (Version 10.3.p1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // G4TrackingManager class implementation      <<  26 //
                                                   >>  27 // $Id: G4TrackingManager.cc 77241 2013-11-22 09:55:47Z gcosmo $
                                                   >>  28 //
                                                   >>  29 //---------------------------------------------------------------
                                                   >>  30 //
                                                   >>  31 // G4TrackingManager.cc
 27 //                                                 32 //
 28 // Contact:                                        33 // Contact:
 29 //   Questions and comments to this code shoul     34 //   Questions and comments to this code should be sent to
 30 //     Katsuya Amako  (e-mail: Katsuya.Amako@k     35 //     Katsuya Amako  (e-mail: Katsuya.Amako@kek.jp)
 31 //     Takashi Sasaki (e-mail: Takashi.Sasaki@     36 //     Takashi Sasaki (e-mail: Takashi.Sasaki@kek.jp)
 32 // ------------------------------------------- <<  37 //
                                                   >>  38 //---------------------------------------------------------------
 33                                                    39 
 34 #include "G4TrackingManager.hh"                    40 #include "G4TrackingManager.hh"
 35                                                << 
 36 #include "G4Trajectory.hh"                         41 #include "G4Trajectory.hh"
 37 #include "G4RichTrajectory.hh"                 << 
 38 #include "G4SmoothTrajectory.hh"                   42 #include "G4SmoothTrajectory.hh"
                                                   >>  43 #include "G4RichTrajectory.hh"
 39 #include "G4ios.hh"                                44 #include "G4ios.hh"
                                                   >>  45 class G4VSteppingVerbose;
 40                                                    46 
 41 //////////////////////////////////////             47 //////////////////////////////////////
 42 G4TrackingManager::G4TrackingManager()             48 G4TrackingManager::G4TrackingManager()
 43 //////////////////////////////////////             49 //////////////////////////////////////
                                                   >>  50   : fpUserTrackingAction(0), fpTrajectory(0),
                                                   >>  51     StoreTrajectory(0), verboseLevel(0), EventIsAborted(false)
 44 {                                                  52 {
 45   messenger = new G4TrackingMessenger(this);   << 
 46   fpSteppingManager = new G4SteppingManager();     53   fpSteppingManager = new G4SteppingManager();
                                                   >>  54   messenger = new G4TrackingMessenger(this);
 47 }                                                  55 }
 48                                                    56 
 49 ///////////////////////////////////////            57 ///////////////////////////////////////
 50 G4TrackingManager::~G4TrackingManager()            58 G4TrackingManager::~G4TrackingManager()
 51 ///////////////////////////////////////            59 ///////////////////////////////////////
 52 {                                                  60 {
 53   delete messenger;                                61   delete messenger;
 54   delete fpSteppingManager;                        62   delete fpSteppingManager;
 55   delete fpUserTrackingAction;                 <<  63   if (fpUserTrackingAction) delete fpUserTrackingAction;
 56 }                                                  64 }
 57                                                    65 
 58 //////////////////////////////////////////////     66 ////////////////////////////////////////////////////////////////
 59 void G4TrackingManager::ProcessOneTrack(G4Trac     67 void G4TrackingManager::ProcessOneTrack(G4Track* apValueG4Track)
 60 //////////////////////////////////////////////     68 ////////////////////////////////////////////////////////////////
 61 {                                                  69 {
 62   // Receiving a G4Track from the EventManager << 
 63   // responsibility to trace the track till it << 
 64                                                    70 
                                                   >>  71   // Receiving a G4Track from the EventManager, this funciton has the
                                                   >>  72   // responsibility to trace the track till it stops.
 65   fpTrack = apValueG4Track;                        73   fpTrack = apValueG4Track;
 66   EventIsAborted = false;                          74   EventIsAborted = false;
 67                                                    75 
 68   // Clear secondary particle vector           <<  76   // Clear 2ndary particle vector
 69   //                                           <<  77   //  GimmeSecondaries()->clearAndDestroy();    
 70   for (auto& itr : *GimmeSecondaries()) {      <<  78   //  std::vector<G4Track*>::iterator itr;
 71     delete itr;                                <<  79   size_t itr;
 72   }                                            <<  80   //  for(itr=GimmeSecondaries()->begin();itr=GimmeSecondaries()->end();itr++){ 
 73   GimmeSecondaries()->clear();                 <<  81   for(itr=0;itr<GimmeSecondaries()->size();itr++){ 
 74                                                <<  82      delete (*GimmeSecondaries())[itr];
 75   if (verboseLevel > 0 && (G4VSteppingVerbose: <<  83   }
 76                                                <<  84   GimmeSecondaries()->clear();  
 77   // Give SteppingManger the pointer to the tr <<  85    
 78   //                                           <<  86   if(verboseLevel>0 && (G4VSteppingVerbose::GetSilent()!=1) ) TrackBanner();
                                                   >>  87   
                                                   >>  88   // Give SteppingManger the pointer to the track which will be tracked 
 79   fpSteppingManager->SetInitialStep(fpTrack);      89   fpSteppingManager->SetInitialStep(fpTrack);
 80                                                    90 
 81   // Pre tracking user intervention process    <<  91   // Pre tracking user intervention process.
 82                                                <<  92   fpTrajectory = 0;
 83   fpTrajectory = nullptr;                      <<  93   if( fpUserTrackingAction != 0 ) {
 84   if (fpUserTrackingAction != nullptr) {       <<  94      fpUserTrackingAction->PreUserTrackingAction(fpTrack);
 85     fpUserTrackingAction->PreUserTrackingActio << 
 86   }                                                95   }
 87                                                << 
 88   // we need this to scope the G4Track::Profil << 
 89   // the PreUserTrackingAction and PostUserTra << 
 90   {                                            << 
 91 #ifdef G4_STORE_TRAJECTORY                         96 #ifdef G4_STORE_TRAJECTORY
 92     // Construct a trajectory if it is request <<  97   // Construct a trajectory if it is requested
 93     //                                         <<  98   if(StoreTrajectory&&(!fpTrajectory)) { 
 94     if ((StoreTrajectory != 0) && (fpTrajector <<  99     // default trajectory concrete class object
 95       // default trajectory concrete class obj << 100     switch (StoreTrajectory) {
 96       switch (StoreTrajectory) {               << 101     default:
 97         default:                               << 102     case 1: fpTrajectory = new G4Trajectory(fpTrack); break;
 98         case 1:                                << 103     case 2: fpTrajectory = new G4SmoothTrajectory(fpTrack); break;
 99           fpTrajectory = new G4Trajectory(fpTr << 104     case 3: fpTrajectory = new G4RichTrajectory(fpTrack); break;
100           break;                               << 105     case 4: fpTrajectory = new G4RichTrajectory(fpTrack); break;
101         case 2:                                << 
102           fpTrajectory = new G4SmoothTrajector << 
103           break;                               << 
104         case 3:                                << 
105           fpTrajectory = new G4RichTrajectory( << 
106           break;                               << 
107         case 4:                                << 
108           fpTrajectory = new G4RichTrajectory( << 
109           break;                               << 
110       }                                        << 
111     }                                             106     }
                                                   >> 107   }
112 #endif                                            108 #endif
113                                                   109 
114     // Give SteppingManger the maxmimum number << 110   // Give SteppingManger the maxmimum number of processes 
115     fpSteppingManager->GetProcessNumber();     << 111   fpSteppingManager->GetProcessNumber();
116                                                   112 
117     // Give track the pointer to the Step      << 113   // Give track the pointer to the Step
118     fpTrack->SetStep(fpSteppingManager->GetSte << 114   fpTrack->SetStep(fpSteppingManager->GetStep());
119                                                   115 
120     // Inform beginning of tracking to physics << 116   // Inform beginning of tracking to physics processes 
121     fpTrack->GetDefinition()->GetProcessManage << 117   fpTrack->GetDefinition()->GetProcessManager()->StartTracking(fpTrack);
122                                                   118 
123     // Track the particle Step-by-Step while i << 119   // Track the particle Step-by-Step while it is alive
124     //                                         << 120   //  G4StepStatus stepStatus;
125     while ((fpTrack->GetTrackStatus() == fAliv << 121 
126       fpTrack->IncrementCurrentStepNumber();   << 122   while( (fpTrack->GetTrackStatus() == fAlive) ||
127       fpSteppingManager->Stepping();           << 123          (fpTrack->GetTrackStatus() == fStopButAlive) ){
                                                   >> 124 
                                                   >> 125     fpTrack->IncrementCurrentStepNumber();
                                                   >> 126     fpSteppingManager->Stepping();
128 #ifdef G4_STORE_TRAJECTORY                        127 #ifdef G4_STORE_TRAJECTORY
129       if (StoreTrajectory != 0) {              << 128     if(StoreTrajectory) fpTrajectory->
130         fpTrajectory->AppendStep(fpSteppingMan << 129                         AppendStep(fpSteppingManager->GetStep()); 
131       }                                        << 
132 #endif                                            130 #endif
133       if (EventIsAborted) {                    << 131     if(EventIsAborted) {
134         fpTrack->SetTrackStatus(fKillTrackAndS << 132       fpTrack->SetTrackStatus( fKillTrackAndSecondaries );
135       }                                        << 
136     }                                             133     }
137     // Inform end of tracking to physics proce << 
138     fpTrack->GetDefinition()->GetProcessManage << 
139   }                                               134   }
                                                   >> 135   // Inform end of tracking to physics processes 
                                                   >> 136   fpTrack->GetDefinition()->GetProcessManager()->EndTracking();
140                                                   137 
141   // Post tracking user intervention process.     138   // Post tracking user intervention process.
142   if (fpUserTrackingAction != nullptr) {       << 139   if( fpUserTrackingAction != 0 ) {
143     fpUserTrackingAction->PostUserTrackingActi << 140      fpUserTrackingAction->PostUserTrackingAction(fpTrack);
144   }                                               141   }
145                                                   142 
146   // Destruct the trajectory if it was created    143   // Destruct the trajectory if it was created
147 #ifdef G4VERBOSE                                  144 #ifdef G4VERBOSE
148   if ((StoreTrajectory != 0) && verboseLevel > << 145   if(StoreTrajectory&&verboseLevel>10) fpTrajectory->ShowTrajectory();
149     fpTrajectory->ShowTrajectory();            << 
150   }                                            << 
151 #endif                                            146 #endif
152   if ((StoreTrajectory == 0) && (fpTrajectory  << 147   if( (!StoreTrajectory)&&fpTrajectory ) {
153     delete fpTrajectory;                       << 148       delete fpTrajectory;
154     fpTrajectory = nullptr;                    << 149       fpTrajectory = 0;
155   }                                               150   }
156 }                                                 151 }
157                                                   152 
158 //////////////////////////////////////         << 
159 void G4TrackingManager::SetTrajectory(G4VTraje    153 void G4TrackingManager::SetTrajectory(G4VTrajectory* aTrajectory)
160 //////////////////////////////////////         << 
161 {                                                 154 {
162 #ifndef G4_STORE_TRAJECTORY                       155 #ifndef G4_STORE_TRAJECTORY
163   G4Exception("G4TrackingManager::SetTrajector << 156   G4Exception("G4TrackingManager::SetTrajectory()",
164     "Invoked without G4_STORE_TRAJECTORY optio << 157               "Tracking0015", FatalException,
                                                   >> 158               "Invoked without G4_STORE_TRAJECTORY option set!");
165 #endif                                            159 #endif
166   fpTrajectory = aTrajectory;                     160   fpTrajectory = aTrajectory;
167 }                                                 161 }
168                                                   162 
169 //////////////////////////////////////            163 //////////////////////////////////////
170 void G4TrackingManager::EventAborted()            164 void G4TrackingManager::EventAborted()
171 //////////////////////////////////////            165 //////////////////////////////////////
172 {                                                 166 {
173   fpTrack->SetTrackStatus(fKillTrackAndSeconda << 167   fpTrack->SetTrackStatus( fKillTrackAndSecondaries );
174   EventIsAborted = true;                          168   EventIsAborted = true;
175 }                                                 169 }
176                                                   170 
177 //////////////////////////////////////         << 171 
178 void G4TrackingManager::TrackBanner()             172 void G4TrackingManager::TrackBanner()
179 //////////////////////////////////////         << 
180 {                                                 173 {
181   G4cout << G4endl;                            << 174        G4cout << G4endl;
182   G4cout << "********************************* << 175        G4cout << "*******************************************************"
183          << "********************************* << 176             << "**************************************************"
184   G4cout << "* G4Track Information: "          << 177             << G4endl;
185          << "  Particle = " << fpTrack->GetDef << 178        G4cout << "* G4Track Information: "
186          << "   Track ID = " << fpTrack->GetTr << 179             << "  Particle = " << fpTrack->GetDefinition()->GetParticleName()
187          << "   Parent ID = " << fpTrack->GetP << 180             << ","
188   G4cout << "********************************* << 181             << "   Track ID = " << fpTrack->GetTrackID()
189          << "********************************* << 182             << ","
190   G4cout << G4endl;                            << 183             << "   Parent ID = " << fpTrack->GetParentID()
                                                   >> 184             << G4endl;
                                                   >> 185        G4cout << "*******************************************************"
                                                   >> 186             << "**************************************************"
                                                   >> 187             << G4endl;
                                                   >> 188        G4cout << G4endl;
191 }                                                 189 }
192                                                   190 
193 //////////////////////////////////////         << 191 
194 void G4TrackingManager::SetStoreTrajectory(G4i << 192 
195 //////////////////////////////////////         << 193 
196 {                                              << 194 
197   StoreTrajectory = value;                     << 195 
198 }                                              << 
199                                                   196 
200                                                   197