37 : base_class(name,pSvcLocator),
45 m_streamer(
"AthenaOutputStreamTool/CondStream1"),
54 declareProperty(
"TrtStrawAlignDbSvc",
m_trtStrawAlignDbSvc,
"Service for interaction with the TRT straw alignment DB");
57 declareProperty(
"forceUserDBConfig",
m_forceUserDBConfig,
"Set to true to override any DB auto-configuration");
80 itermin=
m_trtman->getDetectorElementBegin();
81 itermax=
m_trtman->getDetectorElementEnd();
105 ATH_MSG_INFO(
"Adding key: /TRT/Align/TRT --> We are using static DB folder scheme" );
110 for (iter=itermin;iter!=itermax;++iter) {
112 if (element!=
nullptr) {
140 if( alignFolderExists ) {
143 if( alignTextFileExists )
145 <<
" exists. Will read text file from callback function." );
147 }
else if ( alignTextFileExists ) {
156 ATH_MSG_ERROR(
"AlignableTransformContainer not in IOV service and no textfile specified." );
163 return StatusCode::SUCCESS;
170 ATH_MSG_INFO(
"TRT_AlignDbSvc finalize method called" );
174 return StatusCode::SUCCESS;
208 return StatusCode::SUCCESS;
216 std::ofstream outfile(
file);
222 std::vector<std::string>::const_iterator iobj=
m_alignobjs.begin();
223 std::vector<std::string>::const_iterator iobjE=
m_alignobjs.end();
224 for (;iobj!=iobjE; ++iobj) {
226 std::string key=*iobj;
234 ATH_MSG_ERROR(
"Cannot find AlignableTransform for key "<< key );
236 outfile << key << std::endl;
242 outfile << key << std::endl;
248 for (;cit!=citE;++cit) {
261 layer=
m_trtid->layer_or_wheel(ident);
262 sector=
m_trtid->phi_module(ident);
263 strawLayer=
m_trtid->straw_layer(ident);
268 if(msgLvl(MSG::DEBUG)){
269 std::string thisMess = key+
" for "+
file;
275 CLHEP::HepRotation rot=transCLHEP.getRotation();
277 eulerangles[0] = rot.getPhi();
278 eulerangles[1] = rot.getTheta();
279 eulerangles[2] = rot.getPsi();
288 << ident <<
" " << bec <<
" " << layer <<
" " << strawLayer <<
" " << key );
290 outfile << bec <<
" " << layer <<
" " << strawLayer <<
" "
291 << std::setprecision(10) <<
" "
292 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
293 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
297 ATH_MSG_DEBUG( bec <<
" " << layer <<
" " << strawLayer <<
" "
298 << std::setprecision(10) <<
" "
299 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
300 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
306 << ident <<
" " << bec <<
" " << layer <<
" " << sector <<
" " << key );
308 outfile << bec <<
" " << layer <<
" " << sector <<
" "
309 << std::setprecision(10) <<
" "
310 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
311 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
316 << std::setprecision(10) <<
" "
317 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
318 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
327 ATH_MSG_INFO(
"Written " << nobj <<
" AlignableTransform objects" <<
" with " << ntrans
328 <<
" transforms to text file" );
331 return StatusCode::SUCCESS;
342 return StatusCode::SUCCESS;
349 std::ifstream infile;
350 infile.open(
file.c_str());
365 return StatusCode::FAILURE ;
375 while( infile.getline(line,512) ) {
378 std::string linestring(line) ;
379 if( linestring.find(
'/') != std::string::npos) {
381 atname = linestring ;
385 ATH_MSG_ERROR(
"Cannot find AlignableTransform object for key " << atname );
386 return StatusCode::FAILURE;
390 }
else if(pat!=
nullptr) {
392 std::istringstream is(line) ;
394 int bec(0),layer(0),sector(0),strawLayer(0);
398 if( is >> bec >> layer >> strawLayer >> dx >> dy >> dz >>
phi ) {
399 CLHEP::Hep3Vector translation(dx, dy, dz);
400 CLHEP::HepRotation rotation;
401 if (is >>
theta >> psi) {
403 <<
" " <<
theta <<
" " << psi);
409 <<
" layer " << layer <<
" strawLayer " << strawLayer );
411 if( pat->findIdent(ident)!=pat->end() ) {
412 ATH_MSG_WARNING (
"WARNING: read module from file which was already in AlignableTransform. Will skip it."
413 <<
" bec,lay,sec,strawlay = " << bec <<
" " << layer <<
" " << sector <<
" " );
415 pat->add(ident,HepGeom::Transform3D(rotation, translation));
416 HepGeom::Transform3D testtrans = HepGeom::Transform3D(rotation, translation);
417 if(msgLvl(MSG::DEBUG)){
418 std::string thisMess = atname+
" for "+
file;
425 <<
" [" << bec <<
"," << layer <<
"," << strawLayer
426 <<
"] key " << atname
427 <<
" rotation=(" <<
phi <<
"," <<
theta <<
"," << psi
428 <<
"), translation=(" << dx <<
"," << dy <<
"," << dz <<
"])"
431 }
else if(!linestring.empty()) {
432 ATH_MSG_WARNING(
"Read invalid line from textfile. Line=\'" << line <<
"\'" );
436 if( is >> bec >> layer >> sector >> dx >> dy >> dz >>
phi ) {
437 CLHEP::Hep3Vector translation(dx,dy,dz) ;
438 CLHEP::HepRotation rotation;
439 if( is >>
theta >> psi ) {
445 rotation = CLHEP::HepRotationZ(
phi) ;
449 if( pat->findIdent(ident)!=pat->end() ) {
450 ATH_MSG_WARNING (
"WARNING: read module from file which was already in AlignableTransform. Will skip it."
451 <<
" bec,lay,sec = " << bec <<
" " << layer <<
" " << sector);
453 pat->add(ident,HepGeom::Transform3D(rotation, translation));
456 <<
" [" << bec <<
"," << layer <<
"," << sector
457 <<
"] key " << atname <<
" rotation=(" <<
phi <<
"," <<
theta <<
"," << psi
458 <<
"), translation=(" << dx <<
"," << dy <<
"," << dz <<
"])" );
460 }
else if(!linestring.empty()) {
461 ATH_MSG_WARNING(
"Read invalid line from textfile. Line=\'" << line <<
"\'" );
471 ATH_MSG_INFO(
"Read " << nobj <<
" objects from file with " << ntrans <<
" transforms."
472 <<
" Now forcing callback in detector manager." );
480 return StatusCode::SUCCESS;
496 typeKeys.push_back(arraypair);
502 ATH_MSG_INFO(
" Streamed out and committed AlignableTransformContainer" );
506 return StatusCode::SUCCESS;
513 ATH_MSG_INFO(
"Run/evt1 [" << run1 <<
"," << event1 <<
"]" );
514 ATH_MSG_INFO(
"Run/evt2 [" << run2 <<
"," << event2 <<
"]" );
517 SmartIF<IIOVRegistrationSvc> regsvc(service(
"IOVRegistrationSvc"));
520 if (StatusCode::SUCCESS==regsvc->registerIOV(
"AlignableTransformContainer",
m_alignroot,tag,run1,run2,event1,event2)){
521 ATH_MSG_INFO(
" Register AlignableTransformContainer object "
524 ATH_MSG_ERROR(
" Failed to register AlignableTranformContainer "
526 return StatusCode::FAILURE;
529 return StatusCode::SUCCESS;
536 if(level != 1 && level != 2){
552 std::string key=
"/TRT/Align/TRT";
575 int bec=
m_trtid->barrel_ec(ident);
576 int layer=
m_trtid->layer_or_wheel(ident);
577 int sector=
m_trtid->phi_module(ident);
578 int strawLayer=
m_trtid->straw_layer(ident);
583 mid=
m_trtid->layer_id(bec,0,layer,ring);
585 mid=
m_trtid->module_id(bec,sector,layer);
596 if(level != 1 && level != 2){
614 int bec=
m_trtid->barrel_ec(ident);
617 if(iter != pat->end() ) {
641 int bec=
m_trtid->barrel_ec(ident);
642 int layer=
m_trtid->layer_or_wheel(ident);
643 int sector=
m_trtid->phi_module(ident);
644 int strawLayer=
m_trtid->straw_layer(ident);
648 mid =
m_trtid->layer_id(bec,0,layer,ring);
650 mid =
m_trtid->module_id(bec,sector,layer);
653 if(iter != pat->end() ){
673 if(level != 1 && level != 2 && level != 3){
676 return StatusCode::FAILURE;
692 return StatusCode::SUCCESS;
701 if(msgLvl(MSG::DEBUG)){
710 return StatusCode::FAILURE;
718 ATH_MSG_FATAL(
"The AlignableTransform for key " <<
"/TRT/Align/TRT" <<
" does not exist " );
720 return StatusCode::FAILURE;
724 if( !(
m_trtid->is_trt(ident)) ){
725 ATH_MSG_FATAL(
"The identifier " << ident <<
" is not from the TRT " );
727 return StatusCode::FAILURE;
730 int bec=
m_trtid->barrel_ec(ident);
734 if( !(pat->update(mid,clhepTrans)) ) {
735 pat->add(mid,clhepTrans);
741 return StatusCode::SUCCESS;
754 if (!pat)
return StatusCode::FAILURE;
757 if( !(
m_trtid->is_trt(ident)) )
return StatusCode::FAILURE;
758 int bec=
m_trtid->barrel_ec(ident);
759 int layer=
m_trtid->layer_or_wheel(ident);
760 int sector=
m_trtid->phi_module(ident);
761 int strawLayer=
m_trtid->straw_layer(ident);
766 <<
" Bec= " << bec <<
" layer= " << layer <<
" sector= " << sector
767 <<
" strawLayer= " << strawLayer );
768 ATH_MSG_DEBUG(
"The translations are: x= " << trans(0,3) <<
" y= "<<trans(1,3) <<
" z= "<<trans(2,3) );
771 ident2=
m_trtid->layer_id(bec,0,layer,ring);
773 ident2=
m_trtid->module_id(bec,sector,layer);
776 if( !(
m_trtid->is_trt(ident2)) ){
777 ATH_MSG_FATAL(
"The identifier " << ident2 <<
" is not from the TRT " );
779 return StatusCode::FAILURE;
784 if( !(pat->update(ident2,clhepTrans)) ) {
785 pat->add(ident2,clhepTrans);
790 return StatusCode::SUCCESS;
798 if( !(
m_trtid->is_trt(ident)) )
return StatusCode::FAILURE;
799 int bec=
m_trtid->barrel_ec(ident);
806 ATH_MSG_INFO(
"Storing L3 Barrel constants, Only dx and rotz will be written to DB");
807 float dx = trans.translation().x();
808 float rotz = std::atan2(trans.rotation()(0,1),trans.rotation()(0,0));
812 double strawLenthOver2 = 0.5* strawElement->
strawLength();
817 double delta_dx_atLargerZ = dx + strawLenthOver2 * std::sin(rotz);
818 double delta_dx_atSmallerZ = dx - strawLenthOver2 * std::sin(rotz);
824 bool sideA =
m_trtid->barrel_ec(ident) == 1;
827 double dx1_new = sideA ? delta_dx_atLargerZ : delta_dx_atSmallerZ;
830 double dx2_new = sideA ? delta_dx_atSmallerZ : delta_dx_atLargerZ;
833 double dxErr = 0.001;
839 ATH_MSG_INFO(
"Storing L3 Endcap constants, Only dy and rotz will be written to DB");
848 float dy = trans.translation().y();
849 float rotx = std::atan2(trans.rotation()(1,2),trans.rotation()(2,2));
853 double strawLenthOver2 = 0.5* strawElement->
strawLength();
857 double delta_dx_nearBeamPipe = dy + strawLenthOver2 * std::sin(rotx);
858 double delta_dx_nearReadOut = dy - strawLenthOver2 * std::sin(rotx);
861 double dxErr = 0.001;
867 return StatusCode::SUCCESS;
875 if(level != 1 && level != 2 && level != 3){
878 return StatusCode::FAILURE;
889 return StatusCode::FAILURE;
902 return StatusCode::FAILURE;
915 return StatusCode::FAILURE;
921 return StatusCode::SUCCESS;
936 return StatusCode::FAILURE;
944 ATH_MSG_WARNING(
"The AlignableTransform for key " <<
"/TRT/Align/TRT" <<
" does not exist " );
946 return StatusCode::FAILURE;
952 if( !(
m_trtid->is_trt(ident)) ){
953 ATH_MSG_WARNING(
"The identifier " << ident <<
" is not from the TRT " );
955 return StatusCode::FAILURE;
958 int bec=
m_trtid->barrel_ec(ident);
965 return StatusCode::FAILURE;
970 return StatusCode::SUCCESS;
983 ATH_MSG_WARNING(
"The transfor for key: " << key <<
"Does not exist" );
985 return StatusCode::FAILURE;
990 if( !(
m_trtid->is_trt(ident)) )
return StatusCode::FAILURE;
991 int bec=
m_trtid->barrel_ec(ident);
992 int layer=
m_trtid->layer_or_wheel(ident);
993 int sector=
m_trtid->phi_module(ident);
994 int strawLayer=
m_trtid->straw_layer(ident);
998 mid =
m_trtid->layer_id(bec,0,layer,ring);
1000 mid =
m_trtid->module_id(bec,sector,layer);
1005 return StatusCode::FAILURE;
1009 return StatusCode::SUCCESS;
1017 if( !(
m_trtid->is_trt(ident)) )
return StatusCode::FAILURE;
1018 int bec=
m_trtid->barrel_ec(ident);
1025 ATH_MSG_INFO(
"Storing L3 constants, Only dx and rotz will be written to DB");
1026 float dx = trans.translation().x();
1042 bool sideA =
m_trtid->barrel_ec(ident) == 1;
1044 float rotz = std::atan2(trans.rotation()(0,2),trans.rotation()(0,0));
1048 double strawLenthOver2 = 0.5* strawElement->
strawLength();
1055 double delta_dx_atLargerZ;
1056 double delta_dx_atSmallerZ;
1058 delta_dx_atLargerZ = dx - strawLenthOver2 * std::sin(rotz);
1059 delta_dx_atSmallerZ = dx + strawLenthOver2 * std::sin(rotz);
1062 delta_dx_atLargerZ = dx + strawLenthOver2 * std::sin(rotz);
1063 delta_dx_atSmallerZ = dx - strawLenthOver2 * std::sin(rotz);
1067 double delta_dx1 = sideA ? delta_dx_atLargerZ : delta_dx_atSmallerZ;
1070 double delta_dx2 = sideA ? delta_dx_atSmallerZ : delta_dx_atLargerZ;
1073 double dxErr = 0.001;
1086 double dx1_new = dx1_current + delta_dx1;
1087 double dx2_new = dx2_current + delta_dx2;
1097 ATH_MSG_INFO(
"Storing L3 Endcap constants, Only dy and rotz will be written to DB");
1106 float dy = trans.translation().y();
1107 float rotx = std::atan2(trans.rotation()(1,2),trans.rotation()(2,2));
1111 double strawLenthOver2 = 0.5* strawElement->
strawLength();
1115 double delta_dx_nearBeamPipe = dy + strawLenthOver2 * std::sin(rotx);
1116 double delta_dx_nearReadOut = dy - strawLenthOver2 * std::sin(rotx);
1119 double dxErr = 0.001;
1132 double dx1_new = dx1_current + delta_dx_nearReadOut;
1133 double dx2_new = dx2_current + delta_dx_nearBeamPipe;
1139 return StatusCode::SUCCESS;
1169 std::ostringstream result;
1170 if (!
m_trtid->is_trt(ident))
return result.str();
1175 }
else if(
type==
"DF") {
1176 result <<
"/TRT/Calib/DF";
1177 }
else return result.str();
1179 int bec=
m_trtid->barrel_ec(ident);
1181 if(
type!=
"AL" &&
type!=
"ALold") result <<
"_";
1186 }
else if(bec==-2) {
1190 int layer =
m_trtid->layer_or_wheel(ident);
1193 }
else if(
type==
"ALold"){
1196 }
else if(bec==-2) {
1201 int layer =
m_trtid->layer_or_wheel(ident);
1210 return result.str();
1228 std::ostringstream result;
1229 std::string detector=key.substr(1,3);
1231 std::string
type,quantity;
1233 if(detector==
"TRT") {
1234 type=key.substr(5,5);
1237 quantity=key.substr(ind,2);
1238 }
else if(detector==
"Indet") {
1239 type=key.substr(7,5);
1243 if(
type==
"Align" && key.substr(ind1,2)!=
"ID") {
1244 if(key.substr(ind1+3,1)==
"_") quantity=
"DF";
1251 if(quantity==
"DF") {
1253 }
else if (quantity==
"RT") {
1255 }
else if (quantity==
"T0") {
1260 std::string module=key.substr(ind+3,2);
1262 }
else if(
type==
"Align") {
1263 std::string module=key.substr(ind1,2);
1264 if(module==
"ID" || module==
"TR") {
1269 module=key.substr(ind+3,2);
1275 return result.str();
1290 <<
" already exists." );
1291 return StatusCode::FAILURE;
1295 auto patc = std::make_unique<AlignableTransformContainer>();
1298 patc->push_back(std::make_unique<AlignableTransform>(
m_alignobjs[i]));
1307 return StatusCode::SUCCESS;
1316 ATH_MSG_DEBUG(
"createAlignObjectsWhichDoNotAlreadyExist method called" );
1344 ATH_MSG_DEBUG(
"Leaving createAlignObjectsWhichDoNotAlreadyExist" );
1345 return StatusCode::SUCCESS;
1354 std::vector<std::string>::const_iterator iobj=
m_alignobjs.begin();
1355 std::vector<std::string>::const_iterator iobjE=
m_alignobjs.end();
1356 for (;iobj!=iobjE;++iobj) {
1389 if( (*dva)->tag()==key ) {
1398 ATH_MSG_WARNING(
"Failed to get the AlignableTransform for key " << key );
1408 return strawlayer / 4 * 4;
1416 for(
unsigned int i=0; i<14; ++i){
1419 <<
bool(input.find(testA)!=std::string::npos) );
1420 if(input.find(testA)!=std::string::npos){
1426 <<
bool(input.find(testC)!=std::string::npos) );
1427 if(input.find(testC)!=std::string::npos){
1438 std::ostringstream stm;
1445 std::cout << thisName <<
" " << transform(0,3) <<
" " << transform(1,3) <<
" " << transform(2,3) << std::endl;
1446 std::cout << thisName <<
" " << transform(0,0) <<
" " << transform(0,1) <<
" " << transform(0,2) << std::endl;
1447 std::cout << thisName <<
" " << transform(1,0) <<
" " << transform(1,1) <<
" " << transform(1,2) << std::endl;
1448 std::cout << thisName <<
" " << transform(2,1) <<
" " << transform(2,1) <<
" " << transform(2,2) << std::endl;
1458 std::ofstream outfile(
file);
1459 std::vector<std::string> folder_list = {
"/TRT/AlignL1/TRT"};
1461 for (std::vector<std::string>::iterator it = folder_list.begin(); it != folder_list.end(); ++it){
1463 outfile << *it << std::endl;
1465 if (StatusCode::SUCCESS==
m_detStore->retrieve(atrlistcol,*it)) {
1469 const coral::AttributeList& atrlist=citr->second;
1470 outfile << atrlist[
"bec"].data<
int>()
1472 <<
" " << atrlist[
"sector"].data<
int>()
1474 <<
" " << atrlist[
"Ty"].data<
float>()
1476 <<
" " << atrlist[
"phi"].data<
float>()
1478 <<
" " << atrlist[
"psi"].data<
float>() << std::endl;
1482 if (msgLvl(MSG::INFO)){
1483 ATH_MSG_INFO(
"Cannot find " << *it <<
" Container - cannot write DB in text file " );
1484 return StatusCode::FAILURE;
1489 return StatusCode::SUCCESS;
1492 ATH_MSG_DEBUG(
"writeFile: No dynamic Run2 DB structure is present --> skipping writing file " <<
file );
1493 return StatusCode::SUCCESS;
1507 bool result =
false;
1508 std::string key=
"/TRT/AlignL1/TRT";
1509 ATH_MSG_DEBUG(
" Identifier is valid: "<< ident.is_valid() );
1510 int bec=
m_trtid->barrel_ec(ident);
1511 const unsigned int DBident=1000+bec*100;
1514 if (StatusCode::SUCCESS==
m_detStore->retrieve(atrlistcol1,key)) {
1517 if (atrlistcol1!=
nullptr){
1520 const coral::AttributeList& atrlist=citr->second;
1521 coral::AttributeList& atrlist2 =
const_cast<coral::AttributeList&
>(atrlist);
1523 if(citr->first!=DBident){
1524 ATH_MSG_DEBUG(
"tweakGlobalFolder fails due to identifier mismatch" );
1528 ATH_MSG_DEBUG(
"Tweak Old global DB -- channel: " << citr->first
1529 <<
" ,bec: " << atrlist2[
"bec"].data<
int>()
1530 <<
" ,layer: " << atrlist2[
"layer"].data<
int>()
1531 <<
" ,sector: " << atrlist2[
"sector"].data<
int>()
1532 <<
" ,Tx: " << atrlist2[
"Tx"].data<
float>()
1533 <<
" ,Ty: " << atrlist2[
"Ty"].data<
float>()
1534 <<
" ,Tz: " << atrlist2[
"Tz"].data<
float>()
1535 <<
" ,phi: " << atrlist2[
"phi"].data<
float>()
1536 <<
" ,theta: " << atrlist2[
"theta"].data<
float>()
1537 <<
" ,psi: " << atrlist2[
"psi"].data<
float>() );
1542 CLHEP::HepRotation oldrotation;
1544 HepGeom::Transform3D oldtransform(oldrotation, oldtranslation);
1552 CLHEP::HepRotation rot=newtrans.getRotation();
1554 eulerangles[0] = rot.getPhi();
1555 eulerangles[1] = rot.getTheta();
1556 eulerangles[2] = rot.getPsi();
1558 atrlist2[
"Tx"].data<
float>() = shift.x();
1559 atrlist2[
"Ty"].data<
float>() = shift.y();
1560 atrlist2[
"Tz"].data<
float>() = shift.z();
1561 atrlist2[
"phi"].data<
float>() = eulerangles[0] ;
1562 atrlist2[
"theta"].data<
float>() = eulerangles[1] ;
1563 atrlist2[
"psi"].data<
float>() = eulerangles[2] ;
1566 ATH_MSG_DEBUG(
"Tweak New global DB -- channel: " << citr->first
1567 <<
" ,bec: " << atrlist2[
"bec"].data<
int>()
1568 <<
" ,layer: " << atrlist2[
"layer"].data<
int>()
1569 <<
" ,sector: " << atrlist2[
"sector"].data<
int>()
1570 <<
" ,Tx: " << atrlist2[
"Tx"].data<
float>()
1571 <<
" ,Ty: " << atrlist2[
"Ty"].data<
float>()
1572 <<
" ,Tz: " << atrlist2[
"Tz"].data<
float>()
1573 <<
" ,phi: " << atrlist2[
"phi"].data<
float>()
1574 <<
" ,theta: " << atrlist2[
"theta"].data<
float>()
1575 <<
" ,psi: " << atrlist2[
"psi"].data<
float>() );
1581 ATH_MSG_ERROR(
"tweakGlobalFolder: cast fails for DBident " << DBident );
1582 return StatusCode::FAILURE;
1586 ATH_MSG_ERROR(
"tweakGlobalFolder: cannot retrieve CondAttrListCollection for key " << key );
1587 return StatusCode::FAILURE;
1590 if (result)
return StatusCode::SUCCESS;
1591 else return StatusCode::FAILURE;
Scalar phi() const
phi method
Scalar theta() const
theta method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
char data[hepevt_bytes_allocation_ATLAS]
This is an interface to a tool used to register conditions objects in the Interval of Validity (IOV) ...
a Service to manage TRT alignment conditions
This is an Identifier helper class for the TRT subdetector.
#define ATLAS_NO_CHECK_FILE_THREAD_SAFETY
This class is a collection of AttributeLists where each one is associated with a channel number.
const_iterator end() const
const_iterator begin() const
Access to Chan/AttributeList pairs via iterators.
ChanAttrListMap::const_iterator const_iterator
void add(ChanNum chanNum)
Adding in channel numbers.
DataModel_detail::const_iterator< DataVector > const_iterator
value_type push_back(value_type pElem)
Add an element to the end of the collection.
DataModel_detail::iterator< DataVector > iterator
Standard iterator.
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
Virtual base class of TRT readout elements.
virtual const double & strawLength() const =0
Active straw length.
virtual Identifier identify() const override final
identifier of this detector element:
The Detector Manager for all TRT Detector elements, it acts as the interface to the detector elements...
std::vector< Amg::Transform3D * > m_amgTransformCache
StatusCode setAlignTransformL1(Identifier ident, const Amg::Transform3D &trans)
set Level 1 AlignableTransform for an identifier
virtual StatusCode initialize()
tool initialize
const TRT_ID * m_trtid
trt id helper
const Amg::Transform3D * getAlignmentTransformL2Ptr(Identifier const &ident) const
get Level L2 Transform for an identifier
ToolHandle< IAthenaOutputStreamTool > m_streamer
OutputStreamTool.
AlignableTransform * getTransPtr(const std::string &key) const
get AlignableTransform pointer for an object key
const Amg::Transform3D * getAlignmentTransformL1Ptr(Identifier const &ident) const
get Level L1 Transform for an identifier
virtual StatusCode finalize()
tool finalize
StatusCode writeGlobalFolderFile(const std::string &file) const
std::vector< std::string > m_alignobjs
folder names
StatusCode tweakAlignTransformL1(Identifier ident, const Amg::Transform3D &trans)
tweak Level 1 AlignableTransform for an identifier
static void printTransform(const std::string &thisName, const Amg::Transform3D &transform)
Output the transform to the cout, for debugging.
StatusCode registerAlignObjects(const std::string &tag, int run1, int event1, int run2, int event2) const
register alignment objects with the IoV service
const Amg::Transform3D getAlignmentTransformL2(Identifier const &ident) const
get Level 2 AlignableTransform for an identifier
StatusCode createAlignObjects() const
Create an empty set of AlignableTransforms for the GeoModel setup.
StatusCode writeStrawAlignTextFile(const std::string &file) const
void printCondObjects() const
Output the conditions objects currently in memory.
StatusCode tweakAlignTransformL3(Identifier ident, Amg::Transform3D trans)
tweak Level 3 AlignableTransform for an identifier
StatusCode writeAlignTextFile(const std::string &file) const
write AlignableTransforms to flat text file
StatusCode IOVCallBack()
Call back function for alignment folders.
StatusCode readAlignTextFile(const std::string &file)
read AlignableTransforms from text file into TDS
std::string m_alignString
alignment string searched for
ServiceHandle< ITRT_StrawAlignDbSvc > m_trtStrawAlignDbSvc
const Amg::Transform3D * getAlignmentTransformPtr(const Identifier &ident, unsigned int level) const
get Level L2 Transform for an identifier
std::string findkey(const Identifier &ident, const std::string &type) const
Return the object key for a given identifier and data type.
StatusCode tweakAlignTransformL2(Identifier ident, const Amg::Transform3D &trans)
tweak Level 2 AlignableTransform for an identifier
const Amg::Transform3D getAlignmentTransform(const Identifier &ident, unsigned int level) const
get AlignableTransform for an identifier
std::string m_par_alitextfile
input text file
const AlignableTransformContainer * getContainer() const
Return the container.
StatusCode setAlignTransformL3(Identifier ident, Amg::Transform3D trans)
set Level 3 AlignableTransform for an identifier
virtual ~TRT_AlignDbSvc()
destructor
const Amg::Transform3D getAlignmentTransformL1(Identifier const &ident) const
get Level 1 AlignableTransform for an identifier
StatusCode setAlignTransformL2(Identifier ident, Amg::Transform3D trans)
set Level 2 AlignableTransform for an identifier
StatusCode setAlignTransform(Identifier ident, Amg::Transform3D trans, unsigned int level)
set AlignableTransform for an identifier
static std::string intToString(int input)
Convert from an int to a string.
const InDetDD::TRT_DetectorManager * m_trtman
detector manager
static std::string prefixtag(const std::string &key)
Return the prefix tag for a given calibration folder.
static int getRingForStrawLayer(int strawlayer)
Returns the ring for a given strawLayer.
StatusCode streamOutAlignObjects() const
write the alignment objects to output
const AlignableTransform * cgetTransPtr(const std::string &key) const
get const AlignableTransform pointer for an object key
ServiceHandle< StoreGateSvc > m_detStore
std::vector< int > m_alignchans
channels
StatusCode tweakGlobalFolder(Identifier ident, const Amg::Transform3D &trans)
tweak L1 DB for global folders for an identifier
std::string m_alignDBprefix
TRT_AlignDbSvc(const std::string &name, ISvcLocator *pSvcLocator)
constructor
StatusCode tweakAlignTransform(Identifier ident, Amg::Transform3D trans, unsigned int level)
tweak AlignableTransform for an identifier
StatusCode createAlignObjectsWhichDoNotAlreadyExist()
Create an empty set of AlignableTransforms for the transforms which are not created by XXXXXXX from t...
bool isOldKey(const std::string &input) const
Returns the true if the input key is from the old endcap scheme.
std::string m_alignroot
root alignment folder
std::string find(const std::string &s)
return a remapped string
HepGeom::Transform3D EigenTransformToCLHEP(const Amg::Transform3D &eigenTransf)
Converts an Eigen-based Amg::Transform3D into a CLHEP-based HepGeom::Transform3D.
Amg::Transform3D CLHEPTransformToEigen(const HepGeom::Transform3D &CLHEPtransf)
Converts a CLHEP-based HepGeom::Transform3D into an Eigen Amg::Transform3D.
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D