ATLAS Offline Software
Public Member Functions | Private Member Functions | Private Attributes | List of all members
LArGeo::BarrelPresamplerConstruction Class Reference

GeoModel description of the LAr Barrel Presampler. More...

#include <BarrelPresamplerConstruction.h>

Collaboration diagram for LArGeo::BarrelPresamplerConstruction:

Public Member Functions

 BarrelPresamplerConstruction (bool fullGeo, const VDetectorParameters *params, int itb=0)
 
virtual ~BarrelPresamplerConstruction ()
 
GeoIntrusivePtr< GeoFullPhysVol > GetPositiveEnvelope ()
 
GeoIntrusivePtr< GeoFullPhysVol > GetNegativeEnvelope ()
 

Private Member Functions

void MakeEnvelope ()
 
 BarrelPresamplerConstruction (const BarrelPresamplerConstruction &)
 
BarrelPresamplerConstructionoperator= (const BarrelPresamplerConstruction &)
 

Private Attributes

const LArGeo::VDetectorParametersm_parameters
 
GeoIntrusivePtr< GeoFullPhysVol > m_psPhysicalPos {}
 
GeoIntrusivePtr< GeoFullPhysVol > m_psPhysicalNeg {}
 
bool m_fullGeo
 

Detailed Description

GeoModel description of the LAr Barrel Presampler.

Definition at line 27 of file BarrelPresamplerConstruction.h.

Constructor & Destructor Documentation

◆ BarrelPresamplerConstruction() [1/2]

LArGeo::BarrelPresamplerConstruction::BarrelPresamplerConstruction ( bool  fullGeo,
const VDetectorParameters params,
int  itb = 0 
)

Definition at line 54 of file BarrelPresamplerConstruction.cxx.

