Skip to content
Snippets Groups Projects
Commit d1e16ed8 authored by Vakhtang Tsulaia's avatar Vakhtang Tsulaia
Browse files

Merge branch 'MagField_VKalFitter' into 'master'

Switch from MagneticFieldSvc to condition data (ATLASRECTS-5444)

See merge request !32405
parents 90af9580 8b613a58
No related branches found
Tags nightly/master/2020-04-30T2119
No related merge requests found
Showing
with 63 additions and 56 deletions
...@@ -22,10 +22,7 @@ class SecVrtWithMuonFinder( InDet__InDetSVWithMuonTool ): ...@@ -22,10 +22,7 @@ class SecVrtWithMuonFinder( InDet__InDetSVWithMuonTool ):
# #
from TrkVKalVrtFitter.TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter from TrkVKalVrtFitter.TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter
MuonVertexFitterTool = Trk__TrkVKalVrtFitter(name="MuonVertexFitterTool", MuonVertexFitterTool = Trk__TrkVKalVrtFitter(name="MuonVertexFitterTool",
Extrapolator="Trk::Extrapolator/AtlasExtrapolator", Extrapolator="Trk::Extrapolator/AtlasExtrapolator"
AtlasMagFieldSvc = "AtlasFieldSvc"
#AtlasMagFieldSvc = "Default",
#Extrapolator = "DefaultVKalPropagator"
) )
ToolSvc += MuonVertexFitterTool ToolSvc += MuonVertexFitterTool
#---------------------- #----------------------
......
...@@ -54,11 +54,12 @@ atlas_install_headers( InDetVKalVxInJetTool ) ...@@ -54,11 +54,12 @@ atlas_install_headers( InDetVKalVxInJetTool )
atlas_install_python_modules( python/*.py ) atlas_install_python_modules( python/*.py )
atlas_install_joboptions( share/*.txt ) atlas_install_joboptions( share/*.txt )
#This test is temporarily commented in order not to slow down magnetic field migration to condition data.
atlas_add_test( InDetTrkInJetType_test #Will be restored later
SOURCES test/InDetTrkInJetType_test.cxx #atlas_add_test( InDetTrkInJetType_test
INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS} # SOURCES test/InDetTrkInJetType_test.cxx
LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking PathResolver GaudiKernel # INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
InDetRecToolInterfaces Particle TrkVKalVrtFitterLib GeoPrimitives AnalysisUtilsLib TrkNeutralParameters MVAUtils # LINK_LIBRARIES ${ROOT_LIBRARIES} ${Boost_LIBRARIES} ${EIGEN_LIBRARIES} AthenaBaseComps xAODTracking PathResolver GaudiKernel
TrkParticleBase TrkTrackSummary VxSecVertex VxVertex TrkToolInterfaces TrkVertexFitterInterfaces PathResolver # InDetRecToolInterfaces Particle TrkVKalVrtFitterLib GeoPrimitives AnalysisUtilsLib TrkNeutralParameters MVAUtils
LOG_IGNORE_PATTERN "Booking|AtlasFieldSvc|weight file|create data set info" ) # TrkParticleBase TrkTrackSummary VxSecVertex VxVertex TrkToolInterfaces TrkVertexFitterInterfaces PathResolver
# LOG_IGNORE_PATTERN "Booking|AtlasFieldSvc|weight file|create data set info" )
...@@ -22,10 +22,7 @@ class InDetVKalVxInJetFinder( InDet__InDetVKalVxInJetTool ): ...@@ -22,10 +22,7 @@ class InDetVKalVxInJetFinder( InDet__InDetVKalVxInJetTool ):
# #
from TrkVKalVrtFitter.TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter from TrkVKalVrtFitter.TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter
SVertexFitterTool = Trk__TrkVKalVrtFitter(name="SVertexFitterTool", SVertexFitterTool = Trk__TrkVKalVrtFitter(name="SVertexFitterTool",
Extrapolator="Trk::Extrapolator/AtlasExtrapolator", Extrapolator="Trk::Extrapolator/AtlasExtrapolator"
AtlasMagFieldSvc = "AtlasFieldSvc"
#AtlasMagFieldSvc = "Default",
#Extrapolator = "DefaultVKalPropagator"
) )
ToolSvc += SVertexFitterTool ToolSvc += SVertexFitterTool
#---------------------- #----------------------
...@@ -65,10 +62,6 @@ class AtlasVKalVxInJetFinder( InDet__InDetVKalVxInJetTool ): ...@@ -65,10 +62,6 @@ class AtlasVKalVxInJetFinder( InDet__InDetVKalVxInJetTool ):
from __main__ import ToolSvc from __main__ import ToolSvc
mlog = logging.getLogger( 'AtlasVKalVxInJetFinder::__init__ ' ) mlog = logging.getLogger( 'AtlasVKalVxInJetFinder::__init__ ' )
mlog.info("entering") mlog.info("entering")
#----------------- ATLAS magnetic field
from AthenaCommon.AppMgr import ServiceMgr
from MagFieldServices.MagFieldServicesConf import MagField__AtlasFieldSvc
ServiceMgr += MagField__AtlasFieldSvc("myAtlasFieldSvc");
#----------------- ATLAS extrapolator #----------------- ATLAS extrapolator
from TrkExTools.AtlasExtrapolator import AtlasExtrapolator from TrkExTools.AtlasExtrapolator import AtlasExtrapolator
SVAtlasExtrapolator=AtlasExtrapolator() SVAtlasExtrapolator=AtlasExtrapolator()
...@@ -94,8 +87,7 @@ class AtlasVKalVxInJetFinder( InDet__InDetVKalVxInJetTool ): ...@@ -94,8 +87,7 @@ class AtlasVKalVxInJetFinder( InDet__InDetVKalVxInJetTool ):
# #
from TrkVKalVrtFitter.TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter from TrkVKalVrtFitter.TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter
SVertexFitterTool = Trk__TrkVKalVrtFitter(name="SVertexFitterTool", SVertexFitterTool = Trk__TrkVKalVrtFitter(name="SVertexFitterTool",
Extrapolator=SVAtlasExtrapolator, Extrapolator=SVAtlasExtrapolator
AtlasMagFieldSvc = "myAtlasFieldSvc"
) )
ToolSvc += SVertexFitterTool ToolSvc += SVertexFitterTool
#---------------------- #----------------------
......
...@@ -34,8 +34,7 @@ topSequence.VrtSecInclusive.SelTrkMaxCutoff = 300 ...@@ -34,8 +34,7 @@ topSequence.VrtSecInclusive.SelTrkMaxCutoff = 300
from TrkVKalVrtFitter.TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter from TrkVKalVrtFitter.TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter
InclusiveVxFitterTool = Trk__TrkVKalVrtFitter(name = "InclusiveVxFitter", InclusiveVxFitterTool = Trk__TrkVKalVrtFitter(name = "InclusiveVxFitter",
Extrapolator = ToolSvc.AtlasExtrapolator, Extrapolator = ToolSvc.AtlasExtrapolator,
IterationNumber = 30, IterationNumber = 30
AtlasMagFieldSvc = "AtlasFieldSvc"
) )
ToolSvc += InclusiveVxFitterTool; ToolSvc += InclusiveVxFitterTool;
InclusiveVxFitterTool.OutputLevel = INFO InclusiveVxFitterTool.OutputLevel = INFO
......
...@@ -80,9 +80,7 @@ topSequence.VrtSecInclusive.MCEventContainer = "GEN_AOD" ...@@ -80,9 +80,7 @@ topSequence.VrtSecInclusive.MCEventContainer = "GEN_AOD"
from TrkVKalVrtFitter.TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter from TrkVKalVrtFitter.TrkVKalVrtFitterConf import Trk__TrkVKalVrtFitter
InclusiveVxFitterTool = Trk__TrkVKalVrtFitter(name = "InclusiveVxFitter", InclusiveVxFitterTool = Trk__TrkVKalVrtFitter(name = "InclusiveVxFitter",
Extrapolator = ToolSvc.AtlasExtrapolator, Extrapolator = ToolSvc.AtlasExtrapolator,
IterationNumber = 30, IterationNumber = 30
MagFieldSvc = ToolSvc.AtlasMagneticFieldTool,
AtlasMagFieldSvc = 'dummy'
) )
ToolSvc += InclusiveVxFitterTool; ToolSvc += InclusiveVxFitterTool;
InclusiveVxFitterTool.OutputLevel = INFO InclusiveVxFitterTool.OutputLevel = INFO
......
...@@ -13,8 +13,9 @@ atlas_add_library( TrkVKalVrtFitterLib ...@@ -13,8 +13,9 @@ atlas_add_library( TrkVKalVrtFitterLib
PRIVATE_INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} PRIVATE_INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS}
PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS} PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
LINK_LIBRARIES AthenaBaseComps GeoPrimitives EventPrimitives xAODTracking LINK_LIBRARIES AthenaBaseComps GeoPrimitives EventPrimitives xAODTracking
GaudiKernel MagFieldInterfaces TrkNeutralParameters TrkParameters GaudiKernel MagFieldInterfaces MagFieldElements MagFieldConditions
TrkParticleBase TrkTrack VxSecVertex VxVertex TrkExInterfaces TrkVKalVrtCore TrkNeutralParameters TrkParameters
TrkParticleBase VxSecVertex VxVertex TrkExInterfaces TrkVKalVrtCore
TrkVertexFitterInterfaces TrkVertexFitterInterfaces
PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} TrkSurfaces TestTools ) PRIVATE_LINK_LIBRARIES ${CLHEP_LIBRARIES} TrkSurfaces TestTools )
......
...@@ -7,11 +7,10 @@ ...@@ -7,11 +7,10 @@
#ifndef TRKVKALVRTFITTER_VKALVRTFITTER_H #ifndef TRKVKALVRTFITTER_VKALVRTFITTER_H
#define TRKVKALVRTFITTER_VKALVRTFITTER_H #define TRKVKALVRTFITTER_VKALVRTFITTER_H
// Normal STL and physical vectors // Normal STL and physical vectors
//#include <vector>
// Gaudi includes // Gaudi includes
//#include "AthenaBaseComps/AthAlgTool.h"
#include "GaudiKernel/IToolSvc.h" #include "GaudiKernel/IToolSvc.h"
#include "GaudiKernel/ToolHandle.h" #include "GaudiKernel/ToolHandle.h"
#include "GaudiKernel/EventContext.h"
// //
// Interfaces // Interfaces
#include "TrkVertexFitterInterfaces/IVertexFitter.h" #include "TrkVertexFitterInterfaces/IVertexFitter.h"
...@@ -28,6 +27,8 @@ ...@@ -28,6 +27,8 @@
#include "TrkNeutralParameters/NeutralParameters.h" #include "TrkNeutralParameters/NeutralParameters.h"
//#include "VxVertex/ExtendedVxCandidate.h" //#include "VxVertex/ExtendedVxCandidate.h"
#include "MagFieldInterfaces/IMagFieldSvc.h" #include "MagFieldInterfaces/IMagFieldSvc.h"
// MagField cache
#include "MagFieldConditions/AtlasFieldCacheCondObj.h"
// //
#include <thread> #include <thread>
#include <mutex> #include <mutex>
...@@ -293,11 +294,13 @@ namespace Trk{ ...@@ -293,11 +294,13 @@ namespace Trk{
std::vector<double> m_c_MassInputParticles; std::vector<double> m_c_MassInputParticles;
ToolHandle < IExtrapolator > m_extPropagator; //External propagator ToolHandle < IExtrapolator > m_extPropagator; //External propagator
////ServiceHandle < IMagFieldAthenaSvc > m_magFieldAthenaSvc; //Athena magnetic field----old version ////ServiceHandle<MagField::IMagFieldSvc> m_magFieldAthenaSvc; //Athena magnetic field
ServiceHandle<MagField::IMagFieldSvc> m_magFieldAthenaSvc; //Athena magnetic field //Read handle for conditions object to get the field cache
SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field key"};
SimpleProperty<bool> m_firstMeasuredPoint; SimpleProperty<bool> m_firstMeasuredPoint;
SimpleProperty<bool> m_firstMeasuredPointLimit; SimpleProperty<bool> m_firstMeasuredPointLimit;
SimpleProperty<bool> m_makeExtendedVertex; SimpleProperty<bool> m_makeExtendedVertex;
SimpleProperty<bool> m_useFixedField;
bool m_isAtlasField; bool m_isAtlasField;
...@@ -356,6 +359,7 @@ namespace Trk{ ...@@ -356,6 +359,7 @@ namespace Trk{
VKalAtlasMagFld m_fitField; VKalAtlasMagFld m_fitField;
VKalVrtControl m_vkalFitControl; VKalVrtControl m_vkalFitControl;
MagField::AtlasFieldCache m_fieldCache;
const TrackParameters * m_globalFirstHit = nullptr; const TrackParameters * m_globalFirstHit = nullptr;
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
// Mag field service // Mag field service
#include "MagFieldInterfaces/IMagFieldSvc.h" #include "MagFieldInterfaces/IMagFieldSvc.h"
#include "TrkVKalVrtCore/VKalVrtBMag.h" #include "TrkVKalVrtCore/VKalVrtBMag.h"
#include "MagFieldElements/AtlasFieldCache.h"
// External propagator // External propagator
#include "TrkVKalVrtCore/Propagator.h" #include "TrkVKalVrtCore/Propagator.h"
#include "TrkExInterfaces/IExtrapolator.h" #include "TrkExInterfaces/IExtrapolator.h"
...@@ -33,13 +34,13 @@ class TrkVKalVrtFitter; ...@@ -33,13 +34,13 @@ class TrkVKalVrtFitter;
VKalAtlasMagFld(); VKalAtlasMagFld();
~VKalAtlasMagFld(); ~VKalAtlasMagFld();
void getMagFld(const double,const double,const double,double&,double&,double&)const; void getMagFld(const double,const double,const double,double&,double&,double&)const;
void setAtlasField(MagField::IMagFieldSvc *); void setAtlasField(MagField::AtlasFieldCache *);
void setAtlasField(const double ); void setAtlasField(const double );
void setAtlasMagRefFrame( double, double, double ); void setAtlasMagRefFrame( double, double, double );
private: private:
MagField::IMagFieldSvc* m_VKalAthenaField; MagField::AtlasFieldCache * m_VKalAthenaField;
double m_FIXED_ATLAS_FIELD=1.997; double m_FIXED_ATLAS_FIELD=1.997;
double m_magFrameX, m_magFrameY, m_magFrameZ ; double m_magFrameX, m_magFrameY, m_magFrameZ ;
......
...@@ -38,11 +38,11 @@ TrkVKalVrtFitter:: TrkVKalVrtFitter(const std::string& type, ...@@ -38,11 +38,11 @@ TrkVKalVrtFitter:: TrkVKalVrtFitter(const std::string& type,
m_IDsizeZ(3000.), m_IDsizeZ(3000.),
m_extPropagator(this), // Internal propagator m_extPropagator(this), // Internal propagator
// m_extPropagator("Trk::Extrapolator/InDetExtrapolator"), // External propagator // m_extPropagator("Trk::Extrapolator/InDetExtrapolator"), // External propagator
// m_magFieldAthenaSvc("MagFieldAthenaSvc",name), //Athena magnetic field---old version //m_magFieldAthenaSvc("AtlasFieldSvc", name), //Athena magnetic field
m_magFieldAthenaSvc("AtlasFieldSvc", name), //Athena magnetic field
m_firstMeasuredPoint(false), m_firstMeasuredPoint(false),
m_firstMeasuredPointLimit(false), m_firstMeasuredPointLimit(false),
m_makeExtendedVertex(false), m_makeExtendedVertex(false),
m_useFixedField(false),
m_useAprioriVertex(false), m_useAprioriVertex(false),
m_useThetaCnst(false), m_useThetaCnst(false),
m_usePhiCnst(false), m_usePhiCnst(false),
...@@ -76,7 +76,7 @@ TrkVKalVrtFitter:: TrkVKalVrtFitter(const std::string& type, ...@@ -76,7 +76,7 @@ TrkVKalVrtFitter:: TrkVKalVrtFitter(const std::string& type,
declareProperty("CovVrtForConstraint", m_c_CovVrtForConstraint); declareProperty("CovVrtForConstraint", m_c_CovVrtForConstraint);
declareProperty("InputParticleMasses", m_c_MassInputParticles, "List of masses of input particles (pions assumed if this list is absent)" ); declareProperty("InputParticleMasses", m_c_MassInputParticles, "List of masses of input particles (pions assumed if this list is absent)" );
declareProperty("Extrapolator", m_extPropagator); declareProperty("Extrapolator", m_extPropagator);
declareProperty("AtlasMagFieldSvc", m_magFieldAthenaSvc); declareProperty("useFixedField", m_useFixedField, " Use fixed magnetic field instead of exact Atlas one");
declareProperty("FirstMeasuredPoint", m_firstMeasuredPoint); declareProperty("FirstMeasuredPoint", m_firstMeasuredPoint);
declareProperty("FirstMeasuredPointLimit", m_firstMeasuredPointLimit); declareProperty("FirstMeasuredPointLimit", m_firstMeasuredPointLimit);
declareProperty("MakeExtendedVertex", m_makeExtendedVertex, "VKalVrt returns VxCandidate with full covariance matrix"); declareProperty("MakeExtendedVertex", m_makeExtendedVertex, "VKalVrt returns VxCandidate with full covariance matrix");
...@@ -147,12 +147,17 @@ StatusCode TrkVKalVrtFitter::initialize() ...@@ -147,12 +147,17 @@ StatusCode TrkVKalVrtFitter::initialize()
// if( m_Constraint == 12) { m_usePhiCnst = true; m_useThetaCnst = true;} // if( m_Constraint == 12) { m_usePhiCnst = true; m_useThetaCnst = true;}
// setCnstType((int)m_Constraint); // setCnstType((int)m_Constraint);
StatusCode sc=m_magFieldAthenaSvc.retrieve(); if(!m_useFixedField){
if (sc.isFailure() ){ // Read handle for AtlasFieldCacheCondObj
if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<<"Could not find MagFieldAthenaSvc"<< endmsg; if (!m_fieldCacheCondObjInputKey.key().empty()){
}else{ if( (m_fieldCacheCondObjInputKey.initialize()).isSuccess() ){
m_isAtlasField = true; m_isAtlasField = true;
if(msgLvl(MSG::DEBUG))msg(MSG::DEBUG)<< "MagFieldAthenaSvc is retrieved" << endmsg; ATH_MSG_DEBUG( "Found AtlasFieldCacheCondObj with key ="<< m_fieldCacheCondObjInputKey.key());
}else{
ATH_MSG_INFO( "No AtlasFieldCacheCondObj with key ="<< m_fieldCacheCondObjInputKey.key());
ATH_MSG_INFO( "Use fixed magnetic field instead");
}
}
} }
// //
// Only here the VKalVrtFitter propagator object is created if ATHENA propagator is provided (see setAthenaPropagator) // Only here the VKalVrtFitter propagator object is created if ATHENA propagator is provided (see setAthenaPropagator)
...@@ -221,10 +226,17 @@ void TrkVKalVrtFitter::initState (State& state) const ...@@ -221,10 +226,17 @@ void TrkVKalVrtFitter::initState (State& state) const
// VKalVrtFitter must set up Core BEFORE any call required propagation!!! // VKalVrtFitter must set up Core BEFORE any call required propagation!!!
// //
if (m_isAtlasField) { if (m_isAtlasField) {
state.m_fitField.setAtlasField( m_magFieldAthenaSvc.get() ); // For the moment, use Gaudi Hive for the event context - would need to be passed in from clients
} SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, Gaudi::Hive::currentContext()};
else { const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
state.m_fitField.setAtlasField(m_BMAG); if (fieldCondObj == nullptr) {
ATH_MSG_ERROR("Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
return;
}
fieldCondObj->getInitializedCache (state.m_fieldCache);
state.m_fitField.setAtlasField(&state.m_fieldCache);
} else {
state.m_fitField.setAtlasField(m_BMAG);
} }
state.m_vkalFitControl.vk_objProp = m_fitPropagator; state.m_vkalFitControl.vk_objProp = m_fitPropagator;
......
...@@ -35,18 +35,20 @@ ...@@ -35,18 +35,20 @@
namespace Trk{ namespace Trk{
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
// ATLAS magnetic field access // ATLAS magnetic field access
VKalAtlasMagFld::VKalAtlasMagFld() { VKalAtlasMagFld::VKalAtlasMagFld():
m_VKalAthenaField=0; m_magFrameX(0.),
m_magFrameX=0.; m_magFrameY(0.),
m_magFrameY=0.; m_magFrameZ(0.)
m_magFrameZ=0.; {}
}
VKalAtlasMagFld::~VKalAtlasMagFld(){} VKalAtlasMagFld::~VKalAtlasMagFld(){}
// //
// Setting of parameters // Setting of parameters
// //
void VKalAtlasMagFld::setAtlasField(MagField::IMagFieldSvc* pnt) void VKalAtlasMagFld::setAtlasField(MagField::AtlasFieldCache * pnt )
{ m_VKalAthenaField = pnt; } {
m_VKalAthenaField = pnt;
}
void VKalAtlasMagFld::setAtlasField(const double field) void VKalAtlasMagFld::setAtlasField(const double field)
{ m_FIXED_ATLAS_FIELD = field; } { m_FIXED_ATLAS_FIELD = field; }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment