Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/HGCal_testbeam/src/DetectorConstruction0.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 "DetectorConstruction0.hh"
 27 #include "CLHEP/Units/SystemOfUnits.h"
 28 
 29 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 30 
 31 void add_EE(G4int aEEid, std::vector<std::pair<G4String, G4double>> &aDzMap,
 32             G4double aAirBefore, G4double aAirMid) {
 33   aDzMap.push_back(std::make_pair("Fe_absorber_EE",
 34                                   aAirBefore)); // aAirBefore AIR + 0.3 mm Fe
 35   aDzMap.push_back(std::make_pair("Pb_absorber_EE", 0)); // 0 + 4.9mm Pb
 36   aDzMap.push_back(std::make_pair("Fe_absorber_EE", 0)); // 0 + 0.3 mm Fe
 37   aDzMap.push_back(std::make_pair("PCB", aAirMid));      // aAirMid AIR +1.3mm
 38   aDzMap.push_back(std::make_pair("Cu_baseplate_175um", 0.)); // 0 + 0.175mm Cu
 39   aDzMap.push_back(std::make_pair("Si_wafer", 0.));           // 0.3 mm
 40   aDzMap.push_back(std::make_pair("Cu_baseplate_25um", 0.));  //  0 + 0.025mm Cu
 41   aDzMap.push_back(std::make_pair("Kapton_layer", 0.));       // 0.075 mm
 42   if (aEEid == 11 || aEEid == 12)
 43     aDzMap.push_back(std::make_pair("Cu_baseplate", 0.)); // 1.2 mm
 44   aDzMap.push_back(std::make_pair("CuW_baseplate", 0.));  // 1.2 mm
 45   if (aEEid == 13)
 46     aDzMap.push_back(std::make_pair("CuW_baseplate_550um", 0.)); // 0.55 mm
 47   if (aEEid == 14)
 48     aDzMap.push_back(std::make_pair("CuW_baseplate_610um", 0.)); // 0.61 mm
 49   aDzMap.push_back(std::make_pair("Cu_absorber_EE", 0.));        // 6 mm
 50   if (aEEid == 13)
 51     aDzMap.push_back(std::make_pair("CuW_baseplate_610um", 0.)); // 0.61 mm
 52   if (aEEid == 14)
 53     aDzMap.push_back(std::make_pair("CuW_baseplate_710um", 0.)); // 0.71 mm
 54   aDzMap.push_back(std::make_pair("CuW_baseplate", 0.));         // 1.2 mm
 55   if (aEEid == 11 || aEEid == 12)
 56     aDzMap.push_back(std::make_pair("Cu_baseplate", 0.));     // 1.2 mm
 57   aDzMap.push_back(std::make_pair("Kapton_layer", 0.));       // 0.075 mm
 58   aDzMap.push_back(std::make_pair("Cu_baseplate_25um", 0.));  //  0 + 0.025mm Cu
 59   aDzMap.push_back(std::make_pair("Si_wafer", 0.));           // 0.3 mm
 60   aDzMap.push_back(std::make_pair("Cu_baseplate_175um", 0.)); // 0 + 0.175mm Cu
 61   aDzMap.push_back(std::make_pair("PCB", 0));                 // 1.3 mm
 62 }
 63 
 64 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 65 
 66 void add_FH(G4int aFHid, std::vector<std::pair<G4String, G4double>> &aDzMap,
 67             G4double aAirBefore, G4double aAirMid) {
 68   std::string layout = "";
 69   if (aFHid < 10)
 70     layout = "_DAISY";
 71   if (!(aFHid == 1 || aFHid == 7))
 72     aDzMap.push_back(std::make_pair("Fe_absorber_FH",
 73                                     aAirBefore)); // aAirBefore AIR + 40 mm Fe
 74   aDzMap.push_back(
 75       std::make_pair("PCB" + layout, aAirMid)); // aAirMid AIR + 1.3 mm
 76   aDzMap.push_back(
 77       std::make_pair("Cu_baseplate_175um" + layout, 0.));    // 0.175mm Cu
 78   aDzMap.push_back(std::make_pair("Si_wafer" + layout, 0.)); // 0.3 mm
 79   if (aFHid == 5) {
 80     aDzMap.push_back(std::make_pair("PCB_thin" + layout, 0)); // 1.2 mm
 81   }
 82   if (aFHid != 5) {
 83     aDzMap.push_back(
 84         std::make_pair("Cu_baseplate_25um" + layout, 0.));         // 0.025mm Cu
 85     aDzMap.push_back(std::make_pair("Kapton_layer" + layout, 0.)); // 0.075 mm
 86   }
 87   if (aFHid == 6) {
 88     aDzMap.push_back(
 89         std::make_pair("Cu_baseplate_25um" + layout, 0.));         // 0.025mm Cu
 90     aDzMap.push_back(std::make_pair("Kapton_layer" + layout, 0.)); // 0.075 mm
 91   }
 92   if (aFHid != 5 && aFHid < 9)
 93     aDzMap.push_back(std::make_pair("Cu_baseplate" + layout, 0.)); // 1.2 mm
 94   if (aFHid == 9 || aFHid == 10)
 95     aDzMap.push_back(std::make_pair("CuW_baseplate" + layout, 0.)); // 1.2 mm
 96   if (aFHid != 10)
 97     aDzMap.push_back(std::make_pair("Cu_baseplate" + layout, 0.)); // 1.2 mm
 98   aDzMap.push_back(std::make_pair("Cu_absorber_FH", 0.));          // 6 * mm
 99 }
