CMS 3D CMS Logo

MFProducer.cc
Go to the documentation of this file.
10 #include <iostream>
11 
12 class MFProducer : public edm::EDProducer {
13 public:
14  explicit MFProducer(const edm::ParameterSet&);
15  ~MFProducer(void) override;
16 
17 private:
18  void beginJob(void) override;
19  void produce(edm::Event&, const edm::EventSetup&) override;
20  void endJob(void) override;
21  void evaluate(const double point[3], double field[3]) const;
22  unsigned m_mapDensityX;
23  unsigned m_mapDensityY;
24  unsigned m_mapDensityZ;
25  double m_minX;
26  double m_maxX;
27  double m_minY;
28  double m_maxY;
29  double m_minZ;
30  double m_maxZ;
31  double m_xBaseDir;
32  double m_yBaseDir;
33  double m_zBaseDir;
34  bool m_valid;
36 };
37 
39  m_mapDensityX = iPset.getUntrackedParameter<unsigned>("mapDensityX", 10);
40  m_mapDensityY = iPset.getUntrackedParameter<unsigned>("mapDensityY", 10);
41  m_mapDensityZ = iPset.getUntrackedParameter<unsigned>("mapDensityY", 10);
42  m_minX = iPset.getUntrackedParameter<double>("minX", -18.0);
43  m_maxX = iPset.getUntrackedParameter<double>("maxX", 18.0);
44  m_minY = iPset.getUntrackedParameter<double>("minY", -18.0);
45  m_maxY = iPset.getUntrackedParameter<double>("maxY", 18.0);
46  m_minZ = iPset.getUntrackedParameter<double>("minZ", -18.0);
47  m_maxZ = iPset.getUntrackedParameter<double>("maxZ", 18.0);
48 
50  m_yBaseDir = (m_maxY - m_minY) / m_mapDensityY;
51  m_zBaseDir = (m_maxZ - m_minZ) / m_mapDensityZ;
52 }
53 
55 
57  iSetup.get<IdealMagneticFieldRecord>().get(m_mf);
58  m_mf.isValid() ? m_valid = true : m_valid = false;
59 
60  for (unsigned i = 0; i <= m_mapDensityX; ++i) {
61  for (unsigned j = 0; j <= m_mapDensityY; ++j) {
62  // Prepare field position and get value.
63  double x = m_minX + m_xBaseDir * i;
64  double y = m_minY + m_yBaseDir * j;
65  double z = 0.;
66  double pt[3] = {x, y, z};
67  double val[3];
68  evaluate(pt, val);
69  std::cout << "(" << x << ", " << y << ", " << z << ") " << val[0] << ":" << val[1] << ":" << val[2] << "; ";
70  }
71  std::cout << std::endl;
72  }
73 }
74 
75 void MFProducer::evaluate(const double point[3], double field[3]) const {
76  GlobalVector b = m_mf->inTesla(GlobalPoint(point[0], point[1], point[2]));
77 
78  field[0] = b.x();
79  field[1] = b.y();
80  field[2] = b.z();
81 }
82 
83 void MFProducer::beginJob(void) {}
84 
85 void MFProducer::endJob(void) {}
86 
T getUntrackedParameter(std::string const &, T const &) const
unsigned m_mapDensityZ
Definition: MFProducer.cc:24
double m_minX
Definition: MFProducer.cc:25
MFProducer(const edm::ParameterSet &)
Definition: MFProducer.cc:38
void produce(edm::Event &, const edm::EventSetup &) override
Definition: MFProducer.cc:56
void endJob(void) override
Definition: MFProducer.cc:85
double m_minZ
Definition: MFProducer.cc:29
unsigned m_mapDensityY
Definition: MFProducer.cc:23
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
T y() const
Definition: PV3DBase.h:60
unsigned m_mapDensityX
Definition: MFProducer.cc:22
double m_maxX
Definition: MFProducer.cc:26
bool m_valid
Definition: MFProducer.cc:34
double m_xBaseDir
Definition: MFProducer.cc:31
double m_maxZ
Definition: MFProducer.cc:30
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
double m_maxY
Definition: MFProducer.cc:28
T z() const
Definition: PV3DBase.h:61
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
void evaluate(const double point[3], double field[3]) const
Definition: MFProducer.cc:75
double m_zBaseDir
Definition: MFProducer.cc:33
edm::ESHandle< MagneticField > m_mf
Definition: MFProducer.cc:35
double b
Definition: hdecay.h:118
~MFProducer(void) override
Definition: MFProducer.cc:54
T get() const
Definition: EventSetup.h:73
void beginJob(void) override
Definition: MFProducer.cc:83
bool isValid() const
Definition: ESHandle.h:44
T x() const
Definition: PV3DBase.h:59
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5
double m_yBaseDir
Definition: MFProducer.cc:32
double m_minY
Definition: MFProducer.cc:27