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 ) {
146 if( alignTextFileExists )
148 <<
" exists. Will read text file from callback function." );
150 }
else if ( alignTextFileExists ) {
159 ATH_MSG_ERROR(
"AlignableTransformContainer not in IOV service and no textfile specified." );
166 return StatusCode::SUCCESS;
173 ATH_MSG_INFO(
"TRT_AlignDbSvc finalize method called" );
177 return StatusCode::SUCCESS;
211 return StatusCode::SUCCESS;
219 std::ofstream outfile(
file);
225 std::vector<std::string>::const_iterator iobj=
m_alignobjs.begin();
226 std::vector<std::string>::const_iterator iobjE=
m_alignobjs.end();
227 for (;iobj!=iobjE; ++iobj) {
229 std::string key=*iobj;
237 ATH_MSG_ERROR(
"Cannot find AlignableTransform for key "<< key );
239 outfile << key << std::endl;
245 outfile << key << std::endl;
251 for (;cit!=citE;++cit) {
264 layer=
m_trtid->layer_or_wheel(ident);
265 sector=
m_trtid->phi_module(ident);
266 strawLayer=
m_trtid->straw_layer(ident);
271 if(msgLvl(MSG::DEBUG)){
272 std::string thisMess = key+
" for "+
file;
278 CLHEP::HepRotation rot=transCLHEP.getRotation();
280 eulerangles[0] = rot.getPhi();
281 eulerangles[1] = rot.getTheta();
282 eulerangles[2] = rot.getPsi();
291 << ident <<
" " << bec <<
" " << layer <<
" " << strawLayer <<
" " << key );
293 outfile << bec <<
" " << layer <<
" " << strawLayer <<
" "
294 << std::setprecision(10) <<
" "
295 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
296 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
300 ATH_MSG_DEBUG( bec <<
" " << layer <<
" " << strawLayer <<
" "
301 << std::setprecision(10) <<
" "
302 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
303 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
309 << ident <<
" " << bec <<
" " << layer <<
" " << sector <<
" " << key );
311 outfile << bec <<
" " << layer <<
" " << sector <<
" "
312 << std::setprecision(10) <<
" "
313 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
314 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
319 << std::setprecision(10) <<
" "
320 << shift.x() <<
" " << shift.y() <<
" " << shift.z() <<
" "
321 << eulerangles[0] <<
" " << eulerangles[1] <<
" " << eulerangles[2]
330 ATH_MSG_INFO(
"Written " << nobj <<
" AlignableTransform objects" <<
" with " << ntrans
331 <<
" transforms to text file" );
334 return StatusCode::SUCCESS;
345 return StatusCode::SUCCESS;
352 std::ifstream infile;
353 infile.open(
file.c_str());
368 return StatusCode::FAILURE ;
378 while( infile.getline(line,512) ) {
381 std::string linestring(line) ;
382 if( linestring.find(
'/') != std::string::npos) {
384 atname = linestring ;
388 ATH_MSG_ERROR(
"Cannot find AlignableTransform object for key " << atname );
389 return StatusCode::FAILURE;
393 }
else if(pat!=
nullptr) {
395 std::istringstream is(line) ;
397 int bec(0),layer(0),sector(0),strawLayer(0);
401 if( is >> bec >> layer >> strawLayer >> dx >> dy >> dz >>
phi ) {
402 CLHEP::Hep3Vector translation(dx, dy, dz);
403 CLHEP::HepRotation rotation;
404 if (is >>
theta >> psi) {
406 <<
" " <<
theta <<
" " << psi);
412 <<
" layer " << layer <<
" strawLayer " << strawLayer );
414 if( pat->findIdent(ident)!=pat->end() ) {
415 ATH_MSG_WARNING (
"WARNING: read module from file which was already in AlignableTransform. Will skip it."
416 <<
" bec,lay,sec,strawlay = " << bec <<
" " << layer <<
" " << sector <<
" " );
418 pat->add(ident,HepGeom::Transform3D(rotation, translation));
419 HepGeom::Transform3D testtrans = HepGeom::Transform3D(rotation, translation);
420 if(msgLvl(MSG::DEBUG)){
421 std::string thisMess = atname+
" for "+
file;
428 <<
" [" << bec <<
"," << layer <<
"," << strawLayer
429 <<
"] key " << atname
430 <<
" rotation=(" <<
phi <<
"," <<
theta <<
"," << psi
431 <<
"), translation=(" << dx <<
"," << dy <<
"," << dz <<
"])"
434 }
else if(!linestring.empty()) {
435 ATH_MSG_WARNING(
"Read invalid line from textfile. Line=\'" << line <<
"\'" );
439 if( is >> bec >> layer >> sector >> dx >> dy >> dz >>
phi ) {
440 CLHEP::Hep3Vector translation(dx,dy,dz) ;
441 CLHEP::HepRotation rotation;
442 if( is >>
theta >> psi ) {
448 rotation = CLHEP::HepRotationZ(
phi) ;
452 if( pat->findIdent(ident)!=pat->end() ) {
453 ATH_MSG_WARNING (
"WARNING: read module from file which was already in AlignableTransform. Will skip it."
454 <<
" bec,lay,sec = " << bec <<
" " << layer <<
" " << sector);
456 pat->add(ident,HepGeom::Transform3D(rotation, translation));
459 <<
" [" << bec <<
"," << layer <<
"," << sector
460 <<
"] key " << atname <<
" rotation=(" <<
phi <<
"," <<
theta <<
"," << psi
461 <<
"), translation=(" << dx <<
"," << dy <<
"," << dz <<
"])" );
463 }
else if(!linestring.empty()) {
464 ATH_MSG_WARNING(
"Read invalid line from textfile. Line=\'" << line <<
"\'" );
474 ATH_MSG_INFO(
"Read " << nobj <<
" objects from file with " << ntrans <<
" transforms."
475 <<
" Now forcing callback in detector manager." );
483 return StatusCode::SUCCESS;
499 typeKeys.push_back(arraypair);
505 ATH_MSG_INFO(
" Streamed out and committed AlignableTransformContainer" );
509 return StatusCode::SUCCESS;
516 ATH_MSG_INFO(
"Run/evt1 [" << run1 <<
"," << event1 <<
"]" );
517 ATH_MSG_INFO(
"Run/evt2 [" << run2 <<
"," << event2 <<
"]" );
520 SmartIF<IIOVRegistrationSvc> regsvc(service(
"IOVRegistrationSvc"));
523 if (StatusCode::SUCCESS==regsvc->registerIOV(
"AlignableTransformContainer",
m_alignroot,tag,run1,run2,event1,event2)){
524 ATH_MSG_INFO(
" Register AlignableTransformContainer object "
527 ATH_MSG_ERROR(
" Failed to register AlignableTranformContainer "
529 return StatusCode::FAILURE;
532 return StatusCode::SUCCESS;
539 if(level != 1 && level != 2){
555 std::string key=
"/TRT/Align/TRT";
578 int bec=
m_trtid->barrel_ec(ident);
579 int layer=
m_trtid->layer_or_wheel(ident);
580 int sector=
m_trtid->phi_module(ident);
581 int strawLayer=
m_trtid->straw_layer(ident);
586 mid=
m_trtid->layer_id(bec,0,layer,ring);
588 mid=
m_trtid->module_id(bec,sector,layer);
599 if(level != 1 && level != 2){
617 int bec=
m_trtid->barrel_ec(ident);
620 if(iter != pat->end() ) {
644 int bec=
m_trtid->barrel_ec(ident);
645 int layer=
m_trtid->layer_or_wheel(ident);
646 int sector=
m_trtid->phi_module(ident);
647 int strawLayer=
m_trtid->straw_layer(ident);
651 mid =
m_trtid->layer_id(bec,0,layer,ring);
653 mid =
m_trtid->module_id(bec,sector,layer);
656 if(iter != pat->end() ){
676 if(level != 1 && level != 2 && level != 3){
679 return StatusCode::FAILURE;
695 return StatusCode::SUCCESS;
704 if(msgLvl(MSG::DEBUG)){
713 return StatusCode::FAILURE;
721 ATH_MSG_FATAL(
"The AlignableTransform for key " <<
"/TRT/Align/TRT" <<
" does not exist " );
723 return StatusCode::FAILURE;
727 if( !(
m_trtid->is_trt(ident)) ){
728 ATH_MSG_FATAL(
"The identifier " << ident <<
" is not from the TRT " );
730 return StatusCode::FAILURE;
733 int bec=
m_trtid->barrel_ec(ident);
737 if( !(pat->update(mid,clhepTrans)) ) {
738 pat->add(mid,clhepTrans);
744 return StatusCode::SUCCESS;
757 if (!pat)
return StatusCode::FAILURE;
760 if( !(
m_trtid->is_trt(ident)) )
return StatusCode::FAILURE;
761 int bec=
m_trtid->barrel_ec(ident);
762 int layer=
m_trtid->layer_or_wheel(ident);
763 int sector=
m_trtid->phi_module(ident);
764 int strawLayer=
m_trtid->straw_layer(ident);
769 <<
" Bec= " << bec <<
" layer= " << layer <<
" sector= " << sector
770 <<
" strawLayer= " << strawLayer );
771 ATH_MSG_DEBUG(
"The translations are: x= " << trans(0,3) <<
" y= "<<trans(1,3) <<
" z= "<<trans(2,3) );
774 ident2=
m_trtid->layer_id(bec,0,layer,ring);
776 ident2=
m_trtid->module_id(bec,sector,layer);
779 if( !(
m_trtid->is_trt(ident2)) ){
780 ATH_MSG_FATAL(
"The identifier " << ident2 <<
" is not from the TRT " );
782 return StatusCode::FAILURE;
787 if( !(pat->update(ident2,clhepTrans)) ) {
788 pat->add(ident2,clhepTrans);
793 return StatusCode::SUCCESS;
801 if( !(
m_trtid->is_trt(ident)) )
return StatusCode::FAILURE;
802 int bec=
m_trtid->barrel_ec(ident);
809 ATH_MSG_INFO(
"Storing L3 Barrel constants, Only dx and rotz will be written to DB");
810 float dx = trans.translation().x();
811 float rotz = std::atan2(trans.rotation()(0,1),trans.rotation()(0,0));
815 double strawLenthOver2 = 0.5* strawElement->
strawLength();
820 double delta_dx_atLargerZ = dx + strawLenthOver2 * std::sin(rotz);
821 double delta_dx_atSmallerZ = dx - strawLenthOver2 * std::sin(rotz);
827 bool sideA =
m_trtid->barrel_ec(ident) == 1;
830 double dx1_new = sideA ? delta_dx_atLargerZ : delta_dx_atSmallerZ;
833 double dx2_new = sideA ? delta_dx_atSmallerZ : delta_dx_atLargerZ;
836 double dxErr = 0.001;
842 ATH_MSG_INFO(
"Storing L3 Endcap constants, Only dy and rotz will be written to DB");
851 float dy = trans.translation().y();
852 float rotx = std::atan2(trans.rotation()(1,2),trans.rotation()(2,2));
856 double strawLenthOver2 = 0.5* strawElement->
strawLength();
860 double delta_dx_nearBeamPipe = dy + strawLenthOver2 * std::sin(rotx);
861 double delta_dx_nearReadOut = dy - strawLenthOver2 * std::sin(rotx);
864 double dxErr = 0.001;
870 return StatusCode::SUCCESS;
878 if(level != 1 && level != 2 && level != 3){
881 return StatusCode::FAILURE;
892 return StatusCode::FAILURE;
905 return StatusCode::FAILURE;
918 return StatusCode::FAILURE;
924 return StatusCode::SUCCESS;
939 return StatusCode::FAILURE;
947 ATH_MSG_WARNING(
"The AlignableTransform for key " <<
"/TRT/Align/TRT" <<
" does not exist " );
949 return StatusCode::FAILURE;
955 if( !(
m_trtid->is_trt(ident)) ){
956 ATH_MSG_WARNING(
"The identifier " << ident <<
" is not from the TRT " );
958 return StatusCode::FAILURE;
961 int bec=
m_trtid->barrel_ec(ident);
968 return StatusCode::FAILURE;
973 return StatusCode::SUCCESS;
986 ATH_MSG_WARNING(
"The transfor for key: " << key <<
"Does not exist" );
988 return StatusCode::FAILURE;
993 if( !(
m_trtid->is_trt(ident)) )
return StatusCode::FAILURE;
994 int bec=
m_trtid->barrel_ec(ident);
995 int layer=
m_trtid->layer_or_wheel(ident);
996 int sector=
m_trtid->phi_module(ident);
997 int strawLayer=
m_trtid->straw_layer(ident);
1001 mid =
m_trtid->layer_id(bec,0,layer,ring);
1003 mid =
m_trtid->module_id(bec,sector,layer);
1008 return StatusCode::FAILURE;
1012 return StatusCode::SUCCESS;
1020 if( !(
m_trtid->is_trt(ident)) )
return StatusCode::FAILURE;
1021 int bec=
m_trtid->barrel_ec(ident);
1028 ATH_MSG_INFO(
"Storing L3 constants, Only dx and rotz will be written to DB");
1029 float dx = trans.translation().x();
1045 bool sideA =
m_trtid->barrel_ec(ident) == 1;
1047 float rotz = std::atan2(trans.rotation()(0,2),trans.rotation()(0,0));
1051 double strawLenthOver2 = 0.5* strawElement->
strawLength();
1058 double delta_dx_atLargerZ;
1059 double delta_dx_atSmallerZ;
1061 delta_dx_atLargerZ = dx - strawLenthOver2 * std::sin(rotz);
1062 delta_dx_atSmallerZ = dx + strawLenthOver2 * std::sin(rotz);
1065 delta_dx_atLargerZ = dx + strawLenthOver2 * std::sin(rotz);
1066 delta_dx_atSmallerZ = dx - strawLenthOver2 * std::sin(rotz);
1070 double delta_dx1 = sideA ? delta_dx_atLargerZ : delta_dx_atSmallerZ;
1073 double delta_dx2 = sideA ? delta_dx_atSmallerZ : delta_dx_atLargerZ;
1076 double dxErr = 0.001;
1089 double dx1_new = dx1_current + delta_dx1;
1090 double dx2_new = dx2_current + delta_dx2;
1100 ATH_MSG_INFO(
"Storing L3 Endcap constants, Only dy and rotz will be written to DB");
1109 float dy = trans.translation().y();
1110 float rotx = std::atan2(trans.rotation()(1,2),trans.rotation()(2,2));
1114 double strawLenthOver2 = 0.5* strawElement->
strawLength();
1118 double delta_dx_nearBeamPipe = dy + strawLenthOver2 * std::sin(rotx);
1119 double delta_dx_nearReadOut = dy - strawLenthOver2 * std::sin(rotx);
1122 double dxErr = 0.001;
1135 double dx1_new = dx1_current + delta_dx_nearReadOut;
1136 double dx2_new = dx2_current + delta_dx_nearBeamPipe;
1142 return StatusCode::SUCCESS;
1172 std::ostringstream
result;
1178 }
else if(
type==
"DF") {
1179 result <<
"/TRT/Calib/DF";
1180 }
else return result.str();
1182 int bec=
m_trtid->barrel_ec(ident);
1189 }
else if(bec==-2) {
1193 int layer =
m_trtid->layer_or_wheel(ident);
1196 }
else if(
type==
"ALold"){
1199 }
else if(bec==-2) {
1204 int layer =
m_trtid->layer_or_wheel(ident);
1231 std::ostringstream
result;
1232 std::string detector=key.substr(1,3);
1234 std::string
type,quantity;
1236 if(detector==
"TRT") {
1237 type=key.substr(5,5);
1240 quantity=key.substr(ind,2);
1241 }
else if(detector==
"Indet") {
1242 type=key.substr(7,5);
1246 if(
type==
"Align" && key.substr(ind1,2)!=
"ID") {
1247 if(key.substr(ind1+3,1)==
"_") quantity=
"DF";
1254 if(quantity==
"DF") {
1256 }
else if (quantity==
"RT") {
1258 }
else if (quantity==
"T0") {
1263 std::string module=key.substr(ind+3,2);
1265 }
else if(
type==
"Align") {
1266 std::string module=key.substr(ind1,2);
1267 if(module==
"ID" || module==
"TR") {
1272 module=key.substr(ind+3,2);
1293 <<
" already exists." );
1294 return StatusCode::FAILURE;
1298 auto patc = std::make_unique<AlignableTransformContainer>();
1301 patc->push_back(std::make_unique<AlignableTransform>(
m_alignobjs[i]));
1310 return StatusCode::SUCCESS;
1319 ATH_MSG_DEBUG(
"createAlignObjectsWhichDoNotAlreadyExist method called" );
1347 ATH_MSG_DEBUG(
"Leaving createAlignObjectsWhichDoNotAlreadyExist" );
1348 return StatusCode::SUCCESS;
1357 std::vector<std::string>::const_iterator iobj=
m_alignobjs.begin();
1358 std::vector<std::string>::const_iterator iobjE=
m_alignobjs.end();
1359 for (;iobj!=iobjE;++iobj) {
1392 if( (*dva)->tag()==key ) {
1401 ATH_MSG_WARNING(
"Failed to get the AlignableTransform for key " << key );
1411 return strawlayer / 4 * 4;
1419 for(
unsigned int i=0; i<14; ++i){
1422 <<
bool(input.find(testA)!=std::string::npos) );
1423 if(input.find(testA)!=std::string::npos){
1429 <<
bool(input.find(testC)!=std::string::npos) );
1430 if(input.find(testC)!=std::string::npos){
1441 std::ostringstream stm;
1448 std::cout << thisName <<
" " << transform(0,3) <<
" " << transform(1,3) <<
" " << transform(2,3) << std::endl;
1449 std::cout << thisName <<
" " << transform(0,0) <<
" " << transform(0,1) <<
" " << transform(0,2) << std::endl;
1450 std::cout << thisName <<
" " << transform(1,0) <<
" " << transform(1,1) <<
" " << transform(1,2) << std::endl;
1451 std::cout << thisName <<
" " << transform(2,1) <<
" " << transform(2,1) <<
" " << transform(2,2) << std::endl;
1461 std::ofstream outfile(
file);
1462 std::vector<std::string> folder_list = {
"/TRT/AlignL1/TRT"};
1464 for (std::vector<std::string>::iterator it = folder_list.begin(); it != folder_list.end(); ++it){
1466 outfile << *it << std::endl;
1468 if (StatusCode::SUCCESS==
m_detStore->retrieve(atrlistcol,*it)) {
1472 const coral::AttributeList& atrlist=citr->second;
1473 outfile << atrlist[
"bec"].data<
int>()
1475 <<
" " << atrlist[
"sector"].data<
int>()
1477 <<
" " << atrlist[
"Ty"].data<
float>()
1479 <<
" " << atrlist[
"phi"].data<
float>()
1481 <<
" " << atrlist[
"psi"].data<
float>() << std::endl;
1485 if (msgLvl(MSG::INFO)){
1486 ATH_MSG_INFO(
"Cannot find " << *it <<
" Container - cannot write DB in text file " );
1487 return StatusCode::FAILURE;
1492 return StatusCode::SUCCESS;
1495 ATH_MSG_DEBUG(
"writeFile: No dynamic Run2 DB structure is present --> skipping writing file " <<
file );
1496 return StatusCode::SUCCESS;
1511 std::string key=
"/TRT/AlignL1/TRT";
1512 ATH_MSG_DEBUG(
" Identifier is valid: "<< ident.is_valid() );
1513 int bec=
m_trtid->barrel_ec(ident);
1514 const unsigned int DBident=1000+bec*100;
1517 if (StatusCode::SUCCESS==
m_detStore->retrieve(atrlistcol1,key)) {
1520 if (atrlistcol1!=
nullptr){
1523 const coral::AttributeList& atrlist=citr->second;
1524 coral::AttributeList& atrlist2 =
const_cast<coral::AttributeList&
>(atrlist);
1526 if(citr->first!=DBident){
1527 ATH_MSG_DEBUG(
"tweakGlobalFolder fails due to identifier mismatch" );
1531 ATH_MSG_DEBUG(
"Tweak Old global DB -- channel: " << citr->first
1532 <<
" ,bec: " << atrlist2[
"bec"].data<
int>()
1533 <<
" ,layer: " << atrlist2[
"layer"].data<
int>()
1534 <<
" ,sector: " << atrlist2[
"sector"].data<
int>()
1535 <<
" ,Tx: " << atrlist2[
"Tx"].data<
float>()
1536 <<
" ,Ty: " << atrlist2[
"Ty"].data<
float>()
1537 <<
" ,Tz: " << atrlist2[
"Tz"].data<
float>()
1538 <<
" ,phi: " << atrlist2[
"phi"].data<
float>()
1539 <<
" ,theta: " << atrlist2[
"theta"].data<
float>()
1540 <<
" ,psi: " << atrlist2[
"psi"].data<
float>() );
1545 CLHEP::HepRotation oldrotation;
1547 HepGeom::Transform3D oldtransform(oldrotation, oldtranslation);
1555 CLHEP::HepRotation rot=newtrans.getRotation();
1557 eulerangles[0] = rot.getPhi();
1558 eulerangles[1] = rot.getTheta();
1559 eulerangles[2] = rot.getPsi();
1561 atrlist2[
"Tx"].data<
float>() = shift.x();
1562 atrlist2[
"Ty"].data<
float>() = shift.y();
1563 atrlist2[
"Tz"].data<
float>() = shift.z();
1564 atrlist2[
"phi"].data<
float>() = eulerangles[0] ;
1565 atrlist2[
"theta"].data<
float>() = eulerangles[1] ;
1566 atrlist2[
"psi"].data<
float>() = eulerangles[2] ;
1569 ATH_MSG_DEBUG(
"Tweak New global DB -- channel: " << citr->first
1570 <<
" ,bec: " << atrlist2[
"bec"].data<
int>()
1571 <<
" ,layer: " << atrlist2[
"layer"].data<
int>()
1572 <<
" ,sector: " << atrlist2[
"sector"].data<
int>()
1573 <<
" ,Tx: " << atrlist2[
"Tx"].data<
float>()
1574 <<
" ,Ty: " << atrlist2[
"Ty"].data<
float>()
1575 <<
" ,Tz: " << atrlist2[
"Tz"].data<
float>()
1576 <<
" ,phi: " << atrlist2[
"phi"].data<
float>()
1577 <<
" ,theta: " << atrlist2[
"theta"].data<
float>()
1578 <<
" ,psi: " << atrlist2[
"psi"].data<
float>() );
1584 ATH_MSG_ERROR(
"tweakGlobalFolder: cast fails for DBident " << DBident );
1585 return StatusCode::FAILURE;
1589 ATH_MSG_ERROR(
"tweakGlobalFolder: cannot retrieve CondAttrListCollection for key " << key );
1590 return StatusCode::FAILURE;
1593 if (
result)
return StatusCode::SUCCESS;
1594 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
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.
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