Go to the documentation of this file.00001 #include "FWCore/Framework/interface/Frameworkfwd.h"
00002 #include "FWCore/Framework/interface/EDAnalyzer.h"
00003
00004 #include "FWCore/Framework/interface/Event.h"
00005 #include "FWCore/Framework/interface/MakerMacros.h"
00006
00007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00008
00009 #include "FWCore/Framework/interface/ESHandle.h"
00010 #include "FWCore/Framework/interface/EventSetup.h"
00011 #include "FWCore/Framework/interface/ESTransientHandle.h"
00012
00013 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00014 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
00015 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
00016 #include "MagneticField/Engine/interface/MagneticField.h"
00017
00018 class MFAnalyzer : public edm::EDAnalyzer
00019 {
00020 public:
00021 explicit MFAnalyzer( const edm::ParameterSet& );
00022 ~MFAnalyzer( void );
00023
00024 bool valid (void) { return m_valid; }
00025
00026 private:
00027 virtual void analyze( const edm::Event&, const edm::EventSetup& );
00028 void evaluate( const double point[3], double field[3] ) const;
00029 unsigned m_mapDensityX;
00030 unsigned m_mapDensityY;
00031 unsigned m_mapDensityZ;
00032 double m_minX;
00033 double m_maxX;
00034 double m_minY;
00035 double m_maxY;
00036 double m_minZ;
00037 double m_maxZ;
00038 double m_xBaseDir;
00039 double m_yBaseDir;
00040 double m_zBaseDir;
00041 bool m_valid;
00042 edm::ESHandle<MagneticField> m_mf;
00043 };
00044
00045 MFAnalyzer::MFAnalyzer( const edm::ParameterSet& iPset )
00046 : m_valid( false )
00047 {
00048 m_mapDensityX = iPset.getUntrackedParameter<unsigned>( "mapDensityX", 10 );
00049 m_mapDensityY = iPset.getUntrackedParameter<unsigned>( "mapDensityY", 10 );
00050 m_mapDensityZ = iPset.getUntrackedParameter<unsigned>( "mapDensityY", 10 );
00051 m_minX = iPset.getUntrackedParameter<double>( "minX", -18.0 );
00052 m_maxX = iPset.getUntrackedParameter<double>( "maxX", 18.0 );
00053 m_minY = iPset.getUntrackedParameter<double>( "minY", -18.0 );
00054 m_maxY = iPset.getUntrackedParameter<double>( "maxY", 18.0 );
00055 m_minZ = iPset.getUntrackedParameter<double>( "minZ", -18.0 );
00056 m_maxZ = iPset.getUntrackedParameter<double>( "maxZ", 18.0 );
00057
00058 m_xBaseDir = ( m_maxX - m_minX ) / m_mapDensityX;
00059 m_yBaseDir = ( m_maxY - m_minY ) / m_mapDensityY;
00060 m_zBaseDir = ( m_maxZ - m_minZ ) / m_mapDensityZ;
00061 }
00062
00063 MFAnalyzer::~MFAnalyzer( void )
00064 {}
00065
00066 void
00067 MFAnalyzer::analyze( const edm::Event& iEvent, const edm::EventSetup& iSetup )
00068 {
00069 iSetup.get<IdealMagneticFieldRecord>().get( m_mf );
00070 m_mf.isValid() ? m_valid = true : m_valid = false;
00071
00072 for( unsigned i = 0; i <= m_mapDensityX; ++i )
00073 {
00074 for( unsigned j = 0; j <= m_mapDensityY; ++j )
00075 {
00076 for( unsigned k = 0; k <= m_mapDensityZ; ++k )
00077 {
00078
00079 double x = m_minX + m_xBaseDir * i;
00080 double y = m_minY + m_yBaseDir * j;
00081 double z = m_minZ + m_zBaseDir * k;
00082 double pt[3] = { x, y, z };
00083 double val[3];
00084 evaluate( pt, val );
00085 std::cout << "(" << x << ", " << y << ", " << z << ") " << val[0] << ":" << val[1] << ":" << val[2] << "; ";
00086 }
00087 std::cout << std::endl;
00088 }
00089 std::cout << std::endl;
00090 }
00091 }
00092
00093 void
00094 MFAnalyzer::evaluate (const double point [3], double field [3]) const
00095 {
00096 GlobalVector b = m_mf->inTesla( GlobalPoint( point[0], point[1], point[2] ));
00097
00098 field [0] = b.x();
00099 field [1] = b.y();
00100 field [2] = b.z();
00101 }
00102
00103 DEFINE_FWK_MODULE( MFAnalyzer );