689{
693
694 LogStream<<MSG::INFO<<
"ALFA_DetectorFactory::buildALFA_RP"<<
endmsg;
695 LogStream<<MSG::DEBUG<<
"Build ALFA Roman Pot"<<
endmsg;
696
697
699
700 StoredMaterialManager* pMaterialManager = nullptr;
701 if (
m_pDetectorStore->retrieve(pMaterialManager, std::string(
"MATERIALS"))!=StatusCode::SUCCESS){
702 LogStream<<MSG::INFO<<
"Could not load material manager"<<
endmsg;
703 return;
704 }
705
706
708
709
711
712
714 LogStream<<MSG::INFO<<
"Geometry loaded successfully"<<
endmsg;
715 }
716 else{
717 LogStream<<MSG::INFO<<
"Could not load geometry"<<
endmsg;
718 return;
719 }
720
721
729
730 char szLabel[32]{};
731 RPPOSPARAMS RPosParams;
732 ASPOSPARAMS AStationParams;
733 GeoLogVol* pLogRPBox=NULL;
734 GeoLogVol* pLogRPAir=NULL;
735 GeoFullPhysVol* pPhysAlfaBox=NULL;
736 GeoFullPhysVol* pPhysRPBox=NULL;
737 GeoFullPhysVol* pPhysRPAir=NULL;
738 HepGeom::Translate3D ObjTranslate;
739 HepGeom::Rotate3D ObjRotate;
740
741 GeoLogVol* pLogObj=NULL;
742 GeoFullPhysVol* pPhysObj=NULL;
743 HepGeom::Transform3D TransAlfaBox,TransRPAir,TransTot;
744 HepGeom::Transform3D TransAlfaBoxRotate;
745 HepGeom::Transform3D TransRPBoxRotate;
746
747 StoredAlignX *pAlignX;
748 GeoAlignableTransform* pAlTransRPBox;
749 GeoAlignableTransform* pAlTransDetInRPMainPoint;
750 StoredPhysVol* pStPhysRPBox=NULL;
751
752
753 map<eAStationName,ALFAPHYSVOLUME> mapActiveStations;
756
757
759 {
762 pPhysAlfaBox=mapActiveStations[RPosParams.
eASName].pPhysVolume;
763 TransAlfaBox=mapActiveStations[RPosParams.
eASName].Transform;
764
767
768
769 sprintf(szLabel,"LogRPBox[%02d]",eRPName);
770 pLogRPBox=
new GeoLogVol(szLabel,pSolidRP,
m_MapMaterials[
string(
"Steel")]);
771 pPhysRPBox=new GeoFullPhysVol(pLogRPBox);
772
773 sprintf(szLabel,"RPBox[%02d]",eRPName);
774 pPhysAlfaBox->add(new GeoNameTag(szLabel));
775 pPhysAlfaBox->add(pAlTransRPBox);
776 pPhysAlfaBox->add(pPhysRPBox);
777
778
779
780 sprintf(szLabel,"LogRPAir[%02d]",eRPName);
781 pLogRPAir=
new GeoLogVol(szLabel,pSolidAir,
m_MapMaterials[
string(
"std::Vacuum")]);
782 pPhysRPAir=new GeoFullPhysVol(pLogRPAir);
783
784 sprintf(szLabel,"RPAir[%02d]",eRPName);
785 TransRPAir=HepGeom::Translate3D(0.0,0.0,0.0);
786 pPhysRPBox->add(new GeoNameTag(szLabel));
788 pPhysRPBox->add(pPhysRPAir);
789
790
791
792 sprintf(szLabel,"LogTrigger[%02d]",eRPName);
793 pLogObj=
new GeoLogVol(szLabel,pSolidTrigger,
m_MapMaterials[
string(
"PVT")]);
794 pPhysObj=new GeoFullPhysVol(pLogObj);
795 sprintf(szLabel,"Trigger[%02d]",eRPName);
796 pPhysRPAir->add(new GeoNameTag(szLabel));
797 pPhysRPAir->add(pAlTransDetInRPMainPoint);
798 pPhysRPAir->add(new GeoTransform(GeoTrf::Translate3D(-22.0*CLHEP::mm,-31.325*CLHEP::mm,11.3*CLHEP::mm)));
799 pPhysRPAir->add(pPhysObj);
800
801
802
803 sprintf(szLabel,"LogRPSupport[%02d]",eRPName);
804 pLogObj=
new GeoLogVol(szLabel,pSolidRPSupport,
m_MapMaterials[
string(
"Steel")]);
805 pPhysObj=new GeoFullPhysVol(pLogObj);
806 sprintf(szLabel,"RPSupport[%02d]",eRPName);
807 pPhysRPAir->add(new GeoNameTag(szLabel));
808 pPhysRPAir->add(pAlTransDetInRPMainPoint);
809 pPhysRPAir->add(new GeoTransform(GeoTrf::Translate3D(0.0*CLHEP::mm,85.475*CLHEP::mm,-28.5*CLHEP::mm)));
810 pPhysRPAir->add(pPhysObj);
811
812
813
814 sprintf(szLabel,"LogG10Substrate[%02d]",eRPName);
815 pLogObj=
new GeoLogVol(szLabel,pSolidG10Shapes,
m_MapMaterials[
string(
"PMMA")]);
817 pPhysObj=new GeoFullPhysVol(pLogObj);
818 sprintf(szLabel,"G10Substrate[%02d][%d]",eRPName,i);
819 pPhysRPAir->add(new GeoNameTag(szLabel));
820 pPhysRPAir->add(pAlTransDetInRPMainPoint);
821 pPhysRPAir->add(new GeoTransform(GeoTrf::Translate3D(ALFA_stagger[i]*CLHEP::mm,-27.525*CLHEP::mm,(-17.5+i*2)*CLHEP::mm)*GeoTrf::RotateX3D(-90.0*CLHEP::deg)));
822 pPhysRPAir->add(pPhysObj);
823 }
824
825
827 sprintf(szLabel,"LogRPSupport[%02d][%d]",eRPName,i);
828 pLogObj=
new GeoLogVol(szLabel,(*pMapSolidTiPlates)[i],
m_MapMaterials[
string(
"Titanium")]);
829 pPhysObj=new GeoFullPhysVol(pLogObj);
830 sprintf(szLabel,"RPSupport[%02d][%d]",eRPName,i);
831 pPhysRPAir->add(new GeoNameTag(szLabel));
832 pPhysRPAir->add(pAlTransDetInRPMainPoint);
833 pPhysRPAir->add(new GeoTransform(GeoTrf::Translate3D(0.0*CLHEP::mm,5.975*CLHEP::mm,(-17.5+i*2)*CLHEP::mm)));
834 pPhysRPAir->add(pPhysObj);
835 }
836
837
838
840
843
844
845
847 sprintf(szLabel,"LogODPlate[%02d][%d]",eRPName,i);
848 pLogObj=
new GeoLogVol(szLabel,(*pMapSolidOdPlates)[i],
m_MapMaterials[
string(
"Titanium")]);
849 pPhysObj=new GeoFullPhysVol(pLogObj);
850 sprintf(szLabel,"ODPlate[%02d][%d]",eRPName,i);
851 pPhysRPAir->add(new GeoNameTag(szLabel));
852 pPhysRPAir->add(pAlTransDetInRPMainPoint);
853 pPhysRPAir->add(new GeoTransform(GeoTrf::Translate3D(0.0*CLHEP::mm,-0.175*CLHEP::mm,(15+i*2)*CLHEP::mm)));
854 pPhysRPAir->add(pPhysObj);
855 }
856
857
858
860
861
862
863 sprintf(szLabel,"StRPBox[%02d]",eRPName);
864 pStPhysRPBox=new StoredPhysVol(pPhysRPBox);
866 if(!
sc.isSuccess())
throw std::runtime_error(
"Cannot store alignable record");
867
868 sprintf(szLabel,"AlTransRPBox[%02d]",eRPName);
869 pAlignX = new StoredAlignX(pAlTransRPBox);
871 if(!
sc.isSuccess())
throw std::runtime_error(
"Cannot store alignable record");
872
873 sprintf(szLabel,"AlTransDetInRPMainPoint[%02d]",eRPName);
874 pAlignX = new StoredAlignX(pAlTransDetInRPMainPoint);
876 if(!
sc.isSuccess())
throw std::runtime_error(
"Cannot store alignable record");
877 }
878
879 LogStream<<MSG::INFO<<
"ALFA detector successfully created."<<
endmsg;
880
882 {
884 }
885
886 if(pMapSolidOdPlates) delete pMapSolidOdPlates;
887 if(pMapSolidTiPlates) delete pMapSolidTiPlates;
888}
GeoShape * CreateSolidG10Shapes()
GeoShape * CreateSolidRP()
GeoShape * CreateSolidTrigger()
void ConstructBeampipe(GeoPhysVol *pWorld)
void ConstructODFiberCladdings(const eRPotName eRPName, GeoFullPhysVol *pPhysMotherVolume, const HepGeom::Transform3D &MotherTransform, GeoAlignableTransform *pDetTransform)
void ConstructVFiberCladdings(const eRPotName eRPName, GeoFullPhysVol *pMotherVolume, const HepGeom::Transform3D &MotherTransform, GeoAlignableTransform *pDetTransform)
void CreateAxes(GeoPhysVol *pMotherVolume)
bool ReadGeometry(bool bAlignCorrections=false)
void ConstructAlfaStations(std::map< eAStationName, ALFAPHYSVOLUME > *pmapActiveStations, GeoPhysVol *pWorld)
GeoShape * CreateSolidAir()
GeoShape * CreateSolidRPSupport()
std::map< int, GeoShape * > * CreateSolidTiPlates()
void DefineMaterials(StoredMaterialManager *pMaterialManager)
std::list< eRPotName > m_ListExistingRPots
std::map< int, GeoShape * > * CreateSolidODPlates()
void ConstructUFiberCladdings(const eRPotName eRPName, GeoFullPhysVol *pMotherVolume, const HepGeom::Transform3D &MotherTransform, GeoAlignableTransform *pDetTransform)
::StatusCode StatusCode
StatusCode definition for legacy code.
HepGeom::Transform3D RPTransformInStation
HepGeom::Transform3D DetTransformInMainPoint