add Spawning ntuple recording secondary births per step
Each step that spawns secondaries now writes one row per secondary to a new Spawning ntuple (event_id, parent_track_id, parent_step_no, child_track_id). This enables direct shower-tree reconstruction without position joins. Requires the companion Geant4 submodule change that pre-assigns track IDs in ProcessSecondariesFromParticleChange. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+1
-1
Submodule lib/geant4 updated: 41f2dd7996...e7827c9b07
@@ -112,6 +112,14 @@ RunAction::RunAction()
|
||||
analysisManager->CreateNtupleDColumn("Ey"); // col 25 [V/m]
|
||||
analysisManager->CreateNtupleDColumn("Ez"); // col 26 [V/m]
|
||||
analysisManager->FinishNtuple();
|
||||
|
||||
// Spawning ntuple (one row per secondary born, ntuple id=2)
|
||||
analysisManager->CreateNtuple("Spawning", "Spawning");
|
||||
analysisManager->CreateNtupleIColumn("event_id"); // col 0
|
||||
analysisManager->CreateNtupleIColumn("parent_track_id"); // col 1
|
||||
analysisManager->CreateNtupleIColumn("parent_step_no"); // col 2
|
||||
analysisManager->CreateNtupleIColumn("child_track_id"); // col 3
|
||||
analysisManager->FinishNtuple();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -87,6 +87,18 @@ void SteppingAction::UserSteppingAction(const G4Step* step)
|
||||
auto track = step->GetTrack();
|
||||
int evtId = G4RunManager::GetRunManager()->GetCurrentEvent()->GetEventID();
|
||||
|
||||
// Write one Spawning row per secondary born in this step (track IDs pre-assigned)
|
||||
const auto* secondaries = step->GetSecondaryInCurrentStep();
|
||||
if (secondaries) {
|
||||
for (const G4Track* sec : *secondaries) {
|
||||
analysisManager->FillNtupleIColumn(2, 0, evtId);
|
||||
analysisManager->FillNtupleIColumn(2, 1, track->GetTrackID());
|
||||
analysisManager->FillNtupleIColumn(2, 2, track->GetCurrentStepNumber());
|
||||
analysisManager->FillNtupleIColumn(2, 3, sec->GetTrackID());
|
||||
analysisManager->AddNtupleRow(2);
|
||||
}
|
||||
}
|
||||
|
||||
analysisManager->FillNtupleIColumn(1, 0, evtId);
|
||||
analysisManager->FillNtupleIColumn(1, 1, track->GetTrackID());
|
||||
analysisManager->FillNtupleIColumn(1, 2, track->GetCurrentStepNumber());
|
||||
|
||||
Reference in New Issue
Block a user