38 : base_class(name,pSvcLocator),
46 m_streamer(
"AthenaOutputStreamTool/CondStream1"),
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");
81 itermin=
m_trtman->getDetectorElementBegin();
82 itermax=
m_trtman->getDetectorElementEnd();
106 ATH_MSG_INFO(
"Adding key: /TRT/Align/TRT --> We are using static DB folder scheme" );
111 for (iter=itermin;iter!=itermax;++iter) {
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;
220 std::ofstream outfile(
file);
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;
238 ATH_MSG_ERROR(
"Cannot find AlignableTransform for key "<< key );
240 outfile << key << std::endl;
246 outfile << key << std::endl;
252 for (;cit!=citE;++cit) {
265 layer=
m_trtid->layer_or_wheel(ident);
266 sector=
m_trtid->phi_module(ident);
267 strawLayer=
m_trtid->straw_layer(ident);
272 if(msgLvl(MSG::DEBUG)){
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();
292 << ident <<
" " << bec <<
" " << layer <<
" " << strawLayer <<
" " << key );
294 outfile << bec <<
" " << layer <<
" " << strawLayer <<
" "
295 << std::setprecision(10) <<
" "
296 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
297 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
301 ATH_MSG_DEBUG( bec <<
" " << layer <<
" " << strawLayer <<
" "
302 << std::setprecision(10) <<
" "
303 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
304 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
310 << ident <<
" " << bec <<
" " << layer <<
" " << sector <<
" " << key );
312 outfile << bec <<
" " << layer <<
" " << sector <<
" "
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;
353 std::ifstream infile;
354 infile.open(
file.c_str());
369 return StatusCode::FAILURE ;
379 while( infile.getline(line,512) ) {
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) ;
398 int bec(0),layer(0),sector(0),strawLayer(0);
402 if( is >> bec >> layer >> strawLayer >> dx >> dy >> dz >>
phi ) {
403 CLHEP::Hep3Vector translation(dx, dy, dz);
404 CLHEP::HepRotation rotation;
405 if (is >>
theta >> psi) {
407 <<
" " <<
theta <<
" " << psi);
413 <<
" layer " << layer <<
" strawLayer " << strawLayer );
415 if( pat->findIdent(ident)!=pat->end() ) {
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 <<
" " );
419 pat->add(ident,HepGeom::Transform3D(rotation, translation));
420 HepGeom::Transform3D testtrans = HepGeom::Transform3D(rotation, translation);
421 if(msgLvl(MSG::DEBUG)){
422 std::string thisMess = atname+
" for "+
file;
429 <<
" [" << bec <<
"," << layer <<
"," << strawLayer
430 <<
"] key " << atname
431 <<
" rotation=(" <<
phi <<
"," <<
theta <<
"," << psi
432 <<
"), translation=(" << dx <<
"," << dy <<
"," << dz <<
"])"
435 }
else if(!linestring.empty()) {
436 ATH_MSG_WARNING(
"Read invalid line from textfile. Line=\'" << line <<
"\'" );
440 if( is >> bec >> layer >> sector >> dx >> dy >> dz >>
phi ) {
441 CLHEP::Hep3Vector translation(dx,dy,dz) ;
442 CLHEP::HepRotation rotation;
443 if( is >>
theta >> psi ) {
449 rotation = CLHEP::HepRotationZ(
phi) ;
453 if( pat->findIdent(ident)!=pat->end() ) {
454 ATH_MSG_WARNING (
"WARNING: read module from file which was already in AlignableTransform. Will skip it."
455 <<
" bec,lay,sec = " << bec <<
" " << layer <<
" " << sector);
457 pat->add(ident,HepGeom::Transform3D(rotation, translation));
460 <<
" [" << bec <<
"," << layer <<
"," << sector
461 <<
"] key " << atname <<
" rotation=(" <<
phi <<
"," <<
theta <<
"," << psi
462 <<
"), translation=(" << dx <<
"," << dy <<
"," << dz <<
"])" );
464 }
else if(!linestring.empty()) {
465 ATH_MSG_WARNING(
"Read invalid line from textfile. Line=\'" << line <<
"\'" );
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;
519 ATH_MSG_INFO(
"Run/evt1 [" << run1 <<
"," << event1 <<
"]" );
520 ATH_MSG_INFO(
"Run/evt2 [" << run2 <<
"," << event2 <<
"]" );
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;
542 if(level != 1 && level != 2){
558 std::string key=
"/TRT/Align/TRT";
581 int bec=
m_trtid->barrel_ec(ident);
582 int layer=
m_trtid->layer_or_wheel(ident);
583 int sector=
m_trtid->phi_module(ident);
584 int strawLayer=
m_trtid->straw_layer(ident);
589 mid=
m_trtid->layer_id(bec,0,layer,ring);
591 mid=
m_trtid->module_id(bec,sector,layer);
602 if(level != 1 && level != 2){
620 int bec=
m_trtid->barrel_ec(ident);
623 if(iter != pat->end() ) {
647 int bec=
m_trtid->barrel_ec(ident);
648 int layer=
m_trtid->layer_or_wheel(ident);
649 int sector=
m_trtid->phi_module(ident);
650 int strawLayer=
m_trtid->straw_layer(ident);
654 mid =
m_trtid->layer_id(bec,0,layer,ring);
656 mid =
m_trtid->module_id(bec,sector,layer);
659 if(iter != pat->end() ){
679 if(level != 1 && level != 2 && level != 3){
682 return StatusCode::FAILURE;
698 return StatusCode::SUCCESS;
707 if(msgLvl(MSG::DEBUG)){
716 return StatusCode::FAILURE;
724 ATH_MSG_FATAL(
"The AlignableTransform for key " <<
"/TRT/Align/TRT" <<
" does not exist " );
726 return StatusCode::FAILURE;
730 if( !(
m_trtid->is_trt(ident)) ){
731 ATH_MSG_FATAL(
"The identifier " << ident <<
" is not from the TRT " );
733 return StatusCode::FAILURE;
736 int bec=
m_trtid->barrel_ec(ident);
740 if( !(pat->update(mid,clhepTrans)) ) {
741 pat->add(mid,clhepTrans);
747 return StatusCode::SUCCESS;
760 if (!pat)
return StatusCode::FAILURE;
763 if( !(
m_trtid->is_trt(ident)) )
return StatusCode::FAILURE;
764 int bec=
m_trtid->barrel_ec(ident);
765 int layer=
m_trtid->layer_or_wheel(ident);
766 int sector=
m_trtid->phi_module(ident);
767 int strawLayer=
m_trtid->straw_layer(ident);
772 <<
" Bec= " << bec <<
" layer= " << layer <<
" sector= " << sector
773 <<
" strawLayer= " << strawLayer );
774 ATH_MSG_DEBUG(
"The translations are: x= " << trans(0,3) <<
" y= "<<trans(1,3) <<
" z= "<<trans(2,3) );
777 ident2=
m_trtid->layer_id(bec,0,layer,ring);
779 ident2=
m_trtid->module_id(bec,sector,layer);
782 if( !(
m_trtid->is_trt(ident2)) ){
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;
804 if( !(
m_trtid->is_trt(ident)) )
return StatusCode::FAILURE;
805 int bec=
m_trtid->barrel_ec(ident);
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);
830 bool sideA =
m_trtid->barrel_ec(ident) == 1;
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;
881 if(level != 1 && level != 2 && level != 3){
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;
958 if( !(
m_trtid->is_trt(ident)) ){
959 ATH_MSG_WARNING(
"The identifier " << ident <<
" is not from the TRT " );
961 return StatusCode::FAILURE;
964 int bec=
m_trtid->barrel_ec(ident);
971 return StatusCode::FAILURE;
976 return StatusCode::SUCCESS;
989 ATH_MSG_WARNING(
"The transfor for key: " << key <<
"Does not exist" );
991 return StatusCode::FAILURE;
996 if( !(
m_trtid->is_trt(ident)) )
return StatusCode::FAILURE;
997 int bec=
m_trtid->barrel_ec(ident);
998 int layer=
m_trtid->layer_or_wheel(ident);
999 int sector=
m_trtid->phi_module(ident);
1000 int strawLayer=
m_trtid->straw_layer(ident);
1004 mid =
m_trtid->layer_id(bec,0,layer,ring);
1006 mid =
m_trtid->module_id(bec,sector,layer);
1011 return StatusCode::FAILURE;
1015 return StatusCode::SUCCESS;
1023 if( !(
m_trtid->is_trt(ident)) )
return StatusCode::FAILURE;
1024 int bec=
m_trtid->barrel_ec(ident);
1031 ATH_MSG_INFO(
"Storing L3 constants, Only dx and rotz will be written to DB");
1032 float dx = trans.translation().x();
1048 bool sideA =
m_trtid->barrel_ec(ident) == 1;
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();
1185 int bec=
m_trtid->barrel_ec(ident);
1192 }
else if(bec==-2) {
1196 int layer =
m_trtid->layer_or_wheel(ident);
1199 }
else if(
type==
"ALold"){
1202 }
else if(bec==-2) {
1207 int layer =
m_trtid->layer_or_wheel(ident);
1234 std::ostringstream
result;
1235 std::string detector=key.substr(1,3);
1237 std::string
type,quantity;
1239 if(detector==
"TRT") {
1240 type=key.substr(5,5);
1243 quantity=key.substr(ind,2);
1244 }
else if(detector==
"Indet") {
1245 type=key.substr(7,5);
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") {
1266 std::string module=key.substr(ind+3,2);
1268 }
else if(
type==
"Align") {
1269 std::string module=key.substr(ind1,2);
1270 if(module==
"ID" || module==
"TR") {
1275 module=key.substr(ind+3,2);
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 ) {
1404 ATH_MSG_WARNING(
"Failed to get the AlignableTransform for key " << 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;
1451 std::cout << thisName <<
" " << transform(0,3) <<
" " << transform(1,3) <<
" " << transform(2,3) << std::endl;
1452 std::cout << thisName <<
" " << transform(0,0) <<
" " << transform(0,1) <<
" " << transform(0,2) << std::endl;
1453 std::cout << thisName <<
" " << transform(1,0) <<
" " << transform(1,1) <<
" " << transform(1,2) << std::endl;
1454 std::cout << thisName <<
" " << transform(2,1) <<
" " << transform(2,1) <<
" " << transform(2,2) << std::endl;
1464 std::ofstream outfile(
file);
1465 std::vector<std::string> folder_list = {
"/TRT/AlignL1/TRT"};
1467 for (std::vector<std::string>::iterator it = folder_list.begin(); it != folder_list.end(); ++it){
1469 outfile << *it << std::endl;
1471 if (StatusCode::SUCCESS==
m_detStore->retrieve(atrlistcol,*it)) {
1475 const coral::AttributeList& atrlist=citr->second;
1476 outfile << atrlist[
"bec"].data<
int>()
1478 <<
" " << atrlist[
"sector"].data<
int>()
1480 <<
" " << atrlist[
"Ty"].data<
float>()
1482 <<
" " << atrlist[
"phi"].data<
float>()
1484 <<
" " << atrlist[
"psi"].data<
float>() << std::endl;
1488 if (msgLvl(MSG::INFO)){
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";
1515 ATH_MSG_DEBUG(
" Identifier is valid: "<< ident.is_valid() );
1516 int bec=
m_trtid->barrel_ec(ident);
1517 const unsigned int DBident=1000+bec*100;
1520 if (StatusCode::SUCCESS==
m_detStore->retrieve(atrlistcol1,key)) {
1523 if (atrlistcol1!=
nullptr){
1526 const coral::AttributeList& atrlist=citr->second;
1527 coral::AttributeList& atrlist2 =
const_cast<coral::AttributeList&
>(atrlist);
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>() );
1548 CLHEP::HepRotation oldrotation;
1550 HepGeom::Transform3D oldtransform(oldrotation, oldtranslation);
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;
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) ...
defines and typedefs for IOVSvc
#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,...
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 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
const DataHandle< AlignableTransformContainer > m_aligncontainerhandle
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.
StatusCode IOVCallBack(IOVSVC_CALLBACK_ARGS)
Call back function for alignment folders.
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