stepping ========== .. contents:: :local: G4EventManager::DoProcessing ------------------------------- :: (gdb) b 'G4EventManager::DoProcessing(G4Event*)' Breakpoint 1 at 0xb7b9fd94: file src/G4EventManager.cc, line 100. (gdb) p verboseLevel = 1 $2 = 1 (gdb) p verboseLevel $3 = 1 (gdb) c Continuing. ===================================== G4EventManager::ProcessOneEvent() ===================================== 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 4 Track (trackID 57, parentID 1) is processed with stopping code 2 ... :: [blyth@belle7 20130820-1318]$ pprof --list=G4EventManager::DoProcessing $(which python) base.prof Using local file /data1/env/local/dyb/external/Python/2.7/i686-slc5-gcc41-dbg/bin/python. Using local file base.prof. Removing _init from all stack traces. ROUTINE ====================== G4EventManager::DoProcessing in /data1/env/local/dyb/external/build/LCG/geant4.9.2.p01/source/event/src/G4EventManager.cc 355 705977 Total samples (flat / cumulative) . . 93: G4int G4EventManager::operator!=(const G4EventManager &right) const { } . . 94: */ . . 95: . . 96: . . 97: --- . . 98: void G4EventManager::DoProcessing(G4Event* anEvent) . . 99: { . . 100: G4StateManager* stateManager = G4StateManager::GetStateManager(); . . 101: G4ApplicationState currentState = stateManager->GetCurrentState(); . . 102: if(currentState!=G4State_GeomClosed) . . 103: { . . 104: G4Exception("G4EventManager::ProcessOneEvent", . . 105: "IllegalApplicationState", . . 106: JustWarning, . . 107: "Geometry is not closed : cannot process an event."); . . 108: return; . . 109: } . . 110: currentEvent = anEvent; . . 111: stateManager->SetNewState(G4State_EventProc); . . 112: if(storetRandomNumberStatusToG4Event>1) . . 113: { . . 114: std::ostringstream oss; . . 115: CLHEP::HepRandom::saveFullState(oss); . . 116: randomNumberStatusToG4Event = oss.str(); . . 117: currentEvent->SetRandomNumberStatusForProcessing(randomNumberStatusToG4Event); . . 118: } . . 119: . . 120: // Reseting Navigator has been moved to G4Eventmanager, so that resetting . . 121: // is now done for every event. . . 122: G4ThreeVector center(0,0,0); . . 123: G4Navigator* navigator = . 1 124: G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); . . 125: navigator->LocateGlobalPointAndSetup(center,0,false); . . 126: . . 127: G4Track * track; . . 128: G4TrackStatus istop; . . 129: . . 130: #ifdef G4VERBOSE . . 131: if ( verboseLevel > 0 ) . . 132: { . . 133: G4cout << "=====================================" << G4endl; . . 134: G4cout << " G4EventManager::ProcessOneEvent() " << G4endl; . . 135: G4cout << "=====================================" << G4endl; . . 136: } . . 137: #endif . . 138: . . 139: trackContainer->PrepareNewEvent(); . . 140: . . 141: #ifdef G4_STORE_TRAJECTORY . . 142: trajectoryContainer = 0; . . 143: #endif . . 144: . . 145: sdManager = G4SDManager::GetSDMpointerIfExist(); . . 146: if(sdManager) . . 147: { currentEvent->SetHCofThisEvent(sdManager->PrepareNewEvent()); } . . 148: . . 149: if(userEventAction) userEventAction->BeginOfEventAction(currentEvent); . . 150: . . 151: #ifdef G4VERBOSE . . 152: if ( verboseLevel > 1 ) . . 153: { . . 154: G4cout << currentEvent->GetNumberOfPrimaryVertex() . . 155: << " vertices passed from G4Event." << G4endl; . . 156: } . . 157: #endif . . 158: . . 159: if(!abortRequested) . . 160: { StackTracks( transformer->GimmePrimaries( currentEvent, trackIDCounter ),true ); } . . 161: . . 162: #ifdef G4VERBOSE . . 163: if ( verboseLevel > 0 ) . . 164: { . . 165: G4cout << trackContainer->GetNTotalTrack() << " primaries " . . 166: << "are passed from G4EventTransformer." << G4endl; . . 167: G4cout << "!!!!!!! Now start processing an event !!!!!!!" << G4endl; . . 168: } . . 169: #endif . . 170: . . 171: G4VTrajectory* previousTrajectory; . . 172: while( ( track = trackContainer->PopNextTrack(&previousTrajectory) ) != 0 ) . . 173: { . . 174: . . 175: #ifdef G4VERBOSE 12 12 176: if ( verboseLevel > 1 ) . . 177: { . . 178: G4cout << "Track " << track << " (trackID " << track->GetTrackID() . . 179: << ", parentID " << track->GetParentID() . . 180: << ") is passed to G4TrackingManager." << G4endl; . . 181: } . . 182: #endif . . 183: 16 16 184: tracking = true; 5 705523 185: trackManager->ProcessOneTrack( track ); 144 148 186: istop = track->GetTrackStatus(); . . 187: tracking = false; . . 188: . . 189: #ifdef G4VERBOSE 20 20 190: if ( verboseLevel > 0 ) . . 191: { . . 192: G4cout << "Track (trackID " << track->GetTrackID() . . 193: << ", parentID " << track->GetParentID() . . 194: << ") is processed with stopping code " << istop << G4endl; . . 195: } . . 196: #endif . . 197: . . 198: G4VTrajectory * aTrajectory = 0; . . 199: #ifdef G4_STORE_TRAJECTORY 66 67 200: aTrajectory = trackManager->GimmeTrajectory(); . . 201: 10 10 202: if(previousTrajectory) . . 203: { . . 204: previousTrajectory->MergeTrajectory(aTrajectory); . . 205: delete aTrajectory; . . 206: aTrajectory = previousTrajectory; . . 207: } . . 208: if(aTrajectory&&(istop!=fStopButAlive)&&(istop!=fSuspend)) . . 209: { . . 210: if(!trajectoryContainer) . . 211: { trajectoryContainer = new G4TrajectoryContainer; . . 212: currentEvent->SetTrajectoryContainer(trajectoryContainer); } . . 213: trajectoryContainer->insert(aTrajectory); . . 214: } . . 215: #endif . . 216: 61 159 217: G4TrackVector * secondaries = trackManager->GimmeSecondaries(); 21 21 218: switch (istop) --- . . 219: { . . 220: case fStopButAlive: . . 221: case fSuspend: . . 222: trackContainer->PushOneTrack( track, aTrajectory ); . . 223: StackTracks( secondaries ); 224 break; 225 226 case fPostponeToNextEvent: 227 trackContainer->PushOneTrack( track ); 228 StackTracks( secondaries ); 229 break; 230 231 case fStopAndKill: 232 StackTracks( secondaries ); 233 delete track; 234 break; 235 236 case fAlive: 237 G4cout << "Illeagal TrackStatus returned from G4TrackingManager!" 238 << G4endl; 239 case fKillTrackAndSecondaries: 240 //if( secondaries ) secondaries->clearAndDestroy(); 241 if( secondaries ) 242 { 243 for(size_t i=0;isize();i++) 244 { delete (*secondaries)[i]; } 245 secondaries->clear(); 246 } 247 delete track; 248 break; 249 } 250 } 251 252 #ifdef G4VERBOSE 253 if ( verboseLevel > 0 ) 254 { 255 G4cout << "NULL returned from G4StackManager." << G4endl; 256 G4cout << "Terminate current event processing." << G4endl; 257 } 258 #endif 259 260 if(sdManager) 261 { sdManager->TerminateCurrentEvent(currentEvent->GetHCofThisEvent()); } 262 263 if(userEventAction) userEventAction->EndOfEventAction(currentEvent); 264 265 stateManager->SetNewState(G4State_GeomClosed); 266 currentEvent = 0; 267 abortRequested = false; 268 } G4TrackingManager::ProcessOneTrack ------------------------------------ :: [blyth@belle7 20130820-1318]$ pprof --list=G4TrackingManager::ProcessOneTrack $(which python) base.prof Using local file /data1/env/local/dyb/external/Python/2.7/i686-slc5-gcc41-dbg/bin/python. Using local file base.prof. Removing _init from all stack traces. ROUTINE ====================== G4TrackingManager::ProcessOneTrack in /data1/env/local/dyb/external/build/LCG/geant4.9.2.p01/source/tracking/src/G4TrackingManager.cc 1607 705402 Total samples (flat / cumulative) . . 63: delete fpSteppingManager; . . 64: if (fpUserTrackingAction) delete fpUserTrackingAction; . . 65: } . . 66: . . 67: //////////////////////////////////////////////////////////////// --- 16 16 68: void G4TrackingManager::ProcessOneTrack(G4Track* apValueG4Track) . . 69: //////////////////////////////////////////////////////////////// . . 70: { . . 71: . . 72: // Receiving a G4Track from the EventManager, this funciton has the . . 73: // responsibility to trace the track till it stops. 1 1 74: fpTrack = apValueG4Track; . . 75: EventIsAborted = false; . . 76: . . 77: // Clear 2ndary particle vector . . 78: // GimmeSecondaries()->clearAndDestroy(); . . 79: // std::vector::iterator itr; . . 80: size_t itr; . . 81: // for(itr=GimmeSecondaries()->begin();itr=GimmeSecondaries()->end();itr++){ 79 148 82: for(itr=0;itrsize();itr++){ . . 83: delete (*GimmeSecondaries())[itr]; . . 84: } 3 282 85: GimmeSecondaries()->clear(); . . 86: 50 50 87: if(verboseLevel>0 && (G4VSteppingVerbose::GetSilent()!=1) ) TrackBanner(); . . 88: . . 89: // Give SteppingManger the pointer to the track which will be tracked 7 15623 90: fpSteppingManager->SetInitialStep(fpTrack); . . 91: . . 92: // Pre tracking user intervention process. 70 70 93: fpTrajectory = 0; 10 10 94: if( fpUserTrackingAction != NULL ) { 10 223 95: fpUserTrackingAction->PreUserTrackingAction(fpTrack); . . 96: } . . 97: #ifdef G4_STORE_TRAJECTORY . . 98: // Construct a trajectory if it is requested 29 29 99: if(StoreTrajectory&&(!fpTrajectory)) { . . 100: // default trajectory concrete class object . . 101: switch (StoreTrajectory) { . . 102: default: . . 103: case 1: fpTrajectory = new G4Trajectory(fpTrack); break; . . 104: case 2: fpTrajectory = new G4SmoothTrajectory(fpTrack); break; . . 105: case 3: fpTrajectory = new G4RichTrajectory(fpTrack); break; . . 106: } . . 107: } . . 108: #endif . . 109: . . 110: // Give SteppingManger the maxmimum number of processes 1 625 111: fpSteppingManager->GetProcessNumber(); . . 112: . . 113: // Give track the pointer to the Step 88 91 114: fpTrack->SetStep(fpSteppingManager->GetStep()); . . 115: . . 116: // Inform beginning of tracking to physics processes 49 5085 117: fpTrack->GetDefinition()->GetProcessManager()->StartTracking(fpTrack); . . 118: . . 119: // Track the particle Step-by-Step while it is alive . . 120: G4StepStatus stepStatus; . . 121: 367 381 122: while( (fpTrack->GetTrackStatus() == fAlive) || . . 123: (fpTrack->GetTrackStatus() == fStopButAlive) ){ . . 124: 54 79 125: fpTrack->IncrementCurrentStepNumber(); 364 679688 126: stepStatus = fpSteppingManager->Stepping(); . . 127: #ifdef G4_STORE_TRAJECTORY 183 183 128: if(StoreTrajectory) fpTrajectory-> . . 129: AppendStep(fpSteppingManager->GetStep()); . . 130: #endif 29 29 131: if(EventIsAborted) { . . 132: fpTrack->SetTrackStatus( fKillTrackAndSecondaries ); . . 133: } . . 134: } . . 135: // Inform end of tracking to physics processes 70 2439 136: fpTrack->GetDefinition()->GetProcessManager()->EndTracking(); . . 137: . . 138: // Post tracking user intervention process. 54 54 139: if( fpUserTrackingAction != NULL ) { 41 264 140: fpUserTrackingAction->PostUserTrackingAction(fpTrack); . . 141: } . . 142: . . 143: // Destruct the trajectory if it was created . . 144: #ifdef G4VERBOSE 31 31 145: if(StoreTrajectory&&verboseLevel>10) fpTrajectory->ShowTrajectory(); . . 146: #endif . . 147: if( (!StoreTrajectory)&&fpTrajectory ) { . . 148: delete fpTrajectory; . . 149: fpTrajectory = 0; . . 150: } 1 1 151: } --- . . 152: . . 153: void G4TrackingManager::SetTrajectory(G4VTrajectory* aTrajectory) . . 154: { . . 155: #ifndef G4_STORE_TRAJECTORY . . 156: G4Exception("G4TrackingManager::SetTrajectory is invoked without G4_STORE_TRAJECTORY compilor option"); [blyth@belle7 20130820-1318]$ G4SteppingManager::Stepping ----------------------------- 94% of CPU samples within `G4SteppingManager::Stepping`, for *base* muon simulation:: [blyth@belle7 20130820-1318]$ pprof --list=G4SteppingManager::Stepping $(which python) base.prof Using local file /data1/env/local/dyb/external/Python/2.7/i686-slc5-gcc41-dbg/bin/python. Using local file base.prof. Removing _init from all stack traces. ROUTINE ====================== G4SteppingManager::Stepping in /data1/env/local/dyb/external/build/LCG/geant4.9.2.p01/source/tracking/src/G4SteppingManager.cc 5959 678848 Total samples (flat / cumulative) . . 112: #endif . . 113: } . . 114: . . 115: . . 116: ////////////////////////////////////////// --- 42 42 117: G4StepStatus G4SteppingManager::Stepping() . . 118: ////////////////////////////////////////// . . 119: { . . 120: . . 121: //-------- . . 122: // Prelude . . 123: //-------- . . 124: #ifdef G4VERBOSE . . 125: // !!!!! Verbose 10 10 126: if(verboseLevel>0) fVerbose->NewStep(); . . 127: else 13 13 128: if(verboseLevel==-1) { . . 129: G4VSteppingVerbose::SetSilent(1); . . 130: } . . 131: else 9 246 132: G4VSteppingVerbose::SetSilent(0); . . 133: #endif . . 134: . . 135: // Store last PostStepPoint to PreStepPoint, and swap current and nex . . 136: // volume information of G4Track. Reset total energy deposit in one Step. 169 1759 137: fStep->CopyPostToPreStepPoint(); 265 317 138: fStep->ResetTotalEnergyDeposit(); . . 139: . . 140: // Switch next touchable in track to current one 390 9025 141: fTrack->SetTouchableHandle(fTrack->GetNextTouchableHandle()); . . 142: . . 143: // Reset the secondary particles 317 317 144: fN2ndariesAtRestDoIt = 0; 13 13 145: fN2ndariesAlongStepDoIt = 0; 28 28 146: fN2ndariesPostStepDoIt = 0; . . 147: . . 148: //JA Set the volume before it is used (in DefineStepLength() for User Limit) 122 810 149: fCurrentVolume = fStep->GetPreStepPoint()->GetPhysicalVolume(); . . 150: . . 151: // Reset the step's auxiliary points vector pointer 14 30 152: fStep->SetPointerToVectorOfAuxiliaryPoints(0); . . 153: . . 154: //----------------- . . 155: // AtRest Processes . . 156: //----------------- . . 157: 146 157 158: if( fTrack->GetTrackStatus() == fStopButAlive ){ . . 159: if( MAXofAtRestLoops>0 ){ . . 160: InvokeAtRestDoItProcs(); . . 161: fStepStatus = fAtRestDoItProc; . . 162: fStep->GetPostStepPoint()->SetStepStatus( fStepStatus ); . . 163: . . 164: #ifdef G4VERBOSE . . 165: // !!!!! Verbose . . 166: if(verboseLevel>0) fVerbose->AtRestDoItInvoked(); . . 167: #endif . . 168: . . 169: } . . 170: // Make sure the track is killed . . 171: fTrack->SetTrackStatus( fStopAndKill ); . . 172: } . . 173: . . 174: //--------------------------------- . . 175: // AlongStep and PostStep Processes . . 176: //--------------------------------- . . 177: . . 178: . . 179: else{ . . 180: // Find minimum Step length demanded by active disc./cont. processes 41 197978 181: DefinePhysicalStepLength(); . . 182: . . 183: // Store the Step length (geometrical length) to G4Step and G4Track 402 437 184: fStep->SetStepLength( PhysicalStep ); 198 251 185: fTrack->SetStepLength( PhysicalStep ); 104 104 186: G4double GeomStepLength = PhysicalStep; . . 187: . . 188: // Store StepStatus to PostStepPoint 33 59 189: fStep->GetPostStepPoint()->SetStepStatus( fStepStatus ); . . 190: . . 191: // Invoke AlongStepDoIt 136 31657 192: InvokeAlongStepDoItProcs(); . . 193: . . 194: // Update track by taking into account all changes by AlongStepDoIt 247 2898 195: fStep->UpdateTrack(); . . 196: . . 197: // Update safety after invocation of all AlongStepDoIts 63 87 198: endpointSafOrigin= fPostStepPoint->GetPosition(); . . 199: // endpointSafety= std::max( proposedSafety - GeomStepLength, 0.); 120 167 200: endpointSafety= std::max( proposedSafety - GeomStepLength, kCarTolerance); . . 201: 69 116 202: fStep->GetPostStepPoint()->SetSafety( endpointSafety ); . . 203: . . 204: #ifdef G4VERBOSE . . 205: // !!!!! Verbose 79 79 206: if(verboseLevel>0) fVerbose->AlongStepDoItAllDone(); . . 207: #endif . . 208: . . 209: // Invoke PostStepDoIt 8 214657 210: InvokePostStepDoItProcs(); . . 211: . . 212: #ifdef G4VERBOSE . . 213: // !!!!! Verbose 345 345 214: if(verboseLevel>0) fVerbose->PostStepDoItAllDone(); . . 215: #endif . . 216: } . . 217: . . 218: //------- . . 219: // Finale . . 220: //------- . . 221: . . 222: // Update 'TrackLength' and remeber the Step length of the current Step 69 144 223: fTrack->AddTrackLength(fStep->GetStepLength()); 85 91 224: fPreviousStepSize = fStep->GetStepLength(); 21 36 225: fStep->SetTrack(fTrack); . . 226: #ifdef G4VERBOSE . . 227: // !!!!! Verbose . . 228: 108 108 229: if(verboseLevel>0) fVerbose->StepInfo(); . . 230: #endif . . 231: // Send G4Step information to Hit/Dig if the volume is sensitive 270 2794 232: fCurrentVolume = fStep->GetPreStepPoint()->GetPhysicalVolume(); 288 296 233: StepControlFlag = fStep->GetControlFlag(); 29 29 234: if( fCurrentVolume != 0 && StepControlFlag != AvoidHitInvocation) { . . 235: fSensitive = fStep->GetPreStepPoint()-> 258 278 236: GetSensitiveDetector(); 26 26 237: if( fSensitive != 0 ) { 1 4325 238: fSensitive->Hit(fStep); . . 239: } . . 240: } . . 241: . . 242: // User intervention process. 39 39 243: if( fUserSteppingAction != NULL ) { 167 206152 244: fUserSteppingAction->UserSteppingAction(fStep); . . 245: } . . 246: G4UserSteppingAction* regionalAction . . 247: = fStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetRegion() 1188 2901 248: ->GetRegionalSteppingAction(); 18 18 249: if( regionalAction ) regionalAction->UserSteppingAction(fStep); . . 250: . . 251: // Stepping process finish. Return the value of the StepStatus. 2 2 252: return fStepStatus; . . 253: 7 7 254: } --- . . 255: . . 256: /////////////////////////////////////////////////////////// . . 257: void G4SteppingManager::SetInitialStep(G4Track* valueTrack) . . 258: /////////////////////////////////////////////////////////// . . 259: { G4SteppingManager::InvokePostStepDoItProcs ------------------------------------------- :: [blyth@belle7 20130820-1318]$ pprof --list=G4SteppingManager::InvokePostStepDoItProcs $(which python) base.prof Using local file /data1/env/local/dyb/external/Python/2.7/i686-slc5-gcc41-dbg/bin/python. Using local file base.prof. Removing _init from all stack traces. ROUTINE ====================== G4SteppingManager::InvokePostStepDoItProcs in /data1/env/local/dyb/external/build/LCG/geant4.9.2.p01/source/tracking/src/G4SteppingManager2.cc 2027 214554 Total samples (flat / cumulative) . . 469: } . . 470: . . 471: } . . 472: . . 473: //////////////////////////////////////////////////////// --- 19 19 474: void G4SteppingManager::InvokePostStepDoItProcs() . . 475: //////////////////////////////////////////////////////// . . 476: { . . 477: . . 478: // Invoke the specified discrete processes 151 151 479: for(size_t np=0; np < MAXofPostStepLoops; np++){ . . 480: // . . 481: // Note: DoItVector has inverse order against GetPhysIntVector . . 482: // and SelectedPostStepDoItVector. . . 483: // 606 3267 484: G4int Cond = (*fSelectedPostStepDoItVector)[MAXofPostStepLoops-np-1]; 80 80 485: if(Cond != InActivated){ 206 206 486: if( ((Cond == NotForced) && (fStepStatus == fPostStepDoItProc)) || . . 487: ((Cond == Forced) && (fStepStatus != fExclusivelyForcedProc)) || . . 488: ((Cond == Conditionally) && (fStepStatus == fAlongStepDoItProc)) || . . 489: ((Cond == ExclusivelyForced) && (fStepStatus == fExclusivelyForcedProc)) || . . 490: ((Cond == StronglyForced) ) . . 491: ) { . . 492: 97 195545 493: InvokePSDIP(np); . . 494: } . . 495: } //if(*fSelectedPostStepDoItVector(np)........ . . 496: . . 497: // Exit from PostStepLoop if the track has been killed, . . 498: // but extra treatment for processes with Strongly Forced flag 743 832 499: if(fTrack->GetTrackStatus() == fStopAndKill) { 54 54 500: for(size_t np1=np+1; np1 < MAXofPostStepLoops; np1++){ 37 191 501: G4int Cond2 = (*fSelectedPostStepDoItVector)[MAXofPostStepLoops-np1-1]; 4 4 502: if (Cond2 == StronglyForced) { 4 14179 503: InvokePSDIP(np1); . . 504: } . . 505: } 5 5 506: break; . . 507: } . . 508: } //for(size_t np=0; np < MAXofPostStepLoops; np++){ 21 21 509: } --- . . 510: . . 511: . . 512: . . 513: void G4SteppingManager::InvokePSDIP(size_t np) . . 514: { [blyth@belle7 20130820-1318]$ G4SteppingManager::InvokePSDIP --------------------------------- :: [blyth@belle7 20130820-1318]$ pprof --list=G4SteppingManager::InvokePSDIP $(which python) base.prof Using local file /data1/env/local/dyb/external/Python/2.7/i686-slc5-gcc41-dbg/bin/python. Using local file base.prof. Removing _init from all stack traces. ROUTINE ====================== G4SteppingManager::InvokePSDIP in /data1/env/local/dyb/external/build/LCG/geant4.9.2.p01/source/tracking/src/G4SteppingManager2.cc 4888 209391 Total samples (flat / cumulative) . . 508: } //for(size_t np=0; np < MAXofPostStepLoops; np++){ . . 509: } . . 510: . . 511: . . 512: --- 105 105 513: void G4SteppingManager::InvokePSDIP(size_t np) . . 514: { 408 2005 515: fCurrentProcess = (*fPostStepDoItVector)[np]; . . 516: fParticleChange 917 168266 517: = fCurrentProcess->PostStepDoIt( *fTrack, *fStep); . . 518: . . 519: // Update PostStepPoint of Step according to ParticleChange 238 14920 520: fParticleChange->UpdateStepForPostStep(fStep); . . 521: #ifdef G4VERBOSE . . 522: // !!!!! Verbose 549 549 523: if(verboseLevel>0) fVerbose->PostStepDoItOneByOne(); . . 524: #endif . . 525: // Update G4Track according to ParticleChange after each PostStepDoIt 31 17005 526: fStep->UpdateTrack(); . . 527: . . 528: // Update safety after each invocation of PostStepDoIts 890 4360 529: fStep->GetPostStepPoint()->SetSafety( CalculateSafety() ); . . 530: . . 531: // Now Store the secondaries from ParticleChange to SecondaryList . . 532: G4Track* tempSecondaryTrack; . . 533: G4int num2ndaries; . . 534: 448 499 535: num2ndaries = fParticleChange->GetNumberOfSecondaries(); . . 536: 231 231 537: for(G4int DSecLoop=0 ; DSecLoop< num2ndaries; DSecLoop++){ 28 70 538: tempSecondaryTrack = fParticleChange->GetSecondary(DSecLoop); . . 539: 15 37 540: if(tempSecondaryTrack->GetDefinition()->GetApplyCutsFlag()) . . 541: { ApplyProductionCut(tempSecondaryTrack); } . . 542: . . 543: // Set parentID 22 24 544: tempSecondaryTrack->SetParentID( fTrack->GetTrackID() ); . . 545: . . 546: // Set the process pointer which created this track 10 14 547: tempSecondaryTrack->SetCreatorProcess( fCurrentProcess ); . . 548: . . 549: // If this 2ndry particle has 'zero' kinetic energy, make sure . . 550: // it invokes a rest process at the beginning of the tracking 40 62 551: if(tempSecondaryTrack->GetKineticEnergy() <= DBL_MIN){ . . 552: G4ProcessManager* pm = tempSecondaryTrack->GetDefinition()->GetProcessManager(); . . 553: if (pm->GetAtRestProcessVector()->entries()>0){ . . 554: tempSecondaryTrack->SetTrackStatus( fStopButAlive ); . . 555: fSecondary->push_back( tempSecondaryTrack ); . . 556: fN2ndariesPostStepDoIt++; . . 557: } else { . . 558: delete tempSecondaryTrack; . . 559: } . . 560: } else { 3 90 561: fSecondary->push_back( tempSecondaryTrack ); 18 18 562: fN2ndariesPostStepDoIt++; . . 563: } . . 564: } //end of loop on secondary . . 565: . . 566: // Set the track status according to what the process defined 310 366 567: fTrack->SetTrackStatus( fParticleChange->GetTrackStatus() ); . . 568: . . 569: // clear ParticleChange 221 366 570: fParticleChange->Clear(); 404 404 571: } --- . . 572: . . 573: #include "G4EnergyLossTables.hh" . . 574: #include "G4ProductionCuts.hh" . . 575: #include "G4ProductionCutsTable.hh" . . 576: