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());
789 mod= std::make_unique<Trk::AlignModule>(
this);
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++) {
824 ATH_MSG_DEBUG(
"No TRT_EndcapElement with side-wheel-strawLayer-phi:" <<iSide<<
"-"<<iWheel<<
"-"<<iStrawLayer<<
"-"<<iPhi);
837 Amg::Transform3D localToGlobal = translation * Amg::RotationMatrix3D::Identity();
839 mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
859 ATH_MSG_INFO(
"Preparing the _OLD_ TRT Endcap geometry for L2: 2 x 14 wheels");
876 unsigned int maxHash = 0;
887 for (
int iSide = 0; iSide < 2; iSide++) {
888 int idSide = iSide ? 2 : -2;
895 for (
unsigned int iWheel = 0; iWheel <
m_trtDetManager->getNumerology()->getNEndcapWheels(); iWheel++) {
899 mod->setIdentifier(
m_idHelper->module_id(idSide,0,iWheel));
901 std::stringstream name;
902 name<<
"TRT/Endcap/Module_"<<idSide<<
"_"<<iWheel;
903 mod->setName(name.str());
913 for (
unsigned int iStrawLayer = 0; iStrawLayer <
m_trtDetManager->getNumerology()->getNEndcapLayers(iWheel); iStrawLayer++) {
914 for(
unsigned int iPhi = 0; iPhi <
m_trtDetManager->getNumerology()->getNEndcapPhi(); iPhi++) {
928 ATH_MSG_DEBUG(
"No TRT_EndcapElement with side-wheel-strawLayer-phi:" <<iSide<<
"-"<<iWheel<<
"-"<<iStrawLayer<<
"-"<<iPhi);
934 Amg::Transform3D localtoglobal = translation * Amg::RotationMatrix3D::Identity();
936 mod->setGlobalFrameToAlignFrameTransform(localtoglobal.inverse());
952 ATH_MSG_INFO(
"Preparing the TRT Barrel geometry for L3");
968 unsigned int maxHash =
m_idHelper->straw_hash_max();
975 for (
unsigned int iPhiModule = 0; iPhiModule <
m_trtDetManager->getNumerology()->getNBarrelPhi(); iPhiModule++) {
977 for (
unsigned int iLayer = 0; iLayer <
m_trtDetManager->getNumerology()->getNBarrelRings(); iLayer++) {
981 ATH_MSG_INFO(
"Skipping barrel layer "<<iLayer<<
" phi sector "<<iPhiModule);
985 for (
unsigned int iStrawLayer = 0; iStrawLayer <
m_trtDetManager->getNumerology()->getNBarrelLayers(iLayer); iStrawLayer++) {
987 for (
int iSide = 0; iSide < 2; iSide++) {
989 int idSide = iSide ? 1 : -1;
993 for (
unsigned int iStraw = 0; iStraw< element->
nStraws(); iStraw++)
1001 mod->setIdentifier(moduleId);
1003 std::stringstream name;
1004 name<<
"TRT/Barrel/Straw_"<<idSide<<
"_"<<iPhiModule<<
"_"<<iLayer<<
"_"<<iStrawLayer<<
"_"<<iStraw;
1005 mod->setName(name.str());
1020 (*trtIdHashMap)[
m_idHelper->straw_hash(moduleId)] = mod;
1025 ATH_MSG_DEBUG(
"Prepared local to global transform : "<<std::setprecision(12)
1026 <<localToGlobal.translation()<<
" "<<localToGlobal.rotation());
1027 ATH_MSG_DEBUG(
" rotation = (" << lgrot(2,1) <<
"," << lgrot(0,2) <<
"," << lgrot(1,0) <<
")");
1029 mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
1034 ATH_MSG_DEBUG(
"Straw layer transform : "<<std::setprecision(12)
1035 <<aatr.translation()<<
" "<<aatr.rotation());
1036 ATH_MSG_DEBUG(
" rotation = (" << aarot(2,1) <<
"," << aarot(0,2) <<
"," << aarot(1,0) <<
")");
1043 ATH_MSG_DEBUG(
"No TRT_BarrelElement with side-layer-phi-strawLayer:" <<iSide<<
"-"<<iLayer<<
"-"<<iPhiModule<<
"-"<<iStrawLayer);
1057 ATH_MSG_INFO(
"Preparing the TRT Endcap geometry for L3");
1073 unsigned int maxHash =
m_idHelper->straw_hash_max();
1081 for (
int iSide = 0; iSide < 2; iSide++) {
1082 int idSide = iSide ? 2 : -2;
1090 for (
unsigned int iWheel = 0; iWheel <
m_trtDetManager->getNumerology()->getNEndcapWheels(); iWheel++) {
1094 for (
unsigned int iPhiModule = 0; iPhiModule <
m_trtDetManager->getNumerology()->getNEndcapPhi(); iPhiModule++) {
1099 ATH_MSG_INFO(
"Skipping endcap wheel "<<iWheel<<
" phi sector "<<iPhiModule);
1104 for (
unsigned int iStrawLayer = 0; iStrawLayer <
m_trtDetManager->getNumerology()->getNEndcapLayers(iWheel); iStrawLayer++) {
1109 for (
unsigned int iStraw = 0; iStraw< element->
nStraws(); iStraw++) {
1116 mod->setIdentifier(moduleId);
1118 std::stringstream name;
1119 name<<
"TRT/Endcap/Straw_"<<idSide<<
"_"<<iPhiModule<<
"_"<<iWheel<<
"_"<<iStrawLayer<<
"_"<<iStraw;
1120 mod->setName(name.str());
1135 (*trtIdHashMap)[
m_idHelper->straw_hash(moduleId)] = mod;
1141 ATH_MSG_DEBUG(
"Prepared local to global transform : "<<std::setprecision(12)
1142 <<localToGlobal.translation()<<
" "<<localToGlobal.rotation());
1144 ATH_MSG_DEBUG(
" rotation = (" << lgrot(2,1) <<
"," << lgrot(0,2) <<
"," << lgrot(1,0) <<
")");
1146 mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
1151 ATH_MSG_DEBUG(
"Straw layer transform : "<<std::setprecision(12)
1152 <<aatr.translation()<<
" "<<aatr.rotation());
1153 ATH_MSG_DEBUG(
" rotation = (" << aarot(2,1) <<
"," << aarot(0,2) <<
"," << aarot(1,0) <<
")");
1160 ATH_MSG_DEBUG(
"No TRT_EndcapElement with endcap-wheel-strawLayer-phi:" <<iSide<<
"-"<<iWheel<<
"-"<<iStrawLayer<<
"-"<<iPhiModule);
1185 for(
unsigned int ipar=0;ipar<fullModPars->
size();++ipar) {
1197 ATH_MSG_DEBUG(
"parameter type "<<fullModPars->
at(ipar)->paramType()<<
" is now active");
1201 ATH_MSG_DEBUG(
"parameter type "<<fullModPars->
at(ipar)->paramType()<<
" is NOT active");
1211 ATH_MSG_DEBUG(
"parameter type "<<fullModPars->
at(ipar)->paramType()<<
" is now active");
1215 ATH_MSG_DEBUG(
"parameter type "<<fullModPars->
at(ipar)->paramType()<<
" is NOT active");
1220 allFullModPars->push_back(fullModPars);
1221 allActiveModPars->push_back(activeModPars);
1228 for(
unsigned int ipar=0;ipar<modPars->
size();++ipar) {
1230 if(
m_idHelper->is_barrel(module->identify()))
1231 switch(modPars->
at(ipar)->paramType()) {
1261 switch(modPars->
at(ipar)->paramType()) {
1300 for(
int i=0;i<nsel;++i)
1379 ATH_MSG_INFO(
"---------------------------------------------------");
1390 Amg::Transform3D localtoglobal = (
module->globalFrameToAlignFrame()).inverse();
1391 ATH_MSG_DEBUG(
" - local to global : "<<std::setprecision(12)<<localtoglobal.translation()<<
" "<<localtoglobal.rotation());
1394 int npars = pars->
size();
1395 ATH_MSG_DEBUG(
" - number of active transform parameters: "<<npars);
1396 for(
int j=0;j<npars;j++)
1397 ATH_MSG_DEBUG(
" * par "<<j<<
" \'"<<(*pars)[j]->dumpType()<<
"\' : sigma = "<<(*pars)[j]->sigma()<<
" , softCut = "<<(*pars)[j]->softCut());
1399 ATH_MSG_INFO(
"---------------------------------------------------");
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_INFO(x,...)
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