ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4MIRDRightScapula.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4MIRDRightScapula.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 //
27 // Previous authors: G. Guerrieri, S. Guatelli and M. G. Pia, INFN Genova, Italy
28 // Authors (since 2007): S. Guatelli, University of Wollongong, Australia
29 //
30 //
31 //
32 #include "G4MIRDRightScapula.hh"
33 
34 #include "globals.hh"
35 #include "G4SystemOfUnits.hh"
36 #include "G4SDManager.hh"
37 #include "G4Cons.hh"
38 #include "G4VisAttributes.hh"
40 #include "G4EllipticalTube.hh"
41 #include "G4ThreeVector.hh"
42 #include "G4VPhysicalVolume.hh"
43 #include "G4RotationMatrix.hh"
44 #include "G4LogicalVolume.hh"
45 #include "G4PVPlacement.hh"
46 #include "G4SubtractionSolid.hh"
47 #include "G4HumanPhantomColour.hh"
48 #include "G4Box.hh"
49 
51 {
52 }
53 
55 {
56 }
57 
58 
60  const G4String& colourName, G4bool wireFrame,G4bool)
61 {
62 
63  G4cout<<"Construct "<<volumeName<<" with mother volume "<<mother->GetName()<<G4endl;
64 
65 
67  G4Material* skeleton = material -> GetMaterial("skeleton");
68 
69  G4double ax_in = 17.* cm;
70  G4double by_in = 9.8* cm;
71  G4double ax_out = 19.*cm;
72  G4double by_out = 9.8*cm;
73  G4double dz= 16.4* cm;
74 
75 
76  G4EllipticalTube* inner_scapula = new G4EllipticalTube("ScapulaIn", ax_in, by_in, (dz+ 1.*cm)/2);
77  G4EllipticalTube* outer_scapula = new G4EllipticalTube("ScapulaOut", ax_out, by_out, dz/2);
78 
79 
80 
81 
82  G4Box* subtraction = new G4Box("subtraction",ax_out, ax_out, ax_out);
83 
84  G4double xx = -ax_out * 0.242 ; //(sin 14deg)
85  G4double yy = - ax_out * 0.97; // (cos 14 deg)
86 
88  rm -> rotateZ(14.* degree);
89 
90 
91 
92  G4SubtractionSolid* scapula_first = new G4SubtractionSolid("Scapula_first",
93  outer_scapula,
94  subtraction,
95  rm,
96  G4ThreeVector(xx, yy, 0. *cm));
97 
98  G4double xx2 = ax_out * 0.62470 ; //(cos 51.34deg)
99  G4double yy2 = ax_out * 0.78087; // (sin 51.34 deg)
100 
101  G4RotationMatrix* rm2 = new G4RotationMatrix();
102  rm2 -> rotateZ(38.6598* degree);
103 
104 
105  G4SubtractionSolid* scapula_bone = new G4SubtractionSolid("Scapula",
106  scapula_first,
107  subtraction,
108  rm2,
109  G4ThreeVector(xx2, yy2, 0. *cm));
110 
111  G4SubtractionSolid* scapula = new G4SubtractionSolid("Scapula",
112  scapula_bone,
113  inner_scapula);
114 
115  G4LogicalVolume* logicRightScapula = new G4LogicalVolume(scapula,
116  skeleton,
117  "logical" + volumeName,
118  0, 0, 0);
119 
120  G4VPhysicalVolume* physRightScapula = new G4PVPlacement(0,
121  G4ThreeVector(0. * cm, 0. * cm, 24.1 *cm),
122  "physicalRightScapula",
123  logicRightScapula,
124  mother,
125  false,
126  0, true);
127 
128 
129  // Visualization Attributes
130  //G4VisAttributes* RightScapulaVisAtt = new G4VisAttributes(G4Colour(0.94,0.5,0.5));
131  G4HumanPhantomColour* colourPointer = new G4HumanPhantomColour();
132  G4Colour colour = colourPointer -> GetColour(colourName);
133  G4VisAttributes* RightScapulaVisAtt = new G4VisAttributes(colour);
134  RightScapulaVisAtt->SetForceSolid(wireFrame);
135  logicRightScapula->SetVisAttributes(RightScapulaVisAtt);
136  G4cout << "RightScapula created !!!!!!" << G4endl;
137 
138  // Testing RightScapula Volume
139  G4double RightScapulaVol = logicRightScapula->GetSolid()->GetCubicVolume();
140  G4cout << "Volume of RightScapula = " << RightScapulaVol/cm3 << " cm^3" << G4endl;
141 
142  // Testing RightScapula Material
143  G4String RightScapulaMat = logicRightScapula->GetMaterial()->GetName();
144  G4cout << "Material of RightScapula = " << RightScapulaMat << G4endl;
145 
146  // Testing Density
147  G4double RightScapulaDensity = logicRightScapula->GetMaterial()->GetDensity();
148  G4cout << "Density of Material = " << RightScapulaDensity*cm3/g << " g/cm^3" << G4endl;
149 
150  // Testing Mass
151  G4double RightScapulaMass = (RightScapulaVol)*RightScapulaDensity;
152  G4cout << "Mass of RightScapula = " << RightScapulaMass/gram << " g" << G4endl;
153 
154 
155  return physRightScapula;
156 }