From 7f9856c5830da02809591008ead69bee147242d6 Mon Sep 17 00:00:00 2001 From: Nicola Amapane Date: Thu, 23 Apr 2020 17:40:15 +0200 Subject: [PATCH 01/10] Remove unused cfi flag --- .../Engine/python/volumeBasedMagneticField_160812_cfi.py | 1 - .../Engine/python/volumeBasedMagneticField_71212_cfi.py | 1 - MagneticField/GeomBuilder/test/python/testMagGeometry.py | 1 - MagneticField/GeomBuilder/test/python/testMagGeometryOldDD.py | 1 - 4 files changed, 4 deletions(-) diff --git a/MagneticField/Engine/python/volumeBasedMagneticField_160812_cfi.py b/MagneticField/Engine/python/volumeBasedMagneticField_160812_cfi.py index c1423fc53da14..ecb5270ca889c 100644 --- a/MagneticField/Engine/python/volumeBasedMagneticField_160812_cfi.py +++ b/MagneticField/Engine/python/volumeBasedMagneticField_160812_cfi.py @@ -38,7 +38,6 @@ version = cms.string('grid_160812_3_8t'), geometryVersion = cms.int32(160812), debugBuilder = cms.untracked.bool(False), - cacheLastVolume = cms.untracked.bool(True), scalingVolumes = cms.vint32(), scalingFactors = cms.vdouble(), diff --git a/MagneticField/Engine/python/volumeBasedMagneticField_71212_cfi.py b/MagneticField/Engine/python/volumeBasedMagneticField_71212_cfi.py index d0b36f0afdf73..5505b1ccd8094 100644 --- a/MagneticField/Engine/python/volumeBasedMagneticField_71212_cfi.py +++ b/MagneticField/Engine/python/volumeBasedMagneticField_71212_cfi.py @@ -34,7 +34,6 @@ version = cms.string('grid_1103l_071212_2t'), geometryVersion = cms.int32(71212), debugBuilder = cms.untracked.bool(False), - cacheLastVolume = cms.untracked.bool(True), scalingVolumes = cms.vint32(), scalingFactors = cms.vdouble(), gridFiles = cms.VPSet( diff --git a/MagneticField/GeomBuilder/test/python/testMagGeometry.py b/MagneticField/GeomBuilder/test/python/testMagGeometry.py index a8d1a3f887e8f..0c3d38c1bf5b7 100644 --- a/MagneticField/GeomBuilder/test/python/testMagGeometry.py +++ b/MagneticField/GeomBuilder/test/python/testMagGeometry.py @@ -46,7 +46,6 @@ version = cms.string('fake'), geometryVersion = cms.int32(160812), debugBuilder = cms.untracked.bool(False), # Set to True to activate full debug output - cacheLastVolume = cms.untracked.bool(True), scalingVolumes = cms.vint32(), scalingFactors = cms.vdouble(), diff --git a/MagneticField/GeomBuilder/test/python/testMagGeometryOldDD.py b/MagneticField/GeomBuilder/test/python/testMagGeometryOldDD.py index fdf76c714c56e..452a557d4ba20 100644 --- a/MagneticField/GeomBuilder/test/python/testMagGeometryOldDD.py +++ b/MagneticField/GeomBuilder/test/python/testMagGeometryOldDD.py @@ -64,7 +64,6 @@ version = cms.string('fake'), geometryVersion = cms.int32(160812), debugBuilder = cms.untracked.bool(False), # Set to True to activate full debug - cacheLastVolume = cms.untracked.bool(True), scalingVolumes = cms.vint32(), scalingFactors = cms.vdouble(), From 9db8f5f771cbb563add653d30a40d1d1ad771f8e Mon Sep 17 00:00:00 2001 From: Nicola Amapane Date: Fri, 24 Apr 2020 10:50:30 +0200 Subject: [PATCH 02/10] Minor optmization proposed by @amadio: compute barrel dimensions at construction time. Improves 0.4% CPU for non-cached calls. Also migrate debug couts to MessageLogger --- .../Engine/test/testMagneticField.cc | 9 ++- .../GeomBuilder/src/BaseVolumeHandle.cc | 2 - .../GeomBuilder/src/DD4hep_MagGeoBuilder.cc | 1 - .../GeomBuilder/src/DD4hep_volumeHandle.cc | 2 - .../GeomBuilder/src/MagGeoBuilderFromDDD.cc | 1 - MagneticField/GeomBuilder/src/bLayer.cc | 1 - MagneticField/GeomBuilder/src/bRod.cc | 1 - MagneticField/GeomBuilder/src/bSector.cc | 1 - MagneticField/GeomBuilder/src/bSlab.cc | 1 - MagneticField/GeomBuilder/src/bSlab.h | 1 - MagneticField/GeomBuilder/src/eSector.cc | 1 - MagneticField/GeomBuilder/src/volumeHandle.cc | 2 - .../test/stubs/MagGeometryAnalyzer.cc | 1 - MagneticField/Layers/interface/MagVerbosity.h | 21 ------ MagneticField/Layers/src/MagBLayer.cc | 31 +++----- MagneticField/Layers/src/MagBRod.cc | 17 ++--- MagneticField/Layers/src/MagBSector.cc | 6 +- MagneticField/Layers/src/MagBSlab.cc | 6 +- MagneticField/Layers/src/MagELayer.cc | 4 +- MagneticField/Layers/src/MagESector.cc | 10 +-- .../VolumeBasedEngine/interface/MagGeometry.h | 10 ++- .../VolumeBasedEngine/src/MagGeometry.cc | 74 +++++++++++-------- 22 files changed, 78 insertions(+), 125 deletions(-) delete mode 100644 MagneticField/Layers/interface/MagVerbosity.h diff --git a/MagneticField/Engine/test/testMagneticField.cc b/MagneticField/Engine/test/testMagneticField.cc index cedf4a21aa2a4..d49bcaab2f690 100644 --- a/MagneticField/Engine/test/testMagneticField.cc +++ b/MagneticField/Engine/test/testMagneticField.cc @@ -53,8 +53,6 @@ using namespace edm; using namespace Geom; using namespace std; -// #include "MagneticField/Layers/interface/MagVerbosity.h" - class testMagneticField : public edm::EDAnalyzer { public: testMagneticField(const edm::ParameterSet& pset) { @@ -91,6 +89,7 @@ class testMagneticField : public edm::EDAnalyzer { if (outputFile != "") { writeValidationTable(numberOfPoints, outputFile); + return; } if (inputFileType == "TOSCA") { @@ -147,7 +146,8 @@ class testMagneticField : public edm::EDAnalyzer { void testMagneticField::writeValidationTable(int npoints, string filename) { GlobalPointProvider p(InnerRadius, OuterRadius, -Geom::pi(), Geom::pi(), -HalfLength, HalfLength); - if (filename.substr(filename.rfind(".")) == ".txt") { + std::string::size_type ps = filename.rfind("."); + if (ps != std::string::npos && filename.substr(ps) == ".txt") { ofstream file(filename.c_str()); for (int i = 0; i < npoints; ++i) { @@ -188,7 +188,8 @@ void testMagneticField::validate(string filename, string type) { edm::FileInPath mydata(filename); fullPath = mydata.fullPath(); - if (filename.substr(filename.rfind(".")) == ".txt") { + std::string::size_type ps = filename.rfind("."); + if (ps != std::string::npos && filename.substr(filename.rfind(".")) == ".txt") { binary = false; file.open(fullPath.c_str()); } else { diff --git a/MagneticField/GeomBuilder/src/BaseVolumeHandle.cc b/MagneticField/GeomBuilder/src/BaseVolumeHandle.cc index d65530ef64d21..ce5789991b952 100644 --- a/MagneticField/GeomBuilder/src/BaseVolumeHandle.cc +++ b/MagneticField/GeomBuilder/src/BaseVolumeHandle.cc @@ -11,8 +11,6 @@ #include "DataFormats/GeometrySurface/interface/Cone.h" #include "DataFormats/GeometryVector/interface/CoordinateSets.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" - #include #include #include diff --git a/MagneticField/GeomBuilder/src/DD4hep_MagGeoBuilder.cc b/MagneticField/GeomBuilder/src/DD4hep_MagGeoBuilder.cc index 0cc158491987f..9d16d05b227b9 100644 --- a/MagneticField/GeomBuilder/src/DD4hep_MagGeoBuilder.cc +++ b/MagneticField/GeomBuilder/src/DD4hep_MagGeoBuilder.cc @@ -23,7 +23,6 @@ #include "MagneticField/VolumeGeometry/interface/MagVolume6Faces.h" #include "MagneticField/VolumeGeometry/interface/MagExceptions.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" #include "DataFormats/Math/interface/deltaPhi.h" diff --git a/MagneticField/GeomBuilder/src/DD4hep_volumeHandle.cc b/MagneticField/GeomBuilder/src/DD4hep_volumeHandle.cc index 04a19c2ed95ae..386670ef88d4d 100644 --- a/MagneticField/GeomBuilder/src/DD4hep_volumeHandle.cc +++ b/MagneticField/GeomBuilder/src/DD4hep_volumeHandle.cc @@ -16,8 +16,6 @@ #include "DetectorDescription/DDCMS/interface/DDShapes.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" - #include #include diff --git a/MagneticField/GeomBuilder/src/MagGeoBuilderFromDDD.cc b/MagneticField/GeomBuilder/src/MagGeoBuilderFromDDD.cc index 7b62ce3034720..e82842b27fd86 100644 --- a/MagneticField/GeomBuilder/src/MagGeoBuilderFromDDD.cc +++ b/MagneticField/GeomBuilder/src/MagGeoBuilderFromDDD.cc @@ -31,7 +31,6 @@ #include "MagneticField/VolumeGeometry/interface/MagVolume6Faces.h" #include "MagneticField/VolumeGeometry/interface/MagExceptions.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" #include "DataFormats/GeometryVector/interface/Pi.h" #include "DataFormats/Math/interface/GeantUnits.h" diff --git a/MagneticField/GeomBuilder/src/bLayer.cc b/MagneticField/GeomBuilder/src/bLayer.cc index 3b1243ee3e49f..7df2216eedcff 100644 --- a/MagneticField/GeomBuilder/src/bLayer.cc +++ b/MagneticField/GeomBuilder/src/bLayer.cc @@ -8,7 +8,6 @@ #include "printUniqueNames.h" #include "MagneticField/VolumeGeometry/interface/MagVolume6Faces.h" #include "MagneticField/Layers/interface/MagBLayer.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" #include "Utilities/General/interface/precomputed_value_sort.h" diff --git a/MagneticField/GeomBuilder/src/bRod.cc b/MagneticField/GeomBuilder/src/bRod.cc index 45e6448ffef39..b7904740f7bcc 100644 --- a/MagneticField/GeomBuilder/src/bRod.cc +++ b/MagneticField/GeomBuilder/src/bRod.cc @@ -8,7 +8,6 @@ #include "printUniqueNames.h" #include "Utilities/BinningTools/interface/ClusterizingHistogram.h" #include "MagneticField/Layers/interface/MagBRod.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" #include "Utilities/General/interface/precomputed_value_sort.h" #include diff --git a/MagneticField/GeomBuilder/src/bSector.cc b/MagneticField/GeomBuilder/src/bSector.cc index 44b2dbb03a56c..575273cd0310d 100644 --- a/MagneticField/GeomBuilder/src/bSector.cc +++ b/MagneticField/GeomBuilder/src/bSector.cc @@ -9,7 +9,6 @@ #include "DataFormats/GeometrySurface/interface/Surface.h" #include "Utilities/BinningTools/interface/ClusterizingHistogram.h" #include "MagneticField/Layers/interface/MagBSector.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" #include "Utilities/General/interface/precomputed_value_sort.h" #include diff --git a/MagneticField/GeomBuilder/src/bSlab.cc b/MagneticField/GeomBuilder/src/bSlab.cc index ff6a240904773..21a9e641c0948 100644 --- a/MagneticField/GeomBuilder/src/bSlab.cc +++ b/MagneticField/GeomBuilder/src/bSlab.cc @@ -7,7 +7,6 @@ #include "bSlab.h" #include "MagneticField/VolumeGeometry/interface/MagVolume6Faces.h" #include "MagneticField/Layers/interface/MagBSlab.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" #include "Utilities/General/interface/precomputed_value_sort.h" diff --git a/MagneticField/GeomBuilder/src/bSlab.h b/MagneticField/GeomBuilder/src/bSlab.h index 0a32cb268dea7..a8f8645f306f9 100644 --- a/MagneticField/GeomBuilder/src/bSlab.h +++ b/MagneticField/GeomBuilder/src/bSlab.h @@ -15,7 +15,6 @@ #include "MagneticField/VolumeGeometry/interface/MagVolume6Faces.h" #include "MagneticField/Layers/interface/MagBSlab.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" class MagBSlab; diff --git a/MagneticField/GeomBuilder/src/eSector.cc b/MagneticField/GeomBuilder/src/eSector.cc index 83e8b7b2477b0..1ea711d3d0214 100644 --- a/MagneticField/GeomBuilder/src/eSector.cc +++ b/MagneticField/GeomBuilder/src/eSector.cc @@ -8,7 +8,6 @@ #include "printUniqueNames.h" #include "Utilities/BinningTools/interface/ClusterizingHistogram.h" #include "MagneticField/Layers/interface/MagESector.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" #include "Utilities/General/interface/precomputed_value_sort.h" #include diff --git a/MagneticField/GeomBuilder/src/volumeHandle.cc b/MagneticField/GeomBuilder/src/volumeHandle.cc index 42f5f0b27fd80..b10a4ace7783a 100644 --- a/MagneticField/GeomBuilder/src/volumeHandle.cc +++ b/MagneticField/GeomBuilder/src/volumeHandle.cc @@ -18,8 +18,6 @@ #include "CLHEP/Units/GlobalSystemOfUnits.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" - #include #include #include diff --git a/MagneticField/GeomBuilder/test/stubs/MagGeometryAnalyzer.cc b/MagneticField/GeomBuilder/test/stubs/MagGeometryAnalyzer.cc index 81a94876a1fd6..9627628212dcd 100644 --- a/MagneticField/GeomBuilder/test/stubs/MagGeometryAnalyzer.cc +++ b/MagneticField/GeomBuilder/test/stubs/MagGeometryAnalyzer.cc @@ -12,7 +12,6 @@ #include "MagneticField/GeomBuilder/test/stubs/MagGeometryExerciser.h" #include "MagneticField/Engine/interface/MagneticField.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" #include "MagneticField/GeomBuilder/src/MagGeoBuilderFromDDD.h" #include "MagneticField/VolumeBasedEngine/interface/VolumeBasedMagneticField.h" diff --git a/MagneticField/Layers/interface/MagVerbosity.h b/MagneticField/Layers/interface/MagVerbosity.h deleted file mode 100644 index 93b55cdfc77f9..0000000000000 --- a/MagneticField/Layers/interface/MagVerbosity.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef MagDebug_H -#define MagDebug_H - -/* - * Hack while we wait for logging in the framework - * - * \author N. Amapane - INFN Torino - */ - -//#DEFINE MF_DEBUG - -// Old debug control switch, being phased out -struct verbose { -#ifdef MF_DEBUG - static constexpr bool debugOut = true; -#else - static constexpr bool debugOut = false; -#endif -}; - -#endif diff --git a/MagneticField/Layers/src/MagBLayer.cc b/MagneticField/Layers/src/MagBLayer.cc index bb02e7190d6c6..3ff2f42498af0 100644 --- a/MagneticField/Layers/src/MagBLayer.cc +++ b/MagneticField/Layers/src/MagBLayer.cc @@ -12,7 +12,7 @@ #include "Utilities/BinningTools/interface/PeriodicBinFinderInPhi.h" #include "DataFormats/GeometryVector/interface/Phi.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include @@ -20,8 +20,7 @@ using namespace std; MagBLayer::MagBLayer(vector& sectors, double rMin) : theSectors(sectors), theSingleVolume(nullptr), theRMin(rMin), theBinFinder(nullptr) { - // TOFIX - // if (verbose.debugOut) cout << "Building MagBLayer with " << theSectors.size() + // LogTrace("MagGeometry") << "Building MagBLayer with " << theSectors.size() // << " sectors, minR " << theRMin << endl; //FIXME: PeriodicBinFinderInPhi gets *center* of first bin theBinFinder = new PeriodicBinFinderInPhi(theSectors.front()->minPhi() + Geom::pi() / 12., 12); @@ -29,8 +28,7 @@ MagBLayer::MagBLayer(vector& sectors, double rMin) /// Constructor for a trivial layer consisting of one single volume. MagBLayer::MagBLayer(MagVolume* aVolume, double rMin) : theSingleVolume(nullptr), theRMin(rMin), theBinFinder(nullptr) { - // TOFIX - // if (verbose.debugOut) cout << "Building MagBLayer with " << 0 + // LogTrace("MagGeometry") << "Building MagBLayer with " << 0 // << " sectors, minR " << theRMin << endl; } @@ -49,12 +47,10 @@ const MagVolume* MagBLayer::findVolume(const GlobalPoint& gp, double tolerance) //In case the layer is composed of a single volume... if (theSingleVolume) { - // TOFIX - // if (verbose.debugOut) cout << " Trying the unique volume " << endl; + // LogTrace("MagGeometry") << " Trying the unique volume " << endl; if (theSingleVolume->inside(gp, tolerance)) { result = theSingleVolume; - // TOFIX - // if (verbose.debugOut) cout << "***In unique bsector" + // LogTrace("MagGeometry") << "***In unique bsector" // << (result==0? " failed " : " OK ") <binIndex(phi); - // TOFIX - if (verbose::debugOut) - cout << " Trying sector at phi " << theSectors[bin]->minPhi() << " " << phi << endl; + LogTrace("MagGeometry") << " Trying sector at phi " << theSectors[bin]->minPhi() << " " << phi << endl; result = theSectors[bin]->findVolume(gp, tolerance); - // TOFIX - if (verbose::debugOut) - cout << "***In guessed bsector" << (result == nullptr ? " failed " : " OK ") << endl; + LogTrace("MagGeometry") << "***In guessed bsector" << (result == nullptr ? " failed " : " OK ") << endl; if (result == nullptr) { // If fails, can be in previous bin. - // TOFIX - if (verbose::debugOut) - cout << " Trying sector at phi " << theSectors[theBinFinder->binIndex(bin - 1)]->minPhi() << " " << phi << endl; + LogTrace("MagGeometry") << " Trying sector at phi " << theSectors[theBinFinder->binIndex(bin - 1)]->minPhi() + << " " << phi << endl; result = theSectors[theBinFinder->binIndex(bin - 1)]->findVolume(gp, tolerance); - // TOFIX - if (verbose::debugOut) - cout << "***In previous bsector" << (result == nullptr ? " failed " : " OK ") << endl; + LogTrace("MagGeometry") << "***In previous bsector" << (result == nullptr ? " failed " : " OK ") << endl; } return result; } diff --git a/MagneticField/Layers/src/MagBRod.cc b/MagneticField/Layers/src/MagBRod.cc index b627f51404df9..622e109478639 100644 --- a/MagneticField/Layers/src/MagBRod.cc +++ b/MagneticField/Layers/src/MagBRod.cc @@ -9,7 +9,7 @@ #include "MagneticField/Layers/interface/MagBRod.h" #include "MagneticField/Layers/interface/MagBSlab.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include @@ -17,16 +17,13 @@ using namespace std; MagBRod::MagBRod(vector &slabs, Geom::Phi phiMin) : theSlabs(slabs), thePhiMin(phiMin), theBinFinder(nullptr) { - // TOFIX - // if (verbose.debugOut) cout << "Building MagBRod with " << theSlabs.size() + // LogTrace("MagGeometry") << "Building MagBRod with " << theSlabs.size() // << " slabs, minPhi " << thePhiMin << endl; if (theSlabs.size() > 1) { // Set the binfinder vector zBorders; for (vector::const_iterator islab = theSlabs.begin(); islab != theSlabs.end(); ++islab) { - // TOFIX - if (verbose::debugOut) - cout << (*islab)->minZ() << endl; + LogTrace("MagGeometry") << (*islab)->minZ() << endl; //FIXME assume layers are already sorted in Z zBorders.push_back((*islab)->minZ()); } @@ -51,13 +48,9 @@ const MagVolume *MagBRod::findVolume(const GlobalPoint &gp, double tolerance) co bin = theBinFinder->binIndex(Z); } - // TOFIX - if (verbose::debugOut) - cout << " Trying slab at Z " << theSlabs[bin]->minZ() << " " << Z << endl; + LogTrace("MagGeometry") << " Trying slab at Z " << theSlabs[bin]->minZ() << " " << Z << endl; result = theSlabs[bin]->findVolume(gp, tolerance); - // TOFIX - if (verbose::debugOut) - cout << "***In guessed bslab" << (result == nullptr ? " failed " : " OK ") << endl; + LogTrace("MagGeometry") << "***In guessed bslab" << (result == nullptr ? " failed " : " OK ") << endl; return result; } diff --git a/MagneticField/Layers/src/MagBSector.cc b/MagneticField/Layers/src/MagBSector.cc index a1bb6b3a9136f..ede2a11ea9044 100644 --- a/MagneticField/Layers/src/MagBSector.cc +++ b/MagneticField/Layers/src/MagBSector.cc @@ -9,7 +9,7 @@ #include "MagneticField/Layers/interface/MagBSector.h" #include "MagneticField/Layers/interface/MagBRod.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include @@ -29,9 +29,7 @@ const MagVolume* MagBSector::findVolume(const GlobalPoint& gp, double tolerance) // FIXME : use a binfinder for (vector::const_iterator irod = theRods.begin(); irod != theRods.end(); ++irod) { - // TOFIX - if (verbose::debugOut) - cout << " Trying rod at phi " << (*irod)->minPhi() << " " << phi << endl; + LogTrace("MagGeometry") << " Trying rod at phi " << (*irod)->minPhi() << " " << phi << endl; result = (*irod)->findVolume(gp, tolerance); if (result != nullptr) return result; diff --git a/MagneticField/Layers/src/MagBSlab.cc b/MagneticField/Layers/src/MagBSlab.cc index 4d3df0a9edecc..f0c477bcfc6c1 100644 --- a/MagneticField/Layers/src/MagBSlab.cc +++ b/MagneticField/Layers/src/MagBSlab.cc @@ -10,7 +10,7 @@ #include "MagneticField/VolumeGeometry/interface/MagVolume.h" #include "MagneticField/VolumeGeometry/interface/MagVolume6Faces.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include using namespace std; @@ -26,9 +26,7 @@ MagBSlab::~MagBSlab() { const MagVolume* MagBSlab::findVolume(const GlobalPoint& gp, double tolerance) const { for (vector::const_iterator ivol = theVolumes.begin(); ivol != theVolumes.end(); ++ivol) { // FIXME : use a binfinder - // TOFIX - if (verbose::debugOut) - cout << " Trying volume " << (static_cast(*ivol))->volumeNo << endl; + LogTrace("MagGeometry") << " Trying volume " << (static_cast(*ivol))->volumeNo << endl; if ((*ivol)->inside(gp, tolerance)) return (*ivol); } diff --git a/MagneticField/Layers/src/MagELayer.cc b/MagneticField/Layers/src/MagELayer.cc index a3d6cfcae853f..15c590afc79ef 100644 --- a/MagneticField/Layers/src/MagELayer.cc +++ b/MagneticField/Layers/src/MagELayer.cc @@ -27,10 +27,10 @@ MagELayer::~MagELayer() { const MagVolume* MagELayer::findVolume(const GlobalPoint& gp, double tolerance) const { for (vector::const_iterator ivol = theVolumes.begin(); ivol != theVolumes.end(); ++ivol) { // FIXME : use a binfinder -#ifdef MF_DEBUG +#ifdef EDM_ML_DEBUG { MagVolume6Faces* mv = static_cast(*ivol); - cout << " Trying volume " << mv->volumeNo << " " << int(mv->copyno) << endl; + LogTrace("MagGeometry") << " Trying volume " << mv->volumeNo << " " << int(mv->copyno) << endl; } #endif if ((*ivol)->inside(gp, tolerance)) diff --git a/MagneticField/Layers/src/MagESector.cc b/MagneticField/Layers/src/MagESector.cc index 7e5c3a6f4b49c..48995aae28a4e 100644 --- a/MagneticField/Layers/src/MagESector.cc +++ b/MagneticField/Layers/src/MagESector.cc @@ -9,7 +9,7 @@ #include "MagneticField/Layers/interface/MagESector.h" #include "MagneticField/Layers/interface/MagELayer.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include @@ -31,13 +31,9 @@ const MagVolume* MagESector::findVolume(const GlobalPoint& gp, double tolerance) for (vector::const_reverse_iterator ilay = theLayers.rbegin(); ilay != theLayers.rend(); ++ilay) { if (Z + tolerance > (*ilay)->minZ()) { if (Z - tolerance < (*ilay)->maxZ()) { -#ifdef MF_DEBUG - cout << " Trying elayer at Z " << (*ilay)->minZ() << " " << Z << endl; -#endif + LogTrace("MagGeometry") << " Trying elayer at Z " << (*ilay)->minZ() << " " << Z << endl; result = (*ilay)->findVolume(gp, tolerance); -#ifdef MF_DEBUG - cout << "***In elayer " << (result == 0 ? " failed " : " OK ") << endl; -#endif + LogTrace("MagGeometry") << "***In elayer " << (result == 0 ? " failed " : " OK ") << endl; } else { // break; // FIXME: OK if sorted by maxZ } diff --git a/MagneticField/VolumeBasedEngine/interface/MagGeometry.h b/MagneticField/VolumeBasedEngine/interface/MagGeometry.h index 1671828522a73..b74886ffe52fe 100644 --- a/MagneticField/VolumeBasedEngine/interface/MagGeometry.h +++ b/MagneticField/VolumeBasedEngine/interface/MagGeometry.h @@ -46,9 +46,6 @@ class MagGeometry { /// Find a volume MagVolume const* findVolume(const GlobalPoint& gp, double tolerance = 0.) const; - // Deprecated, will be removed - bool isZSymmetric() const { return false; } - // FIXME: only for temporary tests, should be removed. const std::vector& barrelVolumes() const { return theBVolumes; } const std::vector& endcapVolumes() const { return theEVolumes; } @@ -75,5 +72,12 @@ class MagGeometry { bool cacheLastVolume; int geometryVersion; + + // boundaries of internal barrel-endcap volume separation + float barrelRsq1; + float barrelRsq2; + float barrelZ0; + float barrelZ1; + float barrelZ2; }; #endif diff --git a/MagneticField/VolumeBasedEngine/src/MagGeometry.cc b/MagneticField/VolumeBasedEngine/src/MagGeometry.cc index 3f11aa0c9a45b..277e190fff44f 100644 --- a/MagneticField/VolumeBasedEngine/src/MagGeometry.cc +++ b/MagneticField/VolumeBasedEngine/src/MagGeometry.cc @@ -15,9 +15,6 @@ #include "FWCore/Utilities/interface/isFinite.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" - #include using namespace std; @@ -49,25 +46,49 @@ MagGeometry::MagGeometry(int geomVersion, vector rBorders; for (vector::const_iterator ilay = theBLayers.begin(); ilay != theBLayers.end(); ++ilay) { - if (verbose::debugOut) - cout << " Barrel layer at " << (*ilay)->minR() << endl; + LogTrace("MagGeometry") << " Barrel layer at " << (*ilay)->minR() << endl; //FIXME assume layers are already sorted in minR rBorders.push_back((*ilay)->minR()); } theBarrelBinFinder = new MagBinFinders::GeneralBinFinderInR(rBorders); - if (verbose::debugOut) { - for (vector::const_iterator isec = theESectors.begin(); isec != theESectors.end(); ++isec) { - cout << " Endcap sector at " << (*isec)->minPhi() << endl; - } +#ifdef EDM_ML_DEBUG + for (vector::const_iterator isec = theESectors.begin(); isec != theESectors.end(); ++isec) { + LogTrace("MagGeometry") << " Endcap sector at " << (*isec)->minPhi() << endl; } +#endif //FIXME assume sectors are already sorted in phi //FIXME: PeriodicBinFinderInPhi gets *center* of first bin int nEBins = theESectors.size(); if (nEBins > 0) theEndcapBinFinder = new PeriodicBinFinderInPhi(theESectors.front()->minPhi() + Geom::pi() / nEBins, nEBins); + + // Compute barrel dimensions based on geometry version + switch (geomVersion >= 120812 ? 0 : (geomVersion >= 90812 ? 1 : 2)) { + case 0: // since 120812 + barrelRsq1 = 172.400f * 172.400f; + barrelRsq2 = 308.735f * 308.735f; + barrelZ0 = 350.000f; + barrelZ1 = 633.290f; + barrelZ2 = 662.010f; + break; + case 1: // version 90812 (no longer in use) + barrelRsq1 = 172.400f * 172.400f; + barrelRsq2 = 308.755f * 308.755f; + barrelZ0 = 350.000f; + barrelZ1 = 633.890f; + barrelZ2 = 662.010f; + break; + case 2: // versions 71212, 90322 + barrelRsq1 = 172.400f * 172.400f; + barrelRsq2 = 308.755f * 308.755f; + barrelZ0 = 350.000f; + barrelZ1 = 633.290f; + barrelZ2 = 661.010f; + break; + } } MagGeometry::~MagGeometry() { @@ -113,7 +134,7 @@ MagVolume const* MagGeometry::findVolume1(const GlobalPoint& gp, double toleranc if (inBarrel(gp)) { // Barrel for (vector::const_iterator v = theBVolumes.begin(); v != theBVolumes.end(); ++v) { if ((*v) == nullptr) { //FIXME: remove this check - cout << endl << "***ERROR: MagGeometry::findVolume: MagVolume for barrel not set" << endl; + LogError("MagGeometry") << endl << "***ERROR: MagGeometry::findVolume: MagVolume for barrel not set" << endl; ++errCnt; if (errCnt < 3) continue; @@ -129,7 +150,7 @@ MagVolume const* MagGeometry::findVolume1(const GlobalPoint& gp, double toleranc } else { // Endcaps for (vector::const_iterator v = theEVolumes.begin(); v != theEVolumes.end(); ++v) { if ((*v) == nullptr) { //FIXME: remove this check - cout << endl << "***ERROR: MagGeometry::findVolume: MagVolume for endcap not set" << endl; + LogError("MagGeometry") << endl << "***ERROR: MagGeometry::findVolume: MagVolume for endcap not set" << endl; ++errCnt; if (errCnt < 3) continue; @@ -161,11 +182,10 @@ MagVolume const* MagGeometry::findVolume(const GlobalPoint& gp, double tolerance // Search up to 3 layers inwards. This may happen for very thin layers. for (int bin1 = bin; bin1 >= max(0, bin - 3); --bin1) { - if (verbose::debugOut) - cout << "Trying layer at R " << theBLayers[bin1]->minR() << " " << R << endl; + LogTrace("MagGeometry") << "Trying layer at R " << theBLayers[bin1]->minR() << " " << R << endl; result = theBLayers[bin1]->findVolume(gp, tolerance); - if (verbose::debugOut) - cout << "***In blayer " << bin1 - bin << " " << (result == nullptr ? " failed " : " OK ") << endl; + LogTrace("MagGeometry") << "***In blayer " << bin1 - bin << " " << (result == nullptr ? " failed " : " OK ") + << endl; if (result != nullptr) break; } @@ -174,11 +194,9 @@ MagVolume const* MagGeometry::findVolume(const GlobalPoint& gp, double tolerance Geom::Phi phi = gp.phi(); if (theEndcapBinFinder != nullptr && !theESectors.empty()) { int bin = theEndcapBinFinder->binIndex(phi); - if (verbose::debugOut) - cout << "Trying endcap sector at phi " << theESectors[bin]->minPhi() << " " << phi << endl; + LogTrace("MagGeometry") << "Trying endcap sector at phi " << theESectors[bin]->minPhi() << " " << phi << endl; result = theESectors[bin]->findVolume(gp, tolerance); - if (verbose::debugOut) - cout << "***In guessed esector " << (result == nullptr ? " failed " : " OK ") << endl; + LogTrace("MagGeometry") << "***In guessed esector " << (result == nullptr ? " failed " : " OK ") << endl; } else edm::LogError("MagGeometry") << "Endcap empty"; } @@ -187,8 +205,7 @@ MagVolume const* MagGeometry::findVolume(const GlobalPoint& gp, double tolerance // If search fails, retry with a 300 micron tolerance. // This is a hack for thin gaps on air-iron boundaries, // which will not be present anymore once surfaces are matched. - if (verbose::debugOut) - cout << "Increasing the tolerance to 0.03" << endl; + LogTrace("MagGeometry") << "Increasing the tolerance to 0.03" << endl; result = findVolume(gp, 0.03); } @@ -199,15 +216,8 @@ MagVolume const* MagGeometry::findVolume(const GlobalPoint& gp, double tolerance } bool MagGeometry::inBarrel(const GlobalPoint& gp) const { - float Z = fabs(gp.z()); - float R = gp.perp(); - - // FIXME: Get these dimensions from the builder. - if (geometryVersion >= 120812) { - return (Z < 350. || (R > 172.4 && Z < 633.29) || (R > 308.735 && Z < 662.01)); - } else if (geometryVersion >= 90812) { // FIXME no longer supported - return (Z < 350. || (R > 172.4 && Z < 633.89) || (R > 308.755 && Z < 662.01)); - } else { // versions 71212, 90322 - return (Z < 350. || (R > 172.4 && Z < 633.29) || (R > 308.755 && Z < 661.01)); - } + float aZ = fabs(gp.z()); + float aRsq = gp.perp2(); + + return ((aZ < barrelZ0) || (aZ < barrelZ1 && aRsq > barrelRsq1) || (aZ < barrelZ2 && aRsq > barrelRsq2)); } From 5bf69853156d9e59ceb636481a72debab2d5cf4a Mon Sep 17 00:00:00 2001 From: Nicola Amapane Date: Fri, 24 Apr 2020 13:10:06 +0200 Subject: [PATCH 03/10] More minor optimization and cleanup --- MagneticField/Engine/test/MakePlots.sh | 4 ---- MagneticField/Engine/test/README | 18 ------------------ MagneticField/Engine/test/plot3d.gnuplot | 14 -------------- .../interface/VolumeBasedMagneticField.h | 4 +--- .../VolumeBasedEngine/src/MagGeometry.cc | 8 ++++---- .../src/VolumeBasedMagneticField.cc | 8 +++----- 6 files changed, 8 insertions(+), 48 deletions(-) delete mode 100644 MagneticField/Engine/test/MakePlots.sh delete mode 100644 MagneticField/Engine/test/README delete mode 100644 MagneticField/Engine/test/plot3d.gnuplot diff --git a/MagneticField/Engine/test/MakePlots.sh b/MagneticField/Engine/test/MakePlots.sh deleted file mode 100644 index 61f1cf619c8a5..0000000000000 --- a/MagneticField/Engine/test/MakePlots.sh +++ /dev/null @@ -1,4 +0,0 @@ -cmsRun validateField.cfg > ! output.txt -cat newtable.txt | cut -d' ' -f 2,3,4 > ! allpoints -grep Disc output.txt | cut -f 7 -d' ' | tr '(,)' ' ' > ! outliers -gnuplot < plot3d.gnuplot diff --git a/MagneticField/Engine/test/README b/MagneticField/Engine/test/README deleted file mode 100644 index c5c79649be7c2..0000000000000 --- a/MagneticField/Engine/test/README +++ /dev/null @@ -1,18 +0,0 @@ -Instructions to visualize the output of the Field validation test: ------------------------------------------------------------------- - -Make sure the validation test has been compiled (scramv1 b) and -runs (cmsRun validateField.cfg) ... Then do: - -source MakePlots.sh -(the script expects a table with all test points with the name "newtable.txt") - -The output will consist of 3 plots: - -viewXY.png -view3D.png -viewXZ.png - -All test points are shown in red, the outliers are shown in green. -You can view the above .png plots e.g. using the Unix program 'display'. - diff --git a/MagneticField/Engine/test/plot3d.gnuplot b/MagneticField/Engine/test/plot3d.gnuplot deleted file mode 100644 index 17067a03b31a8..0000000000000 --- a/MagneticField/Engine/test/plot3d.gnuplot +++ /dev/null @@ -1,14 +0,0 @@ -set terminal png -set xlabel "x coordinate (cm)" -set ylabel "y coordinate (cm)" -set zlabel "z coordinate (cm)" -set output "viewXY.png" -set view 0,90 -splot 'allpoints','outliers' -set output "view3D.png" -set view 30,60 -splot 'allpoints','outliers' -set output "viewXZ.png" -set view 90,0 -splot 'allpoints','outliers' - diff --git a/MagneticField/VolumeBasedEngine/interface/VolumeBasedMagneticField.h b/MagneticField/VolumeBasedEngine/interface/VolumeBasedMagneticField.h index 78c5d0090d196..e41fd78d5a348 100644 --- a/MagneticField/VolumeBasedEngine/interface/VolumeBasedMagneticField.h +++ b/MagneticField/VolumeBasedEngine/interface/VolumeBasedMagneticField.h @@ -47,11 +47,9 @@ class VolumeBasedMagneticField : public MagneticField { bool isDefined(const GlobalPoint& gp) const override; - bool isZSymmetric() const; - private: const MagGeometry* field; - float maxR; + float maxRsq; float maxZ; const MagneticField* paramField; bool magGeomOwned; diff --git a/MagneticField/VolumeBasedEngine/src/MagGeometry.cc b/MagneticField/VolumeBasedEngine/src/MagGeometry.cc index 277e190fff44f..19e224c17568c 100644 --- a/MagneticField/VolumeBasedEngine/src/MagGeometry.cc +++ b/MagneticField/VolumeBasedEngine/src/MagGeometry.cc @@ -48,7 +48,7 @@ MagGeometry::MagGeometry(int geomVersion, for (vector::const_iterator ilay = theBLayers.begin(); ilay != theBLayers.end(); ++ilay) { LogTrace("MagGeometry") << " Barrel layer at " << (*ilay)->minR() << endl; //FIXME assume layers are already sorted in minR - rBorders.push_back((*ilay)->minR()); + rBorders.push_back((*ilay)->minR() * (*ilay)->minR()); } theBarrelBinFinder = new MagBinFinders::GeneralBinFinderInR(rBorders); @@ -177,12 +177,12 @@ MagVolume const* MagGeometry::findVolume(const GlobalPoint& gp, double tolerance MagVolume const* result = nullptr; if (inBarrel(gp)) { // Barrel - double R = gp.perp(); - int bin = theBarrelBinFinder->binIndex(R); + double aRsq = gp.perp2(); + int bin = theBarrelBinFinder->binIndex(aRsq); // Search up to 3 layers inwards. This may happen for very thin layers. for (int bin1 = bin; bin1 >= max(0, bin - 3); --bin1) { - LogTrace("MagGeometry") << "Trying layer at R " << theBLayers[bin1]->minR() << " " << R << endl; + LogTrace("MagGeometry") << "Trying layer at R " << theBLayers[bin1]->minR() << " " << sqrt(aRsq) << endl; result = theBLayers[bin1]->findVolume(gp, tolerance); LogTrace("MagGeometry") << "***In blayer " << bin1 - bin << " " << (result == nullptr ? " failed " : " OK ") << endl; diff --git a/MagneticField/VolumeBasedEngine/src/VolumeBasedMagneticField.cc b/MagneticField/VolumeBasedEngine/src/VolumeBasedMagneticField.cc index f8a88a895d8fd..7929ccfce952e 100644 --- a/MagneticField/VolumeBasedEngine/src/VolumeBasedMagneticField.cc +++ b/MagneticField/VolumeBasedEngine/src/VolumeBasedMagneticField.cc @@ -11,7 +11,7 @@ VolumeBasedMagneticField::VolumeBasedMagneticField(int geomVersion, const MagneticField* param, bool isParamFieldOwned) : field(new MagGeometry(geomVersion, theBLayers, theESectors, theBVolumes, theEVolumes)), - maxR(rMax), + maxRsq(rMax * rMax), maxZ(zMax), paramField(param), magGeomOwned(true), @@ -20,7 +20,7 @@ VolumeBasedMagneticField::VolumeBasedMagneticField(int geomVersion, VolumeBasedMagneticField::VolumeBasedMagneticField(const VolumeBasedMagneticField& vbf) : MagneticField::MagneticField(vbf), field(vbf.field), - maxR(vbf.maxR), + maxRsq(vbf.maxRsq), maxZ(vbf.maxZ), paramField(vbf.paramField), magGeomOwned(false), @@ -59,7 +59,5 @@ GlobalVector VolumeBasedMagneticField::inTeslaUnchecked(const GlobalPoint& gp) c const MagVolume* VolumeBasedMagneticField::findVolume(const GlobalPoint& gp) const { return field->findVolume(gp); } bool VolumeBasedMagneticField::isDefined(const GlobalPoint& gp) const { - return (fabs(gp.z()) < maxZ && gp.perp() < maxR); + return (fabs(gp.z()) < maxZ && gp.perp2() < maxRsq); } - -bool VolumeBasedMagneticField::isZSymmetric() const { return field->isZSymmetric(); } From 852b82e6edeba747f70da7fb209799c31955fcd8 Mon Sep 17 00:00:00 2001 From: Nicola Amapane Date: Fri, 24 Apr 2020 14:22:48 +0200 Subject: [PATCH 04/10] code-checks --- MagneticField/VolumeBasedEngine/src/MagGeometry.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/MagneticField/VolumeBasedEngine/src/MagGeometry.cc b/MagneticField/VolumeBasedEngine/src/MagGeometry.cc index 19e224c17568c..357755973530f 100644 --- a/MagneticField/VolumeBasedEngine/src/MagGeometry.cc +++ b/MagneticField/VolumeBasedEngine/src/MagGeometry.cc @@ -66,6 +66,7 @@ MagGeometry::MagGeometry(int geomVersion, theEndcapBinFinder = new PeriodicBinFinderInPhi(theESectors.front()->minPhi() + Geom::pi() / nEBins, nEBins); // Compute barrel dimensions based on geometry version + // FIXME: it would be nice to derive these from the actual geometry in the builder, possibly adding some specification to the geometry. switch (geomVersion >= 120812 ? 0 : (geomVersion >= 90812 ? 1 : 2)) { case 0: // since 120812 barrelRsq1 = 172.400f * 172.400f; From b5639f5f488f7e96d3cb4c8ae1b4cf7d0aa1e947 Mon Sep 17 00:00:00 2001 From: Nicola Amapane Date: Fri, 24 Apr 2020 17:16:27 +0200 Subject: [PATCH 05/10] code-checks --- MagneticField/Layers/src/MagESector.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MagneticField/Layers/src/MagESector.cc b/MagneticField/Layers/src/MagESector.cc index 48995aae28a4e..401d0793fd3dd 100644 --- a/MagneticField/Layers/src/MagESector.cc +++ b/MagneticField/Layers/src/MagESector.cc @@ -33,7 +33,7 @@ const MagVolume* MagESector::findVolume(const GlobalPoint& gp, double tolerance) if (Z - tolerance < (*ilay)->maxZ()) { LogTrace("MagGeometry") << " Trying elayer at Z " << (*ilay)->minZ() << " " << Z << endl; result = (*ilay)->findVolume(gp, tolerance); - LogTrace("MagGeometry") << "***In elayer " << (result == 0 ? " failed " : " OK ") << endl; + LogTrace("MagGeometry") << "***In elayer " << (result == nullptr ? " failed " : " OK ") << endl; } else { // break; // FIXME: OK if sorted by maxZ } From a588d3ff21ad8f4acc596ee605dae35da2bdc797 Mon Sep 17 00:00:00 2001 From: Nicola Amapane Date: Sat, 25 Apr 2020 12:23:16 +0200 Subject: [PATCH 06/10] oops --- MagneticField/Layers/src/MagELayer.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MagneticField/Layers/src/MagELayer.cc b/MagneticField/Layers/src/MagELayer.cc index 15c590afc79ef..947f54e0ffd4c 100644 --- a/MagneticField/Layers/src/MagELayer.cc +++ b/MagneticField/Layers/src/MagELayer.cc @@ -10,7 +10,7 @@ #include "MagneticField/VolumeGeometry/interface/MagVolume.h" #include "MagneticField/VolumeGeometry/interface/MagVolume6Faces.h" -#include "MagneticField/Layers/interface/MagVerbosity.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include using namespace std; From db22d23c6b629013480fc24a6af65335832f1db7 Mon Sep 17 00:00:00 2001 From: Nicola Amapane Date: Thu, 30 Apr 2020 10:18:37 +0200 Subject: [PATCH 07/10] add check for numerical problems at volume boundaries --- .../test/stubs/MagGeometryAnalyzer.cc | 31 ++++++----- .../test/stubs/VolumeGridTester.cc | 54 +++++++++++++++---- .../GeomBuilder/test/stubs/VolumeGridTester.h | 7 ++- 3 files changed, 68 insertions(+), 24 deletions(-) diff --git a/MagneticField/GeomBuilder/test/stubs/MagGeometryAnalyzer.cc b/MagneticField/GeomBuilder/test/stubs/MagGeometryAnalyzer.cc index 9627628212dcd..8968f06349de9 100644 --- a/MagneticField/GeomBuilder/test/stubs/MagGeometryAnalyzer.cc +++ b/MagneticField/GeomBuilder/test/stubs/MagGeometryAnalyzer.cc @@ -34,7 +34,7 @@ class testMagGeometryAnalyzer : public edm::EDAnalyzer { virtual void endJob() {} private: - void testGrids(const vector& bvol); + void testGrids(const vector& bvol, const VolumeBasedMagneticField* field); }; using namespace edm; @@ -43,31 +43,34 @@ void testMagGeometryAnalyzer::analyze(const edm::Event& event, const edm::EventS ESHandle magfield; eventSetup.get().get(magfield); - const MagGeometry* field = (dynamic_cast(magfield.product()))->field; + const VolumeBasedMagneticField* field = dynamic_cast(magfield.product()); + const MagGeometry* geom = field->field; // Test that findVolume succeeds for random points - MagGeometryExerciser exe(field); + // This check is actually aleady covered by the standard regression. + MagGeometryExerciser exe(geom); + exe.testFindVolume(1000000); - //FIXME: the region to be tested is specified inside. - exe.testFindVolume(10000000); - - // Test that random points are inside one and only one volume + // Test that random points are inside one and only one volume. + // Note: some overlaps are reported due to tolerance. // exe.testInside(100000,0.03); // Test that each grid point is inside its own volume - if (false) { - cout << "***TEST GRIDS: barrel volumes: " << field->barrelVolumes().size() << endl; - testGrids(field->barrelVolumes()); + // and check numerical problems in global volume search at volume boundaries. + if (true) { + cout << "***TEST GRIDS: barrel volumes: " << geom->barrelVolumes().size() << endl; + testGrids(geom->barrelVolumes(), field); - cout << "***TEST GRIDS: endcap volumes: " << field->endcapVolumes().size() << endl; - testGrids(field->endcapVolumes()); + cout << "***TEST GRIDS: endcap volumes: " << geom->endcapVolumes().size() << endl; + testGrids(geom->endcapVolumes(), field); } } #include "MagneticField/VolumeGeometry/interface/MagVolume6Faces.h" #include "VolumeGridTester.h" -void testMagGeometryAnalyzer::testGrids(const vector& bvol) { +void testMagGeometryAnalyzer::testGrids(const vector& bvol, + const VolumeBasedMagneticField* field) { static map nameCalls; for (vector::const_iterator i = bvol.begin(); i != bvol.end(); i++) { @@ -80,7 +83,7 @@ void testMagGeometryAnalyzer::testGrids(const vector& bv cout << (*i)->volumeNo << " No interpolator; skipping " << endl; continue; } - VolumeGridTester tester(*i, prov); + VolumeGridTester tester(*i, prov, field); if (tester.testInside()) cout << "testGrids: success: " << (**i).volumeNo << endl; else diff --git a/MagneticField/GeomBuilder/test/stubs/VolumeGridTester.cc b/MagneticField/GeomBuilder/test/stubs/VolumeGridTester.cc index c138c9ed66bc3..8d33075c0c3e2 100644 --- a/MagneticField/GeomBuilder/test/stubs/VolumeGridTester.cc +++ b/MagneticField/GeomBuilder/test/stubs/VolumeGridTester.cc @@ -1,12 +1,20 @@ #include "VolumeGridTester.h" #include "MagneticField/Interpolation/interface/MFGrid.h" #include "MagneticField/VolumeGeometry/interface/MagVolume6Faces.h" +#include "MagneticField/VolumeBasedEngine/interface/VolumeBasedMagneticField.h" #include +#include #include #include using namespace std; +namespace { + float eps(float x, int ulp) { // move x by ulp times the float numerical precision + return x + std::numeric_limits::epsilon() * std::fabs(x) * ulp; + } +} // namespace + bool VolumeGridTester::testInside() const { // static string lastName("firstcall"); // if (lastName == volume_->name) return true; // skip multiple calls @@ -21,18 +29,19 @@ bool VolumeGridTester::testInside() const { bool result = true; const double tolerance = 0.03; - cout << "The volume position is " << volume_->position() << endl; - cout << "Is the volume position inside the volume? " << volume_->inside(volume_->position(), tolerance) << endl; + // cout << "The volume position is " << volume_->position() << endl; + // cout << "Is the volume position inside the volume? " << volume_->inside(volume_->position(), tolerance) << endl; Dimensions sizes = grid->dimensions(); - cout << "Grid has " << 3 << " dimensions " - << " number of nodes is " << sizes.w << " " << sizes.h << " " << sizes.d << endl; + // cout << "Grid has " << 3 << " dimensions " + // << " number of nodes is " << sizes.w << " " << sizes.h << " " << sizes.d << endl; size_t dumpCount = 0; for (int j = 0; j < sizes.h; j++) { for (int k = 0; k < sizes.d; k++) { for (int i = 0; i < sizes.w; i++) { MFGrid::LocalPoint lp = grid->nodePosition(i, j, k); + // Check that grid point is inside its own volume if (!volume_->inside(lp, tolerance)) { result = false; if (++dumpCount < 2) @@ -40,6 +49,21 @@ bool VolumeGridTester::testInside() const { else return result; } + + // Check that points within numerical accuracy to grid boundary points are discoverable + if (field_ != nullptr && + ((j == 0 || j == sizes.h - 1) || (k == 0 || k == sizes.d - 1) || (i == 0 || i == sizes.w - 1))) { + GlobalPoint gp = volume_->toGlobal(lp); + + for (int nulp = -5; nulp <= 5; ++nulp) { + result &= testFind(GlobalPoint(eps(gp.x(), nulp), gp.y(), gp.z())); + result &= testFind(GlobalPoint(gp.x(), eps(gp.y(), nulp), gp.z())); + result &= testFind(GlobalPoint(gp.x(), gp.y(), eps(gp.z(), nulp))); + + if (result == false) + return result; + } + } } } } @@ -48,19 +72,31 @@ bool VolumeGridTester::testInside() const { void VolumeGridTester::dumpProblem(const MFGrid::LocalPoint& lp, double tolerance) const { MFGrid::GlobalPoint gp(volume_->toGlobal(lp)); - cout << "Point " << lp << " (local) " << gp << " (global) " << gp.perp() << " " << gp.phi() - << " (R,phi global) not in volume!" << endl; + cout << "ERROR: VolumeGridTester: Grid point " << lp << " (local) " << gp << " (global) " << gp.perp() << " " + << gp.phi() << " (R,phi global) is not in its own volume!" << endl; const vector& faces = volume_->faces(); for (vector::const_iterator v = faces.begin(); v != faces.end(); v++) { - cout << "Volume face has position " << v->surface().position() << " side " << (int)v->surfaceSide() << " rotation " + cout << " Volume face has position " << v->surface().position() << " side " << (int)v->surfaceSide() << " rotation " << endl << v->surface().rotation() << endl; Surface::Side side = v->surface().side(gp, tolerance); if (side != v->surfaceSide() && side != SurfaceOrientation::onSurface) { - cout << "Wrong side: " << (int)side << " local position in surface frame " << v->surface().toLocal(gp) << endl; + cout << " Wrong side: " << (int)side << " local position in surface frame " << v->surface().toLocal(gp) << endl; } else - cout << "Correct side: " << (int)side << endl; + cout << " Correct side: " << (int)side << endl; + } +} + +bool VolumeGridTester::testFind(GlobalPoint gp) const { + if (field_->isDefined(gp)) { + MagVolume const* vol = field_->findVolume(gp); + if (vol == nullptr) { + cout << "ERROR: VolumeGridTester: No volume found! Global point: " << setprecision(8) << gp + << " , at R= " << gp.perp() << ", Z= " << gp.z() << endl; + return false; + } } + return true; } diff --git a/MagneticField/GeomBuilder/test/stubs/VolumeGridTester.h b/MagneticField/GeomBuilder/test/stubs/VolumeGridTester.h index 9eeb35b95d6d8..a386673289c60 100644 --- a/MagneticField/GeomBuilder/test/stubs/VolumeGridTester.h +++ b/MagneticField/GeomBuilder/test/stubs/VolumeGridTester.h @@ -11,18 +11,23 @@ #include "MagneticField/Interpolation/interface/MagProviderInterpol.h" #include "MagneticField/Interpolation/interface/MFGrid.h" +#include class MagVolume6Faces; +class VolumeBasedMagneticField; class VolumeGridTester { public: - VolumeGridTester(const MagVolume6Faces* vol, const MagProviderInterpol* mp) : volume_(vol), magProvider_(mp) {} + VolumeGridTester(const MagVolume6Faces* vol, const MagProviderInterpol* mp, const VolumeBasedMagneticField* field) + : volume_(vol), magProvider_(mp), field_(field) {} bool testInside() const; + bool testFind(GlobalPoint gp) const; private: const MagVolume6Faces* volume_; const MagProviderInterpol* magProvider_; + const VolumeBasedMagneticField* field_; void dumpProblem(const MFGrid::LocalPoint& lp, double tolerance) const; }; From e44d1c26e33dd08ea44169da7c6926d9f32823f0 Mon Sep 17 00:00:00 2001 From: Nicola Amapane Date: Thu, 30 Apr 2020 12:06:43 +0200 Subject: [PATCH 08/10] Put some order in MessageLogger categories to make them useful for debugging --- MagneticField/Engine/test/queryField.py | 40 ++++++++------ MagneticField/Engine/test/regression.py | 3 +- .../Engine/test/testMagneticField.cc | 25 +++++---- .../Engine/test/testMagneticField_cfg.py | 18 ------- .../VolumeBasedMagneticFieldESProducer.cc | 6 +-- ...olumeBasedMagneticFieldESProducerFromDB.cc | 12 ++--- ...4hep_VolumeBasedMagneticFieldESProducer.cc | 11 ++-- ...olumeBasedMagneticFieldESProducerFromDB.cc | 12 ++--- .../GeomBuilder/src/DD4hep_MagGeoBuilder.cc | 10 ++-- .../GeomBuilder/src/DD4hep_volumeHandle.cc | 22 ++++---- .../GeomBuilder/src/MagGeoBuilderFromDDD.cc | 11 ++-- MagneticField/GeomBuilder/src/buildBox.icc | 31 ++++++----- MagneticField/GeomBuilder/src/buildCons.icc | 12 ++--- .../GeomBuilder/src/buildPseudoTrap.icc | 52 +++++++++---------- MagneticField/GeomBuilder/src/buildTrap.icc | 51 +++++++++--------- .../GeomBuilder/src/buildTruncTubs.icc | 20 +++---- MagneticField/GeomBuilder/src/buildTubs.icc | 9 ++-- MagneticField/Layers/src/MagBRod.cc | 2 +- .../AutoParametrizedMagneticFieldProducer.cc | 3 +- .../src/OAEParametrizedMagneticField.cc | 4 +- .../src/ParabolicParametrizedMagneticField.cc | 4 +- .../src/PolyFit2DParametrizedMagneticField.cc | 4 +- .../VolumeBasedEngine/src/MagGeometry.cc | 6 +-- 23 files changed, 171 insertions(+), 197 deletions(-) diff --git a/MagneticField/Engine/test/queryField.py b/MagneticField/Engine/test/queryField.py index 3a35de143c077..6fd7b7f65602d 100644 --- a/MagneticField/Engine/test/queryField.py +++ b/MagneticField/Engine/test/queryField.py @@ -25,24 +25,30 @@ #process.VolumeBasedMagneticFieldESProducer.valueOverride = 18000 -# process.MessageLogger = cms.Service("MessageLogger", -# categories = cms.untracked.vstring("MagneticField"), -# destinations = cms.untracked.vstring("cout"), -# cout = cms.untracked.PSet( -# noLineBreaks = cms.untracked.bool(True), -# threshold = cms.untracked.string("INFO"), -# INFO = cms.untracked.PSet( -# limit = cms.untracked.int32(0) -# ), -# WARNING = cms.untracked.PSet( -# limit = cms.untracked.int32(0) -# ), -# MagneticField = cms.untracked.PSet( -# limit = cms.untracked.int32(10000000) -# ) -# ) -# ) +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('cerr'), + categories = cms.untracked.vstring("MagneticField", # messages on MF configuration, field query + "MagGeoBuilder", # Debug of MF geometry building (debugBuilder flag also needed for full output) + "MagGeometry", # Debug of MF geometry search + "MagGeometry_cache"), # Volume cache debug + cerr = cms.untracked.PSet( + threshold = cms.untracked.string('WARNING'), # DEBUG + set limits below + INFO = cms.untracked.PSet(limit=cms.untracked.int32(0)), + DEBUG = cms.untracked.PSet(limit=cms.untracked.int32(0)), + WARNING = cms.untracked.PSet(limit=cms.untracked.int32(0)), + MagneticField = cms.untracked.PSet(limit=cms.untracked.int32(10000000)), + MagGeoBuilder = cms.untracked.PSet(limit=cms.untracked.int32(0)), + MagGeometry = cms.untracked.PSet(limit=cms.untracked.int32(0)), + MagGeometry_cache = cms.untracked.PSet(limit=cms.untracked.int32(0)), + ), + + debugModules = cms.untracked.vstring('queryField') +) + process.queryField = cms.EDAnalyzer("queryField") process.p1 = cms.Path(process.queryField) +### Activate verbose mode of geometry building as well as additional +### consistency checks on geometry +#process.VolumeBasedMagneticFieldESProducer.debugBuilder = True diff --git a/MagneticField/Engine/test/regression.py b/MagneticField/Engine/test/regression.py index 66441058b46e8..adf82379c5e5d 100644 --- a/MagneticField/Engine/test/regression.py +++ b/MagneticField/Engine/test/regression.py @@ -138,7 +138,8 @@ ## Size of testing volume (cm): InnerRadius = cms.untracked.double(0), # default: 0 OuterRadius = cms.untracked.double(900), # default: 900 - HalfLength = cms.untracked.double(2400) # default: 2400 + minZ = cms.untracked.double(-2400), # default: -2400 + maxZ = cms.untracked.double(2400) # default: 2400 ) diff --git a/MagneticField/Engine/test/testMagneticField.cc b/MagneticField/Engine/test/testMagneticField.cc index d49bcaab2f690..5d5bf28d74bb5 100644 --- a/MagneticField/Engine/test/testMagneticField.cc +++ b/MagneticField/Engine/test/testMagneticField.cc @@ -3,7 +3,7 @@ * A set of tests for regression and validation of the field map. * * outputTable: generate txt file with values to be used for regression. Points are generated - * according to InnerRadius, OuterRadius, HalfLength + * according to innerRadius, outerRadius, minZ, maxZ * * inputTable: file with input values to be checked against, format depends on inputFileType: * xyz = cartesian coordinates in cm (default) @@ -66,11 +66,11 @@ class testMagneticField : public edm::EDAnalyzer { // number of random points to try numberOfPoints = pset.getUntrackedParameter("numberOfPoints", 10000); // outer radius of test cylinder - InnerRadius = pset.getUntrackedParameter("InnerRadius", 0.); - // half length of test cylinder - OuterRadius = pset.getUntrackedParameter("OuterRadius", 900); - // half length of test cylinder - HalfLength = pset.getUntrackedParameter("HalfLength", 2400); + innerRadius = pset.getUntrackedParameter("InnerRadius", 0.); + outerRadius = pset.getUntrackedParameter("OuterRadius", 900); + // Z extent of test cylinder + minZ = pset.getUntrackedParameter("minZ", -2400); + maxZ = pset.getUntrackedParameter("maxZ", 2400); } ~testMagneticField() {} @@ -138,13 +138,14 @@ class testMagneticField : public edm::EDAnalyzer { string outputFile; double reso; int numberOfPoints; - double OuterRadius; - double InnerRadius; - double HalfLength; + double outerRadius; + double innerRadius; + double minZ; + double maxZ; }; void testMagneticField::writeValidationTable(int npoints, string filename) { - GlobalPointProvider p(InnerRadius, OuterRadius, -Geom::pi(), Geom::pi(), -HalfLength, HalfLength); + GlobalPointProvider p(innerRadius, outerRadius, -Geom::pi(), Geom::pi(), minZ, maxZ); std::string::size_type ps = filename.rfind("."); if (ps != std::string::npos && filename.substr(ps) == ".txt") { @@ -231,7 +232,7 @@ void testMagneticField::validate(string filename, string type) { } } - if (gp.perp() < InnerRadius || gp.perp() > OuterRadius || fabs(gp.z()) > HalfLength) + if (gp.perp() < innerRadius || gp.perp() > outerRadius || gp.z() < minZ || gp.z() > maxZ) continue; GlobalVector oldB(bx, by, bz); @@ -347,8 +348,6 @@ void testMagneticField::validateVsTOSCATable(string filename) { return; } - // if (gp.perp() < InnerRadius || gp.perp() > OuterRadius || fabs(gp.z()) > HalfLength) continue; - GlobalVector oldB(bx, by, bz); if (vol->inside(gp, 0.03)) { GlobalVector newB = vol->inTesla(gp); diff --git a/MagneticField/Engine/test/testMagneticField_cfg.py b/MagneticField/Engine/test/testMagneticField_cfg.py index 91832d0f53b1c..d8c8458e76cd5 100644 --- a/MagneticField/Engine/test/testMagneticField_cfg.py +++ b/MagneticField/Engine/test/testMagneticField_cfg.py @@ -22,24 +22,6 @@ process.load("MagneticField.Engine.volumeBasedMagneticField_160812_cfi") -process.MessageLogger = cms.Service("MessageLogger", - categories = cms.untracked.vstring("MagneticField"), - destinations = cms.untracked.vstring("cout"), - cout = cms.untracked.PSet( - noLineBreaks = cms.untracked.bool(True), - threshold = cms.untracked.string("WARNING"), - WARNING = cms.untracked.PSet( - limit = cms.untracked.int32(0) - ), - MagneticField = cms.untracked.PSet( - limit = cms.untracked.int32(1) - ) - ) -) - -process.testField = cms.EDAnalyzer("testMagneticField") -process.p1 = cms.Path(process.testField) - ### Activate the check of finding volumes at random points. ### This test is useful during developlment of new geometries to check diff --git a/MagneticField/GeomBuilder/plugins/VolumeBasedMagneticFieldESProducer.cc b/MagneticField/GeomBuilder/plugins/VolumeBasedMagneticFieldESProducer.cc index 7b1e2d2e79198..e6b9fd9b8dd76 100644 --- a/MagneticField/GeomBuilder/plugins/VolumeBasedMagneticFieldESProducer.cc +++ b/MagneticField/GeomBuilder/plugins/VolumeBasedMagneticFieldESProducer.cc @@ -29,11 +29,11 @@ namespace magneticfield { std::unique_ptr produce(const IdealMagneticFieldRecord& iRecord); - private: // forbid copy ctor and assignment op. VolumeBasedMagneticFieldESProducer(const VolumeBasedMagneticFieldESProducer&) = delete; const VolumeBasedMagneticFieldESProducer& operator=(const VolumeBasedMagneticFieldESProducer&) = delete; + private: const bool debug_; const bool useParametrizedTrackerField_; const MagFieldConfig conf_; @@ -60,9 +60,7 @@ VolumeBasedMagneticFieldESProducer::VolumeBasedMagneticFieldESProducer(const edm // ------------ method called to produce the data ------------ std::unique_ptr VolumeBasedMagneticFieldESProducer::produce(const IdealMagneticFieldRecord& iRecord) { - if (debug_) { - edm::LogPrint("VolumeBasedMagneticFieldESProducer") << "VolumeBasedMagneticFieldESProducer::produce() " << version_; - } + LogTrace("MagGeoBuilder") << "VolumeBasedMagneticFieldESProducer::produce() " << version_; auto cpv = iRecord.getTransientHandle(cpvToken_); MagGeoBuilderFromDDD builder(conf_.version, conf_.geometryVersion, debug_); diff --git a/MagneticField/GeomBuilder/plugins/VolumeBasedMagneticFieldESProducerFromDB.cc b/MagneticField/GeomBuilder/plugins/VolumeBasedMagneticFieldESProducerFromDB.cc index fd5cc4ba1ca3c..2db12531a3cf1 100644 --- a/MagneticField/GeomBuilder/plugins/VolumeBasedMagneticFieldESProducerFromDB.cc +++ b/MagneticField/GeomBuilder/plugins/VolumeBasedMagneticFieldESProducerFromDB.cc @@ -87,8 +87,8 @@ VolumeBasedMagneticFieldESProducerFromDB::VolumeBasedMagneticFieldESProducerFrom mayGetConfigToken_, [](auto const& iGet, edm::ESTransientHandle iHandle) { auto const label = closerNominalLabel(iHandle->m_avg_current); - edm::LogInfo("MagneticFieldDB") << "Current :" << iHandle->m_avg_current - << " (from RunInfo DB); using map configuration with label: " << label; + edm::LogInfo("MagneticField") << "Current :" << iHandle->m_avg_current + << " (from RunInfo DB); using map configuration with label: " << label; return iGet("", label); }, edm::ESProductTag("", "")); @@ -96,8 +96,8 @@ VolumeBasedMagneticFieldESProducerFromDB::VolumeBasedMagneticFieldESProducerFrom } else { //we know exactly what we are going to get auto const label = closerNominalLabel(current); - edm::LogInfo("MagneticFieldDB") << "Current :" << current - << " (from valueOverride card); using map configuration with label: " << label; + edm::LogInfo("MagneticField") << "Current :" << current + << " (from valueOverride card); using map configuration with label: " << label; setWhatProduced( this, &VolumeBasedMagneticFieldESProducerFromDB::chooseConfigViaParameter, edm::es::Label(myConfigLabel)) .setConsumes(knownFromParamConfigToken_, edm::ESInputTag(""s, std::string(label))); @@ -144,8 +144,8 @@ std::unique_ptr VolumeBasedMagneticFieldESProducerFromDB::produce std::unique_ptr paramField = ParametrizedMagneticFieldFactory::get(conf->slaveFieldVersion, conf->slaveFieldParameters); - edm::LogInfo("MagneticFieldDB") << "Version: " << conf->version << " geometryVersion: " << conf->geometryVersion - << " slaveFieldVersion: " << conf->slaveFieldVersion; + edm::LogInfo("MagneticField") << "Version: " << conf->version << " geometryVersion: " << conf->geometryVersion + << " slaveFieldVersion: " << conf->slaveFieldVersion; if (conf->version == "parametrizedMagneticField") { // The map consist of only the parametrization in this case diff --git a/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducer.cc b/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducer.cc index fd4c82320da46..e858aee9dfe56 100644 --- a/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducer.cc +++ b/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducer.cc @@ -55,9 +55,7 @@ DD4hep_VolumeBasedMagneticFieldESProducer::DD4hep_VolumeBasedMagneticFieldESProd useParametrizedTrackerField_{iConfig.getParameter("useParametrizedTrackerField")}, conf_{iConfig, debug_}, version_{iConfig.getParameter("version")} { - // LogVerbatim used because LogTrace messages don't seem to appear even when fully enabled. - edm::LogVerbatim("DD4hep_VolumeBasedMagneticFieldESProducer") - << "info:Constructing a DD4hep_VolumeBasedMagneticFieldESProducer"; + LogTrace("MagGeoBuilder") << "info:Constructing a DD4hep_VolumeBasedMagneticFieldESProducer"; auto cc = setWhatProduced(this, iConfig.getUntrackedParameter("label", "")); cc.setConsumes(cpvToken_, edm::ESInputTag{"", "magfield"}); @@ -70,8 +68,7 @@ DD4hep_VolumeBasedMagneticFieldESProducer::DD4hep_VolumeBasedMagneticFieldESProd std::unique_ptr DD4hep_VolumeBasedMagneticFieldESProducer::produce( const IdealMagneticFieldRecord& iRecord) { if (debug_) { - edm::LogVerbatim("DD4hep_VolumeBasedMagneticFieldESProducer") - << "DD4hep_VolumeBasedMagneticFieldESProducer::produce() " << version_; + LogTrace("MagGeoBuilder") << "DD4hep_VolumeBasedMagneticFieldESProducer::produce() " << version_; } MagGeoBuilder builder(conf_.version, conf_.geometryVersion, debug_); @@ -90,12 +87,12 @@ std::unique_ptr DD4hep_VolumeBasedMagneticFieldESProducer::produc const cms::DDCompactView* cpvPtr = cpv.product(); const cms::DDDetector* det = cpvPtr->detector(); builder.build(det); - edm::LogVerbatim("DD4hep_VolumeBasedMagneticFieldESProducer") << "produce() finished build"; + LogTrace("MagGeoBuilder") << "produce() finished build"; // Get slave field (from ES) const MagneticField* paramField = nullptr; if (useParametrizedTrackerField_) { - edm::LogVerbatim("DD4hep_VolumeBasedMagneticFieldESProducer") << "Getting MF for parametrized field"; + LogTrace("MagGeoBuilder") << "Getting MF for parametrized field"; paramField = &iRecord.get(paramFieldToken_); } return std::make_unique(conf_.geometryVersion, diff --git a/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducerFromDB.cc b/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducerFromDB.cc index 721d8bed7c37c..7e5ac8c0fbcb5 100644 --- a/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducerFromDB.cc +++ b/MagneticField/GeomBuilder/plugins/dd4hep/DD4hep_VolumeBasedMagneticFieldESProducerFromDB.cc @@ -91,8 +91,8 @@ DD4hep_VolumeBasedMagneticFieldESProducerFromDB::DD4hep_VolumeBasedMagneticField mayGetConfigToken_, [](auto const& iGet, edm::ESTransientHandle iHandle) { auto const label = closerNominalLabel(iHandle->m_avg_current); - edm::LogInfo("MagneticFieldDB") << "Current :" << iHandle->m_avg_current - << " (from RunInfo DB); using map configuration with label: " << label; + edm::LogInfo("MagneticField") << "Current :" << iHandle->m_avg_current + << " (from RunInfo DB); using map configuration with label: " << label; return iGet("", label); }, edm::ESProductTag("", "")); @@ -100,8 +100,8 @@ DD4hep_VolumeBasedMagneticFieldESProducerFromDB::DD4hep_VolumeBasedMagneticField } else { //we know exactly what we are going to get auto const label = closerNominalLabel(current); - edm::LogInfo("MagneticFieldDB") << "Current :" << current - << " (from valueOverride card); using map configuration with label: " << label; + edm::LogInfo("MagneticField") << "Current :" << current + << " (from valueOverride card); using map configuration with label: " << label; setWhatProduced( this, &DD4hep_VolumeBasedMagneticFieldESProducerFromDB::chooseConfigViaParameter, edm::es::Label(myConfigLabel)) .setConsumes(knownFromParamConfigToken_, edm::ESInputTag(""s, std::string(label))); @@ -148,8 +148,8 @@ std::unique_ptr DD4hep_VolumeBasedMagneticFieldESProducerFromDB:: std::unique_ptr paramField = ParametrizedMagneticFieldFactory::get(conf->slaveFieldVersion, conf->slaveFieldParameters); - edm::LogInfo("MagneticFieldDB") << "Version: " << conf->version << " geometryVersion: " << conf->geometryVersion - << " slaveFieldVersion: " << conf->slaveFieldVersion; + edm::LogInfo("MagneticField") << "Version: " << conf->version << " geometryVersion: " << conf->geometryVersion + << " slaveFieldVersion: " << conf->slaveFieldVersion; if (conf->version == "parametrizedMagneticField") { // The map consist of only the parametrization in this case diff --git a/MagneticField/GeomBuilder/src/DD4hep_MagGeoBuilder.cc b/MagneticField/GeomBuilder/src/DD4hep_MagGeoBuilder.cc index 9d16d05b227b9..f108f51715d38 100644 --- a/MagneticField/GeomBuilder/src/DD4hep_MagGeoBuilder.cc +++ b/MagneticField/GeomBuilder/src/DD4hep_MagGeoBuilder.cc @@ -391,9 +391,9 @@ void MagGeoBuilder::buildMagVolumes(const handles& volumes, mapmagFile) != interpolators.end()) { mp = interpolators[vol->magFile]; } else { - edm::LogError("MagGeoBuilder|buildMagVolumes") - << "No interpolator found for file " << vol->magFile << " vol: " << vol->volumeno << "\n" - << interpolators.size(); + edm::LogError("MagGeoBuilder") << "No interpolator found for file " << vol->magFile << " vol: " << vol->volumeno + << "\n" + << interpolators.size(); } // Search for [volume,sector] in the list of scaling factors; sector = 0 handled as wildcard @@ -409,8 +409,8 @@ void MagGeoBuilder::buildMagVolumes(const handles& volumes, mapvolumeno << "[" - << vol->copyno << "] (key:" << key << ")"; + LogTrace("MagGeoBuilder") << "Applying scaling factor " << sf << " to " << vol->volumeno << "[" << vol->copyno + << "] (key:" << key << ")"; } const GloballyPositioned* gpos = vol->placement(); diff --git a/MagneticField/GeomBuilder/src/DD4hep_volumeHandle.cc b/MagneticField/GeomBuilder/src/DD4hep_volumeHandle.cc index 386670ef88d4d..c649064169d1b 100644 --- a/MagneticField/GeomBuilder/src/DD4hep_volumeHandle.cc +++ b/MagneticField/GeomBuilder/src/DD4hep_volumeHandle.cc @@ -66,21 +66,21 @@ volumeHandle::volumeHandle(const cms::DDFilteredView &fv, bool expand2Pi, bool d isIronFlag = true; if (debug) { - LogTrace("magneticfield::volumeHandle") << " RMin = " << theRMin << newln << " RMax = " << theRMax; + LogTrace("MagGeoBuilder") << " RMin = " << theRMin << newln << " RMax = " << theRMax; if (theRMin < 0 || theRN < theRMin || theRMax < theRN) - LogTrace("magneticfield::volumeHandle") << "*** WARNING: wrong RMin/RN/RMax"; + LogTrace("MagGeoBuilder") << "*** WARNING: wrong RMin/RN/RMax"; - LogTrace("magneticfield::volumeHandle") - << "Summary: " << name << " " << copyno << " shape = " << theShape << " trasl " << center() << " R " - << center().perp() << " phi " << center().phi() << " magFile " << magFile << " Material= " << fv.materialName() - << " isIron= " << isIronFlag << " masterSector= " << masterSector; + LogTrace("MagGeoBuilder") << "Summary: " << name << " " << copyno << " shape = " << theShape << " trasl " + << center() << " R " << center().perp() << " phi " << center().phi() << " magFile " + << magFile << " Material= " << fv.materialName() << " isIron= " << isIronFlag + << " masterSector= " << masterSector; - LogTrace("magneticfield::volumeHandle") << " Orientation of surfaces:"; + LogTrace("MagGeoBuilder") << " Orientation of surfaces:"; std::string sideName[3] = {"positiveSide", "negativeSide", "onSurface"}; for (int i = 0; i < 6; ++i) { if (surfaces[i] != nullptr) - LogTrace("magneticfield::volumeHandle") << " " << i << ":" << sideName[surfaces[i]->side(center_, 0.3)]; + LogTrace("MagGeoBuilder") << " " << i << ":" << sideName[surfaces[i]->side(center_, 0.3)]; } } } @@ -124,7 +124,7 @@ void volumeHandle::referencePlane(const cms::DDFilteredView &fv) { refRot.GetComponents(x, y, z); if (debug) { if (x.Cross(y).Dot(z) < 0.5) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: Rotation is not RH "; + LogTrace("MagGeoBuilder") << "*** WARNING: Rotation is not RH "; } } @@ -143,7 +143,7 @@ void volumeHandle::referencePlane(const cms::DDFilteredView &fv) { // Check correct orientation if (debug) { - LogTrace("magneticfield::volumeHandle") << "Refplane pos " << refPlane->position(); + LogTrace("MagGeoBuilder") << "Refplane pos " << refPlane->position(); // See comments above for the conventions for orientation. LocalVector globalZdir(0., 0., 1.); // Local direction of the axis along global Z @@ -158,7 +158,7 @@ void volumeHandle::referencePlane(const cms::DDFilteredView &fv) { } float chk = refPlane->toGlobal(globalZdir).dot(GlobalVector(0, 0, 1)); if (chk < .999) - LogTrace("magneticfield::volumeHandle") << "*** WARNING RefPlane check failed!***" << chk; + LogTrace("MagGeoBuilder") << "*** WARNING RefPlane check failed!***" << chk; } } diff --git a/MagneticField/GeomBuilder/src/MagGeoBuilderFromDDD.cc b/MagneticField/GeomBuilder/src/MagGeoBuilderFromDDD.cc index e82842b27fd86..48e7354187ecb 100644 --- a/MagneticField/GeomBuilder/src/MagGeoBuilderFromDDD.cc +++ b/MagneticField/GeomBuilder/src/MagGeoBuilderFromDDD.cc @@ -460,9 +460,9 @@ void MagGeoBuilderFromDDD::buildMagVolumes(const handles& volumes, mapmagFile) != interpolators.end()) { mp = interpolators[(*vol)->magFile]; } else { - edm::LogError("MagGeoBuilderFromDDDbuildMagVolumes") - << "No interpolator found for file " << (*vol)->magFile << " vol: " << (*vol)->volumeno << "\n" - << interpolators.size() << endl; + edm::LogError("MagGeoBuilder") << "No interpolator found for file " << (*vol)->magFile + << " vol: " << (*vol)->volumeno << "\n" + << interpolators.size() << endl; } // Search for [volume,sector] in the list of scaling factors; sector = 0 handled as wildcard @@ -478,9 +478,8 @@ void MagGeoBuilderFromDDD::buildMagVolumes(const handles& volumes, mapvolumeno << "[" << (*vol)->copyno << "] (key:" << key - << ")" << endl; + edm::LogInfo("MagGeoBuilder") << "Applying scaling factor " << sf << " to " << (*vol)->volumeno << "[" + << (*vol)->copyno << "] (key:" << key << ")" << endl; } const GloballyPositioned* gpos = (*vol)->placement(); diff --git a/MagneticField/GeomBuilder/src/buildBox.icc b/MagneticField/GeomBuilder/src/buildBox.icc index 34eaeef404fbc..63f269cee2b22 100644 --- a/MagneticField/GeomBuilder/src/buildBox.icc +++ b/MagneticField/GeomBuilder/src/buildBox.icc @@ -5,7 +5,7 @@ */ void volumeHandle::buildBox() { - LogTrace("magneticfield::volumeHandle") << "Building box surfaces...: "; + LogTrace("MagGeoBuilder") << "Building box surfaces...: "; DDBox box(solid); // Old DD needs mm to cm conversion, but DD4hep needs no conversion. @@ -70,27 +70,26 @@ void volumeHandle::buildBox() { rot_phi = Surface::RotationType(planeZAxis, planeYAxis); // opposite to x axis } - LogTrace("magneticfield::volumeHandle") - << " halfX: " << halfX << " halfY: " << halfY << " halfZ: " << halfZ << " RN: " << theRN; + LogTrace("MagGeoBuilder") << " halfX: " << halfX << " halfY: " << halfY << " halfZ: " << halfZ << " RN: " << theRN; - LogTrace("magneticfield::volumeHandle") - << "pos_outer " << pos_outer << " " << pos_outer.perp() << " " << pos_outer.phi() << newln << "pos_inner " - << pos_inner << " " << pos_inner.perp() << " " << pos_inner.phi() << newln << "pos_zplus " << pos_zplus << " " - << pos_zplus.perp() << " " << pos_zplus.phi() << newln << "pos_zminus " << pos_zminus << " " - << pos_zminus.perp() << " " << pos_zminus.phi() << newln << "pos_phiplus " << pos_phiplus << " " - << pos_phiplus.perp() << " " << pos_phiplus.phi() << newln << "pos_phiminus " << pos_phiminus << " " - << pos_phiminus.perp() << " " << pos_phiminus.phi(); + LogTrace("MagGeoBuilder") << "pos_outer " << pos_outer << " " << pos_outer.perp() << " " << pos_outer.phi() + << newln << "pos_inner " << pos_inner << " " << pos_inner.perp() << " " + << pos_inner.phi() << newln << "pos_zplus " << pos_zplus << " " << pos_zplus.perp() + << " " << pos_zplus.phi() << newln << "pos_zminus " << pos_zminus << " " + << pos_zminus.perp() << " " << pos_zminus.phi() << newln << "pos_phiplus " << pos_phiplus + << " " << pos_phiplus.perp() << " " << pos_phiplus.phi() << newln << "pos_phiminus " + << pos_phiminus << " " << pos_phiminus.perp() << " " << pos_phiminus.phi(); // Check ordering. if (debug) { if (pos_outer.perp() < pos_inner.perp()) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: pos_outer < pos_inner for box"; + LogTrace("MagGeoBuilder") << "*** WARNING: pos_outer < pos_inner for box"; } if (pos_zplus.z() < pos_zminus.z()) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: pos_zplus < pos_zminus for box"; + LogTrace("MagGeoBuilder") << "*** WARNING: pos_zplus < pos_zminus for box"; } if (Geom::Phi(pos_phiplus.phi() - pos_phiminus.phi()) < 0.) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: pos_phiplus < pos_phiminus for box"; + LogTrace("MagGeoBuilder") << "*** WARNING: pos_phiplus < pos_phiminus for box"; } } @@ -102,9 +101,9 @@ void volumeHandle::buildBox() { surfaces[phiplus] = new Plane(pos_phiplus, rot_phi); surfaces[phiminus] = new Plane(pos_phiminus, rot_phi); - LogTrace("magneticfield::volumeHandle") << "rot_R " << surfaces[outer]->toGlobal(LocalVector(0., 0., 1.)) << newln - << "rot_Z " << surfaces[zplus]->toGlobal(LocalVector(0., 0., 1.)) << newln - << "rot_phi " << surfaces[phiplus]->toGlobal(LocalVector(0., 0., 1.)); + LogTrace("MagGeoBuilder") << "rot_R " << surfaces[outer]->toGlobal(LocalVector(0., 0., 1.)) << newln << "rot_Z " + << surfaces[zplus]->toGlobal(LocalVector(0., 0., 1.)) << newln << "rot_phi " + << surfaces[phiplus]->toGlobal(LocalVector(0., 0., 1.)); // Save volume boundaries theRMin = std::abs(surfaces[inner]->toLocal(GlobalPoint(0, 0, 0)).z()); diff --git a/MagneticField/GeomBuilder/src/buildCons.icc b/MagneticField/GeomBuilder/src/buildCons.icc index e375f29a6bc33..007fd5eab5b09 100644 --- a/MagneticField/GeomBuilder/src/buildCons.icc +++ b/MagneticField/GeomBuilder/src/buildCons.icc @@ -7,7 +7,7 @@ #include "DataFormats/GeometrySurface/interface/SimpleConeBounds.h" void volumeHandle::buildCons() { - LogTrace("magneticfield::volumeHandle") << "Building cons surfaces...: "; + LogTrace("MagGeoBuilder") << "Building cons surfaces...: "; DDCons cons(solid); @@ -21,10 +21,9 @@ void volumeHandle::buildCons() { double startPhi = cons.phiFrom(); double deltaPhi = cons.deltaPhi(); - LogTrace("magneticfield::volumeHandle") - << "zhalf " << zhalf << newln << "rInMinusZ " << rInMinusZ << newln << "rOutMinusZ " << rOutMinusZ << newln - << "rInPlusZ " << rInPlusZ << newln << "rOutPlusZ " << rOutPlusZ << newln << "phiFrom " << startPhi << newln - << "deltaPhi " << deltaPhi; + LogTrace("MagGeoBuilder") << "zhalf " << zhalf << newln << "rInMinusZ " << rInMinusZ << newln << "rOutMinusZ " + << rOutMinusZ << newln << "rInPlusZ " << rInPlusZ << newln << "rOutPlusZ " << rOutPlusZ + << newln << "phiFrom " << startPhi << newln << "deltaPhi " << deltaPhi; // recalculate center: (for a DDCons, DDD gives 0,0,Z) double rZmin = (rInMinusZ + rOutMinusZ) / 2.; @@ -57,8 +56,7 @@ void volumeHandle::buildCons() { surfaces[outer] = new Cone(Surface::PositionType(0, 0, center_.z()), Surface::RotationType(), cb.vertex(), cb.openingAngle()); - LogTrace("magneticfield::volumeHandle") - << "Outer surface: cone, vtx: " << cb.vertex() << " angle " << cb.openingAngle(); + LogTrace("MagGeoBuilder") << "Outer surface: cone, vtx: " << cb.vertex() << " angle " << cb.openingAngle(); } // All other surfaces buildPhiZSurf(startPhi, deltaPhi, zhalf, rCentr); diff --git a/MagneticField/GeomBuilder/src/buildPseudoTrap.icc b/MagneticField/GeomBuilder/src/buildPseudoTrap.icc index 019e2ab73408c..9075df6e974d6 100644 --- a/MagneticField/GeomBuilder/src/buildPseudoTrap.icc +++ b/MagneticField/GeomBuilder/src/buildPseudoTrap.icc @@ -12,7 +12,7 @@ */ void volumeHandle::buildPseudoTrap() { - LogTrace("magneticfield::volumeHandle") << "Building PseudoTrap surfaces...: "; + LogTrace("MagGeoBuilder") << "Building PseudoTrap surfaces...: "; DDPseudoTrap ptrap(solid); @@ -26,20 +26,20 @@ void volumeHandle::buildPseudoTrap() { double radius = convertUnits(ptrap.radius()); bool atMinusZ = ptrap.atMinusZ(); - LogTrace("magneticfield::volumeHandle") - << "halfZ " << halfZ << newln << "x1 " << x1 << newln << "x2 " << x2 << newln << "y1 " - << y1 << newln << "y2 " << y2 << newln << "radius " << radius << newln << "atMinusZ " << atMinusZ; + LogTrace("MagGeoBuilder") << "halfZ " << halfZ << newln << "x1 " << x1 << newln << "x2 " << x2 + << newln << "y1 " << y1 << newln << "y2 " << y2 << newln << "radius " + << radius << newln << "atMinusZ " << atMinusZ; // Just check assumptions on parameters... const double epsilon = 1e-5; if (debug) { if (y1 - y2 > epsilon) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: unexpected pseudotrapezoid parameters."; + LogTrace("MagGeoBuilder") << "*** WARNING: unexpected pseudotrapezoid parameters."; } // Check that volume is convex (no concave volume in current geometry...) if (radius * (atMinusZ ? -1. : +1) < 0.) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: pseudotrapezoid is concave"; + LogTrace("MagGeoBuilder") << "*** WARNING: pseudotrapezoid is concave"; } } // CAVEAT: pseudotraps are rotated in a different way as traps, @@ -81,37 +81,36 @@ void volumeHandle::buildPseudoTrap() { if (std::abs(rcheck - fR) > 100. * epsilon) { //FIXME! std::stringstream formatOutput; formatOutput << setprecision(10) << rcheck << " " << fR << " " << std::abs(rcheck - fR); - LogTrace("magneticfield::volumeHandle") - << "*** WARNING: Cylinder surface not centered on beam axis " << formatOutput.str(); + LogTrace("MagGeoBuilder") << "*** WARNING: Cylinder surface not centered on beam axis " << formatOutput.str(); } } if (debug) { - LogTrace("magneticfield::volumeHandle") - << "RN " << theRN << newln << "pos_Rplane " << pos_Rplane << " " << pos_Rplane.perp() << " " - << pos_Rplane.phi() << newln << "pos_zplus " << pos_zplus << " " << pos_zplus.perp() << " " - << pos_zplus.phi() << newln << "pos_zminus " << pos_zminus << " " << pos_zminus.perp() << " " - << pos_zminus.phi() << newln << "pos_phiplus " << pos_phiplus << " " << pos_phiplus.perp() << " " - << pos_phiplus.phi() << newln << "pos_phiminus " << pos_phiminus << " " << pos_phiminus.perp() << " " - << pos_phiminus.phi(); + LogTrace("MagGeoBuilder") << "RN " << theRN << newln << "pos_Rplane " << pos_Rplane << " " + << pos_Rplane.perp() << " " << pos_Rplane.phi() << newln << "pos_zplus " << pos_zplus + << " " << pos_zplus.perp() << " " << pos_zplus.phi() << newln << "pos_zminus " + << pos_zminus << " " << pos_zminus.perp() << " " << pos_zminus.phi() << newln + << "pos_phiplus " << pos_phiplus << " " << pos_phiplus.perp() << " " << pos_phiplus.phi() + << newln << "pos_phiminus " << pos_phiminus << " " << pos_phiminus.perp() << " " + << pos_phiminus.phi(); } // Check ordering. if ((pos_Rplane.perp() < radius) == atMinusZ) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: pos_outer < pos_inner for pseudotrapezoid"; + LogTrace("MagGeoBuilder") << "*** WARNING: pos_outer < pos_inner for pseudotrapezoid"; } if (pos_zplus.z() < pos_zminus.z()) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: pos_zplus < pos_zminus for pseudotrapezoid"; + LogTrace("MagGeoBuilder") << "*** WARNING: pos_zplus < pos_zminus for pseudotrapezoid"; } if (Geom::Phi(pos_phiplus.phi() - pos_phiminus.phi()) < 0.) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: pos_phiplus < pos_phiminus for pseudotrapezoid"; + LogTrace("MagGeoBuilder") << "*** WARNING: pos_phiplus < pos_phiminus for pseudotrapezoid"; } GlobalVector z_phiplus = (refPlane->toGlobal(LocalVector((x2 - x1) / 2., 0., halfZ))).unit(); GlobalVector z_phiminus = (refPlane->toGlobal(LocalVector(-(x2 - x1) / 2., 0., halfZ))).unit(); - LogTrace("magneticfield::volumeHandle") << "z_phiplus " << z_phiplus << " " << z_phiplus.phi() << newln - << "z_phiminus " << z_phiminus << " " << z_phiminus.phi(); + LogTrace("MagGeoBuilder") << "z_phiplus " << z_phiplus << " " << z_phiplus.phi() << newln << "z_phiminus " + << z_phiminus << " " << z_phiminus.phi(); Surface::RotationType rot_R(planeYAxis, planeXAxis); Surface::RotationType rot_Z(planeXAxis, planeZAxis); @@ -127,13 +126,12 @@ void volumeHandle::buildPseudoTrap() { surfaces[phiplus] = new Plane(pos_phiplus, rot_phiplus); surfaces[phiminus] = new Plane(pos_phiminus, rot_phiminus); - LogTrace("magneticfield::volumeHandle") - << "rot_R " << surfaces[plane_side]->toGlobal(LocalVector(0., 0., 1.)) << newln << "rot_Z " - << surfaces[zplus]->toGlobal(LocalVector(0., 0., 1.)) << newln << "rot_phi+ " - << surfaces[phiplus]->toGlobal(LocalVector(0., 0., 1.)) << " phi " - << surfaces[phiplus]->toGlobal(LocalVector(0., 0., 1.)).phi() << newln << "rot_phi- " - << surfaces[phiminus]->toGlobal(LocalVector(0., 0., 1.)) << " phi " - << surfaces[phiminus]->toGlobal(LocalVector(0., 0., 1.)).phi(); + LogTrace("MagGeoBuilder") << "rot_R " << surfaces[plane_side]->toGlobal(LocalVector(0., 0., 1.)) << newln << "rot_Z " + << surfaces[zplus]->toGlobal(LocalVector(0., 0., 1.)) << newln << "rot_phi+ " + << surfaces[phiplus]->toGlobal(LocalVector(0., 0., 1.)) << " phi " + << surfaces[phiplus]->toGlobal(LocalVector(0., 0., 1.)).phi() << newln << "rot_phi- " + << surfaces[phiminus]->toGlobal(LocalVector(0., 0., 1.)) << " phi " + << surfaces[phiminus]->toGlobal(LocalVector(0., 0., 1.)).phi(); // Save volume boundaries double R1 = std::abs(surfaces[plane_side]->toLocal(GlobalPoint(0, 0, 0)).z()); diff --git a/MagneticField/GeomBuilder/src/buildTrap.icc b/MagneticField/GeomBuilder/src/buildTrap.icc index ab62784bd3b08..a205b9abb825f 100644 --- a/MagneticField/GeomBuilder/src/buildTrap.icc +++ b/MagneticField/GeomBuilder/src/buildTrap.icc @@ -5,7 +5,7 @@ */ void volumeHandle::buildTrap() { - LogTrace("magneticfield::volumeHandle") << "Building trapezoid surfaces...: "; + LogTrace("MagGeoBuilder") << "Building trapezoid surfaces...: "; DDTrap trap(solid); //FIXME @@ -23,17 +23,17 @@ void volumeHandle::buildTrap() { double alpha1 = trap.alpha1(); double alpha2 = trap.alpha2(); - LogTrace("magneticfield::volumeHandle") - << "x1 " << x1 << newln << "x2 " << x2 << newln << "x3 " << x3 << newln << "x4 " << x4 << newln << "y1 " << y1 - << newln << "y2 " << y2 << newln << "theta " << theta << newln << "phi " << phi << newln << "halfZ " << halfZ - << newln << "alpha1 " << alpha1 << newln << "alpha2 " << alpha2; + LogTrace("MagGeoBuilder") << "x1 " << x1 << newln << "x2 " << x2 << newln << "x3 " << x3 << newln << "x4 " << x4 + << newln << "y1 " << y1 << newln << "y2 " << y2 << newln << "theta " << theta << newln + << "phi " << phi << newln << "halfZ " << halfZ << newln << "alpha1 " << alpha1 << newln + << "alpha2 " << alpha2; // Just check assumptions on parameters... if (debug) { const double epsilon = 1e-5; if (theta > epsilon || phi > epsilon || y1 - y2 > epsilon || x1 - x3 > epsilon || x2 - x4 > epsilon || alpha1 - alpha2 > epsilon) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: unexpected trapezoid parameters."; + LogTrace("MagGeoBuilder") << "*** WARNING: unexpected trapezoid parameters."; } } @@ -69,25 +69,25 @@ void volumeHandle::buildTrap() { GlobalPoint pos_phiplus(refPlane->toGlobal(LocalPoint(-halfX, 0., 0.))); GlobalPoint pos_phiminus(refPlane->toGlobal(LocalPoint(halfX, 0., 0.))); - LogTrace("magneticfield::volumeHandle") - << "RN " << theRN << newln // RN line needs extra space to line up - << "pos_outer " << pos_outer << " " << pos_outer.perp() << " " << pos_outer.phi() << newln << "pos_inner " - << pos_inner << " " << pos_inner.perp() << " " << pos_inner.phi() << newln << "pos_zplus " << pos_zplus << " " - << pos_zplus.perp() << " " << pos_zplus.phi() << newln << "pos_zminus " << pos_zminus << " " - << pos_zminus.perp() << " " << pos_zminus.phi() << newln << "pos_phiplus " << pos_phiplus << " " - << pos_phiplus.perp() << " " << pos_phiplus.phi() << newln << "pos_phiminus " << pos_phiminus << " " - << pos_phiminus.perp() << " " << pos_phiminus.phi(); + LogTrace("MagGeoBuilder") << "RN " << theRN << newln // RN line needs extra space to line up + << "pos_outer " << pos_outer << " " << pos_outer.perp() << " " << pos_outer.phi() + << newln << "pos_inner " << pos_inner << " " << pos_inner.perp() << " " + << pos_inner.phi() << newln << "pos_zplus " << pos_zplus << " " << pos_zplus.perp() + << " " << pos_zplus.phi() << newln << "pos_zminus " << pos_zminus << " " + << pos_zminus.perp() << " " << pos_zminus.phi() << newln << "pos_phiplus " << pos_phiplus + << " " << pos_phiplus.perp() << " " << pos_phiplus.phi() << newln << "pos_phiminus " + << pos_phiminus << " " << pos_phiminus.perp() << " " << pos_phiminus.phi(); // Check ordering. if (debug) { if (pos_outer.perp() < pos_inner.perp()) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: pos_outer < pos_inner for trapezoid"; + LogTrace("MagGeoBuilder") << "*** WARNING: pos_outer < pos_inner for trapezoid"; } if (pos_zplus.z() < pos_zminus.z()) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: pos_zplus < pos_zminus for trapezoid"; + LogTrace("MagGeoBuilder") << "*** WARNING: pos_zplus < pos_zminus for trapezoid"; } if (Geom::Phi(pos_phiplus.phi() - pos_phiminus.phi()) < 0.) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: pos_phiplus < pos_phiminus for trapezoid"; + LogTrace("MagGeoBuilder") << "*** WARNING: pos_phiplus < pos_phiminus for trapezoid"; } } @@ -96,7 +96,7 @@ void volumeHandle::buildTrap() { GlobalVector y_phiminusV = (refPlane->toGlobal(LocalVector((tan(alpha1) * y1 + (x2 - x1) / 2.), y1, 0.))); GlobalVector y_phiminus = y_phiminusV.unit(); - LogTrace("magneticfield::volumeHandle") << "y_phiplus " << y_phiplus << newln << "y_phiminus " << y_phiminus; + LogTrace("MagGeoBuilder") << "y_phiplus " << y_phiplus << newln << "y_phiminus " << y_phiminus; Surface::RotationType rot_R(planeZAxis, planeXAxis); Surface::RotationType rot_Z(planeXAxis, planeYAxis); @@ -124,16 +124,15 @@ void volumeHandle::buildTrap() { } else { thePhiMin = min((pos_phiminus + y_phiminusV).phi(), (pos_phiminus - y_phiminusV).phi()); } - LogTrace("magneticfield::volumeHandle") - << "rot_R " << surfaces[outer]->toGlobal(LocalVector(0., 0., 1.)) << newln << "rot_Z " - << surfaces[zplus]->toGlobal(LocalVector(0., 0., 1.)) << newln << "rot_phi+ " - << surfaces[phiplus]->toGlobal(LocalVector(0., 0., 1.)) << " phi " - << surfaces[phiplus]->toGlobal(LocalVector(0., 0., 1.)).phi() << newln << "rot_phi- " - << surfaces[phiminus]->toGlobal(LocalVector(0., 0., 1.)) << " phi " - << surfaces[phiminus]->toGlobal(LocalVector(0., 0., 1.)).phi(); + LogTrace("MagGeoBuilder") << "rot_R " << surfaces[outer]->toGlobal(LocalVector(0., 0., 1.)) << newln << "rot_Z " + << surfaces[zplus]->toGlobal(LocalVector(0., 0., 1.)) << newln << "rot_phi+ " + << surfaces[phiplus]->toGlobal(LocalVector(0., 0., 1.)) << " phi " + << surfaces[phiplus]->toGlobal(LocalVector(0., 0., 1.)).phi() << newln << "rot_phi- " + << surfaces[phiminus]->toGlobal(LocalVector(0., 0., 1.)) << " phi " + << surfaces[phiminus]->toGlobal(LocalVector(0., 0., 1.)).phi(); if (debug) { if (std::abs(surfaces[phiminus]->position().phi() - thePhiMin) > 1e-5) { - LogTrace("magneticfield::volumeHandle") << " Trapez. phiMin = " << thePhiMin; + LogTrace("MagGeoBuilder") << " Trapez. phiMin = " << thePhiMin; } } } diff --git a/MagneticField/GeomBuilder/src/buildTruncTubs.icc b/MagneticField/GeomBuilder/src/buildTruncTubs.icc index cb3288eff8784..1e8f6e3d367c1 100644 --- a/MagneticField/GeomBuilder/src/buildTruncTubs.icc +++ b/MagneticField/GeomBuilder/src/buildTruncTubs.icc @@ -10,7 +10,7 @@ */ void volumeHandle::buildTruncTubs() { - LogTrace("magneticfield::volumeHandle") << "Building TruncTubs surfaces...: "; + LogTrace("MagGeoBuilder") << "Building TruncTubs surfaces...: "; DDTruncTubs tubs(solid); @@ -25,10 +25,10 @@ void volumeHandle::buildTruncTubs() { double cutAtDelta = convertUnits(tubs.cutAtDelta()); // truncation at end of the tube-section bool cutInside = tubs.cutInside(); // true, if truncation is on the inner side of the tube-section - LogTrace("magneticfield::volumeHandle") - << "zhalf " << zhalf << newln << "rIn " << rIn << newln << "rOut " << rOut << newln - << "startPhi " << startPhi << newln << "deltaPhi " << deltaPhi << newln << "cutAtStart " << cutAtStart - << newln << "cutAtDelta " << cutAtDelta << newln << "cutInside " << cutInside; + LogTrace("MagGeoBuilder") << "zhalf " << zhalf << newln << "rIn " << rIn << newln << "rOut " << rOut + << newln << "startPhi " << startPhi << newln << "deltaPhi " << deltaPhi << newln + << "cutAtStart " << cutAtStart << newln << "cutAtDelta " << cutAtDelta << newln + << "cutInside " << cutInside; // // GlobalVector planeXAxis = refPlane->toGlobal(LocalVector( 1, 0, 0)); @@ -86,14 +86,14 @@ void volumeHandle::buildTruncTubs() { buildPhiZSurf(startPhi, deltaPhi, zhalf, rCentr); if (debug) { - LogTrace("magneticfield::volumeHandle") - << "pos_Rplane " << pos_Rplane << " " << pos_Rplane.perp() << " " << pos_Rplane.phi() << newln - << "rot_R " << surfaces[plane_side]->toGlobal(LocalVector(0., 0., 1.)) << " phi " - << surfaces[plane_side]->toGlobal(LocalVector(0., 0., 1.)).phi() << newln << "cyl radius " << rCyl; + LogTrace("MagGeoBuilder") << "pos_Rplane " << pos_Rplane << " " << pos_Rplane.perp() << " " << pos_Rplane.phi() + << newln << "rot_R " << surfaces[plane_side]->toGlobal(LocalVector(0., 0., 1.)) + << " phi " << surfaces[plane_side]->toGlobal(LocalVector(0., 0., 1.)).phi() << newln + << "cyl radius " << rCyl; // // Check ordering. if ((pos_Rplane.perp() < rCyl) != cutInside) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: pos_outer < pos_inner "; + LogTrace("MagGeoBuilder") << "*** WARNING: pos_outer < pos_inner "; } } // Save volume boundaries diff --git a/MagneticField/GeomBuilder/src/buildTubs.icc b/MagneticField/GeomBuilder/src/buildTubs.icc index 3ffa2439a0da3..bac6b816b889a 100644 --- a/MagneticField/GeomBuilder/src/buildTubs.icc +++ b/MagneticField/GeomBuilder/src/buildTubs.icc @@ -1,5 +1,5 @@ void volumeHandle::buildTubs() { - LogTrace("magneticfield::volumeHandle") << "Building tubs surfaces...: "; + LogTrace("MagGeoBuilder") << "Building tubs surfaces...: "; DDTubs tubs(solid); @@ -11,9 +11,8 @@ void volumeHandle::buildTubs() { double startPhi = tubs.startPhi(); double deltaPhi = tubs.deltaPhi(); - LogTrace("magneticfield::volumeHandle") - << "zhalf " << zhalf << newln << "rIn " << rIn << newln << "rOut " << rOut << newln << "startPhi " - << startPhi << newln << "deltaPhi " << deltaPhi; + LogTrace("MagGeoBuilder") << "zhalf " << zhalf << newln << "rIn " << rIn << newln << "rOut " << rOut + << newln << "startPhi " << startPhi << newln << "deltaPhi " << deltaPhi; // recalculate center: (for a DDTubs, DDD gives 0,0,Z) double rCentr = (rIn + rOut) / 2.; @@ -37,7 +36,7 @@ void volumeHandle::buildTubs() { if (debug) { if (dynamic_cast(&(*surfaces[outer]))->radius() < dynamic_cast(&(*surfaces[inner]))->radius()) { - LogTrace("magneticfield::volumeHandle") << "*** WARNING: pos_outer < pos_inner "; + LogTrace("MagGeometry") << "*** WARNING: pos_outer < pos_inner "; } } // Save volume boundaries diff --git a/MagneticField/Layers/src/MagBRod.cc b/MagneticField/Layers/src/MagBRod.cc index 622e109478639..3e36b2f2d2b48 100644 --- a/MagneticField/Layers/src/MagBRod.cc +++ b/MagneticField/Layers/src/MagBRod.cc @@ -23,7 +23,7 @@ MagBRod::MagBRod(vector &slabs, Geom::Phi phiMin) if (theSlabs.size() > 1) { // Set the binfinder vector zBorders; for (vector::const_iterator islab = theSlabs.begin(); islab != theSlabs.end(); ++islab) { - LogTrace("MagGeometry") << (*islab)->minZ() << endl; + LogTrace("MagGeoBuilder") << " MagBSlab minZ=" << (*islab)->minZ() << endl; //FIXME assume layers are already sorted in Z zBorders.push_back((*islab)->minZ()); } diff --git a/MagneticField/ParametrizedEngine/plugins/AutoParametrizedMagneticFieldProducer.cc b/MagneticField/ParametrizedEngine/plugins/AutoParametrizedMagneticFieldProducer.cc index b5ea6ca0d582b..0efc5c7aba8d8 100644 --- a/MagneticField/ParametrizedEngine/plugins/AutoParametrizedMagneticFieldProducer.cc +++ b/MagneticField/ParametrizedEngine/plugins/AutoParametrizedMagneticFieldProducer.cc @@ -63,8 +63,7 @@ std::unique_ptr AutoParametrizedMagneticFieldProducer::produce(co } float cnc = closerNominaCurrent(current); - edm::LogInfo("MagneticField|AutoParametrizedMagneticField") - << "Current: " << current << message << "; using map for: " << cnc; + edm::LogInfo("MagneticField") << "Current: " << current << message << "; using map for: " << cnc; vector parameters; diff --git a/MagneticField/ParametrizedEngine/src/OAEParametrizedMagneticField.cc b/MagneticField/ParametrizedEngine/src/OAEParametrizedMagneticField.cc index 94ee7642295b6..be026bfc123b7 100644 --- a/MagneticField/ParametrizedEngine/src/OAEParametrizedMagneticField.cc +++ b/MagneticField/ParametrizedEngine/src/OAEParametrizedMagneticField.cc @@ -25,8 +25,8 @@ GlobalVector OAEParametrizedMagneticField::inTesla(const GlobalPoint& gp) const if (isDefined(gp)) { return inTeslaUnchecked(gp); } else { - edm::LogWarning("MagneticField|FieldOutsideValidity") - << " Point " << gp << " is outside the validity region of OAEParametrizedMagneticField"; + edm::LogWarning("MagneticField") << " Point " << gp + << " is outside the validity region of OAEParametrizedMagneticField"; return GlobalVector(); } } diff --git a/MagneticField/ParametrizedEngine/src/ParabolicParametrizedMagneticField.cc b/MagneticField/ParametrizedEngine/src/ParabolicParametrizedMagneticField.cc index fa29ed9ce5c86..01e15ca976967 100644 --- a/MagneticField/ParametrizedEngine/src/ParabolicParametrizedMagneticField.cc +++ b/MagneticField/ParametrizedEngine/src/ParabolicParametrizedMagneticField.cc @@ -22,8 +22,8 @@ GlobalVector ParabolicParametrizedMagneticField::inTesla(const GlobalPoint& gp) if (isDefined(gp)) { return inTeslaUnchecked(gp); } else { - LogDebug("MagneticField|FieldOutsideValidity") - << " Point " << gp << " is outside the validity region of ParabolicParametrizedMagneticField"; + edm::LogWarning("MagneticField") << " Point " << gp + << " is outside the validity region of ParabolicParametrizedMagneticField"; return GlobalVector(); } } diff --git a/MagneticField/ParametrizedEngine/src/PolyFit2DParametrizedMagneticField.cc b/MagneticField/ParametrizedEngine/src/PolyFit2DParametrizedMagneticField.cc index 2b0fbdd869ad9..5f5beb139641f 100644 --- a/MagneticField/ParametrizedEngine/src/PolyFit2DParametrizedMagneticField.cc +++ b/MagneticField/ParametrizedEngine/src/PolyFit2DParametrizedMagneticField.cc @@ -27,8 +27,8 @@ GlobalVector PolyFit2DParametrizedMagneticField::inTesla(const GlobalPoint& gp) if (isDefined(gp)) { return inTeslaUnchecked(gp); } else { - edm::LogWarning("MagneticField|FieldOutsideValidity") - << " Point " << gp << " is outside the validity region of PolyFit2DParametrizedMagneticField"; + edm::LogWarning("MagneticField") << " Point " << gp + << " is outside the validity region of PolyFit2DParametrizedMagneticField"; return GlobalVector(); } } diff --git a/MagneticField/VolumeBasedEngine/src/MagGeometry.cc b/MagneticField/VolumeBasedEngine/src/MagGeometry.cc index 357755973530f..172a6df84a57b 100644 --- a/MagneticField/VolumeBasedEngine/src/MagGeometry.cc +++ b/MagneticField/VolumeBasedEngine/src/MagGeometry.cc @@ -46,7 +46,7 @@ MagGeometry::MagGeometry(int geomVersion, vector rBorders; for (vector::const_iterator ilay = theBLayers.begin(); ilay != theBLayers.end(); ++ilay) { - LogTrace("MagGeometry") << " Barrel layer at " << (*ilay)->minR() << endl; + LogTrace("MagGeoBuilder") << " Barrel layer at " << (*ilay)->minR() << endl; //FIXME assume layers are already sorted in minR rBorders.push_back((*ilay)->minR() * (*ilay)->minR()); } @@ -55,7 +55,7 @@ MagGeometry::MagGeometry(int geomVersion, #ifdef EDM_ML_DEBUG for (vector::const_iterator isec = theESectors.begin(); isec != theESectors.end(); ++isec) { - LogTrace("MagGeometry") << " Endcap sector at " << (*isec)->minPhi() << endl; + LogTrace("MagGeoBuilder") << " Endcap sector at " << (*isec)->minPhi() << endl; } #endif @@ -119,7 +119,7 @@ GlobalVector MagGeometry::fieldInTesla(const GlobalPoint& gp) const { // Fall-back case: no volume found if (edm::isNotFinite(gp.mag())) { - LogWarning("InvalidInput") << "Input value invalid (not a number): " << gp << endl; + LogWarning("MagneticField") << "Input value invalid (not a number): " << gp << endl; } else { LogWarning("MagneticField") << "MagGeometry::fieldInTesla: failed to find volume for " << gp << endl; From 326df0d7d6a3b8b1716d9e3cc5f24b1b74a0119a Mon Sep 17 00:00:00 2001 From: Nicola Amapane Date: Thu, 30 Apr 2020 12:13:08 +0200 Subject: [PATCH 09/10] fix numerical problem introduced with recent optimizations --- .../VolumeBasedEngine/interface/MagGeometry.h | 10 ++--- .../VolumeBasedEngine/src/MagGeometry.cc | 37 ++++++++++--------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/MagneticField/VolumeBasedEngine/interface/MagGeometry.h b/MagneticField/VolumeBasedEngine/interface/MagGeometry.h index b74886ffe52fe..14ec0c8c222f5 100644 --- a/MagneticField/VolumeBasedEngine/interface/MagGeometry.h +++ b/MagneticField/VolumeBasedEngine/interface/MagGeometry.h @@ -74,10 +74,10 @@ class MagGeometry { int geometryVersion; // boundaries of internal barrel-endcap volume separation - float barrelRsq1; - float barrelRsq2; - float barrelZ0; - float barrelZ1; - float barrelZ2; + double theBarrelRsq1; + double theBarrelRsq2; + double theBarrelZ0; + double theBarrelZ1; + double theBarrelZ2; }; #endif diff --git a/MagneticField/VolumeBasedEngine/src/MagGeometry.cc b/MagneticField/VolumeBasedEngine/src/MagGeometry.cc index 172a6df84a57b..b509a29d3a4a9 100644 --- a/MagneticField/VolumeBasedEngine/src/MagGeometry.cc +++ b/MagneticField/VolumeBasedEngine/src/MagGeometry.cc @@ -69,25 +69,25 @@ MagGeometry::MagGeometry(int geomVersion, // FIXME: it would be nice to derive these from the actual geometry in the builder, possibly adding some specification to the geometry. switch (geomVersion >= 120812 ? 0 : (geomVersion >= 90812 ? 1 : 2)) { case 0: // since 120812 - barrelRsq1 = 172.400f * 172.400f; - barrelRsq2 = 308.735f * 308.735f; - barrelZ0 = 350.000f; - barrelZ1 = 633.290f; - barrelZ2 = 662.010f; + theBarrelRsq1 = 172.400 * 172.400; + theBarrelRsq2 = 308.735 * 308.735; + theBarrelZ0 = 350.000; + theBarrelZ1 = 633.290; + theBarrelZ2 = 662.010; break; case 1: // version 90812 (no longer in use) - barrelRsq1 = 172.400f * 172.400f; - barrelRsq2 = 308.755f * 308.755f; - barrelZ0 = 350.000f; - barrelZ1 = 633.890f; - barrelZ2 = 662.010f; + theBarrelRsq1 = 172.400 * 172.400; + theBarrelRsq2 = 308.755 * 308.755; + theBarrelZ0 = 350.000; + theBarrelZ1 = 633.890; + theBarrelZ2 = 662.010; break; case 2: // versions 71212, 90322 - barrelRsq1 = 172.400f * 172.400f; - barrelRsq2 = 308.755f * 308.755f; - barrelZ0 = 350.000f; - barrelZ1 = 633.290f; - barrelZ2 = 661.010f; + theBarrelRsq1 = 172.400 * 172.400; + theBarrelRsq2 = 308.755 * 308.755; + theBarrelZ0 = 350.000; + theBarrelZ1 = 633.290; + theBarrelZ2 = 661.010; break; } } @@ -217,8 +217,9 @@ MagVolume const* MagGeometry::findVolume(const GlobalPoint& gp, double tolerance } bool MagGeometry::inBarrel(const GlobalPoint& gp) const { - float aZ = fabs(gp.z()); - float aRsq = gp.perp2(); + double aZ = fabs(gp.z()); + double aRsq = gp.perp2(); - return ((aZ < barrelZ0) || (aZ < barrelZ1 && aRsq > barrelRsq1) || (aZ < barrelZ2 && aRsq > barrelRsq2)); + return ((aZ < theBarrelZ0) || (aZ < theBarrelZ1 && aRsq > theBarrelRsq1) || + (aZ < theBarrelZ2 && aRsq > theBarrelRsq2)); } From 8850003c2cdefa358ac096684ee9029f4639c4e7 Mon Sep 17 00:00:00 2001 From: Nicola Amapane Date: Thu, 30 Apr 2020 22:04:20 +0200 Subject: [PATCH 10/10] Silence warning for calls outside OAEParametrizedMagneticField's validity --- .../src/ParabolicParametrizedMagneticField.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MagneticField/ParametrizedEngine/src/ParabolicParametrizedMagneticField.cc b/MagneticField/ParametrizedEngine/src/ParabolicParametrizedMagneticField.cc index 01e15ca976967..fa29ed9ce5c86 100644 --- a/MagneticField/ParametrizedEngine/src/ParabolicParametrizedMagneticField.cc +++ b/MagneticField/ParametrizedEngine/src/ParabolicParametrizedMagneticField.cc @@ -22,8 +22,8 @@ GlobalVector ParabolicParametrizedMagneticField::inTesla(const GlobalPoint& gp) if (isDefined(gp)) { return inTeslaUnchecked(gp); } else { - edm::LogWarning("MagneticField") << " Point " << gp - << " is outside the validity region of ParabolicParametrizedMagneticField"; + LogDebug("MagneticField|FieldOutsideValidity") + << " Point " << gp << " is outside the validity region of ParabolicParametrizedMagneticField"; return GlobalVector(); } }