// $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::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 TG3FlagValue TG4G3Defaults::fgkPAIR = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgkCOMP = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgkPHOT = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgkPFIS = kInActivate; // 0
-const TG3FlagValue TG4G3Defaults::fgkDRAY = kActivate2; // 2
-const TG3FlagValue TG4G3Defaults::fgkANNI = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgkBREM = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgkHADR = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgkMUNU = kInActivate; // 0
-const TG3FlagValue TG4G3Defaults::fgkDCAY = kActivate; // 1
-const TG3FlagValue TG4G3Defaults::fgkLOSS = kActivate2; // 2
-const TG3FlagValue 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() {
//
}
-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 fgkCUTGAM; break;
- case kCUTELE:
- return fgkCUTELE; break;
- case kCUTNEU:
- return fgkCUTNEU; break;
- case kCUTHAD:
- return fgkCUTHAD; break;
- case kCUTMUO:
- return fgkCUTMUO; break;
- case kBCUTE:
- return fgkBCUTE; break;
- case kBCUTM:
- return fgkBCUTM; break;
- case kDCUTE:
- return fgkDCUTE; break;
- case kDCUTM:
- return fgkDCUTM; break;
- case kPPCUTM:
- return fgkPPCUTM; 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 fgkPAIR; break;
- case kCOMP:
- return fgkCOMP; break;
- case kPHOT:
- return fgkPHOT; break;
- case kPFIS:
- return fgkPFIS; break;
- case kDRAY:
- return fgkDRAY; break;
- case kANNI:
- return fgkANNI; break;
- case kBREM:
- return fgkBREM; break;
- case kHADR:
- return fgkHADR; break;
- case kMUNU:
- return fgkMUNU; break;
- case kDCAY:
- return fgkDCAY; break;
- case kLOSS:
- return fgkLOSS; break;
- case kMULS:
- return fgkMULS; 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)) > fgkCutTolerance)
+ 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;