diff --git a/InnerDetector/InDetConfig/python/SiSpacePointsSeedToolConfig.py b/InnerDetector/InDetConfig/python/SiSpacePointsSeedToolConfig.py index e567de15dc41971ba679573b1b3b9b1975230043..7a8180581ead2fe8b9268b438ddb3a418457f419 100644 --- a/InnerDetector/InDetConfig/python/SiSpacePointsSeedToolConfig.py +++ b/InnerDetector/InDetConfig/python/SiSpacePointsSeedToolConfig.py @@ -9,6 +9,8 @@ def SiSpacePointsSeedMaker_CosmicCfg( flags, name="InDetSpSeedsMaker_Cosmic", **kwargs): acc = ComponentAccumulator() + kwargs.setdefault("fieldScale",flags.BField.configuredSolenoidFieldScale) + acc.setPrivateTools(CompFactory.InDet.SiSpacePointsSeedMaker_Cosmic( name, **kwargs)) return acc @@ -26,6 +28,7 @@ def SiSpacePointsSeedMaker_HeavyIonCfg( flags.Tracking.ActiveConfig.maxdImpactPPSSeeds) kwargs.setdefault("maxdImpactSSS", flags.Tracking.ActiveConfig.maxdImpactSSSSeeds) + kwargs.setdefault("fieldScale",flags.BField.configuredSolenoidFieldScale) acc.setPrivateTools(CompFactory.InDet.SiSpacePointsSeedMaker_HeavyIon( name+flags.Tracking.ActiveConfig.extension, **kwargs)) @@ -40,6 +43,7 @@ def SiSpacePointsSeedMaker_LowMomentumCfg( flags.Tracking.ActiveConfig.maxPrimaryImpact) kwargs.setdefault("maxZ", flags.Tracking.ActiveConfig.maxZImpact) kwargs.setdefault("minZ", -flags.Tracking.ActiveConfig.maxZImpact) + kwargs.setdefault("fieldScale",flags.BField.configuredSolenoidFieldScale) kwargs.setdefault("maxRadius1", 0.75*flags.Tracking.ActiveConfig.radMax) @@ -61,6 +65,7 @@ def SiSpacePointsSeedMaker_BeamGasCfg( flags.Tracking.ActiveConfig.maxPrimaryImpact) kwargs.setdefault("maxZ", flags.Tracking.ActiveConfig.maxZImpact) kwargs.setdefault("minZ", -flags.Tracking.ActiveConfig.maxZImpact) + kwargs.setdefault("fieldScale",flags.BField.configuredSolenoidFieldScale) kwargs.setdefault("maxRadius1", 0.75*flags.Tracking.ActiveConfig.radMax) @@ -82,6 +87,7 @@ def SiSpacePointsSeedMaker_ATLxkCfg( flags.Tracking.ActiveConfig.maxPrimaryImpact) kwargs.setdefault("maxZ", flags.Tracking.ActiveConfig.maxZImpact) kwargs.setdefault("minZ", -flags.Tracking.ActiveConfig.maxZImpact) + kwargs.setdefault("fieldScale",flags.BField.configuredSolenoidFieldScale) if flags.Tracking.ActiveConfig.extension in ["", "Forward"]: kwargs.setdefault("maxdImpactSSS", diff --git a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py index 6ccd4988cc7cda26f68b13de5a9378cc79775868..77c170d6002a0a20a1049ed43f715ce5b01c7e03 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py +++ b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py @@ -45,6 +45,7 @@ def RadDamageUtilCfg(flags, name="RadDamageUtil", **kwargs): kwargs.setdefault("betaElectrons", 4.5e-16) kwargs.setdefault("betaHoles", 6.0e-16) kwargs.setdefault("saveDebugMaps", False) + kwargs.setdefault("fieldScale", flags.BField.configuredSolenoidFieldScale) # to handle custom B field where nominal hardcoded RadDamageUtil = CompFactory.RadDamageUtil return RadDamageUtil(name, **kwargs) diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.cxx index 8255dc87a3fdcebc9c242ce42c0a0b710cc40396..e909a175f49ef65cf262c43271501a1005efd628 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.cxx +++ b/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.cxx @@ -287,7 +287,7 @@ const StatusCode RadDamageUtil::generateDistanceTimeMap(TH2F*& distanceMap_e, TH //https://gitlab.cern.ch/radiationDamageDigitization/radDamage_athena_rel22/blob/rel22_radDamageDev_master/scripts/SaveMapsForAthena.C //TODO: From DB call each time double temperature = 300; - double bField = 2;//Tesla + double bField = 2*m_fieldScale;//Tesla //From PixelModuleDesign: TODO //FIXME workaround, if PixelModuleDesign not available: retrieve sensor thickness from E field //double sensorThickness = module->thickness() * 1000.0;//default is 200; diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.h b/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.h index d23d772b0752cafaf5fcefcb0672f21673675731..b39d4870f42fd8d94c863bd91ec6325b05cefe72 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.h +++ b/InnerDetector/InDetDigitization/PixelDigitization/src/RadDamageUtil.h @@ -74,6 +74,8 @@ private: this, "saveDebugMaps", false, "Flag to save map" }; + Gaudi::Property<double> m_fieldScale{this, "fieldScale", 1.}; + static double alpha(int n, int Nrep, double a); //Poisson solution factor static double weighting3D(double x, double y, double z, int n, int m, int Nrep, double a, double b); static double weighting2D(double x, double z, double Lx, double sensorThickness); diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfig.py b/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfig.py index 25e3b16175d3847da1b0041a31a888f075479a5c..e523ed046654d340ab775acbdb72794bdb87eebd 100644 --- a/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfig.py +++ b/InnerDetector/InDetDigitization/TRT_Digitization/python/TRT_DigitizationConfig.py @@ -62,6 +62,9 @@ def TRT_DigitizationBasicToolCfg(flags, name="TRT_DigitizationBasicTool", **kwar if flags.Digitization.DoXingByXingPileUp: kwargs.setdefault("FirstXing", TRT_FirstXing()) kwargs.setdefault("LastXing", TRT_LastXing()) + if flags.BField.configuredSolenoidFieldScale>0 and flags.BField.configuredSolenoidFieldScale<1: + from AthenaCommon.SystemOfUnits import tesla + kwargs.setdefault("Override_solenoidFieldStrength", flags.BField.configuredSolenoidFieldScale * 2.0 * tesla) from RngComps.RngCompsConfig import AthRNGSvcCfg kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)).name) TRTDigitizationTool = CompFactory.TRTDigitizationTool diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_ATLxk.h b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_ATLxk.h index d5563a7251c80f39eee0d78f469f385758ca09a9..292a663a7f711654266d031e7390e1fe30d1a8bb 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_ATLxk.h +++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_ATLxk.h @@ -218,6 +218,7 @@ namespace InDet { FloatProperty m_dImpactCutSlopeUnconfirmedPPP{this, "dImpactCutSlopeUnconfirmedPPP", 0.}; FloatProperty m_maxdImpactDecays{this, "maxdImpactForDecays", 20.}; FloatProperty m_ptmin{this, "pTmin", 500.}; + FloatProperty m_fieldScale{this, "fieldScale", 1.}; //@} /// @name Properties, which can be updated in newEvent method. checketa is prepared in EventData. diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_BeamGas.h b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_BeamGas.h index 994d887ae53ab7fd2c78c1e62b587e0520e11e13..6337422a0d8ba601a6ce900541774bd992af868b 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_BeamGas.h +++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_BeamGas.h @@ -175,6 +175,7 @@ namespace InDet { //@{ FloatProperty m_ptmin{this, "pTmin", 1000.}; FloatProperty m_etamax{this, "etaMax", 5.3}; + FloatProperty m_fieldScale{this, "fieldScale", 1.}; //@} /// @name Data members, which are updated in only initialize diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_Cosmic.h b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_Cosmic.h index ab5fddaeecad61a3ab8049e9c70848a1694a90b2..b19f2e6888d6c0e7de3f97724402cf95f8872fd3 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_Cosmic.h +++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_Cosmic.h @@ -158,6 +158,7 @@ namespace InDet { //@{ FloatProperty m_ptmin{this, "pTmin", 500.}; FloatProperty m_etamax{this, "etaMax", 2.3}; + FloatProperty m_fieldScale{this, "fieldScale", 1.}; //@} /// @name Data members, which are updated in only initialize diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_HeavyIon.h b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_HeavyIon.h index 27584a7a8ad5e9f77f4a11c24c465f60f00872b3..d2fe6df8c9f03690c58a06a43809a3791b3f525a 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_HeavyIon.h +++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_HeavyIon.h @@ -176,7 +176,8 @@ namespace InDet { //@{ FloatProperty m_etamax{this, "etaMax", 2.7}; FloatProperty m_ptmin{this, "pTmin", 500.}; - //@} + FloatProperty m_fieldScale{this, "fieldScale", 1.}; + //@} /// @name Data members, which are not updated at all //@{ diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_LowMomentum.h b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_LowMomentum.h index c97d1e6c4fdaa79756f145d2e473280b07021777..972e92313c0c618d880ab13b20905c0e044db442 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_LowMomentum.h +++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/SiSpacePointsSeedMaker_LowMomentum.h @@ -172,6 +172,7 @@ namespace InDet { //@{ FloatProperty m_etamax{this, "etaMax", 2.7}; FloatProperty m_ptmin{this, "pTmin", 100.}; + FloatProperty m_fieldScale{this, "fieldScale", 1.}; //@} /// @name Data members, which are updated only in initialize diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_ATLxk.cxx b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_ATLxk.cxx index 681e88d3dd74f2eb8e7ac79a14c8ea92a57843aa..7b5213fa950cecd65bb75806d9cdd39651b33908 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_ATLxk.cxx +++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_ATLxk.cxx @@ -907,11 +907,7 @@ bool InDet::SiSpacePointsSeedMaker_ATLxk::newVertices(EventData& data, const std void InDet::SiSpacePointsSeedMaker_ATLxk::buildFrameWork() { - m_ptmin = std::abs(m_ptmin); - - if (m_ptmin < 100.) { - m_ptmin = 100.; - } + m_ptmin = std::max( std::abs(m_ptmin), float(100.*m_fieldScale)); /// ensure consistency in the transverse IP cuts if (m_maxdImpactSSS < m_maxdImpact ) m_maxdImpactSSS = m_maxdImpact; if (m_maxdImpactDecays < m_maxdImpactSSS) m_maxdImpactDecays = m_maxdImpactSSS; @@ -972,11 +968,11 @@ void InDet::SiSpacePointsSeedMaker_ATLxk::buildFrameWork() /// The factor 3 we divide by is motivated by the fact that we combine sets of /// three consecutive phi bins in the seed making step. So each individual bin should /// be approximately a third of the maximum expected azimutal deflection - const float binSizePhi_PPP = m_pixel ? azimuthalStep(m_ptmin,m_maxdImpact,radiusPixelStart,radiusPixelEnd)/3.f : 0.f; + const float binSizePhi_PPP = m_pixel ? azimuthalStep(m_ptmin/m_fieldScale,m_maxdImpact,radiusPixelStart,radiusPixelEnd)/3.f : 0.f; /// case 2: SSS seeds, if we use them constexpr float radiusSctStart = 295.; ; /// approximate lowest R location of strip hits (driven by barrel) constexpr float radiusSctEnd = 560.; /// approximate largest R location of strip hits (driven by endcap) - const float binSizePhi_SSS = m_sct ? azimuthalStep(m_ptmin,m_maxdImpactSSS,radiusSctStart,radiusSctEnd)/3.f : 0.f; + const float binSizePhi_SSS = m_sct ? azimuthalStep(m_ptmin/m_fieldScale,m_maxdImpactSSS,radiusSctStart,radiusSctEnd)/3.f : 0.f; /// pick the larger of the two and invert m_inverseBinSizePhi = 1.f/std::max(binSizePhi_PPP, binSizePhi_SSS); } @@ -985,7 +981,7 @@ void InDet::SiSpacePointsSeedMaker_ATLxk::buildFrameWork() /// a trajectory with 400 MeV, from the origin, and Rmin = 0 / Rmax = 600mm float ptm = 400.; float ptm = 400.; /// if we cut below 400 MeV, adapt the ptm - if (m_ptmin < ptm) ptm = m_ptmin; + if (m_ptmin/m_fieldScale < ptm) ptm = m_ptmin/m_fieldScale; m_inverseBinSizePhi = ptm /60.f; } @@ -1002,7 +998,7 @@ void InDet::SiSpacePointsSeedMaker_ATLxk::buildFrameWork() /// same logic as for the space points above const int nPhiBinsVertexMax = arraySizePhiV; const float inverseBinSizePhiVertexMax = static_cast<float>(nPhiBinsVertexMax)/twoPi; - m_inverseBinSizePhiVertex = m_ptmin/120.f; + m_inverseBinSizePhiVertex = m_ptmin/m_fieldScale/120.f; if (m_inverseBinSizePhiVertex > inverseBinSizePhiVertexMax) m_inverseBinSizePhiVertex = inverseBinSizePhiVertexMax; m_maxBinPhiVertex = static_cast<int>(twoPi*m_inverseBinSizePhiVertex); if (m_maxBinPhiVertex>=nPhiBinsVertexMax) m_maxBinPhiVertex = nPhiBinsVertexMax-1; diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_BeamGas.cxx b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_BeamGas.cxx index 04226e0b598f01e89019929ae1607610490fff91..6d94cda9024171c499f737707a206bda2cbf6639 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_BeamGas.cxx +++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_BeamGas.cxx @@ -588,8 +588,7 @@ void InDet::SiSpacePointsSeedMaker_BeamGas::findNext(EventData& data) const void InDet::SiSpacePointsSeedMaker_BeamGas::buildFrameWork() { - m_ptmin = std::abs(m_ptmin); - if (m_ptmin < 300.) m_ptmin = 300.; + m_ptmin = std::max( std::abs(m_ptmin), float(300.*m_fieldScale)); m_etamax = std::abs(m_etamax); m_dzdrmax = 1.f/std::tan(2.f*std::atan(std::exp(-m_etamax))); m_dzdrmin =-m_dzdrmax; @@ -608,7 +607,7 @@ void InDet::SiSpacePointsSeedMaker_BeamGas::buildFrameWork() const float sFmax = static_cast<float>(NFmax)/pi2; const float sFmin = 100./60.; - m_sF = m_ptmin /60.f; + m_sF = m_ptmin/m_fieldScale /60.f; if (m_sF >sFmax ) m_sF = sFmax; else if (m_sF < sFmin) m_sF = sFmin; m_fNmax = static_cast<int>(pi2*m_sF); diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_Cosmic.cxx b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_Cosmic.cxx index 48a489b9a6f8748d9e1a69228a5e5eb71af74ad8..1d2b9ef31a48736f34fb2b5bbfeaaf1decfe4033 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_Cosmic.cxx +++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_Cosmic.cxx @@ -49,7 +49,7 @@ StatusCode InDet::SiSpacePointsSeedMaker_Cosmic::initialize() // Build framework // buildFrameWork(); - if ( m_ptmin < 300.) m_ptmin = 300.; + if ( m_ptmin/m_fieldScale < 300.) m_ptmin = 300.*m_fieldScale; // Get output print level // diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_HeavyIon.cxx b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_HeavyIon.cxx index dcf839bdd8aa3ae719cce2757258c0bbabd1812f..be023f96a78cde852417a84daeffa1e7a80d7905 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_HeavyIon.cxx +++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_HeavyIon.cxx @@ -583,8 +583,7 @@ bool InDet::SiSpacePointsSeedMaker_HeavyIon::newVertices(EventData& data, const void InDet::SiSpacePointsSeedMaker_HeavyIon::buildFrameWork() { - m_ptmin = std::abs(m_ptmin) ; - if (m_ptmin < 100.) m_ptmin = 100.; + m_ptmin = std::max( std::abs(m_ptmin), float(100.*m_fieldScale)); m_etamax = std::abs(m_etamax) ; m_dzdrmax = 1.f/std::tan(2.f*std::atan(exp(-m_etamax))); m_dzdrmin =-m_dzdrmax ; @@ -603,7 +602,7 @@ void InDet::SiSpacePointsSeedMaker_HeavyIon::buildFrameWork() const float sFmax = static_cast<float>(NFmax)/pi2; const float sFmin = 100./60.; - m_sF = m_ptmin /60.; + m_sF = m_ptmin/m_fieldScale /60.; if (m_sF > sFmax ) m_sF = sFmax; else if (m_sF < sFmin) m_sF = sFmin; m_fNmax = static_cast<int>(pi2*m_sF); @@ -613,7 +612,7 @@ void InDet::SiSpacePointsSeedMaker_HeavyIon::buildFrameWork() // const int NFtmax = SizeRFV; const float sFvmax = static_cast<float>(NFtmax)/pi2; - m_sFv = m_ptmin/120.f; + m_sFv = m_ptmin/m_fieldScale /120.f; if (m_sFv > sFvmax) m_sFv = sFvmax; m_fvNmax = static_cast<int>(pi2*m_sFv); if (m_fvNmax>=NFtmax) m_fvNmax = NFtmax-1; diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_LowMomentum.cxx b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_LowMomentum.cxx index 4a5b540b594fc7e597d016057a839daf5db2bb3a..b5e09ba9beed77f2c29f8094530efde8dc6fa68d 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_LowMomentum.cxx +++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/src/SiSpacePointsSeedMaker_LowMomentum.cxx @@ -567,8 +567,7 @@ bool InDet::SiSpacePointsSeedMaker_LowMomentum::newVertices(EventData& data, con void InDet::SiSpacePointsSeedMaker_LowMomentum::buildFrameWork() { - m_ptmin = std::abs(m_ptmin); - if (m_ptmin < 50.) m_ptmin = 50.; + m_ptmin = std::max( std::abs(m_ptmin), float(50.*m_fieldScale)); m_iptmax = 1.f/std::abs(m_ptmax); m_iptmin = 1.f/std::abs(m_ptmin); m_etamax = std::abs(m_etamax); @@ -586,7 +585,7 @@ void InDet::SiSpacePointsSeedMaker_LowMomentum::buildFrameWork() const int NFmax = SizeRF; const float sFmax = static_cast<float>(NFmax )/pi2; const float sFmin = 100./60.; - m_sF = m_ptmin /60.f; + m_sF = m_ptmin/m_fieldScale /60.f; if (m_sF > sFmax ) m_sF = sFmax; else if (m_sF < sFmin) m_sF = sFmin; m_fNmax = static_cast<int>(pi2*m_sF); diff --git a/MagneticField/MagFieldConfig/python/BFieldConfigFlags.py b/MagneticField/MagFieldConfig/python/BFieldConfigFlags.py index a00c47bb5f613c3e54ad9be70373f5093ae9a459..b3da490a38769b9ccca3ab47fa90324b242a8cc0 100644 --- a/MagneticField/MagFieldConfig/python/BFieldConfigFlags.py +++ b/MagneticField/MagFieldConfig/python/BFieldConfigFlags.py @@ -36,4 +36,6 @@ def createBFieldConfigFlags(): bcf.addFlag("BField.barrelToroidOn", lambda prevFlags : _fieldAutoCfg(prevFlags)[1]) # True when endcap toroid is on bcf.addFlag("BField.endcapToroidOn", lambda prevFlags : _fieldAutoCfg(prevFlags)[1]) + # Solenoid field scale + bcf.addFlag("BField.configuredSolenoidFieldScale", 1.) return bcf diff --git a/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py b/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py index fbb5fa6fde730e17147a5359420b3a77207ce70d..136e0b0f7b9cb54e03941bdaa394aea14e8d4203 100644 --- a/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py +++ b/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py @@ -59,6 +59,12 @@ def AtlasFieldCacheCondAlgCfg(flags, **kwargs): # consider field off if current is below these values: afcArgs.update( SoleMinCurrent = 160 ) # Standby current is 150A afcArgs.update( ToroMinCurrent = 210 ) # Standby current is 200A + elif flags.Input.isMC: + if flags.BField.configuredSolenoidFieldScale>160/7730 and flags.BField.configuredSolenoidFieldScale<1: + afcArgs.update( UseDCS = False ) + afcArgs.update( UseSoleCurrent = flags.BField.configuredSolenoidFieldScale * 7730 ) + else: + afcArgs.update( UseDCS = True ) else: afcArgs.update( UseDCS = True ) # For test, UseDCS is set to False diff --git a/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasFieldServices.py b/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasFieldServices.py index 4907c274779d27edc3f33b62f110e06a2dad3ce3..cbadccdf716ba740a4c589018d0072cfa0b619ca 100644 --- a/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasFieldServices.py +++ b/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasFieldServices.py @@ -5,6 +5,8 @@ from AthenaConfiguration.ComponentFactory import CompFactory def StandardFieldSvcCfg(flags, name="StandardField", **kwargs): result = ComponentAccumulator() + if flags.BField.configuredSolenoidFieldScale>160/7730 and flags.BField.configuredSolenoidFieldScale<1: # custom field configuration + kwargs.setdefault("UseSoleCurrent", flags.BField.configuredSolenoidFieldScale * 7730) result.addService(CompFactory.StandardFieldSvc(name, **kwargs), primary=True) return result diff --git a/Tools/Campaigns/python/MC23.py b/Tools/Campaigns/python/MC23.py index 6dcda7f3cab1831a1ebaf530795493c9d2a645e3..5f95fc1e22a9b35b084c1eb79841f3c15fefd65e 100644 --- a/Tools/Campaigns/python/MC23.py +++ b/Tools/Campaigns/python/MC23.py @@ -251,7 +251,18 @@ def MC23NoPileUpLowMuRun(flags): MC23NoPileUp(flags) flags.Input.ConditionsRunNumber = 420000 + +def MC23NoPileUpLowMuLowB(flags): + """MC23d flags for MC to match special run 460348""" + MC23NoPileUp(flags) + flags.Input.MCCampaign = Campaign.MC23d + flags.Input.ConditionsRunNumber = 465000 + + # B-field configuration + flags.BField.configuredSolenoidFieldScale = 0.4 + + def BeamspotSplitMC23a(): """MC23a beamspot splitting configuration""" substeps = 4 @@ -326,6 +337,19 @@ def MC23Simulation2023HeavyIonRun(flags): flags.Input.LumiBlockNumbers = [1] # dummy value +def MC23dSimulationLowMuLowB(flags): + """MC23 flags for simulation of special run 460348""" + MC23SimulationNoIoV(flags) + flags.Input.MCCampaign = Campaign.MC23d + + flags.Input.RunNumber = [465000] + flags.Input.OverrideRunNumber = True + flags.Input.LumiBlockNumber = [1] # dummy value + + # B-field configuration + flags.BField.configuredSolenoidFieldScale = 0.4 + + def MC23SimulationSingleIoV(flags): """MC23 flags for simulation""" MC23SimulationNoIoV(flags) diff --git a/Tools/Campaigns/python/__init__.py b/Tools/Campaigns/python/__init__.py index 345f8470d7352e19a4a4f4b81138164fa197f206..6fb66184b3ef37e963fdb9ec7903068f03810157 100644 --- a/Tools/Campaigns/python/__init__.py +++ b/Tools/Campaigns/python/__init__.py @@ -15,8 +15,8 @@ from .MC23 import (MC23a, MC23aSingleBeamspot, BeamspotSplitMC23a, MC23cSimulationMultipleIoV, MC23cSimulationMultipleIoVCalibrationHits, MC23d, MC23dSingleBeamspot, BeamspotSplitMC23d, MC23e, MC23eSingleBeamspot, BeamspotSplitMC23e, - MC23eSimulationMultipleIoV, MC23eSimulationMultipleIoVCalibrationHits, - MC23LowMu, MC23NoPileUp, MC23NoPileUpLowMuRun, + MC23eSimulationMultipleIoV, MC23eSimulationMultipleIoVCalibrationHits, MC23dSimulationLowMuLowB, + MC23LowMu, MC23NoPileUp, MC23NoPileUpLowMuRun, MC23NoPileUpLowMuLowB, MC23HeavyIons2023, MC23HeavyIons2023NoPileUp, MC23Simulation2023HeavyIonRun) from .PhaseII import (PhaseIIPileUp1, PhaseIIPileUp60, PhaseIIPileUp140, PhaseIIPileUp200, PhaseIIPileUpMC21a, PhaseIINoPileUp, @@ -46,8 +46,8 @@ __all__ = [ 'MC23cSimulationMultipleIoV', 'MC23cSimulationMultipleIoVCalibrationHits', 'MC23d', 'MC23dSingleBeamspot', 'BeamspotSplitMC23d', 'MC23e', 'MC23eSingleBeamspot', 'BeamspotSplitMC23e', - 'MC23eSimulationMultipleIoV', 'MC23eSimulationMultipleIoVCalibrationHits', - 'MC23LowMu', 'MC23NoPileUp', 'MC23NoPileUpLowMuRun', + 'MC23eSimulationMultipleIoV', 'MC23eSimulationMultipleIoVCalibrationHits', 'MC23dSimulationLowMuLowB', + 'MC23LowMu', 'MC23NoPileUp', 'MC23NoPileUpLowMuRun', 'MC23NoPileUpLowMuLowB', 'MC23HeavyIons2023', 'MC23HeavyIons2023NoPileUp' , 'MC23Simulation2023HeavyIonRun', 'PhaseIIPileUp1', 'PhaseIIPileUp60', 'PhaseIIPileUp140', 'PhaseIIPileUp200', 'PhaseIIPileUpMC21a', 'PhaseIINoPileUp', diff --git a/Tracking/TrkConfig/python/TrackingPassFlags.py b/Tracking/TrkConfig/python/TrackingPassFlags.py index 41ac761b6d58a8e0ec986d5415cae8768d12595b..a77280a057de66f643fdddc6e2edff73af06112b 100644 --- a/Tracking/TrkConfig/python/TrackingPassFlags.py +++ b/Tracking/TrkConfig/python/TrackingPassFlags.py @@ -29,8 +29,9 @@ def createTrackingPassFlags(): icf.addFlag("doAmbiguityProcessorTrackFit", True) # --- first set kinematic defaults - icf.addFlag("minPT", lambda pcf: (0.4 * Units.GeV if pcf.Tracking.doLowMu else - 0.5 * Units.GeV)) + icf.addFlag("minPT", lambda pcf: (pcf.BField.configuredSolenoidFieldScale * + (0.4 * Units.GeV if pcf.Tracking.doLowMu else + 0.5 * Units.GeV))) icf.addFlag("maxPT", 1000.0 * Units.TeV) # off! icf.addFlag("minEta", -1) # off! icf.addFlag("maxEta", 2.7) @@ -90,7 +91,8 @@ def createTrackingPassFlags(): # --- min pt cut for brem icf.addFlag("doBremRecoverySi", lambda pcf: pcf.Tracking.doBremRecovery) - icf.addFlag("minPTBrem", 1. * Units.GeV) # off + icf.addFlag("minPTBrem", lambda pcf: ( + 1. * Units.GeV * pcf.BField.configuredSolenoidFieldScale)) # --- Z Boundary Seeding icf.addFlag("doZBoundary", lambda pcf: @@ -138,12 +140,16 @@ def createITkTrackingPassFlags(): icf.addFlag("etaBins" , [-1.0, 2.0, 2.6, 9999.0]) icf.addFlag("maxEta" , 4.0) icf.addFlag("minPT" , lambda pcf : - [0.2 * Units.GeV] if pcf.Tracking.doLowMu - else [0.9 * Units.GeV, 0.4 * Units.GeV, 0.4 * Units.GeV]) - - icf.addFlag("minPTSeed" , lambda pcf : - 0.2 * Units.GeV if pcf.Tracking.doLowMu - else 0.9 * Units.GeV) + [0.2 * Units.GeV * pcf.BField.configuredSolenoidFieldScale] + if pcf.Tracking.doLowMu else + [0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale, + 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale, + 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale]) + + icf.addFlag("minPTSeed" , lambda pcf : ( + pcf.BField.configuredSolenoidFieldScale * + (0.2 * Units.GeV if pcf.Tracking.doLowMu + else 0.9 * Units.GeV))) icf.addFlag("maxPrimaryImpactSeed" , 2.0 * Units.mm) icf.addFlag("maxZImpactSeed" , 200.0 * Units.mm) icf.addFlag("useSeedFilter" , True) @@ -177,7 +183,8 @@ def createITkTrackingPassFlags(): # --- min pt cut for brem icf.addFlag("doBremRecoverySi", lambda pcf: pcf.Tracking.doBremRecovery) - icf.addFlag("minPTBrem" , [1. * Units.GeV]) + icf.addFlag("minPTBrem", lambda pcf: ( + [1. * Units.GeV * pcf.BField.configuredSolenoidFieldScale])) # -- use of calo information icf.addFlag("doCaloSeededBremSi", lambda pcf: pcf.Tracking.doCaloSeededBrem) @@ -227,8 +234,10 @@ def createITkHeavyIonTrackingPassFlags(): icf = createITkTrackingPassFlags() icf.extension = "HeavyIon" icf.maxPrimaryImpact = [2.0 * Units.mm] - icf.minPT = [0.4 *Units.GeV] - icf.minPTSeed = 0.4 * Units.GeV + icf.minPT = lambda pcf : ( + [0.4 *Units.GeV * pcf.BField.configuredSolenoidFieldScale]) + icf.minPTSeed = lambda pcf : ( + 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.minClusters = [6] icf.minSiNotShared = [6] icf.Xi2max = [6.] @@ -244,12 +253,16 @@ def createITkFastTrackingPassFlags(): icf = createITkTrackingPassFlags() - icf.minPT = [1.0 * Units.GeV, 0.4 * Units.GeV, 0.4 * Units.GeV] + icf.minPT = lambda pcf : ( + [1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale, + 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale, + 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale]) icf.maxZImpact = [150.0 * Units.mm] icf.minPixel = [3] icf.nHolesMax = [1] icf.nHolesGapMax = [1] - icf.minPTSeed = 1.0 * Units.GeV + icf.minPTSeed = lambda pcf: ( + 1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.maxZImpactSeed = 150.0 * Units.mm icf.useITkStripSeeding = False @@ -263,8 +276,12 @@ def createITkFTFPassFlags(): icf.addFlag("doHitDV" , False) icf.addFlag("doDisappearingTrk" , False) icf.useSeedFilter = False - icf.minPT = [0.9 * Units.GeV, 0.4 * Units.GeV, 0.4 * Units.GeV] - icf.minPTSeed = 0.9 * Units.GeV + icf.minPT = lambda pcf : ( + [0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale, + 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale, + 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale]) + icf.minPTSeed = lambda pcf : ( + 0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) return icf @@ -277,7 +294,8 @@ def createITkLargeD0TrackingPassFlags(): icf.usePrdAssociationTool = True icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container - icf.minPT = [1000 * Units.MeV] + icf.minPT = lambda pcf : ( + [1000 * Units.MeV * pcf.BField.configuredSolenoidFieldScale]) icf.maxEta = 4.0 icf.etaBins = [-1.0, 4.0] icf.maxPrimaryImpact = [300 * Units.mm] @@ -293,7 +311,8 @@ def createITkLargeD0TrackingPassFlags(): icf.maxZImpactSeed = 500.0 * Units.mm icf.maxPrimaryImpactSeed = 300.0 * Units.mm - icf.minPTSeed = 1000 * Units.MeV + icf.minPTSeed = lambda pcf : ( + 1000 * Units.MeV * pcf.BField.configuredSolenoidFieldScale) icf.radMax = 1100. * Units.mm icf.nHolesMax = icf.maxHoles @@ -321,8 +340,10 @@ def createITkLargeD0FastTrackingPassFlags(): icf.maxEta = 2.4 icf.etaBins = [-1.0, 2.4] - icf.minPT = [5.0 * Units.GeV] - icf.minPTSeed = 5.0 * Units.GeV + icf.minPT = lambda pcf : ( + [5.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale]) + icf.minPTSeed = lambda pcf : ( + 5.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.nWeightedClustersMin = [8] icf.maxPrimaryImpact = [150 * Units.mm] icf.maxPrimaryImpactSeed = 150. * Units.mm @@ -338,8 +359,10 @@ def createITkLowPtTrackingPassFlags(): icf = createITkTrackingPassFlags() icf.extension = "LowPt" - icf.minPT = [0.4 * Units.GeV] - icf.minPTSeed = 0.4 * Units.GeV + icf.minPT = lambda pcf : ( + [0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale]) + icf.minPTSeed = lambda pcf : ( + 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.doBremRecoverySi = False return icf @@ -348,7 +371,8 @@ def createITkLowPtTrackingPassFlags(): def createHighPileupTrackingPassFlags(): icf = createTrackingPassFlags() icf.extension = "HighPileup" - icf.minPT = 0.900 * Units.GeV + icf.minPT = lambda pcf : ( + 0.900 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.minClusters = 9 icf.maxPixelHoles = 0 icf.doBremRecoverySi = False @@ -359,7 +383,8 @@ def createHighPileupTrackingPassFlags(): def createMinBiasTrackingPassFlags(): icf = createTrackingPassFlags() icf.extension = "MinBias" - icf.minPT = 0.1 * Units.GeV + icf.minPT = lambda pcf: ( + 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.maxPrimaryImpact = 10. * Units.mm icf.maxZImpact = 250. * Units.mm icf.minClusters = 5 @@ -376,7 +401,8 @@ def createUPCTrackingPassFlags(): icf = createMinBiasTrackingPassFlags() icf.extension = "UPC" # --- min pt cut for brem - icf.minPTBrem = 0.75 * Units.GeV + icf.minPTBrem = lambda pcf: ( + 0.75 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) # MinBias turns off Brem Recovery, turn it on here icf.doBremRecoverySi = lambda pcf: pcf.Tracking.doBremRecovery return icf @@ -394,8 +420,10 @@ def createLowPtRoITrackingPassFlags(): icf.extension = "LowPtRoI" icf.usePrdAssociationTool = True icf.storeSeparateContainer = True - icf.maxPT = 0.850 * Units.GeV - icf.minPT = 0.050 * Units.GeV + icf.maxPT = lambda pcf: ( + 0.850 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) + icf.minPT = lambda pcf: ( + 0.050 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.minClusters = 5 icf.minSiNotShared = 4 icf.maxShared = 1 # cut is now on number of shared modules @@ -424,8 +452,10 @@ def createR3LargeD0TrackingPassFlags(): icf.usePrdAssociationTool = True icf.usePixelSeeding = False icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container - icf.maxPT = 1.0 * Units.TeV - icf.minPT = 1.0 * Units.GeV + icf.maxPT = lambda pcf : ( + 1.0 * Units.TeV * pcf.BField.configuredSolenoidFieldScale) + icf.minPT = lambda pcf : ( + 1.0 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.maxEta = 3 icf.maxPrimaryImpact = 300.0 * Units.mm icf.maxEMImpact = 300 * Units.mm @@ -463,8 +493,10 @@ def createLowPtLargeD0TrackingPassFlags(): icf.extension = "LowPtLargeD0" icf.usePrdAssociationTool = True icf.storeSeparateContainer = lambda pcf : pcf.Tracking.storeSeparateLargeD0Container - icf.maxPT = 1.0 * Units.TeV - icf.minPT = 100 * Units.MeV + icf.maxPT = lambda pcf: ( + 1.0 * Units.TeV * pcf.BField.configuredSolenoidFieldScale) + icf.minPT = lambda pcf: ( + 100 * Units.MeV * pcf.BField.configuredSolenoidFieldScale) icf.maxEta = 5 icf.maxPrimaryImpact = 300.0 * Units.mm icf.maxZImpact = 1500.0 * Units.mm @@ -493,9 +525,12 @@ def createLowPtTrackingPassFlags(): icf.extension = "LowPt" icf.usePrdAssociationTool = True icf.isLowPt = True - icf.maxPT = lambda pcf: (1e6 if pcf.Tracking.doMinBias else - pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV - icf.minPT = 0.05 * Units.GeV + icf.maxPT = lambda pcf: ( + pcf.BField.configuredSolenoidFieldScale * + (1e6 if pcf.Tracking.doMinBias else + pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV) + icf.minPT = lambda pcf: ( + 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.minClusters = 5 icf.minSiNotShared = 4 icf.maxShared = 1 # cut is now on number of shared modules @@ -520,7 +555,8 @@ def createITkConversionTrackingPassFlags(): icf.usePrdAssociationTool = True icf.etaBins = [-1.0,4.0] - icf.minPT = [0.9 * Units.GeV] + icf.minPT = lambda pcf: ( + [0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale]) icf.maxPrimaryImpact = [10.0 * Units.mm] icf.maxZImpact = [150.0 * Units.mm] icf.minClusters = [6] @@ -552,9 +588,12 @@ def createVeryLowPtTrackingPassFlags(): icf.usePrdAssociationTool = True icf.isLowPt = True icf.useTRTExtension = False - icf.maxPT = lambda pcf : (1e6 if pcf.Tracking.doMinBias else - pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV # some overlap - icf.minPT = 0.050 * Units.GeV + icf.maxPT = lambda pcf : ( + pcf.BField.configuredSolenoidFieldScale * + (1e6 if pcf.Tracking.doMinBias else + pcf.Tracking.MainPass.minPT + 0.3) * Units.GeV) + icf.minPT = lambda pcf : ( + 0.050 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.minClusters = 3 icf.minSiNotShared = 3 icf.maxShared = 1 # cut is now on number of shared modules @@ -580,7 +619,8 @@ def createForwardTracksTrackingPassFlags(): icf.storeSeparateContainer = True icf.minEta = 2.4 # restrict to minimal eta icf.maxEta = 2.7 - icf.minPT = 2 * Units.GeV + icf.minPT = lambda pcf: ( + 2 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.minClusters = 3 icf.minSiNotShared = 3 icf.maxShared = 1 @@ -606,7 +646,8 @@ def createBeamGasTrackingPassFlags(): icf = createTrackingPassFlags() icf.extension = "BeamGas" icf.usePrdAssociationTool = True - icf.minPT = 0.500 * Units.GeV + icf.minPT = lambda pcf: ( + 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.maxPrimaryImpact = 300. * Units.mm icf.maxZImpact = 2000. * Units.mm icf.minClusters = 6 @@ -624,7 +665,8 @@ def createBeamGasTrackingPassFlags(): def createVtxLumiTrackingPassFlags(): icf = createTrackingPassFlags() icf.extension = "VtxLumi" - icf.minPT = 0.900 * Units.GeV + icf.minPT = lambda pcf: ( + 0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.minClusters = 7 icf.maxPixelHoles = 1 icf.radMax = 600. * Units.mm @@ -639,7 +681,8 @@ def createVtxLumiTrackingPassFlags(): def createVtxBeamSpotTrackingPassFlags(): icf = createTrackingPassFlags() icf.extension = "VtxBeamSpot" - icf.minPT = 0.900 * Units.GeV + icf.minPT = lambda pcf: ( + 0.9 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.minClusters = 9 icf.maxPixelHoles = 0 icf.radMax = 320. * Units.mm @@ -654,7 +697,8 @@ def createVtxBeamSpotTrackingPassFlags(): def createCosmicsTrackingPassFlags(): icf = createTrackingPassFlags() icf.extension = "Cosmics" - icf.minPT = 0.5 * Units.GeV + icf.minPT = lambda pcf: ( + 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.maxPrimaryImpact = 1000. * Units.mm icf.maxZImpact = 10000. * Units.mm icf.minClusters = 4 @@ -693,9 +737,10 @@ def createHeavyIonTrackingPassFlags(): icf.Xi2max = 6. icf.Xi2maxNoAdd = 10. + icf.minPT = lambda pcf: ( + 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) + icf.maxdImpactSSSSeeds = 20. * Units.mm - - icf.minPT = 0.5 * Units.GeV icf.maxdImpactPPSSeeds = 1.7 icf.maxHoles = 2 @@ -722,14 +767,14 @@ def createPixelTrackingPassFlags(): def _minPt( pcf ): if pcf.Beam.Type is BeamType.Cosmics: - return 0.5 * Units.GeV + return 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.UPC: - return 0.05 * Units.GeV + return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale if pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.HIP: - return 0.05 * Units.GeV + return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale if pcf.Tracking.doMinBias: - return 0.05 * Units.GeV - return 0.1 * Units.GeV + return 0.05 * Units.GeV * pcf.BField.configuredSolenoidFieldScale + return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale icf.minPT = _minPt icf.minClusters = 3 @@ -788,7 +833,8 @@ def createDisappearingTrackingPassFlags(): icf.extension = "Disappearing" icf.usePrdAssociationTool = True icf.storeSeparateContainer = True - icf.minPT = 5 * Units.GeV + icf.minPT = lambda pcf: ( + 5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.minClusters = 4 icf.maxHoles = 0 icf.maxPixelHoles = 0 @@ -821,18 +867,15 @@ def createSCTTrackingPassFlags(): icf.usePixelSeeding = False icf.useTRT = False - def _pick( default, cosmics, minbias): - def _internal( pcf ): - if pcf.Beam.Type is BeamType.Cosmics: - return cosmics - if pcf.Tracking.doMinBias: - return minbias - return default - return _internal + def _minpt( pcf ): + if pcf.Beam.Type is BeamType.Cosmics: + return 0.5 * Units.GeV * pcf.BField.configuredSolenoidFieldScale + if pcf.Tracking.doMinBias: + return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale + return 0.1 * Units.GeV * pcf.BField.configuredSolenoidFieldScale + + icf.minPT = _minpt - icf.minPT = _pick( default = 0.1 * Units.GeV, - minbias=0.1 * Units.GeV, - cosmics = 0.5* Units.GeV ) icf.maxPrimaryImpact = lambda pcf: ( 1000. * Units.mm if pcf.Beam.Type is BeamType.Cosmics else 10. * Units.mm if pcf.Tracking.doLowMu else @@ -878,7 +921,8 @@ def createTRTTrackingPassFlags(): icf.extension = "TRT" icf.useTIDE_Ambi = False icf.usePrdAssociationTool = True - icf.minPT = 0.4 * Units.GeV + icf.minPT = lambda pcf: ( + 0.4 * Units.GeV * pcf.BField.configuredSolenoidFieldScale) icf.doBremRecoverySi = False icf.RunPixelPID = False @@ -932,6 +976,10 @@ if __name__ == "__main__": flags.Tracking.doBLS = True assert flags.Tracking.ActiveConfig.maxPrimaryImpact == 10.0 * Units.mm, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.maxPrimaryImpact) + assert flags.Tracking.ActiveConfig.minPT == 0.5 * Units.GeV, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.minPT) + flags.BField.configuredSolenoidFieldScale = 0.1 + assert flags.Tracking.ActiveConfig.minPT == 0.05 * Units.GeV, "wrong cut value {} ".format(flags.Tracking.ActiveConfig.minPT) + l.info("flags.Tracking.ActiveConfig.minPT %f", flags.Tracking.ActiveConfig.minPT * 1.0) l.info("type(flags.Tracking.ActiveConfig.minPT) " + str(type(flags.Tracking.ActiveConfig.minPT))) diff --git a/Tracking/TrkConfig/python/TrkConfigFlags.py b/Tracking/TrkConfig/python/TrkConfigFlags.py index ca038764350e5bbc153e0b7716c78b323fc6e83e..cddae441cfb61018b16f6912210cb096353cb503 100644 --- a/Tracking/TrkConfig/python/TrkConfigFlags.py +++ b/Tracking/TrkConfig/python/TrkConfigFlags.py @@ -194,13 +194,13 @@ def createTrackingConfigFlags(): # --- defaults for backtracking def BackTrackingMinPt(flags): if flags.Tracking.doMinBias: - return 0.4 * Units.GeV + return 0.4 * Units.GeV * flags.BField.configuredSolenoidFieldScale elif (flags.Tracking.doLowMu or flags.Tracking.PrimaryPassConfig is PrimaryPassConfig.HeavyIon or flags.Beam.Type is BeamType.Cosmics): - return 1.0 * Units.GeV + return 1.0 * Units.GeV * flags.BField.configuredSolenoidFieldScale else: - return 3.0 * Units.GeV + return 3.0 * Units.GeV * flags.BField.configuredSolenoidFieldScale icf.addFlag("Tracking.BackTracking.minPt", BackTrackingMinPt) icf.addFlag("Tracking.BackTracking.TRTSegFinderPtBins", 50) icf.addFlag("Tracking.BackTracking.maxTRTSharedFrac", 0.7) @@ -260,17 +260,17 @@ def createTrackingConfigFlags(): PrimaryPassConfig.HeavyIon) or prevFlags.Beam.Type is BeamType.Cosmics or prevFlags.Tracking.doMinBias) - else 6.*Units.GeV) + else 6.*Units.GeV * prevFlags.BField.configuredSolenoidFieldScale) # TRT standalone configuration def TRTStandaloneMinPt(flags): if flags.Tracking.doMinBias: - return 0.4 * Units.GeV + return 0.4 * Units.GeV * flags.BField.configuredSolenoidFieldScale elif flags.Tracking.doLowMu or ( flags.Tracking.PrimaryPassConfig is PrimaryPassConfig.HeavyIon): - return 1.0 * Units.GeV + return 1.0 * Units.GeV * flags.BField.configuredSolenoidFieldScale else: - return 2.0 * Units.GeV + return 2.0 * Units.GeV * flags.BField.configuredSolenoidFieldScale icf.addFlag("Tracking.TRTStandalone.minPt", TRTStandaloneMinPt) icf.addFlag("Tracking.TRTStandalone.minTRTPrecFrac", 0.15) icf.addFlag("Tracking.TRTStandalone.minTRT", 15)