Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 #include "Par03DetectorMessenger.hh" 27 28 #include "Par03DetectorConstruction.hh" 29 30 #include "G4UIcmdWithADoubleAndUnit.hh" 31 #include "G4UIcmdWithAString.hh" 32 #include "G4UIcmdWithAnInteger.hh" 33 #include "G4UIcmdWithoutParameter.hh" 34 #include "G4UIdirectory.hh" 35 36 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 37 38 Par03DetectorMessenger::Par03DetectorMessenger(Par03DetectorConstruction* aDetector) 39 : G4UImessenger(), fDetector(aDetector) 40 { 41 fExampleDir = new G4UIdirectory("/Par03/"); 42 fExampleDir->SetGuidance("UI commands specific to this example"); 43 44 fDetectorDir = new G4UIdirectory("/Par03/detector/"); 45 fDetectorDir->SetGuidance("Detector construction UI commands"); 46 47 fPrintCmd = new G4UIcmdWithoutParameter("/Par03/detector/print", this); 48 fPrintCmd->SetGuidance("Print current settings."); 49 50 fDetectorRadiusCmd = new G4UIcmdWithADoubleAndUnit("/Par03/detector/setDetectorRadius", this); 51 fDetectorRadiusCmd->SetGuidance("Set tranverse size of the detector (cylinder radius)"); 52 fDetectorRadiusCmd->SetParameterName("Size", false); 53 fDetectorRadiusCmd->SetRange("Size>0."); 54 fDetectorRadiusCmd->SetUnitCategory("Length"); 55 fDetectorRadiusCmd->AvailableForStates(G4State_PreInit); 56 fDetectorRadiusCmd->SetToBeBroadcasted(false); 57 58 fDetectorLengthCmd = new G4UIcmdWithADoubleAndUnit("/Par03/detector/setDetectorLength", this); 59 fDetectorLengthCmd->SetGuidance("Set length of the detector (cylinder length)"); 60 fDetectorLengthCmd->SetParameterName("Size", false); 61 fDetectorLengthCmd->SetRange("Size>0."); 62 fDetectorLengthCmd->SetUnitCategory("Length"); 63 fDetectorLengthCmd->AvailableForStates(G4State_PreInit); 64 fDetectorLengthCmd->SetToBeBroadcasted(false); 65 66 fDetectorMaterialCmd = new G4UIcmdWithAString("/Par03/detector/setDetectorMaterial", this); 67 fDetectorMaterialCmd->SetGuidance("Material of the detector."); 68 fDetectorMaterialCmd->SetParameterName("Name", false); 69 fDetectorMaterialCmd->AvailableForStates(G4State_PreInit); 70 fDetectorMaterialCmd->SetToBeBroadcasted(false); 71 72 fNbLayersCmd = new G4UIcmdWithAnInteger("/Par03/detector/setNbOfLayers", this); 73 fNbLayersCmd->SetGuidance("Set number of layers."); 74 fNbLayersCmd->SetParameterName("NbLayers", false); 75 fNbLayersCmd->SetRange("NbLayers>0"); 76 fNbLayersCmd->AvailableForStates(G4State_PreInit); 77 fNbLayersCmd->SetToBeBroadcasted(false); 78 79 fNbRhoCellsCmd = new G4UIcmdWithAnInteger("/Par03/detector/setNbOfRhoCells", this); 80 fNbRhoCellsCmd->SetGuidance("Set number of cells along radius."); 81 fNbRhoCellsCmd->SetParameterName("NbRhoCells", false); 82 fNbRhoCellsCmd->SetRange("NbRhoCells>0"); 83 fNbRhoCellsCmd->AvailableForStates(G4State_PreInit); 84 fNbRhoCellsCmd->SetToBeBroadcasted(false); 85 86 fNbPhiCellsCmd = new G4UIcmdWithAnInteger("/Par03/detector/setNbOfPhiCells", this); 87 fNbPhiCellsCmd->SetGuidance("Set number of cells in azimuthal angle."); 88 fNbPhiCellsCmd->SetParameterName("NbPhiCells", false); 89 fNbPhiCellsCmd->SetRange("NbPhiCells>0"); 90 fNbPhiCellsCmd->AvailableForStates(G4State_PreInit); 91 fNbPhiCellsCmd->SetToBeBroadcasted(false); 92 } 93 94 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 95 96 Par03DetectorMessenger::~Par03DetectorMessenger() 97 { 98 delete fPrintCmd; 99 delete fDetectorRadiusCmd; 100 delete fDetectorLengthCmd; 101 delete fDetectorMaterialCmd; 102 delete fNbLayersCmd; 103 delete fNbRhoCellsCmd; 104 delete fNbPhiCellsCmd; 105 delete fDetectorDir; 106 delete fExampleDir; 107 } 108 109 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 110 111 void Par03DetectorMessenger::SetNewValue(G4UIcommand* aCommand, G4String aNewValue) 112 { 113 if (aCommand == fPrintCmd) { 114 fDetector->Print(); 115 } 116 else if (aCommand == fDetectorRadiusCmd) { 117 fDetector->SetRadius(fDetectorRadiusCmd->GetNewDoubleValue(aNewValue)); 118 } 119 else if (aCommand == fDetectorLengthCmd) { 120 fDetector->SetLength(fDetectorRadiusCmd->GetNewDoubleValue(aNewValue)); 121 } 122 else if (aCommand == fDetectorMaterialCmd) { 123 fDetector->SetMaterial(aNewValue); 124 } 125 else if (aCommand == fNbLayersCmd) { 126 fDetector->SetNbOfLayers(fNbLayersCmd->GetNewIntValue(aNewValue)); 127 } 128 else if (aCommand == fNbRhoCellsCmd) { 129 fDetector->SetNbOfRhoCells(fNbRhoCellsCmd->GetNewIntValue(aNewValue)); 130 } 131 else if (aCommand == fNbPhiCellsCmd) { 132 fDetector->SetNbOfPhiCells(fNbPhiCellsCmd->GetNewIntValue(aNewValue)); 133 } 134 } 135 136 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 137 138 G4String Par03DetectorMessenger::GetCurrentValue(G4UIcommand* aCommand) 139 { 140 G4String cv; 141 142 if (aCommand == fDetectorRadiusCmd) { 143 cv = fDetectorRadiusCmd->ConvertToString(fDetector->GetRadius(), "mm"); 144 } 145 else if (aCommand == fDetectorLengthCmd) { 146 cv = fDetectorLengthCmd->ConvertToString(fDetector->GetLength(), "mm"); 147 } 148 else if (aCommand == fDetectorMaterialCmd) { 149 cv = fDetector->GetMaterial(); 150 } 151 else if (aCommand == fNbLayersCmd) { 152 cv = fNbLayersCmd->ConvertToString(fDetector->GetNbOfLayers()); 153 } 154 else if (aCommand == fNbPhiCellsCmd) { 155 cv = fNbPhiCellsCmd->ConvertToString(fDetector->GetNbOfPhiCells()); 156 } 157 else if (aCommand == fNbRhoCellsCmd) { 158 cv = fNbRhoCellsCmd->ConvertToString(fDetector->GetNbOfRhoCells()); 159 } 160 return cv; 161 }