 |
ATLAS Offline Software
|
Go to the documentation of this file.
38 : base_class(
name,pSvcLocator),
39 m_detStore(
"DetectorStore",
name),
40 m_trtStrawAlignDbSvc(
"TRT_StrawAlignDbSvc",
name),
43 m_alignroot(
"/TRT/Align"),
45 m_par_alitextfile(
""),
46 m_streamer(
"AthenaOutputStreamTool/CondStream1"),
47 m_alignDBprefix(
"/TRT/Align/"),
49 m_forceUserDBConfig(false)
55 declareProperty(
"TrtStrawAlignDbSvc",
m_trtStrawAlignDbSvc,
"Service for interaction with the TRT straw alignment DB");
58 declareProperty(
"forceUserDBConfig",
m_forceUserDBConfig,
"Set to true to override any DB auto-configuration");
106 ATH_MSG_INFO(
"Adding key: /TRT/Align/TRT --> We are using static DB folder scheme" );
113 if (element!=
nullptr) {
141 if( alignFolderExists ) {
147 if( alignTextFileExists )
149 <<
" exists. Will read text file from callback function." );
151 }
else if ( alignTextFileExists ) {
160 ATH_MSG_ERROR(
"AlignableTransformContainer not in IOV service and no textfile specified." );
167 return StatusCode::SUCCESS;
174 ATH_MSG_INFO(
"TRT_AlignDbSvc finalize method called" );
178 return StatusCode::SUCCESS;
197 for (std::list<std::string>::const_iterator itr=
keys.begin(); itr!=
keys.end(); ++itr)
198 ATH_MSG_INFO(
"IOVCALLBACK for key " << *itr<<
" number " <<
I );
212 return StatusCode::SUCCESS;
226 std::vector<std::string>::const_iterator iobj=
m_alignobjs.begin();
227 std::vector<std::string>::const_iterator iobjE=
m_alignobjs.end();
228 for (;iobj!=iobjE; ++iobj) {
230 std::string
key=*iobj;
252 for (;cit!=citE;++cit) {
273 std::string thisMess =
key+
" for "+
file;
279 CLHEP::HepRotation rot=transCLHEP.getRotation();
281 eulerangles[0] = rot.getPhi();
282 eulerangles[1] = rot.getTheta();
283 eulerangles[2] = rot.getPsi();
295 << std::setprecision(10) <<
" "
296 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
297 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
302 << std::setprecision(10) <<
" "
303 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
304 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
313 << std::setprecision(10) <<
" "
314 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
315 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
320 << std::setprecision(10) <<
" "
321 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
322 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
331 ATH_MSG_INFO(
"Written " << nobj <<
" AlignableTransform objects" <<
" with " << ntrans
332 <<
" transforms to text file" );
335 return StatusCode::SUCCESS;
346 return StatusCode::SUCCESS;
369 return StatusCode::FAILURE ;
382 std::string linestring(
line) ;
383 if( linestring.find(
'/') != std::string::npos) {
385 atname = linestring ;
389 ATH_MSG_ERROR(
"Cannot find AlignableTransform object for key " << atname );
390 return StatusCode::FAILURE;
394 }
else if(
pat!=
nullptr) {
396 std::istringstream is(
line) ;
403 CLHEP::Hep3Vector translation(
dx,
dy, dz);
405 if (is >>
theta >> psi) {
407 <<
" " <<
theta <<
" " << psi);
416 ATH_MSG_WARNING (
"WARNING: read module from file which was already in AlignableTransform. Will skip it."
417 <<
" bec,lay,sec,strawlay = " <<
bec <<
" " <<
layer <<
" " << sector <<
" " );
422 std::string thisMess = atname+
" for "+
file;
430 <<
"] key " << atname
431 <<
" rotation=(" <<
phi <<
"," <<
theta <<
"," << psi
432 <<
"), translation=(" <<
dx <<
"," <<
dy <<
"," << dz <<
"])"
435 }
else if(!linestring.empty()) {
441 CLHEP::Hep3Vector translation(
dx,
dy,dz) ;
443 if( is >>
theta >> psi ) {
454 ATH_MSG_WARNING (
"WARNING: read module from file which was already in AlignableTransform. Will skip it."
455 <<
" bec,lay,sec = " <<
bec <<
" " <<
layer <<
" " << sector);
460 <<
" [" <<
bec <<
"," <<
layer <<
"," << sector
461 <<
"] key " << atname <<
" rotation=(" <<
phi <<
"," <<
theta <<
"," << psi
462 <<
"), translation=(" <<
dx <<
"," <<
dy <<
"," << dz <<
"])" );
464 }
else if(!linestring.empty()) {
475 ATH_MSG_INFO(
"Read " << nobj <<
" objects from file with " << ntrans <<
" transforms."
476 <<
" Now forcing callback in detector manager." );
480 std::list<std::string>
keys;
486 return StatusCode::SUCCESS;
502 typeKeys.push_back(arraypair);
508 ATH_MSG_INFO(
" Streamed out and committed AlignableTransformContainer" );
512 return StatusCode::SUCCESS;
523 SmartIF<IIOVRegistrationSvc> regsvc(service(
"IOVRegistrationSvc"));
526 if (StatusCode::SUCCESS==regsvc->registerIOV(
"AlignableTransformContainer",
m_alignroot,
tag,
run1,
run2,event1,event2)){
527 ATH_MSG_INFO(
" Register AlignableTransformContainer object "
530 ATH_MSG_ERROR(
" Failed to register AlignableTranformContainer "
532 return StatusCode::FAILURE;
535 return StatusCode::SUCCESS;
558 std::string
key=
"/TRT/Align/TRT";
682 return StatusCode::FAILURE;
698 return StatusCode::SUCCESS;
716 return StatusCode::FAILURE;
724 ATH_MSG_FATAL(
"The AlignableTransform for key " <<
"/TRT/Align/TRT" <<
" does not exist " );
726 return StatusCode::FAILURE;
733 return StatusCode::FAILURE;
740 if( !(
pat->update(mid,clhepTrans)) ) {
741 pat->add(mid,clhepTrans);
747 return StatusCode::SUCCESS;
760 if (!
pat)
return StatusCode::FAILURE;
772 <<
" Bec= " <<
bec <<
" layer= " <<
layer <<
" sector= " << sector
774 ATH_MSG_DEBUG(
"The translations are: x= " << trans(0,3) <<
" y= "<<trans(1,3) <<
" z= "<<trans(2,3) );
783 ATH_MSG_FATAL(
"The identifier " << ident2 <<
" is not from the TRT " );
785 return StatusCode::FAILURE;
790 if( !(
pat->update(ident2,clhepTrans)) ) {
791 pat->add(ident2,clhepTrans);
796 return StatusCode::SUCCESS;
812 ATH_MSG_INFO(
"Storing L3 Barrel constants, Only dx and rotz will be written to DB");
813 float dx = trans.translation().x();
814 float rotz = std::atan2(trans.rotation()(0,1),trans.rotation()(0,0));
818 double strawLenthOver2 = 0.5* strawElement->
strawLength();
823 double delta_dx_atLargerZ =
dx + strawLenthOver2 *
std::sin(rotz);
824 double delta_dx_atSmallerZ =
dx - strawLenthOver2 *
std::sin(rotz);
833 double dx1_new =
sideA ? delta_dx_atLargerZ : delta_dx_atSmallerZ;
836 double dx2_new =
sideA ? delta_dx_atSmallerZ : delta_dx_atLargerZ;
839 double dxErr = 0.001;
845 ATH_MSG_INFO(
"Storing L3 Endcap constants, Only dy and rotz will be written to DB");
854 float dy = trans.translation().y();
855 float rotx = std::atan2(trans.rotation()(1,2),trans.rotation()(2,2));
859 double strawLenthOver2 = 0.5* strawElement->
strawLength();
863 double delta_dx_nearBeamPipe =
dy + strawLenthOver2 *
std::sin(rotx);
864 double delta_dx_nearReadOut =
dy - strawLenthOver2 *
std::sin(rotx);
867 double dxErr = 0.001;
873 return StatusCode::SUCCESS;
884 return StatusCode::FAILURE;
895 return StatusCode::FAILURE;
908 return StatusCode::FAILURE;
921 return StatusCode::FAILURE;
927 return StatusCode::SUCCESS;
942 return StatusCode::FAILURE;
950 ATH_MSG_WARNING(
"The AlignableTransform for key " <<
"/TRT/Align/TRT" <<
" does not exist " );
952 return StatusCode::FAILURE;
961 return StatusCode::FAILURE;
971 return StatusCode::FAILURE;
976 return StatusCode::SUCCESS;
991 return StatusCode::FAILURE;
1011 return StatusCode::FAILURE;
1015 return StatusCode::SUCCESS;
1031 ATH_MSG_INFO(
"Storing L3 constants, Only dx and rotz will be written to DB");
1032 float dx = trans.translation().x();
1050 float rotz = std::atan2(trans.rotation()(0,2),trans.rotation()(0,0));
1054 double strawLenthOver2 = 0.5* strawElement->
strawLength();
1061 double delta_dx_atLargerZ;
1062 double delta_dx_atSmallerZ;
1064 delta_dx_atLargerZ =
dx - strawLenthOver2 *
std::sin(rotz);
1065 delta_dx_atSmallerZ =
dx + strawLenthOver2 *
std::sin(rotz);
1068 delta_dx_atLargerZ =
dx + strawLenthOver2 *
std::sin(rotz);
1069 delta_dx_atSmallerZ =
dx - strawLenthOver2 *
std::sin(rotz);
1073 double delta_dx1 =
sideA ? delta_dx_atLargerZ : delta_dx_atSmallerZ;
1076 double delta_dx2 =
sideA ? delta_dx_atSmallerZ : delta_dx_atLargerZ;
1079 double dxErr = 0.001;
1092 double dx1_new = dx1_current + delta_dx1;
1093 double dx2_new = dx2_current + delta_dx2;
1103 ATH_MSG_INFO(
"Storing L3 Endcap constants, Only dy and rotz will be written to DB");
1112 float dy = trans.translation().y();
1113 float rotx = std::atan2(trans.rotation()(1,2),trans.rotation()(2,2));
1117 double strawLenthOver2 = 0.5* strawElement->
strawLength();
1121 double delta_dx_nearBeamPipe =
dy + strawLenthOver2 *
std::sin(rotx);
1122 double delta_dx_nearReadOut =
dy - strawLenthOver2 *
std::sin(rotx);
1125 double dxErr = 0.001;
1138 double dx1_new = dx1_current + delta_dx_nearReadOut;
1139 double dx2_new = dx2_current + delta_dx_nearBeamPipe;
1145 return StatusCode::SUCCESS;
1175 std::ostringstream
result;
1181 }
else if(
type==
"DF") {
1182 result <<
"/TRT/Calib/DF";
1183 }
else return result.str();
1192 }
else if(
bec==-2) {
1199 }
else if(
type==
"ALold"){
1202 }
else if(
bec==-2) {
1234 std::ostringstream
result;
1237 std::string
type,quantity;
1243 quantity=
key.substr(ind,2);
1249 if(
type==
"Align" &&
key.substr(ind1,2)!=
"ID") {
1250 if(
key.substr(ind1+3,1)==
"_") quantity=
"DF";
1257 if(quantity==
"DF") {
1259 }
else if (quantity==
"RT") {
1261 }
else if (quantity==
"T0") {
1268 }
else if(
type==
"Align") {
1296 <<
" already exists." );
1297 return StatusCode::FAILURE;
1301 auto patc = std::make_unique<AlignableTransformContainer>();
1304 patc->push_back(std::make_unique<AlignableTransform>(
m_alignobjs[
i]));
1313 return StatusCode::SUCCESS;
1322 ATH_MSG_DEBUG(
"createAlignObjectsWhichDoNotAlreadyExist method called" );
1350 ATH_MSG_DEBUG(
"Leaving createAlignObjectsWhichDoNotAlreadyExist" );
1351 return StatusCode::SUCCESS;
1360 std::vector<std::string>::const_iterator iobj=
m_alignobjs.begin();
1361 std::vector<std::string>::const_iterator iobjE=
m_alignobjs.end();
1362 for (;iobj!=iobjE;++iobj) {
1395 if( (*dva)->tag()==
key ) {
1414 return strawlayer / 4 * 4;
1422 for(
unsigned int i=0;
i<14; ++
i){
1425 <<
bool(
input.find(testA)!=std::string::npos) );
1426 if(
input.find(testA)!=std::string::npos){
1432 <<
bool(
input.find(testC)!=std::string::npos) );
1433 if(
input.find(testC)!=std::string::npos){
1444 std::ostringstream stm;
1465 std::vector<std::string> folder_list = {
"/TRT/AlignL1/TRT"};
1471 if (StatusCode::SUCCESS==
m_detStore->retrieve(atrlistcol,*
it)) {
1476 outfile << atrlist[
"bec"].data<
int>()
1477 <<
" " << atrlist[
"layer"].data<int>()
1478 <<
" " << atrlist[
"sector"].data<
int>()
1479 <<
" " << atrlist[
"Tx"].data<float>()
1480 <<
" " << atrlist[
"Ty"].data<
float>()
1481 <<
" " << atrlist[
"Tz"].data<float>()
1482 <<
" " << atrlist[
"phi"].data<
float>()
1483 <<
" " << atrlist[
"theta"].data<float>()
1484 <<
" " << atrlist[
"psi"].data<
float>() << std::endl;
1489 ATH_MSG_INFO(
"Cannot find " << *
it <<
" Container - cannot write DB in text file " );
1490 return StatusCode::FAILURE;
1495 return StatusCode::SUCCESS;
1498 ATH_MSG_DEBUG(
"writeFile: No dynamic Run2 DB structure is present --> skipping writing file " <<
file );
1499 return StatusCode::SUCCESS;
1514 std::string
key=
"/TRT/AlignL1/TRT";
1517 const unsigned int DBident=1000+
bec*100;
1520 if (StatusCode::SUCCESS==
m_detStore->retrieve(atrlistcol1,
key)) {
1523 if (atrlistcol1!=
nullptr){
1529 if(citr->first!=DBident){
1530 ATH_MSG_DEBUG(
"tweakGlobalFolder fails due to identifier mismatch" );
1534 ATH_MSG_DEBUG(
"Tweak Old global DB -- channel: " << citr->first
1535 <<
" ,bec: " << atrlist2[
"bec"].data<
int>()
1536 <<
" ,layer: " << atrlist2[
"layer"].data<
int>()
1537 <<
" ,sector: " << atrlist2[
"sector"].data<
int>()
1538 <<
" ,Tx: " << atrlist2[
"Tx"].data<
float>()
1539 <<
" ,Ty: " << atrlist2[
"Ty"].data<
float>()
1540 <<
" ,Tz: " << atrlist2[
"Tz"].data<
float>()
1541 <<
" ,phi: " << atrlist2[
"phi"].data<
float>()
1542 <<
" ,theta: " << atrlist2[
"theta"].data<
float>()
1543 <<
" ,psi: " << atrlist2[
"psi"].data<
float>() );
1547 CLHEP::Hep3Vector oldtranslation(atrlist2[
"Tx"].data<float>(),atrlist2[
"Ty"].data<float>(),atrlist2[
"Tz"].data<float>());
1548 CLHEP::HepRotation oldrotation;
1549 oldrotation.set(atrlist[
"phi"].data<float>(),atrlist[
"theta"].data<float>(),atrlist[
"psi"].data<float>());
1558 CLHEP::HepRotation rot=newtrans.getRotation();
1560 eulerangles[0] = rot.getPhi();
1561 eulerangles[1] = rot.getTheta();
1562 eulerangles[2] = rot.getPsi();
1564 atrlist2[
"Tx"].data<
float>() = shift.x();
1565 atrlist2[
"Ty"].data<
float>() = shift.y();
1566 atrlist2[
"Tz"].data<
float>() = shift.z();
1567 atrlist2[
"phi"].data<
float>() = eulerangles[0] ;
1568 atrlist2[
"theta"].data<
float>() = eulerangles[1] ;
1569 atrlist2[
"psi"].data<
float>() = eulerangles[2] ;
1572 ATH_MSG_DEBUG(
"Tweak New global DB -- channel: " << citr->first
1573 <<
" ,bec: " << atrlist2[
"bec"].data<
int>()
1574 <<
" ,layer: " << atrlist2[
"layer"].data<
int>()
1575 <<
" ,sector: " << atrlist2[
"sector"].data<
int>()
1576 <<
" ,Tx: " << atrlist2[
"Tx"].data<
float>()
1577 <<
" ,Ty: " << atrlist2[
"Ty"].data<
float>()
1578 <<
" ,Tz: " << atrlist2[
"Tz"].data<
float>()
1579 <<
" ,phi: " << atrlist2[
"phi"].data<
float>()
1580 <<
" ,theta: " << atrlist2[
"theta"].data<
float>()
1581 <<
" ,psi: " << atrlist2[
"psi"].data<
float>() );
1587 ATH_MSG_ERROR(
"tweakGlobalFolder: cast fails for DBident " << DBident );
1588 return StatusCode::FAILURE;
1592 ATH_MSG_ERROR(
"tweakGlobalFolder: cannot retrieve CondAttrListCollection for key " <<
key );
1593 return StatusCode::FAILURE;
1596 if (
result)
return StatusCode::SUCCESS;
1597 else return StatusCode::FAILURE;
JetConstituentVector::iterator iterator
StatusCode setAlignTransformL2(Identifier ident, Amg::Transform3D trans)
set Level 2 AlignableTransform for an identifier
const_iterator end() const
Identifier layer_id(int barrel_ec, int phi_module, int layer_or_wheel, int straw_layer) const
For an individual straw layer.
std::vector< Amg::Transform3D * > m_amgTransformCache
virtual const double & strawLength() const =0
Active straw length.
Const iterator class for DataVector/DataList.
Scalar phi() const
phi method
StatusCode tweakAlignTransformL2(Identifier ident, const Amg::Transform3D &trans)
tweak Level 2 AlignableTransform for an identifier
std::string find(const std::string &s)
return a remapped string
std::vector< int > m_alignchans
channels
AlignableTransform * getTransPtr(const std::string &key) const
get AlignableTransform pointer for an object key
std::string findkey(const Identifier &ident, const std::string &type) const
Return the object key for a given identifier and data type.
StatusCode tweakAlignTransform(Identifier ident, Amg::Transform3D trans, unsigned int level)
tweak AlignableTransform for an identifier
A CondMultChanCollection is a template class which can hold a collection of T* objects which are inte...
static int getRingForStrawLayer(int strawlayer)
Returns the ring for a given strawLayer.
Scalar theta() const
theta method
StatusCode writeGlobalFolderFile(const std::string &file) const
const InDetDD::TRT_DetectorManager * m_trtman
detector manager
std::string m_par_alitextfile
input text file
This is an Identifier helper class for the TRT subdetector. This class is a factory for creating comp...
const Amg::Transform3D * getAlignmentTransformL1Ptr(Identifier const &ident) const
get Level L1 Transform for an identifier
const_iterator begin() const
Access to Chan/AttributeList pairs via iterators.
This is an interface to a tool used to register conditions objects in the Interval of Validity (IOV) ...
#define IOVSVC_CALLBACK_ARGS_P(I, K)
short hand for IOVSvc call back argument list, to be used when access to formal arguments is needed,...
bool is_trt(Identifier id) const
#define ATH_MSG_VERBOSE(x)
std::vector< std::string > m_alignobjs
folder names
This class is a collection of AttributeLists where each one is associated with a channel number....
const AlignableTransform * cgetTransPtr(const std::string &key) const
get const AlignableTransform pointer for an object key
StatusCode setAlignTransform(Identifier ident, Amg::Transform3D trans, unsigned int level)
set AlignableTransform for an identifier
TRT_AlignDbSvc(const std::string &name, ISvcLocator *pSvcLocator)
constructor
StatusCode IOVCallBack(IOVSVC_CALLBACK_ARGS)
Call back function for alignment folders.
StatusCode createAlignObjectsWhichDoNotAlreadyExist()
Create an empty set of AlignableTransforms for the transforms which are not created by XXXXXXX from t...
const Amg::Transform3D * getAlignmentTransformPtr(const Identifier &ident, unsigned int level) const
get Level L2 Transform for an identifier
ToolHandle< IAthenaOutputStreamTool > m_streamer
OutputStreamTool.
StatusCode readAlignTextFile(const std::string &file)
read AlignableTransforms from text file into TDS
(Non-const) Iterator class for DataVector/DataList.
virtual ~TRT_AlignDbSvc()
destructor
::StatusCode StatusCode
StatusCode definition for legacy code.
Eigen::Affine3d Transform3D
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
const AlignableTransformContainer * getContainer() const
Return the container.
StatusCode createAlignObjects() const
Create an empty set of AlignableTransforms for the GeoModel setup.
std::string m_alignString
alignment string searched for
const Amg::Transform3D getAlignmentTransformL1(Identifier const &ident) const
get Level 1 AlignableTransform for an identifier
StatusCode setAlignTransformL3(Identifier ident, Amg::Transform3D trans)
set Level 3 AlignableTransform for an identifier
virtual Identifier identify() const override final
identifier of this detector element:
ATLAS_NO_CHECK_FILE_THREAD_SAFETY
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
int straw_layer(const Identifier &id) const
StatusCode streamOutAlignObjects() const
write the alignment objects to output
ServiceHandle< StoreGateSvc > m_detStore
int layer_or_wheel(const Identifier &id) const
StatusCode setAlignTransformL1(Identifier ident, const Amg::Transform3D &trans)
set Level 1 AlignableTransform for an identifier
TRT_DetElementCollection::const_iterator getDetectorElementBegin() const
unsigned constexpr int sideA
TRT_DetElementCollection::const_iterator getDetectorElementEnd() const
a Service to manage TRT alignment conditions
void add(ChanNum chanNum)
Adding in channel numbers.
void printCondObjects() const
Output the conditions objects currently in memory.
StatusCode writeStrawAlignTextFile(const std::string &file) const
const TRT_BaseElement * getElement(Identifier id) const
Access Elements Generically---------------------------------------------—.
std::string m_alignroot
root alignment folder
virtual StatusCode initialize()
tool initialize
value_type push_back(value_type pElem)
Add an element to the end of the collection.
Eigen::Matrix< double, 3, 1 > Vector3D
int phi_module(const Identifier &id) const
virtual StatusCode finalize()
tool finalize
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
The Detector Manager for all TRT Detector elements, it acts as the interface to the detector elements...
std::string m_alignDBprefix
StatusCode tweakAlignTransformL3(Identifier ident, Amg::Transform3D trans)
tweak Level 3 AlignableTransform for an identifier
const Amg::Transform3D getAlignmentTransformL2(Identifier const &ident) const
get Level 2 AlignableTransform for an identifier
std::string show_to_string(Identifier id, const IdContext *context=0, char sep='.') const
or provide the printout in string form
#define ATH_MSG_WARNING(x)
ChanAttrListMap::const_iterator const_iterator
Amg::Transform3D CLHEPTransformToEigen(const HepGeom::Transform3D &CLHEPtransf)
Converts a CLHEP-based HepGeom::Transform3D into an Eigen Amg::Transform3D.
HepGeom::Transform3D EigenTransformToCLHEP(const Amg::Transform3D &eigenTransf)
Converts an Eigen-based Amg::Transform3D into a CLHEP-based HepGeom::Transform3D.
StatusCode tweakGlobalFolder(Identifier ident, const Amg::Transform3D &trans)
tweak L1 DB for global folders for an identifier
AlignFolderType m_alignfoldertype
const Amg::Transform3D * getAlignmentTransformL2Ptr(Identifier const &ident) const
get Level L2 Transform for an identifier
ServiceHandle< ITRT_StrawAlignDbSvc > m_trtStrawAlignDbSvc
defines and typedefs for IOVSvc
StatusCode tweakAlignTransformL1(Identifier ident, const Amg::Transform3D &trans)
tweak Level 1 AlignableTransform for an identifier
static std::string intToString(int input)
Convert from an int to a string.
const TRT_ID * m_trtid
trt id helper
static void printTransform(const std::string &thisName, const Amg::Transform3D &transform)
Output the transform to the cout, for debugging.
const Amg::Transform3D getAlignmentTransform(const Identifier &ident, unsigned int level) const
get AlignableTransform for an identifier
bool isOldKey(const std::string &input) const
Returns the true if the input key is from the old endcap scheme.
const DataHandle< AlignableTransformContainer > m_aligncontainerhandle
StatusCode registerAlignObjects(const std::string &tag, int run1, int event1, int run2, int event2) const
register alignment objects with the IoV service
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
StatusCode writeAlignTextFile(const std::string &file) const
write AlignableTransforms to flat text file
Identifier module_id(int barrel_ec, int phi_module, int layer_or_wheel) const
For an individual module phi sector.
static std::string prefixtag(const std::string &key)
Return the prefix tag for a given calibration folder.