MarlinTPC  1.2.0
GlobalFieldProcessor.h
1 #ifndef GLOBALFIELDPROCESSOR_H
2 #define GLOBALFIELDPROCESSOR_H 1
3 
4 #include <string>
5 #include <map>
6 
7 // CLHEP
8 #include <CLHEP/Matrix/Vector.h>
9 #include <CLHEP/Vector/ThreeVector.h>
10 
11 // LCCD
12 #include <lccd/IConditionsChangeListener.hh>
13 
14 // Marlin
15 #include "Field.h"
16 #include "MagneticField.h"
17 #include "marlin/Processor.h"
18 
19 namespace EVENT {
20 
21  class LCCollection;
22  class LCEvent;
23  class LCGenericObject;
24  class LCRunHeader;
25 }
26 
27 namespace marlintpc {
28 
29 class MagneticField;
30 
36 class GlobalFieldProcessor: public marlin::Processor {
37 
38 public:
39 
43 
46  virtual ~GlobalFieldProcessor();
47 
50  virtual Processor* newProcessor();
51 
56  virtual void init();
57 
60  virtual void processRunHeader(lcio::LCRunHeader* run );
61 
65  virtual void processEvent(lcio::LCEvent * evt );
66 
70  virtual void check(lcio::LCEvent * evt );
71 
75  virtual void end();
76 
79  bool register_field( Field* );
80 
84  CLHEP::HepVector get_global_magnetic_field( const CLHEP::HepVector& x ) const;
85 
88  CLHEP::Hep3Vector get_global_magnetic_field( const CLHEP::Hep3Vector& x ) const;
89 
92  CLHEP::Hep3Vector get_global_magnetic_field_error( ) const;
93 
97  CLHEP::HepVector get_global_electric_field( const CLHEP::HepVector& x ) const;
98 
101  CLHEP::Hep3Vector get_global_electric_field( const CLHEP::Hep3Vector& x ) const;
102 
105  CLHEP::Hep3Vector get_global_electric_field_error( ) const;
106 
110 
113  double get_main_crossing_angle() const;
114 
115 protected:
116 
117  class FieldNotifier: public lccd::IConditionsChangeListener {
118 
119  public:
120 
121  FieldNotifier( Field& field );
122 
125  virtual void conditionsChanged( lcio::LCCollection* col );
126 
127  private:
128 
129  Field &_field;
130  };
131 
132  class CoilPositionNotifier: public lccd::IConditionsChangeListener {
133 
134  public:
135 
136  CoilPositionNotifier( std::vector<Field*> _active_magnetic_fields );
137 
140  virtual void conditionsChanged( lcio::LCCollection* col );
141 
142  private:
143 
144  std::vector<MagneticField*> _magnetic_fields;
145 
146  };
147 
148 private:
149 
152  bool _use_gear_bfield;
153 
154  #ifdef USE_CGA
155 
157  bool _use_cga_fields;
158  #endif // USE_CGA
159 
162  std::vector<std::string> _input_magnetic_fields;
163 
166  std::vector<std::string> _input_electric_fields;
167 
170  static GlobalFieldProcessor *_instance;
171 
174  std::map<std::string, Field*> _field_by_typename;
175 
178  std::vector<Field*> _active_magnetic_fields;
179 
182  std::vector<Field*> _active_electric_fields;
183 
186  std::vector<FieldNotifier*> _field_notifiers;
187 
190  double _main_crossing_angle;
191 
194  std::string _coil_position_collection;
195 
198  CoilPositionNotifier* _coil_position_notifier;
199 
200 };
201 
202 } // namespace marlintpc
203 
204 #endif // GLOBALFIELDPROCESSOR_H
virtual void processRunHeader(lcio::LCRunHeader *run)
Called for every run.
Definition: GlobalFieldProcessor.cc:234
virtual void end()
Called after data processing for clean up.
Definition: GlobalFieldProcessor.cc:256
virtual ~GlobalFieldProcessor()
destructor
Definition: GlobalFieldProcessor.cc:84
Field : A base interface to an electric or magnetic field.
Definition: Field.h:22
bool register_field(Field *)
registers a field with the field manager
Definition: GlobalFieldProcessor.cc:292
static GlobalFieldProcessor & get_instance()
return the instance of the global field processor
Definition: GlobalFieldProcessor.cc:421
virtual void conditionsChanged(lcio::LCCollection *col)
from IConditionsChangeListener.
Definition: GlobalFieldProcessor.cc:440
CLHEP::HepVector get_global_magnetic_field(const CLHEP::HepVector &x) const
Returns the magnetic field (in T) at a given point and time in the detector.
Definition: GlobalFieldProcessor.cc:307
CLHEP::HepVector get_global_electric_field(const CLHEP::HepVector &x) const
Returns the electric field (in V) at a given point and time in the detector.
Definition: GlobalFieldProcessor.cc:360
double get_main_crossing_angle() const
returns the main crossing angle of the ILC model
Definition: GlobalFieldProcessor.cc:413
virtual void check(lcio::LCEvent *evt)
Called after the event has been processed.
Definition: GlobalFieldProcessor.cc:253
virtual void init()
Called at the begin of the job before anything is read.
Definition: GlobalFieldProcessor.cc:93
Definition: GlobalFieldProcessor.h:117
CLHEP::Hep3Vector get_global_electric_field_error() const
Returns the combined symmetric field errors (in T) of measured electric field maps.
Definition: GlobalFieldProcessor.cc:390
GlobalFieldProcessor()
constructor
Definition: GlobalFieldProcessor.cc:36
virtual void conditionsChanged(lcio::LCCollection *col)
from IConditionsChangeListener.
Definition: GlobalFieldProcessor.cc:459
virtual Processor * newProcessor()
used by Marlin to create a new processor
Definition: GlobalFieldProcessor.cc:87
virtual void processEvent(lcio::LCEvent *evt)
Called for every event - the working horse.
Definition: GlobalFieldProcessor.cc:250
Definition: GlobalFieldProcessor.h:132
GlobalFieldProcessor : This processor manages the fields used in MarlinTPC.
Definition: GlobalFieldProcessor.h:36
CLHEP::Hep3Vector get_global_magnetic_field_error() const
Returns the combined symmetric field errors (in T) of measured magnetic field maps.
Definition: GlobalFieldProcessor.cc:337