Files
geant4/examples/extended/field/field04/src/F04DetectorMessenger.cc
T
2016-06-09 17:01:34 +02:00

293 lines
12 KiB
C++

//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/// \file field/field04/src/F04DetectorMessenger.cc
/// \brief Implementation of the F04DetectorMessenger class
//
//
#include "F04DetectorMessenger.hh"
#include "G4UIdirectory.hh"
#include "G4UIcmdWithAString.hh"
#include "G4UIcmdWithAnInteger.hh"
#include "G4UIcmdWithADoubleAndUnit.hh"
#include "G4UIcmdWithoutParameter.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
F04DetectorMessenger::F04DetectorMessenger(F04DetectorConstruction* detector)
: fDetector(detector)
{
fDetDir = new G4UIdirectory("/field04/");
fDetDir->SetGuidance(" field04 Simulation ");
fWorldMaterCmd = new G4UIcmdWithAString("/field04/SetWorldMat",this);
fWorldMaterCmd->SetGuidance("Select Material of the World");
fWorldMaterCmd->SetParameterName("wchoice",true);
fWorldMaterCmd->SetDefaultValue("Air");
fWorldMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fWorldRCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetWorldR",this);
fWorldRCmd->SetGuidance("Set Radius of the World");
fWorldRCmd->SetParameterName("WSizeR",false,false);
fWorldRCmd->SetDefaultUnit("cm");
fWorldRCmd->SetRange("WSizeR>0.");
fWorldRCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fWorldZCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetWorldZ",this);
fWorldZCmd->SetGuidance("Set Length of the World");
fWorldZCmd->SetParameterName("WSizeZ",false,false);
fWorldZCmd->SetDefaultUnit("cm");
fWorldZCmd->SetRange("WSizeZ>0.");
fWorldZCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fCaptureRCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetCaptureR",this);
fCaptureRCmd->SetGuidance("Set Radius of the Capture Magnet");
fCaptureRCmd->SetParameterName("CSizeR",false,false);
fCaptureRCmd->SetDefaultUnit("cm");
fCaptureRCmd->SetRange("CSizeR>0.");
fCaptureRCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fCaptureZCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetCaptureZ",this);
fCaptureZCmd->SetGuidance("Set Length of the Capture Magnet");
fCaptureZCmd->SetParameterName("CSizeZ",false,false);
fCaptureZCmd->SetDefaultUnit("cm");
fCaptureZCmd->SetRange("CSizeZ>0.");
fCaptureZCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fCaptureB1Cmd = new G4UIcmdWithADoubleAndUnit("/field04/SetCaptureB1",this);
fCaptureB1Cmd->SetGuidance("Set B1 of the Capture Magnet");
fCaptureB1Cmd->SetParameterName("CSizeB1",false,false);
fCaptureB1Cmd->SetDefaultUnit("tesla");
fCaptureB1Cmd->SetRange("CSizeB1>0.");
fCaptureB1Cmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fCaptureB2Cmd = new G4UIcmdWithADoubleAndUnit("/field04/SetCaptureB2",this);
fCaptureB2Cmd->SetGuidance("Set B2 of the Capture Magnet");
fCaptureB2Cmd->SetParameterName("CSizeB2",false,false);
fCaptureB2Cmd->SetDefaultUnit("tesla");
fCaptureB2Cmd->SetRange("CSizeB2>0.");
fCaptureB2Cmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fTransferRCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTransferR",this);
fTransferRCmd->SetGuidance("Set Radius of the Transfer Magnet");
fTransferRCmd->SetParameterName("TSizeR",false,false);
fTransferRCmd->SetDefaultUnit("cm");
fTransferRCmd->SetRange("TSizeR>0.");
fTransferRCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fTransferZCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTransferZ",this);
fTransferZCmd->SetGuidance("Set Length of the Transfer Magnet");
fTransferZCmd->SetParameterName("TSizeZ",false,false);
fTransferZCmd->SetDefaultUnit("cm");
fTransferZCmd->SetRange("TSizeZ>0.");
fTransferZCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fTransferBCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTransferB",this);
fTransferBCmd->SetGuidance("Set B of the Transfer Magnet");
fTransferBCmd->SetParameterName("TSizeB",false,false);
fTransferBCmd->SetDefaultUnit("tesla");
fTransferBCmd->SetRange("TSizeB>0.");
fTransferBCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fTransferPCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTransferP",this);
fTransferPCmd->SetGuidance("Set Z pos of the T-Mgnt from end of C-Mgnt");
fTransferPCmd->SetParameterName("TSizeP",false,false);
fTransferPCmd->SetDefaultUnit("cm");
fTransferPCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fTgtMaterCmd = new G4UIcmdWithAString("/field04/SetTgtMat",this);
fTgtMaterCmd->SetGuidance("Select Material of the Target");
fTgtMaterCmd->SetParameterName("tchoice",true);
fTgtMaterCmd->SetDefaultValue("Tungsten");
fTgtMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fTgtRadCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTgtRad",this);
fTgtRadCmd->SetGuidance("Set Radius of the Target");
fTgtRadCmd->SetParameterName("TgtSizeR",false,false);
fTgtRadCmd->SetDefaultUnit("cm");
fTgtRadCmd->SetRange("TgtSizeR>0.");
fTgtRadCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fTgtThickCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTgtThick",this);
fTgtThickCmd->SetGuidance("Set Thickness of the Target");
fTgtThickCmd->SetParameterName("TgtSizeZ",false,false);
fTgtThickCmd->SetDefaultUnit("cm");
fTgtThickCmd->SetRange("TgtSizeZ>0.");
fTgtThickCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fTgtPosCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTgtPos",this);
fTgtPosCmd->SetGuidance("Set Z pos of the tgt relative to C-Mgnt centre");
fTgtPosCmd->SetParameterName("TgtSizeP",false,false);
fTgtPosCmd->SetDefaultUnit("cm");
fTgtPosCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fTgtAngCmd = new G4UIcmdWithAnInteger("/field04/SetTgtAng",this);
fTgtAngCmd->
SetGuidance("Set the angle [in deg] of the Tgt relative to C-Mgnt centre");
fTgtAngCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fDgrMaterCmd = new G4UIcmdWithAString("/field04/SetDgrMat",this);
fDgrMaterCmd->SetGuidance("Select Material of the Degrader");
fDgrMaterCmd->SetParameterName("dchoice",true);
fDgrMaterCmd->SetDefaultValue("Lead");
fDgrMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fDgrRadCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetDgrRad",this);
fDgrRadCmd->SetGuidance("Set Radius of the Degrader");
fDgrRadCmd->SetParameterName("DrgSizeR",false,false);
fDgrRadCmd->SetDefaultUnit("cm");
fDgrRadCmd->SetRange("DrgSizeR>0.");
fDgrRadCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fDgrThickCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetDgrThick",this);
fDgrThickCmd->SetGuidance("Set Thickness of the Degrader");
fDgrThickCmd->SetParameterName("DgrSizeZ",false,false);
fDgrThickCmd->SetDefaultUnit("cm");
fDgrThickCmd->SetRange("DgrSizeZ>0.");
fDgrThickCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fDgrPosCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetDgrPos",this);
fDgrPosCmd->SetGuidance("Set Z pos of the Dgr relative to T-Mgnt centre");
fDgrPosCmd->SetParameterName("DgrSizeP",false,false);
fDgrPosCmd->SetDefaultUnit("cm");
fDgrPosCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
fUpdateCmd = new G4UIcmdWithoutParameter("/field04/Update",this);
fUpdateCmd->SetGuidance("Update field04 geometry");
fUpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" ");
fUpdateCmd->SetGuidance("if you changed geometrical value(s).");
fUpdateCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
F04DetectorMessenger::~F04DetectorMessenger()
{
delete fDetDir;
delete fWorldMaterCmd;
delete fWorldRCmd;
delete fWorldZCmd;
delete fCaptureRCmd;
delete fCaptureZCmd;
delete fCaptureB1Cmd;
delete fCaptureB2Cmd;
delete fTransferRCmd;
delete fTransferZCmd;
delete fTransferBCmd;
delete fTransferPCmd;
delete fTgtMaterCmd;
delete fTgtRadCmd;
delete fTgtThickCmd;
delete fTgtPosCmd;
delete fTgtAngCmd;
delete fDgrMaterCmd;
delete fDgrRadCmd;
delete fDgrThickCmd;
delete fDgrPosCmd;
delete fUpdateCmd;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void F04DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
{
if( command == fWorldMaterCmd )
{ fDetector->SetWorldMaterial(newValue);}
if( command == fTgtMaterCmd )
{ fDetector->SetTargetMaterial(newValue);}
if( command == fDgrMaterCmd )
{ fDetector->SetDegraderMaterial(newValue);}
if( command == fWorldRCmd )
{ fDetector->SetWorldSizeR(fWorldRCmd->GetNewDoubleValue(newValue));}
if( command == fWorldZCmd )
{ fDetector->SetWorldSizeZ(fWorldZCmd->GetNewDoubleValue(newValue));}
if( command == fCaptureRCmd )
fDetector->SetCaptureMgntRadius(fCaptureRCmd->GetNewDoubleValue(newValue));
if( command == fCaptureZCmd )
fDetector->SetCaptureMgntLength(fCaptureZCmd->GetNewDoubleValue(newValue));
if( command == fCaptureB1Cmd )
fDetector->SetCaptureMgntB1(fCaptureB1Cmd->GetNewDoubleValue(newValue));
if( command == fCaptureB2Cmd )
fDetector->SetCaptureMgntB2(fCaptureB2Cmd->GetNewDoubleValue(newValue));
if( command == fTransferRCmd )
fDetector->SetTransferMgntRadius(fTransferRCmd->GetNewDoubleValue(newValue));
if( command == fTransferZCmd )
fDetector->SetTransferMgntLength(fTransferZCmd->GetNewDoubleValue(newValue));
if( command == fTransferBCmd )
fDetector->SetTransferMgntB(fTransferBCmd->GetNewDoubleValue(newValue));
if( command == fTransferPCmd )
fDetector->SetTransferMgntPos(fTransferPCmd->GetNewDoubleValue(newValue));
if( command == fTgtRadCmd )
fDetector->SetTargetRadius(fTgtRadCmd->GetNewDoubleValue(newValue));
if( command == fTgtThickCmd )
fDetector->SetTargetThickness(fTgtThickCmd->GetNewDoubleValue(newValue));
if( command == fTgtPosCmd )
fDetector->SetTargetPos(fTgtPosCmd->GetNewDoubleValue(newValue));
if( command == fTgtAngCmd )
fDetector->SetTargetAngle(fTgtAngCmd->GetNewIntValue(newValue));
if( command == fDgrRadCmd )
fDetector->SetDegraderRadius(fDgrRadCmd->GetNewDoubleValue(newValue));
if( command == fDgrThickCmd )
fDetector->SetDegraderThickness(fDgrThickCmd->GetNewDoubleValue(newValue));
if( command == fDgrPosCmd )
fDetector->SetDegraderPos(fDgrPosCmd->GetNewDoubleValue(newValue));
if( command == fWorldZCmd )
fDetector->SetWorldSizeZ(fWorldZCmd->GetNewDoubleValue(newValue));
if( command == fWorldRCmd )
fDetector->SetWorldSizeR(fWorldRCmd->GetNewDoubleValue(newValue));
if( command == fUpdateCmd ) fDetector->UpdateGeometry();
}