9 #include "GeoModelKernel/GeoMaterial.h"
10 #include "GeoModelKernel/GeoBox.h"
11 #include "GeoModelKernel/GeoTube.h"
12 #include "GeoModelKernel/GeoTubs.h"
13 #include "GeoModelKernel/GeoShapeSubtraction.h"
14 #include "GeoModelKernel/GeoShapeIntersection.h"
15 #include "GeoModelKernel/GeoShapeUnion.h"
16 #include "GeoModelKernel/GeoShapeShift.h"
17 #include "GeoModelKernel/GeoLogVol.h"
18 #include "GeoModelKernel/GeoNameTag.h"
19 #include "GeoModelKernel/GeoPhysVol.h"
20 #include "GeoModelKernel/GeoFullPhysVol.h"
21 #include "GeoModelKernel/GeoTransform.h"
22 #include "GeoModelKernel/GeoAlignableTransform.h"
23 #include "CLHEP/GenericFunctions/AbsFunction.hh"
24 #include "CLHEP/GenericFunctions/Variable.hh"
25 #include "CLHEP/GenericFunctions/Sin.hh"
26 #include "CLHEP/GenericFunctions/Cos.hh"
57 double pfReflectivity1[2]={ 0.9, 0.9};
58 pMPT->
AddProperty(
"REFLECTIVITY",pfEnergy1,pfReflectivity1,2);
65 double fXShift,fYShift,fZShift;
81 nPixelID=10*(
i+1)+(j+1);
82 addSepRadLBar(pszStationName,1,nPixelID,pPhysMotherVol,TofTransform,bsContainer);
90 addSensor(pszStationName,1,pPhysMotherVol,TofTransform,bsContainer);
92 return StatusCode::SUCCESS;
97 double fX1Pos,fX2Pos,falpha,
fd;
98 HepGeom::Vector3D<double> vecA1, vecA2, vecX;
99 CLHEP::Hep3Vector vecCutShift;
101 GeoShapeShift* pMoveCut;
105 CLHEP::HepRotation Rot1,Rot2,Rot3;
127 vecA1=-
fd*
std::cos(falpha)*CLHEP::Hep3Vector(0.0,1.0,0.0);
128 vecA2=+0.5*
fd*std::sqrt(2.0)*(CLHEP::HepRotationZ(+(45*
CLHEP::deg-falpha))*CLHEP::Hep3Vector(0.0,1.0,0.0)).
unit();
131 Rot1.rotateZ(-falpha);
136 pSolVolume=
new GeoShapeSubtraction(pSolVolume, pMoveCut);
139 sprintf(szlabel,
"%s_Q%i_LogLGuide[%i]",pszStationName,nQuarticID,nBarID);
140 GeoLogVol* pLogLGuide=
new GeoLogVol(szlabel,pSolVolume,
m_MapMaterials[std::string(
"Quartz")]);
142 sprintf(szlabel,
"%s_Q%i_LGuide[%i]",pszStationName,nQuarticID,nBarID);
143 pPhysMotherVolume->add(
new GeoNameTag(szlabel));
145 pPhysMotherVolume->add(pPhysLGuide);
146 sprintf(szlabel,
"%s_Q%i_LGuideSurface[%i]",pszStationName,nQuarticID,nBarID);
151 double fElbowXDim=fRadYDim;
152 TotTransform=TransInMotherVolume*HepGeom::Translate3D( fX1Pos-0.5*BarDims.
fLGuideWidth+0.5*fElbowXDim+fTaperOffset,
155 pSolVolume=
new GeoBox(0.5*fElbowXDim,0.5*fRadYDim,0.5*BarDims.
fLBarThickness);
159 vecA1=-
fd*
std::cos(falpha)*CLHEP::Hep3Vector(0.0,1.0,0.0);
160 vecA2=+0.5*
fd*std::sqrt(2.0)*(CLHEP::HepRotationZ(+(45*
CLHEP::deg-falpha))*CLHEP::Hep3Vector(0.0,1.0,0.0)).
unit();
162 vecCutShift=CLHEP::Hep3Vector(-0.5*fElbowXDim,0.5*fRadYDim,0.0)+CLHEP::Hep3Vector(vecX);
163 Rot2.rotateZ(-falpha);
168 pSolVolume=
new GeoShapeSubtraction(pSolVolume, pMoveCut);
170 sprintf(szlabel,
"%s_Q%i_LogRadiator[%i]",pszStationName,nQuarticID,nBarID);
171 GeoLogVol* pLogRadiator=
new GeoLogVol(szlabel,pSolVolume,
m_MapMaterials[std::string(
"Quartz")]);
173 sprintf(szlabel,
"%s_Q%i_Radiator[%i]",pszStationName,nQuarticID,nBarID);
174 pPhysMotherVolume->add(
new GeoNameTag(szlabel));
176 pPhysMotherVolume->add(pPhysRadiator);
177 sprintf(szlabel,
"%s_Q%i_RadiatorElbowSurface[%i]",pszStationName,nQuarticID,nBarID);
182 TotTransform=TransInMotherVolume*HepGeom::Translate3D( fX1Pos-0.5*BarDims.
fLGuideWidth+fElbowXDim+fTaperOffset+0.5*fRadLength,
185 pSolVolume=
new GeoBox(0.5*fRadLength,0.5*fRadYDim,0.5*BarDims.
fLBarThickness);
190 vecA1 = -
fd*
std::cos(falpha)*CLHEP::Hep3Vector(1.0,0.0,0.0);
191 vecA2 = 0.5*
fd*std::sqrt(2.0)*(CLHEP::HepRotationY(-(45*
CLHEP::deg-falpha))*CLHEP::Hep3Vector(1.0,0.0,0.0)).
unit();
192 vecX = vecA1 + vecA2;
193 vecCutShift = CLHEP::Hep3Vector(0.5*fRadLength,0.0,0.5*BarDims.
fLBarThickness) + CLHEP::Hep3Vector(vecX);
194 Rot3.rotateY(falpha);
196 pSolAux=
new GeoBox(0.5*
fd,0.5*fRadYDim+
SLIMCUT,0.5*
fd);
199 pSolVolume=
new GeoShapeSubtraction(pSolVolume, pMoveCut);
202 sprintf(szlabel,
"%s_Q%i_LogRadiator[%i]",pszStationName,nQuarticID,nBarID);
203 pLogRadiator=
new GeoLogVol(szlabel,pSolVolume,
m_MapMaterials[std::string(
"Quartz")]);
205 sprintf(szlabel,
"%s_Q%i_Radiator[%i]",pszStationName,nQuarticID,nBarID);
206 pPhysMotherVolume->add(
new GeoNameTag(szlabel));
208 pPhysMotherVolume->add(pPhysRadiator);
209 sprintf(szlabel,
"%s_Q%i_RadiatorSurface[%i]",pszStationName,nQuarticID,nBarID);
219 double fX1Pos_1, fX2Pos_1, fX1Pos_2, fX2Pos_2;
233 sprintf(szlabel,
"%s_Q%i_LogLBarSensorSeparationWindow",pszStationName,nQuarticID);
235 GeoLogVol* pLogWindow=
new GeoLogVol(szlabel,pSolWindow,
m_MapMaterials[
"Quartz"]);
237 sprintf(szlabel,
"%s_Q%i_LBarSensorSeparationWindow",pszStationName,nQuarticID);
238 pPhysMotherVolume->add(
new GeoNameTag(szlabel));
240 pPhysMotherVolume->add(pPhysWindow);
241 sprintf(szlabel,
"%s_Q%i_WindowSurface",pszStationName,nQuarticID);
255 double fX1Pos, fX2Pos;
272 nPixelID=10*(
i+1)+(j+1);
275 sprintf(szlabel,
"%s_Q%i_LogTDSensor[%i]",pszStationName,nQuarticID,nPixelID);
277 GeoLogVol* pLogSensor=
new GeoLogVol(szlabel,pSolSensor,
m_MapMaterials[
"SiliconPMT"]);
279 sprintf(szlabel,
"%s_Q%i_TDSensor[%i]",pszStationName,nQuarticID,nPixelID);
280 pPhysMotherVolume->add(
new GeoNameTag(szlabel));
282 pPhysMotherVolume->add(pPhysSensor);
283 sprintf(szlabel,
"%s_Q%i_SensorSurface[%i]",pszStationName,nQuarticID,nPixelID);