31 const std::string& name,
32 const IInterface * parent)
41 declareInterface<IGeometryManagerTool>(
this);
130 return StatusCode::FAILURE;
137 msg(MSG::FATAL) <<
" Cannot retrieve TRT ID Helper " <<
endmsg;
138 return StatusCode::FAILURE;
145 msg(MSG::FATAL) <<
" Cannot retrieve TRT Detector Manager " <<
endmsg;
146 return StatusCode::FAILURE;
160 return StatusCode::FAILURE;
162 return StatusCode::SUCCESS;
170 return StatusCode::SUCCESS;
216 case 1:
case 2:
case 3:
233 case 1:
case 2:
case 200:
case 3:
259 std::vector<Trk::AlignModule *>::const_iterator imod =
m_alignModuleList.begin();
260 std::vector<Trk::AlignModule *>::const_iterator imod_end =
m_alignModuleList.end();
261 for( ; imod!=imod_end; ++imod)
279 ATH_MSG_INFO(
"Total number of degrees of freedom: "<<nDoF);
333 ATH_MSG_INFO(
"Preparing the TRT geometry for L0: whole TRT");
362 unsigned int trtmaxHash =
m_idHelper->straw_layer_hash_max();
388 msg(MSG::DEBUG)<<
"... TRT barrel element"<<
endmsg;
390 msg(MSG::DEBUG)<<
"... TRT endcap element"<<
endmsg;
395 (*trtIdHashMap)[idHash] = trt;
404 ATH_MSG_DEBUG(
"TRT L0 module successfully added to the list");
413 ATH_MSG_INFO(
"Preparing the TRT Barrelgeometry for L1: whole barrel");
425 unsigned int maxHash = 0;
448 trtBarrel->setName(
"TRT Barrel");
449 trtBarrel->setIdentifier(
m_idHelper->barrel_ec_id(-1));
452 ATH_MSG_DEBUG(
"Module "<<trtBarrel->name()<<
" NOT selected");
457 for (
unsigned int iLayer = 0; iLayer <
m_trtDetManager->getNumerology()->getNBarrelRings(); iLayer++)
458 for (
unsigned int iPhiModule = 0; iPhiModule <
m_trtDetManager->getNumerology()->getNBarrelPhi(); iPhiModule++)
459 for (
unsigned int iStrawLayer = 0; iStrawLayer <
m_trtDetManager->getNumerology()->getNBarrelLayers(iLayer); iStrawLayer++)
460 for (
int iSide = 0; iSide < 2; iSide++) {
473 ATH_MSG_DEBUG(
"No TRT_BarrelElement with side-layer-phi-strawLayer:" <<iSide<<
"-"<<iLayer<<
"-"<<iPhiModule<<
"-"<<iStrawLayer);
488 ATH_MSG_INFO(
"Preparing the TRT Endcap geometry for L1: 2 endcaps");
500 unsigned int maxHash = 0;
521 for (
int iSide=0;iSide<2;iSide++) {
526 trtEndCap[iSide]->setName(
"TRT EndCap C");
528 trtEndCap[iSide]->setName(
"TRT EndCap A");
530 int idSide = iSide ? 2 : -2;
531 trtEndCap[iSide]->setIdentifier(
m_idHelper->barrel_ec_id(idSide));
534 ATH_MSG_DEBUG(
"Module "<<trtEndCap[iSide]->name()<<
" NOT selected");
535 delete trtEndCap[iSide];
538 for (
unsigned int iWheel = 0; iWheel <
m_trtDetManager->getNumerology()->getNEndcapWheels(); iWheel++)
539 for (
unsigned int iStrawLayer = 0; iStrawLayer <
m_trtDetManager->getNumerology()->getNEndcapLayers(iWheel); iStrawLayer++)
540 for(
unsigned int iPhi = 0; iPhi <
m_trtDetManager->getNumerology()->getNEndcapPhi(); iPhi++) {
550 (*trtIdHashMap)[element->
identifyHash()] = trtEndCap[iSide];
553 ATH_MSG_DEBUG(
"No TRT_EndcapElement with side-wheel-strawLayer-phi:" <<iSide<<
"-"<<iWheel<<
"-"<<iStrawLayer<<
"-"<<iPhi);
558 Amg::Transform3D localtoglobal = translation * Amg::RotationMatrix3D::Identity();
559 trtEndCap[iSide]->setGlobalFrameToAlignFrameTransform(localtoglobal.inverse());
574 ATH_MSG_INFO(
"Preparing the TRT Barrel geometry for L2: 3 layers with 32 modules each (96 modules)");
591 unsigned int maxHash = 0;
618 for (
unsigned int iPhiModule = 0; iPhiModule <
m_trtDetManager->getNumerology()->getNBarrelPhi(); iPhiModule++) {
619 for (
unsigned int iLayer = 0; iLayer <
m_trtDetManager->getNumerology()->getNBarrelRings(); iLayer++) {
623 mod->setIdentifier(
m_idHelper->module_id(-1, iPhiModule, iLayer));
625 std::stringstream name;
626 name<<
"TRT/Barrel/Module_-1_"<<iPhiModule<<
"_"<<iLayer;
627 mod->setName(name.str());
638 std::vector<const Trk::TrkDetElementBase *> centralLayers;
640 int maxstrawlayer =
m_trtDetManager->getNumerology()->getNBarrelLayers(iLayer);
642 for (
int iStrawLayer = 0; iStrawLayer < maxstrawlayer; iStrawLayer++) {
644 for (
int iSide = 0; iSide < 2; iSide++) {
666 if( iStrawLayer == maxstrawlayer/2 ) {
668 centralLayers.push_back(element);
672 ATH_MSG_DEBUG(
"No TRT_BarrelElement with side-layer-phi-strawLayer:" <<iSide<<
"-"<<iLayer<<
"-"<<iPhiModule<<
"-"<<iStrawLayer);
693 std::vector<std::vector<const Trk::TrkDetElementBase *> *> centralLayersVec;
694 centralLayersVec.push_back(¢ralLayers);
699 centralLayers.front()->transform().rotation() : centralLayers.back()->transform().rotation();
704 ATH_MSG_DEBUG(
"centerOfGravity "<< mod->centerOfGravity(centralLayersVec));
705 ATH_MSG_DEBUG(
"Prepared local to global transform : "<<std::setprecision(12)<<localToGlobal.translation()<<
" "<<localToGlobal.rotation());
707 mod->setGlobalFrameToAlignFrameTransform(localToGlobal.inverse());
723 ATH_MSG_INFO(
"Preparing the TRT Endcap geometry for L2: 2 x 40 rings");
740 unsigned int maxHash = 0;
751 for (
int iSide = 0; iSide < 2; iSide++) {
752 int idSide = iSide ? 2 : -2;
761 for (
unsigned int iWheel = 0; iWheel <
m_trtDetManager->getNumerology()->getNEndcapWheels(); iWheel++) {
763 for (
unsigned int iStrawLayer = 0; iStrawLayer <
m_trtDetManager->getNumerology()->getNEndcapLayers(iWheel); iStrawLayer++) {
766 if(iStrawLayer%4==0) {
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());
810 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);
829 if (!mod)
throw std::logic_error(
"No AlignmentModule");
838 Amg::Transform3D localToGlobal = translation * Amg::RotationMatrix3D::Identity();
840 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(
"---------------------------------------------------");
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