File indexing completed on 2025-08-05 08:18:15
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include "PHG4OHCalFieldSetup.h"
0012
0013 #include <g4main/PHG4MagneticField.h>
0014
0015 #include <phfield/PHFieldConfig.h> // for PHFieldConfig, PHFieldCo...
0016 #include <phfield/PHFieldConfigv1.h>
0017 #include <phfield/PHFieldUtility.h>
0018
0019 #include <Geant4/G4ChordFinder.hh>
0020 #include <Geant4/G4ClassicalRK4.hh>
0021 #include <Geant4/G4FieldManager.hh>
0022 #include <Geant4/G4MagIntegratorDriver.hh>
0023 #include <Geant4/G4MagIntegratorStepper.hh>
0024 #include <Geant4/G4Mag_UsualEqRhs.hh>
0025 #include <Geant4/G4MagneticField.hh>
0026 #include <Geant4/G4SystemOfUnits.hh>
0027 #include <Geant4/G4Types.hh> // for G4int
0028
0029 #include <cassert>
0030
0031 PHG4OHCalFieldSetup::PHG4OHCalFieldSetup(const std::string &iron_fieldmap_path, const double scale, const double inner_radius, const double outer_radius, const double size_z)
0032 : fMinStep(0.005 * mm)
0033 {
0034 static const G4int nvar = 8;
0035
0036
0037 PHFieldConfigv1 field_config(PHFieldConfig::Field3DCartesian, iron_fieldmap_path, scale);
0038
0039 fEMfieldIron = new PHG4MagneticField(PHFieldUtility::BuildFieldMap(&field_config, inner_radius, outer_radius, size_z));
0040 assert(fEMfieldIron);
0041
0042 fEquationIron = new G4Mag_UsualEqRhs(fEMfieldIron);
0043
0044 fStepperIron = new G4ClassicalRK4(fEquationIron, nvar);
0045
0046 fChordFinderIron = new G4ChordFinder(
0047 new G4MagInt_Driver(fMinStep, fStepperIron,
0048 fStepperIron->GetNumberOfVariables()));
0049
0050 fFieldManagerIron = new G4FieldManager();
0051 fFieldManagerIron->SetDetectorField(fEMfieldIron);
0052 fFieldManagerIron->SetChordFinder(fChordFinderIron);
0053 }
0054
0055 PHG4OHCalFieldSetup::~PHG4OHCalFieldSetup()
0056 {
0057 delete fEMfieldIron;
0058 }