00001 #ifndef SimG4Core_FieldBuilder_H 00002 #define SimG4Core_FieldBuilder_H 00003 00004 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00005 // #include "SimG4Core/Geometry/interface/G4LogicalVolumeToDDLogicalPartMap.h" 00006 #include <memory> 00007 00008 // class DDLogicalPart; 00009 class MagneticField; 00010 00011 class G4FieldManager; 00012 class G4Mag_UsualEqRhs; 00013 class G4PropagatorInField; 00014 class G4LogicalVolume; 00015 00016 namespace sim { 00017 class Field; 00018 class FieldBuilder 00019 { 00020 public: 00021 FieldBuilder(const MagneticField*, 00022 const edm::ParameterSet&); 00023 //~FieldBuilder(); 00024 00025 /* 00026 void readFieldParameters(DDLogicalPart theLogicalPart, 00027 const std::string& keywordField); 00028 */ 00029 void build(G4FieldManager* fM = 0, 00030 G4PropagatorInField* fP = 0) ; 00031 00032 /* 00033 void configure(const std::string& keywordField, 00034 G4FieldManager * fM = 0, 00035 G4PropagatorInField * fP = 0); 00036 */ 00037 void configureForVolume( const std::string& volName, 00038 edm::ParameterSet& volPSet, 00039 G4FieldManager * fM = 0, 00040 G4PropagatorInField * fP = 0); 00041 G4LogicalVolume * fieldTopVolume(); 00042 private: 00043 void configureFieldManager(G4FieldManager * fM); 00044 void configurePropagatorInField(G4PropagatorInField * fP); 00045 private: 00046 std::auto_ptr<Field> theField; 00047 G4Mag_UsualEqRhs * theFieldEquation; 00048 G4LogicalVolume* theTopVolume; 00049 00050 std::string keywordField; 00051 std::string fieldType; 00052 double fieldValue; 00053 std::string stepper; 00054 double minStep; 00055 double dChord; 00056 double dOneStep; 00057 double dIntersection; 00058 double dIntersectionAndOneStep; 00059 double maxLoopCount; 00060 double minEpsilonStep; 00061 double maxEpsilonStep; 00062 edm::ParameterSet thePSet ; 00063 }; 00064 } 00065 00066 #endif