Loading...
Searching...
No Matches
DicomHandler.hh
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/include/DicomHandler.hh
28/// \brief Definition of the DicomHandler class
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
45#ifndef DicomHandler_h
46#define DicomHandler_h 1
47
48#include <cstdio>
49#include <map>
50#include <fstream>
51
52#include "globals.hh"
53
54//*******************************************************
55/// Dicom Handler class
56/// - Handling of DICM images
57/// - Transforming *.dcm to *.g4 ( pixels->density )
58/// - Reading headers and pixels
59/// - Transforming pixel to density and creating *.g4
60/// files
61/// - Functions are in DicomHandler.cc
62///
63/// Base on previous code by :
64/// Dragan Tubic <tdragan@gel.ulaval.ca>
65//*******************************************************
66
69
70class DicomHandler
71{
72public:
73
75
76 // static accessor
77 static DicomHandler* Instance();
78
79 G4int ReadFile(FILE *,char *);
80 G4int ReadData(FILE *,char *); // note: always use readHeader
81 // before readData
82
83 // use ImageMagick to display the image
84 //G4int displayImage(char[500]);
85
86 void CheckFileFormat();
87
90
91private:
93
94 template <class Type> void GetValue(char *, Type &);
95
96private:
98
99 const G4int DATABUFFSIZE;
100 const G4int LINEBUFFSIZE;
101 const G4int FILENAMESIZE;
102
103 void ReadCalibration();
104 void GetInformation(G4int &, char *);
105 G4float Pixel2density(G4int pixel);
106 void ReadMaterialIndices( std::ifstream& finData);
107 unsigned int GetMaterialIndex( G4float density );
108 void StoreData(std::ofstream& foutG4DCM);
109 void StoreData(DicomPhantomZSliceHeader* dcmPZSH);
110 G4int read_defined_nested(FILE *, G4int);
111 void read_undefined_nested(FILE *);
112 void read_undefined_item(FILE *);
113
115 G4int fNFiles;
116 short fRows;
117 short fColumns;
120
124
126
129
130 G4int** fTab;
131 std::map<G4float,G4String> fMaterialIndices;
132
134 G4double* fValueDensity;
135 G4double* fValueCT;
138
141
142};
143#endif
144
void StoreData(std::ofstream &foutG4DCM)
DicomPhantomZSliceMerged * fMergedSlices
void ReadCalibration()
G4int ReadData(FILE *, char *)
G4double fSliceThickness
G4int ReadFile(FILE *, char *)
G4bool fReadCalibration
G4float Pixel2density(G4int pixel)
G4String fCt2DensityFile
void GetValue(char *, Type &)
static DicomHandler * Instance()
void CheckFileFormat()
std::map< G4float, G4String > fMaterialIndices
G4double fPixelSpacingX
void read_undefined_nested(FILE *)
G4int read_defined_nested(FILE *, G4int)
G4String fDriverFile
void ReadMaterialIndices(std::ifstream &finData)
G4double * fValueCT
const G4int LINEBUFFSIZE
unsigned int GetMaterialIndex(G4float density)
void read_undefined_item(FILE *)
const G4int FILENAMESIZE
static G4String GetDicomDataPath()
G4bool fLittleEndian
const G4int DATABUFFSIZE
void GetInformation(G4int &, char *)
G4double fSliceLocation
G4double * fValueDensity
G4double fPixelSpacingY
G4int fRescaleIntercept
G4bool fImplicitEndian
static DicomHandler * fInstance
DicomHandler.cc :
short fPixelRepresentation
static G4String GetDicomDataFile()
DicomPhantomZSliceHeader class.

Applications | User Support | Publications | Collaboration