Loading...
Searching...
No Matches
Functions
DICOM.cc File Reference

Main program of the medical/DICOM example. More...

#include "G4Types.hh"
#include "G4RunManagerFactory.hh"
#include "globals.hh"
#include "G4UImanager.hh"
#include "Randomize.hh"
#include "G4GenericPhysicsList.hh"
#include "DicomRegularDetectorConstruction.hh"
#include "DicomNestedParamDetectorConstruction.hh"
#include "DicomPartialDetectorConstruction.hh"
#include "DicomActionInitialization.hh"
#include "DicomHandler.hh"
#include "DicomIntersectVolume.hh"
#include "QGSP_BIC.hh"
#include "G4tgrMessenger.hh"
#include "G4VisExecutive.hh"
#include "G4UIExecutive.hh"
#include "Shielding.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Main program of the medical/DICOM example.

Definition in file DICOM.cc.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 77 of file DICOM.cc.

78{
79 // Instantiate G4UIExecutive if interactive mode
80 G4UIExecutive* ui = nullptr;
81 if ( argc == 1 ) {
82 ui = new G4UIExecutive(argc, argv);
83 }
84
86 char* part = std::getenv( "DICOM_PARTIAL_PARAM" );
87 G4bool bPartial = FALSE;
88 if( part && G4String(part) == "1" ) {
89 bPartial = TRUE;
90 }
91
92 CLHEP::HepRandom::setTheEngine(new CLHEP::RanecuEngine);
93 CLHEP::HepRandom::setTheSeed(G4long(24534575684783));
94 G4long seeds[2];
95 seeds[0] = G4long(534524575674523);
96 seeds[1] = G4long(526345623452457);
97 CLHEP::HepRandom::setTheSeeds(seeds);
98
99 // Construct the default run manager
100 char* nthread_c = std::getenv("DICOM_NTHREADS");
101
102 unsigned nthreads = 4;
103 unsigned env_threads = 0;
104
105 if(nthread_c) {env_threads=unsigned(G4UIcommand::ConvertToDouble(nthread_c));}
106 if(env_threads > 0) {nthreads=env_threads;}
107
108 auto* runManager = G4RunManagerFactory::CreateRunManager();
109 runManager->SetNumberOfThreads(nthreads);
110
111 DicomDetectorConstruction* theGeometry = 0;
112
113#ifdef G4_DCMTK
114 DicomFileMgr* theFileMgr = 0;
115#else
116 DicomHandler* dcmHandler = 0;
117#endif
118
119 if( !bPartial ){
120#ifdef G4_DCMTK
121
122 theFileMgr = DicomFileMgr::GetInstance();
123 theFileMgr->Convert("Data.dat");
124
125#else
126 // Treatment of DICOM images before creating the G4runManager
127 dcmHandler = DicomHandler::Instance();
128 dcmHandler->CheckFileFormat();
129#endif
130
131 // Initialisation of physics, geometry, primary particles ...
132 char* nest = std::getenv( "DICOM_NESTED_PARAM" );
133 if( nest && G4String(nest) == "1" ) {
134 theGeometry = new DicomNestedParamDetectorConstruction();
135 } else {
136 theGeometry = new DicomRegularDetectorConstruction();
137 }
138 } else {
139 theGeometry = new DicomPartialDetectorConstruction();
140 }
141 runManager->SetUserInitialization(theGeometry);
142
143 // std::vector<G4String>* MyConstr = new std::vector<G4String>;
144 // MyConstr->push_back("G4EmStandardPhysics");
145 // G4VModularPhysicsList* phys = new G4GenericPhysicsList(MyConstr);
146 G4VModularPhysicsList* phys = new Shielding();
147 runManager->SetUserInitialization(phys);
148
149 // Set user action classes
150 runManager->SetUserInitialization(new DicomActionInitialization());
151
152 runManager->Initialize();
153
155
156 // visualisation manager
157 G4VisManager* visManager = new G4VisExecutive;
158 visManager->Initialize();
159
160 G4UImanager* UImanager = G4UImanager::GetUIpointer();
161
162 if (ui)
163 {
164 UImanager->ApplyCommand("/control/execute vis.mac");
165 ui->SessionStart();
166 delete ui;
167 }
168 else
169 {
170 G4String command = "/control/execute ";
171 G4String fileName = argv[1];
172 UImanager->ApplyCommand(command+fileName);
173 }
174
175 delete visManager;
176 delete runManager;
177
178 if( !bPartial ) {
179#ifdef G4_DCMTK
180 delete theFileMgr;
181#endif
182 }
183
184 return 0;
185}
static DicomFileMgr * GetInstance()
void Convert(G4String fFileName)
static DicomHandler * Instance()
void CheckFileFormat()
Manages intersections of DICOM files with volumes.
Construct the phantom using DicomPhantomParameterisationColour.
Construct a DICOM Geant4 geometry produced from the intersetion of a DICOM file and a volume.
DicomRegularDetectorConstruction class.

Applications | User Support | Publications | Collaboration