ATLAS Offline Software
PixelDetectorDC1DC2.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // This file is basically a concatenation of all the *.cxx files.
6 // This allows one to keep a stable copy of the DC2 version and
7 // allow development of future versions.
8 
9 #include "PixelDetectorDC1DC2.h"
10 
18 
20 #include "GeoModelKernel/GeoAlignableTransform.h"
21 #include "GeoModelKernel/GeoBox.h"
22 #include "GeoModelKernel/GeoFullPhysVol.h"
23 #include "GeoModelKernel/GeoIdentifierTag.h"
24 #include "GeoModelKernel/GeoLogVol.h"
25 #include "GeoModelKernel/GeoMaterial.h"
26 #include "GeoModelKernel/GeoNameTag.h"
27 #include "GeoModelKernel/GeoPhysVol.h"
28 #include "GeoModelKernel/GeoTransform.h"
29 #include "GeoModelKernel/GeoTube.h"
30 #include "GeoModelKernel/GeoTubs.h"
31 #include "GaudiKernel/PhysicalConstants.h"
34 #include "Identifier/Identifier.h"
35 #include "StoreGate/StoreGateSvc.h"
36 #include "GaudiKernel/Bootstrap.h"
37 #include "GaudiKernel/ISvcLocator.h"
38 
39 
40 #include <memory>
41 #include <vector>
42 
43 
44 using namespace PixelGeoDC2;
45 
46 
47 //---------------------------------------------------//
48 // //
49 // GeoPixelBarrel //
50 // //
51 //---------------------------------------------------//
52 
53 
54 GeoVPhysVol* GeoPixelBarrel::Build( ) {
55 
56  //
57  // create the Barrel Mother volume
58  //
59  double rmin = m_gmt_mgr->PixelBarrelRMin();
60  double rmax = m_gmt_mgr->PixelBarrelRMax();
61  double halflength = m_gmt_mgr->PixelBarrelHalfLength();
62  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
63  const GeoTube* barrelTube = new GeoTube(rmin,rmax,halflength);
64  const GeoLogVol* barrelLog = new GeoLogVol("barrelLog",barrelTube,air);
65  GeoPhysVol* barrelPhys = new GeoPhysVol(barrelLog);
66 
67  // Set numerology
69 
70  //
71  // Build the layers inside
72  //
74  std::string lname[3];
75  lname[0] = "InnerLayer";
76  lname[1] = "CenterLayer";
77  lname[2] = "OuterLayer";
78  for(int ii = 0; ii < m_gmt_mgr->PixelBarrelNLayer(); ii++) {
79  //cout << "Layer" << ii << endl;
81  if(m_gmt_mgr->isLDPresent()) {
82  GeoAlignableTransform * xform = new GeoAlignableTransform(GeoTrf::Transform3D::Identity());
83  GeoVPhysVol* layerphys = layer.Build();
84  GeoNameTag *tag = new GeoNameTag(lname[ii]);
85  barrelPhys->add(tag);
86  barrelPhys->add(new GeoIdentifierTag(ii));
87  barrelPhys->add(xform);
88  barrelPhys->add(layerphys);
89 
90  // Store the transform (at level 1)
91  Identifier id = m_gmt_mgr->getIdHelper()->wafer_id(0,ii,0,0);
92  m_DDmgr->addAlignableTransform(1, id, xform, layerphys);
93  } else {
94  m_gmt_mgr->msg(MSG::DEBUG) << "Layer " << ii << " not built" << endmsg;
95  }
96  }
97  if(m_gmt_mgr->DoServices() ) {
98  //
99  // Add the services inside the barrel volume
100  //
101  GeoPixelServices brlsvc = GeoPixelServices(m_DDmgr, m_gmt_mgr, "/Pixel/PixelBarrel");
102  for(int ii =0; ii< brlsvc.NCylinders(); ii++) {
103  brlsvc.SetCylinder(ii);
104  GeoNameTag* tag = new GeoNameTag("Outside Barrel Service");
105  GeoTrf::Translate3D pos(0.,0.,brlsvc.ZPos() );
106  GeoTransform* xform = new GeoTransform(pos);
107  barrelPhys->add(tag);
108  barrelPhys->add(xform);
109  barrelPhys->add(brlsvc.Build() );
110  }
111  }
112  return barrelPhys;
113 }
114 
115 //---------------------------------------------------//
116 // //
117 // GeoPixelCable //
118 // //
119 //---------------------------------------------------//
120 
121 
122 
123 GeoVPhysVol* GeoPixelCable::Build() {
124  //
125  // Dimensions
126  //
127  double length = this->Length();
128  double thickness = this->Thickness();
129  double width = m_gmt_mgr->PixelCableWidth();
130  const GeoMaterial* cable = m_mat_mgr->getMaterial("pix::Cable");
131  const GeoBox* cableBox = new GeoBox(thickness/2.,width/2.,length/2.);
132  std::string logName = std::string("cableLog")+std::to_string(m_moduleNumber);;
133  GeoLogVol* theCable = new GeoLogVol(logName,cableBox,cable);
134  GeoPhysVol* cablePhys = new GeoPhysVol(theCable);
135  return cablePhys;
136 }
137 
138 
140  //
141  // The cable is running from the beginning of the module to which
142  // it is attached to the end of the ladder,
143  // zmax gives the end of the ladder and zmin is the begining of the module
144  // in absolute value, so the cable lenght is the difference b/w the two
145  // the TubeCables factory will have to position this cable in the correct
146  // side.
147  //
148  double zmax = m_gmt_mgr->PixelCableZMax();
150  return zmax-zmin-m_epsilon;
151 }
152 
153 double GeoPixelCable::Thickness() const {
154  //
155  // This is calculated from the Gaudi::Units::rad length of the cables and their mass
156  // I have to go back on this later when I'll have defined a material
157  // manager, for the time being I get the thickness by atlsim, using dtree
158  // anf hardwire the numbers in the code...
159  // I have to come back on the thickness using the cables recipes
160  //
161  if(m_moduleNumber == 0) return 2.*0.0028412*Gaudi::Units::cm;
162  if(m_moduleNumber == 1) return 2.*0.0056795*Gaudi::Units::cm;
163  if(m_moduleNumber == 2) return 2.*0.0056830*Gaudi::Units::cm;
164  if(m_moduleNumber == 3) return 2.*0.0056763*Gaudi::Units::cm;
165  if(m_moduleNumber == 4) return 2.*0.0056752*Gaudi::Units::cm;
166  if(m_moduleNumber == 5) return 2.*0.0057058*Gaudi::Units::cm;
167  if(m_moduleNumber == 6) return 2.*0.0056818*Gaudi::Units::cm;
168 
169  return 0.;
170 
171 }
172 
173 //---------------------------------------------------//
174 // //
175 // GeoPixelChip //
176 // //
177 //---------------------------------------------------//
178 
179 
180 //
181 // This class builds one Chip to be placed in one module
182 //
183 // The information on which layer to build is retrieved by the Geometry Manager
184 //
185 // Contained by: PixelModule_log
186 //
187 // Contains: nothing
188 //
189 
190 GeoVPhysVol* GeoPixelChip::Build() {
191  //
192  // Dimensions
193  //
194  double length = m_gmt_mgr->PixelChipLength();
195  double thickness = m_gmt_mgr->PixelChipThickness();
196  double width = m_gmt_mgr->PixelChipWidth();
197  const GeoMaterial* chipMat = m_mat_mgr->getMaterial("pix::Chip");
198  std::string LogName = "chipBrlLog";
199  //
200  // In G3 is like this...
201  //
202  if(m_gmt_mgr->isEndcap() ) {
203  chipMat = m_mat_mgr->getMaterial("std::Silicon");
204  LogName = "chipECLog";
205  }
206 
207  //std::cout << "DC1 chip thick" << thickness << std::endl;
208  const GeoBox* chipBox = new GeoBox(thickness/2.,width/2.,length/2.);
209  GeoLogVol* theChip = new GeoLogVol(LogName,chipBox,chipMat);
210  GeoPhysVol* chipPhys = new GeoPhysVol(theChip);
211  return chipPhys;
212 }
213 
214 
215 //---------------------------------------------------//
216 // //
217 // GeoPixelDisk //
218 // //
219 //---------------------------------------------------//
220 
221 
224  : GeoVPixelFactory (ddmgr, mgr)
225 {
226 
227  // Define the log volume in the constructor, so I do it only once.
228  //
229 
230  //
231  // Dimensions from class methods.
232  //
233  double rmin = RMin();
234  double rmax = RMax();
235  double halflength = Thickness()*0.5;
236  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
237  const GeoTube* diskTube = new GeoTube(rmin,rmax,halflength);
238  m_theDisk = new GeoLogVol("diskLog",diskTube,air);
239 }
240 
241 GeoVPhysVol* GeoPixelDisk::Build( ) {
242  //
243  // Define the Sensor to be used here, so it will be the same for all the disk
244  GeoPixelSiCrystal theSensor(m_DDmgr, m_gmt_mgr, false);
245  GeoFullPhysVol* diskPhys = new GeoFullPhysVol(m_theDisk);
246  //
247  // Place the disk sectors (on both sides):
248  //
249  GeoPixelSubDisk psd(m_DDmgr, m_gmt_mgr, theSensor);
250  double zpos = -m_gmt_mgr->PixelECSiDz1()/2.;
252  GeoTrf::Translation3D pos(0.,0.,zpos);
253 
254  // Set numerology
255  m_gmt_mgr->SetEta(0);
258 
259  // Even modules
260  m_gmt_mgr->SetEta(0);
261  for (int ii = 0; ii < m_gmt_mgr->PixelECNSectors1(); ii++) {
262  m_gmt_mgr->SetPhi(ii);
263  GeoTrf::Transform3D rm = GeoTrf::RotateZ3D(ii*angle+angle/2.)*GeoTrf::RotateX3D(180.*Gaudi::Units::deg);
264  GeoAlignableTransform* xform = new GeoAlignableTransform(GeoTrf::Transform3D(pos*rm));
265  GeoVPhysVol * modulePhys = psd.Build();
266  GeoNameTag* tag = new GeoNameTag("DiskSector");
267  diskPhys->add(tag);
268  diskPhys->add(new GeoIdentifierTag(getPhiId() ) );
269  diskPhys->add(xform);
270  diskPhys->add(modulePhys);
271 
272  // Now store the xform by identifier:
273  Identifier id = theSensor.getID();
274  m_DDmgr->addAlignableTransform(0,id,xform,modulePhys);
275  }
276 
277  // Odd modules
278  m_gmt_mgr->SetEta(1);
279  zpos = m_gmt_mgr->PixelECSiDz2()/2.;
280  pos = GeoTrf::Translation3D(0.,0.,zpos);
281  for (int ii = 0; ii < m_gmt_mgr->PixelECNSectors1(); ii++) {
282  m_gmt_mgr->SetPhi(ii);
283  GeoTrf::RotateZ3D rm((ii+1)*angle);
284  GeoAlignableTransform* xform = new GeoAlignableTransform(GeoTrf::Transform3D(pos*rm));
285  GeoVPhysVol * modulePhys = psd.Build();
286  GeoNameTag* tag = new GeoNameTag("DiskSector");
287  diskPhys->add(tag);
288  diskPhys->add(new GeoIdentifierTag(getPhiId() ) );
289  diskPhys->add(xform);
290  diskPhys->add(modulePhys);
291 
292  // Now store the xform by identifier:
293  Identifier id = theSensor.getID();
294  m_DDmgr->addAlignableTransform(0,id,xform,modulePhys);
295  }
296  //
297  // Place the supports for the disks:
298  //
300  for(int ii =0; ii< pds.NCylinders(); ii++) {
301  pds.SetCylinder(ii);
302  GeoTrf::Translate3D pos(0.,0.,pds.ZPos() );
303  GeoNameTag* tag = new GeoNameTag("DiskSupport");
304  GeoTransform* xform = new GeoTransform(pos);
305  diskPhys->add(tag);
306  diskPhys->add(xform);
307  diskPhys->add(pds.Build() );
308  }
309 
310  return diskPhys;
311 }
312 
314  return m_gmt_mgr->PixelECCarbonRMin("Inner");
315 }
316 
318  return m_gmt_mgr->PixelECCarbonRMax("Outer");
319 }
320 
322  //
323  // This can be calculated as the minimum thickness possible
324  // as for the layers I use a number which is enough to contain
325  // the inner part of the detector.
326  //
327  // 7-1 I switch to the minimum thickness possible as the cables are right
328  // outside this volume.
329  //
330  // return 10*Gaudi::Units::mm;
331  double tck = 2*(m_gmt_mgr->PixelBoardThickness()
334  return tck;
335 }
336 
337 
338 //
339 // This is to retrofit the convention in the pixelId
340 // \which is coming from atlsim...
341 //
343  int brl_ec=0;
344  int phimod;
345  if(m_gmt_mgr->isBarrel() ) brl_ec = 0;
346  if(m_gmt_mgr->isEndcap() ) brl_ec = 2*m_gmt_mgr->GetSide();
347  if(brl_ec == 2) {
348  phimod = m_gmt_mgr->Phi()*2 + m_gmt_mgr->Eta();
349  } else {
350  //
351  // The (eta) negative) endcap is more complicated, as there is an extra
352  // rotation of the endcap as a whole around Y
353  //
354  phimod = 48-m_gmt_mgr->Phi()*2-m_gmt_mgr->Eta()-2;
355  if (phimod == -1) phimod = 47;
356  }
357  return phimod;
358 }
359 
360 
361 //---------------------------------------------------//
362 // //
363 // GeoPixelDiskSupports //
364 // //
365 //---------------------------------------------------//
366 
367 
370  : GeoVPixelFactory (ddmgr, mgr)
371 {
372  //
373  // Initialize the vectors
374  //
375  //
376  // zpos is not needed, but it's here just in case...
377  //
378  std::string ele[3] = {"Inner", "Central", "Outer"};
379  for (int ii =0; ii<3; ii++) {
380  double rmin = m_gmt_mgr->PixelECCarbonRMin(ele[ii]);
381  double rmax = m_gmt_mgr->PixelECCarbonRMax(ele[ii]);
382  double halflength = m_gmt_mgr->PixelECCarbonThickness(ele[ii])/2.;
383  double zpos = 0.;
384  std::string mat = m_gmt_mgr->PixelECCarbonMaterial(ele[ii]);
385  m_rmin.push_back(rmin);
386  m_rmax.push_back(rmax);
387  m_zpos.push_back(zpos);
388  m_halflength.push_back(halflength);
389  m_material.push_back(mat);
390  }
391 }
392 
393 
394 
396  const GeoMaterial* supportMat = m_mat_mgr->getMaterial(m_material[m_nframe]);
397  //
398  // Dimensions: (m_nframe set with teh SetCylinder method)
399  //
400  double rmin = m_rmin[m_nframe];
401  double rmax = m_rmax[m_nframe];
402  double halflength = m_halflength[m_nframe];
403  const GeoTube* supportTube = new GeoTube(rmin,rmax,halflength);
404  std::string logName = std::string("diskSupLog")+std::to_string(m_nframe);
405  GeoLogVol* theSupport = new GeoLogVol(logName,supportTube,supportMat);
406  GeoPhysVol* supportPhys = new GeoPhysVol(theSupport);
407  return supportPhys;
408 }
409 
410 
411 //---------------------------------------------------//
412 // //
413 // GeoPixelECCable //
414 // //
415 //---------------------------------------------------//
416 
419  : GeoVPixelFactory (ddmgr, mgr)
420 {
421  //
422  // Define the log volume in the constructor, so I do it only once.
423  //
424 
425  //
426  // Dimensions
427  //
428  double rmin = m_gmt_mgr->PixelECCablesRMin();
429  double rmax = m_gmt_mgr->PixelECCablesRMax();
430  double thickness = m_gmt_mgr->PixelECCablesThickness();
431  const GeoMaterial* cableMat = m_mat_mgr->getMaterial("pix::ECCables");
432  const GeoTube* cableTube = new GeoTube(rmin,rmax,thickness*0.5);
433  m_theECCable = new GeoLogVol("ECCableLog",cableTube,cableMat);
434 }
435 
436 GeoVPhysVol* GeoPixelECCable::Build( ) {
437  GeoPhysVol* cablePhys = new GeoPhysVol(m_theECCable);
438  return cablePhys;
439 }
440 
441 
442 //---------------------------------------------------//
443 // //
444 // GeoPixelEndCap //
445 // //
446 //---------------------------------------------------//
447 
448 
449 GeoVPhysVol* GeoPixelEndCap::Build( ) {
450 
451  //
452  // create the Barrel Mother volume
453  //
454  double rmin = m_gmt_mgr->PixelEndcapRMin();
455  double rmax = m_gmt_mgr->PixelEndcapRMax();
456  double halflength = (m_gmt_mgr->PixelEndcapZMax()-m_gmt_mgr->PixelEndcapZMin())/2.;
457  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
458  const GeoTube* ecTube = new GeoTube(rmin,rmax,halflength);
459  const GeoLogVol* ecLog = new GeoLogVol("EndCapLog",ecTube,air);
460  GeoPhysVol* ecPhys = new GeoPhysVol(ecLog);
461 
462  // Set numerology
464 
465  //
466  // Place the disks and cables on both sides
467  //
470  for(int ii = 0; ii < m_gmt_mgr->PixelEndcapNDisk(); ii++) {
471  m_gmt_mgr->SetCurrentLD(ii);
472  if(m_gmt_mgr->isLDPresent()) {
473  //
474  // The position is given w.r.t to the center of the detector!
475  //
476  // position of the endcap
477  double ecz = (m_gmt_mgr->PixelEndcapZMax()+m_gmt_mgr->PixelEndcapZMin())/2.;
478  //position of the disk
479  double zdisk = m_gmt_mgr->PixelDiskPosition()-ecz;
480  // place the disk
481  GeoTrf::Translate3D pos(0.,0.,zdisk);
482  GeoNameTag* tag = new GeoNameTag("Disk");
483  GeoAlignableTransform* xform = new GeoAlignableTransform(pos);
484  GeoVPhysVol * diskPhys = pd.Build();
485  ecPhys->add(tag);
486  ecPhys->add(new GeoIdentifierTag(ii));
487  ecPhys->add(xform);
488  ecPhys->add(diskPhys);
489 
490  // Store the alignable transform
491  int brl_ec = 2*m_gmt_mgr->GetSide();
492  Identifier id = m_gmt_mgr->getIdHelper()->wafer_id(brl_ec,ii,0,0);
493  m_DDmgr->addAlignableTransform(1, id, xform, diskPhys);
494 
495  //
496  // place the cables twice for the two active parts
497  //
498  double dz = pd.Thickness()/2. + m_gmt_mgr->PixelECCablesDistance() ;
499  pos = GeoTrf::Translate3D(0.,0.,zdisk+dz);
500  tag = new GeoNameTag("ECCables");
501  GeoTransform * xformCablesPlus = new GeoTransform(pos);
502  ecPhys->add(tag);
503  ecPhys->add(xformCablesPlus);
504  ecPhys->add(pecc.Build() );
505  pos = GeoTrf::Translate3D(0.,0.,zdisk-dz);
506  tag = new GeoNameTag("ECCables");
507  GeoTransform * xformCablesMinus = new GeoTransform(pos);
508  ecPhys->add(tag);
509  ecPhys->add(xformCablesMinus);
510  ecPhys->add(pecc.Build() );
511  } else {
512  if(m_gmt_mgr->msgLvl(MSG::DEBUG)) m_gmt_mgr->msg(MSG::DEBUG) << "Disk " << ii << " not built" << endmsg;
513 
514  }
515  }
516  if(m_gmt_mgr->DoServices() ) {
517  //
518  // Add the Endcap services inide the EC volume
519  //
520  GeoPixelServices ecsvc = GeoPixelServices(m_DDmgr, m_gmt_mgr, "/Pixel/PixelEndcap");
521  for(int ii =0; ii< ecsvc.NCylinders(); ii++) {
522  ecsvc.SetCylinder(ii);
523  GeoNameTag* tag = new GeoNameTag("Outside Endcap Service");
524  GeoTrf::Translate3D pos(0.,0.,ecsvc.ZPos() );
525  GeoTransform* xform = new GeoTransform(pos);
526  ecPhys->add(tag);
527  ecPhys->add(xform);
528  ecPhys->add(ecsvc.Build() );
529  }
530  }
531  return ecPhys;
532 }
533 
534 //---------------------------------------------------//
535 // //
536 // GeoPixelEnvelope //
537 // //
538 //---------------------------------------------------//
539 
540 
541 GeoVPhysVol* GeoPixelEnvelope::Build( ) {
542  //
543  // create the External volume where I'll put all the pixel detector
544  //
545  double rmin = m_gmt_mgr->PixelRMin();
546  double rmax = m_gmt_mgr->PixelRMax();
547  double halflength = m_gmt_mgr->PixelHalfLength();
548  //std::cout << "Material Manager " << m_mat_mgr << std::endl;
549  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
550  const GeoTube* envelopeTube = new GeoTube(rmin,rmax,halflength);
551  const GeoLogVol* envelopeLog = new GeoLogVol("Pixel",envelopeTube,air);
552  GeoFullPhysVol* envelopePhys = new GeoFullPhysVol(envelopeLog);
553  //
554  // Add the Barrel:
555  //
557  m_gmt_mgr->SetBarrel();
559  GeoNameTag* tag = new GeoNameTag("Barrel");
560  GeoVPhysVol* barrelPhys = brl.Build() ;
561  envelopePhys->add(tag);
562  envelopePhys->add(new GeoIdentifierTag(0));
563  envelopePhys->add(barrelPhys );
564  if(m_gmt_mgr->DoServices() ) {
565  //
566  // Add the Barrel services outside the barrel volume
567  //
568  GeoPixelServices brlsvc = GeoPixelServices(m_DDmgr, m_gmt_mgr, "/Pixel");
569  for(int ii =0; ii< brlsvc.NCylinders(); ii++) {
570  brlsvc.SetCylinder(ii);
571  GeoNameTag* tag = new GeoNameTag("Outside Barrel Service");
572  GeoTrf::Translate3D pos(0.,0.,brlsvc.ZPos() );
573  GeoTransform* xform = new GeoTransform(pos);
574  envelopePhys->add(tag);
575  envelopePhys->add(new GeoIdentifierTag(ii) );
576  envelopePhys->add(xform);
577  envelopePhys->add(brlsvc.Build() );
578  }
579  }
580  //
581  // Add the EndCaps
582  //
585  m_gmt_mgr->SetEndcap();
586  m_gmt_mgr->SetPos();
588  double zpos = (m_gmt_mgr->PixelEndcapZMax()+m_gmt_mgr->PixelEndcapZMin())/2.;
589  GeoTrf::Translate3D pos(0.,0.,zpos);
590  GeoTransform* xform = new GeoTransform(pos);
591  tag = new GeoNameTag("EndCap 1");
592  envelopePhys->add(tag);
593  envelopePhys->add(new GeoIdentifierTag(2));
594  envelopePhys->add(xform);
595  envelopePhys->add(pec.Build() );
596  m_gmt_mgr->SetNeg();
597  GeoTrf::RotateX3D rm(180.*Gaudi::Units::deg);
598  xform = new GeoTransform(GeoTrf::Transform3D(GeoTrf::Translation3D(0.,0.,-zpos)*rm));
599  tag = new GeoNameTag("EndCap 2");
600  envelopePhys->add(tag);
601  envelopePhys->add(new GeoIdentifierTag(-2));
602  envelopePhys->add(xform);
603  envelopePhys->add(pec.Build() );
604  if(m_gmt_mgr->DoServices() ) {
605  //
606  // Add the Endcap services outside the EC volume
607  //
609  for(int ii =0; ii< ecsvc.NCylinders(); ii++) {
610  ecsvc.SetCylinder(ii);
611  GeoNameTag* tag = new GeoNameTag("Outside Endcap Service");
612  GeoTrf::Translate3D pos(0.,0.,ecsvc.ZPos() );
613  GeoTransform* xform = new GeoTransform(pos);
614  envelopePhys->add(tag);
615  envelopePhys->add(xform);
616  envelopePhys->add(new GeoIdentifierTag(ii) );
617  envelopePhys->add(ecsvc.Build() );
618  }
619  }
620  return envelopePhys;
621 
622  //
623  // Want other stuff?
624  //
625  // GeoPixelLadder brl;
626  // GeoPixelTubeCables brl;
627  // GeoPixelModule brl;
628 
629 
630 }
631 
632 
633 //---------------------------------------------------//
634 // //
635 // GeoPixelHybrid //
636 // //
637 //---------------------------------------------------//
638 
639 //
640 // This class builds one Hybrid to be placed in one module
641 //
642 // The information on which layer to build is retrieved by the Geometry Manager
643 //
644 // Contained by: PixelModule_log
645 //
646 // Contains: nothing
647 //
648 
649 GeoVPhysVol* GeoPixelHybrid::Build() {
650  //
651  // Dimensions
652  //
653  double length = m_gmt_mgr->PixelHybridLength();
654  double thickness = m_gmt_mgr->PixelHybridThickness();
655  double width = m_gmt_mgr->PixelHybridWidth();
656  const GeoMaterial* hybridMat = m_mat_mgr->getMaterial("pix::Hybrid");
657  if(m_gmt_mgr->isEndcap() )hybridMat = m_mat_mgr->getMaterial("std::Silicon");
658  const GeoBox* hybridBox = new GeoBox(thickness/2.,width/2.,length/2.);
659  std::string logName = "hybridECLog";
660  if(m_gmt_mgr->isBarrel() ) logName = "hybridBrlLog";
661  GeoLogVol* theHybrid = new GeoLogVol(logName,hybridBox,hybridMat);
662  GeoPhysVol* hybridPhys = new GeoPhysVol(theHybrid);
663  return hybridPhys;
664 }
665 
666 //---------------------------------------------------//
667 // //
668 // GeoPixelLadder //
669 // //
670 //---------------------------------------------------//
671 
672 
675  GeoPixelSiCrystal& theSensor)
676  : GeoVPixelFactory (ddmgr, mgr),
677  m_theSensor(theSensor)
678 {
679  using std::max;
680 
681  //
682  // Define the log volume in the constructor, so I do it only once.
683  //
684 
685  //
686  // Length of the ladder is in the db
687  //
688  double halflength = m_gmt_mgr->PixelLadderHalfLength();
689  //
690  // The width is the maximum among the componenst widths
691  //
692  double width = max( max(
696  //
697  // The thickness has to be calculated
698  //
699  double thickness = this->Thickness();
700  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
701  const GeoBox* ladderBox = new GeoBox(thickness*0.5,width*0.5,halflength);
702  m_theLadder = new GeoLogVol("ladderLog",ladderBox,air);
703 }
704 
705 GeoVPhysVol* GeoPixelLadder::Build( ) {
706  GeoPhysVol* ladderPhys = new GeoPhysVol(m_theLadder);
707  //
708  // Place the Modules
709  //
711  int HalfNModule = m_gmt_mgr->PixelNModule()/2;
712  for(int ii = 0; ii < m_gmt_mgr->PixelNModule(); ii++) {
713  //
714  // Which of the two sides is it?
715  //
716  float side = 1.;
717  int jj = ii-HalfNModule;
718  m_gmt_mgr->SetEta(jj);
719  if(jj < 0) {
720  side = -1.;
721  jj = -jj;
722  }
723 //
724 // Shift down the central module, as its flag (from NOVA) is -1.
725 //
727 //
728 // Get the z position from the db
729 //
730  float zpos = m_gmt_mgr->PixelModulePosition(jj)*side;
731  GeoTrf::Translation3D modulepos(xpos,0.,zpos);
732 //
733 //
734 //
735  //
736  // again change sign w.r.t. g4
737  //
738  GeoTrf::RotateY3D rm(m_gmt_mgr->PixelModuleAngle()*m_gmt_mgr->PixelModuleAngleSign(ii) );
739 //
740 // Place the Module
741 //
742  GeoVPhysVol* modulephys = pm.Build() ;
743  GeoNameTag *tag = new GeoNameTag("Module");
744  GeoAlignableTransform* xform;
745  // OLD EXAMPLE FOR ALIGNEMENT!!
746  // if(m_gmt_mgr->IsAlign() ) {
747  // xform = new GeoSiAlTransform(GeoTrf::Transform3D(rm,modulepos), pm.getID() );
748  // } else {
749  // xform = new GeoTransform(GeoTrf::Transform3D(rm,modulepos));
750  // }
751  xform = new GeoAlignableTransform(GeoTrf::Transform3D(modulepos*rm));
752  ladderPhys->add(tag);
753  ladderPhys->add(new GeoIdentifierTag(m_gmt_mgr->Eta() ) );
754  ladderPhys->add(xform);
755  ladderPhys->add(modulephys );
756 
757  // Now store the xform by identifier:
759  m_DDmgr->addAlignableTransform(0,id,xform,modulephys);
760 
761  }
762  return ladderPhys;
763 }
764 
765 
767  //
768  // The thickness of the ladderis calculated starting from the thickness of
769  // its components: Board + Hybrid+Chips
770  // then the distance of the modules from the center is added and
771  // a factor is added to account for the tilt of ~1degree given to
772  // have a z overlap of the single modules
773  //
774  double tckincl = (m_gmt_mgr->PixelBoardLength()+m_gmt_mgr->PixelBalcony())*
776  double thick = m_gmt_mgr->PixelBoardThickness()+
780  tckincl;
781  return thick;
782 }
783 
784 
785 //---------------------------------------------------//
786 // //
787 // GeoPixelLadderStruct //
788 // //
789 //---------------------------------------------------//
790 
791 
793  //
794  // create the structure to hold the ladder
795  //
796  //
797  // Dimensions
798  //
799  double halflength = m_gmt_mgr->PixelLadderHalfLength();
800  double thickness = m_gmt_mgr->PixelLadderThickness();
801  double width = m_gmt_mgr->PixelLadderWidth();
802  //
803  // This is ladder material
804  //
805  const GeoMaterial* ladderMat = m_mat_mgr->getMaterial("pix::Ladder");
806  const GeoBox* ladderStructBox = new GeoBox(thickness/2.,width/2.,halflength);
807  const GeoLogVol* ladderStructLog = new GeoLogVol("ladderStructLog",ladderStructBox,ladderMat);
808  GeoPhysVol* ladderStructPhys = new GeoPhysVol(ladderStructLog);
809  return ladderStructPhys;
810 }
811 
812 
813 //---------------------------------------------------//
814 // //
815 // GeoPixelLayer //
816 // //
817 //---------------------------------------------------//
818 
819 
820 GeoVPhysVol* GeoPixelLayer::Build() {
821 
822  //
823  // create the three barrel layers
824  // Build the sensor first to use the same for all the module in the layer
825  bool isBLayer = false;
826  if(m_gmt_mgr->GetLD() == 0) isBLayer = true;
827  GeoPixelSiCrystal theSensor(m_DDmgr, m_gmt_mgr, isBLayer);
828  //
829  // This is the maximum possible w/o going out of the mother volume!
830  //
831  double LayerThickness = 8.499*Gaudi::Units::mm;
832  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
833  //
834  // Layer dimensions from the geometry manager
835  //
836  double rmin = m_gmt_mgr->PixelLayerRadius()-LayerThickness;
837  double rmax = m_gmt_mgr->PixelLayerRadius()+LayerThickness;
838  double halflength = m_gmt_mgr->PixelLadderHalfLength() + m_epsilon;
839  std::string lname[3];
840  lname[0] = "InnerLayerLog";
841  lname[1] = "CenterLayerLog";
842  lname[2] = "OuterLayerLog";
843  const GeoTube* layerTube = new GeoTube(rmin,rmax,halflength); //solid
844  const GeoLogVol* layerLog = new GeoLogVol(lname[m_gmt_mgr->GetLD()],layerTube,air); //log volume
845  GeoFullPhysVol* layerPhys = new GeoFullPhysVol(layerLog); // phys vol
846  //
847  // Place the ladders:
848  //
849  GeoPixelLadder pl(m_DDmgr, m_gmt_mgr, theSensor);
851  int nsectors = m_gmt_mgr->NPixelSectors();
852  double angle=360./nsectors*Gaudi::Units::deg;
853  double layerradius = m_gmt_mgr->PixelLayerRadius();
854  double xcblpos = layerradius + (pl.Thickness()/2.+ptc.Thickness()/2)/cos(m_gmt_mgr->PixelLadderTilt());
855  GeoTrf::Vector3D posladder(layerradius, 0.,0.);
856  posladder = GeoTrf::RotateZ3D(angle/2.)*posladder;
857  GeoTrf::Vector3D postubecables(xcblpos, 0.,0.);
858  postubecables = GeoTrf::RotateZ3D(angle/2.)*postubecables;
859 
860  // Set numerology
863 
864  //
865  // Place the volumes by rotation.
866  //
867  for(int ii = 0; ii < nsectors; ii++) {
868  m_gmt_mgr->SetPhi(ii);
869  //
870  // change the sign w.r.t G4 (same sign as G3)
871  //
872  GeoTrf::RotateZ3D rm(( +(float) ii+0.5)*angle+m_gmt_mgr->PixelLadderTilt() );
873  //
874  // Place the ladders
875  //
876  GeoNameTag *tag = new GeoNameTag("Ladder");
877  GeoTransform* xform = new GeoTransform(GeoTrf::Translate3D(posladder.x(),posladder.y(),posladder.z())*rm);
878  layerPhys->add(tag);
879  layerPhys->add(new GeoIdentifierTag(ii) );
880  layerPhys->add(xform);
881  GeoVPhysVol* ladderphys = pl.Build() ;
882  layerPhys->add(ladderphys );
883  posladder = GeoTrf::RotateZ3D(angle)*posladder;
884  if(m_gmt_mgr->DoServices() ) {
885  //
886  // Place the box w/ the tubes and cables for the layer
887  //
888  tag = new GeoNameTag("TubesAndCables");
889  xform = new GeoTransform(GeoTrf::Translate3D(postubecables.x(),postubecables.y(),postubecables.z())*rm);
890  layerPhys->add(tag);
891  layerPhys->add(xform);
892  GeoVPhysVol* TCphys = ptc.Build() ;
893  layerPhys->add(TCphys );
894  postubecables = GeoTrf::RotateZ3D(angle)*postubecables;
895  }
896  }
897  return layerPhys;
898 }
899 
900 
901 //---------------------------------------------------//
902 // //
903 // GeoPixelModule //
904 // //
905 //---------------------------------------------------//
906 
907 
910  GeoPixelSiCrystal& theSensor) :
911  GeoVPixelFactory (ddmgr, mgr),
912  m_theSensor(theSensor)
913 {
914  //
915  // Define the log volume in the constructor, so I do it only once.
916  //
917  //
918  // The Dimensions are in separate routines
919  //
920  double length = this->Length();
921  double thickness = this->Thickness();
922  double width = this->Width();
923  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
924  const GeoBox* moduleBox = new GeoBox(thickness*0.5,width*0.5,length*0.5);
925  m_theModule = new GeoLogVol("moduleLog",moduleBox,air);
926 
927 }
928 
929 GeoVPhysVol* GeoPixelModule::Build( ) {
930  GeoFullPhysVol* modulePhys = new GeoFullPhysVol(m_theModule);
931  //
932  // Place the Si Crystal
933  //
934  GeoVPhysVol *theSi = m_theSensor.Build();
935  m_id = m_theSensor.getID();
936  GeoNameTag *tag = new GeoNameTag("Si Crystal");
937  GeoTransform *xformsi = new GeoTransform(GeoTrf::Transform3D::Identity());
938  modulePhys->add(tag);
939  modulePhys->add(new GeoIdentifierTag(100) );
940  modulePhys->add(xformsi);
941  modulePhys->add(theSi );
942  //
943  // Place the Hybrid
944  //
946  double xpos = -0.5*(m_gmt_mgr->PixelBoardThickness()+m_gmt_mgr->PixelHybridThickness());
947  GeoTrf::Translate3D hybpos(xpos,0.,0.);
948  GeoTransform* xform = new GeoTransform(hybpos);
949  tag = new GeoNameTag("Hybrid");
950  modulePhys->add(tag);
951  modulePhys->add(xform);
952  modulePhys->add(ph.Build() );
953  //
954  // Place the Chip
955  //
958  GeoTrf::Translate3D chippos(xpos,0.,0.);
959  xform = new GeoTransform(chippos);
960  tag = new GeoNameTag("Chip");
961  modulePhys->add(tag);
962  modulePhys->add(xform);
963  modulePhys->add(pc.Build() );
964  //
965  // Add the silicon element to the list of detector elements...
966  //
967  return modulePhys;
968 }
969 
970 
972  using std::max;
973  //
974  // The thickness of the module is given by the board thickness
975  // plus the maximum b/w the hybrid and the chip+gap
976  //
977  double thick = m_gmt_mgr->PixelBoardThickness()+
980  //
981  // Don't understand why....
982  //
983  return thick+.01;
984 }
985 
987  using std::max;
988  double width = max( max(
992  return width;
993 }
995  using std::max;
996  double length = max( max( max(
999  2*m_gmt_mgr->PixelBalcony()),
1001 
1002  return length;
1003 }
1004 
1006  return m_id;
1007 }
1008 
1009 //---------------------------------------------------//
1010 // //
1011 // GeoPixelServices //
1012 // //
1013 //---------------------------------------------------//
1014 
1015 //
1016 // This class builds the Services as Cylinders
1017 //
1018 // The services are grouped in 4 groups (as in G3)
1019 // I keep this grouping as it natural in the database.
1020 // They are Barrel-Inside tracking volume
1021 // Barrel-Outside tracking volume
1022 // Endcap-Inside tracking volume
1023 // Edncap-Outside tracking volume
1024 //
1025 // The elements for each group are defined in initialize,
1026 // with Barrel/endcap coming from the geometry manager and inside oputside,
1027 // from the mother volume name.
1028 // This class builds the n-th service element, with n defined in SetCylinder
1029 //
1030 //
1031 //
1032 // The information on which layer to build is retrieved by the Geometry Manager
1033 //
1034 // Contained by: passed by argument
1035 //
1036 // Contains: nothing
1037 //
1038 
1039 
1042  const std::string& root)
1043  : GeoVPixelFactory (ddmgr, mgr)
1044 {
1045  //
1046  // Initialize the service geometry properly accordning to the
1047  // mother volume where it goes.
1048  // Of course services cannot be placed in other volumes.
1049  if(root == "/Pixel") {
1050  initialize("Outside");
1051  m_zone = "Out";
1052  } else if (root == "/Pixel/PixelBarrel" || root == "/Pixel/PixelEndcap" ) {
1053  initialize("Inside");
1054  m_zone = "In";
1055  } else {
1056  std::cerr << "Services can not be placed in this volume!!!! " << root << std::endl;
1057  }
1058  m_nframe = 0;
1059 }
1060 
1061 void GeoPixelServices::initialize(const std::string& a)
1062 {
1063  //
1064  // Here I inizialize the geometry information contained in the vectors
1065  //
1066 
1067  //
1068  // Loop over the service elements:
1069  //
1070  int NServices = m_gmt_mgr->PixelServiceNFrame(a);
1071  for(int ii = 0; ii<NServices ; ii++) {
1072  //
1073  // If the element is attached to a layer/disk check if the LD is present.
1074  //
1075  int LD = m_gmt_mgr->PixelServiceLD(a, ii);
1076  //
1077  // C counts from zero. So the LDs are 0,1,2. -1 correspond to a
1078  // service which is not attached to any LD.
1079  //
1080  if(LD != -1) m_gmt_mgr->SetCurrentLD(LD);
1081  if(LD ==-1 || m_gmt_mgr->isLDPresent()) {
1082  double zpos,halflength;
1083 //
1084 // Retrieve/calculate the parameters for the volume.
1085 //
1086 // Here the atlsim logic has to be interpreted, as this is going into
1087 // the structure of the PBOI bank that I'm using
1088 //
1089  std::string mat = m_gmt_mgr->PixelServiceMaterial(a, ii);
1090  double* r = m_gmt_mgr->PixelServiceR(a, ii);
1091  double* z = m_gmt_mgr->PixelServiceZ(a, ii);
1092  //
1093  // If zin is 0... (within 10^-5) this is a volume symmetric around
1094  // the origin
1095  //
1096  if(fabs(z[0]) < 0.000001) {
1097  zpos = 0.;
1098  halflength = fabs(z[1])-m_epsilon;
1099  } else {
1100  halflength = fabs(z[1]-z[0])/2.-m_epsilon;
1101  zpos = (z[1]+z[0])/2.+m_epsilon/2.;
1102  }
1103  //
1104  // Push the object into the vectors: (twice if needed)
1105  //
1106  //
1107  //
1108  bool twovolumes;
1109  twovolumes = zpos > 0.00001 && r[0] >0.;
1110  // only once for the inside endcaps as I already have two endcaps!
1111  if(m_gmt_mgr->isEndcap() && a == "Inside") twovolumes = false;
1112  m_rmin.push_back(fabs(r[0]));
1113  m_rmax.push_back(r[1]);
1114  m_zpos.push_back(zpos);
1115  m_halflength.push_back(halflength);
1116  m_material.push_back(mat);
1117  if(twovolumes) {
1118  m_rmin.push_back(fabs(r[0]));
1119  m_rmax.push_back(r[1]);
1120  m_zpos.push_back(-zpos);
1121  m_halflength.push_back(halflength);
1122  m_material.push_back(mat);
1123  }
1124  delete[] r;
1125  delete[] z;
1126  }
1127  //
1128  // Delete r and z...
1129  //
1130  }
1131 }
1132 
1133 GeoVPhysVol* GeoPixelServices::Build( ) {
1134  const GeoMaterial* serviceMat = m_mat_mgr->getMaterial(m_material[m_nframe]);
1135  //
1136  // Dimensions: (m_nframe set with teh SetCylinder method)
1137  //
1138  double rmin = m_rmin[m_nframe];
1139  double rmax = m_rmax[m_nframe];
1140  double halflength = m_halflength[m_nframe];
1141  const GeoTube* serviceTube = new GeoTube(rmin,rmax,halflength);
1142  std::string logName;
1143  if(m_gmt_mgr->isBarrel() ) logName = m_zone+"Brl";
1144  else logName = m_zone+"EC";
1145  logName = logName+std::to_string(m_nframe);
1146  GeoLogVol* theService = new GeoLogVol(logName,serviceTube,serviceMat);
1147  GeoPhysVol* servicePhys = new GeoPhysVol(theService);
1148  return servicePhys;
1149 }
1150 
1151 //---------------------------------------------------//
1152 // //
1153 // GeoPixelSiCrystal //
1154 // //
1155 //---------------------------------------------------//
1156 
1157 //
1158 // This class builds one Si Crystal to be placed in one module
1159 //
1160 // The information on which layer to build is retrieved by the Geometry Manager
1161 //
1162 // Contained by: PixelModule_log
1163 //
1164 // Contains: nothing
1165 //
1166 
1167 using namespace InDetDD;
1168 
1171  bool isBLayer)
1172  : GeoVPixelFactory (ddmgr, mgr)
1173 {
1174  //
1175  //Builds the design for this crystal
1176  m_isBLayer = isBLayer;
1177  //SiDetectorDesign::Axis etaAxis = SiDetectorDesign::zAxis;
1178  //SiDetectorDesign::Axis phiAxis = SiDetectorDesign::yAxis;
1179  //SiDetectorDesign::Axis depthAxis = SiDetectorDesign::xAxis;
1180  double thickness = m_gmt_mgr->PixelBoardThickness();
1181  int CircPerCol = m_gmt_mgr->DesignCircuitsPerColumn();
1182  int CircPerRow = m_gmt_mgr->DesignCircuitsPerRow();
1183  int CellRowPerCirc = m_gmt_mgr->DesignCellRowsPerCircuit(isBLayer);
1184  int CellColPerCirc = m_gmt_mgr->DesignCellColumnsPerCircuit(isBLayer);
1185  int DiodeRowPerCirc = m_gmt_mgr->DesignDiodeRowsPerCircuit(isBLayer);
1186  int DiodeColPerCirc = m_gmt_mgr->DesignDiodeColumnsPerCircuit(isBLayer);
1187 
1188  // Add the matrix in the same way as from AGDD...
1189  //
1190  //double startRP = -m_gmt_mgr->DesignRPActiveArea()/2.;
1191  //double startZ = -m_gmt_mgr->DesignZActiveArea()/2.;
1192  //double ColSize = m_gmt_mgr->DesignZActiveArea()/m_gmt_mgr->DesignCircuitsPerRow();
1193  double bigEtaPitch = m_gmt_mgr->DesignPitchZ(isBLayer) + m_gmt_mgr->DesignGapZ()/2;
1194  double phiPitch = m_gmt_mgr->DesignPitchRP(isBLayer);
1195  double etaPitch = m_gmt_mgr->DesignPitchZ(isBLayer);
1196 
1197 
1198  std::shared_ptr<const PixelDiodeMatrix> normalCell = PixelDiodeMatrix::construct(phiPitch, etaPitch);
1199  std::shared_ptr<const PixelDiodeMatrix> bigCell = PixelDiodeMatrix::construct(phiPitch, bigEtaPitch);
1200 
1201  std::shared_ptr<const PixelDiodeMatrix> singleChipRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
1202  bigCell,
1203  std::move(normalCell),
1204  DiodeColPerCirc-2,
1205  bigCell);
1206 
1207  std::shared_ptr<const PixelDiodeMatrix> singleRow = PixelDiodeMatrix::construct(PixelDiodeMatrix::etaDir,
1208  nullptr, std::move(singleChipRow), CircPerRow, nullptr);
1209 
1210  std::shared_ptr<const PixelDiodeMatrix> fullMatrix = PixelDiodeMatrix::construct(PixelDiodeMatrix::phiDir,
1211  nullptr, std::move(singleRow), DiodeRowPerCirc, nullptr);
1212 
1213  std::unique_ptr<PixelModuleDesign> p_barrelDesign2 = std::make_unique<PixelModuleDesign>(thickness,
1214  CircPerCol,
1215  CircPerRow,
1216  CellColPerCirc,
1217  CellRowPerCirc,
1218  DiodeColPerCirc,
1219  DiodeRowPerCirc,
1220  fullMatrix,
1222 
1223  // Multiple connections (ganged pixels)
1224  if (m_gmt_mgr->NumberOfEmptyRows() > 0) {
1225  int minRow = m_gmt_mgr->EmptyRows(0);
1226  int maxRow = minRow;
1227 
1228 
1229  for (int iConnect = 0; iConnect < m_gmt_mgr->NumberOfEmptyRows(); iConnect++){
1230  minRow = std::min(minRow, m_gmt_mgr->EmptyRows(iConnect));
1231  minRow = std::min(minRow, m_gmt_mgr->EmptyRowConnections(iConnect));
1232  maxRow = std::max(maxRow, m_gmt_mgr->EmptyRows(iConnect));
1233  maxRow = std::max(minRow, m_gmt_mgr->EmptyRowConnections(iConnect));
1234  }
1235 
1236  std::vector <int> connections(maxRow-minRow+1);
1237 
1238  // We fill them all with a one to one correspondence first.
1239  for (unsigned int iRow = 0; iRow < connections.size(); iRow++){
1240  connections[iRow] = iRow + minRow;
1241  }
1242 
1243  // Now make the connections.
1244  for (int iConnect = 0; iConnect < m_gmt_mgr->NumberOfEmptyRows(); iConnect++){
1245  connections[m_gmt_mgr->EmptyRows(iConnect)-minRow] = m_gmt_mgr->EmptyRowConnections(iConnect);
1246  }
1247 
1248  //std::cout << "MinRow = " << minRow << std::endl;
1249  //std::cout << "MaxRow = " << maxRow << std::endl;
1250  //for (unsigned int iRow = 0; iRow < connections.size(); iRow++){
1251  // std::cout << iRow << " " << connections[iRow] << std::endl;
1252  //}
1253 
1254  p_barrelDesign2->addMultipleRowConnection(minRow, connections);
1255 
1256  } else {
1257  // No empty rows.
1258  std::cout << "GeoPixelSiCrystal: Warning - No ganged pixels" << std::endl;
1259  }
1260 
1261 
1262  m_design = m_DDmgr->addDesign(std::move(p_barrelDesign2));
1263 
1264 }
1266  //
1267  // Dimensions
1268  //
1269  double length = m_gmt_mgr->PixelBoardLength();
1270  double thickness = m_gmt_mgr->PixelBoardThickness();
1271  double width = m_gmt_mgr->PixelBoardWidth();
1272  const GeoMaterial* siMat = m_mat_mgr->getMaterial("std::Silicon");
1273  const GeoBox* siBox = new GeoBox(thickness/2.,width/2.,length/2.);
1274  std::string logname;
1275  if(m_isBLayer) logname = "siBLayLog";
1276  else logname = "siLog";
1277  GeoLogVol* theSi = new GeoLogVol(logname,siBox,siMat);
1278  GeoFullPhysVol* siPhys = new GeoFullPhysVol(theSi);
1279  //
1280  // Add this to the list of detector elements:
1281  //
1282  int brl_ec=0;
1283  //
1284  // Build the Identifier for the silicon:
1285  //
1286  if(m_gmt_mgr->isBarrel() ) brl_ec = 0;
1287  if(m_gmt_mgr->isEndcap() ) brl_ec = 2*m_gmt_mgr->GetSide();
1288  const PixelID *ppp = m_gmt_mgr->getIdHelper();
1289  Identifier idwafer;
1290  if(brl_ec == 0) {
1291  idwafer = ppp->wafer_id(brl_ec,m_gmt_mgr->GetLD(),m_gmt_mgr->Phi(),m_gmt_mgr->Eta());
1292  } else {
1293  int phimod;
1294  //
1295  // This is evaluating the phimod. It's a bit complicated as I have to
1296  // assign the numbers corresponding to a counter-clockwise rotation
1297  // in the disk reference frame. For the (eta) positive endcap I just
1298  // have to match the start position with the start of the rotation.
1299  //
1300  if(brl_ec == 2) {
1301  phimod = m_gmt_mgr->Phi()*2 + m_gmt_mgr->Eta();
1302  } else {
1303  //
1304  // The (eta) negative) endcap is more complicated, as there is an extra
1305  // rotation of the endcap as a whole around Y
1306  //
1307  phimod = 48-m_gmt_mgr->Phi()*2-m_gmt_mgr->Eta()-2;
1308  if (phimod == -1) phimod = 47;
1309  }
1310 
1311  idwafer = ppp->wafer_id(brl_ec,m_gmt_mgr->GetLD(),phimod,0);
1312  }
1313  m_id=idwafer;
1314 
1315  SiDetectorElement * element = new SiDetectorElement(idwafer, m_design, siPhys, m_gmt_mgr->commonItems());
1316  // Add conditions: (do it here as eventually they will come from the cond DB)
1317  //SiliconConditions conditions(m_gmt_mgr->Temperature(m_isBLayer), m_gmt_mgr->Voltage(m_isBLayer), 0.);
1318  //element->setSiliconConditions(conditions);
1319  // Pass on G3ComptibleDigits option.
1320  // NO LONGER POSSIBLE. DC1 not supported anyway.
1321  // element->setG3CompatibleOrientation(m_gmt_mgr->G3CompatibleDigits());
1322  // add the element to the manager
1323  m_DDmgr->addDetectorElement(element);
1324  return siPhys;
1325 }
1326 
1327 //---------------------------------------------------//
1328 // //
1329 // GeoPixelSubDisk //
1330 // //
1331 //---------------------------------------------------//
1332 
1333 
1336  GeoPixelSiCrystal & theSensor)
1337  : GeoVPixelFactory (ddmgr, mgr),
1338  m_theSensor(theSensor)
1339 {
1340  //
1341  // Define the log volume in the constructor, so I do it only once.
1342  //
1343 
1344  //
1345  // Dimensions from class methods.
1346  //
1347  double rmin = RMin();
1348  double rmax = RMax();
1349  double halflength = Thickness()/2.;
1350  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
1351  const GeoTubs* SDTubs = new GeoTubs(rmin,rmax,halflength,-180.*Gaudi::Units::deg/m_gmt_mgr->PixelECNSectors1()+0.000005,360.*Gaudi::Units::deg/m_gmt_mgr->PixelECNSectors1()-0.00001);
1352  m_theSubDisk = new GeoLogVol("SubDiskLog",SDTubs,air);
1353 
1354 }
1355 
1356 
1357 GeoVPhysVol* GeoPixelSubDisk::Build( ) {
1358  GeoFullPhysVol* SDPhys = new GeoFullPhysVol(m_theSubDisk);
1359  //
1360  // Place the Si Crystal
1361  //
1362  double xpos = RMin()+m_gmt_mgr->PixelBoardLength()/2.;
1363  GeoNameTag* tag = new GeoNameTag("SiCrystal");
1364  GeoTrf::Transform3D rm = GeoTrf::RotateX3D(180.*Gaudi::Units::deg)*GeoTrf::RotateY3D(90.*Gaudi::Units::deg);
1365  GeoTrf::Translation3D pos(xpos,0.,0.);
1366  GeoAlignableTransform* xformsi = new GeoAlignableTransform(GeoTrf::Transform3D(pos*rm));
1367  SDPhys->add(tag);
1368  SDPhys->add(new GeoIdentifierTag(200) );
1369  SDPhys->add(xformsi);
1370  SDPhys->add(m_theSensor.Build() );
1371  //
1372  // Place the Hybrid
1373  //
1375  tag = new GeoNameTag("Hybrid");
1377  pos = GeoTrf::Translation3D(xpos,0.,zpos);
1378  GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(pos*rm) );
1379  SDPhys->add(tag);
1380  SDPhys->add(xform);
1381  SDPhys->add(ph.Build() );
1382 //
1383 // Place the Chip
1384 //
1386  tag = new GeoNameTag("Chip");
1388  pos = GeoTrf::Translation3D(xpos,0.,zpos);
1389  xform = new GeoTransform(GeoTrf::Transform3D(pos*rm) );
1390  SDPhys->add(tag);
1391  SDPhys->add(xform);
1392  SDPhys->add(pc.Build() );
1393  return SDPhys;
1394 }
1395 
1396 
1399 }
1400 
1402  return RMin()+sqrt(pow(m_gmt_mgr->PixelBoardLength(),2)+pow(m_gmt_mgr->PixelBoardWidth(),2));
1403 }
1404 
1406  //
1407  // This is the sum of the Thickness of the board + twice the maximum
1408  // b/w the thickness of the hybrid and that of the electronics
1409  // twice for symmetric placement.
1410  //
1411 
1413 }
1414 
1415 //---------------------------------------------------//
1416 // //
1417 // GeoPixelTubeCables //
1418 // //
1419 //---------------------------------------------------//
1420 
1421 
1424  : GeoVPixelFactory (ddmgr, mgr)
1425 {
1426  //
1427  // Define the log volume in the constructor, so I do it only once.
1428  //
1429 
1430  //
1431  // Length is in the db
1432  //
1433  double halflength = m_gmt_mgr->PixelLadderHalfLength();
1434  //
1435  // The width is the maximum among the componenst widths
1436  //
1439  //
1440  // The thickness has to be calculated
1441  //
1442  double thickness = this->Thickness();
1443  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
1444  const GeoBox* solBox = new GeoBox(thickness*0.5,width*0.5,halflength+m_epsilon);
1445  m_theBox = new GeoLogVol("TubeCablesLog",solBox,air);
1446 
1447 }
1448 
1449 
1450 GeoVPhysVol* GeoPixelTubeCables::Build( ) {
1451  GeoPhysVol* TCPhys = new GeoPhysVol(m_theBox);
1452  //
1453  // Place the Ladder Structure. Don't understand why this is going in the
1454  // tube & cables section...
1455  //
1457  GeoNameTag* tag = new GeoNameTag("LadderStructure");
1458  GeoVPhysVol* ladderstructPhys = pls.Build() ;
1459  double xpos = 0.5*(-this->Thickness()+m_gmt_mgr->PixelLadderThickness());
1460  GeoTrf::Translate3D pos(xpos,0.,0.);
1461  GeoTransform* xform = new GeoTransform(pos);
1462  TCPhys->add(tag);
1463  TCPhys->add(xform);
1464  TCPhys->add(ladderstructPhys);
1465  //
1466  // Place the cables... ouch!
1467  //
1468  // I do it in a symmetric way, assuming that the routing of the
1469  // central module is done half on the right and half on the left.
1470  // thus I have 7 cables running on each side.
1471  //
1473  double xcabshift = 0.;
1474  for(int ii = 0; ii <= m_gmt_mgr->PixelNModule()/2; ii++) {
1475  pc.SetModuleNumber(ii);
1476  double zcabpos = m_gmt_mgr->PixelCableZMax()-pc.Length()/2.+m_epsilon/2.;
1477  xcabshift += pc.Thickness()/2.;
1478  double xcabpos = - this->Thickness()/2. + m_gmt_mgr->PixelLadderThickness()+xcabshift;
1479  //
1480  // Place the cables on both sides.
1481  // piling them up. this is slightly different from what in G3
1482  // where the cables are not piled up, I don't see a good reason for
1483  // that. In G3 there is an empty space b/w the cable from the center
1484  // and the cable from the first module, as the shift is not calculated
1485  // in the same way.
1486  //
1487  xcabshift += pc.Thickness()/2.;
1488  GeoTrf::Translate3D cablepos(xcabpos,0.,zcabpos);
1489  GeoTransform* xform = new GeoTransform(cablepos);
1490  GeoNameTag *tag = new GeoNameTag("Cable");
1491  //
1492  // Left side
1493  //
1494  GeoVPhysVol *cablePhys1 = pc.Build();
1495  TCPhys->add(tag);
1496  TCPhys->add(xform);
1497  // TCPhys->add(new GeoIdentifierTag(ii) );
1498  TCPhys->add(cablePhys1);
1499  //
1500  // Right side
1501  //
1502  GeoVPhysVol *cablePhys2 = pc.Build();
1503  cablepos = GeoTrf::Translate3D(xcabpos,0.,-zcabpos);
1504  xform = new GeoTransform(cablepos);
1505  TCPhys->add(tag);
1506  TCPhys->add(xform);
1507  // TCPhys->add(new GeoIdentifierTag(ii+100) );
1508  TCPhys->add(cablePhys2);
1509  }
1510 
1511  return TCPhys;
1512 }
1513 
1514 
1516  //
1517  // The thickness of the box is calculated starting from the thickness of
1518  // its components: Ladder + cables
1519  //
1520  double thick = m_gmt_mgr->PixelLadderThickness()+
1522  return thick;
1523 }
1524 
1525 
1526 
1527 
1528 //---------------------------------------------------//
1529 // //
1530 // GeoVPixelFactor //
1531 // //
1532 //---------------------------------------------------//
1533 
1535 
1538  m_gmt_mgr (mgr),
1539  m_mat_mgr (m_gmt_mgr->getMaterialManager()),
1540  m_DDmgr (ddmgr),
1541  m_epsilon(0.0001)
1542 {
1543 }
1544 
1546 {}
1547 
1548 
1549 //---------------------------------------------------//
1550 // //
1551 // OraclePixGeoManager //
1552 // //
1553 //---------------------------------------------------//
1554 
1555 
1557 
1558 
1559 using namespace std;
1560 
1562  : m_eta(0),
1563  m_phi(0),
1564  m_currentLD(0),
1565  m_BarrelEndcap(0),
1566  m_side(0),
1567  m_services(true),
1568  m_g3CompatibleDigits(false),
1569  m_initialLayout(false),
1570  m_dc1Geometry(false),
1571  m_alignable(true),
1572  m_commonItems(nullptr),
1573  m_pDDmgr(nullptr),
1574  m_pMatMgr(nullptr)
1575 {
1576 
1577 
1578  // Get service locator from Bootstrap
1579  ISvcLocator* svcLocator = Gaudi::svcLocator(); // from Bootstrap
1580 
1581  ATH_MSG_DEBUG("Using ORACLE PIXEL GEOMETRY MANAGER");
1582 
1583  // Get the DetStore
1584  SmartIF<StoreGateSvc> detStore{svcLocator->service("DetectorStore")};
1585  if (!detStore.isValid()) ATH_MSG_FATAL("Could not locate DetectorStore");
1586  m_pDetStore = detStore.get();
1587 
1588  SmartIF<IRDBAccessSvc> rdbSvc{svcLocator->service("RDBAccessSvc")};
1589  if (!rdbSvc.isValid()) ATH_MSG_FATAL("Could not locate RDBAccessSvc");
1590 
1591 
1592  // Get version tag and node for Pixel.
1593  DecodeVersionKey versionKey("Pixel");
1594  const std::string& detectorKey = versionKey.tag();
1595  const std::string& detectorNode = versionKey.node();
1596 
1597  m_versionTag = rdbSvc->getChildTag("Pixel", versionKey.tag(), versionKey.node());
1598 
1599 
1601 //
1602 // Gets the structures from the det store
1603 //
1605 
1606  ATH_MSG_INFO("Retrieving Record Sets from database ...");
1607 
1608  DecodeVersionKey versionKeyAtlas("Pixel");
1609  m_atls = rdbSvc->getRecordsetPtr("AtlasMother",versionKeyAtlas.tag(), versionKeyAtlas.node());
1610  m_PixelBarrelGeneral = rdbSvc->getRecordsetPtr("PixelBarrelGeneral", detectorKey, detectorNode);
1611  m_PixelBarrelService = rdbSvc->getRecordsetPtr("PixelBarrelService", detectorKey, detectorNode);
1612  m_PixelCommon = rdbSvc->getRecordsetPtr("PixelCommon", detectorKey, detectorNode);
1613  m_PixelDisk = rdbSvc->getRecordsetPtr("PixelDisk", detectorKey, detectorNode);
1614  m_PixelEndcapGeneral = rdbSvc->getRecordsetPtr("PixelEndcapGeneral", detectorKey, detectorNode);
1615  m_PixelEndcapService = rdbSvc->getRecordsetPtr("PixelEndcapService", detectorKey, detectorNode);
1616  m_PixelLayer = rdbSvc->getRecordsetPtr("PixelLayer", detectorKey, detectorNode);
1617  m_PixelModule = rdbSvc->getRecordsetPtr("PixelModule", detectorKey, detectorNode);
1618  m_PixelStave = rdbSvc->getRecordsetPtr("PixelStave", detectorKey, detectorNode);
1619 
1620 
1621  // These are for the design
1622  m_pxbi = rdbSvc->getRecordsetPtr("PXBI", detectorKey, detectorNode);
1623  m_pxei = rdbSvc->getRecordsetPtr("PXEI", detectorKey, detectorNode);
1624  m_pdch = rdbSvc->getRecordsetPtr("PDCH", detectorKey, detectorNode);
1625  m_pxbd = rdbSvc->getRecordsetPtr("PXBD", detectorKey, detectorNode);
1626  m_plor = rdbSvc->getRecordsetPtr("PLOR", detectorKey, detectorNode);
1627  m_plrn = rdbSvc->getRecordsetPtr("PLRN", detectorKey, detectorNode);
1628 
1629  ATH_MSG_INFO("... Record Sets retrieved.");
1630 
1631  // cache the number of inner frames
1632 
1633  m_barrelInFrames = (*m_PixelBarrelGeneral)[0]->getInt("NFRAMEIN");
1634  m_endcapInFrames = (*m_PixelEndcapGeneral)[0]->getInt("NFRAMEIN");
1635  //
1636  // Get the mat manager from the store:
1637  //
1638  StoredMaterialManager* materialManager = nullptr;
1639  if (StatusCode::SUCCESS == m_pDetStore->retrieve(materialManager, std::string("MATERIALS"))) {
1640  m_pMatMgr = materialManager;
1641  }
1642  //
1643  // Print the version number for the barrel and endcap geometry (from NOVA)
1644  //
1645  //cout << "Instantiating Pixel Detector" << endl;
1646  //cout << "Barrel Version " << this->PixelBarrelMajorVersion() << "." << this->PixelBarrelMinorVersion() << endl;
1647  //cout << "Endcap Version " << this->PixelEndcapMajorVersion() << "." << this->PixelEndcapMinorVersion() << endl;
1648 }
1649 
1651 {
1652  return m_pMatMgr;
1653 }
1654 
1655 
1657 //
1658 // Setting of Layer/Disk and Barrel/EndCap
1659 //
1662 {
1663  if(isBarrel() ) {
1664  if(i <= PixelBarrelNLayer()) {
1665  m_currentLD=i;
1666  } else {
1667  cout << "Layer set out of bounds, defaulting it to 0" << endl;
1668  m_currentLD = 0;
1669  std::cout<<" Current layer set to "<<i<<std::endl;
1670  }
1671  }
1672  if(isEndcap() ) {
1673  if (i<= PixelEndcapNDisk() ) {
1674  m_currentLD=i;
1675  } else {
1676  cout << "Disk set out of bounds, defaulting it to 0" << endl;
1677  m_currentLD = 0;
1678  std::cout<<" Current disk set to "<<i<<std::endl;
1679  }
1680  }
1681 }
1682 
1683 
1684 
1686  //cout << "Setting Barrel" << endl;
1687  m_BarrelEndcap = 0;
1688 }
1690  m_BarrelEndcap = 1;
1691  //cout << "Setting Endcap" << endl;
1692 }
1694 //
1695 // Check if the current layer/disk has to be retrieved
1696 // By default in MySQL all the three layers have to be retrieved
1697 // If m_initialLayout is true we ignore NOVA for layer/disk 1.
1698 // For initial layout layer=1 and disk=1 (2nd layer and disk) is missing.
1699 //
1702  const std::string uscore("_");
1703  if(isBarrel()) {
1704  if (m_initialLayout && m_currentLD == 1) return false;
1705  std::string a=uscore+std::to_string(m_currentLD);
1706  return (*m_PixelBarrelGeneral)[0]->getInt("USELAYER"+a) == 1;
1707  }
1708  if(isEndcap() ) {
1709  if (m_initialLayout && m_currentLD == 1) return false;
1710  std::string a=uscore+std::to_string(m_currentLD);
1711  return (*m_PixelEndcapGeneral)[0]->getInt("USEDISK"+a) == 1;
1712  }
1713  return false;
1714 }
1715 
1716 
1718  return m_BarrelEndcap == 0;
1719 }
1721  return m_BarrelEndcap == 1;
1722  return false;
1723 }
1725 //
1726 // Calculate Thickness. This is used for the materials
1727 // which thickness is given in % of r.l.
1728 //
1730 double OraclePixGeoManager::CalculateThickness(double tck,const string& mat) {
1731  GeoIntrusivePtr<const GeoMaterial> material{m_pMatMgr->getMaterial(mat)};
1732  double rl = material->getRadLength();
1733  return -1.*rl*tck/100.;
1734 }
1736 //
1737 // Si Boards Parameters:
1738 //
1741 {
1742  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("BOARDWIDTH")*Gaudi::Units::cm;
1743  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("BOARDWIDTH")*Gaudi::Units::cm;
1744  return 0.;
1745 }
1747 {
1748  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("BOARDLENGTH")*Gaudi::Units::cm;
1749  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("BOARDLENGTH")*Gaudi::Units::cm;
1750  return 0.;
1751 }
1753 {
1754  if (m_dc1Geometry && isBarrel() && (m_currentLD == 0)) {
1755  return 200*Gaudi::Units::micrometer;
1756  }
1757  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("BOARDTHICK")*Gaudi::Units::cm;
1758  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("BOARDTHICK")*Gaudi::Units::cm;
1759  return 0.;
1760 }
1762 {
1763  if(isEndcap()) return (*m_pxei)[m_currentLD]->getDouble("DRACTIVE")*Gaudi::Units::cm;
1764  if(isBarrel()) return (*m_pxbi)[m_currentLD]->getDouble("DZELEB")*Gaudi::Units::cm;
1765  return 0.;
1766 }
1768 //
1769 // Hybrid Parameters:
1770 //
1773 {
1774  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("HYBRIDWIDTH")*Gaudi::Units::cm;
1775  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("HYBRIDWIDTH")*Gaudi::Units::cm;
1776  return 0.;
1777 }
1779 {
1780  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("HYBRIDLENGTH")*Gaudi::Units::cm;
1781  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("HYBRIDLENGTH")*Gaudi::Units::cm;
1782  return 0.;
1783 }
1785 {
1786  double thick=0.;
1787  string mat;
1788  if(isBarrel()){
1789  // bad data name in db; here is worked around. Should be DXHYBR
1790  thick =(*m_PixelModule)[m_currentLD]->getDouble("HYBRIDTHICK");
1791  mat = "pix::Hybrid";
1792  }
1793  if(isEndcap()){
1794  thick =(*m_PixelModule)[m_currentLD+3]->getDouble("HYBRIDTHICK");
1795  mat = "std::Silicon";
1796  }
1797  // if it is negative is given in % of r.l.
1798  if(thick > 0.) {
1799  return thick*Gaudi::Units::cm;
1800  }
1801  return CalculateThickness(thick,mat);
1802 
1803 }
1805 //
1806 // Chip Parameters:
1807 //
1809 
1811 {
1812  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("CHIPWIDTH")*Gaudi::Units::cm;
1813  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("CHIPWIDTH")*Gaudi::Units::cm;
1814  return 0.;
1815 }
1817 {
1818  if(isBarrel())return (*m_PixelModule)[m_currentLD]->getDouble("CHIPLENGTH")*Gaudi::Units::cm;
1819  if(isEndcap())return (*m_PixelModule)[m_currentLD+3]->getDouble("CHIPLENGTH")*Gaudi::Units::cm;
1820  return 0.;
1821 }
1823 {
1824  if(isBarrel()) return (*m_PixelModule)[m_currentLD]->getDouble("CHIPGAP")*Gaudi::Units::cm;
1825  if(isEndcap()) return (*m_PixelModule)[m_currentLD+3]->getDouble("CHIPGAP")*Gaudi::Units::cm;
1826  return 0.;
1827 }
1829  double thick=0.;
1830  string mat;
1831  if(isBarrel()){
1832  thick =(*m_PixelModule)[m_currentLD]->getDouble("CHIPTHICK");
1833  mat = "pix::Chip";
1834  }
1835  if(isEndcap()){
1836  thick =(*m_PixelModule)[m_currentLD+3]->getDouble("CHIPTHICK");
1837  mat = "std::Silicon";
1838  }
1839  // if it is negative is given in % of r.l.
1840  if(thick > 0.) {
1841  return thick*Gaudi::Units::cm;
1842  }
1843  return CalculateThickness(thick,mat);
1844 
1845 }
1846 
1848 //
1849 // Pixel Disks carbon structure
1850 //
1853  if(a == "Inner") {
1854  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP1RMIN")*Gaudi::Units::cm;
1855  } else if (a == "Central") {
1856  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP2RMIN")*Gaudi::Units::cm;
1857  }
1858  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP3RMIN")*Gaudi::Units::cm;
1859 }
1860 
1862  if(a == "Inner") {
1863  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP1RMAX")*Gaudi::Units::cm;
1864  } else if (a == "Central") {
1865  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP2RMAX")*Gaudi::Units::cm;
1866  } else {
1867  return (*m_PixelDisk)[m_currentLD]->getDouble("SUP3RMAX")*Gaudi::Units::cm;
1868  }
1869 }
1870 
1872  double tck;
1873  int imat;
1874  string mat[4] = {"std::Berillia","std::Carbon","pix::ECSevices","pix::Disk"} ;
1875  if(a == "Inner") {
1876  tck = (*m_PixelDisk)[m_currentLD]->getDouble("SUP1THICK");
1877  imat =(*m_PixelDisk)[m_currentLD]->getInt("SUP1MAT")-1;
1878  } else if (a == "Central") {
1879  tck = (*m_PixelDisk)[m_currentLD]->getDouble("SUP2THICK");
1880  imat =(*m_PixelDisk)[m_currentLD]->getInt("SUP2MAT")-1;
1881  } else {
1882  tck = (*m_PixelDisk)[m_currentLD]->getDouble("SUP3THICK");
1883  imat =(*m_PixelDisk)[m_currentLD]->getInt("SUP3MAT")-1;
1884  }
1885  if(tck>0.) {
1886  return tck*Gaudi::Units::cm;
1887  }
1888  return CalculateThickness(tck,mat[imat]);
1889 }
1891  string mat[4] = {"std::Berillia","std::Carbon","pix::ECSevices","pix::Disk"} ;
1892  int imat;
1893  if(a == "Inner") {
1894  imat = (*m_PixelDisk)[m_currentLD]->getInt("SUP1MAT")-1;
1895  } else if (a == "Central") {
1896  imat = (*m_PixelDisk)[m_currentLD]->getInt("SUP2MAT")-1;
1897  } else {
1898  imat = (*m_PixelDisk)[m_currentLD]->getInt("SUP3MAT")-1;
1899  }
1900  return mat[imat];
1901 }
1902 
1903 
1905 //
1906 // Central Services (PBOI)
1907 //
1909 //
1910 // This is complicated in the DB...
1911 // If Rmin < 0 this means that the cylinder has to be placed only once
1912 // So I return RMin with its sign, for further processing by the service
1913 // methods.
1914 // If RMax is <0 the thickness is given in % of r.l. which have to be
1915 // calculated by the method calculatethickness
1916 //
1917 // If Zmin and Zmax have DIFFERENT sign, then the thickness is given in
1918 // % of r.l....
1919 //
1920 
1922  if(isBarrel() ) {
1923  if(a == "Inside") return (*m_PixelBarrelGeneral)[0]->getInt("NFRAMEIN");
1924  if(a == "Outside") return (*m_PixelBarrelGeneral)[0]->getInt("NFRAMEOUT");
1925  }
1926  if(isEndcap() ) {
1927  if(a == "Inside") return (*m_PixelEndcapGeneral)[0]->getInt("NFRAMEIN");
1928  if(a == "Outside") return (*m_PixelEndcapGeneral)[0]->getInt("NFRAMEOUT");
1929  }
1930  return 0;
1931 }
1932 
1934  double rmin=0.;
1935  double rmax=0.;
1936  double *r = new double[2];
1937  if(isBarrel()) {
1938  if(a == "Inside") {
1939  rmin = (*m_PixelBarrelService)[n]->getDouble("RIN");
1940  rmax = (*m_PixelBarrelService)[n]->getDouble("ROUT");
1941  }
1942  else {
1943  rmin = (*m_PixelBarrelService)[n+m_barrelInFrames]->getDouble("RIN");
1944  rmax = (*m_PixelBarrelService)[n+m_barrelInFrames]->getDouble("ROUT");
1945  }
1946  }
1947  if(isEndcap()) {
1948  if(a == "Inside") {
1949  rmin = (*m_PixelEndcapService)[n]->getDouble("RIN");
1950  rmax = (*m_PixelEndcapService)[n]->getDouble("ROUT");
1951  }
1952  else {
1953  rmin = (*m_PixelEndcapService)[n+m_endcapInFrames]->getDouble("RIN");
1954  rmax = (*m_PixelEndcapService)[n+m_endcapInFrames]->getDouble("ROUT");
1955  }
1956  }
1957  // If this is negative this is the thickness of the cyl in % of r.l.
1958  r[0] = rmin*Gaudi::Units::cm;
1959  if(rmax > 0) {
1960  r[1] = rmax*Gaudi::Units::cm;
1961  } else {
1962  string material = PixelServiceMaterial(a,n);
1963  r[1] = fabs(rmin*Gaudi::Units::cm)+CalculateThickness(rmax,material);
1964  }
1965  return r;
1966 }
1967 
1968 
1970  double* z = new double[2];
1971  if(isBarrel()) {
1972  if(a == "Inside") {
1973  z[0] = (*m_PixelBarrelService)[n]->getDouble("ZIN");
1974  z[1] = (*m_PixelBarrelService)[n]->getDouble("ZOUT");
1975  }
1976  else {
1977  z[0] = (*m_PixelBarrelService)[n+m_barrelInFrames]->getDouble("ZIN");
1978  z[1] = (*m_PixelBarrelService)[n+m_barrelInFrames]->getDouble("ZOUT");
1979  }
1980  }
1981  if(isEndcap()) {
1982  if(a == "Inside") {
1983  z[0] = (*m_PixelEndcapService)[n]->getDouble("ZIN");
1984  z[1] = (*m_PixelEndcapService)[n]->getDouble("ZOUT");
1985  }
1986  else {
1987  z[0] = (*m_PixelEndcapService)[n+m_endcapInFrames]->getDouble("ZIN");
1988  z[1] = (*m_PixelEndcapService)[n+m_endcapInFrames]->getDouble("ZOUT");
1989  }
1990  }
1991  z[0] = z[0] *Gaudi::Units::cm;
1992  if(z[0]*(z[1]) > -0.000000001) { // same sign and z[0] > 0.
1993  z[1] = z[1] *Gaudi::Units::cm;
1994  } else {
1995  string material = PixelServiceMaterial(a,n);
1996  z[1] = z[0] * (1 + CalculateThickness(z[1],material)/fabs(z[0]));
1997  }
1998  if(isEndcap() && a == "Inside" ) { // Translate to the ecnter of EndCap
1999  double center = ((*m_PixelEndcapGeneral)[0]->getDouble("ZMAX")+(*m_PixelEndcapGeneral)[0]->getDouble("ZMIN"))/2.*Gaudi::Units::cm;
2000  z[0] = z[0]-center;
2001  z[1] = z[1]-center;
2002  }
2003  return z;
2004 }
2005 
2006 
2008  if(isBarrel()) {
2009  if(a == "Inside") {return (*m_PixelBarrelService)[n]->getInt("LAYERNUM")-1;}
2010  else {return (*m_PixelBarrelService)[n+m_barrelInFrames]->getInt("LAYERNUM")-1;}
2011  }
2012  if(isEndcap()) {
2013  if(a == "Inside") {return (*m_PixelEndcapService)[n]->getInt("LAYERNUM")-1;}
2014  else {return (*m_PixelEndcapService)[n+m_endcapInFrames]->getInt("LAYERNUM")-1;}
2015  }
2016  return 0;
2017 }
2018 
2020  int imat;
2021  if(isBarrel()) {
2022  string mat[11] = {
2023  "std::Berillia",
2024  "std::Carbon",
2025  "pix::Services",
2026  "pix::Titanium",
2027  "pix::MatPP11",
2028  "pix::MatPP12",
2029  "pix::MatPP13",
2030  "pix::MatPP14",
2031  "pix::MatPP15",
2032  "pix::MatPP16",
2033  "pix::MatPP17"};
2034  if(a == "Inside") {imat = (*m_PixelBarrelService)[n]->getInt("MATERIAL")-1;}
2035  else {imat = (*m_PixelBarrelService)[n+m_barrelInFrames]->getInt("MATERIAL")-1;}
2036  return mat[imat];
2037  }
2038  if(isEndcap()) {
2039  string mat[4] = {"std::Berillia","std::Carbon","pix::ECServices","pix::Disk"};
2040  if(a == "Inside") {imat = (*m_PixelEndcapService)[n]->getInt("MATERIAL")-1;}
2041  else {imat =(*m_PixelEndcapService)[n+m_endcapInFrames]->getInt("MATERIAL")-1;}
2042  return mat[imat];
2043  }
2044  return "None";
2045 }
2047  return m_services;
2048 }
2049 
2051  return m_g3CompatibleDigits;
2052 }
2053 
2055  return m_initialLayout;
2056 }
2057 
2059  return m_dc1Geometry;
2060 }
2061 
2063  return m_alignable;
2064 }
2065 
2066 
2068  if(m_pDDmgr == nullptr) {
2069  //
2070  // retrieve the pointer to the DD manager
2071  //
2072  StatusCode sc = m_pDetStore->retrieve(m_pDDmgr);
2073  if (sc.isFailure()) {
2074  std::cout << "Cannot retrieve PixelDetectorManager" << std::endl;
2075  }
2076  }
2077  return m_pDDmgr;
2078 }
2079 
2080 
2083 }
2084 
2086  return m_elementsObjectName;
2087 }
2088 
2091 }
2092 
2094  return m_designsObjectName;
2095 }
2096 
2099 }
2100 
2102  return m_barrelDesignName;
2103 }
2104 
2107 }
2108 
2110  return m_endcapDesignName;
2111 }
2112 
2115 }
2116 
2118  return m_blayerDesignName;
2119 }
2120 
2121 
2123 {
2124  double tck = (*m_PixelStave)[0]->getDouble("SUPPORTTHICK");
2125  if( tck > 0.) {
2126  return tck*Gaudi::Units::cm;
2127  } else {
2128  return CalculateThickness(tck,"pix::Ladder");
2129  }
2130 }
2131 
2133 {
2134  double tck = (*m_PixelDisk)[m_currentLD]->getDouble("CABLETHICK");
2135  if( tck > 0.) {
2136  return tck*Gaudi::Units::cm;
2137  } else {
2138  return CalculateThickness(tck,"pix::ECCables");
2139  }
2140 }
2141 
2143 {
2144  double ActiveArea = DesignRPActiveArea();
2145  double GapRP = DesignGapRP();
2146  double pitchRP = DesignPitchRP(isBLayer);
2147  return static_cast<int>((ActiveArea - GapRP)/pitchRP + 0.5);
2148 }
2149 
2151 {
2152  double ActiveArea = DesignZActiveArea();
2153  double GapZ = DesignGapZ();
2154  double pitchZ = DesignPitchZ(isBLayer);
2155  int CPR = DesignCircuitsPerRow();
2156  return static_cast<int>((ActiveArea - GapZ*CPR)/(CPR*pitchZ) + 0.5);
2157 }
2158 
2160 {
2161  double ActiveArea = DesignRPActiveArea();
2162  double pitchRP = DesignPitchRP(isBLayer);
2163  return static_cast<int>((ActiveArea)/pitchRP + 0.5);
2164 }
2165 
2167 {
2168  double ActiveArea = DesignZActiveArea();
2169  double GapZ = DesignGapZ();
2170  double pitchZ = DesignPitchZ(isBLayer) ;
2171  int CPR = DesignCircuitsPerRow();
2172  return static_cast<int>((ActiveArea - GapZ*CPR)/(CPR*pitchZ) + 0.5);
2173 }
2174 
2175  // Ganged Pixels
2177 {
2178  return static_cast<int>((*m_pdch)[0]->getInt("NYCONNEC"));
2179 }
2180 
2182 {
2183  const std::string a=std::string("_")+std::to_string(index);
2184  return static_cast<int>((*m_pdch)[0]->getInt("JYEMPTY"+a)) - 1;
2185 }
2186 
2188 {
2189  const std::string a=std::string("_")+std::to_string(index);
2190  return static_cast<int>((*m_pdch)[0]->getInt("JYCONNEC"+a)) - 1;
2191 }
2192 
2193 double OraclePixGeoManager::Voltage(bool isBLayer){
2194  // override B-layer voltage for DC1 geometry by
2195  // value in old DB (approx ratio of thicknesses (200/250 = 0.8)
2196  // 97.1*0.8 = 77.68. In Nova its 77.7.
2197  if (isBLayer && m_dc1Geometry) return 77.7*Gaudi::Units::volt;
2198  if(isBLayer) { return (*m_plor)[0]->getDouble("VOLTAGE")*Gaudi::Units::volt;}
2199  return (*m_plor)[1]->getDouble("VOLTAGE")*Gaudi::Units::volt;
2200 }
2201 
2202 double OraclePixGeoManager::Temperature(bool isBLayer){
2203  if(isBLayer) { return (*m_plor)[0]->getDouble("TEMPC")*Gaudi::Units::kelvin+Gaudi::Units::STP_Temperature;}
2204  return (*m_plor)[1]->getDouble("TEMPC")*Gaudi::Units::kelvin+Gaudi::Units::STP_Temperature;
2205 }
2206 
2209 {
2210  return m_commonItems;
2211 }
2212 
2213 
2214 const InDetDD::SiCommonItems *
2216 {
2217  return m_commonItems;
2218 }
2219 
2220 
2221 void
2223 {
2225 }
2226 
2227 const PixelID *
2229 {
2230  return dynamic_cast<const PixelID *>(m_commonItems->getIdHelper());
2231 }
2232 
2233 
2234 //---------------------------------------------------//
2235 // //
2236 // PixelGeometryManager //
2237 // //
2238 //---------------------------------------------------//
2239 
2240 using namespace std;
2241 
2243  AthMessaging("PixelGeometryManager")
2244 {
2245 }
2247 {
2248 }
PixelGeoDC2::OraclePixGeoManager::SetEndcap
virtual void SetEndcap() override
Definition: PixelDetectorDC1DC2.cxx:1689
InDetDD::SiNumerology::setNumRingsForDisk
void setNumRingsForDisk(int disk, int nRings)
Definition: SiNumerology.cxx:48
PixelGeoDC2::PixelGeometryManager::DoServices
virtual bool DoServices()=0
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
PixelGeoDC2::OraclePixGeoManager::GetDetElementName
virtual std::string GetDetElementName() override
Definition: PixelDetectorDC1DC2.cxx:2085
PixelGeoDC2::OraclePixGeoManager::NumberOfEmptyRows
virtual int NumberOfEmptyRows() override
Definition: PixelDetectorDC1DC2.cxx:2176
PixelGeoDC2::OraclePixGeoManager::PixelChipGap
virtual double PixelChipGap() override
Definition: PixelDetectorDC1DC2.cxx:1822
beamspotman.r
def r
Definition: beamspotman.py:676
PixelGeoDC2::PixelGeometryManager::PixelEndcapRMin
virtual double PixelEndcapRMin()=0
PixelGeoDC2::GeoPixelCable::m_moduleNumber
int m_moduleNumber
Definition: PixelDetectorDC1DC2.h:94
PixelGeoDC2::PixelGeometryManager::PixelChipGap
virtual double PixelChipGap()=0
PixelGeoDC2::GeoPixelServices::m_nframe
int m_nframe
Definition: PixelDetectorDC1DC2.h:298
PixelGeoDC2::GeoPixelSiCrystal
Definition: PixelDetectorDC1DC2.h:310
PixelGeoDC2::OraclePixGeoManager::DesignGapRP
virtual double DesignGapRP() override
Definition: PixelDetectorDC1DC2.h:1121
PixelGeoDC2::GeoVPixelFactory::m_gmt_mgr
PixelGeometryManager * m_gmt_mgr
Definition: PixelDetectorDC1DC2.h:51
PixelGeoDC2::PixelGeometryManager::EmptyRows
virtual int EmptyRows(int index)=0
PixelGeoDC2::OraclePixGeoManager::m_initialLayout
bool m_initialLayout
Definition: PixelDetectorDC1DC2.h:658
PixelGeoDC2::PixelGeometryManager::PixelLadderThickness
virtual double PixelLadderThickness()=0
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
PixelGeoDC2::PixelGeometryManager::DesignCellColumnsPerCircuit
virtual int DesignCellColumnsPerCircuit(bool isBLayer)=0
PixelGeoDC2::OraclePixGeoManager::PixelChipThickness
virtual double PixelChipThickness() override
Definition: PixelDetectorDC1DC2.cxx:1828
PixelGeoDC2::PixelGeometryManager::DesignCircuitsPerRow
virtual int DesignCircuitsPerRow()=0
InDetDD::SiDetectorManager::numerology
const SiNumerology & numerology() const
Access Numerology.
Definition: SiDetectorManager.h:126
PixelGeoDC2::GeoPixelModule::Thickness
double Thickness()
Definition: PixelDetectorDC1DC2.cxx:971
PixelGeoDC2::OraclePixGeoManager::isEndcap
virtual bool isEndcap() override
Definition: PixelDetectorDC1DC2.cxx:1720
PixelGeoDC2::GeoPixelCable::Length
double Length()
Definition: PixelDetectorDC1DC2.cxx:139
max
#define max(a, b)
Definition: cfImp.cxx:41
PixelGeoDC2::GeoVPixelFactory::m_DDmgr
InDetDD::PixelDetectorManager * m_DDmgr
Definition: PixelDetectorDC1DC2.h:53
PixelGeoDC2::OraclePixGeoManager::m_PixelEndcapGeneral
IRDBRecordset_ptr m_PixelEndcapGeneral
Definition: PixelDetectorDC1DC2.h:621
PixelGeoDC2::OraclePixGeoManager::EmptyRowConnections
virtual int EmptyRowConnections(int index) override
Definition: PixelDetectorDC1DC2.cxx:2187
PixelGeoDC2::OraclePixGeoManager::m_plrn
IRDBRecordset_ptr m_plrn
Definition: PixelDetectorDC1DC2.h:641
PixelGeoDC2::GeoVPixelFactory::m_epsilon
const double m_epsilon
Definition: PixelDetectorDC1DC2.h:54
PixelGeoDC2::PixelGeometryManager::PixelServiceLD
virtual int PixelServiceLD(std::string, int)=0
PixelGeoDC2::PixelGeometryManager::PixelECCarbonMaterial
virtual std::string PixelECCarbonMaterial(std::string)=0
PixelGeoDC2::GeoPixelSiCrystal::getID
Identifier getID()
Definition: PixelDetectorDC1DC2.h:326
PixelGeoDC2::PixelGeometryManager::PixelServiceMaterial
virtual std::string PixelServiceMaterial(std::string, int)=0
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
PixelGeoDC2::GeoPixelSubDisk::Thickness
double Thickness()
Definition: PixelDetectorDC1DC2.cxx:1405
PixelGeoDC2::PixelGeometryManager::PixelModuleDrDistance
virtual double PixelModuleDrDistance()=0
PixelGeoDC2::OraclePixGeoManager::PixelBoardThickness
virtual double PixelBoardThickness() override
Definition: PixelDetectorDC1DC2.cxx:1752
python.PhysicalConstants.STP_Temperature
float STP_Temperature
Definition: PhysicalConstants.py:119
PixelGeoDC2::OraclePixGeoManager::EmptyRows
virtual int EmptyRows(int index) override
Definition: PixelDetectorDC1DC2.cxx:2181
PixelGeoDC2::PixelGeometryManager::PixelLadderHalfLength
virtual double PixelLadderHalfLength()=0
PixelGeoDC2::GeoPixelLadderStruct
Definition: PixelDetectorDC1DC2.h:235
PixelGeoDC2::GeoPixelModule::m_id
Identifier m_id
Definition: PixelDetectorDC1DC2.h:275
PixelGeoDC2::GeoPixelServices::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:1133
PixelGeoDC2::GeoPixelSiCrystal::m_isBLayer
bool m_isBLayer
Definition: PixelDetectorDC1DC2.h:320
PixelGeoDC2::OraclePixGeoManager::m_endcapDesignName
std::string m_endcapDesignName
Definition: PixelDetectorDC1DC2.h:684
PixelGeoDC2::GeoVPixelFactory::GeoVPixelFactory
GeoVPixelFactory(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
Definition: PixelDetectorDC1DC2.cxx:1536
PixelGeoDC2::PixelGeometryManager::EmptyRowConnections
virtual int EmptyRowConnections(int index)=0
PixelGeoDC2::GeoPixelServices::m_material
std::vector< std::string > m_material
Definition: PixelDetectorDC1DC2.h:296
InDetDD::SiCommonItems::getIdHelper
const AtlasDetectorID * getIdHelper() const
Definition: SiCommonItems.h:83
InDetDD::SiNumerology::setNumLayers
void setNumLayers(int nLayers)
Definition: SiNumerology.cxx:27
PixelAthClusterMonAlgCfg.zmin
zmin
Definition: PixelAthClusterMonAlgCfg.py:169
index
Definition: index.py:1
PixelGeoDC2::PixelGeometryManager::PixelModuleShiftFlag
virtual double PixelModuleShiftFlag(int)=0
PixelGeoDC2::OraclePixGeoManager::getMaterialManager
virtual StoredMaterialManager * getMaterialManager() override
Definition: PixelDetectorDC1DC2.cxx:1650
PixelGeoDC2::GeoPixelDiskSupports::m_zpos
std::vector< double > m_zpos
Definition: PixelDetectorDC1DC2.h:146
PixelGeoDC2
Definition: PixelDetectorDC1DC2.h:31
mat
GeoMaterial * mat
Definition: LArDetectorConstructionTBEC.cxx:55
InDetDD::SiNumerology::addEndcap
void addEndcap(int id)
Definition: SiNumerology.cxx:102
PixelDetectorDC1DC2.h
PixelGeoDC2::OraclePixGeoManager::PixelEndcapNDisk
int PixelEndcapNDisk() override
Definition: PixelDetectorDC1DC2.h:1052
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
PixelGeoDC2::OraclePixGeoManager::m_currentLD
int m_currentLD
Definition: PixelDetectorDC1DC2.h:645
PixelGeoDC2::PixelGeometryManager::PixelECCablesDistance
virtual double PixelECCablesDistance()=0
PixelGeoDC2::PixelGeometryManager::PixelHybridLength
virtual double PixelHybridLength()=0
PixelGeoDC2::GeoPixelDiskSupports::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:395
PixelGeoDC2::OraclePixGeoManager::m_endcapInFrames
int m_endcapInFrames
Definition: PixelDetectorDC1DC2.h:649
PixelGeoDC2::OraclePixGeoManager::GetDesignName
virtual std::string GetDesignName() override
Definition: PixelDetectorDC1DC2.cxx:2093
PixelGeoDC2::GeoPixelSiCrystal::GeoPixelSiCrystal
GeoPixelSiCrystal(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, bool isBLayer)
Definition: PixelDetectorDC1DC2.cxx:1169
PixelGeoDC2::OraclePixGeoManager::DesignCellColumnsPerCircuit
virtual int DesignCellColumnsPerCircuit(bool isBLayer) override
Definition: PixelDetectorDC1DC2.cxx:2150
PixelGeoDC2::OraclePixGeoManager::m_services
bool m_services
Definition: PixelDetectorDC1DC2.h:652
PixelGeoDC2::OraclePixGeoManager::PixelChipWidth
virtual double PixelChipWidth() override
Definition: PixelDetectorDC1DC2.cxx:1810
PixelGeoDC2::GeoPixelSubDisk::GeoPixelSubDisk
GeoPixelSubDisk(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoPixelSiCrystal &theSensor)
Definition: PixelDetectorDC1DC2.cxx:1334
deg
#define deg
Definition: SbPolyhedron.cxx:17
PixelGeoDC2::GeoVPixelFactory::m_mat_mgr
StoredMaterialManager * m_mat_mgr
Definition: PixelDetectorDC1DC2.h:52
PixelGeoDC2::GeoPixelDisk::m_theDisk
GeoIntrusivePtr< GeoLogVol > m_theDisk
Definition: PixelDetectorDC1DC2.h:127
PixelGeoDC2::OraclePixGeoManager::PixelBarrelNLayer
virtual int PixelBarrelNLayer() override
Definition: PixelDetectorDC1DC2.h:956
PixelGeoDC2::PixelGeometryManager::SetPhi
virtual void SetPhi(int phi)=0
InDetDD::SiDetectorManager::addDesign
const SiDetectorDesign * addDesign(std::unique_ptr< const SiDetectorDesign > &&)
Access to module design; returns an observer pointer.
Definition: SiDetectorManager.cxx:134
PixelGeoDC2::PixelGeometryManager::PixelHybridWidth
virtual double PixelHybridWidth()=0
PixelGeoDC2::OraclePixGeoManager::SetDesignName
virtual void SetDesignName(std::string) override
Definition: PixelDetectorDC1DC2.cxx:2089
PixelGeoDC2::GeoPixelModule::GeoPixelModule
GeoPixelModule(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoPixelSiCrystal &theSensor)
Definition: PixelDetectorDC1DC2.cxx:908
makeDTCalibBlob_pickPhase.pd
pd
Definition: makeDTCalibBlob_pickPhase.py:342
DecodeVersionKey::node
const std::string & node() const
Return the version node.
Definition: DecodeVersionKey.cxx:97
PixelGeoDC2::GeoPixelLayer::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:820
PixelGeoDC2::OraclePixGeoManager::DesignPitchRP
virtual double DesignPitchRP(bool isBLayer) override
Definition: PixelDetectorDC1DC2.h:1102
PixelGeoDC2::PixelGeometryManager::PixelECCablesRMin
virtual double PixelECCablesRMin()=0
PixelGeoDC2::GeoPixelSubDisk
Definition: PixelDetectorDC1DC2.h:334
PixelGeoDC2::PixelGeometryManager::PixelEndcapNDisk
virtual int PixelEndcapNDisk()=0
sendEI_SPB.root
root
Definition: sendEI_SPB.py:34
PixelGeoDC2::PixelGeometryManager::PixelLadderTilt
virtual double PixelLadderTilt()=0
PixelGeoDC2::OraclePixGeoManager::m_pdch
IRDBRecordset_ptr m_pdch
Definition: PixelDetectorDC1DC2.h:638
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
PixelGeoDC2::OraclePixGeoManager::m_PixelEndcapService
IRDBRecordset_ptr m_PixelEndcapService
Definition: PixelDetectorDC1DC2.h:622
PixelGeoDC2::OraclePixGeoManager::isBarrel
virtual bool isBarrel() override
Definition: PixelDetectorDC1DC2.cxx:1717
PixelGeoDC2::GeoPixelDisk::GeoPixelDisk
GeoPixelDisk(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
Definition: PixelDetectorDC1DC2.cxx:222
PixelGeoDC2::PixelGeometryManager::PixelServiceR
virtual double * PixelServiceR(std::string, int)=0
PixelGeoDC2::OraclePixGeoManager::DC1Geometry
virtual bool DC1Geometry() const override
Definition: PixelDetectorDC1DC2.cxx:2058
PixelGeoDC2::PixelGeometryManager::~PixelGeometryManager
virtual ~PixelGeometryManager()
Definition: PixelDetectorDC1DC2.cxx:2246
PixelGeoDC2::OraclePixGeoManager::m_versionTag
std::string m_versionTag
Definition: PixelDetectorDC1DC2.h:688
PixelGeoDC2::PixelGeometryManager::PixelBarrelRMin
virtual double PixelBarrelRMin()=0
PixelGeoDC2::GeoPixelSiCrystal::m_design
const InDetDD::SiDetectorDesign * m_design
Definition: PixelDetectorDC1DC2.h:319
PixelGeoDC2::OraclePixGeoManager::PixelServiceNFrame
virtual int PixelServiceNFrame(std::string) override
Definition: PixelDetectorDC1DC2.cxx:1921
PixelGeoDC2::PixelGeometryManager::commonItems
virtual InDetDD::SiCommonItems * commonItems()=0
PixelGeoDC2::OraclePixGeoManager::m_pxbi
IRDBRecordset_ptr m_pxbi
Definition: PixelDetectorDC1DC2.h:627
PixelGeoDC2::GeoPixelDisk::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:241
PixelGeoDC2::PixelGeometryManager::isEndcap
virtual bool isEndcap()=0
PixelGeoDC2::OraclePixGeoManager::m_PixelBarrelService
IRDBRecordset_ptr m_PixelBarrelService
Definition: PixelDetectorDC1DC2.h:618
PixelGeoDC2::GeoPixelEndCap::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:449
PixelGeoDC2::PixelGeometryManager::SetCurrentLD
virtual void SetCurrentLD(int i)=0
PixelID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: PixelID.h:364
PixelGeoDC2::OraclePixGeoManager::m_g3CompatibleDigits
bool m_g3CompatibleDigits
Definition: PixelDetectorDC1DC2.h:655
PixelGeoDC2::PixelGeometryManager::Phi
virtual int Phi()=0
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
PixelGeoDC2::PixelGeometryManager::DesignPitchRP
virtual double DesignPitchRP(bool isBLayer)=0
python.SystemOfUnits.kelvin
int kelvin
Definition: SystemOfUnits.py:241
PixelGeoDC2::OraclePixGeoManager::PixelECCarbonRMin
virtual double PixelECCarbonRMin(std::string) override
Definition: PixelDetectorDC1DC2.cxx:1852
PixelGeoDC2::GeoPixelDiskSupports::m_nframe
int m_nframe
Definition: PixelDetectorDC1DC2.h:148
PixelGeoDC2::OraclePixGeoManager::m_alignable
bool m_alignable
Definition: PixelDetectorDC1DC2.h:664
PixelGeoDC2::OraclePixGeoManager::GetLayer0ModuleName
virtual std::string GetLayer0ModuleName() override
Definition: PixelDetectorDC1DC2.cxx:2117
PixelGeoDC2::GeoPixelServices::m_zone
std::string m_zone
Definition: PixelDetectorDC1DC2.h:297
PixelGeoDC2::GeoPixelDiskSupports::m_rmax
std::vector< double > m_rmax
Definition: PixelDetectorDC1DC2.h:146
TRT::Hit::side
@ side
Definition: HitInfo.h:83
PixelGeoDC2::GeoPixelTubeCables::Thickness
double Thickness()
Definition: PixelDetectorDC1DC2.cxx:1515
PixelGeoDC2::OraclePixGeoManager::m_pxei
IRDBRecordset_ptr m_pxei
Definition: PixelDetectorDC1DC2.h:632
PixelGeoDC2::PixelGeometryManager::PixelECSiDz1
virtual double PixelECSiDz1()=0
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
PixelGeoDC2::PixelGeometryManager::PixelServiceZ
virtual double * PixelServiceZ(std::string, int)=0
PixelGeoDC2::GeoPixelSiCrystal::m_id
Identifier m_id
Definition: PixelDetectorDC1DC2.h:318
PixelGeoDC2::OraclePixGeoManager::PixelBoardWidth
virtual double PixelBoardWidth() override
Definition: PixelDetectorDC1DC2.cxx:1740
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
PixelGeoDC2::PixelGeometryManager::GetSide
virtual int GetSide()=0
PixelGeoDC2::OraclePixGeoManager::Temperature
virtual double Temperature(bool isBLayer) override
Definition: PixelDetectorDC1DC2.cxx:2202
PixelGeoDC2::PixelGeometryManager::isLDPresent
virtual bool isLDPresent()=0
PixelGeoDC2::PixelGeometryManager::PixelBarrelRMax
virtual double PixelBarrelRMax()=0
PixelGeoDC2::OraclePixGeoManager::getIdHelper
const PixelID * getIdHelper() override
Definition: PixelDetectorDC1DC2.cxx:2228
PixelGeoDC2::PixelGeometryManager::PixelCableWidth
virtual double PixelCableWidth()=0
PixelGeoDC2::PixelGeometryManager::PixelBarrelHalfLength
virtual double PixelBarrelHalfLength()=0
PixelGeoDC2::OraclePixGeoManager::m_PixelStave
IRDBRecordset_ptr m_PixelStave
Definition: PixelDetectorDC1DC2.h:625
PixelGeoDC2::GeoPixelHybrid
Definition: PixelDetectorDC1DC2.h:200
PixelGeoDC2::OraclePixGeoManager::m_PixelCommon
IRDBRecordset_ptr m_PixelCommon
Definition: PixelDetectorDC1DC2.h:619
PixelGeoDC2::PixelGeometryManager::PixelBoardLength
virtual double PixelBoardLength()=0
PixelGeoDC2::OraclePixGeoManager::DesignCircuitsPerRow
virtual int DesignCircuitsPerRow() override
Definition: PixelDetectorDC1DC2.h:1137
InDetDD_Defs.h
PixelGeoDC2::OraclePixGeoManager::SetEndcapModuleName
virtual void SetEndcapModuleName(std::string) override
Definition: PixelDetectorDC1DC2.cxx:2105
PixelDetectorManager.h
PixelGeoDC2::PixelGeometryManager::PixelBoardWidth
virtual double PixelBoardWidth()=0
PixelGeoDC2::OraclePixGeoManager::SetLayer0ModuleName
virtual void SetLayer0ModuleName(std::string) override
Definition: PixelDetectorDC1DC2.cxx:2113
PixelGeoDC2::OraclePixGeoManager::DesignRPActiveArea
virtual double DesignRPActiveArea() override
Definition: PixelDetectorDC1DC2.h:1095
PixelGeoDC2::GeoPixelTubeCables
Definition: PixelDetectorDC1DC2.h:357
AthMessaging::msgLvl
bool msgLvl(const MSG::Level lvl) const
Test the output level.
Definition: AthMessaging.h:151
PixelGeoDC2::GeoPixelModule::m_theSensor
GeoPixelSiCrystal & m_theSensor
Definition: PixelDetectorDC1DC2.h:276
PixelGeoDC2::PixelGeometryManager::SetNeg
virtual void SetNeg()=0
PixelGeoDC2::GeoPixelSubDisk::RMax
double RMax()
Definition: PixelDetectorDC1DC2.cxx:1401
PixelGeoDC2::PixelGeometryManager::DesignGapZ
virtual double DesignGapZ()=0
PixelGeoDC2::OraclePixGeoManager::DesignCellRowsPerCircuit
virtual int DesignCellRowsPerCircuit(bool isBLayer) override
Definition: PixelDetectorDC1DC2.cxx:2142
lumiFormat.i
int i
Definition: lumiFormat.py:85
PixelGeoDC2::OraclePixGeoManager::PixelHybridWidth
virtual double PixelHybridWidth() override
Definition: PixelDetectorDC1DC2.cxx:1772
z
#define z
CaloSwCorrections.phimod
def phimod(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:203
PixelGeoDC2::OraclePixGeoManager::DesignDiodeRowsPerCircuit
virtual int DesignDiodeRowsPerCircuit(bool isBLayer) override
Definition: PixelDetectorDC1DC2.cxx:2159
PixelGeoDC2::OraclePixGeoManager::PixelECCablesThickness
virtual double PixelECCablesThickness() override
Definition: PixelDetectorDC1DC2.cxx:2132
PixelGeoDC2::GeoPixelDiskSupports::m_material
std::vector< std::string > m_material
Definition: PixelDetectorDC1DC2.h:147
beamspotman.n
n
Definition: beamspotman.py:731
PixelGeoDC2::GeoPixelDiskSupports::m_halflength
std::vector< double > m_halflength
Definition: PixelDetectorDC1DC2.h:146
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SiCommonItems.h
PixelGeoDC2::GeoPixelDiskSupports
Definition: PixelDetectorDC1DC2.h:137
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
PixelGeoDC2::PixelGeometryManager::getIdHelper
virtual const PixelID * getIdHelper()=0
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:73
PixelGeoDC2::GeoPixelSubDisk::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:1357
PixelGeoDC2::GeoPixelModule::getID
Identifier getID()
Definition: PixelDetectorDC1DC2.cxx:1005
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
PixelGeoDC2::PixelGeometryManager::PixelECCablesRMax
virtual double PixelECCablesRMax()=0
PixelGeoDC2::PixelGeometryManager::SetPos
virtual void SetPos()=0
DecodeVersionKey
This is a helper class to query the version tags from GeoModelSvc and determine the appropriate tag a...
Definition: DecodeVersionKey.h:18
PixelGeoDC2::PixelGeometryManager::PixelDiskRMin
virtual double PixelDiskRMin()=0
PixelGeoDC2::PixelGeometryManager::SetBarrel
virtual void SetBarrel()=0
PixelGeoDC2::OraclePixGeoManager::GetEndcapModuleName
virtual std::string GetEndcapModuleName() override
Definition: PixelDetectorDC1DC2.cxx:2109
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
PixelGeoDC2::OraclePixGeoManager::SetDetElementName
virtual void SetDetElementName(std::string) override
Definition: PixelDetectorDC1DC2.cxx:2081
PixelGeoDC2::PixelGeometryManager::DesignCircuitsPerColumn
virtual int DesignCircuitsPerColumn()=0
PixelGeoDC2::GeoPixelSubDisk::RMin
double RMin()
Definition: PixelDetectorDC1DC2.cxx:1397
PixelGeoDC2::OraclePixGeoManager::PixelECCarbonMaterial
virtual std::string PixelECCarbonMaterial(std::string) override
Definition: PixelDetectorDC1DC2.cxx:1890
PixelGeoDC2::PixelGeometryManager::SetEndcap
virtual void SetEndcap()=0
PixelGeoDC2::GeoPixelECCable::m_theECCable
GeoIntrusivePtr< GeoLogVol > m_theECCable
Definition: PixelDetectorDC1DC2.h:167
PixelGeoDC2::GeoPixelChip
Definition: PixelDetectorDC1DC2.h:103
PixelGeoDC2::GeoPixelDiskSupports::SetCylinder
void SetCylinder(int n)
Definition: PixelDetectorDC1DC2.h:143
PixelGeoDC2::OraclePixGeoManager::m_dc1Geometry
bool m_dc1Geometry
Definition: PixelDetectorDC1DC2.h:661
PixelAthClusterMonAlgCfg.zmax
zmax
Definition: PixelAthClusterMonAlgCfg.py:169
DecodeVersionKey::tag
const std::string & tag() const
Return version tag.
Definition: DecodeVersionKey.cxx:91
PixelGeoDC2::PixelGeometryManager::PixelModuleAngleSign
virtual double PixelModuleAngleSign(int)=0
PixelGeoDC2::GeoPixelCable::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:123
PixelGeoDC2::OraclePixGeoManager::m_designsObjectName
std::string m_designsObjectName
Definition: PixelDetectorDC1DC2.h:680
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
PixelGeoDC2::GeoPixelLadder::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:705
PixelGeoDC2::PixelGeometryManager::GetLD
virtual int GetLD()=0
PixelGeoDC2::GeoPixelDisk::RMax
double RMax()
Definition: PixelDetectorDC1DC2.cxx:317
PixelGeoDC2::OraclePixGeoManager::PixelECCarbonRMax
virtual double PixelECCarbonRMax(std::string) override
Definition: PixelDetectorDC1DC2.cxx:1861
PixelGeoDC2::OraclePixGeoManager::PixelHybridLength
virtual double PixelHybridLength() override
Definition: PixelDetectorDC1DC2.cxx:1778
PixelGeoDC2::OraclePixGeoManager::m_PixelLayer
IRDBRecordset_ptr m_PixelLayer
Definition: PixelDetectorDC1DC2.h:623
PixelGeoDC2::OraclePixGeoManager::m_pMatMgr
StoredMaterialManager * m_pMatMgr
Definition: PixelDetectorDC1DC2.h:673
PixelGeoDC2::OraclePixGeoManager::m_plor
IRDBRecordset_ptr m_plor
Definition: PixelDetectorDC1DC2.h:640
PixelGeoDC2::PixelGeometryManager::PixelECCarbonRMin
virtual double PixelECCarbonRMin(std::string)=0
PixelGeoDC2::GeoPixelServices::GeoPixelServices
GeoPixelServices(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, const std::string &)
Definition: PixelDetectorDC1DC2.cxx:1040
python.SystemOfUnits.micrometer
int micrometer
Definition: SystemOfUnits.py:71
PixelGeoDC2::OraclePixGeoManager::PixelServiceZ
virtual double * PixelServiceZ(std::string, int) override
Definition: PixelDetectorDC1DC2.cxx:1969
python.SystemOfUnits.volt
int volt
Definition: SystemOfUnits.py:204
PixelGeoDC2::PixelGeometryManager::PixelECCarbonRMax
virtual double PixelECCarbonRMax(std::string)=0
PixelGeoDC2::PixelGeometryManager::PixelModulePosition
virtual double PixelModulePosition(int)=0
PixelGeoDC2::PixelGeometryManager::PixelEndcapZMin
virtual double PixelEndcapZMin()=0
PixelGeoDC2::OraclePixGeoManager::m_PixelBarrelGeneral
IRDBRecordset_ptr m_PixelBarrelGeneral
Definition: PixelDetectorDC1DC2.h:617
PixelGeoDC2::OraclePixGeoManager::m_atls
IRDBRecordset_ptr m_atls
Definition: PixelDetectorDC1DC2.h:616
PixelGeoDC2::PixelGeometryManager::DesignCellRowsPerCircuit
virtual int DesignCellRowsPerCircuit(bool isBLayer)=0
PixelGeoDC2::OraclePixGeoManager::PixelServiceMaterial
virtual std::string PixelServiceMaterial(std::string, int) override
Definition: PixelDetectorDC1DC2.cxx:2019
PixelGeoDC2::PixelGeometryManager
Definition: PixelDetectorDC1DC2.h:376
AthMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AthMessaging.h:164
PixelGeoDC2::GeoPixelServices::m_zpos
std::vector< double > m_zpos
Definition: PixelDetectorDC1DC2.h:295
PixelGeoDC2::GeoPixelModule::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:929
PixelGeoDC2::GeoPixelDisk::RMin
double RMin()
Definition: PixelDetectorDC1DC2.cxx:313
InDetDD::PixelDetectorManager::addAlignableTransform
virtual void addAlignableTransform(int level, const Identifier &id, GeoAlignableTransform *xf, const GeoVFullPhysVol *child)
Add alignable transforms.
Definition: PixelDetectorManager.cxx:262
PixelGeoDC2::GeoPixelLadder::m_theSensor
GeoPixelSiCrystal & m_theSensor
Definition: PixelDetectorDC1DC2.h:225
PixelGeoDC2::OraclePixGeoManager::DesignDiodeColumnsPerCircuit
virtual int DesignDiodeColumnsPerCircuit(bool isBLayer) override
Definition: PixelDetectorDC1DC2.cxx:2166
PixelGeoDC2::OraclePixGeoManager::m_PixelDisk
IRDBRecordset_ptr m_PixelDisk
Definition: PixelDetectorDC1DC2.h:620
PixelGeoDC2::GeoPixelCable
Definition: PixelDetectorDC1DC2.h:79
min
#define min(a, b)
Definition: cfImp.cxx:40
PixelGeoDC2::GeoPixelECCable::GeoPixelECCable
GeoPixelECCable(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
Definition: PixelDetectorDC1DC2.cxx:417
InDetDD::SiNumerology::setNumDisks
void setNumDisks(int nDisks)
Definition: SiNumerology.cxx:41
PixelGeoDC2::GeoPixelBarrel
Definition: PixelDetectorDC1DC2.h:68
PixelGeoDC2::PixelGeometryManager::PixelECCarbonThickness
virtual double PixelECCarbonThickness(std::string)=0
PixelGeoDC2::PixelGeometryManager::NPixelSectors
virtual int NPixelSectors()=0
PixelGeoDC2::OraclePixGeoManager::PixelServiceLD
virtual int PixelServiceLD(std::string, int) override
Definition: PixelDetectorDC1DC2.cxx:2007
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
PixelGeoDC2::OraclePixGeoManager::DesignGapZ
virtual double DesignGapZ() override
Definition: PixelDetectorDC1DC2.h:1125
PixelGeoDC2::GeoPixelLadder::Thickness
double Thickness()
Definition: PixelDetectorDC1DC2.cxx:766
PixelGeoDC2::GeoPixelServices::NCylinders
int NCylinders()
Definition: PixelDetectorDC1DC2.h:290
InDetDD::PixelDetectorManager
Definition: PixelDetectorManager.h:47
PixelGeoDC2::GeoPixelECCable::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:436
PixelGeoDC2::GeoPixelTubeCables::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:1450
PixelGeoDC2::OraclePixGeoManager::DoServices
virtual bool DoServices() override
Definition: PixelDetectorDC1DC2.cxx:2046
InDetDD::SiNumerology::setNumPhiModulesForDiskRing
void setNumPhiModulesForDiskRing(int disk, int ring, int nPhiModules)
Definition: SiNumerology.cxx:55
PixelGeoDC2::OraclePixGeoManager::SetCurrentLD
virtual void SetCurrentLD(int i) override
Definition: PixelDetectorDC1DC2.cxx:1661
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
PixelGeoDC2::OraclePixGeoManager::OraclePixGeoManager
OraclePixGeoManager()
Definition: PixelDetectorDC1DC2.cxx:1561
InDetDD::SiCommonItems
Definition: SiCommonItems.h:45
PixelGeoDC2::GeoPixelModule
Definition: PixelDetectorDC1DC2.h:260
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
StoredMaterialManager.h
InDetDD::SiNumerology::setNumEtaModulesForLayer
void setNumEtaModulesForLayer(int layer, int nEtaModules)
Definition: SiNumerology.cxx:67
PixelGeoDC2::GeoPixelServices::ZPos
double ZPos()
Definition: PixelDetectorDC1DC2.h:292
PixelGeoDC2::GeoPixelSiCrystal::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:1265
PixelGeoDC2::OraclePixGeoManager::commonItems
virtual InDetDD::SiCommonItems * commonItems() override
Definition: PixelDetectorDC1DC2.cxx:2208
PixelGeoDC2::PixelGeometryManager::PixelRMax
virtual double PixelRMax()=0
PixelGeoDC2::GeoPixelChip::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:190
PixelGeoDC2::PixelGeometryManager::PixelECCablesThickness
virtual double PixelECCablesThickness()=0
PixelGeoDC2::PixelGeometryManager::PixelCableZMin
virtual double PixelCableZMin()=0
PixelGeoDC2::PixelGeometryManager::PixelModuleAngle
virtual double PixelModuleAngle()=0
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
PixelGeoDC2::GeoPixelServices::m_halflength
std::vector< double > m_halflength
Definition: PixelDetectorDC1DC2.h:295
PixelGeoDC2::PixelGeometryManager::PixelLadderWidth
virtual double PixelLadderWidth()=0
PixelGeoDC2::OraclePixGeoManager::isLDPresent
virtual bool isLDPresent() override
Definition: PixelDetectorDC1DC2.cxx:1701
PixelGeoDC2::GeoPixelDiskSupports::GeoPixelDiskSupports
GeoPixelDiskSupports(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
Definition: PixelDetectorDC1DC2.cxx:368
PixelGeoDC2::OraclePixGeoManager::PixelECCarbonThickness
virtual double PixelECCarbonThickness(std::string) override
Definition: PixelDetectorDC1DC2.cxx:1871
PixelGeoDC2::PixelGeometryManager::PixelServiceNFrame
virtual int PixelServiceNFrame(std::string)=0
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
PixelGeoDC2::GeoPixelCable::Thickness
double Thickness() const
Definition: PixelDetectorDC1DC2.cxx:153
DecodeVersionKey.h
PixelGeoDC2::PixelGeometryManager::DesignDiodeRowsPerCircuit
virtual int DesignDiodeRowsPerCircuit(bool isBLayer)=0
PixelGeoDC2::PixelGeometryManager::PixelBoardActiveLen
virtual double PixelBoardActiveLen()=0
PixelGeoDC2::OraclePixGeoManager::m_BarrelEndcap
int m_BarrelEndcap
Definition: PixelDetectorDC1DC2.h:646
PixelGeoDC2::OraclePixGeoManager::m_barrelDesignName
std::string m_barrelDesignName
Definition: PixelDetectorDC1DC2.h:683
SiDetectorElement.h
PixelGeoDC2::GeoPixelDisk::getPhiId
int getPhiId()
Definition: PixelDetectorDC1DC2.cxx:342
PixelGeoDC2::GeoPixelDisk::Thickness
double Thickness()
Definition: PixelDetectorDC1DC2.cxx:321
PixelGeoDC2::PixelGeometryManager::Eta
virtual int Eta()=0
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
PlotCalibFromCool.rl
rl
Definition: PlotCalibFromCool.py:529
PixelGeoDC2::GeoPixelDiskSupports::ZPos
double ZPos()
Definition: PixelDetectorDC1DC2.h:144
PixelGeoDC2::PixelGeometryManager::PixelBarrelNLayer
virtual int PixelBarrelNLayer()=0
PixelGeoDC2::GeoPixelSubDisk::m_theSensor
GeoPixelSiCrystal & m_theSensor
Definition: PixelDetectorDC1DC2.h:347
PixelGeoDC2::PixelGeometryManager::NumberOfEmptyRows
virtual int NumberOfEmptyRows()=0
PixelGeoDC2::PixelGeometryManager::PixelChipThickness
virtual double PixelChipThickness()=0
PixelGeoDC2::OraclePixGeoManager::Voltage
virtual double Voltage(bool isBLayer) override
Definition: PixelDetectorDC1DC2.cxx:2193
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
PixelGeoDC2::OraclePixGeoManager::PixelLadderThickness
virtual double PixelLadderThickness() override
Definition: PixelDetectorDC1DC2.cxx:2122
PixelDiodeMatrix.h
PixelGeoDC2::GeoPixelLayer
Definition: PixelDetectorDC1DC2.h:247
PixelGeoDC2::GeoPixelTubeCables::GeoPixelTubeCables
GeoPixelTubeCables(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr)
Definition: PixelDetectorDC1DC2.cxx:1422
PixelGeoDC2::OraclePixGeoManager::m_pxbd
IRDBRecordset_ptr m_pxbd
Definition: PixelDetectorDC1DC2.h:639
a
TList * a
Definition: liststreamerinfos.cxx:10
PixelGeoDC2::GeoPixelLadder
Definition: PixelDetectorDC1DC2.h:213
PixelGeoDC2::PixelGeometryManager::PixelECNSectors1
virtual int PixelECNSectors1()=0
PixelGeoDC2::PixelGeometryManager::PixelBoardThickness
virtual double PixelBoardThickness()=0
PixelGeoDC2::GeoPixelDisk
Definition: PixelDetectorDC1DC2.h:115
PixelGeoDC2::OraclePixGeoManager::m_elementsObjectName
std::string m_elementsObjectName
Definition: PixelDetectorDC1DC2.h:679
Base_Fragment.width
width
Definition: Sherpa_i/share/common/Base_Fragment.py:59
PixelGeoDC2::PixelGeometryManager::PixelHybridThickness
virtual double PixelHybridThickness()=0
PixelGeoDC2::OraclePixGeoManager::GetPixelDDManager
virtual InDetDD::PixelDetectorManager * GetPixelDDManager() override
Definition: PixelDetectorDC1DC2.cxx:2067
PixelGeoDC2::OraclePixGeoManager::PixelHybridThickness
virtual double PixelHybridThickness() override
Definition: PixelDetectorDC1DC2.cxx:1784
InDetDD
Message Stream Member.
Definition: FakeTrackBuilder.h:8
PixelGeoDC2::GeoPixelECCable
Definition: PixelDetectorDC1DC2.h:158
PixelModuleDesign.h
PixelGeoDC2::OraclePixGeoManager::CalculateThickness
double CalculateThickness(double, const std::string &)
Definition: PixelDetectorDC1DC2.cxx:1730
PixelGeoDC2::GeoPixelModule::Width
double Width()
Definition: PixelDetectorDC1DC2.cxx:986
PixelGeoDC2::GeoPixelHybrid::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:649
PixelGeoDC2::OraclePixGeoManager::m_pDetStore
StoreGateSvc * m_pDetStore
Definition: PixelDetectorDC1DC2.h:676
PixelGeoDC2::PixelGeometryManager::PixelChipLength
virtual double PixelChipLength()=0
PixelGeoDC2::PixelGeometryManager::PixelCableDeltaZ
virtual double PixelCableDeltaZ()=0
DEBUG
#define DEBUG
Definition: page_access.h:11
PixelGeoDC2::GeoPixelTubeCables::m_theBox
GeoIntrusivePtr< GeoLogVol > m_theBox
Definition: PixelDetectorDC1DC2.h:367
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
PixelGeoDC2::PixelGeometryManager::PixelChipWidth
virtual double PixelChipWidth()=0
PixelGeoDC2::OraclePixGeoManager::GetBarrelModuleName
virtual std::string GetBarrelModuleName() override
Definition: PixelDetectorDC1DC2.cxx:2101
StoredMaterialManager::getMaterial
virtual const GeoMaterial * getMaterial(const std::string &name)=0
PixelGeoDC2::PixelGeometryManager::isBarrel
virtual bool isBarrel()=0
InDetDD::PixelModuleDesign::addMultipleRowConnection
void addMultipleRowConnection(const int lowerRow, const std::vector< int > &connections)
Add a new multiple connection for rows: lower diode row for which the connection scheme is given vect...
Definition: PixelModuleDesign.h:266
StoredMaterialManager
This class holds one or more material managers and makes them storeable, under StoreGate.
Definition: StoredMaterialManager.h:28
PixelGeoDC2::PixelGeometryManager::PixelLayerRadius
virtual double PixelLayerRadius()=0
PixelGeoDC2::GeoPixelLadder::m_theLadder
GeoIntrusivePtr< GeoLogVol > m_theLadder
Definition: PixelDetectorDC1DC2.h:224
PixelGeoDC2::OraclePixGeoManager::DesignPitchZ
virtual double DesignPitchZ(bool isBLayer) override
Definition: PixelDetectorDC1DC2.h:1107
PixelGeoDC2::PixelGeometryManager::PixelEndcapZMax
virtual double PixelEndcapZMax()=0
PixelGeoDC2::OraclePixGeoManager::PixelServiceR
virtual double * PixelServiceR(std::string, int) override
Definition: PixelDetectorDC1DC2.cxx:1933
PixelGeoDC2::OraclePixGeoManager::m_barrelInFrames
int m_barrelInFrames
Definition: PixelDetectorDC1DC2.h:649
PixelGeoDC2::PixelGeometryManager::PixelGeometryManager
PixelGeometryManager()
Definition: PixelDetectorDC1DC2.cxx:2242
PixelGeoDC2::GeoPixelServices
Definition: PixelDetectorDC1DC2.h:284
PixelGeoDC2::OraclePixGeoManager::PixelBoardActiveLen
virtual double PixelBoardActiveLen() override
Definition: PixelDetectorDC1DC2.cxx:1761
PixelGeoDC2::GeoPixelServices::initialize
void initialize(const std::string &)
Definition: PixelDetectorDC1DC2.cxx:1061
PixelGeoDC2::OraclePixGeoManager::DesignZActiveArea
virtual double DesignZActiveArea() override
Definition: PixelDetectorDC1DC2.h:1098
PixelGeoDC2::GeoPixelEndCap
Definition: PixelDetectorDC1DC2.h:176
PixelGeoDC2::GeoPixelLadder::GeoPixelLadder
GeoPixelLadder(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoPixelSiCrystal &theSensor)
Definition: PixelDetectorDC1DC2.cxx:673
PixelGeoDC2::GeoPixelServices::m_rmax
std::vector< double > m_rmax
Definition: PixelDetectorDC1DC2.h:295
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
PixelGeoDC2::OraclePixGeoManager::G3CompatibleDigits
virtual bool G3CompatibleDigits() const override
Definition: PixelDetectorDC1DC2.cxx:2050
PixelGeoDC2::PixelGeometryManager::PixelCableZMax
virtual double PixelCableZMax()=0
PixelGeoDC2::PixelGeometryManager::PixelECSiDz2
virtual double PixelECSiDz2()=0
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
PixelGeoDC2::GeoPixelServices::SetCylinder
void SetCylinder(int n)
Definition: PixelDetectorDC1DC2.h:291
PixelGeoDC2::GeoPixelLadderStruct::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:792
PixelGeoDC2::OraclePixGeoManager::InitialLayout
virtual bool InitialLayout() const override
Definition: PixelDetectorDC1DC2.cxx:2054
PixelGeoDC2::GeoPixelModule::Length
double Length()
Definition: PixelDetectorDC1DC2.cxx:994
PixelGeoDC2::GeoPixelModule::m_theModule
GeoIntrusivePtr< GeoLogVol > m_theModule
Definition: PixelDetectorDC1DC2.h:274
PixelGeoDC2::OraclePixGeoManager::SetBarrel
virtual void SetBarrel() override
Definition: PixelDetectorDC1DC2.cxx:1685
IGeoModelSvc.h
PixelGeoDC2::GeoPixelEnvelope::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:541
PixelID
Definition: PixelID.h:67
PixelGeoDC2::OraclePixGeoManager::m_PixelModule
IRDBRecordset_ptr m_PixelModule
Definition: PixelDetectorDC1DC2.h:624
PixelGeoDC2::GeoVPixelFactory
Definition: PixelDetectorDC1DC2.h:43
PixelGeoDC2::GeoVPixelFactory::~GeoVPixelFactory
virtual ~GeoVPixelFactory()
Definition: PixelDetectorDC1DC2.cxx:1545
PixelGeoDC2::GeoPixelDiskSupports::NCylinders
int NCylinders()
Definition: PixelDetectorDC1DC2.h:142
PixelGeoDC2::OraclePixGeoManager::Alignable
virtual bool Alignable() const override
Definition: PixelDetectorDC1DC2.cxx:2062
StoreGateSvc.h
InDetDD::SiNumerology::setNumPhiModulesForLayer
void setNumPhiModulesForLayer(int layer, int nPhiModules)
Definition: SiNumerology.cxx:61
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
PixelGeoDC2::OraclePixGeoManager::m_blayerDesignName
std::string m_blayerDesignName
Definition: PixelDetectorDC1DC2.h:685
PixelGeoDC2::PixelGeometryManager::PixelNModule
virtual int PixelNModule()=0
readCCLHist.float
float
Definition: readCCLHist.py:83
MakeSliceSet.logname
logname
Definition: MakeSliceSet.py:34
PixelGeoDC2::OraclePixGeoManager::PixelChipLength
virtual double PixelChipLength() override
Definition: PixelDetectorDC1DC2.cxx:1816
PixelGeoDC2::PixelGeometryManager::PixelHalfLength
virtual double PixelHalfLength()=0
python.SystemOfUnits.pc
float pc
Definition: SystemOfUnits.py:99
PixelGeoDC2::PixelGeometryManager::DesignDiodeColumnsPerCircuit
virtual int DesignDiodeColumnsPerCircuit(bool isBLayer)=0
InDetDD::electrons
@ electrons
Definition: InDetDD_Defs.h:17
PixelGeoDC2::GeoPixelDiskSupports::m_rmin
std::vector< double > m_rmin
Definition: PixelDetectorDC1DC2.h:146
PixelGeoDC2::PixelGeometryManager::PixelRMin
virtual double PixelRMin()=0
InDetDD::SiNumerology::addBarrel
void addBarrel(int id)
Definition: SiNumerology.cxx:97
PixelGeoDC2::OraclePixGeoManager::setCommonItems
virtual void setCommonItems(InDetDD::SiCommonItems *commonItems) override
Definition: PixelDetectorDC1DC2.cxx:2222
PixelGeoDC2::PixelGeometryManager::PixelDiskPosition
virtual double PixelDiskPosition()=0
InDetDD::PixelDetectorManager::addDetectorElement
virtual void addDetectorElement(SiDetectorElement *element) override
Add elememts.
Definition: PixelDetectorManager.cxx:121
PixelGeoDC2::PixelGeometryManager::SetEta
virtual void SetEta(int eta)=0
PixelGeoDC2::PixelGeometryManager::PixelBalcony
virtual double PixelBalcony()=0
PixelGeoDC2::GeoPixelServices::m_rmin
std::vector< double > m_rmin
Definition: PixelDetectorDC1DC2.h:295
PixelGeoDC2::GeoPixelSubDisk::m_theSubDisk
GeoIntrusivePtr< GeoLogVol > m_theSubDisk
Definition: PixelDetectorDC1DC2.h:348
PixelGeoDC2::OraclePixGeoManager::PixelBoardLength
virtual double PixelBoardLength() override
Definition: PixelDetectorDC1DC2.cxx:1746
PixelGeoDC2::GeoPixelBarrel::Build
virtual GeoVPhysVol * Build() override
Definition: PixelDetectorDC1DC2.cxx:54
PixelGeoDC2::PixelGeometryManager::DesignPitchZ
virtual double DesignPitchZ(bool isBLayer)=0
PixelGeoDC2::OraclePixGeoManager::m_commonItems
InDetDD::SiCommonItems * m_commonItems
Definition: PixelDetectorDC1DC2.h:667
PixelGeoDC2::PixelGeometryManager::PixelEndcapRMax
virtual double PixelEndcapRMax()=0
PixelGeoDC2::PixelGeometryManager::PixelCableThickness
virtual double PixelCableThickness()=0
PixelGeoDC2::OraclePixGeoManager::m_pDDmgr
InDetDD::PixelDetectorManager * m_pDDmgr
Definition: PixelDetectorDC1DC2.h:670
PixelGeoDC2::OraclePixGeoManager::SetBarrelModuleName
virtual void SetBarrelModuleName(std::string) override
Definition: PixelDetectorDC1DC2.cxx:2097
Identifier
Definition: IdentifierFieldParser.cxx:14