// $Id$
// Category: global
//
+// Author: I. Hrivnacova
+//
+// Class TG4G3Defaults
+// -------------------
// See the class description in the header file.
#include "TG4G3Defaults.h"
#include <math.h>
-// static const data members
-
-// precision tolerance
-const G4double TG4G3Defaults::fgkCutTolerance = 1. * keV;
-
-// kinetic energy cuts
-const G4double TG4G3Defaults::fgkCUTGAM = 0.001 * GeV;
-const G4double TG4G3Defaults::fgkCUTELE = 0.001 * GeV;
-const G4double TG4G3Defaults::fgkCUTNEU = 0.01 * GeV;
-const G4double TG4G3Defaults::fgkCUTHAD = 0.01 * GeV;
-const G4double TG4G3Defaults::fgkCUTMUO = 0.01 * GeV;
-const G4double TG4G3Defaults::fgkBCUTE = fgkCUTGAM;
-const G4double TG4G3Defaults::fgkBCUTM = fgkCUTGAM;
-const G4double TG4G3Defaults::fgkDCUTE = 10. * TeV;
-const G4double TG4G3Defaults::fgkDCUTM = 10. * TeV;
-const G4double TG4G3Defaults::fgkPPCUTM = 0.01 * GeV;
-
-// physics processes
-const TG4G3ControlValue TG4G3Defaults::fgkPAIR = kActivate; // 1
-const TG4G3ControlValue TG4G3Defaults::fgkCOMP = kActivate; // 1
-const TG4G3ControlValue TG4G3Defaults::fgkPHOT = kActivate; // 1
-const TG4G3ControlValue TG4G3Defaults::fgkPFIS = kInActivate; // 0
-const TG4G3ControlValue TG4G3Defaults::fgkDRAY = kActivate2; // 2
-const TG4G3ControlValue TG4G3Defaults::fgkANNI = kActivate; // 1
-const TG4G3ControlValue TG4G3Defaults::fgkBREM = kActivate; // 1
-const TG4G3ControlValue TG4G3Defaults::fgkHADR = kActivate; // 1
-const TG4G3ControlValue TG4G3Defaults::fgkMUNU = kInActivate; // 0
-const TG4G3ControlValue TG4G3Defaults::fgkDCAY = kActivate; // 1
-const TG4G3ControlValue TG4G3Defaults::fgkLOSS = kActivate2; // 2
-const TG4G3ControlValue TG4G3Defaults::fgkMULS = kActivate; // 1
+// static data members
+
+TG4G3Defaults* TG4G3Defaults::fgInstance = 0;
//_____________________________________________________________________________
TG4G3Defaults::TG4G3Defaults() {
//
+ if (fgInstance) {
+ TG4Globals::Exception(
+ "TG4G3Defaults: attempt to create two instances of singleton.");
+ }
+
+ fgInstance = this;
+
+ // fill cut vector with default values
+
+ fCutVector.SetCut(kCUTGAM, 0.001 * GeV);
+ fCutVector.SetCut(kCUTELE, 0.001 * GeV);
+ fCutVector.SetCut(kCUTNEU, 0.01 * GeV);
+ fCutVector.SetCut(kCUTHAD, 0.01 * GeV);
+ fCutVector.SetCut(kCUTMUO, 0.01 * GeV);
+ fCutVector.SetCut(kBCUTE, fCutVector[kCUTGAM]);
+ fCutVector.SetCut(kBCUTM, fCutVector[kCUTGAM]);
+ fCutVector.SetCut(kDCUTE, 10. * TeV);
+ fCutVector.SetCut(kDCUTM, 10. * TeV);
+ fCutVector.SetCut(kPPCUTM, 0.01 * GeV);
+
+ // fill control vector with default values
+ fControlVector.SetControl(kPAIR, kActivate, fCutVector); // 1
+ fControlVector.SetControl(kCOMP, kActivate, fCutVector); // 1
+ fControlVector.SetControl(kPHOT, kActivate, fCutVector); // 1
+ fControlVector.SetControl(kPFIS, kInActivate, fCutVector); // 0
+ fControlVector.SetControl(kDRAY, kInActivate, fCutVector); // 0
+ fControlVector.SetControl(kANNI, kActivate, fCutVector); // 1
+ fControlVector.SetControl(kBREM, kActivate, fCutVector); // 1
+ fControlVector.SetControl(kHADR, kActivate, fCutVector); // 1
+ fControlVector.SetControl(kMUNU, kInActivate, fCutVector); // 0
+ fControlVector.SetControl(kDCAY, kActivate, fCutVector); // 1
+ fControlVector.SetControl(kLOSS, kActivate2, fCutVector); // 2
+ fControlVector.SetControl(kMULS, kActivate, fCutVector); // 1
+ fControlVector.SetControl(kCKOV, kInActivate, fCutVector); // 0
+ fControlVector.SetControl(kRAYL, kInActivate, fCutVector); // 0
+ fControlVector.SetControl(kLABS, kInActivate, fCutVector); // 0
+ fControlVector.SetControl(kSYNC, kInActivate, fCutVector); // 0
}
+//_____________________________________________________________________________
+TG4G3Defaults::TG4G3Defaults(const TG4G3Defaults& right) {
+//
+ TG4Globals::Exception(
+ "Attempt to copy TG4G3Defaults singleton.");
+}
+
//_____________________________________________________________________________
TG4G3Defaults::~TG4G3Defaults() {
//
}
+// operators
+
//_____________________________________________________________________________
-G4double TG4G3Defaults::CutValue(G4int g3Cut)
+TG4G3Defaults&
+TG4G3Defaults::operator=(const TG4G3Defaults& right)
+{
+ // check assignement to self
+ if (this == &right) return *this;
+
+ TG4Globals::Exception(
+ "Attempt to assign TG4G3Defaults singleton.");
+
+ return *this;
+}
+
+//_____________________________________________________________________________
+G4double TG4G3Defaults::CutValue(G4int g3Cut) const
{
// Returns the G3 default value for the specified cut.
// ---
- switch (g3Cut) {
- case kCUTGAM:
- return fgkCUTGAM;
- case kCUTELE:
- return fgkCUTELE;
- case kCUTNEU:
- return fgkCUTNEU;
- case kCUTHAD:
- return fgkCUTHAD;
- case kCUTMUO:
- return fgkCUTMUO;
- case kBCUTE:
- return fgkBCUTE;
- case kBCUTM:
- return fgkBCUTM;
- case kDCUTE:
- return fgkDCUTE;
- case kDCUTM:
- return fgkDCUTM;
- case kPPCUTM:
- return fgkPPCUTM;
- default:
- TG4Globals::Warning("TG4G3Defaults::CutValue: Inconsistent cut.");
- return 0.;
- }
+ return fCutVector[g3Cut];
}
//_____________________________________________________________________________
-TG4G3ControlValue TG4G3Defaults::ControlValue(G4int control)
+TG4G3ControlValue TG4G3Defaults::ControlValue(G4int control) const
{
// Returns the G3 default value for the specified control.
// ---
- switch (control) {
- case kPAIR:
- return fgkPAIR;
- case kCOMP:
- return fgkCOMP;
- case kPHOT:
- return fgkPHOT;
- case kPFIS:
- return fgkPFIS;
- case kDRAY:
- return fgkDRAY;
- case kANNI:
- return fgkANNI;
- case kBREM:
- return fgkBREM;
- case kHADR:
- return fgkHADR;
- case kMUNU:
- return fgkMUNU;
- case kDCAY:
- return fgkDCAY;
- case kLOSS:
- return fgkLOSS;
- case kMULS:
- return fgkMULS;
- default:
- TG4Globals::Warning(
- "TG4G3Defaults::ControlValue: Inconsistent control.");
- return kUnset;
- }
+ return fControlVector[control];
}
//_____________________________________________________________________________
-G4bool TG4G3Defaults::IsDefaultCut(TG4G3Cut cut, G4double value)
+G4bool TG4G3Defaults::IsDefaultCut(TG4G3Cut cut, G4double value) const
{
// Tests if the parameter value is equal to the G3 default value.
// ---
- if (abs(value*GeV - CutValue(cut)) > fgkCutTolerance)
+ if (abs(value*GeV - CutValue(cut)) > TG4G3CutVector::Tolerance())
return false;
else
return true;
//_____________________________________________________________________________
G4bool TG4G3Defaults::IsDefaultControl(TG4G3Control control,
- G4double value)
+ TG4G3ControlValue value) const
{
// Tests if the parameter value is equal to the G3 default value.
// ---