source: trunk/examples/advanced/human_phantom/src/G4MIRDThyroid.cc@ 1313

Last change on this file since 1313 was 807, checked in by garnier, 17 years ago

update

File size: 5.6 KB
Line 
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// Authors: S. Guatelli and M. G. Pia, INFN Genova, Italy
27//
28// Based on code developed by the undergraduate student G. Guerrieri
29// Note: this is a preliminary beta-version of the code; an improved
30// version will be distributed in the next Geant4 public release, compliant
31// with the design in a forthcoming publication, and subject to a
32// design and code review.
33//
34#include "G4MIRDThyroid.hh"
35
36#include "globals.hh"
37#include "G4SDManager.hh"
38#include "G4VisAttributes.hh"
39#include "G4HumanPhantomMaterial.hh"
40#include "G4RotationMatrix.hh"
41#include "G4ThreeVector.hh"
42#include "G4VPhysicalVolume.hh"
43#include "G4PVPlacement.hh"
44#include "G4Tubs.hh"
45#include "G4Box.hh"
46#include "G4VSolid.hh"
47#include "G4SubtractionSolid.hh"
48
49G4MIRDThyroid::G4MIRDThyroid()
50{
51}
52
53G4MIRDThyroid::~G4MIRDThyroid()
54{
55}
56
57G4VPhysicalVolume* G4MIRDThyroid::ConstructThyroid(G4VPhysicalVolume* mother, G4String sex, G4bool sensitivity)
58{
59 G4HumanPhantomMaterial* material = new G4HumanPhantomMaterial();
60 G4Material* soft = material -> GetMaterial("soft_tissue");
61 delete material;
62
63 G4double z= 4.20*cm; //c thickness = c,
64 G4double rmin= 0. * cm;
65 G4double rmax= 1.85 *cm; //Rmax
66 G4double startphi = 0. * degree;
67 G4double deltaphi= 180. * degree; // y< y0
68
69 G4Tubs* LobOfThyroidOut = new G4Tubs("LobOfThyroidOut",
70 rmin, rmax,z/2.,
71 startphi, deltaphi);
72
73 z= 4.50*cm; // c thickness + something
74 rmax= 0.83 * cm; //r
75 deltaphi= 360. * degree;
76 G4Tubs* LobOfThyroidIn = new G4Tubs("LobOfThyroidIn",
77 rmin, rmax,z/2.,
78 startphi, deltaphi);
79
80 G4double xx = 3.72*cm;
81 G4double yy= 3.72*cm;
82 G4double zz= 20.00*cm;
83 G4Box* SubtrThyroid = new G4Box("SubtrThyroid",
84 xx/2., yy/2., zz/2.);
85
86 // subtraction of the two tubs
87 G4SubtractionSolid* FirstThyroid = new G4SubtractionSolid("FirstThyroid",
88 LobOfThyroidOut,
89 LobOfThyroidIn);
90
91 G4RotationMatrix* relative_matrix = new G4RotationMatrix();
92 relative_matrix -> rotateX(-50.* degree);
93
94 G4SubtractionSolid* SecondThyroid = new G4SubtractionSolid("SecondThyroid",
95 FirstThyroid,
96 SubtrThyroid,
97 relative_matrix,
98 G4ThreeVector(0.0 *cm,0.0 *cm, 4.20*cm));
99
100 G4RotationMatrix* relative_matrix_2 = new G4RotationMatrix();
101 relative_matrix_2 -> rotateX(50.* degree);
102
103G4SubtractionSolid* thyroid = new G4SubtractionSolid("SecondThyroid",
104 SecondThyroid,
105 SubtrThyroid,
106 relative_matrix_2,
107 G4ThreeVector(0.0 *cm,0.0 *cm, -5.40*cm));
108
109
110
111 G4LogicalVolume* logicThyroid = new G4LogicalVolume(thyroid, soft,
112 "ThyroidVolume",
113 0, 0, 0);
114
115 G4RotationMatrix* rm = new G4RotationMatrix();
116
117 rm -> rotateZ(180.*degree);
118
119 G4VPhysicalVolume* physThyroid = new G4PVPlacement(rm,
120 G4ThreeVector(0.0*cm,-3.91*cm, -5.925*cm),//y0
121 "physicalThyroid",
122 logicThyroid,
123 mother,
124 false,
125 0);
126
127 // Sensitive Body Part
128 if (sensitivity==true)
129 {
130 G4SDManager* SDman = G4SDManager::GetSDMpointer();
131 logicThyroid->SetSensitiveDetector( SDman->FindSensitiveDetector("BodyPartSD") );
132 }
133
134 // Visualization Attributes
135 G4VisAttributes* ThyroidVisAtt = new G4VisAttributes(G4Colour(0.0,1.0,1.0));
136 ThyroidVisAtt->SetForceSolid(true);
137 logicThyroid->SetVisAttributes(ThyroidVisAtt);
138
139 G4cout << "Thyroid created for "<<sex << " !!!!!!" << G4endl;
140
141 // Testing Thyroid Volume
142 G4double ThyroidVol = logicThyroid->GetSolid()->GetCubicVolume();
143 G4cout << "Volume of Thyroid = " << ThyroidVol/cm3 << " cm^3" << G4endl;
144
145 // Testing Thyroid Material
146 G4String ThyroidMat = logicThyroid->GetMaterial()->GetName();
147 G4cout << "Material of Thyroid = " << ThyroidMat << G4endl;
148
149 // Testing Density
150 G4double ThyroidDensity = logicThyroid->GetMaterial()->GetDensity();
151 G4cout << "Density of Material = " << ThyroidDensity*cm3/g << " g/cm^3" << G4endl;
152
153 // Testing Mass
154 G4double ThyroidMass = (ThyroidVol)*ThyroidDensity;
155 G4cout << "Mass of Thyroid = " << ThyroidMass/gram << " g" << G4endl;
156
157
158 return physThyroid;
159}
Note: See TracBrowser for help on using the repository browser.