ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DetectorConstruction.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file DetectorConstruction.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 // This example is provided by the Geant4-DNA collaboration
27 // Any report or published results obtained using the Geant4-DNA software
28 // shall cite the following Geant4-DNA collaboration publication:
29 // Med. Phys. 37 (2010) 4692-4708
30 // J. Comput. Phys. 274 (2014) 841-882
31 // The Geant4-DNA web site is available at http://geant4-dna.org
32 //
33 //
36 
37 #include "DetectorConstruction.hh"
38 #include "G4SystemOfUnits.hh"
39 #include "G4ProductionCuts.hh"
40 
41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
42 
45  fpPhysiWorld(NULL), fpLogicWorld(NULL), fpSolidWorld(NULL)
46 {}
47 
48 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
49 
51 {}
52 
53 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
54 
56 
57 {
59  return ConstructDetector();
60 }
61 
62 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
63 
65 {
66 // Water is defined from NIST material database
68  G4Material * H2O = man->FindOrBuildMaterial("G4_WATER");
69 
70 // Default materials in setup.
71  fpWaterMaterial = H2O;
72 
73 // needed variables
74 
75  G4double z, a, density;
76  G4String name, symbol;
77  G4int nComponents, nAtoms;
78 
79 
80  a = 12.0107*g/mole;
81  G4Element* elC = new G4Element(name="Carbon", symbol="C", z=6., a);
82 
83  a = 1.00794*g/mole;
84  G4Element* elH = new G4Element(name="Hydrogen",symbol="H" , z=1., a);
85 
86  a = 15.9994*g/mole;
87  G4Element* elO = new G4Element(name="Oxygen" ,symbol="O" , z= 8., a);
88 
89 // Definition of Tetrahydrofurane (THF)
90 
91  density=1.346*g/cm3;
92 
93  fpTHFMaterial = new G4Material("THF", density, nComponents=3);
94  fpTHFMaterial->AddElement(elC, nAtoms=4);
95  fpTHFMaterial->AddElement(elH, nAtoms=8);
96  fpTHFMaterial->AddElement(elO, nAtoms=1);
97 }
98 
99 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
101 {
102 // WORLD VOLUME
103 
104  fWorldSizeX = 10*nanometer;
105  fWorldSizeY = 10*nanometer;
106  fWorldSizeZ = 10*nanometer;
107 
108  fpSolidWorld = new G4Box("World", //its name
109  fWorldSizeX/2,fWorldSizeY/2,fWorldSizeZ/2); //its size
110 
111  fpLogicWorld = new G4LogicalVolume(fpSolidWorld, //its solid
112  fpWaterMaterial, //its material
113  "World"); //its name
114 
115  fpPhysiWorld = new G4PVPlacement(0, //no rotation
116  G4ThreeVector(), //at (0,0,0)
117  "World", //its name
118  fpLogicWorld, //its logical volume
119  0, //its mother volume
120  false, //no boolean operation
121  0); //copy number
122 
123  G4double diameter=2.3*nanometer;
124  G4double highz=3.4*nanometer;
125 
126  fpSolidTarget = new G4Tubs("Target",0, diameter/2., highz/2., 0*degree, 360*degree);
127 
128  G4LogicalVolume* logicTarget = new G4LogicalVolume(fpSolidTarget, //its solid
129  fpTHFMaterial, //its material
130  "Target"); //its name
131 
132  new G4PVPlacement(0, //no rotation
133  G4ThreeVector(), //at (0,0,0)
134  "Target", //its name
135  logicTarget, //its logical volume
136  fpPhysiWorld, //its mother volume
137  false, //no boolean operation
138  0); //copy number
139 
140 // Visualization attributes
141  G4VisAttributes* worldVisAtt= new G4VisAttributes(G4Colour(1.0,1.0,1.0));
142  worldVisAtt->SetVisibility(true);
143  fpLogicWorld->SetVisAttributes(worldVisAtt);
144 
145  G4VisAttributes* worldVisAtt1 = new G4VisAttributes(G4Colour(1.0,0.0,0.0));
146  worldVisAtt1->SetVisibility(true);
147  logicTarget->SetVisAttributes(worldVisAtt1);
148 
149  return fpPhysiWorld;
150 }