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