Belle II Software  release-05-01-25
G4MonopoleFieldSetup.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2018 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Dmitrii Neverov *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 // modified from GEANT4 exoticphysics/monopole/*
12 
13 #include <simulation/monopoles/G4MonopoleFieldSetup.h>
14 #include <simulation/monopoles/G4MonopoleEquation.h>
15 
16 #include <G4MagneticField.hh>
17 #include <G4FieldManager.hh>
18 #include <G4TransportationManager.hh>
19 #include <G4MagIntegratorStepper.hh>
20 #include <G4ChordFinder.hh>
21 
22 #include <G4ClassicalRK4.hh>
23 
24 #include <CLHEP/Units/SystemOfUnits.h>
25 
26 using namespace std;
27 using namespace Belle2;
28 using namespace Belle2::Monopoles;
29 using namespace CLHEP;
30 
31 G4MonopoleFieldSetup* G4MonopoleFieldSetup::fMonopoleFieldSetup = 0;
32 
33 G4MonopoleFieldSetup::G4MonopoleFieldSetup()
34 {
35  //Take existing setup from basf2
36  fFieldManager = G4TransportationManager::GetTransportationManager()->GetFieldManager();
37  fbasf2ChordFinder = fFieldManager->GetChordFinder();
38  fMagneticField = (G4MagneticField*)fFieldManager->GetDetectorField();
39  fMonopoleEquation = new G4MonopoleEquation(fMagneticField);
40  fMinStep = 0.01 * mm ; // minimal step of 1 mm is default
41  fMonopoleStepper = new G4ClassicalRK4(fMonopoleEquation, 8); // for time information..
42  fMonopoleChordFinder = new G4ChordFinder(fMagneticField, fMinStep, fMonopoleStepper);
43 }
44 
45 G4MonopoleFieldSetup* G4MonopoleFieldSetup::GetMonopoleFieldSetup()
46 {
47  if (0 == fMonopoleFieldSetup) {
48  static G4MonopoleFieldSetup theInstance;
49  fMonopoleFieldSetup = &theInstance;
50  }
51 
52  return fMonopoleFieldSetup;
53 }
54 
55 G4MonopoleFieldSetup::~G4MonopoleFieldSetup()
56 {
57  if (fMonopoleChordFinder) delete fMonopoleChordFinder;
58  if (fMonopoleEquation) delete fMonopoleEquation;
59  if (fMonopoleStepper) delete fMonopoleStepper;
60 }
61 
62 void G4MonopoleFieldSetup::SwitchChordFinder(G4int val)
63 {
64  switch (val) {
65  case 0:
66  fFieldManager->SetChordFinder(fbasf2ChordFinder);
67  break;
68  case 1:
69  fFieldManager->SetChordFinder(fMonopoleChordFinder);
70  break;
71  }
72 }
Belle2::Monopoles::G4MonopoleFieldSetup
Monopole field setup singleton class, that takes care of switching between conventional particle tran...
Definition: G4MonopoleFieldSetup.h:35
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::Monopoles::G4MonopoleEquation
Monopole equation of motion class.
Definition: G4MonopoleEquation.h:40