Skip to content

Commit 5986927

Browse files
committed
Add "inverse of nominal value" in GeV to MagneticField, and calculate nominal values in the constructor.
This is a preparatory step to migrate PixelRecoUtilities to esConsumes
1 parent 00ca4ca commit 5986927

File tree

23 files changed

+67
-64
lines changed

23 files changed

+67
-64
lines changed

FastSimulation/TrajectoryManager/interface/LocalMagneticField.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
#include "MagneticField/Engine/interface/MagneticField.h"
1414

15-
class LocalMagneticField : public MagneticField {
15+
class LocalMagneticField final : public MagneticField {
1616
public:
1717
///Construct passing the Z field component in Tesla
1818
LocalMagneticField(double value);

FastSimulation/TrajectoryManager/src/LocalMagneticField.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
#include "FastSimulation/TrajectoryManager/interface/LocalMagneticField.h"
88
#include "DataFormats/GeometryVector/interface/GlobalVector.h"
99

10-
LocalMagneticField::LocalMagneticField(double value) : theField(0., 0., value) {}
10+
LocalMagneticField::LocalMagneticField(double value) : theField(0., 0., value) { setNominalValue(); }
1111

1212
GlobalVector LocalMagneticField::inTesla(const GlobalPoint& gp) const { return theField; }

MagneticField/Engine/interface/MagneticField.h

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,19 @@ class MagneticField {
4646
}
4747

4848
/// The nominal field value for this map in kGauss
49-
int nominalValue() const {
50-
if (kSet == nominalValueCompiuted.load())
51-
return theNominalValue;
52-
return computeNominalValue();
53-
}
49+
int nominalValue() const { return theNominalValue; }
50+
51+
/// The inverse of nominal field value for this map in GeV
52+
float inverseNominalValueInGeV() const { return theInverseNominalValueInGeV; }
53+
54+
protected:
55+
// need to be called from the constructor of the deriving classes
56+
void setNominalValue();
5457

5558
private:
56-
//nominal field value
57-
virtual int computeNominalValue() const;
58-
mutable std::atomic<char> nominalValueCompiuted;
59-
// CMS_THREAD_GUARD(nominalValueCompiuted) mutable int theNominalValue;
60-
// PG temporary fix for clang 3.4 which is not parsing thread_guard correctly
61-
CMS_THREAD_SAFE mutable int theNominalValue;
62-
enum FooStates { kUnset, kSetting, kSet };
59+
//nominal field values
60+
int theNominalValue = 0;
61+
float theInverseNominalValueInGeV = 0;
6362
};
6463

6564
#endif

MagneticField/Engine/src/MagneticField.cc

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,14 @@
55

66
#include "MagneticField/Engine/interface/MagneticField.h"
77

8-
MagneticField::MagneticField() : nominalValueCompiuted(kUnset), theNominalValue(0) {}
8+
MagneticField::MagneticField() = default;
99

10-
MagneticField::MagneticField(const MagneticField& orig) : nominalValueCompiuted(kUnset), theNominalValue(0) {
11-
if (orig.nominalValueCompiuted.load() == kSet) {
12-
theNominalValue = orig.theNominalValue;
13-
nominalValueCompiuted.store(kSet);
14-
}
15-
}
16-
17-
MagneticField::~MagneticField() {}
18-
19-
int MagneticField::computeNominalValue() const {
20-
int tmp = int((inTesla(GlobalPoint(0.f, 0.f, 0.f))).z() * 10.f + 0.5f);
10+
MagneticField::MagneticField(const MagneticField& orig) = default;
2111

22-
//Try to cache
23-
char expected = kUnset;
24-
if (nominalValueCompiuted.compare_exchange_strong(expected, kSetting)) {
25-
//it is our job to set the value
26-
std::swap(theNominalValue, tmp);
12+
MagneticField::~MagneticField() = default;
2713

28-
//this must be after the swap
29-
nominalValueCompiuted.store(kSet);
30-
return theNominalValue;
31-
}
32-
//another thread beat us to trying to set theNominalValue
33-
// since we don't know when the other thread will finish
34-
// we just return tmp
35-
return tmp;
14+
void MagneticField::setNominalValue() {
15+
auto const at0z = inTesla(GlobalPoint(0.f, 0.f, 0.f)).z();
16+
theNominalValue = int(at0z * 10.f + 0.5f);
17+
theInverseNominalValueInGeV = 1.f / (at0z * 2.99792458e-3f);
3618
}

MagneticField/ParametrizedEngine/src/OAEParametrizedMagneticField.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@
1212
using namespace std;
1313
using namespace magfieldparam;
1414

15-
OAEParametrizedMagneticField::OAEParametrizedMagneticField(float B) : theParam(B) {}
15+
OAEParametrizedMagneticField::OAEParametrizedMagneticField(float B) : theParam(B) { setNominalValue(); }
1616

17-
OAEParametrizedMagneticField::OAEParametrizedMagneticField(string T) : theParam(T) {}
17+
OAEParametrizedMagneticField::OAEParametrizedMagneticField(string T) : theParam(T) { setNominalValue(); }
1818

1919
OAEParametrizedMagneticField::OAEParametrizedMagneticField(const edm::ParameterSet& parameters)
20-
: theParam(parameters.getParameter<string>("BValue")) {}
20+
: theParam(parameters.getParameter<string>("BValue")) {
21+
setNominalValue();
22+
}
2123

2224
OAEParametrizedMagneticField::~OAEParametrizedMagneticField() {}
2325

MagneticField/ParametrizedEngine/src/OAEParametrizedMagneticField.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace magfieldparam {
2222
class TkBfield;
2323
}
2424

25-
class OAEParametrizedMagneticField : public MagneticField {
25+
class OAEParametrizedMagneticField final : public MagneticField {
2626
public:
2727
/// Constructor, pass value for nominal field
2828
explicit OAEParametrizedMagneticField(float B);

MagneticField/ParametrizedEngine/src/ParabolicParametrizedMagneticField.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,14 @@ using namespace std;
1111

1212
// Default parameters are the best fit of 3.8T to the OAEParametrizedMagneticField parametrization.
1313
ParabolicParametrizedMagneticField::ParabolicParametrizedMagneticField()
14-
: c1(3.8114), b0(-3.94991e-06), b1(7.53701e-06), a(2.43878e-11) {}
14+
: c1(3.8114), b0(-3.94991e-06), b1(7.53701e-06), a(2.43878e-11) {
15+
setNominalValue();
16+
}
1517

1618
ParabolicParametrizedMagneticField::ParabolicParametrizedMagneticField(const vector<double>& parameters)
17-
: c1(parameters[0]), b0(parameters[1]), b1(parameters[2]), a(parameters[3]) {}
19+
: c1(parameters[0]), b0(parameters[1]), b1(parameters[2]), a(parameters[3]) {
20+
setNominalValue();
21+
}
1822

1923
ParabolicParametrizedMagneticField::~ParabolicParametrizedMagneticField() {}
2024

MagneticField/ParametrizedEngine/src/ParabolicParametrizedMagneticField.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace edm {
1616
class ParameterSet;
1717
}
1818

19-
class ParabolicParametrizedMagneticField : public MagneticField {
19+
class ParabolicParametrizedMagneticField final : public MagneticField {
2020
public:
2121
/// Default constructor, use default values for 3.8T map
2222
explicit ParabolicParametrizedMagneticField();

MagneticField/ParametrizedEngine/src/PolyFit2DParametrizedMagneticField.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@ using namespace magfieldparam;
1414

1515
PolyFit2DParametrizedMagneticField::PolyFit2DParametrizedMagneticField(double bVal) : theParam(new BFit()) {
1616
theParam->SetField(bVal);
17+
setNominalValue();
1718
}
1819

1920
PolyFit2DParametrizedMagneticField::PolyFit2DParametrizedMagneticField(const edm::ParameterSet& parameters)
2021
: theParam(new BFit()) {
2122
theParam->SetField(parameters.getParameter<double>("BValue"));
23+
setNominalValue();
2224
}
2325

2426
PolyFit2DParametrizedMagneticField::~PolyFit2DParametrizedMagneticField() { delete theParam; }

MagneticField/ParametrizedEngine/src/PolyFit2DParametrizedMagneticField.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace magfieldparam {
1818
class BFit;
1919
}
2020

21-
class PolyFit2DParametrizedMagneticField : public MagneticField {
21+
class PolyFit2DParametrizedMagneticField final : public MagneticField {
2222
public:
2323
/// Constructor. Fitted bVal for the nominal currents are:
2424
/// 2.0216; 3.5162; 3.8114; 4.01242188708911

0 commit comments

Comments
 (0)