]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TGeant4/TG4G3ControlVector.cxx
README updated (R.Barbera)
[u/mrichter/AliRoot.git] / TGeant4 / TG4G3ControlVector.cxx
CommitLineData
ae542d51 1// $Id$
2// Category: global
3//
4// See the class description in the header file.
5
6#include "TG4G3ControlVector.h"
7#include "TG4G3Defaults.h"
8#include "TG4Globals.h"
9
10#include <G4VProcess.hh>
11
12#include <math.h>
13
14TG4G3ControlVector::TG4G3ControlVector()
15{
16 // initialize fControlVector
17 fControlVector = new TG4ControlValueVector;
18 for (G4int i=0; i<kNoG3Controls; i++) fControlVector->insert(kUnset);
19}
20
21TG4G3ControlVector::TG4G3ControlVector(const TG4G3ControlVector& right)
22{
58c0119e 23 // allocation
ae542d51 24 fControlVector = new TG4ControlValueVector;
58c0119e 25
26 // copy stuff
27 *this = right;
ae542d51 28}
29
30TG4G3ControlVector::~TG4G3ControlVector() {
31//
32 delete fControlVector;
33}
34
35// operators
36
37TG4G3ControlVector& TG4G3ControlVector::operator=(
38 const TG4G3ControlVector& right)
39{
40 // check assignement to self
41 if (this == &right) return *this;
42
43 // initialize fControlVector
58c0119e 44 fControlVector->clear();;
ae542d51 45 for (G4int i=0; i<kNoG3Controls; i++) {
46 fControlVector->insert((*right.fControlVector)[i]);
47 }
48
49 return *this;
50}
51
52G4double TG4G3ControlVector::operator[](G4int index) const
53{
54//
55 if (index < kNoG3Controls)
56 return (*fControlVector)[index];
57 else {
58 TG4Globals::Exception(
59 "TG4G3ControlVector::operator[]: index out of the vector scope");
60 return 0.;
61 }
62}
63
64// public methods
65
66void TG4G3ControlVector::SetG3Control(TG4G3Control control,
67 G4double controlValue)
68{
69// Sets the controlValue for the specified process control.
70// ---
71
72 if (control<kNoG3Controls) {
73 // conversion G4double -> G3ControlValue
74 if (abs(controlValue - kUnset) < 0.01) {
75 (*fControlVector)[control] = kUnset ;
76 }
77 else if (abs(controlValue - kInActivate) < 0.01) {
78 (*fControlVector)[control] = kInActivate;
79 }
80 else if (abs(controlValue - kActivate) < 0.01) {
81 (*fControlVector)[control] = kActivate;
82 }
83 else if (abs(controlValue - kActivate2) < 0.01) {
84 (*fControlVector)[control] = kActivate2;
85 }
86 else {
87 G4String text = "TG4G3ControlVector::SetG3Control:\n ";
88 text = text + "Inconsistent/Not-yet-implemented control has been ignored.";
89 TG4Globals::Warning(text);
90 }
91 }
92}
93
94void TG4G3ControlVector::SetG3Defaults()
95{
96// Sets G3 default values for all controls.
97// ---
98
99 for (G4int i=0; i<kNoG3Controls; i++) {
100 (*fControlVector)[i] = TG4G3Defaults::ControlValue(i);
101 }
102}
103
104G4int TG4G3ControlVector::GetControl(G4VProcess* process) const
105{
106// Returns the control value for the particle associated with
107// the specified process.
108// ---
109
110 G4String name = process->GetProcessName();
111 if (name == "conv") return (*fControlVector)(kPAIR);
112 else if (name == "compt") return (*fControlVector)(kCOMP);
113 else if (name == "phot") return (*fControlVector)(kPHOT);
114 // else if (name == "??") return (*fControlVector)(kPFIS);
115 else if ((name == "eIoni") ||
116 (name == "IeIoni") ||
117 (name == "eIoni+") ||
118 (name == "MuIoni") ||
119 (name == "IMuIonisation") ||
120 (name == "hIoni") ||
121 (name == "IhIoni"))
122 return (*fControlVector)(kDRAY);
123 else if (name == "annihil") return (*fControlVector)(kANNI);
124 else if ((name == "eBrem") ||
125 (name == "eBrem+") ||
126 (name == "IeBrems") ||
127 (name == "MuBrems") ||
128 (name == "IMuBremsstrahlung"))
129 return (*fControlVector)(kBREM);
130 // else if (name == "??") return (*fControlVector)(kHADR);
131 else if (name == "MuNucl") return (*fControlVector)(kMUNU);
132 else if (name == "Decay") return (*fControlVector)(kDCAY);
133 // else if (name == "??") return (*fControlVector)(kLOSS);
134 // !!! not yet implemented
135 else if ((name == "msc") ||
136 (name == "Imsc")) return (*fControlVector)(kMULS);
137 else return kUnset;
138}