56  :
58  m_psPhysicalPos(nullptr),
59  m_psPhysicalNeg(nullptr),
60  m_fullGeo(fullGeo)
61 {
62 
63  ISvcLocator *svcLocator = Gaudi::svcLocator();
64  IMessageSvc * msgSvc;
65  if (svcLocator->service("MessageSvc", msgSvc, true )==StatusCode::FAILURE) {
66  throw std::runtime_error("Error in BarrelPresamplerConstruction, cannot access MessageSvc");
67  }
68  MsgStream log(msgSvc, "BarrelPresamplerConstruction");
69 
70 
71  log << MSG::INFO;
72 
73  log << "++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
74  log << "+ +" << std::endl;
75  log << "+ Start of Barrel PS GeoModel definition +" << std::endl;
76  log << "+ +" << std::endl;
77  log << "++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
78 
80  if (svcLocator->service("DetectorStore", detStore, false )==StatusCode::FAILURE) {
81  throw std::runtime_error("Error in LArDetectorFactory, cannot access DetectorStore");
82  }
83 
84 
85  StoredMaterialManager* materialManager = nullptr;
86  if (StatusCode::SUCCESS != detStore->retrieve(materialManager, std::string("MATERIALS"))) {
87  throw std::runtime_error("Error in BarrelPresamplerConstruction, stored MaterialManager is not found.");
88  }
89 
90  const GeoMaterial *Copper = materialManager->getMaterial("std::Copper");
91  if (!Copper) throw std::runtime_error("Error in BarrelPresamplerConstruction, std::Copper is not found.");
92 
93  const GeoMaterial *Iron = materialManager->getMaterial("std::Iron");
94  if (!Iron) throw std::runtime_error("Error in BarrelPresamplerConstruction, std::Iron is not found.");
95 
96  const GeoMaterial *Lead = materialManager->getMaterial("std::Lead");
97  if (!Lead) throw std::runtime_error("Error in BarrelPresamplerConstruction, std::Lead is not found.");
98 
99  const GeoMaterial *LAr = materialManager->getMaterial("std::LiquidArgon");
100  if (!LAr) throw std::runtime_error("Error in BarrelPresamplerConstruction, std::LiquidArgon is not found.");
101 
102  const GeoMaterial *Air = materialManager->getMaterial("std::Air");
103  if (!Air) throw std::runtime_error("Error in BarrelPresamplerConstruction, std::Air is not found.");
104 
105  const GeoMaterial *Kapton = materialManager->getMaterial("std::Kapton");
106  if (!Kapton) throw std::runtime_error("Error in BarrelPresamplerConstruction, std::Kapton is not found.");
107  const GeoMaterial *Glue = materialManager->getMaterial("LAr::Glue");
108  if (!Glue) throw std::runtime_error("Error in BarrelPresamplerConstruction, LAr::Glue is not found.");
109 
110  const GeoMaterial *G10 = materialManager->getMaterial("LAr::G10");
111  if (!G10) throw std::runtime_error("Error in BarrelPresamplerConstruction, LAr::G10 is not found.");
112 
113  const GeoMaterial *FR4 = materialManager->getMaterial("LAr::FR4");
114  if (!FR4) throw std::runtime_error("Error in BarrelPresamplerConstruction, LAr::FR4 is not found.");
115 
116  const GeoMaterial *MBMat = materialManager->getMaterial("LAr::MBMat");
117  if (!MBMat) throw std::runtime_error("Error in BarrelPresamplerConstruction, LAr::MBMat is not found.");
118 
119  const GeoMaterial *AnodeMat = materialManager->getMaterial("LAr::AnodeMat");
120  if (!AnodeMat) throw std::runtime_error("Error in BarrelPresamplerConstruction, LAr::AnodeMat is not found.");
121 
122  const GeoMaterial *CathodeMat = materialManager->getMaterial("LAr::CathodeMat");
123  if (!CathodeMat) throw std::runtime_error("Error in BarrelPresamplerConstruction, LAr::CathodeMat is not found.");
124 
125  const GeoMaterial *ConnecMat = materialManager->getMaterial("LAr::ConnecMat");
126  if (!ConnecMat) throw std::runtime_error("Error in BarrelPresamplerConstruction, LAr::ConnecMat is not found.");
127  // double rMinPresamplerMother =1385*Gaudi::Units::mm;
128  double rMinPresamplerMother =1410*Gaudi::Units::mm;
129  double rMaxPresamplerMother =1447*Gaudi::Units::mm-0.001*Gaudi::Units::mm;
130  double presamplerMother_length=1549*Gaudi::Units::mm;
131  double Phi_min=0.*Gaudi::Units::deg;
132  double Phi_span=360.*Gaudi::Units::deg;
133  int nbsectors=32;
134 
135  if (itb==1) {
136  Phi_min=-0.5*Gaudi::Units::deg;
137  Phi_span=23.5*Gaudi::Units::deg;
138  nbsectors=2;
139  }
140 
141  double mod[8][6];
142 
143  mod[0][0] = 286.4;
144  mod[0][1] = 56;
145  mod[0][2] = 56;
146  mod[0][3] = -25.;
147  mod[0][4] = 4.987;
148  mod[0][5] = 4.2;
149 
150  mod[1][0] = 295.74;
151  mod[1][1] = 64;
152  mod[1][2] = 64;
153  mod[1][3] = -12.;
154  mod[1][4] = 4.621;
155  mod[1][5] = 0.3;
156 
157  mod[2][0] = 321.1;
158  mod[2][1] = 72;
159  mod[2][2] = 72;
160  mod[2][3] = 0;
161  mod[2][4] = 4.46;
162  mod[2][5] = 0.9;
163 
164  mod[3][0] = 356.8;
165  mod[3][1] = 80;
166  mod[3][2] = 80;
167  mod[3][3] = 0;
168  mod[3][4] = 4.46;
169  mod[3][5] = 0.9;
170 
171  mod[4][0] = 404.8;
172  mod[4][1] = 88;
173  mod[4][2] = 88;
174  mod[4][3] = 0;
175  mod[4][4] = 4.6;
176  mod[4][5] = 0.9;
177 
178  mod[5][0] = 478.4;
179  mod[5][1] = 104;
180  mod[5][2] = 104;
181  mod[5][3] = 0;
182  mod[5][4] = 4.6;
183  mod[5][5] = 0.95;
184 
185  mod[6][0] = 563.2;
186  mod[6][1] = 128;
187  mod[6][2] = 128;
188  mod[6][3] = 0;
189  mod[6][4] = 4.4;
190  mod[6][5] = 1.05;
191 
192  mod[7][0] = 380.6;
193  mod[7][1] = 86;
194  mod[7][2] = 87;
195  mod[7][3] = 0;
196  mod[7][4] = 4.4;
197  mod[7][5] = 0.95;
198 
199  // Make a presampler:
200  std::string basename = "LAr::Barrel::Presampler";
201  {
202  GeoTubs *tubs = new GeoTubs(rMinPresamplerMother, rMaxPresamplerMother, presamplerMother_length,Phi_min, Phi_span);
203  GeoLogVol* logVol = new GeoLogVol(basename,tubs,LAr);
204  m_psPhysicalPos = new GeoFullPhysVol(logVol);
205  m_psPhysicalNeg = new GeoFullPhysVol(logVol);
206  }
207 
208  // Make a presampler sector:
209  if(m_fullGeo){
210  // ?
211  double epsil = 0.007*Gaudi::Units::mm;
212 
213  // contraction factor
214  double cmm = (1-0.0026)*Gaudi::Units::mm;
215 
216  double mod_leng[8];
217  for(int ii=0; ii<8; ii++ ) mod_leng[ii]=mod[ii][0]*cmm+2*epsil;
218 
219  double mod_heig[8];
220  double larheight = 13*Gaudi::Units::mm;
221 
222  double prep1_th = 1.*Gaudi::Units::mm; // bottom prepreg layer
223  double prep2_th = 4.5*Gaudi::Units::mm;
224  double smallLength = 275.6*Gaudi::Units::mm;
225  double bigLength = 277.5;
226  double prep1_height = (smallLength/2+1.)*cmm;
227  double larheight2 = larheight*cos(-mod[1][3]*Gaudi::Units::deg)*Gaudi::Units::mm;
228  mod_heig[0]= (larheight+prep1_th+prep2_th)*cmm+4*epsil;
229  mod_heig[1]= (larheight2+prep1_th+prep2_th)*cmm+5.*epsil;
230  for(int i=2; i<8; i++ ) mod_heig[i] = mod_heig[0];
231 
232  double shell_th = 0.4*Gaudi::Units::mm;
233  double rail_th = 8.6*Gaudi::Units::mm;
234  double mech_clear = 0.5*Gaudi::Units::mm;
235 
236 
237  double mb_length = 3100.3;
238  double sector_length = mb_length*cmm +9.*epsil;
239  double sector_height = mod_heig[0]+(shell_th+rail_th)*cmm+mech_clear*Gaudi::Units::mm+3*epsil;
240 
241  unsigned int nsectors=32;
242  double mod_xm = prep1_height+epsil;
243  double mod_xp = (bigLength/2+1.+prep2_th*tan((360./(2*nsectors))*Gaudi::Units::deg))*cmm;
244  double sect_xm = mod_xm+epsil;
245  double sect_xp = sect_xm+sector_height*tan((360./(2*nsectors))*Gaudi::Units::deg);
246  double rpres = 1426.*Gaudi::Units::mm;
247 
248  double zpres = -presamplerMother_length+sector_length/2+epsil;
249 
250  GeoTrd *trd = new GeoTrd(sect_xm, sect_xp, sector_length/2, sector_length/2, sector_height/2);
251 
252  GeoLogVol *logVol = new GeoLogVol (basename+"::Sector",trd,LAr);
253  GeoPhysVol *sectorPhysVol = new GeoPhysVol(logVol);
254 
255  GeoGenfun::Variable I;
256  double dphiSector = (360.*Gaudi::Units::deg)/nsectors;
257  GeoGenfun::GENFUNCTION f = dphiSector*I+0.5*dphiSector;
258  GeoXF::TRANSFUNCTION t = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),f)*GeoTrf::TranslateX3D(rpres)*GeoTrf::TranslateZ3D(zpres)*GeoTrf::RotateZ3D(90*Gaudi::Units::deg)*GeoTrf::RotateX3D(90*Gaudi::Units::deg);
259  GeoSerialTransformer *st = new GeoSerialTransformer(sectorPhysVol,&t, nbsectors);
260 
261  m_psPhysicalPos->add(st);
262  m_psPhysicalNeg->add(st);
263 
264 
265  // Now there appear to be eight different things in the sectors:
266 
267  // 1) Eight modules.
268  // 2) A protection shell
269  //-------------------------------Eight modules-------------------------------//
270  // recompute length of module 0 and 1 to have avoid overshoorting of first cathode of module 1
271  // into module 0 => reduce module 0 length by 0.5*lar_height*tan(tilt angle)
272  // and increase module 1 length by same amount
273  double delta01 = 0.5*larheight*tan(-mod[1][3]*Gaudi::Units::deg); // delta01 is >0
274  mod_leng[0]=mod_leng[0]-delta01;
275  mod_leng[1]=mod_leng[1]+delta01;
276  GeoIntrusivePtr<GeoPhysVol> pvModule[8];
277  {
278 
279  double modYPrev=0, modLenPrev=0;
280  for (int m=0;m<8;m++) {
281 
282 // double modLen=mod[m][0]*cmm+2*epsil;
283  double modLen=mod_leng[m];
284 
285 
286  double modY= (m==0) ? -sector_length/2+modLen/2+epsil : modYPrev + modLenPrev /2 + modLen/2 +epsil;
287  double modZ= (m==1) ? -sector_height/2+shell_th*cmm+mech_clear+mod_heig[0]/2+epsil+(mod_heig[0]-mod_heig[1])/2 : -sector_height/2+shell_th*cmm+mech_clear+mod_heig[0]/2+epsil;
288 
289  GeoTrd * trd = new GeoTrd(mod_xm,mod_xp,modLen/2,modLen/2,mod_heig[m]/2);
290  GeoLogVol *logVol = new GeoLogVol(basename+"::Module",trd,LAr);
291  pvModule[m] = new GeoPhysVol(logVol);
292 
293  GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(0.0, modY, modZ));
294  sectorPhysVol->add(xf);
295  sectorPhysVol->add(pvModule[m]);
296 
297  modYPrev=modY;
298  modLenPrev=modLen;
299 
300  }
301  }
302 
303  double shell_leng = mod[0][0]+mod[1][0]+mod[2][0]+mod[3][0]+mod[4][0]+mod[5][0]+mod[6][0]+mod[7][0];
304  double prot_y = (shell_leng/2)*cmm;
305  double glX = 0.*Gaudi::Units::mm;
306  double glY = -sector_length/2+prot_y+epsil;
307 
308  //-----------------------------A Protection Shell--------------------------//
309  {
310  GeoBox *box = new GeoBox((smallLength/2+1.)*cmm, (shell_leng/2)*cmm,(shell_th/2)*cmm);
311  GeoLogVol *logVol=new GeoLogVol(basename+"::ProtectionShell",box,FR4);
312  GeoIntrusivePtr<GeoPhysVol>physVol = new GeoPhysVol(logVol);
313 
314  double glZ = -sector_height/2+(shell_th/2)*cmm+epsil;
315 
316  GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(glX,glY, glZ));
317  sectorPhysVol->add(xf);
318  sectorPhysVol->add(physVol);
319  }
320 
321  double mb_th = 2.2;
322  double rail_pos = 22.;
323  double rail_width = 24.;
324  double prot_th = 0.5;
325  double widthFront = 2.8;
326  double mb_width = 169.;
327  double heightIn = 1.5;
328  double heightOut = 5.;
329 
330  double modz[8], mody[8];
331  mody[0] = -sector_length/2+mod_leng[0]/2+epsil;
332  modz[0] = -sector_height/2+shell_th*cmm+mech_clear+mod_heig[0]/2+epsil;
333  modz[1] = modz[0]+(mod_heig[0]-mod_heig[1])/2;
334  for(int i=1; i<8; i++)
335  mody[i] = mody[i-1]+mod_leng[i-1]/2+mod_leng[i]/2+epsil;
336 
337  for(int i=2; i<8; i++) modz[i]= modz[0];
338 
339  double mbZ = modz[0]+mod_heig[0]/2+(mb_th/2)*cmm+epsil;
340 
341  //-----------------------------Mother Board--------------------------//
342  {
343  GeoBox* MB = new GeoBox((mb_width/2)*cmm,(mb_length/2)*cmm,(mb_th/2)*cmm);
344  GeoLogVol *logVol=new GeoLogVol(basename+"::MotherBoard",MB,MBMat);
345  GeoIntrusivePtr<GeoPhysVol>physVol = new GeoPhysVol(logVol);
346 
347  GeoTransform* xf = new GeoTransform(GeoTrf::TranslateZ3D(mbZ));
348  sectorPhysVol->add(xf);
349  sectorPhysVol->add(physVol);
350  }
351 
352  //-----------------------------A Protection Plate--------------------------//
353  {
354  double prot_x = (bigLength/2+1.-rail_pos-rail_width+epsil)*cmm;
355  double prot_y = (shell_leng/2)*cmm;
356  double prot_z = (prot_th/2)*cmm;
357 
358  GeoBox* plate = new GeoBox(prot_x,prot_y,prot_z);
359  GeoLogVol *logVol=new GeoLogVol(basename+"::ProtectionPlate",plate,FR4);
360  GeoIntrusivePtr<GeoPhysVol>physVol = new GeoPhysVol(logVol);
361 
362  GeoTransform* xf = new GeoTransform(GeoTrf::Translate3D(glX,glY,mbZ+(mb_th/2+heightOut+prot_th/2)*cmm+2*epsil));
363  sectorPhysVol->add(xf);
364  sectorPhysVol->add(physVol);
365  }
366 
367  //-----------------------------Connectics--------------------------//
368  {
369  double conn_xm = (widthFront/2)*cmm;
370  double conn_xp = (mb_width/2)*cmm;
371  double conn_ym= (heightIn/2)*cmm;
372  double conn_yp =(heightOut/2)*cmm;
373  double conn_leng = (mb_length/2)*cmm;
374 
375  GeoTrd* connectics = new GeoTrd(conn_xm,conn_xp,conn_ym,conn_yp,conn_leng);
376  GeoLogVol *logVol=new GeoLogVol(basename+"::Connectics",connectics,ConnecMat);
377  GeoIntrusivePtr<GeoPhysVol>physVol = new GeoPhysVol(logVol);
378 
379  double connZ = mbZ+(mb_th/2+heightOut/2)*cmm+epsil;
380  GeoTransform* xf1 = new GeoTransform(GeoTrf::TranslateZ3D(connZ));
381  GeoTransform* xf2 = new GeoTransform(GeoTrf::RotateX3D(-90*Gaudi::Units::deg));
382 
383  sectorPhysVol->add(xf1);
384  sectorPhysVol->add(xf2);
385  sectorPhysVol->add(physVol);
386  }
387 
388  //-----------------------------Rails--------------------------//
389  {
390  GeoBox* rail = new GeoBox((rail_width/2)*cmm,(shell_leng/2)*cmm,(rail_th/2)*cmm);
391  GeoLogVol *logVol=new GeoLogVol(basename+"::Rail",rail,FR4);
392  GeoIntrusivePtr<GeoPhysVol>physVol = new GeoPhysVol(logVol);
393 
394  double railX = (bigLength/2+1-rail_pos-rail_width/2)*cmm+epsil;
395  double railZ = modz[0]+mod_heig[0]/2+(rail_th/2)*cmm+epsil;
396 
397  GeoTransform* xf1 = new GeoTransform(GeoTrf::Translate3D(railX,glY,railZ));
398  GeoTransform* xf2 = new GeoTransform(GeoTrf::Translate3D(-railX,glY,railZ));
399 
400  sectorPhysVol->add(xf1);
401  sectorPhysVol->add(physVol);
402 
403  sectorPhysVol->add(xf2);
404  sectorPhysVol->add(physVol);
405  }
406 
407  //
408  //--- --- --- Module contents --- --- ---
409  //
410 
411  // 1. Create physical volumes
412  double anode_th = 0.330;
413  double cathode_th = 0.270;
414 
415  double heig_elec1 = (larheight/cos(-mod[0][3]*Gaudi::Units::deg)-0.5*anode_th/cos(mod[0][3]*Gaudi::Units::deg))*cmm;
416  double heig_elec3 = (larheight-0.5*cathode_th/cos(mod[1][3]*Gaudi::Units::deg))*cmm;
417 
418  GeoTrd* catho1 = new GeoTrd(smallLength/2*cmm,bigLength/2*cmm,cathode_th/2*cmm,cathode_th/2*cmm,heig_elec1/2*cmm);
419  GeoLogVol* LV_catho1 = new GeoLogVol(basename+"::Cathode1",catho1,CathodeMat);
420  GeoIntrusivePtr<GeoPhysVol>PV_catho1 = new GeoPhysVol(LV_catho1);
421 
422  GeoTrd* catho3 = new GeoTrd(smallLength/2 *cmm,bigLength/2 *cmm,cathode_th/2 *cmm,cathode_th/2 *cmm,heig_elec3/2);
423  GeoLogVol* LV_catho3 = new GeoLogVol(basename+"::Cathode3",catho3,CathodeMat);
424  GeoIntrusivePtr<GeoPhysVol>PV_catho3 = new GeoPhysVol(LV_catho3);
425 
426  GeoTrd* ano1 = new GeoTrd(smallLength/2 *cmm,bigLength/2 *cmm,anode_th/2 *cmm,anode_th/2 *cmm,heig_elec1/2);
427  GeoLogVol* LV_ano1 = new GeoLogVol(basename+"::Anode1",ano1,AnodeMat);
428  GeoIntrusivePtr<GeoPhysVol>PV_ano1 = new GeoPhysVol(LV_ano1);
429 
430  GeoTrd* ano3 = new GeoTrd(smallLength/2 *cmm,bigLength/2 *cmm,anode_th/2 *cmm,anode_th/2 *cmm,heig_elec3/2);
431  GeoLogVol* LV_ano3 = new GeoLogVol(basename+"::Anode3",ano3,AnodeMat);
432  GeoIntrusivePtr<GeoPhysVol>PV_ano3 = new GeoPhysVol(LV_ano3);
433 
434  //-- Prepreg. plates --
435  double prep2_height = (bigLength/2+1.)*cmm;
436  double prep1_z = (prep1_th/2)*cmm;
437  double prep2_z = (prep2_th/2)*cmm;
438  double prep_length[8];
439  for(int i=0; i<8; i++ ) prep_length[i] = mod_leng[i]-2.*epsil;
440 
441  std::array<GeoIntrusivePtr<GeoPhysVol>,8> PV_Prep1{}, PV_Prep2{};
442 
443  for(int i=0; i<8; i++ )
444  {
445  GeoBox* box1 = new GeoBox(prep1_height,prep_length[i]/2,prep1_z);
446  GeoLogVol* logVol1 = new GeoLogVol(basename+"::Prep1",box1,FR4);
447  PV_Prep1[i] = new GeoPhysVol(logVol1);
448 
449  GeoBox* box2 = new GeoBox(prep2_height,prep_length[i]/2,prep2_z);
450  GeoLogVol* logVol2 = new GeoLogVol(basename+"::Prep2",box2,FR4);
451  PV_Prep2[i] = new GeoPhysVol(logVol2);
452  }
453 
454  // 2. Fill the module contents
455  std::array<double, 8> prep1_pos{};
456  std::array<double, 8> prep2_pos{};
457  double elec_trans = -2*prep2_z+mod_heig[0]/2-(larheight/2)*cmm-3*epsil;
458  for(int i=0; i<8; i++ )
459  {
460  prep1_pos[i] = prep1_z-mod_heig[i]/2+epsil;
461  prep2_pos[i] = -prep2_z+mod_heig[i]/2-epsil;
462  }
463 
464  double YStartA[8],YStartC[8];
465 
466  for(int i=0; i<8; i++ )
467  {
468  YStartC[i] = -mod_leng[i]/2+(mod[i][5]+cathode_th/2)*cmm;
469  YStartA[i] = YStartC[i]+(mod[i][4]/2)*cmm;
470  }
471 // for module 1, the y position has shifted
472 // should add delta01 to make sure that electrodes stay at the same place
473 // within full sector
474  YStartC[1] += delta01;
475  YStartA[1] += delta01;
476 
477  for(int i=0; i<8; i++)
478  {
479  GeoTransform* xfPrep1 = new GeoTransform(GeoTrf::TranslateZ3D(prep1_pos[i]));
480  GeoTransform* xfPrep2 = new GeoTransform(GeoTrf::TranslateZ3D(prep2_pos[i]));
481 
482  pvModule[i]->add(xfPrep1);
483  pvModule[i]->add(PV_Prep1[i]);
484  pvModule[i]->add(xfPrep2);
485  pvModule[i]->add(PV_Prep2[i]);
486 
487 
488  // Parameterizations for electrodes
489 
490  GeoGenfun::Variable I;
491  GeoGenfun::GENFUNCTION cathoGF = YStartC[i]+I*mod[i][4]*cmm;
492  GeoGenfun::GENFUNCTION anoGF = YStartA[i]+I*mod[i][4]*cmm;
493 
494  GeoXF::TRANSFUNCTION cathoTF = GeoXF::Pow(GeoTrf::TranslateY3D(1.),cathoGF)*GeoTrf::TranslateZ3D(elec_trans)*GeoTrf::RotateX3D(-mod[i][3]*Gaudi::Units::deg);
495  GeoXF::TRANSFUNCTION anoTF = GeoXF::Pow(GeoTrf::TranslateY3D(1.),anoGF)*GeoTrf::TranslateZ3D(elec_trans)*GeoTrf::RotateX3D(-mod[i][3]*Gaudi::Units::deg);
496 
497 
498  GeoSerialTransformer *cathoST,*anoST;
499  if(i==0)
500  {
501  cathoST = new GeoSerialTransformer(PV_catho1,&cathoTF,static_cast<unsigned int>(mod[i][2]));
502  anoST = new GeoSerialTransformer(PV_ano1,&anoTF,static_cast<unsigned int>(mod[i][1]));
503  }
504  else
505  {
506  cathoST = new GeoSerialTransformer(PV_catho3,&cathoTF,static_cast<unsigned int>(mod[i][2]));
507  anoST = new GeoSerialTransformer(PV_ano3,&anoTF,static_cast<unsigned int>(mod[i][1]));
508  }
509 
510  pvModule[i]->add(cathoST);
511  pvModule[i]->add(anoST);
512  }
513 
514  }
515 
516 }

