5 #include "GeoModelKernel/GeoMaterial.h"
7 #include "GeoModelKernel/GeoBox.h"
8 #include "GeoModelKernel/GeoTube.h"
9 #include "GeoModelKernel/GeoTrd.h"
10 #include "GeoModelKernel/GeoShape.h"
11 #include "GeoModelKernel/GeoShapeUnion.h"
12 #include "GeoModelKernel/GeoShapeShift.h"
13 #include "GeoModelKernel/GeoShapeSubtraction.h"
14 #include "GeoModelKernel/GeoLogVol.h"
15 #include "GeoModelKernel/GeoNameTag.h"
16 #include "GeoModelKernel/GeoDefinitions.h"
18 #include "GeoModelKernel/GeoPhysVol.h"
19 #include "GeoModelKernel/GeoFullPhysVol.h"
20 #include "GeoModelKernel/GeoTransform.h"
28 #include "GaudiKernel/MsgStream.h"
48 const double ALFA_stagger[10] = {0.0, 0.283, -0.141, 0.141, -0.283, 0.354, -0.071, 0.212, -0.212, 0.071};
49 const double OD_stagger[3] = {0.0, -0.167, -0.334};
52 #define BEAMPIPEINNERRADIUS (0.5*80.0*CLHEP::mm)
53 #define BEAMPIPEOUTERRADIUS (0.5*84.0*CLHEP::mm)
57 GeometryConfig.clear();
59 bConstructBeampipe=
false;
62 bIsTransformInStation.assign(8,
false);
63 bIsTransformInDetector.assign(8,
false);
65 pointTransformInDetectorB7L1U.assign(3, 0.0);
66 pointTransformInDetectorB7L1L.assign(3, 0.0);
67 pointTransformInDetectorA7L1U.assign(3, 0.0);
68 pointTransformInDetectorA7L1L.assign(3, 0.0);
69 pointTransformInDetectorB7R1U.assign(3, 0.0);
70 pointTransformInDetectorB7R1L.assign(3, 0.0);
71 pointTransformInDetectorA7R1U.assign(3, 0.0);
72 pointTransformInDetectorA7R1L.assign(3, 0.0);
74 vecTransformInDetectorB7L1U.assign(7, 0.0);
75 vecTransformInDetectorB7L1L.assign(7, 0.0);
76 vecTransformInDetectorA7L1U.assign(7, 0.0);
77 vecTransformInDetectorA7L1L.assign(7, 0.0);
78 vecTransformInDetectorB7R1U.assign(7, 0.0);
79 vecTransformInDetectorB7R1L.assign(7, 0.0);
80 vecTransformInDetectorA7R1U.assign(7, 0.0);
81 vecTransformInDetectorA7R1L.assign(7, 0.0);
83 vecTransformInStationB7L1U.assign(7, 0.0);
84 vecTransformInStationB7L1L.assign(7, 0.0);
85 vecTransformInStationA7L1U.assign(7, 0.0);
86 vecTransformInStationA7L1L.assign(7, 0.0);
87 vecTransformInStationB7R1U.assign(7, 0.0);
88 vecTransformInStationB7R1L.assign(7, 0.0);
89 vecTransformInStationA7R1U.assign(7, 0.0);
90 vecTransformInStationA7R1L.assign(7, 0.0);
94 :m_pDetectorManager(NULL),
95 m_pDetectorStore(pDetStore),
96 m_pIRDBAccess(pAccess),
97 m_eRequestedMetrologyType((
eMetrologyType)(pConfig->GeometryConfig.eRPMetrologyGeoType)),
113 list<eRPotName>::const_iterator iterRPName;
138 LogStream<<MSG::INFO<<
"Geometry successfully initialized"<<
endmsg;
145 throw GaudiException(
" Could not load geometry ",
"ALFA_DetectorFactory::ReadGeometry", StatusCode::FAILURE);
170 strcpy(szPrefix,
"ideal");
173 strcpy(szPrefix,
"real");
176 strcpy(szPrefix,
"realdb");
182 sprintf(szFilename,
"%sgeometry_MD_RP-%s.txt",szPrefix,
m_pGeoReader->GetRPotLabel(eRPName));
184 LogStream<<MSG::INFO<<
"The MD fiber geometry was stored in the "<<szFilename<<
" file"<<
endmsg;
187 LogStream<<MSG::INFO<<
"Unknown MD fiber geometry of the RPot "<<
m_pGeoReader->GetRPotLabel(eRPName)<<
" file"<<
endmsg;
195 strcpy(szPrefix,
"ideal");
198 strcpy(szPrefix,
"real");
201 strcpy(szPrefix,
"realdb");
207 sprintf(szFilename,
"%sgeometry_OD_RP-%s.txt",szPrefix,
m_pGeoReader->GetRPotLabel(eRPName));
209 LogStream<<MSG::INFO<<
"The OD fiber geometry was stored in the "<<szFilename<<
" file"<<
endmsg;
212 LogStream<<MSG::INFO<<
"Unknown OD fiber geometry of the RPot "<<
m_pGeoReader->GetRPotLabel(eRPName)<<
" file"<<
endmsg;
217 sprintf(szFilename,
"geometryinfo_MD_RP-%s.txt",
m_pGeoReader->GetRPotLabel(eRPName));
218 m_pGeoReader->SaveRPGeometryParams(eRPName, szFilename);
219 LogStream<<MSG::INFO<<
"RP geometry info was stored in the "<<szFilename<<
" file"<<
endmsg;
226 GeoMaterial* pMaterial;
230 double aH,aB,aC,aN,aO,aNa,aMg,aAl,aSi,aP,aS,aK,aCa,aTi,aCr,aMn,aFe,aNi,aMo,Atot;
232 const GeoElement*
H = pMaterialManager->
getElement(
"Hydrogen");
233 const GeoElement*
B = pMaterialManager->
getElement(
"Boron");
234 const GeoElement*
C = pMaterialManager->
getElement(
"Carbon");
235 const GeoElement*
N = pMaterialManager->
getElement(
"Nitrogen");
236 const GeoElement* O = pMaterialManager->
getElement(
"Oxygen");
237 const GeoElement* Na = pMaterialManager->
getElement(
"Sodium");
238 const GeoElement* Mg = pMaterialManager->
getElement(
"Magnesium");
239 const GeoElement* Al = pMaterialManager->
getElement(
"Aluminium");
240 const GeoElement* Si = pMaterialManager->
getElement(
"Silicon");
241 const GeoElement*
P = pMaterialManager->
getElement(
"Phosphorus");
242 const GeoElement*
S = pMaterialManager->
getElement(
"Sulfur");
243 const GeoElement* K = pMaterialManager->
getElement(
"Potassium");
244 const GeoElement* Ca = pMaterialManager->
getElement(
"Calcium");
245 const GeoElement* Ti = pMaterialManager->
getElement(
"Titanium");
246 const GeoElement* Cr = pMaterialManager->
getElement(
"Chromium");
247 const GeoElement* Mn = pMaterialManager->
getElement(
"Manganese");
248 const GeoElement* Fe = pMaterialManager->
getElement(
"Iron");
249 const GeoElement* Ni = pMaterialManager->
getElement(
"Nickel");
250 const GeoElement* Mo = pMaterialManager->
getElement(
"Molybdenum");
266 Atot=aFe+aC+aMn+aSi+aP+aS+aCr+aMo+aNi+aN;
268 pMaterial->add(
const_cast<GeoElement*
> (Fe),aFe/Atot);
269 pMaterial->add(
const_cast<GeoElement*
> (
C), aC/Atot);
270 pMaterial->add(
const_cast<GeoElement*
> (Mn),aMn/Atot);
271 pMaterial->add(
const_cast<GeoElement*
> (Si),aSi/Atot);
272 pMaterial->add(
const_cast<GeoElement*
> (
P), aP/Atot);
273 pMaterial->add(
const_cast<GeoElement*
> (
S), aS/Atot);
274 pMaterial->add(
const_cast<GeoElement*
> (Cr),aCr/Atot);
275 pMaterial->add(
const_cast<GeoElement*
> (Mo),aMo/Atot);
276 pMaterial->add(
const_cast<GeoElement*
> (Ni),aNi/Atot);
277 pMaterial->add(
const_cast<GeoElement*
> (
N), aN/Atot);
279 m_MapMaterials.insert(pair<string,GeoMaterial*>(MatName,pMaterial));
286 pMaterial->add(
const_cast<GeoElement*
> (Ti), 1);
288 m_MapMaterials.insert(pair<string,GeoMaterial*>(MatName,pMaterial));
298 pMaterial->add(
const_cast<GeoElement*
> (
H), aH/Atot);
299 pMaterial->add(
const_cast<GeoElement*
> (
C), aC/Atot);
301 m_MapMaterials.insert(pair<string,GeoMaterial*>(MatName,pMaterial));
323 Atot=aH+aB+aC+aN+aO+aNa+aMg+aAl+aSi+aP+aK+aCa+aTi+aFe;
325 pMaterial->add(
const_cast<GeoElement*
> (
H), aH/Atot);
326 pMaterial->add(
const_cast<GeoElement*
> (
B), aB/Atot);
327 pMaterial->add(
const_cast<GeoElement*
> (
C), aC/Atot);
328 pMaterial->add(
const_cast<GeoElement*
> (
N), aN/Atot);
329 pMaterial->add(
const_cast<GeoElement*
> (O), aO/Atot);
330 pMaterial->add(
const_cast<GeoElement*
> (Na),aNa/Atot);
331 pMaterial->add(
const_cast<GeoElement*
> (Mg),aMg/Atot);
332 pMaterial->add(
const_cast<GeoElement*
> (Al),aAl/Atot);
333 pMaterial->add(
const_cast<GeoElement*
> (Si),aSi/Atot);
334 pMaterial->add(
const_cast<GeoElement*
> (
P), aP/Atot);
335 pMaterial->add(
const_cast<GeoElement*
> (K), aK/Atot);
336 pMaterial->add(
const_cast<GeoElement*
> (Ca),aCa/Atot);
337 pMaterial->add(
const_cast<GeoElement*
> (Ti),aTi/Atot);
338 pMaterial->add(
const_cast<GeoElement*
> (Fe),aFe/Atot);
340 m_MapMaterials.insert(pair<string,GeoMaterial*>(MatName,pMaterial));
343 MatName=
"Polystyrene";
350 pMaterial->add(
const_cast<GeoElement*
> (
H), aH/Atot);
351 pMaterial->add(
const_cast<GeoElement*
> (
C), aC/Atot);
353 m_MapMaterials.insert(pair<string,GeoMaterial*>(MatName,pMaterial));
364 pMaterial->add(
const_cast<GeoElement*
> (
H), aH/Atot);
365 pMaterial->add(
const_cast<GeoElement*
> (
C), aC/Atot);
366 pMaterial->add(
const_cast<GeoElement*
> (O), aO/Atot);
368 m_MapMaterials.insert(pair<string,GeoMaterial*>(MatName,pMaterial));
375 MatName=
"std::Vacuum";
386 GeoLogVol* pLogBoxX=
new GeoLogVol(
"BoxX",pSolBoxX,
m_MapMaterials[
string(
"PMMA")]);
387 GeoLogVol* pLogBoxY=
new GeoLogVol(
"BoxY",pSolBoxY,
m_MapMaterials[
string(
"PMMA")]);
388 GeoLogVol* pLogBoxZ=
new GeoLogVol(
"BoxZ",pSolBoxZ,
m_MapMaterials[
string(
"PMMA")]);
390 GeoFullPhysVol* pPhysBoxX=
new GeoFullPhysVol(pLogBoxX);
391 GeoFullPhysVol* pPhysBoxY=
new GeoFullPhysVol(pLogBoxY);
392 GeoFullPhysVol* pPhysBoxZ=
new GeoFullPhysVol(pLogBoxZ);
394 pMotherVolume->add(
new GeoNameTag(
"BoxX"));
395 pMotherVolume->add(
new GeoTransform(GeoTrf::Transform3D::Identity()));
396 pMotherVolume->add(pPhysBoxX);
398 pMotherVolume->add(
new GeoNameTag(
"BoxY"));
399 pMotherVolume->add(
new GeoTransform(GeoTrf::Transform3D::Identity()));
400 pMotherVolume->add(pPhysBoxY);
402 pMotherVolume->add(
new GeoNameTag(
"BoxZ"));
403 pMotherVolume->add(
new GeoTransform(GeoTrf::Transform3D::Identity()));
404 pMotherVolume->add(pPhysBoxZ);
422 double fZLength=0.5*(fzs-fzd);
423 double fZPos=0.5*fzd+0.5*fZLength;
425 sprintf(szLabel,
"%s_LogIBP",pszStationLabel);
427 GeoLogVol* pLogTube=
new GeoLogVol(szLabel,pTube,
m_MapMaterials[
string(
"Steel")]);
428 GeoFullPhysVol* pPhysTube=
new GeoFullPhysVol(pLogTube);
430 sprintf(szLabel,
"%s_IBP01",pszStationLabel);
431 pPhysStation->add(
new GeoNameTag(szLabel));
432 pPhysStation->add(
new GeoTransform(GeoTrf::TranslateZ3D(fZPos)));
433 pPhysStation->add(pPhysTube);
435 sprintf(szLabel,
"%s_IBP02",pszStationLabel);
436 pPhysStation->add(
new GeoNameTag(szLabel));
437 pPhysStation->add(
new GeoTransform(GeoTrf::TranslateZ3D(-fZPos)));
438 pPhysStation->add(pPhysTube);
449 sprintf(szLabel,
"%s_GVS",
m_pGeoReader->GetAStationLabel(eStatName));
452 GeoLogVol* pLogGVS=
new GeoLogVol(szLabel,pSolGVS,
m_MapMaterials[
string(
"std::Vacuum")]);
453 GeoFullPhysVol* pPhysGVS=
new GeoFullPhysVol(pLogGVS);
455 GeoTrf::TranslateZ3D TransGVS(fZOffset);
456 pPhysStation->add(
new GeoNameTag(szLabel));
457 pPhysStation->add(
new GeoTransform(TransGVS));
458 pPhysStation->add(pPhysGVS);
470 GeoFullPhysVol* pPhysAlfaBox=NULL;
473 GeoLogVol* pLogAlfaBox=
new GeoLogVol(
"ALFA",pSolidAlfaBox,
m_MapMaterials[
string(
"std::Vacuum")]);
477 m_pGeoReader->GetASPosParams(&AStationParams,eAStation);
478 sprintf(szLabel,
"ALFA_%s",AStationParams.
szLabel);
479 LogStream<<MSG::INFO<<
"Create ALFA station "<<szLabel<<
endmsg;
480 pPhysAlfaBox=
new GeoFullPhysVol(pLogAlfaBox);
482 pWorld->add(
new GeoNameTag(szLabel));
484 pWorld->add(pPhysAlfaBox);
491 pmapActiveStations->insert(pair<eAStationName,ALFAPHYSVOLUME>(eAStation,APhysVolume));
495 m_pGeoReader->GetASPosParams(&AStationParams,eAStation);
496 sprintf(szLabel,
"ALFA_%s",AStationParams.
szLabel);
497 LogStream<<MSG::INFO<<
"Create ALFA station "<<szLabel<<
endmsg;
498 pPhysAlfaBox=
new GeoFullPhysVol(pLogAlfaBox);
500 pWorld->add(
new GeoNameTag(szLabel));
502 pWorld->add(pPhysAlfaBox);
509 pmapActiveStations->insert(pair<eAStationName,ALFAPHYSVOLUME>(eAStation,APhysVolume));
513 m_pGeoReader->GetASPosParams(&AStationParams,eAStation);
514 sprintf(szLabel,
"ALFA_%s",AStationParams.
szLabel);
515 LogStream<<MSG::INFO<<
"Create ALFA station "<<szLabel<<
endmsg;
516 pPhysAlfaBox=
new GeoFullPhysVol(pLogAlfaBox);
518 pWorld->add(
new GeoNameTag(szLabel));
520 pWorld->add(pPhysAlfaBox);
527 pmapActiveStations->insert(pair<eAStationName,ALFAPHYSVOLUME>(eAStation,APhysVolume));
531 m_pGeoReader->GetASPosParams(&AStationParams,eAStation);
532 sprintf(szLabel,
"ALFA_%s",AStationParams.
szLabel);
533 LogStream<<MSG::INFO<<
"Create ALFA station "<<szLabel<<
endmsg;
534 pPhysAlfaBox=
new GeoFullPhysVol(pLogAlfaBox);
536 pWorld->add(
new GeoNameTag(szLabel));
538 pWorld->add(pPhysAlfaBox);
545 pmapActiveStations->insert(pair<eAStationName,ALFAPHYSVOLUME>(eAStation,APhysVolume));
550 char szLabel[32], szLabel2[32];
551 double fInnerTubeHLength;
552 GeoTube* pTube, *pTube2;
553 GeoLogVol* pLogTube, *pLogTube2;
554 GeoFullPhysVol* pPhysTube, *pPhysTube2;
560 strcpy(szLabel,
"ALFA_Beampipe01");
561 strcpy(szLabel2,
"ALFA_Beampipe01Fill");
565 pLogTube=
new GeoLogVol(szLabel,pTube,
m_MapMaterials[
string(
"Steel")]);
566 pLogTube2=
new GeoLogVol(szLabel2,pTube2,
m_MapMaterials[
string(
"std::Vacuum")]);
567 pPhysTube=
new GeoFullPhysVol(pLogTube);
568 pPhysTube2=
new GeoFullPhysVol(pLogTube2);
571 pWorld->add(
new GeoNameTag(szLabel));
573 pWorld->add(pPhysTube);
575 pWorld->add(
new GeoNameTag(szLabel2));
577 pWorld->add(pPhysTube2);
581 strcpy(szLabel,
"ALFA_Beampipe02");
582 strcpy(szLabel2,
"ALFA_Beampipe02Fill");
588 pLogTube=
new GeoLogVol(szLabel,pTube,
m_MapMaterials[
string(
"Steel")]);
589 pLogTube2=
new GeoLogVol(szLabel2,pTube2,
m_MapMaterials[
string(
"std::Vacuum")]);
590 pPhysTube=
new GeoFullPhysVol(pLogTube);
591 pPhysTube2=
new GeoFullPhysVol(pLogTube2);
594 pWorld->add(
new GeoNameTag(szLabel));
596 pWorld->add(pPhysTube);
598 pWorld->add(
new GeoNameTag(szLabel2));
600 pWorld->add(pPhysTube2);
604 strcpy(szLabel,
"ALFA_Beampipe03");
605 strcpy(szLabel2,
"ALFA_Beampipe03Fill");
609 pLogTube=
new GeoLogVol(szLabel,pTube,
m_MapMaterials[
string(
"Steel")]);
610 pLogTube2=
new GeoLogVol(szLabel2,pTube2,
m_MapMaterials[
string(
"std::Vacuum")]);
611 pPhysTube=
new GeoFullPhysVol(pLogTube);
612 pPhysTube2=
new GeoFullPhysVol(pLogTube2);
615 pWorld->add(
new GeoNameTag(szLabel));
617 pWorld->add(pPhysTube);
619 pWorld->add(
new GeoNameTag(szLabel2));
621 pWorld->add(pPhysTube2);
625 strcpy(szLabel,
"ALFA_Beampipe04");
626 strcpy(szLabel2,
"ALFA_Beampipe04Fill");
630 pLogTube=
new GeoLogVol(szLabel,pTube,
m_MapMaterials[
string(
"Steel")]);
631 pLogTube2=
new GeoLogVol(szLabel2,pTube2,
m_MapMaterials[
string(
"std::Vacuum")]);
632 pPhysTube=
new GeoFullPhysVol(pLogTube);
633 pPhysTube2=
new GeoFullPhysVol(pLogTube2);
636 pWorld->add(
new GeoNameTag(szLabel));
638 pWorld->add(pPhysTube);
640 pWorld->add(
new GeoNameTag(szLabel2));
642 pWorld->add(pPhysTube2);
646 strcpy(szLabel,
"ALFA_Beampipe05");
647 strcpy(szLabel2,
"ALFA_Beampipe05Fill");
653 pLogTube=
new GeoLogVol(szLabel,pTube,
m_MapMaterials[
string(
"Steel")]);
654 pLogTube2=
new GeoLogVol(szLabel2,pTube2,
m_MapMaterials[
string(
"std::Vacuum")]);
655 pPhysTube=
new GeoFullPhysVol(pLogTube);
656 pPhysTube2=
new GeoFullPhysVol(pLogTube2);
659 pWorld->add(
new GeoNameTag(szLabel));
661 pWorld->add(pPhysTube);
663 pWorld->add(
new GeoNameTag(szLabel2));
665 pWorld->add(pPhysTube2);
669 strcpy(szLabel,
"ALFA_Beampipe06");
670 strcpy(szLabel2,
"ALFA_Beampipe06Fill");
674 pLogTube=
new GeoLogVol(szLabel,pTube,
m_MapMaterials[
string(
"Steel")]);
675 pLogTube2=
new GeoLogVol(szLabel2,pTube2,
m_MapMaterials[
string(
"std::Vacuum")]);
676 pPhysTube=
new GeoFullPhysVol(pLogTube);
677 pPhysTube2=
new GeoFullPhysVol(pLogTube2);
680 pWorld->add(
new GeoNameTag(szLabel));
682 pWorld->add(pPhysTube);
684 pWorld->add(
new GeoNameTag(szLabel2));
686 pWorld->add(pPhysTube2);
697 LogStream<<MSG::INFO<<
"ALFA_DetectorFactory::buildALFA_RP"<<
endmsg;
704 if (
m_pDetectorStore->retrieve(pMaterialManager, std::string(
"MATERIALS"))!=StatusCode::SUCCESS){
705 LogStream<<MSG::INFO<<
"Could not load material manager"<<
endmsg;
717 LogStream<<MSG::INFO<<
"Geometry loaded successfully"<<
endmsg;
720 LogStream<<MSG::INFO<<
"Could not load geometry"<<
endmsg;
736 GeoLogVol* pLogRPBox=NULL;
737 GeoLogVol* pLogRPAir=NULL;
738 GeoFullPhysVol* pPhysAlfaBox=NULL;
739 GeoFullPhysVol* pPhysRPBox=NULL;
740 GeoFullPhysVol* pPhysRPAir=NULL;
741 HepGeom::Translate3D ObjTranslate;
742 HepGeom::Rotate3D ObjRotate;
744 GeoLogVol* pLogObj=NULL;
745 GeoFullPhysVol* pPhysObj=NULL;
751 GeoAlignableTransform* pAlTransRPBox;
752 GeoAlignableTransform* pAlTransDetInRPMainPoint;
756 map<eAStationName,ALFAPHYSVOLUME> mapActiveStations;
765 pPhysAlfaBox=mapActiveStations[RPosParams.
eASName].pPhysVolume;
766 TransAlfaBox=mapActiveStations[RPosParams.
eASName].Transform;
772 sprintf(szLabel,
"LogRPBox[%02d]",eRPName);
773 pLogRPBox=
new GeoLogVol(szLabel,pSolidRP,
m_MapMaterials[
string(
"Steel")]);
774 pPhysRPBox=
new GeoFullPhysVol(pLogRPBox);
776 sprintf(szLabel,
"RPBox[%02d]",eRPName);
777 pPhysAlfaBox->add(
new GeoNameTag(szLabel));
778 pPhysAlfaBox->add(pAlTransRPBox);
779 pPhysAlfaBox->add(pPhysRPBox);
783 sprintf(szLabel,
"LogRPAir[%02d]",eRPName);
784 pLogRPAir=
new GeoLogVol(szLabel,pSolidAir,
m_MapMaterials[
string(
"std::Vacuum")]);
785 pPhysRPAir=
new GeoFullPhysVol(pLogRPAir);
787 sprintf(szLabel,
"RPAir[%02d]",eRPName);
788 TransRPAir=HepGeom::Translate3D(0.0,0.0,0.0);
789 pPhysRPBox->add(
new GeoNameTag(szLabel));
791 pPhysRPBox->add(pPhysRPAir);
795 sprintf(szLabel,
"LogTrigger[%02d]",eRPName);
796 pLogObj=
new GeoLogVol(szLabel,pSolidTrigger,
m_MapMaterials[
string(
"PVT")]);
797 pPhysObj=
new GeoFullPhysVol(pLogObj);
798 sprintf(szLabel,
"Trigger[%02d]",eRPName);
799 pPhysRPAir->add(
new GeoNameTag(szLabel));
800 pPhysRPAir->add(pAlTransDetInRPMainPoint);
802 pPhysRPAir->add(pPhysObj);
806 sprintf(szLabel,
"LogRPSupport[%02d]",eRPName);
807 pLogObj=
new GeoLogVol(szLabel,pSolidRPSupport,
m_MapMaterials[
string(
"Steel")]);
808 pPhysObj=
new GeoFullPhysVol(pLogObj);
809 sprintf(szLabel,
"RPSupport[%02d]",eRPName);
810 pPhysRPAir->add(
new GeoNameTag(szLabel));
811 pPhysRPAir->add(pAlTransDetInRPMainPoint);
813 pPhysRPAir->add(pPhysObj);
817 sprintf(szLabel,
"LogG10Substrate[%02d]",eRPName);
818 pLogObj=
new GeoLogVol(szLabel,pSolidG10Shapes,
m_MapMaterials[
string(
"PMMA")]);
820 pPhysObj=
new GeoFullPhysVol(pLogObj);
821 sprintf(szLabel,
"G10Substrate[%02d][%d]",eRPName,
i);
822 pPhysRPAir->add(
new GeoNameTag(szLabel));
823 pPhysRPAir->add(pAlTransDetInRPMainPoint);
825 pPhysRPAir->add(pPhysObj);
830 sprintf(szLabel,
"LogRPSupport[%02d][%d]",eRPName,
i);
831 pLogObj=
new GeoLogVol(szLabel,(*pMapSolidTiPlates)[
i],
m_MapMaterials[
string(
"Titanium")]);
832 pPhysObj=
new GeoFullPhysVol(pLogObj);
833 sprintf(szLabel,
"RPSupport[%02d][%d]",eRPName,
i);
834 pPhysRPAir->add(
new GeoNameTag(szLabel));
835 pPhysRPAir->add(pAlTransDetInRPMainPoint);
837 pPhysRPAir->add(pPhysObj);
850 sprintf(szLabel,
"LogODPlate[%02d][%d]",eRPName,
i);
851 pLogObj=
new GeoLogVol(szLabel,(*pMapSolidOdPlates)[
i],
m_MapMaterials[
string(
"Titanium")]);
852 pPhysObj=
new GeoFullPhysVol(pLogObj);
853 sprintf(szLabel,
"ODPlate[%02d][%d]",eRPName,
i);
854 pPhysRPAir->add(
new GeoNameTag(szLabel));
855 pPhysRPAir->add(pAlTransDetInRPMainPoint);
857 pPhysRPAir->add(pPhysObj);
866 sprintf(szLabel,
"StRPBox[%02d]",eRPName);
869 if(!
sc.isSuccess())
throw std::runtime_error(
"Cannot store alignable record");
871 sprintf(szLabel,
"AlTransRPBox[%02d]",eRPName);
874 if(!
sc.isSuccess())
throw std::runtime_error(
"Cannot store alignable record");
876 sprintf(szLabel,
"AlTransDetInRPMainPoint[%02d]",eRPName);
879 if(!
sc.isSuccess())
throw std::runtime_error(
"Cannot store alignable record");
882 LogStream<<MSG::INFO<<
"ALFA detector successfully created."<<
endmsg;
889 if(pMapSolidOdPlates)
delete pMapSolidOdPlates;
890 if(pMapSolidTiPlates)
delete pMapSolidTiPlates;
903 GeoShapeShift * mowe1 =
new GeoShapeShift(RPbox3,RP_Move1);
904 GeoShapeUnion * RPsemi1 =
new GeoShapeUnion(RPbox2, mowe1);
907 GeoShapeShift * mowe2 =
new GeoShapeShift(RPsemi1,RP_Move2);
908 GeoShapeUnion * RPsemi2 =
new GeoShapeUnion(RPbox1, mowe2);
911 GeoShapeShift * mowe3 =
new GeoShapeShift(RPsemi1,RP_Move3);
912 GeoShapeUnion * RPsemi3 =
new GeoShapeUnion(RPsemi2, mowe3);
918 GeoShapeShift * mowe4 =
new GeoShapeShift(RPtube2,RP_Move4);
919 GeoShapeUnion * RPsemi4 =
new GeoShapeUnion(RPtube1, mowe4);
925 GeoShapeShift * mowe5 =
new GeoShapeShift(RPbox4,RP_Move5);
926 GeoShapeUnion * RPsemi5 =
new GeoShapeUnion(RPsemi4, mowe5);
929 GeoShapeShift * mowe6 =
new GeoShapeShift(RPbox5,RP_Move6);
930 GeoShapeUnion * RPsemi6 =
new GeoShapeUnion(RPsemi5, mowe6);
933 GeoShapeShift * mowe7 =
new GeoShapeShift(RPsemi6,RP_MoveRot7);
934 GeoShapeUnion * RPsemi7 =
new GeoShapeUnion(RPsemi3, mowe7);
939 GeoShapeShift * mowe8 =
new GeoShapeShift(RPbox6,RP_MoveRot8);
940 GeoShapeSubtraction * RPsemi8 =
new GeoShapeSubtraction(RPsemi7, mowe8);
943 GeoShapeShift * mowe9 =
new GeoShapeShift(RPbox6,RP_MoveRot9);
944 GeoShapeSubtraction * shapeRP =
new GeoShapeSubtraction(RPsemi8, mowe9);
958 GeoShapeShift * mowe1 =
new GeoShapeShift(RP_Airbox2,RP_Air_Move1);
959 GeoShapeUnion * RP_Airsemi1 =
new GeoShapeUnion(RP_Airbox1, mowe1);
962 GeoShapeShift * mowe2 =
new GeoShapeShift(RP_Airbox3,RP_Air_Move2);
963 GeoShapeUnion * RP_Airsemi2 =
new GeoShapeUnion(RP_Airsemi1, mowe2);
966 GeoShapeShift * mowe3 =
new GeoShapeShift(RP_Airbox4,RP_Air_Move3);
967 GeoShapeUnion * RP_Airsemi3 =
new GeoShapeUnion(RP_Airsemi2, mowe3);
970 GeoShapeShift * mowe4 =
new GeoShapeShift(RP_Airbox4,RP_Air_Move4);
971 GeoShapeUnion * RP_Airsemi4 =
new GeoShapeUnion(RP_Airsemi3, mowe4);
974 GeoShapeShift * mowe5 =
new GeoShapeShift(RP_Airtube1,RP_Air_MoveRot5);
975 GeoShapeUnion * shapeRP_Air =
new GeoShapeUnion(RP_Airsemi4, mowe5);
987 GeoShapeShift * mowe1 =
new GeoShapeShift(ALFA_Trigbox2, ALFA_Trig_MoveRot1);
988 GeoShapeSubtraction * ALFA_Trigsemi1 =
new GeoShapeSubtraction(ALFA_Trigbox1, mowe1);
991 GeoShapeShift * mowe2 =
new GeoShapeShift(ALFA_Trigsemi1,ALFA_Trig_Move2);
992 GeoShapeUnion * ALFA_Trigsemi2 =
new GeoShapeUnion(ALFA_Trigsemi1, mowe2);
995 GeoShapeShift * mowe3 =
new GeoShapeShift(ALFA_Trigbox3,ALFA_Trig_Move3);
996 GeoShapeUnion * ALFA_Trigsemi3 =
new GeoShapeUnion(ALFA_Trigbox3, mowe3);
999 GeoShapeShift * mowe4 =
new GeoShapeShift(ALFA_Trigsemi2,ALFA_Trig_MoveRot4);
1000 GeoShapeUnion * shapeALFA_Trigger =
new GeoShapeUnion(ALFA_Trigsemi3, mowe4);
1002 return shapeALFA_Trigger;
1013 GeoShapeShift * mowe1 =
new GeoShapeShift(RP_Supbox2, RP_Sup_Move1);
1014 GeoShapeUnion * RP_Supsemi1 =
new GeoShapeUnion(RP_Supbox1, mowe1);
1017 GeoShapeShift * mowe2 =
new GeoShapeShift(RP_Supbox3, RP_Sup_Move2);
1018 GeoShapeUnion * RP_Supsemi2 =
new GeoShapeUnion(RP_Supsemi1, mowe2);
1021 GeoShapeShift * mowe3 =
new GeoShapeShift(RP_Supbox4, RP_Sup_Move3);
1022 GeoShapeUnion * shapeRP_Support =
new GeoShapeUnion(RP_Supsemi2, mowe3);
1024 return shapeRP_Support;
1034 GeoShapeShift* mowe1 =
new GeoShapeShift(G10box1, G10_Move1);
1035 GeoShapeUnion* G10_Subsemi1 =
new GeoShapeUnion(G10trd1, mowe1);
1038 GeoShapeShift* mowe2 =
new GeoShapeShift(G10trd2, G10_Move2);
1039 GeoShapeUnion* shapeG10_Substrate =
new GeoShapeUnion(G10_Subsemi1, mowe2);
1041 return shapeG10_Substrate;
1047 std::map<int,GeoShape*>* pMapTiPlates=
new std::map<int,GeoShape*>();
1055 GeoShapeShift * mowe1 =
new GeoShapeShift(TiPlate_Holder,TiPlate_Move1);
1056 GeoShapeUnion * TiPlatesemi1 =
new GeoShapeUnion(TiPlate_Substr, mowe1);
1062 GeoShapeShift * mowe2 =
new GeoShapeShift(TiPlate_box1, TiPlate_MoveRot2);
1063 GeoShapeShift * mowe3 =
new GeoShapeShift(TiPlate_box1, TiPlate_MoveRot3);
1064 GeoShapeSubtraction * TiPlatesemi2 =
new GeoShapeSubtraction(TiPlatesemi1,mowe2);
1065 GeoShapeSubtraction * TiPlatesemi3 =
new GeoShapeSubtraction(TiPlatesemi2,mowe3);
1068 GeoShapeShift * mowe4 =
new GeoShapeShift(TiPlate_box2, TiPlate_MoveRot4);
1069 GeoShapeSubtraction* shapeTi_Plate =
new GeoShapeSubtraction(TiPlatesemi3, mowe4);
1071 pMapTiPlates->insert(std::pair<int,GeoShape*>(
i,shapeTi_Plate));
1074 return pMapTiPlates;
1080 std::map<int,GeoShape*>* pMapODPlates=
new std::map<int,GeoShape*>();
1087 GeoShapeShift * mowe01 =
new GeoShapeShift(OD_Tibox2,OD_Move01);
1088 GeoShapeUnion * OD_Tisemi01 =
new GeoShapeUnion(OD_Tibox1, mowe01);
1091 GeoShapeShift * mowe02 =
new GeoShapeShift(OD_Tibox3, OD_Move02);
1092 GeoShapeSubtraction * OD_Tisemi02 =
new GeoShapeSubtraction(OD_Tisemi01, mowe02);
1101 GeoShapeShift * mowe04 =
new GeoShapeShift(OD_Tibox6,OD_Move04);
1102 GeoShapeSubtraction * OD_Tisemi04 =
new GeoShapeSubtraction(OD_Titube1, mowe04);
1105 GeoShapeShift * mowe05 =
new GeoShapeShift(OD_Tibox7,OD_Move05);
1106 GeoShapeSubtraction * OD_Tisemi05 =
new GeoShapeSubtraction(OD_Tisemi04, mowe05);
1112 GeoShapeShift * mowe06 =
new GeoShapeShift(OD_Tibox8,OD_Move06);
1113 GeoShapeUnion * OD_Tisemi06 =
new GeoShapeUnion(OD_Tisemi05, mowe06);
1116 GeoShapeShift * mowe07 =
new GeoShapeShift(OD_Tibox9,OD_Move07);
1117 GeoShapeUnion * OD_Tisemi07 =
new GeoShapeUnion(OD_Tisemi06, mowe07);
1122 GeoShapeShift * mowe08 =
new GeoShapeShift(OD_Tisemi07, OD_Move08);
1123 GeoShapeSubtraction * OD_Tisemi08 =
new GeoShapeSubtraction(OD_Tibox5, mowe08);
1126 GeoShapeShift * mowe09 =
new GeoShapeShift(OD_Tisemi07, OD_Move09);
1127 GeoShapeSubtraction * OD_Tisemi09 =
new GeoShapeSubtraction(OD_Tisemi08, mowe09);
1130 GeoShapeShift * mowe11 =
new GeoShapeShift(OD_Tisemi07, OD_Move11);
1131 GeoShapeSubtraction * OD_Tisemi11 =
new GeoShapeSubtraction(OD_Tibox5, mowe11);
1134 GeoShapeShift * mowe12 =
new GeoShapeShift(OD_Tisemi07, OD_Move12);
1135 GeoShapeSubtraction * OD_Tisemi12 =
new GeoShapeSubtraction(OD_Tisemi11, mowe12);
1138 GeoShapeShift * mowe14 =
new GeoShapeShift(OD_Tisemi09,OD_Move14);
1139 GeoShapeUnion * OD_Tisemi14 =
new GeoShapeUnion(OD_Tisemi02, mowe14);
1142 GeoShapeShift * mowe15 =
new GeoShapeShift(OD_Tisemi12,OD_Move15);
1143 GeoShapeUnion * OD_Tisemi15 =
new GeoShapeUnion(OD_Tisemi14, mowe15);
1146 GeoShapeShift * mowe16 =
new GeoShapeShift(OD_Tibox3, OD_Move16);
1147 GeoShapeSubtraction * shapeOD_TiPlate =
new GeoShapeSubtraction(OD_Tisemi15, mowe16);
1149 pMapODPlates->insert(std::pair<int,GeoShape*>(
i,shapeOD_TiPlate));
1152 return pMapODPlates;
1172 GeoShapeShift * mowe1 =
new GeoShapeShift(OD_Cladbox3, OD_CladMove1);
1173 GeoShapeSubtraction * OD_Cladsemi1 =
new GeoShapeSubtraction(OD_Cladtube1, mowe1);
1176 GeoShapeShift * mowe2 =
new GeoShapeShift(OD_Cladbox4, OD_CladMove2);
1177 GeoShapeSubtraction * OD_Cladsemi2 =
new GeoShapeSubtraction(OD_Cladsemi1, mowe2);
1180 GeoShapeShift * mowe3 =
new GeoShapeShift(OD_Cladbox1, OD_CladMov3);
1181 GeoShapeUnion * OD_Cladsemi3 =
new GeoShapeUnion(OD_Cladsemi2, mowe3);
1184 GeoShapeShift * mowe4 =
new GeoShapeShift(OD_Cladbox2, OD_CladMov4);
1185 GeoShapeUnion * shapeOD_Cladding =
new GeoShapeUnion(OD_Cladsemi3, mowe4);
1188 GeoLogVol* logOD_Cladding =
new GeoLogVol(
"logOD_Cladding", shapeOD_Cladding,
m_MapMaterials[
string(
"PMMA")]);
1190 GeoFullPhysVol* physOD_CladdingU_0=NULL;
1191 GeoFullPhysVol* physOD_CladdingU_1=NULL;
1192 GeoFullPhysVol* physOD_CladdingV_0=NULL;
1193 GeoFullPhysVol* physOD_CladdingV_1=NULL;
1201 physOD_CladdingU_0 =
new GeoFullPhysVol(logOD_Cladding);
1205 pPhysMotherVolume->add(pDetTransform);
1207 sprintf(szLabel,
"physODclad[%d][0][%d]",eRPName,
i);
1208 pPhysMotherVolume->add(
new GeoNameTag(szLabel));
1209 pPhysMotherVolume->add(physOD_CladdingU_0);
1212 physOD_CladdingU_1 =
new GeoFullPhysVol(logOD_Cladding);
1216 pPhysMotherVolume->add(pDetTransform);
1218 sprintf(szLabel,
"physODclad[%d][1][%d]",eRPName,
i);
1219 pPhysMotherVolume->add(
new GeoNameTag(szLabel));
1220 pPhysMotherVolume->add(physOD_CladdingU_1);
1223 physOD_CladdingV_0 =
new GeoFullPhysVol(logOD_Cladding);
1227 pPhysMotherVolume->add(pDetTransform);
1229 sprintf(szLabel,
"physODclad[%d][2][%d]",eRPName,
i);
1230 pPhysMotherVolume->add(
new GeoNameTag(szLabel));
1231 pPhysMotherVolume->add(physOD_CladdingV_0);
1234 physOD_CladdingV_1 =
new GeoFullPhysVol(logOD_Cladding);
1238 pPhysMotherVolume->add(pDetTransform);
1240 sprintf(szLabel,
"physODclad[%d][3][%d]",eRPName,
i);
1241 pPhysMotherVolume->add(
new GeoNameTag(szLabel));
1242 pPhysMotherVolume->add(physOD_CladdingV_1);
1263 GeoShapeShift * mowe1 =
new GeoShapeShift(OD_Fiberbox3, OD_FiberMove1);
1264 GeoShapeSubtraction * OD_Fibersemi1 =
new GeoShapeSubtraction(OD_Fibertube1, mowe1);
1267 GeoShapeShift * mowe2 =
new GeoShapeShift(OD_Fiberbox4, OD_FiberMove2);
1268 GeoShapeSubtraction * OD_Fibersemi2 =
new GeoShapeSubtraction(OD_Fibersemi1, mowe2);
1271 GeoShapeShift * mowe4 =
new GeoShapeShift(OD_Fiberbox2, OD_FiberMov4);
1272 GeoShapeUnion * shapeOD_Fiber =
new GeoShapeUnion(OD_Fibersemi2, mowe4);
1274 GeoLogVol* logOD_Fiber =
new GeoLogVol(
"logOD_Fiber", shapeOD_Fiber,
m_MapMaterials[
string(
"Polystyrene")]);
1275 GeoLogVol* logOD_FiberActive =
new GeoLogVol(
"logOD_FiberActive", OD_Fiberbox1,
m_MapMaterials[
string(
"Polystyrene")]);
1278 double fAngle = 0.0;
1284 sprintf(szLabel,
"ODFiberU0Active[%d][%d][%d]",eRPName,iODPlate+1,
i+1);
1290 sprintf(szLabel,
"ODFiberV0Active[%d][%d][%d]",eRPName,iODPlate+1,
i+1);
1293 TransODFiber=HepGeom::Translate3D(4*
CLHEP::mm, fYPos, 0.0*
CLHEP::mm)*HepGeom::RotateZ3D(fAngle);
1296 GeoPhysVol* physOD_FiberActive =
new GeoPhysVol(logOD_FiberActive);
1298 pMotherVolume->add(
new GeoNameTag(szLabel));
1299 pMotherVolume->add(physOD_FiberActive);
1303 HepGeom::Point3D<float> TransPoint=TransTotal*HepGeom::Point3D<float>(0.0,0.0,0.0);
1304 HepGeom::Vector3D<float> TransVector=TransTotal*HepGeom::Vector3D<float>(1.0,0.0,0.0);
1305 float fSlope=
tan(TransVector.phi());
1345 if (eFType==
EFT_ODFIBERU0) sprintf(szLabel,
"ODFiberU0[%d][%d][%d]",eRPName,iODPlate+1,
i+1);
1346 else if (eFType==
EFT_ODFIBERV0) sprintf(szLabel,
"ODFiberV0[%d][%d][%d]",eRPName,iODPlate+1,
i+1);
1347 GeoPhysVol* physOD_Fiber =
new GeoPhysVol(logOD_Fiber);
1349 pMotherVolume->add(
new GeoNameTag(szLabel));
1350 pMotherVolume->add(physOD_Fiber);
1369 GeoShapeShift * mowe1 =
new GeoShapeShift(OD_Fiberbox3, OD_FiberMove1);
1370 GeoShapeSubtraction * OD_Fibersemi1 =
new GeoShapeSubtraction(OD_Fibertube1, mowe1);
1373 GeoShapeShift * mowe2 =
new GeoShapeShift(OD_Fiberbox4, OD_FiberMove2);
1374 GeoShapeSubtraction * OD_Fibersemi2 =
new GeoShapeSubtraction(OD_Fibersemi1, mowe2);
1377 GeoShapeShift * mowe4 =
new GeoShapeShift(OD_Fiberbox2, OD_FiberMov4);
1378 GeoShapeUnion * shapeOD_Fiber =
new GeoShapeUnion(OD_Fibersemi2, mowe4);
1380 GeoLogVol* logOD_Fiber =
new GeoLogVol(
"logOD_Fiber", shapeOD_Fiber,
m_MapMaterials[
string(
"Polystyrene")]);
1381 GeoLogVol* logOD_FiberActive =
new GeoLogVol(
"logOD_FiberActive", OD_Fiberbox1,
m_MapMaterials[
string(
"Polystyrene")]);
1384 double fAngle = 0.0;
1393 sprintf(szLabel,
"ODFiberU1Active[%d][%d][%d]",eRPName,iODPlate+1,
i+1);
1404 sprintf(szLabel,
"ODFiberV1Active[%d][%d][%d]",eRPName,iODPlate+1,
i+1);
1407 TransODFiber=HepGeom::Translate3D(4*
CLHEP::mm, fYPos, 0*
CLHEP::mm)*HepGeom::RotateZ3D(fAngle);
1410 GeoPhysVol* physOD_FiberActive =
new GeoPhysVol(logOD_FiberActive);
1412 pMotherVolume->add(
new GeoNameTag(szLabel));
1413 pMotherVolume->add(physOD_FiberActive);
1417 HepGeom::Point3D<float> TransPoint=TransTotal*HepGeom::Point3D<float>(0.0,0.0,0.0);
1418 HepGeom::Vector3D<float> TransVector=TransTotal*HepGeom::Vector3D<float>(1.0,0.0,0.0);
1419 float fSlope=
tan(TransVector.phi());
1435 if (eFType==
EFT_ODFIBERU1) sprintf(szLabel,
"ODFiberU1[%d][%d][%d]",eRPName,iODPlate+1,
i+1);
1436 else if (eFType==
EFT_ODFIBERV1) sprintf(szLabel,
"ODFiberV1[%d][%d][%d]",eRPName,iODPlate+1,
i+1);
1437 GeoPhysVol* physOD_Fiber =
new GeoPhysVol(logOD_Fiber);
1439 pMotherVolume->add(
new GeoNameTag(szLabel));
1440 pMotherVolume->add(physOD_Fiber);
1458 GeoBox *ALFA_Cladbox1, *ALFA_Cladbox2;
1459 GeoShapeSubtraction* shapeALFA_Clad;
1466 GeoShapeShift* mowe1;
1467 GeoLogVol* pLogCladdingU;
1488 mowe1=
new GeoShapeShift(ALFA_Cladbox2,Clad_Move1);
1489 shapeALFA_Clad =
new GeoShapeSubtraction(ALFA_Cladbox1,mowe1);
1490 pLogCladdingU =
new GeoLogVol(
"logALFA_CladdingU",shapeALFA_Clad,
m_MapMaterials[
string(
"PMMA")]);
1492 sprintf(strLabel,
"ALFA_CladdingU[%d][%d]",eRPName,
i);
1495 physALFA_CladdingU[
i] =
new GeoFullPhysVol(pLogCladdingU);
1496 pMotherVolume->add(
new GeoNameTag(strLabel));
1497 pMotherVolume->add(pDetTransform);
1499 pMotherVolume->add(physALFA_CladdingU[
i]);
1512 GeoFullPhysVol* physiFibU;
1513 GeoLogVol* logALFA_FiberU;
1534 double fXPos=
m_pGeoReader->GetUFiberCentreXPos(eRPName,
i+1, j+1);
1535 double fAngle=
m_pGeoReader->GetUFiberAngle(eRPName,
i+1, j+1);
1536 double fDx=fXPos-(+15.75-0.5*(j))*
CLHEP::mm;
1539 const GeoShapeShift* Sh6=
new GeoShapeShift(CladTrim,TrimMove);
1540 const GeoShapeSubtraction* solFibU=
new GeoShapeSubtraction(Fib1,Sh6);
1541 sprintf(strLabel,
"logALFA_FiberU[%d]",j+1);
1542 logALFA_FiberU=
new GeoLogVol(strLabel,solFibU,
m_MapMaterials[
string(
"Polystyrene")]);
1544 sprintf(strLabel,
"ALFA_FiberU[%d][%d][%d]",eRPName,
i+1,j+1);
1545 TransFiber=HepGeom::Translate3D(fXPos, 0*
CLHEP::mm, 0*
CLHEP::mm)*HepGeom::RotateZ3D(-fAngle);
1546 physiFibU=
new GeoFullPhysVol(logALFA_FiberU);
1547 physALFA_CladdingU[
i]->add(
new GeoNameTag(strLabel));
1549 physALFA_CladdingU[
i]->add(physiFibU);
1553 HepGeom::Point3D<float> TransPoint=TransTotal*HepGeom::Point3D<float>(0.0,0.0,0.0);
1554 HepGeom::Vector3D<float> TransVector=TransTotal*HepGeom::Vector3D<float>(0.0,1.0,0.0);
1555 float fSlope=
tan(TransVector.phi());
1557 m_pGeoReader->SetUFiberPositionToMainReference(eRPName,
i+1, j+1, TransPoint, fSlope);
1571 GeoShapeShift* mowe1;
1572 GeoBox *ALFA_Cladbox1, *ALFA_Cladbox2;
1573 GeoShapeSubtraction* shapeALFA_Clad;
1580 GeoLogVol* pLogCladdingV;
1599 mowe1=
new GeoShapeShift(ALFA_Cladbox2,Clad_Move1);
1600 shapeALFA_Clad =
new GeoShapeSubtraction(ALFA_Cladbox1,mowe1);
1601 pLogCladdingV =
new GeoLogVol(
"logALFA_CladdingV",shapeALFA_Clad,
m_MapMaterials[
string(
"PMMA")]);
1603 sprintf(strLabel,
"ALFA_CladdingV[%d][%d]",eRPName,
i);
1606 physALFA_CladdingV[
i] =
new GeoFullPhysVol(pLogCladdingV);
1607 pMotherVolume->add(
new GeoNameTag(strLabel));
1608 pMotherVolume->add(pDetTransform);
1610 pMotherVolume->add(physALFA_CladdingV[
i]);
1614 GeoFullPhysVol* physiFibV;
1615 GeoLogVol* logALFA_FiberV;
1636 double fXPos=
m_pGeoReader->GetVFiberCentreXPos(eRPName,
i+1, j+1);
1637 double fAngle=
m_pGeoReader->GetVFiberAngle(eRPName,
i+1, j+1);
1638 double fDx=fXPos-(+15.75-0.5*(j))*
CLHEP::mm;
1641 const GeoShapeShift* Sh6=
new GeoShapeShift(CladTrim,TrimMove);
1642 const GeoShapeSubtraction* solFibV=
new GeoShapeSubtraction(Fib1,Sh6);
1643 sprintf(strLabel,
"logALFA_FiberV[%d]",j+1);
1644 logALFA_FiberV=
new GeoLogVol(strLabel,solFibV,
m_MapMaterials[
string(
"Polystyrene")]);
1646 sprintf(strLabel,
"ALFA_FiberV[%d][%d][%d]",eRPName,
i+1,j+1);
1647 TransFiber=HepGeom::Translate3D(fXPos, 0*
CLHEP::mm, 0*
CLHEP::mm)*HepGeom::RotateZ3D(-fAngle);
1649 physiFibV=
new GeoFullPhysVol(logALFA_FiberV);
1650 physALFA_CladdingV[
i]->add(
new GeoNameTag(strLabel));
1652 physALFA_CladdingV[
i]->add(physiFibV);
1657 HepGeom::Point3D<float> TransPoint=TransTotal*HepGeom::Point3D<float>(0.0,0.0,0.0);
1658 HepGeom::Vector3D<float> TransVector=TransTotal*HepGeom::Vector3D<float>(0.0,1.0,0.0);
1659 float fSlope=
tan(TransVector.phi());
1660 m_pGeoReader->SetVFiberPositionToMainReference(eRPName,
i+1, j+1, TransPoint, fSlope);
1722 MsgStream LogStream(
Athena::getMessageSvc(),
"ALFA_DetectorFactory::UserHepGeom::Transform3DInStation(eRPotName eRPName)");
1724 CLHEP::HepRep3x3 matRotation;
1770 LogStream << MSG::WARNING <<
"Unknown Roman pot, station transformation will be set to default (zero) values" <<
endmsg;
1771 structUserTransform.
fAngle = 0.0;
1772 structUserTransform.
vecRotation = CLHEP::Hep3Vector(0.0, 0.0, 0.0);
1773 structUserTransform.
vecTranslation = CLHEP::Hep3Vector(0.0, 0.0, 0.0);
1776 double fPhi = structUserTransform.
fAngle;
1778 CLHEP::Hep3Vector vRotation = CLHEP::Hep3Vector(structUserTransform.
vecRotation);
1779 CLHEP::Hep3Vector vTranslation = CLHEP::Hep3Vector(structUserTransform.
vecTranslation);
1781 matRotation.xx_ = vRotation.x()*vRotation.x()*(1 -
cos(fPhi)) +
cos(fPhi);
1782 matRotation.xy_ = vRotation.x()*vRotation.y()*(1 -
cos(fPhi)) - vRotation.z()*
sin(fPhi);
1783 matRotation.xz_ = vRotation.x()*vRotation.z()*(1 -
cos(fPhi)) + vRotation.y()*
sin(fPhi);
1785 matRotation.yx_ = vRotation.y()*vRotation.x()*(1 -
cos(fPhi)) + vRotation.z()*
sin(fPhi);
1786 matRotation.yy_ = vRotation.y()*vRotation.y()*(1 -
cos(fPhi)) +
cos(fPhi);
1787 matRotation.yz_ = vRotation.y()*vRotation.z()*(1 -
cos(fPhi)) - vRotation.x()*
sin(fPhi);
1789 matRotation.zx_ = vRotation.z()*vRotation.x()*(1 -
cos(fPhi)) - vRotation.y()*
sin(fPhi);
1790 matRotation.zy_ = vRotation.z()*vRotation.y()*(1 -
cos(fPhi)) + vRotation.x()*
sin(fPhi);
1791 matRotation.zz_ = vRotation.z()*vRotation.z()*(1 -
cos(fPhi)) +
cos(fPhi);
1798 MsgStream LogStream(
Athena::getMessageSvc(),
"ALFA_DetectorFactory::UserHepGeom::Transform3DInDetector(eRPotName eRPName)");
1800 CLHEP::HepRep3x3 matRotation;
1846 LogStream << MSG::WARNING <<
"Unknown Roman pot, detector transformation will be set to default (zero) values" <<
endmsg;
1847 structUserTransform.
fAngle = 0.0;
1848 structUserTransform.
vecRotation = CLHEP::Hep3Vector(0.0, 0.0, 0.0);
1849 structUserTransform.
vecTranslation = CLHEP::Hep3Vector(0.0, 0.0, 0.0);
1852 double fPhi = structUserTransform.
fAngle;
1854 CLHEP::Hep3Vector vRotation = CLHEP::Hep3Vector(structUserTransform.
vecRotation);
1855 CLHEP::Hep3Vector vTranslation = CLHEP::Hep3Vector(structUserTransform.
vecTranslation);
1857 matRotation.xx_ = vRotation.x()*vRotation.x()*(1 -
cos(fPhi)) +
cos(fPhi);
1858 matRotation.xy_ = vRotation.x()*vRotation.y()*(1 -
cos(fPhi)) - vRotation.z()*
sin(fPhi);
1859 matRotation.xz_ = vRotation.x()*vRotation.z()*(1 -
cos(fPhi)) + vRotation.y()*
sin(fPhi);
1861 matRotation.yx_ = vRotation.y()*vRotation.x()*(1 -
cos(fPhi)) + vRotation.z()*
sin(fPhi);
1862 matRotation.yy_ = vRotation.y()*vRotation.y()*(1 -
cos(fPhi)) +
cos(fPhi);
1863 matRotation.yz_ = vRotation.y()*vRotation.z()*(1 -
cos(fPhi)) - vRotation.x()*
sin(fPhi);
1865 matRotation.zx_ = vRotation.z()*vRotation.x()*(1 -
cos(fPhi)) - vRotation.y()*
sin(fPhi);
1866 matRotation.zy_ = vRotation.z()*vRotation.y()*(1 -
cos(fPhi)) + vRotation.x()*
sin(fPhi);
1867 matRotation.zz_ = vRotation.z()*vRotation.z()*(1 -
cos(fPhi)) +
cos(fPhi);
1874 MsgStream LogStream(
Athena::getMessageSvc(),
"ALFA_DetectorFactory::Point3DInDetector(eRPotName eRPName)");
1875 HepGeom::Point3D<double>
Point;
1904 LogStream << MSG::WARNING <<
"Unknown Roman pot, transformation point will be set to default (zero) value" <<
endmsg;
1917 GeoAlignableTransform* pAlTrans;
1932 sprintf(szLabel,
"AlTransRPBox[%02d]",eRPName);
1934 if(
sc==StatusCode::SUCCESS){
1940 sprintf(szLabel,
"AlTransDetInRPMainPoint[%02d]",eRPName);
1942 if(
sc==StatusCode::SUCCESS){