From a02e5a10d55c8101fc38ac324cbeb548f1f69921 Mon Sep 17 00:00:00 2001 From: Susumu Oda <Susumu.Oda@cern.ch> Date: Fri, 1 Feb 2019 15:15:29 +0100 Subject: [PATCH] Drop magnetic field callback in TRT_DetElementsRoadMaker_xk --- .../TRT_DetElementsRoadMaker_xk.h | 7 +- .../src/TRT_DetElementsRoadMaker_xk.cxx | 90 ++++++------------- 2 files changed, 30 insertions(+), 67 deletions(-) diff --git a/InnerDetector/InDetRecTools/TRT_DetElementsRoadTool_xk/TRT_DetElementsRoadTool_xk/TRT_DetElementsRoadMaker_xk.h b/InnerDetector/InDetRecTools/TRT_DetElementsRoadTool_xk/TRT_DetElementsRoadTool_xk/TRT_DetElementsRoadMaker_xk.h index 9a13c8aeb6ec..d802ca480122 100755 --- a/InnerDetector/InDetRecTools/TRT_DetElementsRoadTool_xk/TRT_DetElementsRoadTool_xk/TRT_DetElementsRoadMaker_xk.h +++ b/InnerDetector/InDetRecTools/TRT_DetElementsRoadTool_xk/TRT_DetElementsRoadTool_xk/TRT_DetElementsRoadMaker_xk.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ @@ -101,12 +101,10 @@ namespace InDet { ServiceHandle<MagField::IMagFieldSvc> m_fieldServiceHandle; MagField::IMagFieldSvc* m_fieldService{} ; ToolHandle<Trk::IPropagator> m_proptool ; // Propagator tool - Trk::MagneticFieldProperties m_fieldprop; // Magnetic field properties int m_outputlevel{}; int m_nprint{} ; int m_sizeroad{} ; - double m_zfield{} ; float m_width{} ; // Width of the roadInnerDetector/InDetRecTools/ double m_step{} ; // Max step allowed double m_rminTRT{} ; @@ -116,6 +114,7 @@ namespace InDet { std::string m_trt ; // PIX manager location std::string m_fieldmode; // Mode of magnetic field + Trk::MagneticFieldMode m_fieldModeEnum{Trk::FullField}; std::string m_callbackString; /////////////////////////////////////////////////////////////////// @@ -131,8 +130,6 @@ namespace InDet { double stepToDetElement (const InDetDD::TRT_BaseElement*&,Amg::Vector3D&,Amg::Vector3D&); - void magneticFieldInit(); - StatusCode magneticFieldInit(IOVSVC_CALLBACK_ARGS); Trk::CylinderBounds getBound(const Trk::TrackParameters&); MsgStream& dumpConditions(MsgStream & out) const; diff --git a/InnerDetector/InDetRecTools/TRT_DetElementsRoadTool_xk/src/TRT_DetElementsRoadMaker_xk.cxx b/InnerDetector/InDetRecTools/TRT_DetElementsRoadTool_xk/src/TRT_DetElementsRoadMaker_xk.cxx index 6ee30ecd0563..84313c5f251a 100755 --- a/InnerDetector/InDetRecTools/TRT_DetElementsRoadTool_xk/src/TRT_DetElementsRoadMaker_xk.cxx +++ b/InnerDetector/InDetRecTools/TRT_DetElementsRoadTool_xk/src/TRT_DetElementsRoadMaker_xk.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ /////////////////////////////////////////////////////////////////// @@ -16,7 +16,6 @@ #include <utility> -#include "AthenaPoolUtilities/CondAttrListCollection.h" #include "InDetReadoutGeometry/TRT_DetectorManager.h" #include "InDetReadoutGeometry/TRT_BarrelElement.h" #include "InDetReadoutGeometry/TRT_EndcapElement.h" @@ -92,6 +91,9 @@ StatusCode InDet::TRT_DetElementsRoadMaker_xk::initialize() ATH_MSG_DEBUG("Retrieved " << m_fieldServiceHandle ); m_fieldService = &*m_fieldServiceHandle; } + if(m_fieldmode == "NoField") m_fieldModeEnum = Trk::NoField; + else if(m_fieldmode == "MapSolenoid") m_fieldModeEnum = Trk::FastField; + else m_fieldModeEnum = Trk::FullField; // Get propagator tool // @@ -131,26 +133,6 @@ StatusCode InDet::TRT_DetElementsRoadMaker_xk::initialize() else { msg(MSG::INFO) << "Register the callback" << m_proptool << endmsg; } - - - // Setup callback for magnetic field - // - std::string folder( "/EXT/DCS/MAGNETS/SENSORDATA" ); - const DataHandle<CondAttrListCollection> currentHandle; - if (m_fieldmode != "NoField" && detStore()->contains<CondAttrListCollection>(folder)){ - sc = detStore()->regFcn(&InDet::TRT_DetElementsRoadMaker_xk::magneticFieldInit,this,currentHandle,folder); - - if(sc==StatusCode::SUCCESS) { - msg(MSG::INFO) << "Registered callback from MagneticFieldSvc for " << name() << endmsg; - } else { - msg(MSG::ERROR) << "Could not book callback from MagneticFieldSvc for " << name () << endmsg; - return StatusCode::FAILURE; - } - } - else { - magneticFieldInit(); - ATH_MSG_INFO("Folder " << folder << " not present, magnetic field callback not set up. Not a problem if AtlasFieldSvc.useDCS=False"); - } // Get output print level // @@ -191,7 +173,10 @@ MsgStream& InDet::TRT_DetElementsRoadMaker_xk::dumpConditions( MsgStream& out ) "ToroidalField" ,"Grid3DField" ,"RealisticField" , "UndefinedField","AthenaField" , "?????" }; - int mode = m_fieldprop.magneticFieldMode(); + Trk::MagneticFieldMode fieldModeEnum(m_fieldModeEnum); + if(!m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; + Trk::MagneticFieldProperties fieldprop(fieldModeEnum); + int mode = fieldprop.magneticFieldMode(); if(mode<0 || mode>8 ) mode = 8; n = 62-fieldmode[mode].size(); @@ -374,9 +359,12 @@ void InDet::TRT_DetElementsRoadMaker_xk::detElementsRoad Trk::CylinderBounds CB = getBound(Tp); if( CB.r() > m_rminTRT) { + Trk::MagneticFieldMode fieldModeEnum(m_fieldModeEnum); + if(!m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; + Trk::MagneticFieldProperties fieldprop(fieldModeEnum); std::list<Amg::Vector3D> G; - m_proptool->globalPositions(G,Tp,m_fieldprop,CB,S,Trk::pion); + m_proptool->globalPositions(G,Tp,fieldprop,CB,S,Trk::pion); if(G.size() > 1 ) { m_map[0]>0 ? detElementsRoadATL(G,R) : detElementsRoadCTB(G,R); @@ -407,8 +395,12 @@ void InDet::TRT_DetElementsRoadMaker_xk::detElementsRoad std::list<const InDetDD::TRT_BaseElement*>::const_iterator r=RE.begin(),re=RE.end(); if(r==re) return; + Trk::MagneticFieldMode fieldModeEnum(m_fieldModeEnum); + if(!m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; + Trk::MagneticFieldProperties fieldprop(fieldModeEnum); + const Trk::TrackParameters* tp0 = - m_proptool->propagate(Tp,(*r)->surface(),D,false,m_fieldprop,Trk::pion); + m_proptool->propagate(Tp,(*r)->surface(),D,false,fieldprop,Trk::pion); if(!tp0) return; std::pair<const InDetDD::TRT_BaseElement*,const Trk::TrackParameters*> EP0((*r),tp0); @@ -417,7 +409,7 @@ void InDet::TRT_DetElementsRoadMaker_xk::detElementsRoad for(++r; r!=re; ++r) { const Trk::TrackParameters* tp = - m_proptool->propagate((*tp0),(*r)->surface(),D,false,m_fieldprop,Trk::pion); + m_proptool->propagate((*tp0),(*r)->surface(),D,false,fieldprop,Trk::pion); if(!tp) return; std::pair<const InDetDD::TRT_BaseElement*,const Trk::TrackParameters*> EP((*r),tp); @@ -1019,40 +1011,6 @@ double InDet::TRT_DetElementsRoadMaker_xk::stepToDetElement return ((A.x()*(R.x()-r.x())+A.y()*(R.y()-r.y())+A.z()*(R.z()-r.z()))/D); } -/////////////////////////////////////////////////////////////////// -// Callback function - get the magnetic field / -/////////////////////////////////////////////////////////////////// - -StatusCode InDet::TRT_DetElementsRoadMaker_xk::magneticFieldInit(IOVSVC_CALLBACK_ARGS) -{ - // Build MagneticFieldProperties - // - if(!m_fieldService->solenoidOn()) m_fieldmode ="NoField"; - magneticFieldInit(); - return StatusCode::SUCCESS; -} - -void InDet::TRT_DetElementsRoadMaker_xk::magneticFieldInit() -{ - // Build MagneticFieldProperties - // - Trk::MagneticFieldProperties* pMF = 0; - if (m_fieldmode == "NoField" ) pMF = new Trk::MagneticFieldProperties(Trk::NoField ); - else if (m_fieldmode == "MapSolenoid") pMF = new Trk::MagneticFieldProperties(Trk::FastField); - else pMF = new Trk::MagneticFieldProperties(Trk::FullField); - m_fieldprop = *pMF; - - // Test is filed or no - // - m_zfield = 0.; - - if(m_fieldprop.magneticFieldMode()!=Trk::NoField) { - double f[3], p[3] ={10.,10.,0.}; m_fieldService->getFieldZR(p,f); - m_zfield = 299.7925*f[2]; - } - delete pMF; -} - /////////////////////////////////////////////////////////////////// // Cylinder bounds parameters estimation /////////////////////////////////////////////////////////////////// @@ -1062,11 +1020,19 @@ Trk::CylinderBounds InDet::TRT_DetElementsRoadMaker_xk::getBound { const double cor = 0.8; - if( fabs(m_zfield) < .0000001 ) return m_bounds; + double zfield = 0.; + if(m_fieldModeEnum!=Trk::NoField && m_fieldService->solenoidOn()) { + // const Amg::Vector3D& pos = Tp.position(); + double f[3], p[3] ={10.,10.,0.}; // pos[Amg::x],pos[Amg::y],pos[Amg::z]}; + m_fieldService->getFieldZR(p,f); + zfield = 299.7925*f[2]; + } + + if( fabs(zfield) < .0000001 ) return m_bounds; const AmgVector(5)& Vp = Tp.parameters(); - double cur = m_zfield*Vp[4]/sin(Vp[3]); + double cur = zfield*Vp[4]/sin(Vp[3]); if( fabs(cur)*m_bounds.r() < cor ) return m_bounds; -- GitLab