319 {
320
322
323 log << MSG::INFO <<
" LUCID_DetectorFactory::addPmtTubes " <<
endmsg;
324
325 double MUMetalCylinderInnerRad = 7.99;
326 double MuMetalCylinderOuterRad = 8.835;
327 double MuMetalCylinderLength = 75;
328
329 double PmtRadius = 5;
330 double PmtCenterPosition = 125.5;
331 double PmtWindowThickness = 1.2;
332
333 double PeekCapInnerRad = 1.6;
334 double PeekCapOuterRad = 8.835;
335 double PeekCapLength = 2.8;
336
337 double MetalConnectorOuterRad = 1.6;
338 double MetalConnectorLength = 9.8;
339
340 GeoShape* aShape = new GeoTube(0, PmtRadius, PmtWindowThickness/2);
341 GeoLogVol* logVol =
new GeoLogVol(
"lvPmt", aShape,
m_quartz);
342 GeoPhysVol* phyVol = new GeoPhysVol(logVol);
343
344 GeoShape* aShapeMu = new GeoTube(MUMetalCylinderInnerRad, MuMetalCylinderOuterRad, MuMetalCylinderLength/2);
345 GeoLogVol* logVolMu =
new GeoLogVol(
"lvMuMetalCylinder", aShapeMu,
m_materialManager->getMaterial(
"std::Iron"));
346 GeoPhysVol* phyVolMu = new GeoPhysVol(logVolMu);
347
348 GeoShape* aShapePeekCap = new GeoTube(PeekCapInnerRad, PeekCapOuterRad, PeekCapLength/2);
349 GeoLogVol* logVolPeekCap =
new GeoLogVol(
"lvPmtPeekCap", aShapePeekCap,
m_peek);
350 GeoPhysVol* phyVolPeekCap = new GeoPhysVol(logVolPeekCap);
351
352 GeoShape* aShapeMetalconnector = new GeoTube(0, MetalConnectorOuterRad, MetalConnectorLength/2);
353 GeoLogVol* logVolMetalConnector =
new GeoLogVol(
"lvPmtMetalConnector", aShapeMetalconnector,
m_materialManager->getMaterial(
"std::Iron"));
354 GeoPhysVol* phyVolMetalConnector = new GeoPhysVol(logVolMetalConnector);
355
356 double phi =
M_PI/6*Gaudi::Units::rad;
357 int nSections = 4;
358 int nPmtTubesPerSection = 4;
359
360 for (int sec=0; sec<nSections; sec++) {
361 for (int tub=0; tub<nPmtTubesPerSection; tub++) {
362
363 double x = PmtCenterPosition*
cos(
phi/Gaudi::Units::rad);
364 double y = PmtCenterPosition*
sin(
phi/Gaudi::Units::rad);
365 double z = (16970-13442)+(PmtWindowThickness/2);
366 double zMu = (16963-13442)+(MuMetalCylinderLength/2);
367 double zCap = (16963-13442)-(PeekCapLength/2);
368 double zMetal = (16963-13442)-(MetalConnectorLength/2);
369
370 char sname[256]; sprintf(sname, "LucidPmt%d", 4*sec+tub);
371
373 <<
format(
"Adding %11s phi:%10.3f x:%10.3f y:%10.3f z:%10.3f", sname,
phi,
x,
y,
z)
375
376 parent->add(
new GeoNameTag (sname));
377 parent->add(
new GeoTransform(GeoTrf::Translate3D(
x,
y,
z)));
379
380 char snameMu[256]; sprintf(snameMu, "MuMetal cylinder%d", 4*sec+tub);
381
383 <<
format(
"Adding %11s phi:%10.3f x:%10.3f y:%10.3f zMu:%10.3f", snameMu,
phi,
x,
y, zMu)
385
386 parent->add(
new GeoNameTag (snameMu));
387 parent->add(
new GeoTransform(GeoTrf::Translate3D(
x,
y, zMu)));
389
390 char snamePeekCap[256]; sprintf(snamePeekCap, "PmtPeekCap%d", 4*sec+tub);
391
393 <<
format(
"Adding %11s phi:%10.3f x:%10.3f y:%10.3f zCap:%10.3f", snamePeekCap,
phi,
x,
y, zCap)
395
396 parent->add(
new GeoNameTag (snamePeekCap));
397 parent->add(
new GeoTransform(GeoTrf::Translate3D(
x,
y, zCap)));
398 parent->add(phyVolPeekCap);
399
400 char snameMetalConnector[256]; sprintf(snameMetalConnector, "MetalConnector%d", 4*sec+tub);
401
403 <<
format(
"Adding %11s phi:%10.3f x:%10.3f y:%10.3f zMetal:%10.3f", snameMetalConnector,
phi,
x,
y, zMetal)
405
406 parent->add(
new GeoNameTag (snameMetalConnector));
407 parent->add(
new GeoTransform(GeoTrf::Translate3D(
x,
y, zMetal)));
408 parent->add(phyVolMetalConnector);
409
411 }
413 }
414}
Scalar phi() const
phi method