00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "BesMdcDigitizerMessenger.hh"
00012 #include "BesMdcDigitizer.hh"
00013 #include "G4UIdirectory.hh"
00014 #include "G4UIcommand.hh"
00015 #include "G4UIcmdWithAnInteger.hh"
00016 #include "G4UIcmdWithADouble.hh"
00017 #include "G4UIcmdWithAString.hh"
00018 #include "G4ios.hh"
00019 #include <sstream>
00020
00021 BesMdcDigitizerMessenger::BesMdcDigitizerMessenger(BesMdcDigitizer * pointer)
00022 :mdcDigitizer(pointer)
00023 {
00024 noiseDirectory = new G4UIdirectory("/mdc/noise/");
00025 noiseDirectory->SetGuidance("BESIII MDC noise control");
00026
00027
00028 noiseFlag = new G4UIcmdWithAnInteger("/mdc/noise/flag",this);
00029 noiseFlag->SetGuidance("whether to add noise to MdcDigi.");
00030 noiseFlag->SetParameterName("MdcNoiseFlag",false);
00031 noiseFlag->SetRange("MdcNoiseFlag>=0");
00032
00033
00034
00035 noiseType = new G4UIcmdWithAnInteger("/mdc/noise/type",this);
00036 noiseType->SetGuidance("select noise type.");
00037 noiseType->SetParameterName("MdcNoiseType",false);
00038 noiseType->SetRange("MdcNoiseType>=0");
00039
00040
00041
00042 noiseLevel = new G4UIcmdWithADouble("/mdc/noise/level",this);
00043 noiseLevel->SetGuidance("noise level");
00044 noiseLevel->SetParameterName("MdcNoiseLevel",false);
00045 noiseLevel->SetRange("MdcNoiseLevel>=0.");
00046
00047
00048 digiDirectory = new G4UIdirectory("/mdc/digi/");
00049 digiDirectory->SetGuidance("BESIII MDC digitizer control");
00050
00051
00052 smearFlag = new G4UIcmdWithAnInteger("/mdc/digi/smearflag",this);
00053 smearFlag->SetGuidance("whether to do T smear to MdcDigi.");
00054 smearFlag->SetParameterName("MdcSmearFlag",true);
00055 smearFlag->SetRange("MdcSmearFlag>=0");
00056 smearFlag->SetDefaultValue(1);
00057
00058
00059 mdcDRes = new G4UIcmdWithADouble("/mdc/digi/spaceres",this);
00060 mdcDRes->SetGuidance("value of space resolution");
00061 mdcDRes->SetParameterName("MdcDRes",false);
00062 mdcDRes->SetRange("MdcDRes>0");
00063
00064 effDirectory = new G4UIdirectory("/mdc/eff/");
00065 effDirectory->SetGuidance("BESIII MDC wire efficiency control");
00066
00067
00068 effFlag = new G4UIcmdWithAnInteger("/mdc/eff/flag",this);
00069 effFlag->SetGuidance("Get eff. from 0: CalSvc; 1: mac file");
00070 effFlag->SetParameterName("MdcEffFlag",false);
00071 effFlag->SetRange("MdcEffFlag>=0");
00072
00073
00074 G4UIparameter* parameter;
00075 G4bool omittable;
00076
00077
00078 layerEff = new G4UIcommand("/mdc/eff/eff",this);
00079 layerEff->SetGuidance("Set eff. of MDC layers");
00080
00081 parameter = new G4UIparameter("layer",'i',omittable = false);
00082 parameter->SetGuidance("Which layer to be modified");
00083 parameter->SetParameterRange("layer >= -1 && layer < 43");
00084 parameter->SetDefaultValue(-1);
00085 layerEff->SetParameter(parameter);
00086
00087 parameter = new G4UIparameter("eff",'d',omittable = false);
00088 parameter->SetGuidance("Eff. value");
00089 parameter->SetParameterRange("eff >= 0. && eff <=1.");
00090 parameter->SetDefaultValue(1.);
00091 layerEff->SetParameter(parameter);
00092 }
00093
00094 BesMdcDigitizerMessenger::~BesMdcDigitizerMessenger()
00095 {
00096 delete noiseDirectory;
00097 delete noiseFlag;
00098 delete noiseType;
00099 delete noiseLevel;
00100 delete digiDirectory;
00101 delete smearFlag;
00102 delete mdcDRes;
00103 delete effDirectory;
00104 delete effFlag;
00105 delete layerEff;
00106 }
00107
00108 void BesMdcDigitizerMessenger::SetNewValue(G4UIcommand * command,G4String newValue)
00109 {
00110 if( command == noiseFlag) {
00111 mdcDigitizer->SetNoiseFlag(noiseFlag->GetNewIntValue(newValue));
00112 }else if(command==noiseType){
00113 mdcDigitizer->SetNoiseType(noiseType->GetNewIntValue(newValue));
00114 }else if(command==noiseLevel){
00115 mdcDigitizer->SetNoiseLevel(noiseLevel->GetNewDoubleValue(newValue));
00116 }else if(command==smearFlag){
00117 mdcDigitizer->SetSmearFlag(smearFlag->GetNewIntValue(newValue));
00118 }else if(command==mdcDRes){
00119 mdcDigitizer->SetMdcDRes(mdcDRes->GetNewDoubleValue(newValue));
00120 }else if(command==effFlag){
00121 mdcDigitizer->SetEffFlag(effFlag->GetNewIntValue(newValue));
00122 }else if(command==layerEff){
00123 G4int layer;
00124 G4double eff;
00125 std::istringstream is ((char*)newValue.data());
00126 is >> layer >> eff;
00127 mdcDigitizer->SetEff(layer, eff);
00128 }
00129 }
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143