Loading...
Searching...
No Matches
DICOM.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27/// \file medical/DICOM/DICOM.cc
28/// \brief Main program of the medical/DICOM example
29//
30// The code was written by :
31// *Louis Archambault louis.archambault@phy.ulaval.ca,
32// *Luc Beaulieu beaulieu@phy.ulaval.ca
33// +Vincent Hubert-Tremblay at tigre.2@sympatico.ca
34//
35//
36// *Centre Hospitalier Universitaire de Quebec (CHUQ),
37// Hotel-Dieu de Quebec, departement de Radio-oncologie
38// 11 cote du palais. Quebec, QC, Canada, G1R 2J6
39// tel (418) 525-4444 #6720
40// fax (418) 691 5268
41//
42// + Université Laval, Québec (QC) Canada
43// *******************************************************
44#include "G4Types.hh"
45
46#include "G4RunManagerFactory.hh"
47
48#include "globals.hh"
49#include "G4UImanager.hh"
50#include "Randomize.hh"
51
52#include "G4GenericPhysicsList.hh"
53
57
59
60#ifdef G4_DCMTK
61# include "DicomFileMgr.hh"
62#else
63# include "DicomHandler.hh"
64#endif
65
67#include "QGSP_BIC.hh"
68#include "G4tgrMessenger.hh"
69
70#include "G4VisExecutive.hh"
71#include "G4UIExecutive.hh"
72
73#include "Shielding.hh"
74
75//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
76
77int main(int argc,char** argv)
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}
186
Definition of the DicomActionInitialization class.
Definition of the DicomHandler class.
Definition of the DicomIntersectVolume class.
Definition of the DicomNestedParamDetectorConstruction class.
Definition of the DicomPartialDetectorConstruction class.
Definition of the DicomRegularDetectorConstruction class.
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.
int main()
Definition testCommon.cc:47

Applications | User Support | Publications | Collaboration