// $Id$
-// Category: physics
+// 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::fgCutTolerance = 1. * keV;
-
-// kinetic energy cuts
-const G4double TG4G3Defaults::fgCUTGAM = 0.001 * GeV;
-const G4double TG4G3Defaults::fgCUTELE = 0.001 * GeV;
-const G4double TG4G3Defaults::fgCUTNEU = 0.01 * GeV;
-const G4double TG4G3Defaults::fgCUTHAD = 0.01 * GeV;
-const G4double TG4G3Defaults::fgCUTMUO = 0.01 * GeV;
-const G4double TG4G3Defaults::fgBCUTE = fgCUTGAM;
-const G4double TG4G3Defaults::fgBCUTM = fgCUTGAM;
-const G4double TG4G3Defaults::fgDCUTE = 10. * TeV;
-const G4double TG4G3Defaults::fgDCUTM = 10. * TeV;
-const G4double TG4G3Defaults::fgPPCUTM = 0.01 * GeV;
-
-// physics processes
-const TG3FlagValue TG4G3Defaults::fgPAIR = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgCOMP = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgPHOT = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgPFIS = kInActivate; // 0
-const TG3FlagValue TG4G3Defaults::fgDRAY = kActivate2; // 2
-const TG3FlagValue TG4G3Defaults::fgANNI = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgBREM = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgHADR = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgMUNU = kInActivate; // 0
-const TG3FlagValue TG4G3Defaults::fgDCAY = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgLOSS = kActivate2; // 2
-const TG3FlagValue TG4G3Defaults::fgMULS = 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() {
//
}
-G4double TG4G3Defaults::CutValue(G4int g3Cut)
+// operators
+
+//_____________________________________________________________________________
+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 fgCUTGAM; break;
- case kCUTELE:
- return fgCUTELE; break;
- case kCUTNEU:
- return fgCUTNEU; break;
- case kCUTHAD:
- return fgCUTHAD; break;
- case kCUTMUO:
- return fgCUTMUO; break;
- case kBCUTE:
- return fgBCUTE; break;
- case kBCUTM:
- return fgBCUTM; break;
- case kDCUTE:
- return fgDCUTE; break;
- case kDCUTM:
- return fgDCUTM; break;
- case kPPCUTM:
- return fgPPCUTM; break;
- default:
- TG4Globals::Warning("TG4G3Defaults::CutValue: Inconsistent cut.");
- return 0.;
- }
+ return fCutVector[g3Cut];
}
-TG3FlagValue TG4G3Defaults::FlagValue(G4int g3Flag)
+//_____________________________________________________________________________
+TG4G3ControlValue TG4G3Defaults::ControlValue(G4int control) const
{
-// Returns the G3 default value for the specified flag.
+// Returns the G3 default value for the specified control.
// ---
- switch (g3Flag) {
- case kPAIR:
- return fgPAIR; break;
- case kCOMP:
- return fgCOMP; break;
- case kPHOT:
- return fgPHOT; break;
- case kPFIS:
- return fgPFIS; break;
- case kDRAY:
- return fgDRAY; break;
- case kANNI:
- return fgANNI; break;
- case kBREM:
- return fgBREM; break;
- case kHADR:
- return fgHADR; break;
- case kMUNU:
- return fgMUNU; break;
- case kDCAY:
- return fgDCAY; break;
- case kLOSS:
- return fgLOSS; break;
- case kMULS:
- return fgMULS; break;
- default:
- TG4Globals::Warning("TG4G3Defaults::FlagValue: Inconsistent flag.");
- return kUnset;
- }
+ return fControlVector[control];
}
-G4bool TG4G3Defaults::IsDefaultCut(TG3Cut g3Cut, 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(g3Cut)) > fgCutTolerance)
+ if (abs(value*GeV - CutValue(cut)) > TG4G3CutVector::Tolerance())
return false;
else
return true;
}
-G4bool TG4G3Defaults::IsDefaultFlag(TG3Flag g3Flag, G4double value)
+//_____________________________________________________________________________
+G4bool TG4G3Defaults::IsDefaultControl(TG4G3Control control,
+ TG4G3ControlValue value) const
{
// Tests if the parameter value is equal to the G3 default value.
// ---
- if (value == FlagValue(g3Flag))
+ if (value == ControlValue(control))
return true;
else
return false;