Fixing error on gcc 4.5.1
[u/mrichter/AliRoot.git] / TTherminator / Therminator / DecayTable.cxx
CommitLineData
2e967919 1/******************************************************************************
2 * T H E R M I N A T O R *
3 * THERMal heavy-IoN generATOR *
4 * version 1.0 *
5 * *
6 * Authors of the model: Wojciech Broniowski, Wojciech.Broniowski@ifj.edu.pl, *
7 * Wojciech Florkowski, Wojciech.Florkowski@ifj.edu.pl *
8 * Authors of the code: Adam Kisiel, kisiel@if.pw.edu.pl *
9 * Tomasz Taluc, ttaluc@if.pw.edu.pl *
10 * Code designers: Adam Kisiel, Tomasz Taluc, Wojciech Broniowski, *
11 * Wojciech Florkowski *
12 * *
13 * For the detailed description of the program and furhter references *
14 * to the description of the model plesase refer to: nucl-th/0504047, *
15 * accessibile at: http://www.arxiv.org/nucl-th/0504047 *
16 * *
17 * Homepage: http://hirg.if.pw.edu.pl/en/therminator/ *
18 * *
19 * This code can be freely used and redistributed. However if you decide to *
20 * make modifications to the code, please contact the authors, especially *
21 * if you plan to publish the results obtained with such modified code. *
22 * Any publication of results obtained using this code must include the *
23 * reference to nucl-th/0504047 and the published version of it, when *
24 * available. *
25 * *
26 *****************************************************************************/
27#include "DecayTable.h"
28
29using namespace std;
30
31DecayTable::DecayTable()
32{
33 mDecayChannels.clear();
34 mBranchingRatios.clear();
35}
36
37DecayTable::DecayTable(const DecayTable& aTable)
38{
39
40 mDecayChannels.clear();
41 mBranchingRatios.clear();
42 for (int iter=0; iter<aTable.GetChannelCount(); iter++)
43 AddDecayChannel(*(aTable.GetDecayChannel(iter)));
44}
45
46DecayTable::~DecayTable()
47{
48}
49
50void
51DecayTable::AddDecayChannel(DecayChannel aChannel)
52{
53 mDecayChannels.push_back(aChannel);
54 RecalculateBranchingRatios();
55}
56
57void
58DecayTable::RecalculateBranchingRatios()
59{
60 float tSumRatio = 0.0;
61 float tCurRatio = 0.0;
62
63 for (unsigned int tIter=0; tIter<mDecayChannels.size(); tIter++)
64 tSumRatio += mDecayChannels[tIter].GetBranchingRatio();
65
66 for (unsigned int tIter=0; tIter<mDecayChannels.size(); tIter++)
67 {
68 tCurRatio += mDecayChannels[tIter].GetBranchingRatio()/tSumRatio;
69 if (mBranchingRatios.size() <= tIter)
70 mBranchingRatios.push_back(tCurRatio);
71 else
72 mBranchingRatios[tIter] = tCurRatio;
73 }
74}
75
76int
77DecayTable::GetChannelCount() const
78{
79 return mDecayChannels.size()-1;
80}
81
82
83const DecayChannel*
84DecayTable::GetDecayChannel(int aIndex) const
85{
86 return &(mDecayChannels[aIndex]);
87}
88
89float
90DecayTable::GetDecayStep(int aIndex)
91{
92 return mBranchingRatios[aIndex];
93}
94
95int
96DecayTable::ChooseDecayChannel(double aProb)
97{
98 unsigned int tChanIndex = 0;
99 while ((mBranchingRatios[tChanIndex] < aProb) && (tChanIndex < mDecayChannels.size()))
100 tChanIndex++;
101
102 return tChanIndex;
103}
104
105int
106DecayTable::ChooseDecayChannelOrNot(double aProb)
107{
108 float tSumRatio = 0.0;
109
110 for (unsigned int tIter=0; tIter<mDecayChannels.size(); tIter++) {
111 if ((aProb > tSumRatio) && (aProb <= tSumRatio+mDecayChannels[tIter].GetBranchingRatio()))
112 return tIter;
113 tSumRatio += mDecayChannels[tIter].GetBranchingRatio();
114 }
115
116 return -1;
117}
118