32 const std::string& name,
33 const IInterface * parent)
42 declareInterface<IGeometryManagerTool>(
this);
131 return StatusCode::FAILURE;
138 msg(MSG::FATAL) <<
" Cannot retrieve TRT ID Helper " <<
endmsg;
139 return StatusCode::FAILURE;
146 msg(MSG::FATAL) <<
" Cannot retrieve TRT Detector Manager " <<
endmsg;
147 return StatusCode::FAILURE;
161 return StatusCode::FAILURE;
163 return StatusCode::SUCCESS;
171 return StatusCode::SUCCESS;
217 case 1:
case 2:
case 3:
234 case 1:
case 2:
case 200:
case 3:
260 std::vector<Trk::AlignModule *>::const_iterator imod =
m_alignModuleList.begin();
261 std::vector<Trk::AlignModule *>::const_iterator imod_end =
m_alignModuleList.end();
262 for( ; imod!=imod_end; ++imod)
280 ATH_MSG_INFO(
"Total number of degrees of freedom: "<<nDoF);
334 ATH_MSG_INFO(
"Preparing the TRT geometry for L0: whole TRT");
363 unsigned int trtmaxHash =
m_idHelper->straw_layer_hash_max();
389 msg(MSG::DEBUG)<<
"... TRT barrel element"<<
endmsg;
391 msg(MSG::DEBUG)<<
"... TRT endcap element"<<
endmsg;
396 (*trtIdHashMap)[idHash] = trt;
405 ATH_MSG_DEBUG(
"TRT L0 module successfully added to the list");
414 ATH_MSG_INFO(
"Preparing the TRT Barrelgeometry for L1: whole barrel");
426 unsigned int maxHash = 0;
449 trtBarrel->setName(
"TRT Barrel");
450 trtBarrel->setIdentifier(
m_idHelper->barrel_ec_id(-1));
453 ATH_MSG_DEBUG(
"Module "<<trtBarrel->name()<<
" NOT selected");
458 for (
unsigned int iLayer = 0; iLayer <
m_trtDetManager->getNumerology()->getNBarrelRings(); iLayer++)
459 for (
unsigned int iPhiModule = 0; iPhiModule <
m_trtDetManager->getNumerology()->getNBarrelPhi(); iPhiModule++)
460 for (
unsigned int iStrawLayer = 0; iStrawLayer <
m_trtDetManager->getNumerology()->getNBarrelLayers(iLayer); iStrawLayer++)
461 for (
int iSide = 0; iSide < 2; iSide++) {
474 ATH_MSG_DEBUG(
"No TRT_BarrelElement with side-layer-phi-strawLayer:" <<iSide<<
"-"<<iLayer<<
"-"<<iPhiModule<<
"-"<<iStrawLayer);
489 ATH_MSG_INFO(
"Preparing the TRT Endcap geometry for L1: 2 endcaps");
501 unsigned int maxHash = 0;
522 for (
int iSide=0;iSide<2;iSide++) {
527 trtEndCap[iSide]->setName(
"TRT EndCap C");
529 trtEndCap[iSide]->setName(
"TRT EndCap A");
531 int idSide = iSide ? 2 : -2;
532 trtEndCap[iSide]->setIdentifier(
m_idHelper->barrel_ec_id(idSide));
535 ATH_MSG_DEBUG(
"Module "<<trtEndCap[iSide]->name()<<
" NOT selected");
536 delete trtEndCap[iSide];
539 for (
unsigned int iWheel = 0; iWheel <
m_trtDetManager->getNumerology()->getNEndcapWheels(); iWheel++)
540 for (
unsigned int iStrawLayer = 0; iStrawLayer <
m_trtDetManager->getNumerology()->getNEndcapLayers(iWheel); iStrawLayer++)
541 for(
unsigned int iPhi = 0; iPhi <
m_trtDetManager->getNumerology()->getNEndcapPhi(); iPhi++) {
551 (*trtIdHashMap)[element->
identifyHash()] = trtEndCap[iSide];
554 ATH_MSG_DEBUG(
"No TRT_EndcapElement with side-wheel-strawLayer-phi:" <<iSide<<
"-"<<iWheel<<
"-"<<iStrawLayer<<
"-"<<iPhi);
559 Amg::Transform3D localtoglobal = translation * Amg::RotationMatrix3D::Identity();
560 trtEndCap[iSide]->setGlobalFrameToAlignFrameTransform(localtoglobal.inverse());
575 ATH_MSG_INFO(
"Preparing the TRT Barrel geometry for L2: 3 layers with 32 modules each (96 modules)");
592 unsigned int maxHash = 0;
619 for (
unsigned int iPhiModule = 0; iPhiModule <
m_trtDetManager->getNumerology()->getNBarrelPhi(); iPhiModule++) {
620 for (
unsigned int iLayer = 0; iLayer <
m_trtDetManager->getNumerology()->getNBarrelRings(); iLayer++) {
624 mod->setIdentifier(
m_idHelper->module_id(-1, iPhiModule, iLayer));
626 std::stringstream name;
627 name<<
"TRT/Barrel/Module_-1_"<<iPhiModule<<
"_"<<iLayer;
628 mod->setName(name.str());
639 std::vector<const Trk::TrkDetElementBase *> centralLayers;
641 int maxstrawlayer =
m_trtDetManager->getNumerology()->getNBarrelLayers(iLayer);
643 for (
int iStrawLayer = 0; iStrawLayer < maxstrawlayer; iStrawLayer++) {
645 for (
int iSide = 0; iSide < 2; iSide++) {
667 if( iStrawLayer == maxstrawlayer/2 ) {
669 centralLayers.push_back(element);
673 ATH_MSG_DEBUG(
"No TRT_BarrelElement with side-layer-phi-strawLayer:" <<iSide<<
"-"<<iLayer<<
"-"<<iPhiModule<<
"-"<<iStrawLayer);
694 std::vector<std::vector<const Trk::TrkDetElementBase *> *> centralLayersVec;
695 centralLayersVec.push_back(¢ralLayers);
700 centralLayers.front()->transform().rotation() : centralLayers.back()->transform().rotation();
705 ATH_MSG_DEBUG(
"centerOfGravity "<< mod->centerOfGravity(centralLayersVec));
706 ATH_MSG_DEBUG(
"Prepared local to global transform : "<<std::setprecision(12)<<localToGlobal.translation()<<
" "<<localToGlobal.rotation());
708 mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
724 ATH_MSG_INFO(
"Preparing the TRT Endcap geometry for L2: 2 x 40 rings");
741 unsigned int maxHash = 0;
752 for (
int iSide = 0; iSide < 2; iSide++) {
753 int idSide = iSide ? 2 : -2;
761 std::unique_ptr<Trk::AlignModule> mod;
762 for (
unsigned int iWheel = 0; iWheel <
m_trtDetManager->getNumerology()->getNEndcapWheels(); iWheel++) {
764 for (
unsigned int iStrawLayer = 0; iStrawLayer <
m_trtDetManager->getNumerology()->getNEndcapLayers(iWheel); iStrawLayer++) {
767 if(iStrawLayer%4==0) {
768 if(iRing >= 0 && mod) {
776 Amg::Transform3D localToGlobal = translation * Amg::RotationMatrix3D::Identity();
778 mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
793 int strawLayerForRing = (iStrawLayer/4) * 4;
794 mod->setIdentifier(
m_idHelper->layer_id((iSide ? 2:-2),0,iWheel,strawLayerForRing));
796 std::stringstream name;
797 name<<
"TRT/Endcap/Module_"<<(iSide ? 2:-2)<<
"_"<<iRing;
798 mod->setName(name.str());
809 for(
unsigned int iPhi = 0; iPhi <
m_trtDetManager->getNumerology()->getNEndcapPhi(); iPhi++) {
823 ATH_MSG_DEBUG(
"No TRT_EndcapElement with side-wheel-strawLayer-phi:" <<iSide<<
"-"<<iWheel<<
"-"<<iStrawLayer<<
"-"<<iPhi);
836 Amg::Transform3D localToGlobal = translation * Amg::RotationMatrix3D::Identity();
838 mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
858 ATH_MSG_INFO(
"Preparing the _OLD_ TRT Endcap geometry for L2: 2 x 14 wheels");
875 unsigned int maxHash = 0;
886 for (
int iSide = 0; iSide < 2; iSide++) {
887 int idSide = iSide ? 2 : -2;
894 for (
unsigned int iWheel = 0; iWheel <
m_trtDetManager->getNumerology()->getNEndcapWheels(); iWheel++) {
898 mod->setIdentifier(
m_idHelper->module_id(idSide,0,iWheel));
900 std::stringstream name;
901 name<<
"TRT/Endcap/Module_"<<idSide<<
"_"<<iWheel;
902 mod->setName(name.str());
912 for (
unsigned int iStrawLayer = 0; iStrawLayer <
m_trtDetManager->getNumerology()->getNEndcapLayers(iWheel); iStrawLayer++) {
913 for(
unsigned int iPhi = 0; iPhi <
m_trtDetManager->getNumerology()->getNEndcapPhi(); iPhi++) {
927 ATH_MSG_DEBUG(
"No TRT_EndcapElement with side-wheel-strawLayer-phi:" <<iSide<<
"-"<<iWheel<<
"-"<<iStrawLayer<<
"-"<<iPhi);
933 Amg::Transform3D localtoglobal = translation * Amg::RotationMatrix3D::Identity();
935 mod->setGlobalFrameToAlignFrameTransform(localtoglobal.inverse());
951 ATH_MSG_INFO(
"Preparing the TRT Barrel geometry for L3");
967 unsigned int maxHash =
m_idHelper->straw_hash_max();
974 for (
unsigned int iPhiModule = 0; iPhiModule <
m_trtDetManager->getNumerology()->getNBarrelPhi(); iPhiModule++) {
976 for (
unsigned int iLayer = 0; iLayer <
m_trtDetManager->getNumerology()->getNBarrelRings(); iLayer++) {
980 ATH_MSG_INFO(
"Skipping barrel layer "<<iLayer<<
" phi sector "<<iPhiModule);
984 for (
unsigned int iStrawLayer = 0; iStrawLayer <
m_trtDetManager->getNumerology()->getNBarrelLayers(iLayer); iStrawLayer++) {
986 for (
int iSide = 0; iSide < 2; iSide++) {
988 int idSide = iSide ? 1 : -1;
992 for (
unsigned int iStraw = 0; iStraw< element->
nStraws(); iStraw++)
1000 mod->setIdentifier(moduleId);
1002 std::stringstream name;
1003 name<<
"TRT/Barrel/Straw_"<<idSide<<
"_"<<iPhiModule<<
"_"<<iLayer<<
"_"<<iStrawLayer<<
"_"<<iStraw;
1004 mod->setName(name.str());
1019 (*trtIdHashMap)[
m_idHelper->straw_hash(moduleId)] = mod;
1024 ATH_MSG_DEBUG(
"Prepared local to global transform : "<<std::setprecision(12)
1025 <<localToGlobal.translation()<<
" "<<localToGlobal.rotation());
1026 ATH_MSG_DEBUG(
" rotation = (" << lgrot(2,1) <<
"," << lgrot(0,2) <<
"," << lgrot(1,0) <<
")");
1028 mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
1033 ATH_MSG_DEBUG(
"Straw layer transform : "<<std::setprecision(12)
1034 <<aatr.translation()<<
" "<<aatr.rotation());
1035 ATH_MSG_DEBUG(
" rotation = (" << aarot(2,1) <<
"," << aarot(0,2) <<
"," << aarot(1,0) <<
")");
1042 ATH_MSG_DEBUG(
"No TRT_BarrelElement with side-layer-phi-strawLayer:" <<iSide<<
"-"<<iLayer<<
"-"<<iPhiModule<<
"-"<<iStrawLayer);
1056 ATH_MSG_INFO(
"Preparing the TRT Endcap geometry for L3");
1072 unsigned int maxHash =
m_idHelper->straw_hash_max();
1080 for (
int iSide = 0; iSide < 2; iSide++) {
1081 int idSide = iSide ? 2 : -2;
1089 for (
unsigned int iWheel = 0; iWheel <
m_trtDetManager->getNumerology()->getNEndcapWheels(); iWheel++) {
1093 for (
unsigned int iPhiModule = 0; iPhiModule <
m_trtDetManager->getNumerology()->getNEndcapPhi(); iPhiModule++) {
1098 ATH_MSG_INFO(
"Skipping endcap wheel "<<iWheel<<
" phi sector "<<iPhiModule);
1103 for (
unsigned int iStrawLayer = 0; iStrawLayer <
m_trtDetManager->getNumerology()->getNEndcapLayers(iWheel); iStrawLayer++) {
1108 for (
unsigned int iStraw = 0; iStraw< element->
nStraws(); iStraw++) {
1115 mod->setIdentifier(moduleId);
1117 std::stringstream name;
1118 name<<
"TRT/Endcap/Straw_"<<idSide<<
"_"<<iPhiModule<<
"_"<<iWheel<<
"_"<<iStrawLayer<<
"_"<<iStraw;
1119 mod->setName(name.str());
1134 (*trtIdHashMap)[
m_idHelper->straw_hash(moduleId)] = mod;
1140 ATH_MSG_DEBUG(
"Prepared local to global transform : "<<std::setprecision(12)
1141 <<localToGlobal.translation()<<
" "<<localToGlobal.rotation());
1143 ATH_MSG_DEBUG(
" rotation = (" << lgrot(2,1) <<
"," << lgrot(0,2) <<
"," << lgrot(1,0) <<
")");
1145 mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
1150 ATH_MSG_DEBUG(
"Straw layer transform : "<<std::setprecision(12)
1151 <<aatr.translation()<<
" "<<aatr.rotation());
1152 ATH_MSG_DEBUG(
" rotation = (" << aarot(2,1) <<
"," << aarot(0,2) <<
"," << aarot(1,0) <<
")");
1159 ATH_MSG_DEBUG(
"No TRT_EndcapElement with endcap-wheel-strawLayer-phi:" <<iSide<<
"-"<<iWheel<<
"-"<<iStrawLayer<<
"-"<<iPhiModule);
1184 for(
unsigned int ipar=0;ipar<fullModPars->
size();++ipar) {
1196 ATH_MSG_DEBUG(
"parameter type "<<fullModPars->
at(ipar)->paramType()<<
" is now active");
1200 ATH_MSG_DEBUG(
"parameter type "<<fullModPars->
at(ipar)->paramType()<<
" is NOT active");
1210 ATH_MSG_DEBUG(
"parameter type "<<fullModPars->
at(ipar)->paramType()<<
" is now active");
1214 ATH_MSG_DEBUG(
"parameter type "<<fullModPars->
at(ipar)->paramType()<<
" is NOT active");
1219 allFullModPars->push_back(fullModPars);
1220 allActiveModPars->push_back(activeModPars);
1227 for(
unsigned int ipar=0;ipar<modPars->
size();++ipar) {
1229 if(
m_idHelper->is_barrel(module->identify()))
1230 switch(modPars->
at(ipar)->paramType()) {
1260 switch(modPars->
at(ipar)->paramType()) {
1299 for(
int i=0;i<nsel;++i)
1378 ATH_MSG_INFO(
"---------------------------------------------------");
1389 Amg::Transform3D localtoglobal = (
module->globalFrameToAlignFrame()).inverse();
1390 ATH_MSG_DEBUG(
" - local to global : "<<std::setprecision(12)<<localtoglobal.translation()<<
" "<<localtoglobal.rotation());
1393 int npars = pars->size();
1394 ATH_MSG_DEBUG(
" - number of active transform parameters: "<<npars);
1395 for(
int j=0;j<npars;j++)
1396 ATH_MSG_DEBUG(
" * par "<<j<<
" \'"<<(*pars)[j]->dumpType()<<
"\' : sigma = "<<(*pars)[j]->sigma()<<
" , softCut = "<<(*pars)[j]->softCut());
1398 ATH_MSG_INFO(
"---------------------------------------------------");
An STL vector of pointers that by default owns its pointed-to elements.
This is an Identifier helper class for the TRT subdetector.
AlignModule is a grouping of TrkDetElementBase objects, grouped according to the type of alignment,...
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
const ServiceHandle< StoreGateSvc > & detStore() const
bool msgLvl(const MSG::Level lvl) const
const T * at(size_type n) const
Access an element, as an rvalue.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
This is a "hash" representation of an Identifier.
Extended TRT_BaseElement to describe a TRT readout element, this is a planar layer with n ( order of ...
Virtual base class of TRT readout elements.
virtual IdentifierHash identifyHash() const override final
identifier hash
unsigned int nStraws() const
Number of straws in the element.
virtual Identifier identify() const override final
identifier of this detector element:
virtual const Amg::Transform3D & transform() const override final
Element Surface: Get Transform of element in Tracking frame: Amg.
const Amg::Transform3D & strawTransform(unsigned int straw) const
Straw transform - fast access in array, in Tracking frame: Amg.
Extended class of a TRT_BaseElement to describe a readout elment in the endcap.
static Amg::Vector3D centerOfGravity(const std::vector< DetElementCollection * > &)
Calculates center of gravity (average center of associated det-elements).
void setIdHash(IdentifierHash id)
void setIdentifier(Identifier identifier)
Set and return identifier of module.
const std::string & name() const
void setName(const std::string &name)
Set and return name of align module (i.e.
void addDetElement(AlignModule::DetectorType detType, const TrkDetElementBase *det, const Amg::Transform3D &transform, Identifier id=Identifier())
used to add a detector element to the align module with a align frame to detector element local frame...
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Eigen::Affine3d Transform3D
Eigen::Translation< double, 3 > Translation3D
@ OWN_ELEMENTS
this data object owns its elements
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Ensure that the ATLAS eigen extensions are properly loaded.
std::vector< AlignModule * > AlignModuleList