Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
DicomPhantomZSliceMerged Class Reference

#include <Doxymodules_medical.h>

Public Member Functions

 DicomPhantomZSliceMerged ()
 
 ~DicomPhantomZSliceMerged ()
 
void AddZSlice (DicomPhantomZSliceHeader *val)
 
void CheckSlices ()
 
void DumpExcessMemory ()
 

Private Attributes

std::map< G4double, DicomPhantomZSliceHeader * > fSlices
 

Detailed Description

Definition at line 28 of file Doxymodules_medical.h.

Constructor & Destructor Documentation

◆ DicomPhantomZSliceMerged()

DicomPhantomZSliceMerged::DicomPhantomZSliceMerged ( )

Definition at line 46 of file DicomPhantomZSliceMerged.cc.

47{
48
49}

◆ ~DicomPhantomZSliceMerged()

DicomPhantomZSliceMerged::~DicomPhantomZSliceMerged ( )

Definition at line 53 of file DicomPhantomZSliceMerged.cc.

54{
55 fSlices.clear();
56}
std::map< G4double, DicomPhantomZSliceHeader * > fSlices

Member Function Documentation

◆ AddZSlice()

void DicomPhantomZSliceMerged::AddZSlice ( DicomPhantomZSliceHeader val)
inline

Definition at line 55 of file DicomPhantomZSliceMerged.hh.

55 {
56 fSlices[val->GetSliceLocation()] = val;
57 }
const G4double & GetSliceLocation() const

◆ CheckSlices()

void DicomPhantomZSliceMerged::CheckSlices ( )

Definition at line 60 of file DicomPhantomZSliceMerged.cc.

61{
62 G4cout << "\nDicomPhantomZSliceMerged::Checking "
63 << fSlices.size() << " fSlices..." << G4endl;
64
65 G4bool uniformSliceThickness = true;
66
67 if(fSlices.size() > 1) {
68 if(fSlices.size() == 2) {
69 DicomPhantomZSliceHeader* one = fSlices.begin()->second;
70 DicomPhantomZSliceHeader* two = fSlices.end()->second;
71
72 G4double real_distance = (two->GetSliceLocation()-one->GetSliceLocation())/2.;
73
74 if(one->GetMaxZ() != two->GetMinZ()) {
75 one->SetMaxZ(one->GetSliceLocation()+real_distance);
76 two->SetMinZ(two->GetSliceLocation()-real_distance);
77 //one->SetMinZ(one->GetSliceLocation()-real_distance);
78 //two->SetMaxZ(two->GetSliceLocation()+real_distance);
79 if(uniformSliceThickness) {
80 one->SetMinZ(one->GetSliceLocation()-real_distance);
81 two->SetMaxZ(two->GetSliceLocation()+real_distance);
82 }
83 }
84 } else {
85 auto ite0 = fSlices.begin();
86 auto ite1 = fSlices.begin();
87 auto ite2 = fSlices.begin();
88 ++ite1;
89 ++ite2; ++ite2;
90
91 for(; ite2 != fSlices.end(); ++ite0, ++ite1, ++ite2)
92 {
93 DicomPhantomZSliceHeader* prev = ite0->second;
94 DicomPhantomZSliceHeader* slice = ite1->second;
95 DicomPhantomZSliceHeader* next = ite2->second;
96 G4double real_max_distance = (next->GetSliceLocation() -
97 slice->GetSliceLocation())/2.;
98 G4double real_min_distance = (slice->GetSliceLocation() -
99 prev->GetSliceLocation())/2.;
100 G4double real_distance = real_max_distance + real_min_distance;
101 G4double stated_distance = slice->GetMaxZ()-slice->GetMinZ();
102 if(real_distance != stated_distance) {
103 uintmax_t sliceNum = std::distance(fSlices.begin(),ite1);
104 G4cout << "\tDicomPhantomZSliceMerged::CheckSlices - \
105 Slice Distance Error in slice [" << sliceNum
106 << "]: Real Distance = "
107 << real_distance/mm
108 << " mm, Stated Distance = " << stated_distance/mm << G4endl;
109 slice->SetMinZ(slice->GetSliceLocation()-real_min_distance);
110 slice->SetMaxZ(slice->GetSliceLocation()+real_max_distance);
111
112 if(ite0 == fSlices.begin()) {
113 prev->SetMaxZ(slice->GetMinZ());
114 // Using below would make all slice same thickness
115 //prev->SetMinZ(prev->GetSliceLocation()-real_min_distance);
116 if(uniformSliceThickness) {
117 prev->SetMinZ(prev->GetSliceLocation()-real_min_distance); }
118
119 }
120 if(static_cast<unsigned int>(std::distance(fSlices.begin(),ite2)+1)==
121 fSlices.size()) {
122 next->SetMinZ(slice->GetMaxZ());
123 // Using below would make all slice same thickness
124 //next->SetMaxZ(next->GetSliceLocation()+real_max_distance);
125 if(uniformSliceThickness) {
126 next->SetMaxZ(next->GetSliceLocation()+real_max_distance); }
127 }
128 }
129 }
130 }
131 }
132 G4cout << G4endl;
133
134 for(auto ite = fSlices.cbegin(); ite != fSlices.cend(); ++ite) {
135 ite->second->DumpToFile();
136 }
137
138}
DicomPhantomZSliceHeader class.
void SetMinZ(const G4double &val)
void SetMaxZ(const G4double &val)

◆ DumpExcessMemory()

void DicomPhantomZSliceMerged::DumpExcessMemory ( )
inline

Definition at line 73 of file DicomPhantomZSliceMerged.hh.

74{
75 for(std::map<G4double,DicomPhantomZSliceHeader*>::iterator ite = fSlices.begin();
76 ite != fSlices.end(); ++ite) {
77 ite->second->DumpExcessMemory();
78 }
79}

Member Data Documentation

◆ fSlices

std::map<G4double,DicomPhantomZSliceHeader*> DicomPhantomZSliceMerged::fSlices
private

Definition at line 68 of file DicomPhantomZSliceMerged.hh.


The documentation for this class was generated from the following files:

Applications | User Support | Publications | Collaboration