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 27 #include "DetectorConstructionMessenger.hh" 28 29 #include "DetectorConstruction.hh" 30 31 #include "G4RunManager.hh" 32 #include "G4UIcmdWith3Vector.hh" 33 #include "G4UIcmdWith3VectorAndUnit.hh" 34 #include "G4UIcmdWithABool.hh" 35 #include "G4UIcmdWithADouble.hh" 36 #include "G4UIcmdWithADoubleAndUnit.hh" 37 #include "G4UIcmdWithAString.hh" 38 #include "G4UIdirectory.hh" 39 #include "G4ios.hh" 40 41 DetectorConstructionMessenger::DetectorConstructionMessenger(DetectorConstruction* mpga) 42 : fTarget(mpga) 43 { 44 fMyXtalDirectory = new G4UIdirectory("/xtal/"); 45 fMyXtalDirectory->SetGuidance("Crystal setup control commands."); 46 47 fXtalMaterialCmd = new G4UIcmdWithAString("/xtal/setMaterial", this); 48 fXtalMaterialCmd->SetGuidance("Set crystal material."); 49 fXtalMaterialCmd->SetParameterName("xMat", true); 50 fXtalMaterialCmd->SetDefaultValue("G4_Si"); 51 52 fXtalSizeCmd = new G4UIcmdWith3VectorAndUnit("/xtal/setSize", this); 53 fXtalSizeCmd->SetGuidance("Set crystal size."); 54 fXtalSizeCmd->SetParameterName("xtalSizeX", "xtalSizeY", "xtalSizeZ", true); 55 fXtalSizeCmd->SetDefaultValue(G4ThreeVector(6., 2., 6.)); 56 fXtalSizeCmd->SetDefaultUnit("mm"); 57 58 fXtalBRCmd = new G4UIcmdWith3VectorAndUnit("/xtal/setBR", this); 59 fXtalBRCmd->SetGuidance("Set crystal bending radius."); 60 fXtalBRCmd->SetParameterName("xtalBRX", "xtalBRY", "xtalBRZ", true); 61 fXtalBRCmd->SetDefaultValue(G4ThreeVector(0., 0., 0.)); 62 fXtalBRCmd->SetDefaultUnit("m"); 63 64 fXtalAngleCmd = new G4UIcmdWith3VectorAndUnit("/xtal/setAngle", this); 65 fXtalAngleCmd->SetGuidance("Set crystal angles."); 66 fXtalAngleCmd->SetParameterName("xtalAngleX", "xtalAngleY", "xtalAngleZ", true); 67 fXtalAngleCmd->SetDefaultValue(G4ThreeVector(0., 0., 0.)); 68 fXtalAngleCmd->SetDefaultUnit("rad"); 69 70 fXtalECCmd = new G4UIcmdWithAString("/xtal/setEC", this); 71 fXtalECCmd->SetGuidance("Set crystal EC."); 72 fXtalECCmd->SetParameterName("xEC", true); 73 fXtalECCmd->SetDefaultValue("data/Si220pl"); 74 } 75 76 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 77 78 DetectorConstructionMessenger::~DetectorConstructionMessenger() 79 { 80 delete fXtalMaterialCmd; 81 delete fXtalSizeCmd; 82 delete fXtalAngleCmd; 83 delete fXtalECCmd; 84 delete fXtalBRCmd; 85 } 86 87 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 88 89 void DetectorConstructionMessenger::SetNewValue(G4UIcommand* command, G4String newValue) 90 { 91 if (command == fXtalMaterialCmd) { 92 fTarget->SetMaterial(newValue); 93 } 94 if (command == fXtalSizeCmd) { 95 fTarget->SetSizes(fXtalSizeCmd->GetNew3VectorValue(newValue)); 96 } 97 if (command == fXtalBRCmd) { 98 fTarget->SetBR(fXtalBRCmd->GetNew3VectorValue(newValue)); 99 } 100 if (command == fXtalAngleCmd) { 101 fTarget->SetAngles(fXtalAngleCmd->GetNew3VectorValue(newValue)); 102 } 103 if (command == fXtalECCmd) { 104 fTarget->SetEC(newValue); 105 } 106 } 107 108 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 109 110 G4String DetectorConstructionMessenger::GetCurrentValue(G4UIcommand* command) 111 { 112 G4String cv; 113 114 if (command == fXtalMaterialCmd) { 115 cv = fTarget->GetMaterial(); 116 } 117 if (command == fXtalSizeCmd) { 118 cv = fXtalSizeCmd->ConvertToString(fTarget->GetSizes(), "mm"); 119 } 120 if (command == fXtalBRCmd) { 121 cv = fXtalBRCmd->ConvertToString(fTarget->GetBR(), "m"); 122 } 123 if (command == fXtalAngleCmd) { 124 cv = fXtalAngleCmd->ConvertToString(fTarget->GetAngles(), "rad"); 125 } 126 if (command == fXtalECCmd) { 127 cv = fTarget->GetEC(); 128 } 129 return cv; 130 } 131 132 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 133