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 // Please cite the following paper if you use this software 27 // Nucl.Instrum.Meth.B260:20-27, 2007 27 // Nucl.Instrum.Meth.B260:20-27, 2007 28 28 29 #include "DetectorMessenger.hh" 29 #include "DetectorMessenger.hh" 30 #include "DetectorConstruction.hh" 30 #include "DetectorConstruction.hh" 31 31 32 //....oooOO0OOooo........oooOO0OOooo........oo 32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 33 33 34 DetectorMessenger::DetectorMessenger(DetectorC 34 DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) 35 :fDetector(Det) 35 :fDetector(Det) 36 { 36 { 37 fQuadDir = new G4UIdirectory("/quad/"); 37 fQuadDir = new G4UIdirectory("/quad/"); 38 fQuadDir->SetGuidance("Quadrupole control.") 38 fQuadDir->SetGuidance("Quadrupole control."); 39 39 40 fModelCmd = new G4UIcmdWithAnInteger("/quad/ 40 fModelCmd = new G4UIcmdWithAnInteger("/quad/setModel",this); 41 fModelCmd->SetGuidance("Select magnetic fiel 41 fModelCmd->SetGuidance("Select magnetic field model."); 42 fModelCmd->SetParameterName("model",false); 42 fModelCmd->SetParameterName("model",false); 43 fModelCmd->AvailableForStates(G4State_PreIni 43 fModelCmd->AvailableForStates(G4State_PreInit,G4State_Idle); 44 44 45 fProfileCmd = new G4UIcmdWithAnInteger("/dis 45 fProfileCmd = new G4UIcmdWithAnInteger("/displayProfile",this); 46 fProfileCmd->SetGuidance("Display beam profi 46 fProfileCmd->SetGuidance("Display beam profile."); 47 fProfileCmd->SetParameterName("profile",fals 47 fProfileCmd->SetParameterName("profile",false); 48 fProfileCmd->AvailableForStates(G4State_PreI 48 fProfileCmd->AvailableForStates(G4State_PreInit,G4State_Idle); 49 49 50 fGridCmd = new G4UIcmdWithAnInteger("/setGri 50 fGridCmd = new G4UIcmdWithAnInteger("/setGrid",this); 51 fGridCmd->SetGuidance("Put grid and shadow p 51 fGridCmd->SetGuidance("Put grid and shadow plane."); 52 fGridCmd->SetParameterName("grid",false); 52 fGridCmd->SetParameterName("grid",false); 53 fGridCmd->AvailableForStates(G4State_PreInit 53 fGridCmd->AvailableForStates(G4State_PreInit,G4State_Idle); 54 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 55 fG1Cmd = new G4UIcmdWithADouble("/quad/setG1",this); 61 fG1Cmd->SetGuidance("Set G1."); 56 fG1Cmd->SetGuidance("Set G1."); 62 fG1Cmd->SetParameterName("G1",false); 57 fG1Cmd->SetParameterName("G1",false); 63 fG1Cmd->AvailableForStates(G4State_PreInit,G 58 fG1Cmd->AvailableForStates(G4State_PreInit,G4State_Idle); 64 59 65 fG2Cmd = new G4UIcmdWithADouble("/quad/setG2 60 fG2Cmd = new G4UIcmdWithADouble("/quad/setG2",this); 66 fG2Cmd->SetGuidance("Set G2."); 61 fG2Cmd->SetGuidance("Set G2."); 67 fG2Cmd->SetParameterName("G2",false); 62 fG2Cmd->SetParameterName("G2",false); 68 fG2Cmd->AvailableForStates(G4State_PreInit,G 63 fG2Cmd->AvailableForStates(G4State_PreInit,G4State_Idle); 69 64 70 fG3Cmd = new G4UIcmdWithADouble("/quad/setG3 65 fG3Cmd = new G4UIcmdWithADouble("/quad/setG3",this); 71 fG3Cmd->SetGuidance("Set G3."); 66 fG3Cmd->SetGuidance("Set G3."); 72 fG3Cmd->SetParameterName("G3",false); 67 fG3Cmd->SetParameterName("G3",false); 73 fG3Cmd->AvailableForStates(G4State_PreInit,G 68 fG3Cmd->AvailableForStates(G4State_PreInit,G4State_Idle); 74 69 75 fG4Cmd = new G4UIcmdWithADouble("/quad/setG4 70 fG4Cmd = new G4UIcmdWithADouble("/quad/setG4",this); 76 fG4Cmd->SetGuidance("Set G4."); 71 fG4Cmd->SetGuidance("Set G4."); 77 fG4Cmd->SetParameterName("G4",false); 72 fG4Cmd->SetParameterName("G4",false); 78 fG4Cmd->AvailableForStates(G4State_PreInit,G 73 fG4Cmd->AvailableForStates(G4State_PreInit,G4State_Idle); 79 74 >> 75 fUpdateCmd = new G4UIcmdWithoutParameter("/quad/update",this); >> 76 fUpdateCmd->SetGuidance("Update calorimeter geometry."); >> 77 fUpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" "); >> 78 fUpdateCmd->SetGuidance("if you changed geometrical value(s)."); >> 79 fUpdateCmd->AvailableForStates(G4State_Idle); 80 } 80 } 81 81 82 //....oooOO0OOooo........oooOO0OOooo........oo 82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 83 83 84 DetectorMessenger::~DetectorMessenger() 84 DetectorMessenger::~DetectorMessenger() 85 { 85 { 86 delete fG1Cmd; 86 delete fG1Cmd; 87 delete fG2Cmd; 87 delete fG2Cmd; 88 delete fG3Cmd; 88 delete fG3Cmd; 89 delete fG4Cmd; 89 delete fG4Cmd; >> 90 delete fUpdateCmd; 90 delete fQuadDir; 91 delete fQuadDir; 91 delete fModelCmd; 92 delete fModelCmd; 92 delete fProfileCmd; 93 delete fProfileCmd; 93 delete fGridCmd; 94 delete fGridCmd; 94 delete fCoefCmd; << 95 } 95 } 96 96 97 //....oooOO0OOooo........oooOO0OOooo........oo 97 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 98 98 99 void DetectorMessenger::SetNewValue(G4UIcomman 99 void DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue) 100 { 100 { 101 if( command == fModelCmd ) 101 if( command == fModelCmd ) 102 { fDetector->SetModel(fModelCmd->GetNewIntV 102 { fDetector->SetModel(fModelCmd->GetNewIntValue(newValue));} 103 103 104 if( command == fProfileCmd ) 104 if( command == fProfileCmd ) 105 { fDetector->SetProfile(fProfileCmd->GetNew 105 { fDetector->SetProfile(fProfileCmd->GetNewIntValue(newValue));} 106 106 107 if( command == fGridCmd ) 107 if( command == fGridCmd ) 108 { fDetector->SetGrid(fGridCmd->GetNewIntVal 108 { fDetector->SetGrid(fGridCmd->GetNewIntValue(newValue));} 109 109 110 if( command == fCoefCmd ) << 111 { fDetector->SetCoef(fGridCmd->GetNewIntVal << 112 << 113 if( command == fG1Cmd ) 110 if( command == fG1Cmd ) 114 { fDetector->SetG1(fG1Cmd->GetNewDoubleValu 111 { fDetector->SetG1(fG1Cmd->GetNewDoubleValue(newValue));} 115 112 116 if( command == fG2Cmd ) 113 if( command == fG2Cmd ) 117 { fDetector->SetG2(fG1Cmd->GetNewDoubleValu 114 { fDetector->SetG2(fG1Cmd->GetNewDoubleValue(newValue));} 118 115 119 if( command == fG3Cmd ) 116 if( command == fG3Cmd ) 120 { fDetector->SetG3(fG1Cmd->GetNewDoubleValu 117 { fDetector->SetG3(fG1Cmd->GetNewDoubleValue(newValue));} 121 118 122 if( command == fG4Cmd ) 119 if( command == fG4Cmd ) 123 { fDetector->SetG4(fG1Cmd->GetNewDoubleValu 120 { fDetector->SetG4(fG1Cmd->GetNewDoubleValue(newValue));} 124 121 >> 122 if( command == fUpdateCmd ) >> 123 { fDetector->UpdateGeometry();} 125 } 124 } 126 125