100 
101 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
102 
103 void DetectorConstruction0(
104     std::vector<std::pair<G4String, G4double>> &aDzMap,
105     G4double &aViewpoint) {
106   aViewpoint = 0.75 * CLHEP::m;
107 
108   // map means: position this material starting at z, where:
109   // z += <second>
110   // z = z0+ 0.5 * thickness[<first>]
111 
112   // world (and beam) starts at -45 m
113 
114   G4double firstOffset = 2.6 * CLHEP::cm;
115   // if no beamline is present - shift by beamline length 45.0015 m
116   if (aDzMap.size() == 0) {
117     firstOffset += 45.0015 * CLHEP::m;
118   }
119 
120   aDzMap.push_back(std::make_pair("Al_case_thick", firstOffset)); // 5 mm Al
121   aDzMap.push_back(std::make_pair("Al_case", 0));              // 2.1 mm Al
122 
123   // EE1
124   add_EE(1, aDzMap, 119.7 * CLHEP::mm, 4.7 * CLHEP::mm);
125 
126   // EE2
127   add_EE(2, aDzMap, 7.7 * CLHEP::mm, 3.7 * CLHEP::mm);
128 
129   // EE3
130   add_EE(3, aDzMap, 7.7 * CLHEP::mm, 3.7 * CLHEP::mm);
131 
132   // EE4
133   add_EE(4, aDzMap, 8.7 * CLHEP::mm, 3.7 * CLHEP::mm);
134 
135   // EE5
136   add_EE(5, aDzMap, 8.7 * CLHEP::mm, 3.7 * CLHEP::mm);
137 
138   // EE6
139   add_EE(6, aDzMap, 8.7 * CLHEP::mm, 3.7 * CLHEP::mm);
140 
141   // EE7
142   add_EE(7, aDzMap, 6.7 * CLHEP::mm, 3.7 * CLHEP::mm);
143 
144   // EE8
145   add_EE(8, aDzMap, 6.7 * CLHEP::mm, 3.7 * CLHEP::mm);
146 
147   // EE9
148   add_EE(9, aDzMap, 6.7 * CLHEP::mm, 3.7 * CLHEP::mm);
149 
150   // EE10
151   add_EE(10, aDzMap, 6.7 * CLHEP::mm, 3.7 * CLHEP::mm);
152 
153   // EE11
154   add_EE(11, aDzMap, 6.7 * CLHEP::mm, 5.5 * CLHEP::mm);
155 
156   // EE12
157   add_EE(12, aDzMap, 9.5 * CLHEP::mm, 5.5 * CLHEP::mm);
158 
159   // EE13
160   add_EE(13, aDzMap, 9.5 * CLHEP::mm, 3.145 * CLHEP::mm);
161 
162   // EE14
163   add_EE(14, aDzMap, 10.09 * CLHEP::mm, 3.095 * CLHEP::mm);
164 
165   aDzMap.push_back(std::make_pair("Steel_case_thick", 0)); // 40 mm
166   aDzMap.push_back(std::make_pair("Al_case", 44 * CLHEP::mm));    // 2.1 mm
167 
168   // beginning of FH
169   aDzMap.push_back(std::make_pair("Steel_case", 0)); // 9 mm
170 
171   // FH1
172   add_FH(1, aDzMap, 0, 8.8 * CLHEP::mm);
173 
174   // FH2
175   add_FH(2, aDzMap, 8 * CLHEP::mm, 8.8 * CLHEP::mm);
176 
177   // FH3
178   add_FH(3, aDzMap, 3 * CLHEP::mm, 13.8 * CLHEP::mm);
179 
180   // FH4
181   add_FH(4, aDzMap, 5 * CLHEP::mm, 12.8 * CLHEP::mm);
182 
183   // FH5
184   add_FH(5, aDzMap, 7 * CLHEP::mm, 9.8 * CLHEP::mm);
185 
186   // FH6
187   add_FH(6, aDzMap, 6 * CLHEP::mm, 10.7 * CLHEP::mm);
188 
189   // cases
190   aDzMap.push_back(std::make_pair("Steel_case", 4 * CLHEP::mm));      // 9 mm
191   aDzMap.push_back(std::make_pair("Fe_absorber_FH", 36 * CLHEP::mm)); // 40 mm
192   aDzMap.push_back(std::make_pair("Steel_case", 52 * CLHEP::mm));     // 9 mm
193   // FH7
194   add_FH(7, aDzMap, 0, 8.8 * CLHEP::mm);
195 
196   // FH8
197   add_FH(8, aDzMap, 7 * CLHEP::mm, 16.8 * CLHEP::mm);
198 
199   // FH9
200   add_FH(9, aDzMap, 9 * CLHEP::mm, 14.8 * CLHEP::mm);
201 
202   // FH10
203   add_FH(10, aDzMap, 10 * CLHEP::mm, 18 * CLHEP::mm);
204 
205   // FH11
206   add_FH(11, aDzMap, 8 * CLHEP::mm, 17 * CLHEP::mm);
207 
208   // FH12
209   add_FH(12, aDzMap, 7 * CLHEP::mm, 17 * CLHEP::mm);
210 
211   aDzMap.push_back(std::make_pair("Steel_case", 29 * CLHEP::mm));
212 
213   // AHCAL
214   aDzMap.push_back(std::make_pair("Fe_absorber_AHCAL", 50.0 * CLHEP::cm));
215   for (int l = 0; l < 39; l++) {
216     aDzMap.push_back(std::make_pair("Al_absorber_AHCAL", 0.5 * CLHEP::cm));
217     aDzMap.push_back(std::make_pair("AHCAL_SiPM_2x2HUB", 0.));
218     aDzMap.push_back(std::make_pair("Al_absorber_AHCAL", 0.));
219     aDzMap.push_back(std::make_pair("Fe_absorber_AHCAL", 0.5 * CLHEP::cm));
220   }
221   aDzMap.push_back(std::make_pair("Fe_absorber_AHCAL", 1.1 * CLHEP::cm));
222   aDzMap.push_back(std::make_pair("Fe_absorber_AHCAL", 1.1 * CLHEP::cm));
223   aDzMap.push_back(std::make_pair("Al_absorber_AHCAL", 0.5 * CLHEP::cm));
224   aDzMap.push_back(std::make_pair("AHCAL_SiPM_2x2HUB", 0.));
225   aDzMap.push_back(std::make_pair("Al_absorber_AHCAL", 0.));
226   aDzMap.push_back(std::make_pair("Fe_absorber_AHCAL", 0.5 * CLHEP::cm));
227 }
228