Files
geant4/examples/extended/electromagnetic/TestEm5/src/Em5RunMessenger.cc
T
2016-06-08 15:28:20 +02:00

375 lines
13 KiB
C++

// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: Em5RunMessenger.cc,v 1.1.4.1 1999/12/07 20:47:11 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "Em5RunMessenger.hh"
#include "Em5RunAction.hh"
#include "G4UIdirectory.hh"
#include "G4UIcmdWithAnInteger.hh"
#include "G4UIcmdWithADoubleAndUnit.hh"
#include "G4UIcmdWithADouble.hh"
#include "G4UIcmdWithAString.hh"
#include "G4ios.hh"
#include "globals.hh"
#include "Randomize.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em5RunMessenger::Em5RunMessenger(Em5RunAction* RA)
:runAction (RA)
{
plotDir = new G4UIdirectory("/plots/");
plotDir->SetGuidance("plot control");
sethistNameCmd = new G4UIcmdWithAString("/plots/sethistName",this);
sethistNameCmd->SetGuidance("set name for the histogram file");
setnbinStepCmd = new G4UIcmdWithAnInteger("/plots/setnbinStep",this);
setnbinStepCmd->SetGuidance("set nb of bins in #step plot");
setnbinStepCmd->SetParameterName("nbinStep",false);
setSteplowCmd = new G4UIcmdWithADouble("/plots/setSteplow",this);
setSteplowCmd->SetGuidance("set lower limit for #step plot ");
setSteplowCmd->SetParameterName("Steplow",false);
setStephighCmd = new G4UIcmdWithADouble("/plots/setStephigh",this);
setStephighCmd->SetGuidance("set upper limit for #step plot ");
setStephighCmd->SetParameterName("Stephigh",false);
setnbinEnCmd = new G4UIcmdWithAnInteger("/plots/setnbinEn",this);
setnbinEnCmd->SetGuidance("set nb of bins in Edep plot");
setnbinEnCmd->SetParameterName("nbinE",false);
setEnlowCmd = new G4UIcmdWithADoubleAndUnit("/plots/setEnlow",this);
setEnlowCmd->SetGuidance("set lower limit for Edep plot ");
setEnlowCmd->SetParameterName("Elow",false);
setEnlowCmd->SetUnitCategory("Energy");
setEnhighCmd = new G4UIcmdWithADoubleAndUnit("/plots/setEnhigh",this);
setEnhighCmd->SetGuidance("set upper limit for Edep plot ");
setEnhighCmd->SetParameterName("Ehigh",false);
setEnhighCmd->SetUnitCategory("Energy");
setnbinGammaCmd = new G4UIcmdWithAnInteger("/plots/setnbinGamma",this);
setnbinGammaCmd->SetGuidance("set nb of bins in gamma spectrum plot");
setnbinGammaCmd->SetParameterName("nbinGamma",false);
setElowGammaCmd = new G4UIcmdWithADoubleAndUnit("/plots/setElowGamma",this);
setElowGammaCmd->SetGuidance("set lower limit for gamma spectrum plot ");
setElowGammaCmd->SetParameterName("ElowGamma",false);
setElowGammaCmd->SetUnitCategory("Energy");
setEhighGammaCmd = new G4UIcmdWithADoubleAndUnit("/plots/setEhighGamma",this);
setEhighGammaCmd->SetGuidance("set upper limit for gamma spectrum plot ");
setEhighGammaCmd->SetParameterName("EhighGamma",false);
setEhighGammaCmd->SetUnitCategory("Energy");
setnbinTtCmd = new G4UIcmdWithAnInteger("/plots/setnbinTt",this);
setnbinTtCmd->SetGuidance("set nb of bins in Etransmitted plot");
setnbinTtCmd->SetParameterName("nbinTt",false);
setTtlowCmd = new G4UIcmdWithADoubleAndUnit("/plots/setTtlow",this);
setTtlowCmd->SetGuidance("set lower limit for Etransmitted plot ");
setTtlowCmd->SetParameterName("Ttlow",false);
setTthighCmd = new G4UIcmdWithADoubleAndUnit("/plots/setTthigh",this);
setTthighCmd->SetGuidance("set upper limit for Etransmitted plot ");
setTthighCmd->SetParameterName("Tthigh",false);
setnbinTbCmd = new G4UIcmdWithAnInteger("/plots/setnbinTb",this);
setnbinTbCmd->SetGuidance("set nb of bins in Ebackscattering plot");
setnbinTbCmd->SetParameterName("nbinTb",false);
setTblowCmd = new G4UIcmdWithADoubleAndUnit("/plots/setTblow",this);
setTblowCmd->SetGuidance("set lower limit for Ebackscattered plot ");
setTblowCmd->SetParameterName("Tblow",false);
setTbhighCmd = new G4UIcmdWithADoubleAndUnit("/plots/setTbhigh",this);
setTbhighCmd->SetGuidance("set upper limit for Ebackscattered plot ");
setTbhighCmd->SetParameterName("Tbhigh",false);
setnbinTsecCmd = new G4UIcmdWithAnInteger("/plots/setnbinTsec",this);
setnbinTsecCmd->SetGuidance("set nb of bins in charged Tsecondary plot");
setnbinTsecCmd->SetParameterName("nbinTsec",false);
setTseclowCmd = new G4UIcmdWithADoubleAndUnit("/plots/setTseclow",this);
setTseclowCmd->SetGuidance("set lower limit for charged Tsecondary plot ");
setTseclowCmd->SetParameterName("Tseclow",false);
setTsechighCmd = new G4UIcmdWithADoubleAndUnit("/plots/setTsechigh",this);
setTsechighCmd->SetGuidance("set upper limit for charged Tsecondary plot ");
setTsechighCmd->SetParameterName("Tsechigh",false);
setnbinRCmd = new G4UIcmdWithAnInteger("/plots/setnbinR",this);
setnbinRCmd->SetGuidance("set nb of bins in R plot");
setnbinRCmd->SetParameterName("nbinR",false);
setRlowCmd = new G4UIcmdWithADoubleAndUnit("/plots/setRlow",this);
setRlowCmd->SetGuidance("set lower limit for R plot ");
setRlowCmd->SetParameterName("Rlow",false);
setRhighCmd = new G4UIcmdWithADoubleAndUnit("/plots/setRhigh",this);
setRhighCmd->SetGuidance("set upper limit for R plot ");
setRhighCmd->SetParameterName("Rhigh",false);
setnbinzvertexCmd = new G4UIcmdWithAnInteger("/plots/setnbinzvertex",this);
setnbinzvertexCmd->SetGuidance("set nb of bins in Z vertex plot");
setnbinzvertexCmd->SetParameterName("nbinZ",false);
setzlowCmd = new G4UIcmdWithADoubleAndUnit("/plots/setzlow",this);
setzlowCmd->SetGuidance("set lower limit for Z vertex plot ");
setzlowCmd->SetParameterName("zlow",false);
setzhighCmd = new G4UIcmdWithADoubleAndUnit("/plots/setzhigh",this);
setzhighCmd->SetGuidance("set upper limit for Z vertex plot ");
setzhighCmd->SetParameterName("zhigh",false);
setnbinThCmd = new G4UIcmdWithAnInteger("/plots/setnbinTh",this);
setnbinThCmd->SetGuidance("set nb of bins in Theta transmitted plot");
setnbinThCmd->SetParameterName("nbinTh",false);
setThlowCmd = new G4UIcmdWithADoubleAndUnit("/plots/setThlow",this);
setThlowCmd->SetGuidance("set lower limit for Theta transmitted plot ");
setThlowCmd->SetParameterName("Thlow",false);
setThhighCmd = new G4UIcmdWithADoubleAndUnit("/plots/setThhigh",this);
setThhighCmd->SetGuidance("set upper limit for Theta transmitted plot ");
setThhighCmd->SetParameterName("Thhigh",false);
setnbinThbackCmd = new G4UIcmdWithAnInteger("/plots/setnbinThback",this);
setnbinThbackCmd->SetGuidance("set nb of bins in backscattering Theta plot");
setnbinThbackCmd->SetParameterName("nbinThback",false);
setThlowbackCmd = new G4UIcmdWithADoubleAndUnit("/plots/setThlowback",this);
setThlowbackCmd->SetGuidance("set lower limit for backscattering Theta plot ");
setThlowbackCmd->SetParameterName("Thlowback",false);
setThhighbackCmd = new G4UIcmdWithADoubleAndUnit("/plots/setThhighback",this);
setThhighbackCmd->SetGuidance("set upper limit for backscattering Theta plot ");
setThhighbackCmd->SetParameterName("Thhighback",false);
RndmDir = new G4UIdirectory("/rndm/");
RndmDir->SetGuidance("Rndm status control.");
RndmSaveCmd = new G4UIcmdWithAnInteger("/rndm/save",this);
RndmSaveCmd->SetGuidance("set frequency to save rndm status on external files.");
RndmSaveCmd->SetGuidance("freq = 0 not saved");
RndmSaveCmd->SetGuidance("freq > 0 saved on: beginOfRun.rndm");
RndmSaveCmd->SetGuidance("freq = 1 saved on: endOfRun.rndm");
RndmSaveCmd->SetGuidance("freq = 2 saved on: endOfEvent.rndm");
RndmSaveCmd->SetParameterName("frequency",false);
RndmSaveCmd->SetRange("frequency>=0 && frequency<=2");
RndmSaveCmd->AvailableForStates(PreInit,Idle);
RndmReadCmd = new G4UIcmdWithAString("/rndm/read",this);
RndmReadCmd->SetGuidance("get rndm status from an external file.");
RndmReadCmd->SetParameterName("fileName",true);
RndmReadCmd->SetDefaultValue ("beginOfRun.rndm");
RndmReadCmd->AvailableForStates(PreInit,Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
Em5RunMessenger::~Em5RunMessenger()
{
delete sethistNameCmd;
delete setnbinStepCmd;
delete setSteplowCmd;
delete setStephighCmd;
delete setnbinEnCmd;
delete setEnlowCmd;
delete setEnhighCmd;
delete setnbinGammaCmd;
delete setElowGammaCmd;
delete setEhighGammaCmd;
delete setnbinTtCmd;
delete setTtlowCmd;
delete setTthighCmd;
delete setnbinTbCmd;
delete setTblowCmd;
delete setTbhighCmd;
delete setnbinTsecCmd;
delete setTseclowCmd;
delete setTsechighCmd;
delete setnbinRCmd;
delete setRlowCmd;
delete setRhighCmd;
delete setnbinzvertexCmd;
delete setzlowCmd;
delete setzhighCmd;
delete setnbinThCmd;
delete setThlowCmd;
delete setThhighCmd;
delete setnbinThbackCmd;
delete setThlowbackCmd;
delete setThhighbackCmd;
delete plotDir;
delete RndmSaveCmd; delete RndmReadCmd; delete RndmDir;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void Em5RunMessenger::SetNewValue(G4UIcommand* command,G4String newValues)
{
if( command == sethistNameCmd)
runAction
->SethistName(newValues) ;
if( command == setnbinStepCmd)
runAction
->SetnbinStep(setnbinStepCmd->GetNewIntValue(newValues));
if( command == setSteplowCmd)
runAction
->SetSteplow( setSteplowCmd->GetNewDoubleValue(newValues));
if( command == setStephighCmd)
runAction
->SetStephigh( setStephighCmd->GetNewDoubleValue(newValues));
if( command == setnbinEnCmd)
runAction
->SetnbinEn(setnbinEnCmd->GetNewIntValue(newValues));
if( command == setEnlowCmd)
runAction
->SetEnlow( setEnlowCmd->GetNewDoubleValue(newValues));
if( command == setEnhighCmd)
runAction
->SetEnhigh( setEnhighCmd->GetNewDoubleValue(newValues));
if( command == setnbinGammaCmd)
runAction
->SetnbinGamma(setnbinGammaCmd->GetNewIntValue(newValues));
if( command == setElowGammaCmd)
runAction
->SetElowGamma( setElowGammaCmd->GetNewDoubleValue(newValues));
if( command == setEhighGammaCmd)
runAction
->SetEhighGamma( setEhighGammaCmd->GetNewDoubleValue(newValues));
if( command == setnbinTtCmd)
runAction
->SetnbinTt(setnbinTtCmd->GetNewIntValue(newValues));
if( command == setTtlowCmd)
runAction
->SetTtlow( setTtlowCmd->GetNewDoubleValue(newValues));
if( command == setTthighCmd)
runAction
->SetTthigh( setTthighCmd->GetNewDoubleValue(newValues));
if( command == setnbinTbCmd)
runAction
->SetnbinTb(setnbinTbCmd->GetNewIntValue(newValues));
if( command == setTblowCmd)
runAction
->SetTblow( setTblowCmd->GetNewDoubleValue(newValues));
if( command == setTbhighCmd)
runAction
->SetTbhigh( setTbhighCmd->GetNewDoubleValue(newValues));
if( command == setnbinTsecCmd)
runAction
->SetnbinTsec(setnbinTsecCmd->GetNewIntValue(newValues));
if( command == setTseclowCmd)
runAction
->SetTseclow( setTseclowCmd->GetNewDoubleValue(newValues));
if( command == setTsechighCmd)
runAction
->SetTsechigh( setTsechighCmd->GetNewDoubleValue(newValues));
if( command == setnbinRCmd)
runAction
->SetnbinR(setnbinRCmd->GetNewIntValue(newValues));
if( command == setRlowCmd)
runAction
->SetRlow( setRlowCmd->GetNewDoubleValue(newValues));
if( command == setRhighCmd)
runAction
->SetRhigh( setRhighCmd->GetNewDoubleValue(newValues));
if( command == setnbinzvertexCmd)
runAction
->Setnbinzvertex(setnbinzvertexCmd->GetNewIntValue(newValues));
if( command == setzlowCmd)
runAction
->Setzlow( setzlowCmd->GetNewDoubleValue(newValues));
if( command == setzhighCmd)
runAction
->Setzhigh( setzhighCmd->GetNewDoubleValue(newValues));
if( command == setnbinThCmd)
runAction
->SetnbinTh(setnbinThCmd->GetNewIntValue(newValues));
if( command == setThlowCmd)
runAction
->SetThlow( setThlowCmd->GetNewDoubleValue(newValues));
if( command == setThhighCmd)
runAction
->SetThhigh( setThhighCmd->GetNewDoubleValue(newValues));
if( command == setnbinThbackCmd)
runAction
->SetnbinThBack(setnbinThbackCmd->GetNewIntValue(newValues));
if( command == setThlowbackCmd)
runAction
->SetThlowBack( setThlowbackCmd->GetNewDoubleValue(newValues));
if( command == setThhighbackCmd)
runAction
->SetThhighBack( setThhighbackCmd->GetNewDoubleValue(newValues));
if (command == RndmSaveCmd)
runAction->SetRndmFreq(RndmSaveCmd->GetNewIntValue(newValues));
if (command == RndmReadCmd)
{ G4cout << "\n---> rndm status restored from file: " << newValues << endl;
HepRandom::restoreEngineStatus(newValues);
HepRandom::showEngineStatus();
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....