diff --git a/include/remollGlobalField.hh b/include/remollGlobalField.hh index 2a4edf680..dea0100b6 100644 --- a/include/remollGlobalField.hh +++ b/include/remollGlobalField.hh @@ -27,6 +27,7 @@ class remollGlobalField : public G4MagneticField { void AddNewField(G4String& name); + void SetZOffset(const G4String& name, G4double offset); void SetFieldScale(const G4String& name, G4double scale); void SetMagnetCurrent(const G4String& name, G4double current); diff --git a/macros/runexample.mac b/macros/runexample.mac index 2ef760633..2c19ef7e7 100644 --- a/macros/runexample.mac +++ b/macros/runexample.mac @@ -21,6 +21,9 @@ /remoll/addfield map_directory/blockyHybrid_rm_3.0.txt /remoll/addfield map_directory/blockyUpstream_rm_1.1.txt +/remoll/field/zoffset map_directory/blockyHybrid_rm_3.0.txt -5087. +/remoll/field/zoffset map_directory/blockyUpstream_rm_1.1.txt -5087. + #/remoll/field/scale map_directory/blockyHybrid_rm_3.0.txt 1.0 #/remoll/field/current map_directory/blockyHybrid_rm_3.0.txt 1000.0 diff --git a/src/remollGlobalField.cc b/src/remollGlobalField.cc index 3966d334f..79ff876f0 100644 --- a/src/remollGlobalField.cc +++ b/src/remollGlobalField.cc @@ -78,6 +78,7 @@ remollGlobalField::remollGlobalField() fGlobalFieldMessenger->DeclareProperty("deltachord",fDeltaChord,"Set delta chord for the chord finder"); fGlobalFieldMessenger->DeclareProperty("deltaonestep",fDeltaOneStep,"Set delta one step for the field manager"); fGlobalFieldMessenger->DeclareProperty("deltaintersection",fMinStep,"Set delta intersection for the field manager"); + fGlobalFieldMessenger->DeclareMethod("zoffset",&remollGlobalField::SetZOffset,"Set magnetic field z offset"); fGlobalFieldMessenger->DeclareMethod("scale",&remollGlobalField::SetFieldScale,"Scale magnetic field by factor"); fGlobalFieldMessenger->DeclareMethod("current",&remollGlobalField::SetMagnetCurrent,"Scale magnetic field by current"); fGlobalFieldMessenger->DeclareMethod("value",&remollGlobalField::PrintFieldValue,"Print the field value at a given point (in m)"); @@ -271,7 +272,16 @@ void remollGlobalField::GetFieldValue(const G4double p[], G4double *resB) const } } +void remollGlobalField::SetZOffset(const G4String& name, G4double offset) { + remollMagneticField *field = GetFieldByName(name); + if (field) { + G4AutoLock lock(&remollGlobalFieldMutex); + field->SetZoffset(offset); + } else { + G4cerr << "WARNING " << __FILE__ << " line " << __LINE__ + << ": field " << name << " offset failed" << G4endl; + } } void remollGlobalField::SetFieldScale(const G4String& name, G4double scale)