/// SolidSteppingAction.cc /// Author: Benton Pahlka /// Copyright: 2008 (C) NEMO3/SuperNEMO - University of Texas at Austin /** * @file SolidSteppingAction.cc * @author: (modified by) Ibrahin Pinera * @date 2016 SoLid - University of Antwerp */ #include "SolidSteppingAction.hh" #include "SolidRunAction.hh" #include "SolidTrackInformation.hh" #include "SolidEventAction.hh" #include "SolidUtils.hh" //#ifdef G4MULTITHREADED //#include "G4MTRunManager.hh" //#else #include "G4RunManager.hh" //#endif #include "G4EventManager.hh" #include "G4Material.hh" #include "G4Trajectory.hh" #include "G4StepPoint.hh" #include "G4SystemOfUnits.hh" #include "G4SDManager.hh" #include "G4TouchableHistory.hh" #include "G4ThreeVector.hh" #include "G4TouchableHandle.hh" #include "G4DynamicParticle.hh" #include "G4OpBoundaryProcess.hh" #include "G4Step.hh" #include "G4StepPoint.hh" #include "G4ProcessManager.hh" #include "G4Track.hh" #include "G4ParticleDefinition.hh" //#include "G4OpticalPhoton.hh" SolidSteppingAction::SolidSteppingAction(SolidRunAction *ra, SolidEventAction *ea): run_action(ra),eve_action(ea) {} SolidSteppingAction::~SolidSteppingAction(){} void SolidSteppingAction::UserSteppingAction(const G4Step *aStep){ G4double thePostEne; //, dx, dy, dz, Dist; float thermEnergy = 0.2; // int EscapeLabel = -20; G4String partname = aStep->GetTrack()->GetDefinition()->GetParticleName(); G4Track* theTrack = aStep->GetTrack(); G4String endvol = aStep->GetTrack()->GetVolume()->GetName(); if (endvol == "physTyvek" ) { eve_action->edep0_pos=aStep->GetPostStepPoint()->GetPosition(); eve_action->IsEdep0Set=true; } // SolidTrackInformation *trackInformation; // trackInformation = (SolidTrackInformation*)theTrack->GetUserInformation(); // if(0) //set to 1 to ignore generated photons { if(theTrack->GetDefinition()->GetParticleName()=="opticalphoton") theTrack->SetTrackStatus(fStopAndKill); } //The following lines are for debugging purposes // if(partname == "opticalphoton" && aStep->GetTrack()->GetUserInformation() == 0) // G4cout<<"Warning! No User info attached to photon!"<GetUserEventAction(); //if more than 1 secondary is generated, update scintillation statistics //How many photons are created G4StepPoint* thePrePoint = aStep->GetPreStepPoint(); G4StepPoint* thePostPoint = aStep->GetPostStepPoint(); G4int parentID = aStep->GetTrack()->GetParentID(); G4int pPDG = aStep->GetTrack()->GetDefinition()->GetPDGEncoding(); // G4cout << G4endl << " preGlobalTime= " << thePrePoint->GetGlobalTime() << G4endl; // G4cout << " preLocalTime= " << thePrePoint->GetLocalTime() << G4endl; // G4cout << G4endl << "postGlobalTime= " << thePostPoint->GetGlobalTime() << G4endl; // G4cout << " postLocalTime= " << thePostPoint->GetLocalTime() << G4endl; // G4cout << G4endl << "GlobalTime= " << theTrack->GetGlobalTime() << G4endl; // G4cout << " LocalTime= " << theTrack->GetLocalTime() << G4endl << G4endl; if( parentID == 0 && run_action->particleStepCount == 0 && theTrack->GetGlobalTime() > 1.*s ) { run_action->triggerTime = theTrack->GetGlobalTime(); // G4cout << G4endl << "triggerTime= " << run_action->triggerTime << G4endl << G4endl; } // G4int lastcube = run_action->CubeNumber; /**************************************************************** * get the correct cube id ****************************************************************/ G4int cubeID = -100, LiID = 0; G4TouchableHandle thePrePointTouch = thePrePoint->GetTouchableHandle(); if( endvol == "physPVT" || endvol == "physLi" || endvol == "physBacking" || endvol == "physTyvek" ) { G4int moduleID = thePrePointTouch->GetCopyNumber(3); // it is zero for NEMENIX & SM1 G4int planeID = thePrePointTouch->GetCopyNumber(2); // it is zero for NEMENIX G4int detModID = thePrePointTouch->GetCopyNumber(1); cubeID = 10000*(10*moduleID + planeID) + detModID; LiID = theTrack->GetVolume()->GetCopyNo(); // 0 for punched LiF:ZnS, 1 for plain LiF:ZnS // printf("%12s, Li: %d, module: %d, plane: %d, detMod: %4d ==> cube: %6d \n", endvol.data(), LiID, moduleID, planeID, detModID, cubeID); } /****************************************************************/ // get the volume id from the volume name G4int volID = GetVolID(endvol, LiID); // G4cout << "endvol: " << endvol << " ID out: " << GetVolID(endvol, LiID) << G4endl; G4double energy = aStep->GetTotalEnergyDeposit()/MeV; if(cubeID>=0) evtac->SetEneCube(energy,cubeID); evtac->AddEdep(energy); // G4ThreeVector pos1 = aStep->GetPostStepPoint()->GetPosition(); if(fpSteppingManager->GetfN2ndariesPostStepDoIt()>1) { evtac->AddGenerated(fpSteppingManager->GetfN2ndariesPostStepDoIt()); if(endvol=="physPVT") evtac->AddGenerated1(fpSteppingManager->GetfN2ndariesPostStepDoIt()); if(endvol=="physLi") evtac->AddGenerated2(fpSteppingManager->GetfN2ndariesPostStepDoIt()); } //How many photons are absorbed in the scintillator cube G4String endproc; G4String startproc; if (aStep->GetPostStepPoint()->GetProcessDefinedStep()!=0) endproc = aStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName(); else endproc = "UserLimit"; if (aStep->GetPreStepPoint()->GetProcessDefinedStep()!=0) startproc = aStep->GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName(); else startproc = "UserGen"; //========================================================================== // collect info for T9: MC infortmations for each particles //========================================================================== G4double tmpPosX = thePostPoint->GetPosition().x(); G4double tmpPosY = thePostPoint->GetPosition().y(); G4double tmpPosZ = thePostPoint->GetPosition().z(); G4int pID = theTrack->GetTrackID(); G4String creatProc = ""; G4int cubeIDmod = cubeID * 10; //PVT if (volID == 20) cubeIDmod = cubeID*10 + 1; //Li X if (volID == 21) cubeIDmod = cubeID*10 + 2; //Li Z if (volID == 30) cubeIDmod = cubeID*10 + 3; //LiBack X if (volID == 31) cubeIDmod = cubeID*10 + 4; //LiBack Z if (volID == 40) cubeIDmod = cubeID*10 + 5; //tyvek coating if (theTrack->GetCreatorProcess()) creatProc=theTrack->GetCreatorProcess()->GetProcessName(); else if (parentID == 0) creatProc = "Generator"; else creatProc = "unknown"; int creatProcID = GetProcessID(creatProc); if (run_action->IsT9Stored() ) { if (theTrack->GetCurrentStepNumber () <= 1) { int nevt = run_action->summaryGoodEntry.size()-1; if (nevt>=0) if (run_action->summaryGoodEntry.at(nevt) == 0) { run_action->summaryPartPDG.pop_back(); run_action->summaryPartID.pop_back(); run_action->summaryParentID.pop_back(); run_action->summaryParentPDG.pop_back(); run_action->summaryInitialEkin.pop_back(); run_action->summaryNsteps.pop_back(); run_action->summaryNcubes.pop_back(); // run_action->summaryNCompton.pop_back(); // run_action->summaryNIonisation.pop_back(); // run_action->summaryNBrem.pop_back(); run_action->summaryFirstVol.pop_back(); run_action->summaryLastVol.pop_back(); run_action->summaryCreatorProcessID.pop_back(); run_action->summaryLastProcessID.pop_back(); // run_action->summaryCreatorProcess.pop_back(); // run_action->summaryLastProcess.pop_back(); run_action->summaryPosX.pop_back(); run_action->summaryPosY.pop_back(); run_action->summaryPosZ.pop_back(); run_action->summaryGoodEntry.pop_back(); } //fill new info run_action->summaryGoodEntry.push_back(0); run_action->summaryPartPDG.push_back(pPDG); run_action->summaryPartID.push_back(pID); run_action->summaryParentID.push_back(parentID); run_action->summaryParentPDG.push_back(0); run_action->summaryInitialEkin.push_back(aStep->GetPreStepPoint()->GetKineticEnergy()/MeV); run_action->summaryNsteps.push_back(1); run_action->summaryNcubes.push_back(0); run_action->summaryFirstVol.push_back(0); run_action->summaryLastVol.push_back(0); run_action->summaryCreatorProcessID.push_back(creatProcID); run_action->summaryLastProcessID.push_back(999); run_action->summaryPosX.push_back(-1); run_action->summaryPosY.push_back(-1); run_action->summaryPosZ.push_back(-1); run_action->listCubes.clear(); run_action->summaryAllPartID.push_back(pID); run_action->summaryAllPDG.push_back(pPDG); // run_action->summaryNCompton.push_back(0); //run_action->summaryNIonisation.push_back(0); //run_action->summaryNBrem.push_back(0); /* run_action->summaryCreatorProcess.push_back(creatProc); run_action->summaryLastProcess.push_back("nan"); */ } G4int kp = run_action->summaryLastVol.size()-1; if (kp<0) kp=0; run_action->summaryNsteps.at(kp)++; run_action->summaryLastProcessID.at(kp) = GetProcessID(endproc); //if (run_action->IsT9Stored() ) // run_action->summaryLastProcess.push_back(endproc); if (run_action->GetT9cut() == 0) run_action->summaryGoodEntry.at(kp)=1; else if (run_action->GetT9cut() == 1) { if (!(volID>=90 || volID<3)) run_action->summaryGoodEntry.at(kp)=1; } else if (run_action->GetT9cut() == 2) { if (!((volID >= 90 || volID<3) && pPDG==11)) run_action->summaryGoodEntry.at(kp)=1; } else if (run_action->GetT9cut() == 3) { if (!((volID>=90 || volID<3) && pPDG==11 && (creatProc == "eIoni" || creatProc == "hIoni" || creatProc == "ionIoni" || creatProc == "phot"))) run_action->summaryGoodEntry.at(kp)=1; } run_action->summaryPosX.at(kp) = tmpPosX; run_action->summaryPosY.at(kp) = tmpPosY; run_action->summaryPosZ.at(kp) = tmpPosZ; if (theTrack->GetCurrentStepNumber () <= 1) { if (volID < 10 || volID > 40) run_action->summaryFirstVol.at(kp) = volID; else { run_action->summaryFirstVol.at(kp) = cubeIDmod; if (volID==15) { run_action->summaryNcubes.at(kp)++; run_action->listCubes.push_back(cubeID); } } } if (volID < 10 || volID > 40) run_action->summaryLastVol.at(kp) = volID; else { if (volID == 15) { run_action->summaryLastVol.at(kp) = cubeIDmod; if (std::find(run_action->listCubes.begin(), run_action->listCubes.end(), cubeID) == run_action->listCubes.end()){ run_action->summaryNcubes.at(kp)++; run_action->listCubes.push_back(cubeID); } }//end if volid == 15 //PVT } std::vector::iterator it; it = std::find(run_action->summaryAllPartID.begin(), run_action->summaryAllPartID.end(), parentID); auto posIt = std::distance(run_action->summaryAllPartID.begin(), it) ; if (parentID == 0) run_action->summaryParentPDG.at(kp) = 0; //generator else { if (it != run_action->summaryAllPartID.end()) run_action->summaryParentPDG.at(kp) = run_action->summaryAllPDG.at(posIt); else G4cout << parentID << " " << " not found " << G4endl; } /* //kept here temporary while waiting for the output validation. the vars can be restored if needed. if (endproc == "compt") run_action->summaryNCompton.at(kp)++; else if ( endproc == "eIoni" || endproc == "hIoni" || endproc == "ionIoni" || endproc == "muIoni") //tmp_nion++; run_action->summaryNIonisation.at(kp)++; else if (endproc == "eBrem" || endproc == "muBrem") run_action->summaryNBrem.at(kp)++; */ }//end if T9 //========================================================================== // FINISH collecting info for T9 //========================================================================== /* if (aStep ->GetPreStepPoint()->GetProcessDefinedStep() != 0) { startproc = aStep->GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName(); }else{ startproc="UserLimit"; } if(endproc=="OpAbsorption"&&endvol!="physMPPC"){ evtac->CountBulkAbs(); } if(endvol=="physCore"&&endproc=="OpWLS"){ evtac->CountWLS(); } */ // G4VPhysicalVolume* thePrePV = thePrePoint->GetPhysicalVolume(); // G4VPhysicalVolume* thePostPV = thePostPoint->GetPhysicalVolume(); run_action->thePreEne = thePrePoint->GetKineticEnergy()/eV;// in eV thePostEne = thePostPoint->GetKineticEnergy()/eV; //in eV // store initial vertex cube and vol IDs if(parentID == 0 && run_action->particleStepCount == 0) { run_action->InitCube = cubeID; run_action->InitVol = volID; run_action->particleStepCount++; } //========================================================================== // collect info for T2: ibd basic related info //========================================================================== if( partname == "e+" && parentID == 0 ) { run_action->PositronStepCount++; if(run_action->PositronStepCount == 1) { // printf("\n\npart: %5s, %10s, %12s, cube: %6d, track: %d, parent: %d, Epre: %10f, Epos: %10f, Edep: %10f, delE: %10f \n\n\n", // partname.data(), endproc.data(), endvol.data(), cubeID, theTrack->GetTrackID(), parentID, // run_action->thePreEne, thePostEne, energy, run_action->thePreEne - thePostEne); run_action->InitPosX = thePrePoint->GetPosition().x(); run_action->InitPosY = thePrePoint->GetPosition().y(); run_action->InitPosZ = thePrePoint->GetPosition().z(); run_action->InitCube = cubeID; } if(endproc=="annihil") { run_action->PositronEndX = thePostPoint->GetPosition().x(); run_action->PositronEndY = thePostPoint->GetPosition().y(); run_action->PositronEndZ = thePostPoint->GetPosition().z(); run_action->PositronDistance = pow( ( pow((run_action->InitPosX - run_action->PositronEndX),2) + pow((run_action->InitPosY - run_action->PositronEndY),2) + pow((run_action->InitPosZ - run_action->PositronEndZ),2) ) , 0.5); run_action->AnnihilationTime = thePostPoint->GetGlobalTime(); run_action->AnnihilationVol = volID; run_action->AnnihilationCube = cubeID; run_action->PositronDeltaR = CubesDistance(run_action->InitCube, cubeID); } } // if(endvol=="physPVT" || endvol=="physLi") // G4cout << "--> " << endvol << ": " << partname << ", " << endproc << ", " << theTrack->GetTrackID() << ", " << parentID << ", " << cube << // ", " << run_action->thePreEne << ", " << thePostEne << ", " << energy << ", " << thePostPoint->GetGlobalTime() << G4endl; // if( partname == "neutron" ) if( partname == "neutron" && run_action->IsT2Stored() ) { run_action->NeutronStepCount++; // neutron capture if( endproc == "neutronInelastic" || endproc == "nInelastic" || endproc == "neutronCapture" || endproc == "nCapture" ) { evtac->SetCapturePos(thePostPoint->GetPosition()); evtac->SetCaptureEne(run_action->thePreEne); if( endvol == "physLi" ){ evtac->AddLiCaptured(1); run_action->CapEneLi = thePrePoint->GetKineticEnergy()/eV; }else if( endvol == "physPVT" ){ evtac->AddPVTCaptured(1); run_action->CapEnePVT = thePrePoint->GetKineticEnergy()/eV; } evtac->SetCaptureCube(cubeID); G4double EndPosX = thePostPoint->GetPosition().x(); G4double EndPosY = thePostPoint->GetPosition().y(); G4double EndPosZ = thePostPoint->GetPosition().z(); run_action->ThermalRadius = pow( ( pow((EndPosX - ThermX),2) + pow((EndPosY - ThermY),2) + pow((EndPosZ - ThermZ),2) ) , 0.5); run_action->CaptureDistance = pow( ( pow((EndPosX - run_action->InitPosX),2) + pow((EndPosY - run_action->InitPosY),2) + pow((EndPosZ - run_action->InitPosZ),2) ) , 0.5); run_action->CaptureTime = thePostPoint->GetGlobalTime(); run_action->ThermalTime = run_action->CaptureTime - run_action->ModTime; run_action->NScatter = run_action->NeutronStepCount; run_action->CaptureVol = volID; run_action->CaptureCube = cubeID; run_action->NeutronDeltaR = CubesDistance(run_action->InitCube, cubeID); } if((run_action->thePreEne>=thermEnergy) && (thePostEne<=thermEnergy) && (run_action->istherm == 0)) { evtac->SetThermalPos(thePostPoint->GetPosition()); ThermX = thePostPoint->GetPosition().x(); ThermY = thePostPoint->GetPosition().y(); ThermZ = thePostPoint->GetPosition().z(); run_action->ModDistance = pow( ( pow((run_action->InitPosX - ThermX),2) + pow((run_action->InitPosY - ThermY),2) + pow((run_action->InitPosZ - ThermZ),2) ) , 0.5); run_action->ModTime = thePostPoint->GetGlobalTime(); run_action->istherm = 1; } } //========================================================================== // FINISH collecting info for T2 //========================================================================== //========================================================================== // collect info for T6: particles tracking inside the detector //========================================================================== if( run_action->IsT6Stored() ) { G4bool isFibre = IsVolInsideFibre(endvol); G4int trackId = theTrack->GetTrackID(); G4bool pid_found = 0; if (std::find(run_action->partTrackID.begin(), run_action->partTrackID.end(), trackId) != run_action->partTrackID.end()) pid_found = 1; else pid_found = 0; if( (endproc!="Transportation" && (IsVolInsideCubeMod(endvol) || isFibre )) || (pid_found==0 && !IsVolInsideCubeMod(endvol) && !isFibre ) // && (endvol=="physLi" && partname=="alpha" && run_action->thePreEne > 7.e6 && delT<1.e3) ) { if( endvol=="physDetMod" ) // air gaps inside cube modules { G4int detModID = thePrePointTouch->GetCopyNumber(0); G4int planeID = thePrePointTouch->GetCopyNumber(1); G4int moduleID = thePrePointTouch->GetCopyNumber(2); cubeID = 10000*(10*moduleID + planeID) + detModID; } if( isFibre ) { G4int fibreID = thePrePointTouch->GetCopyNumber(1); G4int planeID = thePrePointTouch->GetCopyNumber(2); G4int moduleID = thePrePointTouch->GetCopyNumber(3); cubeID = 5000000 + 10000*(10*moduleID + planeID) + fibreID; } G4double delTime = (thePostPoint->GetGlobalTime() - run_action->triggerTime); run_action->partPDG.push_back( pPDG ); G4int cubex=-10, cubey=-10, cubez=-10; if( cubeID >= 0 ) { cubez = cubeID/10000; cubex = (cubeID%10000)/100; cubey = cubeID%100; } run_action->partTrackID.push_back( theTrack->GetTrackID() ); run_action->partParentID.push_back( parentID ); run_action->partEnergy.push_back( run_action->thePreEne *eV ); // in MeV run_action->partDeposited.push_back( (run_action->thePreEne - thePostEne) *eV ); // in MeV run_action->partX.push_back( thePostPoint->GetPosition().x() ); run_action->partY.push_back( thePostPoint->GetPosition().y() ); run_action->partZ.push_back( thePostPoint->GetPosition().z() ); // run_action->partTime.push_back( thePostPoint->GetGlobalTime() - run_action->triggerTime ); run_action->partTime.push_back( delTime ); run_action->partCubeID.push_back( cubeID ); run_action->partCubeX.push_back( cubex ); run_action->partCubeY.push_back( cubey ); run_action->partCubeZ.push_back( cubez ); run_action->partVolID.push_back( volID ); // printf("\n part: %15d, %10s, %12s, cube: %6d, vol: %6d, track: %d, parent: %d, Epre: %10f, Epos: %10f, delE: %10f, time: %f \n\n", // partPDG, endproc.data(), endvol.data(), cubeID, volID, theTrack->GetTrackID(), parentID, // run_action->thePreEne/MeV, thePostEne/MeV, (run_action->thePreEne - thePostEne)/MeV, // delTime/microsecond ); } } //========================================================================== // FINISH collecting info for T6 //========================================================================== //========================================================================== // collect info for T7: particles entering the detector volume //========================================================================== if( run_action->IsT7Stored() ) { // if( run_action->checkTrackID != theTrack->GetTrackID()){ // G4cout << "--> new particle" << G4endl; // G4cout << "--> " << partname << ", " << theTrack->GetTrackID() << ", " << theTrack->GetParentID() << ", " // << endvol << ", " << thePrePoint->GetPosition() << G4endl; // } if( run_action->checkEnteredDetector && run_action->checkTrackID != theTrack->GetTrackID()) { // G4cout << "--> new particle after entering one" << G4endl; // G4cout << "--> " << partname << ", " << theTrack->GetTrackID() << ", " << theTrack->GetParentID() << ", " // << endvol << ", " << thePrePoint->GetPosition() << G4endl; run_action->checkEnteredDetector = false; if( IsVolInsideDetector(endvol) ){ run_action->checkEnteredDetector = true; run_action->checkTrackID = theTrack->GetTrackID(); } } if( !run_action->checkEnteredDetector && !IsVolInsideDetector(endvol) && thePostPoint->GetStepStatus() == fGeomBoundary ) { // G4cout << G4endl << "------->>>>> leaving " << endvol << " <<<<<<--------" << G4endl; G4TouchableHandle detTouch = thePostPoint->GetTouchableHandle(); G4String postVolName = detTouch->GetVolume()->GetName(); if ( IsVolInsideDetector(postVolName) ){ run_action->checkTrackID = theTrack->GetTrackID(); run_action->checkEnteredDetector = true; // G4cout << "------->>>>> entering detector <<<<<<--------" << G4endl; // G4cout << "--> " << partname << ", " // << cubeID << ", " // << volID << ", " // << GetVolID(postVolName, 0) << ", " // << postVolName << ", " // << theTrack->GetTrackID() << ", " // << parentID << ", " // << run_action->thePreEne *eV << ", " // << thePostPoint->GetMomentumDirection() << ", " // << thePostPoint->GetPosition() << ", " // << thePostPoint->GetGlobalTime() // << G4endl; run_action->enteringPartID.push_back( pPDG ); run_action->enteringTrackID.push_back( theTrack->GetTrackID() ); run_action->enteringParentID.push_back( parentID ); run_action->enteringEnergy.push_back( run_action->thePreEne *eV ); // in MeV run_action->enteringX.push_back( thePostPoint->GetPosition().x() ); run_action->enteringY.push_back( thePostPoint->GetPosition().y() ); run_action->enteringZ.push_back( thePostPoint->GetPosition().z() ); run_action->enteringXmom.push_back( thePostPoint->GetMomentumDirection().x() ); run_action->enteringYmom.push_back( thePostPoint->GetMomentumDirection().y() ); run_action->enteringZmom.push_back( thePostPoint->GetMomentumDirection().z() ); run_action->enteringTime.push_back( thePostPoint->GetGlobalTime() ); run_action->enteringPreVolID.push_back( volID ); run_action->enteringPostVolID.push_back( GetVolID(postVolName, 0) ); } } } //========================================================================== // FINISH collecting info for T7 //========================================================================== //========================================================================== // collect info for T8: neutron generation by muon spallation //========================================================================== // for cosmics simulations if(run_action->IsT8Stored()) { if( partname == "neutron" && theTrack->GetTrackID() != run_action->nGeneratedTrackID ) // if( partname == "neutron" && parentID == 1 && theTrack->GetTrackID() != run_action->nGeneratedTrackID ) { run_action->nGeneratedTrackID = theTrack->GetTrackID(); // G4cout << ">>>>> neutron is born <<<<<<<" << G4endl; // G4cout << "--> neutron born: " << endproc << ", " << theTrack->GetTrackID() << ", " << parentID << ", " << cubeID << ", " << volID << ", " << endvol << // ", " << run_action->thePreEne << ", " << thePrePoint->GetPosition() << ", " << thePostPoint->GetGlobalTime() << G4endl << G4endl; run_action->nGenerationTrackID.push_back( run_action->nGeneratedTrackID ); run_action->nGenerationParentID.push_back( parentID ); run_action->nGenerationEnergy.push_back( run_action->thePreEne *eV ); // in MeV run_action->nGenerationPosX.push_back( thePrePoint->GetPosition().x() ); run_action->nGenerationPosY.push_back( thePrePoint->GetPosition().y() ); run_action->nGenerationPosZ.push_back( thePrePoint->GetPosition().z() ); run_action->nGenerationTime.push_back( thePostPoint->GetGlobalTime() ); run_action->nGenerationCube.push_back( cubeID ); run_action->nGenerationVol.push_back( volID ); run_action->nGenerationProcess.push_back( theTrack->GetCreatorProcess()->GetProcessName() ); } } //========================================================================== // FINISH collecting info for T8 //========================================================================== }