53bb7733ea899723e6a6de4ea71c30df57185442
[u/mrichter/AliRoot.git] / TTherminator / Therminator / DecayTable.cxx
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
29 using namespace std;
30
31 DecayTable::DecayTable()
32 {
33   mDecayChannels.clear();
34   mBranchingRatios.clear();
35 }
36
37 DecayTable::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
46 DecayTable::~DecayTable()
47 {
48 }
49
50 void 
51 DecayTable::AddDecayChannel(DecayChannel aChannel)
52 {
53   mDecayChannels.push_back(aChannel);
54   RecalculateBranchingRatios();
55 }
56
57 void 
58 DecayTable::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
76 int  
77 DecayTable::GetChannelCount() const
78 {
79   return mDecayChannels.size()-1;
80 }
81
82
83 const DecayChannel* 
84 DecayTable::GetDecayChannel(int aIndex) const
85 {
86   return &(mDecayChannels[aIndex]);
87 }
88
89 float 
90 DecayTable::GetDecayStep(int aIndex)
91 {
92   return mBranchingRatios[aIndex];
93 }
94
95 int   
96 DecayTable::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
105 int   
106 DecayTable::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