10 #include "GeoModelKernel/GeoMaterial.h"
11 #include "GeoModelKernel/GeoBox.h"
12 #include "GeoModelKernel/GeoTube.h"
13 #include "GeoModelKernel/GeoTubs.h"
14 #include "GeoModelKernel/GeoShapeSubtraction.h"
15 #include "GeoModelKernel/GeoShapeIntersection.h"
16 #include "GeoModelKernel/GeoShapeUnion.h"
17 #include "GeoModelKernel/GeoShapeShift.h"
18 #include "GeoModelKernel/GeoLogVol.h"
19 #include "GeoModelKernel/GeoNameTag.h"
20 #include "GeoModelKernel/GeoPhysVol.h"
21 #include "GeoModelKernel/GeoFullPhysVol.h"
22 #include "GeoModelKernel/GeoTransform.h"
23 #include "GeoModelKernel/GeoAlignableTransform.h"
24 #include "CLHEP/GenericFunctions/AbsFunction.hh"
25 #include "CLHEP/GenericFunctions/Variable.hh"
26 #include "CLHEP/GenericFunctions/Sin.hh"
27 #include "CLHEP/GenericFunctions/Cos.hh"
53 double pfReflectivity1[2]={ 0.9, 0.9};
54 pMPT->
AddProperty(
"REFLECTIVITY",pfEnergy1,pfReflectivity1,2);
61 double fXShift,fYShift,fZShift;
77 nPixelID=10*(
i+1)+(j+1);
78 addSepRadLBar(pszStationName,1,nPixelID,pPhysMotherVol,TofTransform,bsContainer);
86 addSensor(pszStationName,1,pPhysMotherVol,TofTransform,bsContainer);
88 return StatusCode::SUCCESS;
93 double fX1Pos,fX2Pos,falpha,
fd;
94 HepGeom::Vector3D<double> vecA1, vecA2, vecX;
95 CLHEP::Hep3Vector vecCutShift;
97 GeoShapeShift* pMoveCut;
101 CLHEP::HepRotation Rot1,Rot2,Rot3;
123 vecA1=-
fd*
std::cos(falpha)*CLHEP::Hep3Vector(0.0,1.0,0.0);
124 vecA2=+0.5*
fd*std::sqrt(2.0)*(CLHEP::HepRotationZ(+(45*
CLHEP::deg-falpha))*CLHEP::Hep3Vector(0.0,1.0,0.0)).
unit();
127 Rot1.rotateZ(-falpha);
132 pSolVolume=
new GeoShapeSubtraction(pSolVolume, pMoveCut);
135 sprintf(szlabel,
"%s_Q%i_LogLGuide[%i]",pszStationName,nQuarticID,nBarID);
136 GeoLogVol* pLogLGuide=
new GeoLogVol(szlabel,pSolVolume,
m_MapMaterials[std::string(
"Quartz")]);
138 sprintf(szlabel,
"%s_Q%i_LGuide[%i]",pszStationName,nQuarticID,nBarID);
139 pPhysMotherVolume->add(
new GeoNameTag(szlabel));
141 pPhysMotherVolume->add(pPhysLGuide);
142 sprintf(szlabel,
"%s_Q%i_LGuideSurface[%i]",pszStationName,nQuarticID,nBarID);
147 double fElbowXDim=fRadYDim;
148 TotTransform=TransInMotherVolume*HepGeom::Translate3D( fX1Pos-0.5*BarDims.
fLGuideWidth+0.5*fElbowXDim+fTaperOffset,
151 pSolVolume=
new GeoBox(0.5*fElbowXDim,0.5*fRadYDim,0.5*BarDims.
fLBarThickness);
155 vecA1=-
fd*
std::cos(falpha)*CLHEP::Hep3Vector(0.0,1.0,0.0);
156 vecA2=+0.5*
fd*std::sqrt(2.0)*(CLHEP::HepRotationZ(+(45*
CLHEP::deg-falpha))*CLHEP::Hep3Vector(0.0,1.0,0.0)).
unit();
158 vecCutShift=CLHEP::Hep3Vector(-0.5*fElbowXDim,0.5*fRadYDim,0.0)+CLHEP::Hep3Vector(vecX);
159 Rot2.rotateZ(-falpha);
164 pSolVolume=
new GeoShapeSubtraction(pSolVolume, pMoveCut);
166 sprintf(szlabel,
"%s_Q%i_LogRadiator[%i]",pszStationName,nQuarticID,nBarID);
167 GeoLogVol* pLogRadiator=
new GeoLogVol(szlabel,pSolVolume,
m_MapMaterials[std::string(
"Quartz")]);
169 sprintf(szlabel,
"%s_Q%i_Radiator[%i]",pszStationName,nQuarticID,nBarID);
170 pPhysMotherVolume->add(
new GeoNameTag(szlabel));
172 pPhysMotherVolume->add(pPhysRadiator);
173 sprintf(szlabel,
"%s_Q%i_RadiatorElbowSurface[%i]",pszStationName,nQuarticID,nBarID);
178 TotTransform=TransInMotherVolume*HepGeom::Translate3D( fX1Pos-0.5*BarDims.
fLGuideWidth+fElbowXDim+fTaperOffset+0.5*fRadLength,
181 pSolVolume=
new GeoBox(0.5*fRadLength,0.5*fRadYDim,0.5*BarDims.
fLBarThickness);
186 vecA1 = -
fd*
std::cos(falpha)*CLHEP::Hep3Vector(1.0,0.0,0.0);
187 vecA2 = 0.5*
fd*std::sqrt(2.0)*(CLHEP::HepRotationY(-(45*
CLHEP::deg-falpha))*CLHEP::Hep3Vector(1.0,0.0,0.0)).
unit();
188 vecX = vecA1 + vecA2;
189 vecCutShift = CLHEP::Hep3Vector(0.5*fRadLength,0.0,0.5*BarDims.
fLBarThickness) + CLHEP::Hep3Vector(vecX);
190 Rot3.rotateY(falpha);
192 pSolAux=
new GeoBox(0.5*
fd,0.5*fRadYDim+
SLIMCUT,0.5*
fd);
195 pSolVolume=
new GeoShapeSubtraction(pSolVolume, pMoveCut);
198 sprintf(szlabel,
"%s_Q%i_LogRadiator[%i]",pszStationName,nQuarticID,nBarID);
199 pLogRadiator=
new GeoLogVol(szlabel,pSolVolume,
m_MapMaterials[std::string(
"Quartz")]);
201 sprintf(szlabel,
"%s_Q%i_Radiator[%i]",pszStationName,nQuarticID,nBarID);
202 pPhysMotherVolume->add(
new GeoNameTag(szlabel));
204 pPhysMotherVolume->add(pPhysRadiator);
205 sprintf(szlabel,
"%s_Q%i_RadiatorSurface[%i]",pszStationName,nQuarticID,nBarID);
215 double fX1Pos_1, fX2Pos_1, fX1Pos_2, fX2Pos_2;
229 sprintf(szlabel,
"%s_Q%i_LogLBarSensorSeparationWindow",pszStationName,nQuarticID);
231 GeoLogVol* pLogWindow=
new GeoLogVol(szlabel,pSolWindow,
m_MapMaterials[
"Quartz"]);
233 sprintf(szlabel,
"%s_Q%i_LBarSensorSeparationWindow",pszStationName,nQuarticID);
234 pPhysMotherVolume->add(
new GeoNameTag(szlabel));
236 pPhysMotherVolume->add(pPhysWindow);
237 sprintf(szlabel,
"%s_Q%i_WindowSurface",pszStationName,nQuarticID);
251 double fX1Pos, fX2Pos;
268 nPixelID=10*(
i+1)+(j+1);
271 sprintf(szlabel,
"%s_Q%i_LogTDSensor[%i]",pszStationName,nQuarticID,nPixelID);
273 GeoLogVol* pLogSensor=
new GeoLogVol(szlabel,pSolSensor,
m_MapMaterials[
"SiliconPMT"]);
275 sprintf(szlabel,
"%s_Q%i_TDSensor[%i]",pszStationName,nQuarticID,nPixelID);
276 pPhysMotherVolume->add(
new GeoNameTag(szlabel));
278 pPhysMotherVolume->add(pPhysSensor);
279 sprintf(szlabel,
"%s_Q%i_SensorSurface[%i]",pszStationName,nQuarticID,nPixelID);