G4OCCT 0.1.0
Geant4 interface to Open CASCADE Technology (OCCT) geometry definitions
Loading...
Searching...
No Matches
G4OCCTRunAction.cc
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later
2// Copyright (C) 2026 G4OCCT Contributors
3
5
6#include "G4OCCTRunAction.hh"
8
9#include <G4AnalysisManager.hh>
10#include <G4Run.hh>
11#include <G4SystemOfUnits.hh>
12#include <G4Threading.hh>
13
14G4OCCTRunAction::G4OCCTRunAction(const G4OCCTOutputConfig* config) : fConfig(config) {}
15
17 auto* am = G4AnalysisManager::Instance();
18 am->SetDefaultFileType("csv");
19 am->SetVerboseLevel(0);
20 // In MT mode the CSV backend does not support per-thread merging; each
21 // worker writes its own suffixed file (e.g. g4occt_nt_steps_t0.csv).
22 // Disable the merge attempt to avoid a crash during CloseFile().
23 // SetNtupleMerging is only meaningful and safe in multithreaded mode.
24 if (G4Threading::IsMultithreadedApplication()) {
25 am->SetNtupleMerging(false);
26 }
27 am->OpenFile(fConfig->fileName);
28
29 fStepsNtupleId = -1;
30 fTracksNtupleId = -1;
31 fEventsNtupleId = -1;
32
33 if (fConfig->recordSteps) {
34 fStepsNtupleId = am->CreateNtuple("steps", "Per-step data");
35 am->CreateNtupleIColumn(fStepsNtupleId, "EventID");
36 am->CreateNtupleIColumn(fStepsNtupleId, "TrackID");
37 am->CreateNtupleIColumn(fStepsNtupleId, "StepNo");
38 am->CreateNtupleSColumn(fStepsNtupleId, "VolumeName");
39 am->CreateNtupleSColumn(fStepsNtupleId, "ParticleName");
40 am->CreateNtupleDColumn(fStepsNtupleId, "Edep"); // MeV
41 am->CreateNtupleDColumn(fStepsNtupleId, "StepLength"); // mm
42 am->CreateNtupleDColumn(fStepsNtupleId, "X"); // mm
43 am->CreateNtupleDColumn(fStepsNtupleId, "Y"); // mm
44 am->CreateNtupleDColumn(fStepsNtupleId, "Z"); // mm
45 am->FinishNtuple(fStepsNtupleId);
46 }
47
48 if (fConfig->recordTracks) {
49 fTracksNtupleId = am->CreateNtuple("tracks", "Per-track data");
50 am->CreateNtupleIColumn(fTracksNtupleId, "EventID");
51 am->CreateNtupleIColumn(fTracksNtupleId, "TrackID");
52 am->CreateNtupleIColumn(fTracksNtupleId, "ParentID");
53 am->CreateNtupleSColumn(fTracksNtupleId, "ParticleName");
54 am->CreateNtupleSColumn(fTracksNtupleId, "CreatorProcess");
55 am->CreateNtupleDColumn(fTracksNtupleId, "TotalEdep"); // MeV
56 am->CreateNtupleDColumn(fTracksNtupleId, "TrackLength"); // mm
57 am->CreateNtupleDColumn(fTracksNtupleId, "X0"); // mm
58 am->CreateNtupleDColumn(fTracksNtupleId, "Y0"); // mm
59 am->CreateNtupleDColumn(fTracksNtupleId, "Z0"); // mm
60 am->CreateNtupleDColumn(fTracksNtupleId, "Xf"); // mm
61 am->CreateNtupleDColumn(fTracksNtupleId, "Yf"); // mm
62 am->CreateNtupleDColumn(fTracksNtupleId, "Zf"); // mm
63 am->FinishNtuple(fTracksNtupleId);
64 }
65
66 if (fConfig->recordEvents) {
67 fEventsNtupleId = am->CreateNtuple("events", "Per-event data");
68 am->CreateNtupleIColumn(fEventsNtupleId, "EventID");
69 am->CreateNtupleDColumn(fEventsNtupleId, "TotalEdep"); // MeV
70 am->CreateNtupleDColumn(fEventsNtupleId, "TotalTrackLength"); // mm
71 am->CreateNtupleIColumn(fEventsNtupleId, "NPrimaries");
72 am->CreateNtupleIColumn(fEventsNtupleId, "NTracks");
73 am->CreateNtupleIColumn(fEventsNtupleId, "NSteps");
74 am->FinishNtuple(fEventsNtupleId);
75 }
76}
77
79 auto* am = G4AnalysisManager::Instance();
80 am->Write();
81 am->CloseFile();
82}
Shared output configuration for the g4occt CSV output mechanism.
Run action that manages CSV output via G4AnalysisManager.
Shared output configuration used by all G4OCCTRunAction instances.
G4bool recordEvents
Enable the per-event ntuple.
G4bool recordSteps
Enable the per-step ntuple.
G4String fileName
Base CSV filename (no extension).
G4bool recordTracks
Enable the per-track ntuple.
G4OCCTRunAction(const G4OCCTOutputConfig *config)
void EndOfRunAction(const G4Run *run) override
void BeginOfRunAction(const G4Run *run) override