GGEMS  1.1
GPU GEant4-based Monte Carlo Simulations
GGEMSVolumeCreatorManager.hh
Go to the documentation of this file.
1 #ifndef GUARD_GGEMS_GEOMETRIES_GGEMSVOLUMECREATORMANAGER_HH
2 #define GUARD_GGEMS_GEOMETRIES_GGEMSVOLUMECREATORMANAGER_HH
3 
4 // ************************************************************************
5 // * This file is part of GGEMS. *
6 // * *
7 // * GGEMS is free software: you can redistribute it and/or modify *
8 // * it under the terms of the GNU General Public License as published by *
9 // * the Free Software Foundation, either version 3 of the License, or *
10 // * (at your option) any later version. *
11 // * *
12 // * GGEMS is distributed in the hope that it will be useful, *
13 // * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 // * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 // * GNU General Public License for more details. *
16 // * *
17 // * You should have received a copy of the GNU General Public License *
18 // * along with GGEMS. If not, see <https://www.gnu.org/licenses/>. *
19 // * *
20 // ************************************************************************
21 
34 #ifdef _MSC_VER
35 #pragma warning(disable: 4251) // Deleting warning exporting STL members!!!
36 #endif
37 
38 #include <map>
39 
41 
42 typedef std::map<GGfloat, std::string> LabelToMaterialMap;
48 class GGEMS_EXPORT GGEMSVolumeCreatorManager
49 {
50  private:
55 
60 
61  public:
68  {
69  static GGEMSVolumeCreatorManager instance;
70  return instance;
71  }
72 
78  GGEMSVolumeCreatorManager(GGEMSVolumeCreatorManager const& volume_creator_manager) = delete;
79 
85  GGEMSVolumeCreatorManager& operator=(GGEMSVolumeCreatorManager const& volume_creator_manager) = delete;
86 
92  GGEMSVolumeCreatorManager(GGEMSVolumeCreatorManager const&& volume_creator_manager) = delete;
93 
99  GGEMSVolumeCreatorManager& operator=(GGEMSVolumeCreatorManager const&& volume_creator_manager) = delete;
100 
109  void SetElementSizes(GGfloat const& voxel_width, GGfloat const& voxel_height, GGfloat const& voxel_depth, std::string const& unit = "mm");
110 
116  inline GGfloat3 GetElementsSizes() const {return element_sizes_;}
117 
125  void SetVolumeDimensions(GGsize const& volume_width, GGsize const& volume_height, GGsize const& volume_depth);
126 
133  inline GGsize3 GetVolumeDimensions() const {return volume_dimensions_;};
134 
140  void SetMaterial(std::string const& material = "Air");
141 
147  inline GGsize GetNumberElements(void) const {return number_elements_;}
148 
154  inline std::string GetDataType(void) const {return data_type_;};
155 
161  inline cl::Buffer* GetVoxelizedVolume(void) const {return voxelized_volume_;}
162 
168  void SetOutputImageFilename(std::string const& output_image_filename);
169 
175  void SetRangeToMaterialDataFilename(std::string const& output_range_to_material_filename);
176 
183  void AddLabelAndMaterial(GGfloat const& label, std::string const& material);
184 
190  void SetDataType(std::string const& data_type = "MET_FLOAT");
191 
196  void Initialize(void);
197 
202  void Write(void);
203 
208  void Clean(void);
209 
210  private:
215  void CheckParameters(void) const;
216 
221  void WriteMHDImage(void) const;
222 
227  void WriteRangeToMaterialFile(void);
228 
234  template <typename T>
235  void AllocateImage(void);
236 
237  private:
241  std::string data_type_;
244  cl::Buffer* voxelized_volume_;
246 };
247 
251 
252 template <typename T>
254 {
255  // Get the OpenCL manager
257 
258  // Allocation of memory on OpenCL device depending of type
259  voxelized_volume_ = opencl_manager.Allocate(nullptr, number_elements_ * sizeof(T), 0, CL_MEM_READ_WRITE, "GGEMSVolumeCreatorManager");
260 
261  // Initialize the buffer to zero
262  opencl_manager.CleanBuffer(voxelized_volume_, number_elements_ * sizeof(T), 0);
263 }
264 
271 
280 extern "C" GGEMS_EXPORT void set_volume_dimension_volume_creator_manager(GGEMSVolumeCreatorManager* volume_creator_manager, GGsize const volume_width, GGsize const volume_height, GGsize const volume_depth);
281 
291 extern "C" GGEMS_EXPORT void set_element_sizes_volume_creator_manager(GGEMSVolumeCreatorManager* volume_creator_manager, GGfloat const voxel_width, GGfloat const voxel_height, GGfloat const voxel_depth, char const* unit);
292 
299 extern "C" GGEMS_EXPORT void set_output_image_filename_volume_creator_manager(GGEMSVolumeCreatorManager* volume_creator_manager,char const* output_image_filename);
300 
307 extern "C" GGEMS_EXPORT void set_output_range_to_material_filename_volume_creator_manager(GGEMSVolumeCreatorManager* volume_creator_manager,char const* output_range_to_material_filename);
308 
314 extern "C" GGEMS_EXPORT void initialize_volume_creator_manager(GGEMSVolumeCreatorManager* volume_creator_manager);
315 
321 extern "C" GGEMS_EXPORT void write_volume_creator_manager(GGEMSVolumeCreatorManager* volume_creator_manager);
322 
329 extern "C" GGEMS_EXPORT void set_material_volume_creator_manager(GGEMSVolumeCreatorManager* volume_creator_manager, char const* material);
330 
337 extern "C" GGEMS_EXPORT void set_data_type_volume_creator_manager(GGEMSVolumeCreatorManager* volume_creator_manager, char const* data_type);
338 
339 #endif // GUARD_GGEMS_GEOMETRIES_GGEMSVOLUMECREATORMANAGER_HH
GGEMSVolumeCreatorManager::element_sizes_
GGfloat3 element_sizes_
Definition: GGEMSVolumeCreatorManager.hh:238
GGEMSVolumeCreatorManager::AllocateImage
void AllocateImage(void)
allocating buffer storing volume
Definition: GGEMSVolumeCreatorManager.hh:253
GGEMSVolumeCreatorManager::GetElementsSizes
GGfloat3 GetElementsSizes() const
size of voxels in the voxelized volume
Definition: GGEMSVolumeCreatorManager.hh:116
GGEMSVolumeCreatorManager::GGEMSVolumeCreatorManager
GGEMSVolumeCreatorManager(GGEMSVolumeCreatorManager const &&volume_creator_manager)=delete
Avoid copy of the singleton by rvalue reference.
GGEMSVolumeCreatorManager::GetNumberElements
GGsize GetNumberElements(void) const
Return the total number of voxels.
Definition: GGEMSVolumeCreatorManager.hh:147
GGsize3_t
Structure storing 3 GGsize values.
Definition: GGEMSTypes.hh:267
GGEMSVolumeCreatorManager::GetDataType
std::string GetDataType(void) const
get the type of data
Definition: GGEMSVolumeCreatorManager.hh:154
GGEMSVolumeCreatorManager::GetInstance
static GGEMSVolumeCreatorManager & GetInstance(void)
Create at first time the Singleton.
Definition: GGEMSVolumeCreatorManager.hh:67
set_volume_dimension_volume_creator_manager
void set_volume_dimension_volume_creator_manager(GGEMSVolumeCreatorManager *volume_creator_manager, GGsize const volume_width, GGsize const volume_height, GGsize const volume_depth)
Set the dimension of the volume for the voxelized volume.
Definition: GGEMSVolumeCreatorManager.cc:292
set_output_image_filename_volume_creator_manager
void set_output_image_filename_volume_creator_manager(GGEMSVolumeCreatorManager *volume_creator_manager, char const *output_image_filename)
Set the filename of MHD output.
Definition: GGEMSVolumeCreatorManager.cc:310
get_instance_volume_creator_manager
GGEMSVolumeCreatorManager * get_instance_volume_creator_manager(void)
Get the GGEMSVolumeCreatorManager pointer for python user.
Definition: GGEMSVolumeCreatorManager.cc:283
LabelToMaterialMap
std::map< GGfloat, std::string > LabelToMaterialMap
Definition: GGEMSVolumeCreatorManager.hh:42
GGEMSVolumeCreatorManager::GetVoxelizedVolume
cl::Buffer * GetVoxelizedVolume(void) const
Return the voxelized volume on OpenCL device.
Definition: GGEMSVolumeCreatorManager.hh:161
GGEMSVolumeCreatorManager::number_elements_
GGsize number_elements_
Definition: GGEMSVolumeCreatorManager.hh:240
GGEMSVolumeCreatorManager::volume_dimensions_
GGsize3 volume_dimensions_
Definition: GGEMSVolumeCreatorManager.hh:239
GGsize
#define GGsize
Definition: GGEMSTypes.hh:252
initialize_volume_creator_manager
void initialize_volume_creator_manager(GGEMSVolumeCreatorManager *volume_creator_manager)
Initialize the volume creator manager.
Definition: GGEMSVolumeCreatorManager.cc:328
GGEMSOpenCLManager::CleanBuffer
void CleanBuffer(cl::Buffer *buffer, GGsize const &size, GGsize const &thread_index)
Cleaning buffer on OpenCL device.
Definition: GGEMSOpenCLManager.cc:998
GGEMSVolumeCreatorManager::voxelized_volume_
cl::Buffer * voxelized_volume_
Definition: GGEMSVolumeCreatorManager.hh:244
set_material_volume_creator_manager
void set_material_volume_creator_manager(GGEMSVolumeCreatorManager *volume_creator_manager, char const *material)
set the material of the global (background volume)
Definition: GGEMSVolumeCreatorManager.cc:346
GGEMSOpenCLManager::Allocate
cl::Buffer * Allocate(void *host_ptr, GGsize const &size, GGsize const &thread_index, cl_mem_flags flags, std::string const &class_name="Undefined")
Allocation of OpenCL memory.
Definition: GGEMSOpenCLManager.cc:945
GGEMSVolumeCreatorManager
Singleton class handling convertion from analytical volume to voxelized volume.
Definition: GGEMSVolumeCreatorManager.hh:49
GGfloat3
#define GGfloat3
Definition: GGEMSTypes.hh:275
GGEMSVolumeCreatorManager::operator=
GGEMSVolumeCreatorManager & operator=(GGEMSVolumeCreatorManager const &&volume_creator_manager)=delete
Avoid copy of the singleton by rvalue reference.
set_data_type_volume_creator_manager
void set_data_type_volume_creator_manager(GGEMSVolumeCreatorManager *volume_creator_manager, char const *data_type)
set the type of data
Definition: GGEMSVolumeCreatorManager.cc:355
GGEMSVolumeCreatorManager::output_range_to_material_filename_
std::string output_range_to_material_filename_
Definition: GGEMSVolumeCreatorManager.hh:243
GGEMSVolumeCreatorManager::GetVolumeDimensions
GGsize3 GetVolumeDimensions() const
dimensions of volume
Definition: GGEMSVolumeCreatorManager.hh:133
GGEMSVolumeCreatorManager::label_to_material_
LabelToMaterialMap label_to_material_
Definition: GGEMSVolumeCreatorManager.hh:245
GGEMSVolumeCreatorManager::output_image_filename_
std::string output_image_filename_
Definition: GGEMSVolumeCreatorManager.hh:242
GGEMSOpenCLManager.hh
Singleton class storing all informations about OpenCL and managing GPU/CPU devices,...
GGEMSOpenCLManager
Singleton class storing all informations about OpenCL and managing GPU/CPU devices,...
Definition: GGEMSOpenCLManager.hh:54
GGEMSVolumeCreatorManager::data_type_
std::string data_type_
Definition: GGEMSVolumeCreatorManager.hh:241
write_volume_creator_manager
void write_volume_creator_manager(GGEMSVolumeCreatorManager *volume_creator_manager)
Save the voxelized volume to raw data in mhd file.
Definition: GGEMSVolumeCreatorManager.cc:337
GGEMSVolumeCreatorManager::operator=
GGEMSVolumeCreatorManager & operator=(GGEMSVolumeCreatorManager const &volume_creator_manager)=delete
Avoid assignement of the singleton by reference.
set_element_sizes_volume_creator_manager
void set_element_sizes_volume_creator_manager(GGEMSVolumeCreatorManager *volume_creator_manager, GGfloat const voxel_width, GGfloat const voxel_height, GGfloat const voxel_depth, char const *unit)
Set the size of the elements for the voxelized volume.
Definition: GGEMSVolumeCreatorManager.cc:301
T
__constant GGfloat T
Definition: GGEMSSystemOfUnits.hh:150
GGfloat
#define GGfloat
Definition: GGEMSTypes.hh:273
GGEMSOpenCLManager::GetInstance
static GGEMSOpenCLManager & GetInstance(void)
Create at first time the Singleton.
Definition: GGEMSOpenCLManager.hh:72
GGEMSVolumeCreatorManager::GGEMSVolumeCreatorManager
GGEMSVolumeCreatorManager(GGEMSVolumeCreatorManager const &volume_creator_manager)=delete
Avoid copy of the singleton by reference.
set_output_range_to_material_filename_volume_creator_manager
void set_output_range_to_material_filename_volume_creator_manager(GGEMSVolumeCreatorManager *volume_creator_manager, char const *output_range_to_material_filename)
Set the filename of range to material data.
Definition: GGEMSVolumeCreatorManager.cc:319