13 #include <simulation/monopoles/G4MonopoleFieldSetup.h>
14 #include <simulation/monopoles/G4MonopoleEquation.h>
16 #include <G4MagneticField.hh>
17 #include <G4FieldManager.hh>
18 #include <G4TransportationManager.hh>
19 #include <G4MagIntegratorStepper.hh>
20 #include <G4ChordFinder.hh>
22 #include <G4ClassicalRK4.hh>
24 #include <CLHEP/Units/SystemOfUnits.h>
28 using namespace Belle2::Monopoles;
29 using namespace CLHEP;
33 G4MonopoleFieldSetup::G4MonopoleFieldSetup()
36 fFieldManager = G4TransportationManager::GetTransportationManager()->GetFieldManager();
37 fbasf2ChordFinder = fFieldManager->GetChordFinder();
38 fMagneticField = (G4MagneticField*)fFieldManager->GetDetectorField();
40 fMinStep = 0.01 * mm ;
41 fMonopoleStepper =
new G4ClassicalRK4(fMonopoleEquation, 8);
42 fMonopoleChordFinder =
new G4ChordFinder(fMagneticField, fMinStep, fMonopoleStepper);
47 if (0 == fMonopoleFieldSetup) {
49 fMonopoleFieldSetup = &theInstance;
52 return fMonopoleFieldSetup;
55 G4MonopoleFieldSetup::~G4MonopoleFieldSetup()
57 if (fMonopoleChordFinder)
delete fMonopoleChordFinder;
58 if (fMonopoleEquation)
delete fMonopoleEquation;
59 if (fMonopoleStepper)
delete fMonopoleStepper;
62 void G4MonopoleFieldSetup::SwitchChordFinder(G4int val)
66 fFieldManager->SetChordFinder(fbasf2ChordFinder);
69 fFieldManager->SetChordFinder(fMonopoleChordFinder);