Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // Please cite the following paper if you use << 26 // ------------------------------------------------------------------- 27 // Nucl.Instrum.Meth.B260:20-27, 2007 << 27 // $Id: DetectorMessenger.cc,v 1.2 2008-01-25 20:49:24 sincerti Exp $ >> 28 // ------------------------------------------------------------------- 28 29 29 #include "DetectorMessenger.hh" 30 #include "DetectorMessenger.hh" 30 #include "DetectorConstruction.hh" 31 #include "DetectorConstruction.hh" 31 32 32 //....oooOO0OOooo........oooOO0OOooo........oo 33 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 33 34 34 DetectorMessenger::DetectorMessenger(DetectorC 35 DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) 35 :fDetector(Det) << 36 :Detector(Det) 36 { 37 { 37 fQuadDir = new G4UIdirectory("/quad/"); << 38 quadDir = new G4UIdirectory("/quad/"); 38 fQuadDir->SetGuidance("Quadrupole control.") << 39 quadDir->SetGuidance("Quadrupole control."); 39 << 40 fModelCmd = new G4UIcmdWithAnInteger("/quad/ << 41 fModelCmd->SetGuidance("Select magnetic fiel << 42 fModelCmd->SetParameterName("model",false); << 43 fModelCmd->AvailableForStates(G4State_PreIni << 44 << 45 fProfileCmd = new G4UIcmdWithAnInteger("/dis << 46 fProfileCmd->SetGuidance("Display beam profi << 47 fProfileCmd->SetParameterName("profile",fals << 48 fProfileCmd->AvailableForStates(G4State_PreI << 49 << 50 fGridCmd = new G4UIcmdWithAnInteger("/setGri << 51 fGridCmd->SetGuidance("Put grid and shadow p << 52 fGridCmd->SetParameterName("grid",false); << 53 fGridCmd->AvailableForStates(G4State_PreInit << 54 << 55 fCoefCmd = new G4UIcmdWithAnInteger("/setCoe << 56 fCoefCmd->SetGuidance("Calculate aberration << 57 fCoefCmd->SetParameterName("coef",false); << 58 fCoefCmd->AvailableForStates(G4State_PreInit << 59 << 60 fG1Cmd = new G4UIcmdWithADouble("/quad/setG1 << 61 fG1Cmd->SetGuidance("Set G1."); << 62 fG1Cmd->SetParameterName("G1",false); << 63 fG1Cmd->AvailableForStates(G4State_PreInit,G << 64 << 65 fG2Cmd = new G4UIcmdWithADouble("/quad/setG2 << 66 fG2Cmd->SetGuidance("Set G2."); << 67 fG2Cmd->SetParameterName("G2",false); << 68 fG2Cmd->AvailableForStates(G4State_PreInit,G << 69 << 70 fG3Cmd = new G4UIcmdWithADouble("/quad/setG3 << 71 fG3Cmd->SetGuidance("Set G3."); << 72 fG3Cmd->SetParameterName("G3",false); << 73 fG3Cmd->AvailableForStates(G4State_PreInit,G << 74 << 75 fG4Cmd = new G4UIcmdWithADouble("/quad/setG4 << 76 fG4Cmd->SetGuidance("Set G4."); << 77 fG4Cmd->SetParameterName("G4",false); << 78 fG4Cmd->AvailableForStates(G4State_PreInit,G << 79 40 >> 41 modelCmd = new G4UIcmdWithAnInteger("/quad/setModel",this); >> 42 modelCmd->SetGuidance("Select magnetic field model."); >> 43 modelCmd->SetParameterName("model",false); >> 44 modelCmd->AvailableForStates(G4State_PreInit,G4State_Idle); >> 45 >> 46 profileCmd = new G4UIcmdWithAnInteger("/displayProfile",this); >> 47 profileCmd->SetGuidance("Display beam profile."); >> 48 profileCmd->SetParameterName("profile",false); >> 49 profileCmd->AvailableForStates(G4State_PreInit,G4State_Idle); >> 50 >> 51 gridCmd = new G4UIcmdWithAnInteger("/setGrid",this); >> 52 gridCmd->SetGuidance("Put grid and shadow plane."); >> 53 gridCmd->SetParameterName("grid",false); >> 54 gridCmd->AvailableForStates(G4State_PreInit,G4State_Idle); >> 55 >> 56 G1Cmd = new G4UIcmdWithADouble("/quad/setG1",this); >> 57 G1Cmd->SetGuidance("Set G1."); >> 58 G1Cmd->SetParameterName("G1",false); >> 59 G1Cmd->AvailableForStates(G4State_PreInit,G4State_Idle); >> 60 >> 61 G2Cmd = new G4UIcmdWithADouble("/quad/setG2",this); >> 62 G2Cmd->SetGuidance("Set G2."); >> 63 G2Cmd->SetParameterName("G2",false); >> 64 G2Cmd->AvailableForStates(G4State_PreInit,G4State_Idle); >> 65 >> 66 G3Cmd = new G4UIcmdWithADouble("/quad/setG3",this); >> 67 G3Cmd->SetGuidance("Set G3."); >> 68 G3Cmd->SetParameterName("G3",false); >> 69 G3Cmd->AvailableForStates(G4State_PreInit,G4State_Idle); >> 70 >> 71 G4Cmd = new G4UIcmdWithADouble("/quad/setG4",this); >> 72 G4Cmd->SetGuidance("Set G4."); >> 73 G4Cmd->SetParameterName("G4",false); >> 74 G4Cmd->AvailableForStates(G4State_PreInit,G4State_Idle); >> 75 >> 76 UpdateCmd = new G4UIcmdWithoutParameter("/quad/update",this); >> 77 UpdateCmd->SetGuidance("Update calorimeter geometry."); >> 78 UpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" "); >> 79 UpdateCmd->SetGuidance("if you changed geometrical value(s)."); >> 80 UpdateCmd->AvailableForStates(G4State_Idle); 80 } 81 } 81 82 82 //....oooOO0OOooo........oooOO0OOooo........oo 83 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 83 84 84 DetectorMessenger::~DetectorMessenger() 85 DetectorMessenger::~DetectorMessenger() 85 { 86 { 86 delete fG1Cmd; << 87 delete G1Cmd; 87 delete fG2Cmd; << 88 delete G2Cmd; 88 delete fG3Cmd; << 89 delete G3Cmd; 89 delete fG4Cmd; << 90 delete G4Cmd; 90 delete fQuadDir; << 91 delete UpdateCmd; 91 delete fModelCmd; << 92 delete quadDir; 92 delete fProfileCmd; << 93 delete modelCmd; 93 delete fGridCmd; << 94 delete profileCmd; 94 delete fCoefCmd; << 95 delete gridCmd; 95 } 96 } 96 97 97 //....oooOO0OOooo........oooOO0OOooo........oo 98 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 98 99 99 void DetectorMessenger::SetNewValue(G4UIcomman 100 void DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue) 100 { 101 { 101 if( command == fModelCmd ) << 102 if( command == modelCmd ) 102 { fDetector->SetModel(fModelCmd->GetNewIntV << 103 { Detector->SetModel(modelCmd->GetNewIntValue(newValue));} 103 << 104 if( command == fProfileCmd ) << 105 { fDetector->SetProfile(fProfileCmd->GetNew << 106 104 107 if( command == fGridCmd ) << 105 if( command == profileCmd ) 108 { fDetector->SetGrid(fGridCmd->GetNewIntVal << 106 { Detector->SetProfile(profileCmd->GetNewIntValue(newValue));} 109 107 110 if( command == fCoefCmd ) << 108 if( command == gridCmd ) 111 { fDetector->SetCoef(fGridCmd->GetNewIntVal << 109 { Detector->SetGrid(gridCmd->GetNewIntValue(newValue));} 112 110 113 if( command == fG1Cmd ) << 111 if( command == G1Cmd ) 114 { fDetector->SetG1(fG1Cmd->GetNewDoubleValu << 112 { Detector->SetG1(G1Cmd->GetNewDoubleValue(newValue));} 115 113 116 if( command == fG2Cmd ) << 114 if( command == G2Cmd ) 117 { fDetector->SetG2(fG1Cmd->GetNewDoubleValu << 115 { Detector->SetG2(G1Cmd->GetNewDoubleValue(newValue));} 118 116 119 if( command == fG3Cmd ) << 117 if( command == G3Cmd ) 120 { fDetector->SetG3(fG1Cmd->GetNewDoubleValu << 118 { Detector->SetG3(G1Cmd->GetNewDoubleValue(newValue));} 121 119 122 if( command == fG4Cmd ) << 120 if( command == G4Cmd ) 123 { fDetector->SetG4(fG1Cmd->GetNewDoubleValu << 121 { Detector->SetG4(G1Cmd->GetNewDoubleValue(newValue));} 124 122 >> 123 if( command == UpdateCmd ) >> 124 { Detector->UpdateGeometry();} 125 } 125 } 126 126