◆ ~BarrelPresamplerConstruction()

LArGeo::BarrelPresamplerConstruction::~BarrelPresamplerConstruction ( )
virtualdefault

◆ BarrelPresamplerConstruction() [2/2]

LArGeo::BarrelPresamplerConstruction::BarrelPresamplerConstruction ( const BarrelPresamplerConstruction )
private

Member Function Documentation

◆ GetNegativeEnvelope()

GeoIntrusivePtr< GeoFullPhysVol > LArGeo::BarrelPresamplerConstruction::GetNegativeEnvelope ( )

Definition at line 526 of file BarrelPresamplerConstruction.cxx.

526  {
527  return m_psPhysicalNeg;
528 }

◆ GetPositiveEnvelope()

GeoIntrusivePtr< GeoFullPhysVol > LArGeo::BarrelPresamplerConstruction::GetPositiveEnvelope ( )

Definition at line 522 of file BarrelPresamplerConstruction.cxx.

522  {
523  return m_psPhysicalPos;
524 }

◆ MakeEnvelope()

void LArGeo::BarrelPresamplerConstruction::MakeEnvelope ( )
private

◆ operator=()

BarrelPresamplerConstruction& LArGeo::BarrelPresamplerConstruction::operator= ( const BarrelPresamplerConstruction )
private

