From 8b104c6090f92b06cdf66c826f53795e78526687 Mon Sep 17 00:00:00 2001 From: Susumu Oda <Susumu.Oda@cern.ch> Date: Fri, 25 Jan 2019 10:06:25 +0100 Subject: [PATCH 1/9] Direct use of IMagFieldSvc --- .../SiDetElementsRoadMaker_xk.h | 7 +- .../src/SiDetElementsRoadMaker_xk.cxx | 79 +++++++------------ 2 files changed, 29 insertions(+), 57 deletions(-) diff --git a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/SiDetElementsRoadTool_xk/SiDetElementsRoadMaker_xk.h b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/SiDetElementsRoadTool_xk/SiDetElementsRoadMaker_xk.h index 9ab80e078bc3..1411e5ab1877 100755 --- a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/SiDetElementsRoadTool_xk/SiDetElementsRoadMaker_xk.h +++ b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/SiDetElementsRoadTool_xk/SiDetElementsRoadMaker_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 */ @@ -113,7 +113,6 @@ namespace InDet{ int m_outputlevel{}; int m_nprint{} ; int m_sizeroad{} ; - double m_zfield{} ; float m_width{} ; // Width of the road double m_step {} ; // Max step allowed Trk::CylinderBounds m_bounds{} ; // @@ -121,7 +120,6 @@ namespace InDet{ std::string m_pix ; // PIX manager location std::string m_sct ; // SCT manager location std::string m_fieldmode; // Mode of magnetic field - Trk::MagneticFieldProperties m_fieldprop; // Magnetic field properties SG::ReadCondHandleKey<SiDetElementsLayerVectors_xk> m_layerVecKey{this, "LayerVecKey", "SiDetElementsLayerVectors_xk", "Key of SiDetElementsLayerVectors_xk"}; @@ -140,9 +138,6 @@ namespace InDet{ float stepToDetElement (const InDetDD::SiDetectorElement*&,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/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx index 7ee069224467..242354cf501c 100755 --- a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx +++ b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_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 */ /////////////////////////////////////////////////////////////////// @@ -15,8 +15,6 @@ #include "SiDetElementsRoadUtils_xk.h" -#include "AthenaPoolUtilities/CondAttrListCollection.h" -#include "EventInfo/TagInfo.h" #include "InDetReadoutGeometry/SCT_DetectorManager.h" #include "InDetReadoutGeometry/PixelDetectorManager.h" #include "TrkExInterfaces/IPropagator.h" @@ -100,17 +98,6 @@ StatusCode InDet::SiDetElementsRoadMaker_xk::initialize() ATH_CHECK(m_layerVecKey.initialize()); - std::string folder( "/EXT/DCS/MAGNETS/SENSORDATA" ); - const DataHandle<CondAttrListCollection> currentHandle; - if (m_fieldmode != "NoField" && detStore()->contains<CondAttrListCollection>(folder)){ - ATH_CHECK( detStore()->regFcn(&InDet::SiDetElementsRoadMaker_xk::magneticFieldInit, - this,currentHandle,folder)); - } - else { - magneticFieldInit(); - ATH_MSG_INFO("Folder " << folder << " not present, magnetic field callback not set up. Not a problem if AtlasFieldSvc.useDCS=False"); - } - return StatusCode::SUCCESS; } @@ -148,7 +135,14 @@ MsgStream& InDet::SiDetElementsRoadMaker_xk::dumpConditions( MsgStream& out ) co "ToroidalField" ,"Grid3DField" ,"RealisticField" , "UndefinedField","AthenaField" , "?????" }; - int mode = m_fieldprop.magneticFieldMode(); + std::string tmpFieldMode = m_fieldmode; + if(!m_fieldService->solenoidOn()) tmpFieldMode = "NoField"; + Trk::MagneticFieldMode fieldModeEnum(Trk::FullField); + if (tmpFieldMode == "NoField" ) fieldModeEnum = Trk::NoField; + else if(tmpFieldMode == "MapSolenoid") fieldModeEnum = Trk::FastField; + Trk::MagneticFieldProperties fieldprop(fieldModeEnum); + + int mode = fieldprop.magneticFieldMode(); if(mode<0 || mode>8 ) mode = 8; n = 62-fieldmode[mode].size(); @@ -508,8 +502,15 @@ void InDet::SiDetElementsRoadMaker_xk::detElementsRoad m_test = true; if(D<0) {m_test = false; S=-S;} + std::string fieldmode = m_fieldmode; + if(!m_fieldService->solenoidOn()) fieldmode = "NoField"; + Trk::MagneticFieldMode fieldModeEnum(Trk::FullField); + if (fieldmode == "NoField" ) fieldModeEnum = Trk::NoField; + else if(fieldmode == "MapSolenoid") fieldModeEnum = Trk::FastField; + Trk::MagneticFieldProperties fieldprop(fieldModeEnum); + std::list<Amg::Vector3D> G; - m_proptool->globalPositions(G,Tp,m_fieldprop,getBound(Tp),S,Trk::pion); + m_proptool->globalPositions(G,Tp,fieldprop,getBound(Tp),S,Trk::pion); if(G.size()<2) return; if(D > 0) { @@ -727,39 +728,6 @@ float InDet::SiDetElementsRoadMaker_xk::stepToDetElement return float((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::SiDetElementsRoadMaker_xk::magneticFieldInit(IOVSVC_CALLBACK_ARGS) -{ - // Build MagneticFieldProperties - // - if(!m_fieldService->solenoidOn()) m_fieldmode ="NoField"; - magneticFieldInit(); - return StatusCode::SUCCESS; -} - -void InDet::SiDetElementsRoadMaker_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; delete 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]; - } -} - /////////////////////////////////////////////////////////////////// // Cylinder bounds parameters estimation /////////////////////////////////////////////////////////////////// @@ -769,11 +737,20 @@ Trk::CylinderBounds InDet::SiDetElementsRoadMaker_xk::getBound { const double cor = 1.; - if( fabs(m_zfield) < .0000001 ) return m_bounds; + double zfield = 0.; + std::string fieldmode = m_fieldmode; + if(!m_fieldService->solenoidOn()) fieldmode = "NoField"; + if(fieldmode!="NoField") { + double f[3], p[3] ={10.,10.,0.}; + 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 From 2f8fe2079695f4716dbe8140bba5a5f70f03a611 Mon Sep 17 00:00:00 2001 From: Susumu Oda <Susumu.Oda@cern.ch> Date: Fri, 25 Jan 2019 12:09:23 +0100 Subject: [PATCH 2/9] Reduce computation --- .../src/SiDetElementsRoadMaker_xk.cxx | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx index 242354cf501c..2ac7c764f4d0 100755 --- a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx +++ b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx @@ -135,11 +135,9 @@ MsgStream& InDet::SiDetElementsRoadMaker_xk::dumpConditions( MsgStream& out ) co "ToroidalField" ,"Grid3DField" ,"RealisticField" , "UndefinedField","AthenaField" , "?????" }; - std::string tmpFieldMode = m_fieldmode; - if(!m_fieldService->solenoidOn()) tmpFieldMode = "NoField"; Trk::MagneticFieldMode fieldModeEnum(Trk::FullField); - if (tmpFieldMode == "NoField" ) fieldModeEnum = Trk::NoField; - else if(tmpFieldMode == "MapSolenoid") fieldModeEnum = Trk::FastField; + if (m_fieldmode == "NoField" || !m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; + else if(m_fieldmode == "MapSolenoid") fieldModeEnum = Trk::FastField; Trk::MagneticFieldProperties fieldprop(fieldModeEnum); int mode = fieldprop.magneticFieldMode(); @@ -502,11 +500,9 @@ void InDet::SiDetElementsRoadMaker_xk::detElementsRoad m_test = true; if(D<0) {m_test = false; S=-S;} - std::string fieldmode = m_fieldmode; - if(!m_fieldService->solenoidOn()) fieldmode = "NoField"; Trk::MagneticFieldMode fieldModeEnum(Trk::FullField); - if (fieldmode == "NoField" ) fieldModeEnum = Trk::NoField; - else if(fieldmode == "MapSolenoid") fieldModeEnum = Trk::FastField; + if (m_fieldmode == "NoField" || !m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; + else if(m_fieldmode == "MapSolenoid") fieldModeEnum = Trk::FastField; Trk::MagneticFieldProperties fieldprop(fieldModeEnum); std::list<Amg::Vector3D> G; -- GitLab From fbea431cee5921e9a8d9c16a81d18869e1c3131c Mon Sep 17 00:00:00 2001 From: Susumu Oda <Susumu.Oda@cern.ch> Date: Fri, 25 Jan 2019 12:12:54 +0100 Subject: [PATCH 3/9] Reduce computation --- .../src/SiDetElementsRoadMaker_xk.cxx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx index 2ac7c764f4d0..c5ed36c8bccd 100755 --- a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx +++ b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx @@ -734,9 +734,7 @@ Trk::CylinderBounds InDet::SiDetElementsRoadMaker_xk::getBound const double cor = 1.; double zfield = 0.; - std::string fieldmode = m_fieldmode; - if(!m_fieldService->solenoidOn()) fieldmode = "NoField"; - if(fieldmode!="NoField") { + if(m_fieldmode!="NoField" && m_fieldService->solenoidOn()) { double f[3], p[3] ={10.,10.,0.}; m_fieldService->getFieldZR(p,f); zfield = 299.7925*f[2]; -- GitLab From 85732c914753a081b6fb561edbd4e632a77ef328 Mon Sep 17 00:00:00 2001 From: Susumu Oda <Susumu.Oda@cern.ch> Date: Fri, 25 Jan 2019 13:15:07 +0100 Subject: [PATCH 4/9] Add timer --- .../src/SiDetElementsRoadMaker_xk.cxx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx index c5ed36c8bccd..1e74098ebbb3 100755 --- a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx +++ b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx @@ -25,6 +25,7 @@ #include <ostream> #include <iomanip> +#include <chrono> /////////////////////////////////////////////////////////////////// // Constructor @@ -135,10 +136,13 @@ MsgStream& InDet::SiDetElementsRoadMaker_xk::dumpConditions( MsgStream& out ) co "ToroidalField" ,"Grid3DField" ,"RealisticField" , "UndefinedField","AthenaField" , "?????" }; + std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); Trk::MagneticFieldMode fieldModeEnum(Trk::FullField); if (m_fieldmode == "NoField" || !m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; else if(m_fieldmode == "MapSolenoid") fieldModeEnum = Trk::FastField; Trk::MagneticFieldProperties fieldprop(fieldModeEnum); + std::chrono::system_clock::time_point end = std::chrono::system_clock::now(); + std::cout << "susumu " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; int mode = fieldprop.magneticFieldMode(); if(mode<0 || mode>8 ) mode = 8; @@ -500,10 +504,13 @@ void InDet::SiDetElementsRoadMaker_xk::detElementsRoad m_test = true; if(D<0) {m_test = false; S=-S;} + std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); Trk::MagneticFieldMode fieldModeEnum(Trk::FullField); if (m_fieldmode == "NoField" || !m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; else if(m_fieldmode == "MapSolenoid") fieldModeEnum = Trk::FastField; Trk::MagneticFieldProperties fieldprop(fieldModeEnum); + std::chrono::system_clock::time_point end = std::chrono::system_clock::now(); + std::cout << "susumu " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; std::list<Amg::Vector3D> G; m_proptool->globalPositions(G,Tp,fieldprop,getBound(Tp),S,Trk::pion); @@ -733,12 +740,15 @@ Trk::CylinderBounds InDet::SiDetElementsRoadMaker_xk::getBound { const double cor = 1.; + std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); double zfield = 0.; if(m_fieldmode!="NoField" && m_fieldService->solenoidOn()) { double f[3], p[3] ={10.,10.,0.}; m_fieldService->getFieldZR(p,f); zfield = 299.7925*f[2]; } + std::chrono::system_clock::time_point end = std::chrono::system_clock::now(); + std::cout << "susumu " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; if( fabs(zfield) < .0000001 ) return m_bounds; -- GitLab From aa005ac9953f9100ed46ccb4a7e2eedd798f8692 Mon Sep 17 00:00:00 2001 From: Susumu Oda <Susumu.Oda@cern.ch> Date: Mon, 28 Jan 2019 01:49:30 +0100 Subject: [PATCH 5/9] Update --- .../src/SiDetElementsRoadMaker_xk.cxx | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx index 1e74098ebbb3..5a182b7471a6 100755 --- a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx +++ b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx @@ -136,13 +136,14 @@ MsgStream& InDet::SiDetElementsRoadMaker_xk::dumpConditions( MsgStream& out ) co "ToroidalField" ,"Grid3DField" ,"RealisticField" , "UndefinedField","AthenaField" , "?????" }; + std::chrono::system_clock::time_point end; std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); Trk::MagneticFieldMode fieldModeEnum(Trk::FullField); if (m_fieldmode == "NoField" || !m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; else if(m_fieldmode == "MapSolenoid") fieldModeEnum = Trk::FastField; Trk::MagneticFieldProperties fieldprop(fieldModeEnum); - std::chrono::system_clock::time_point end = std::chrono::system_clock::now(); - std::cout << "susumu " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; + end = std::chrono::system_clock::now(); + std::cout << "susumu1 " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; int mode = fieldprop.magneticFieldMode(); if(mode<0 || mode>8 ) mode = 8; @@ -504,13 +505,14 @@ void InDet::SiDetElementsRoadMaker_xk::detElementsRoad m_test = true; if(D<0) {m_test = false; S=-S;} + std::chrono::system_clock::time_point end; std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); Trk::MagneticFieldMode fieldModeEnum(Trk::FullField); if (m_fieldmode == "NoField" || !m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; else if(m_fieldmode == "MapSolenoid") fieldModeEnum = Trk::FastField; Trk::MagneticFieldProperties fieldprop(fieldModeEnum); - std::chrono::system_clock::time_point end = std::chrono::system_clock::now(); - std::cout << "susumu " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; + end = std::chrono::system_clock::now(); + std::cout << "susumu2 " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; std::list<Amg::Vector3D> G; m_proptool->globalPositions(G,Tp,fieldprop,getBound(Tp),S,Trk::pion); @@ -740,6 +742,7 @@ Trk::CylinderBounds InDet::SiDetElementsRoadMaker_xk::getBound { const double cor = 1.; + std::chrono::system_clock::time_point end; std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); double zfield = 0.; if(m_fieldmode!="NoField" && m_fieldService->solenoidOn()) { @@ -747,7 +750,7 @@ Trk::CylinderBounds InDet::SiDetElementsRoadMaker_xk::getBound m_fieldService->getFieldZR(p,f); zfield = 299.7925*f[2]; } - std::chrono::system_clock::time_point end = std::chrono::system_clock::now(); + end = std::chrono::system_clock::now(); std::cout << "susumu " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; if( fabs(zfield) < .0000001 ) return m_bounds; -- GitLab From 8aa3b4b2af5d09ec975b005ea23bd4253681d192 Mon Sep 17 00:00:00 2001 From: Susumu Oda <Susumu.Oda@cern.ch> Date: Wed, 30 Jan 2019 13:44:16 +0100 Subject: [PATCH 6/9] Avoid string comparison --- .../SiDetElementsRoadMaker_xk.h | 1 + .../src/SiDetElementsRoadMaker_xk.cxx | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/SiDetElementsRoadTool_xk/SiDetElementsRoadMaker_xk.h b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/SiDetElementsRoadTool_xk/SiDetElementsRoadMaker_xk.h index 1411e5ab1877..1bbc11e50fbf 100755 --- a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/SiDetElementsRoadTool_xk/SiDetElementsRoadMaker_xk.h +++ b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/SiDetElementsRoadTool_xk/SiDetElementsRoadMaker_xk.h @@ -120,6 +120,7 @@ namespace InDet{ std::string m_pix ; // PIX manager location std::string m_sct ; // SCT manager location std::string m_fieldmode; // Mode of magnetic field + Trk::MagneticFieldMode m_fieldModeEnum{Trk::FullField}; SG::ReadCondHandleKey<SiDetElementsLayerVectors_xk> m_layerVecKey{this, "LayerVecKey", "SiDetElementsLayerVectors_xk", "Key of SiDetElementsLayerVectors_xk"}; diff --git a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx index 5a182b7471a6..4ab49b02fc02 100755 --- a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx +++ b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx @@ -84,6 +84,9 @@ StatusCode InDet::SiDetElementsRoadMaker_xk::initialize() ATH_CHECK( m_fieldServiceHandle.retrieve() ); 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 // @@ -138,9 +141,8 @@ MsgStream& InDet::SiDetElementsRoadMaker_xk::dumpConditions( MsgStream& out ) co std::chrono::system_clock::time_point end; std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); - Trk::MagneticFieldMode fieldModeEnum(Trk::FullField); - if (m_fieldmode == "NoField" || !m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; - else if(m_fieldmode == "MapSolenoid") fieldModeEnum = Trk::FastField; + Trk::MagneticFieldMode fieldModeEnum(m_fieldModeEnum); + if(!m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; Trk::MagneticFieldProperties fieldprop(fieldModeEnum); end = std::chrono::system_clock::now(); std::cout << "susumu1 " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; @@ -507,9 +509,8 @@ void InDet::SiDetElementsRoadMaker_xk::detElementsRoad std::chrono::system_clock::time_point end; std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); - Trk::MagneticFieldMode fieldModeEnum(Trk::FullField); - if (m_fieldmode == "NoField" || !m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; - else if(m_fieldmode == "MapSolenoid") fieldModeEnum = Trk::FastField; + Trk::MagneticFieldMode fieldModeEnum(m_fieldModeEnum); + if(!m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; Trk::MagneticFieldProperties fieldprop(fieldModeEnum); end = std::chrono::system_clock::now(); std::cout << "susumu2 " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; @@ -745,13 +746,13 @@ Trk::CylinderBounds InDet::SiDetElementsRoadMaker_xk::getBound std::chrono::system_clock::time_point end; std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); double zfield = 0.; - if(m_fieldmode!="NoField" && m_fieldService->solenoidOn()) { + if(m_fieldModeEnum!=Trk::NoField && m_fieldService->solenoidOn()) { double f[3], p[3] ={10.,10.,0.}; m_fieldService->getFieldZR(p,f); zfield = 299.7925*f[2]; } end = std::chrono::system_clock::now(); - std::cout << "susumu " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; + std::cout << "susumu3 " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; if( fabs(zfield) < .0000001 ) return m_bounds; -- GitLab From 569ec98d4b66395fff1f62ae6a608109bd545c63 Mon Sep 17 00:00:00 2001 From: Susumu Oda <Susumu.Oda@cern.ch> Date: Wed, 30 Jan 2019 14:15:48 +0100 Subject: [PATCH 7/9] Use position from TrackParameter --- .../src/SiDetElementsRoadMaker_xk.cxx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx index 4ab49b02fc02..c90780b2db2e 100755 --- a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx +++ b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx @@ -743,11 +743,13 @@ Trk::CylinderBounds InDet::SiDetElementsRoadMaker_xk::getBound { const double cor = 1.; + const Amg::Vector3D& pos = Tp.position(); + std::chrono::system_clock::time_point end; std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); double zfield = 0.; if(m_fieldModeEnum!=Trk::NoField && m_fieldService->solenoidOn()) { - double f[3], p[3] ={10.,10.,0.}; + double f[3], p[3] ={pos[Amg::x],pos[Amg::y],pos[Amg::z]}; m_fieldService->getFieldZR(p,f); zfield = 299.7925*f[2]; } -- GitLab From af3c1f55962b9887868b93163da902496723949d Mon Sep 17 00:00:00 2001 From: Susumu Oda <Susumu.Oda@cern.ch> Date: Thu, 31 Jan 2019 02:49:42 +0100 Subject: [PATCH 8/9] Remove debuggin parts --- .../src/SiDetElementsRoadMaker_xk.cxx | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx index c90780b2db2e..3758c53556dc 100755 --- a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx +++ b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx @@ -25,7 +25,6 @@ #include <ostream> #include <iomanip> -#include <chrono> /////////////////////////////////////////////////////////////////// // Constructor @@ -139,13 +138,9 @@ MsgStream& InDet::SiDetElementsRoadMaker_xk::dumpConditions( MsgStream& out ) co "ToroidalField" ,"Grid3DField" ,"RealisticField" , "UndefinedField","AthenaField" , "?????" }; - std::chrono::system_clock::time_point end; - std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); Trk::MagneticFieldMode fieldModeEnum(m_fieldModeEnum); if(!m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; Trk::MagneticFieldProperties fieldprop(fieldModeEnum); - end = std::chrono::system_clock::now(); - std::cout << "susumu1 " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; int mode = fieldprop.magneticFieldMode(); if(mode<0 || mode>8 ) mode = 8; @@ -507,13 +502,9 @@ void InDet::SiDetElementsRoadMaker_xk::detElementsRoad m_test = true; if(D<0) {m_test = false; S=-S;} - std::chrono::system_clock::time_point end; - std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); Trk::MagneticFieldMode fieldModeEnum(m_fieldModeEnum); if(!m_fieldService->solenoidOn()) fieldModeEnum = Trk::NoField; Trk::MagneticFieldProperties fieldprop(fieldModeEnum); - end = std::chrono::system_clock::now(); - std::cout << "susumu2 " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; std::list<Amg::Vector3D> G; m_proptool->globalPositions(G,Tp,fieldprop,getBound(Tp),S,Trk::pion); @@ -743,18 +734,13 @@ Trk::CylinderBounds InDet::SiDetElementsRoadMaker_xk::getBound { const double cor = 1.; - const Amg::Vector3D& pos = Tp.position(); - - std::chrono::system_clock::time_point end; - std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); double zfield = 0.; if(m_fieldModeEnum!=Trk::NoField && m_fieldService->solenoidOn()) { + const Amg::Vector3D& pos = Tp.position(); double f[3], p[3] ={pos[Amg::x],pos[Amg::y],pos[Amg::z]}; m_fieldService->getFieldZR(p,f); zfield = 299.7925*f[2]; } - end = std::chrono::system_clock::now(); - std::cout << "susumu3 " << std::chrono::duration_cast<std::chrono::nanoseconds>(end-start).count() << std::endl; if( fabs(zfield) < .0000001 ) return m_bounds; -- GitLab From f115db42bc8dfd0f36f199c879f74059fab03e3e Mon Sep 17 00:00:00 2001 From: Susumu Oda <susumu.oda@cern.ch> Date: Tue, 5 Feb 2019 00:44:04 +0000 Subject: [PATCH 9/9] Revert to the position around the origin in the B field calculation. --- .../src/SiDetElementsRoadMaker_xk.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx index 3758c53556dc..344de0746a59 100755 --- a/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx +++ b/InnerDetector/InDetRecTools/SiDetElementsRoadTool_xk/src/SiDetElementsRoadMaker_xk.cxx @@ -736,8 +736,8 @@ Trk::CylinderBounds InDet::SiDetElementsRoadMaker_xk::getBound double zfield = 0.; if(m_fieldModeEnum!=Trk::NoField && m_fieldService->solenoidOn()) { - const Amg::Vector3D& pos = Tp.position(); - double f[3], p[3] ={pos[Amg::x],pos[Amg::y],pos[Amg::z]}; + // 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]; } -- GitLab