1 /******************************************************************************
2 * T H E R M I N A T O R *
3 * THERMal heavy-IoN generATOR *
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 *
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 *
17 * Homepage: http://hirg.if.pw.edu.pl/en/therminator/ *
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 *
26 *****************************************************************************/
27 #include "DecayTable.h"
31 DecayTable::DecayTable()
33 mDecayChannels.clear();
34 mBranchingRatios.clear();
37 DecayTable::DecayTable(const DecayTable& aTable)
40 mDecayChannels.clear();
41 mBranchingRatios.clear();
42 for (int iter=0; iter<aTable.GetChannelCount(); iter++)
43 AddDecayChannel(*(aTable.GetDecayChannel(iter)));
46 DecayTable::~DecayTable()
50 DecayTable& DecayTable::operator=(const DecayTable& aTable)
52 if (this != &aTable) {
53 mDecayChannels.clear();
54 mBranchingRatios.clear();
55 for (int iter=0; iter<aTable.GetChannelCount(); iter++)
56 AddDecayChannel(*(aTable.GetDecayChannel(iter)));
63 DecayTable::AddDecayChannel(DecayChannel aChannel)
65 mDecayChannels.push_back(aChannel);
66 RecalculateBranchingRatios();
70 DecayTable::RecalculateBranchingRatios()
72 float tSumRatio = 0.0;
73 float tCurRatio = 0.0;
75 for (unsigned int tIter=0; tIter<mDecayChannels.size(); tIter++)
76 tSumRatio += mDecayChannels[tIter].GetBranchingRatio();
78 for (unsigned int tIter=0; tIter<mDecayChannels.size(); tIter++)
80 tCurRatio += mDecayChannels[tIter].GetBranchingRatio()/tSumRatio;
81 if (mBranchingRatios.size() <= tIter)
82 mBranchingRatios.push_back(tCurRatio);
84 mBranchingRatios[tIter] = tCurRatio;
89 DecayTable::GetChannelCount() const
91 return mDecayChannels.size()-1;
96 DecayTable::GetDecayChannel(int aIndex) const
98 return &(mDecayChannels[aIndex]);
102 DecayTable::GetDecayStep(int aIndex)
104 return mBranchingRatios[aIndex];
108 DecayTable::ChooseDecayChannel(double aProb)
110 unsigned int tChanIndex = 0;
111 while ((mBranchingRatios[tChanIndex] < aProb) && (tChanIndex < mDecayChannels.size()))
118 DecayTable::ChooseDecayChannelOrNot(double aProb)
120 float tSumRatio = 0.0;
122 for (unsigned int tIter=0; tIter<mDecayChannels.size(); tIter++) {
123 if ((aProb > tSumRatio) && (aProb <= tSumRatio+mDecayChannels[tIter].GetBranchingRatio()))
125 tSumRatio += mDecayChannels[tIter].GetBranchingRatio();