Loading...
Searching...
No Matches
DicomBeamControlPoint.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//
27#include "DicomBeamDevicePos.hh"
28
29#include "dcmtk/dcmrt/seq/drtcps.h" // for ControlPointSequence
30#include "globals.hh"
31
32//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
33DicomBeamControlPoint::DicomBeamControlPoint(DRTControlPointSequence::Item cpItem,
34 DicomBeamControlPoint* point0 )
35{
36 OFString fstr;
37 Sint32 fint;
38 Float64 ffloat;
39 Float32 ffloat32;
40 OFVector<Float64> fvfloat;
41
42 cpItem.getControlPointIndex(fint);
43 G4cout << " @ DicomBeamControlPoint: " << fint << G4endl;
44 G4cout << " " << " ControlPointIndex " << fint << G4endl;
45 SetIndex( fint );
46 if( cpItem.getNominalBeamEnergy(ffloat) != EC_Normal ) {
47 if( point0 ) ffloat = point0->GetNominalBeamEnergy();
48 }
49 G4cout << " " << " NominalBeamEnergy " << ffloat << G4endl;
51 cpItem.getDoseRateSet(ffloat); // != EC_Normal ) {
52 G4cout << " " << " DoseRateSet " << ffloat << G4endl;
53
54 DRTBeamLimitingDevicePositionSequence beamLDPS = cpItem.getBeamLimitingDevicePositionSequence();
55 G4cout << " @ NUMBER OF BeamLimitingDevicePositionSequence " << beamLDPS.getNumberOfItems()
56 << G4endl;
57 beamLDPS.gotoFirstItem();
58 for( size_t i3 = 0; i3 < beamLDPS.getNumberOfItems(); i3++ ) {
59 DRTBeamLimitingDevicePositionSequence::Item bldpsItem = beamLDPS.getCurrentItem();
60 DicomBeamDevicePos* dbd = new DicomBeamDevicePos(bldpsItem);
61 AddDevice(dbd);
62
63 beamLDPS.gotoNextItem();
64 }
65
66 cpItem.getGantryAngle(ffloat);
67 G4cout << " " << " GantryAngle " << ffloat << G4endl;
68
69 cpItem.getGantryRotationDirection(fstr); //**
70 G4cout << " " << " GantryRotationDirection " << fstr << G4endl;
71 if( fstr == "CC" ) { // counter-clockwise
72 SetGantryAngle(-ffloat);
73 } else if( fstr == "CW" || fstr == "NONE" || fstr == "") { // clockwise
74 SetGantryAngle(ffloat);
75 }
76 if( cpItem.getBeamLimitingDeviceAngle(ffloat) != EC_Normal ) {
77 if( point0 ) ffloat = point0->GetBeamLimitingDeviceAngle();
78 }
79 G4cout << " " << " BeamLimitingDeviceAngle " << ffloat << G4endl;
80
81 if( cpItem.getBeamLimitingDeviceRotationDirection(fstr) != EC_Normal ) {
82 if( point0 ) fstr = point0->GetBeamLimitingDeviceRotationDirection();
83 }
84 if( fstr == "CC" ) { // counter-clockwise
86 } else if( fstr == "CW" || fstr == "NONE" || fstr == "") { // clockwise
88 }
89 G4cout << " " << " BeamLimitingDeviceRotationDirection " << fstr << G4endl;
91
92 if( cpItem.getPatientSupportAngle(ffloat) != EC_Normal ) {
93 if( point0 ) fstr = point0->GetPatientSupportAngle();
94 }
95 G4cout << " " << " PatientSupportAngle " << ffloat << G4endl;
96
97 if( cpItem.getPatientSupportRotationDirection(fstr) != EC_Normal ) {
98 if( point0 ) fstr = point0->GetPatientSupportRotationDirection();
99 }
100 G4cout << " " << " PatientSupportRotationDirection " << fstr << G4endl;
102 if( fstr == "CC" ) { // counter-clockwise
103 SetPatientSupportAngle(-ffloat);
104 } else if( fstr == "CW" || fstr == "NONE" || fstr == "") { // clockwise
106 }
107
108 if( cpItem.getTableTopEccentricAngle(ffloat) != EC_Normal ) {
109 if( point0 ) ffloat = point0->GetTableTopEccentricAngle();
110 }
111 G4cout << " " << " TableTopEccentricAngle " << ffloat << G4endl;
112
113 if( cpItem.getTableTopEccentricRotationDirection(fstr) != EC_Normal ) {
114 if( point0 ) fstr = point0->GetTableTopEccentricRotationDirection();
115 }
116 if( fstr == "CC" ) { // counter-clockwise
118 } else if( fstr == "CW" || fstr == "NONE" || fstr == "") { // clockwise
120 }
121 G4cout << " " << " TableTopEccentricRotationDirection " << fstr << G4endl;
123
124 G4ThreeVector isoCenter;
125 if( cpItem.getIsocenterPosition(fvfloat) != EC_Normal ) {
126 if( point0 ) isoCenter = point0->GetIsocenterPosition();
127 } else {
128 isoCenter = G4ThreeVector(fvfloat[0],fvfloat[1],fvfloat[2]);
129 }
130 G4cout << " " << " IsocenterPosition " << isoCenter << G4endl;
131 SetIsocenterPosition(isoCenter);
132
133 if( cpItem.getSourceToSurfaceDistance(ffloat) != EC_Normal ) {
134 if( point0 ) ffloat = point0->GetSourceToSurfaceDistance();
135 }
136 G4cout << " " << " SourceToSurfaceDistance " << ffloat << G4endl;
138
139 cpItem.getCumulativeMetersetWeight(ffloat);
140 G4cout << " " << " CumulativeMetersetWeight " << ffloat << G4endl;
142
143 if( cpItem.getGantryPitchAngle(ffloat32) != EC_Normal ) {
144 if( point0 ) ffloat32 = point0->GetGantryPitchAngle();
145 }
146 G4cout << " " << " GantryPitchAngle " << ffloat32 << G4endl;
147 SetGantryPitchAngle(ffloat32);
148
149 if( cpItem.getSurfaceEntryPoint(ffloat) != EC_Normal ) {
150 if( point0 ) ffloat = point0->GetSurfaceEntryPoint();
151 }
152 G4cout << " " << " SurfaceEntryPoint " << ffloat << G4endl;
153 SetSurfaceEntryPoint(ffloat);
154
155 if( cpItem.getTableTopEccentricAxisDistance(ffloat) != EC_Normal ) {
156 if( point0 ) ffloat = point0->GetTableTopEccentricAxisDistance();
157 }
158 G4cout << " " << " TableTopEccentricAxisDistance " << ffloat << G4endl;
160
161 if( cpItem.getTableTopLateralPosition(ffloat) != EC_Normal ) {
162 if( point0 ) ffloat = point0->GetTableTopLateralPosition();
163 }
164 G4cout << " " << " TableTopLateralPosition " << ffloat << G4endl;
166
167 if( cpItem.getTableTopLongitudinalPosition(ffloat) != EC_Normal ) {
168 if( point0 ) ffloat = point0->GetTableTopLongitudinalPosition();
169 }
170 G4cout << " " << " TableTopLongitudinalPosition " << ffloat << G4endl;
172
173 if( cpItem.getTableTopPitchAngle(ffloat32) != EC_Normal ) {
174 if( point0 ) ffloat32 = point0->GetTableTopPitchAngle();
175 }
176 G4cout << " " << " TableTopPitchAngle " << ffloat32 << G4endl;
177
178 if( cpItem.getTableTopPitchRotationDirection(fstr) != EC_Normal ) {
179 if( point0 ) fstr = point0->GetTableTopPitchRotationDirection();
180 }
181 if( fstr == "CC" ) { // counter-clockwise
182 SetTableTopPitchAngle(-ffloat32);
183 } else if( fstr == "CW" || fstr == "NONE" || fstr == "") { // clockwise
184 SetTableTopPitchAngle(ffloat32);
185 }
186 G4cout << " " << " TableTopPitchRotationDirection " << fstr << G4endl;
188
189 if( cpItem.getTableTopRollAngle(ffloat32) != EC_Normal ) {
190 if( point0 ) ffloat32 = point0->GetTableTopRollAngle();
191 }
192 G4cout << " " << " TableTopRollAngle " << ffloat32 << G4endl;
193
194 if( cpItem.getTableTopRollRotationDirection(fstr) != EC_Normal ) {
195 if( point0 ) fstr = point0->GetTableTopRollRotationDirection();
196 }
197 if( fstr == "CC" ) { // counter-clockwise
198 SetTableTopRollAngle(-ffloat32);
199 } else if( fstr == "CW" || fstr == "NONE" || fstr == "") { // clockwise
200 SetTableTopRollAngle(ffloat32);
201 }
202 G4cout << " " << " TableTopRollRotationDirection " << fstr << G4endl;
204
205 if( cpItem.getTableTopVerticalPosition(ffloat) != EC_Normal ) {
206 if( point0 ) ffloat = point0->GetTableTopVerticalPosition();
207 }
208 G4cout << " " << " TableTopVerticalPosition " << ffloat << G4endl;
210
211 // --- get DICOM sequence attributes ---
212 //t DRTWedgePositionSequence &getWedgePositionSequence()
213 //t const DRTWedgePositionSequence &getWedgePositionSequence() const
214}
215
216//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
217void DicomBeamControlPoint::Print( std::ostream& )
218{
219
220}
221
222//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
223void DicomBeamControlPoint::DumpToFile( std::ofstream& fout )
224{
225 fout << ":P ControlPointIndex " << theIndex << G4endl;
226 fout << ":P NominalBeamEnergy " << theNominalBeamEnergy << G4endl;
227 fout << ":P IsocenterPositionX " << theIsocenterPosition.x() << G4endl;
228 fout << ":P IsocenterPositionY " << theIsocenterPosition.y() << G4endl;
229 fout << ":P IsocenterPositionZ " << theIsocenterPosition.z() << G4endl;
230
231 // std::string iistr = std::to_string(theControlPointIndex);
232 fout << ":P SourceToSurfaceDistance " << theSourceToSurfaceDistance << G4endl;
233 fout << ":P GantryAngle " << theGantryAngle << G4endl;
234 fout << ":P BeamLimitingDeviceAngle " << theBeamLimitingDeviceAngle << G4endl;
235 fout << ":P PatientSupportAngle " << thePatientSupportAngle << G4endl;
236 fout << ":P TableTopEccentricAngle " << theTableTopEccentricAngle << G4endl;
237 fout << ":P SourceToSurfaceDistance " << theSourceToSurfaceDistance<< G4endl;
238 fout << ":P MetersetWeight " << theMetersetWeight<< G4endl;
239 fout << ":P GantryPitchAngle " << theGantryPitchAngle << G4endl;
240 fout << ":P SurfaceEntryPoint " << theSurfaceEntryPoint << G4endl;
241 fout << ":P TableTopEccentricAxisDistance " << theTableTopEccentricAxisDistance << G4endl;
242 fout << ":P TableTopLateralPosition " << theTableTopLateralPosition << G4endl;
243 fout << ":P TableTopLongitudinalPosition " << theTableTopLongitudinalPosition<< G4endl;
244 fout << ":P TableTopPitchAngle " << theTableTopPitchAngle << G4endl;
245 fout << ":P TableTopRollAngle " << theTableTopRollAngle << G4endl;
246 fout << ":P TableTopVerticalPosition " << theTableTopVerticalPosition << G4endl;
247
248 for( size_t ii = 0; ii < theDevices.size(); ii++ ){
249 theDevices[ii]->DumpToFile(fout);
250 }
251
252}
void SetTableTopRollAngle(Float32 dat)
void SetBeamLimitingDeviceRotationDirection(OFString dat)
void SetSurfaceEntryPoint(Float64 dat)
void SetSourceToSurfaceDistance(Float64 dat)
void SetTableTopEccentricAngle(Float64 dat)
Float64 GetNominalBeamEnergy() const
void SetTableTopVerticalPosition(Float64 dat)
OFString GetPatientSupportRotationDirection() const
void SetIsocenterPosition(G4ThreeVector dat)
Float64 GetTableTopEccentricAngle() const
void SetTableTopEccentricAxisDistance(Float64 dat)
void SetTableTopPitchRotationDirection(OFString dat)
Float64 GetTableTopEccentricAxisDistance() const
OFString GetTableTopPitchRotationDirection() const
OFString GetTableTopEccentricRotationDirection() const
void SetCumulativeMetersetWeight(Float64 dat)
void SetPatientSupportAngle(Float64 dat)
Float64 GetPatientSupportAngle() const
G4ThreeVector GetIsocenterPosition() const
DicomBeamControlPoint(DRTControlPointSequence::Item cpItem, DicomBeamControlPoint *point0)
void SetTableTopPitchAngle(Float32 dat)
void SetTableTopLongitudinalPosition(Float64 dat)
void SetGantryPitchAngle(Float32 dat)
std::vector< DicomBeamDevicePos * > theDevices
void SetPatientSupportRotationDirection(OFString dat)
void AddDevice(DicomBeamDevicePos *dbd)
Float64 GetBeamLimitingDeviceAngle() const
OFString GetBeamLimitingDeviceRotationDirection() const
Float32 GetTableTopPitchAngle() const
void SetTableTopRollRotationDirection(OFString dat)
Float64 GetTableTopLateralPosition() const
Float64 GetSourceToSurfaceDistance() const
void SetNominalBeamEnergy(Float64 dat)
void SetGantryAngle(Float64 dat)
void SetTableTopEccentricRotationDirection(OFString dat)
void SetTableTopLateralPosition(Float64 dat)
void DumpToFile(std::ofstream &out)
void SetBeamLimitingDeviceAngle(Float64 dat)
Float64 GetTableTopVerticalPosition() const
void Print(std::ostream &out)
Float64 GetTableTopLongitudinalPosition() const
OFString GetTableTopRollRotationDirection() const

Applications | User Support | Publications | Collaboration