Member Data Documentation

◆ m_fullGeo

bool LArGeo::BarrelPresamplerConstruction::m_fullGeo
private

Definition at line 58 of file BarrelPresamplerConstruction.h.

◆ m_parameters

const LArGeo::VDetectorParameters* LArGeo::BarrelPresamplerConstruction::m_parameters
private

Definition at line 52 of file BarrelPresamplerConstruction.h.

◆ m_psPhysicalNeg

GeoIntrusivePtr<GeoFullPhysVol> LArGeo::BarrelPresamplerConstruction::m_psPhysicalNeg {}
private

Definition at line 56 of file BarrelPresamplerConstruction.h.

◆ m_psPhysicalPos

GeoIntrusivePtr<GeoFullPhysVol> LArGeo::BarrelPresamplerConstruction::m_psPhysicalPos {}
private

Definition at line 55 of file BarrelPresamplerConstruction.h.


The documentation for this class was generated from the following files:
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
LAr
Definition: LArVolumeBuilder.h:36
deg
#define deg
Definition: SbPolyhedron.cxx:17
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
LArGeo::BarrelPresamplerConstruction::m_parameters
const LArGeo::VDetectorParameters * m_parameters
Definition: BarrelPresamplerConstruction.h:52
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:128
maskDeadModules.mod
mod
Definition: maskDeadModules.py:36
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
lumiFormat.i
int i
Definition: lumiFormat.py:92
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
LArGeo::BarrelPresamplerConstruction::m_fullGeo
bool m_fullGeo
Definition: BarrelPresamplerConstruction.h:58
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
LArGeo::BarrelPresamplerConstruction::m_psPhysicalPos
GeoIntrusivePtr< GeoFullPhysVol > m_psPhysicalPos
Definition: BarrelPresamplerConstruction.h:55
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
StoredMaterialManager::getMaterial
virtual const GeoMaterial * getMaterial(const std::string &name)=0
StoredMaterialManager
This class holds one or more material managers and makes them storeable, under StoreGate.
Definition: StoredMaterialManager.h:28
I
#define I(x, y, z)
Definition: MD5.cxx:116
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
LArGeo::BarrelPresamplerConstruction::m_psPhysicalNeg
GeoIntrusivePtr< GeoFullPhysVol > m_psPhysicalNeg
Definition: BarrelPresamplerConstruction.h:56
beamspotman.basename
basename
Definition: beamspotman.py:640