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