Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
DicomBeamControlPoint.cc
이 파일의 문서화 페이지로 가기
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 #include "DicomBeamControlPoint.hh"
27 #include "DicomBeamDevicePos.hh"
28 
29 #include "dcmtk/dcmrt/seq/drtcps.h" // for ControlPointSequence
30 #include "globals.hh"
31 
32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
33 DicomBeamControlPoint::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;
50  SetNominalBeamEnergy(ffloat);
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
105  SetPatientSupportAngle(ffloat);
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
117  SetTableTopEccentricAngle(-ffloat);
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......
217 void DicomBeamControlPoint::Print( std::ostream& )
218 {
219 
220 }
221 
222 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
223 void 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 SetPatientSupportRotationDirection(OFString dat)
void SetTableTopVerticalPosition(Float64 dat)
void AddDevice(DicomBeamDevicePos *dbd)
void SetPatientSupportAngle(Float64 dat)
CLHEP::Hep3Vector G4ThreeVector
void SetTableTopPitchRotationDirection(OFString dat)
void SetTableTopLateralPosition(Float64 dat)
OFString GetBeamLimitingDeviceRotationDirection() const
void SetTableTopEccentricRotationDirection(OFString dat)
void SetTableTopEccentricAngle(Float64 dat)
#define G4endl
Definition: G4ios.hh:61
void SetCumulativeMetersetWeight(Float64 dat)
OFString GetTableTopEccentricRotationDirection() const
void SetTableTopRollAngle(Float32 dat)
double z() const
void Print(std::ostream &out)
Float32 GetTableTopRollAngle() const
void SetBeamLimitingDeviceAngle(Float64 dat)
Float64 GetTableTopEccentricAxisDistance() const
void SetGantryPitchAngle(Float32 dat)
void DumpToFile(std::ofstream &out)
Float64 GetSurfaceEntryPoint() const
void SetTableTopLongitudinalPosition(Float64 dat)
void SetBeamLimitingDeviceRotationDirection(OFString dat)
void SetIsocenterPosition(G4ThreeVector dat)
Float64 GetTableTopVerticalPosition() const
Float64 GetTableTopEccentricAngle() const
void SetTableTopPitchAngle(Float32 dat)
Float64 GetPatientSupportAngle() const
DicomBeamControlPoint(DRTControlPointSequence::Item cpItem, DicomBeamControlPoint *point0)
Float32 GetGantryPitchAngle() const
Float64 GetTableTopLateralPosition() const
OFString GetPatientSupportRotationDirection() const
Float64 GetSourceToSurfaceDistance() const
OFString GetTableTopRollRotationDirection() const
G4GLOB_DLL std::ostream G4cout
double x() const
void SetNominalBeamEnergy(Float64 dat)
Float64 GetBeamLimitingDeviceAngle() const
void SetGantryAngle(Float64 dat)
OFString GetTableTopPitchRotationDirection() const
void SetTableTopRollRotationDirection(OFString dat)
G4ThreeVector GetIsocenterPosition() const
void SetSurfaceEntryPoint(Float64 dat)
double y() const
void SetTableTopEccentricAxisDistance(Float64 dat)
void SetSourceToSurfaceDistance(Float64 dat)
Float32 GetTableTopPitchAngle() const
Float64 GetTableTopLongitudinalPosition() const
std::vector< DicomBeamDevicePos * > theDevices
Float64 GetNominalBeamEnergy() const