@@ -66,8 +66,6 @@ remollGlobalField::remollGlobalField()
6666 // Create generic messenger
6767 fMessenger = new G4GenericMessenger (this ," /remoll/" ," Remoll properties" );
6868 fMessenger ->DeclareMethod (" addfield" ,&remollGlobalField::AddNewField," Add magnetic field" );
69- fMessenger ->DeclareMethod (" scalefield" ,&remollGlobalField::SetFieldScaleByString," Scale magnetic field" );
70- fMessenger ->DeclareMethod (" magcurrent" ,&remollGlobalField::SetMagnetCurrentByString," Scale magnetic field by current" );
7169
7270 // Create global field messenger
7371 fGlobalFieldMessenger = new G4GenericMessenger (this ," /remoll/field/" ," Remoll global field properties" );
@@ -80,6 +78,9 @@ remollGlobalField::remollGlobalField()
8078 fGlobalFieldMessenger ->DeclareProperty (" deltachord" ,fDeltaChord ," Set delta chord for the chord finder" );
8179 fGlobalFieldMessenger ->DeclareProperty (" deltaonestep" ,fDeltaOneStep ," Set delta one step for the field manager" );
8280 fGlobalFieldMessenger ->DeclareProperty (" deltaintersection" ,fMinStep ," Set delta intersection for the field manager" );
81+ fGlobalFieldMessenger ->DeclareMethod (" zoffset" ,&remollGlobalField::SetZOffset," Set magnetic field z offset" );
82+ fGlobalFieldMessenger ->DeclareMethod (" scale" ,&remollGlobalField::SetFieldScale," Scale magnetic field by factor" );
83+ fGlobalFieldMessenger ->DeclareMethod (" current" ,&remollGlobalField::SetMagnetCurrent," Scale magnetic field by current" );
8384 fGlobalFieldMessenger ->DeclareMethod (" value" ,&remollGlobalField::PrintFieldValue," Print the field value at a given point (in m)" );
8485}
8586
@@ -271,16 +272,16 @@ void remollGlobalField::GetFieldValue(const G4double p[], G4double *resB) const
271272 }
272273}
273274
274- void remollGlobalField::SetFieldScaleByString ( G4String& name_scale )
275+ void remollGlobalField::SetZOffset ( const G4String& name, G4double offset )
275276{
276- std::istringstream iss (name_scale );
277-
278- G4String name, scalestr ;
279- iss >> name ;
280- iss >> scalestr;
281-
282- G4double scaleval = atof (scalestr) ;
283- SetFieldScale (name, scaleval);
277+ remollMagneticField *field = GetFieldByName (name );
278+ if (field) {
279+ G4AutoLock lock (&remollGlobalFieldMutex) ;
280+ field-> SetZoffset (offset) ;
281+ } else {
282+ G4cerr << " WARNING " << __FILE__ << " line " << __LINE__
283+ << " : field " << name << " offset failed " << G4endl ;
284+ }
284285}
285286
286287void remollGlobalField::SetFieldScale (const G4String& name, G4double scale)
@@ -295,31 +296,12 @@ void remollGlobalField::SetFieldScale(const G4String& name, G4double scale)
295296 }
296297}
297298
298- void remollGlobalField::SetMagnetCurrentByString (G4String& name_scale)
299- {
300- std::istringstream iss (name_scale);
301-
302- G4String name, scalestr, scaleunit;
303- iss >> name;
304- iss >> scalestr;
305- iss >> scaleunit;
306-
307- if (scaleunit != " A" ) {
308- // FIXME: less snark and more functionality?
309- G4cerr << __FILE__ << " line " << __LINE__ << " :\n\t Graaaah - just put the current for " << name << " in amps..." << G4endl;
310- exit (1 );
311- }
312-
313- G4double scaleval = atof (scalestr);
314- SetMagnetCurrent (name, scaleval);
315- }
316-
317- void remollGlobalField::SetMagnetCurrent (const G4String& name, G4double scale)
299+ void remollGlobalField::SetMagnetCurrent (const G4String& name, G4double current)
318300{
319301 remollMagneticField *field = GetFieldByName (name);
320302 if (field) {
321303 G4AutoLock lock (&remollGlobalFieldMutex);
322- field->SetMagnetCurrent (scale );
304+ field->SetMagnetCurrent (current );
323305 } else {
324306 G4cerr << " WARNING " << __FILE__ << " line " << __LINE__
325307 << " : field " << name << " scaling failed" << G4endl;
0 commit comments