ATLAS Offline Software
LArDetectorFactoryTBEC.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // LArDetectorFactory.cxx
6 // 24-Aug-2006 : V. Niess. Put back initialisation for
7 // VDetectorParameters according to J. Toth scheme.
8 
10 
12 
13 #include "GeoModelKernel/GeoPhysVol.h"
14 #include "GeoModelKernel/GeoTransform.h"
15 #include "GeoModelKernel/GeoNameTag.h"
16 #include "GeoModelKernel/GeoShapeUnion.h"
17 
18 #include "CLHEP/Geometry/Transform3D.h"
19 
21 
22 #include "StoreGate/StoreGateSvc.h"
23 #include "GaudiKernel/MsgStream.h"
24 #include "GaudiKernel/Bootstrap.h"
26 
30 #include "GeoModelKernel/CellBinning.h"
31 
32 // V.N : Patch LAr materials
34 #include "LArGeoRAL/RAL.h"
36 
38  : m_detectorManager(nullptr),
39  m_ecVisLimit(-1)
40 {}
41 
42 
44 = default;
45 
46 
47 // Place the cryostats into a container physical volume.
48 void LArGeo::LArDetectorFactoryTBEC::create( GeoPhysVol* a_container )
49 {
50 
51  // V.N : Patch LAr materials ??? is this needed?
52  VDetectorParameters::SetInstance(std::make_unique<LArGeo::RAL>());
53 
54  EMECDetectorManager *emecDetectorManager = new EMECDetectorManager();
55 
56 
57  // Get access to the material manager:
58 
59  ISvcLocator *svcLocator = Gaudi::svcLocator();
60  IMessageSvc * msgSvc;
61  if (svcLocator->service("MessageSvc", msgSvc, true )==StatusCode::FAILURE) {
62  throw std::runtime_error("Error in LAr::DetectorFactor, cannot access MessageSvc");
63  }
64 
65  MsgStream log(msgSvc, "LAr::DetectorFactory");
66 
67  log << "++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
68  log << "+ +" << std::endl;
69  log << "+ HELLO from LAr::DetectorFactoryTBEC +" << std::endl;
70  log << "+ +" << std::endl;
71  log << "+++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
72 
73 
75  if (svcLocator->service("DetectorStore", detStore, false )==StatusCode::FAILURE) {
76  throw std::runtime_error("Error in LArDetectorFactoryTBEC, cannot access DetectorStore");
77  }
78 
79  // V.N : Patch LAr materials
80  LArMaterialManager lArMaterialManager(detStore);
81  lArMaterialManager.buildMaterials();
82 
83  LArDetectorConstructionTBEC CryostatConstructionTB;
84  CryostatConstructionTB.setECVisLimit(m_ecVisLimit);
85 
86  PVLink Envelope = nullptr;
87 
88  Envelope = CryostatConstructionTB.GetEnvelope();
89 
90  a_container->add(new GeoNameTag("LAr"));
91  a_container->add(Envelope);
92 
93  double startPhi = M_PI/2-M_PI/8 - 2*M_PI/768/2;
94  double endPhi = M_PI/2+M_PI/8 - 2*M_PI/768/2;
95 
96  StoredPhysVol *sEmecOuterWheel;
97  if (StatusCode::SUCCESS==detStore->retrieve(sEmecOuterWheel, "EMEC_OUTER_WHEEL_POS" )) {
98  GeoIntrusivePtr<GeoFullPhysVol>emecEnvelope= sEmecOuterWheel->getPhysVol();
99 
100 
101  // Outer Wheel Sampling 1 Region 0:
102  {
103  CellBinning phiBinning(startPhi,endPhi,8,12);
104  EMECDetDescr *detDescr = new EMECDetDescr(emecDetectorManager,1,0,0,phiBinning);
105  EMECDetectorRegion *region = new EMECDetectorRegion(emecEnvelope,detDescr,EMECDetectorRegion::POS);
106  emecDetectorManager->addDetectorRegion(region);
107  }
108 
109  // Outer Wheel Sampling 1 Region 1:
110  {
111  CellBinning phiBinning(startPhi,endPhi,8,12);
112  EMECDetDescr *detDescr = new EMECDetDescr(emecDetectorManager,1,1,0,phiBinning);
113  EMECDetectorRegion *region = new EMECDetectorRegion(emecEnvelope,detDescr,EMECDetectorRegion::POS);
114  emecDetectorManager->addDetectorRegion(region);
115  }
116  // Outer Wheel Sampling 1 Region 2:
117  {
118  CellBinning phiBinning(startPhi,endPhi,8,12);
119  EMECDetDescr *detDescr = new EMECDetDescr(emecDetectorManager,1,2,0,phiBinning);
120  EMECDetectorRegion *region = new EMECDetectorRegion(emecEnvelope,detDescr,EMECDetectorRegion::POS);
121  emecDetectorManager->addDetectorRegion(region);
122  }
123  // Outer Wheel Sampling 1 Region 3:
124  {
125  CellBinning phiBinning(startPhi,endPhi,8,12);
126  EMECDetDescr *detDescr = new EMECDetDescr(emecDetectorManager,1,3,0,phiBinning);
127  EMECDetectorRegion *region = new EMECDetectorRegion(emecEnvelope,detDescr,EMECDetectorRegion::POS);
128  emecDetectorManager->addDetectorRegion(region);
129  }
130  // Outer Wheel Sampling 1 Region 4:
131  {
132  CellBinning phiBinning(startPhi,endPhi,8,12);
133  EMECDetDescr *detDescr = new EMECDetDescr(emecDetectorManager,1,4,0,phiBinning);
134  EMECDetectorRegion *region = new EMECDetectorRegion(emecEnvelope,detDescr,EMECDetectorRegion::POS);
135  emecDetectorManager->addDetectorRegion(region);
136  }
137  // Outer Wheel Sampling 1 Region 5:
138  {
139  CellBinning phiBinning(startPhi,endPhi,8,12);
140  EMECDetDescr *detDescr = new EMECDetDescr(emecDetectorManager,1,5,0,phiBinning);
141  EMECDetectorRegion *region = new EMECDetectorRegion(emecEnvelope,detDescr,EMECDetectorRegion::POS);
142  emecDetectorManager->addDetectorRegion(region);
143  }
144  // Outer Wheel Sampling 2 Region 0:
145  {
146  CellBinning phiBinning(startPhi,endPhi,32,48);
147  EMECDetDescr *detDescr = new EMECDetDescr(emecDetectorManager,2,0,0,phiBinning);
148  EMECDetectorRegion *region = new EMECDetectorRegion(emecEnvelope,detDescr,EMECDetectorRegion::POS);
149  emecDetectorManager->addDetectorRegion(region);
150  }
151  // Outer Wheel Sampling 2 Region 1:
152  {
153  CellBinning phiBinning(startPhi,endPhi,32,48);
154  EMECDetDescr *detDescr = new EMECDetDescr(emecDetectorManager,2,1,0,phiBinning);
155  EMECDetectorRegion *region = new EMECDetectorRegion(emecEnvelope,detDescr,EMECDetectorRegion::POS);
156  emecDetectorManager->addDetectorRegion(region);
157  }
158  // Outer Wheel Sampling 3 Region 0:
159  {
160  CellBinning phiBinning(startPhi,endPhi,32,48);
161  EMECDetDescr *detDescr = new EMECDetDescr(emecDetectorManager,3,0,0,phiBinning);
162  EMECDetectorRegion *region = new EMECDetectorRegion(emecEnvelope,detDescr,EMECDetectorRegion::POS);
163  emecDetectorManager->addDetectorRegion(region);
164  }
165  }
166  StoredPhysVol *sEmecInnerWheel;
167  if (StatusCode::SUCCESS==detStore->retrieve(sEmecInnerWheel, "EMEC_INNER_WHEEL_POS" )) {
168  GeoIntrusivePtr<GeoFullPhysVol>emecEnvelope= sEmecInnerWheel->getPhysVol();
169  // Inner Wheel Sampling 1 Region 0:
170  {
171  CellBinning phiBinning(startPhi,endPhi,8,12);
172  EMECDetDescr *detDescr = new EMECDetDescr(emecDetectorManager,1,0,1,phiBinning);
173  EMECDetectorRegion *region = new EMECDetectorRegion(emecEnvelope,detDescr,EMECDetectorRegion::POS);
174  emecDetectorManager->addDetectorRegion(region);
175  }
176  // Inner Wheel Sampling 2 Region 0:
177 
178  {
179  CellBinning phiBinning(startPhi,endPhi,8,12);
180  EMECDetDescr *detDescr = new EMECDetDescr(emecDetectorManager,2,0,1,phiBinning);
181  EMECDetectorRegion *region = new EMECDetectorRegion(emecEnvelope,detDescr,EMECDetectorRegion::POS);
182  emecDetectorManager->addDetectorRegion(region);
183  }
184  }
185 
186 
187  StoredPhysVol *sPresamplerEnvelope;
188  if (StatusCode::SUCCESS==detStore->retrieve(sPresamplerEnvelope, "PRESAMPLER_EC_POS" )) {
189  GeoIntrusivePtr<GeoFullPhysVol> PresamplerEnvelope=sPresamplerEnvelope->getPhysVol();
190  CellBinning presamplerPhiBinning(startPhi,endPhi,8,12);
191  EMECDetDescr *presamplerDetDescr = new EMECDetDescr(emecDetectorManager,0,0,0,presamplerPhiBinning);
192  EMECDetectorRegion *presamplerRegion = new EMECDetectorRegion(PresamplerEnvelope,presamplerDetDescr,EMECDetectorRegion::POS);
193  emecDetectorManager->addDetectorRegion(presamplerRegion);
194  }
195  detStore->record(emecDetectorManager,emecDetectorManager->getName()).ignore();
196  m_detectorManager = new LArDetectorManager(nullptr,emecDetectorManager,nullptr,nullptr);
197  m_detectorManager->addTreeTop(Envelope);
198 
199 }
200 
201 
203 {
204  return m_detectorManager;
205 }
206 
LArMaterialManager.h
Envelope
Definition: IDetectorGeometryTool.h:17
EMECDetectorManager::addDetectorRegion
void addDetectorRegion(const EMECDetectorRegion *region)
Add a new HEC Detector Region.
Definition: EMECDetectorManager.cxx:128
LArMaterialManager::buildMaterials
void buildMaterials()
Definition: LArMaterialManager.cxx:40
LArGeo::VDetectorParameters::SetInstance
static void SetInstance(std::unique_ptr< VDetectorParameters >)
Definition: VDetectorParameters.cxx:24
EMECDetectorManager
A manager class providing access to readout geometry information for the electromagnetic endcap calor...
Definition: EMECDetectorManager.h:31
EMECDetectorManager.h
EMECDetectorRegion::POS
@ POS
Definition: EMECDetectorRegion.h:33
M_PI
#define M_PI
Definition: ActiveFraction.h:11
LArGeo::LArDetectorConstructionTBEC::GetEnvelope
virtual PVLink GetEnvelope()
Definition: LArDetectorConstructionTBEC.cxx:118
EMECDetectorRegion
Definition: EMECDetectorRegion.h:30
LArGeo::LArDetectorConstructionTBEC
Definition: LArDetectorConstructionTBEC.h:19
EMECDetDescr
Descriptor for regions of the electromagnetic endcap calorimeter.
Definition: EMECDetDescr.h:27
LArGeo::LArDetectorFactoryTBEC::LArDetectorFactoryTBEC
LArDetectorFactoryTBEC()
Definition: LArDetectorFactoryTBEC.cxx:37
RAL.h
StoredPhysVol
Definition: StoredPhysVol.h:27
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:128
StoredPhysVol::getPhysVol
GeoFullPhysVol * getPhysVol()
Destructor.
Definition: StoredPhysVol.cxx:20
LArMaterialManager
Definition: LArMaterialManager.h:36
LArGeo::LArDetectorFactoryTBEC::~LArDetectorFactoryTBEC
virtual ~LArDetectorFactoryTBEC()
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
LArDetectorConstructionTBEC.h
LArGeo::LArDetectorFactoryTBEC::getDetectorManager
virtual const LArDetectorManager * getDetectorManager() const
Definition: LArDetectorFactoryTBEC.cxx:202
LArDetectorManager
Stored in storegate. Provides access to EMB, EMEC, HEC and FCAL Detector Managers....
Definition: LArDetectorManager.h:26
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
VDetectorParameters.h
StoredMaterialManager.h
EMECDetDescr.h
LArGeo::LArDetectorConstructionTBEC::setECVisLimit
void setECVisLimit(int)
Definition: LArDetectorConstructionTBEC.h:30
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
LArDetectorFactoryTBEC.h
LArGeo::LArDetectorFactoryTBEC::create
virtual void create(GeoPhysVol *world)
Definition: LArDetectorFactoryTBEC.cxx:48
StoreGateSvc.h
EMECDetectorRegion.h
StoredPhysVol.h