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()
51 DecayTable::AddDecayChannel(DecayChannel aChannel)
53 mDecayChannels.push_back(aChannel);
54 RecalculateBranchingRatios();
58 DecayTable::RecalculateBranchingRatios()
60 float tSumRatio = 0.0;
61 float tCurRatio = 0.0;
63 for (unsigned int tIter=0; tIter<mDecayChannels.size(); tIter++)
64 tSumRatio += mDecayChannels[tIter].GetBranchingRatio();
66 for (unsigned int tIter=0; tIter<mDecayChannels.size(); tIter++)
68 tCurRatio += mDecayChannels[tIter].GetBranchingRatio()/tSumRatio;
69 if (mBranchingRatios.size() <= tIter)
70 mBranchingRatios.push_back(tCurRatio);
72 mBranchingRatios[tIter] = tCurRatio;
77 DecayTable::GetChannelCount() const
79 return mDecayChannels.size()-1;
84 DecayTable::GetDecayChannel(int aIndex) const
86 return &(mDecayChannels[aIndex]);
90 DecayTable::GetDecayStep(int aIndex)
92 return mBranchingRatios[aIndex];
96 DecayTable::ChooseDecayChannel(double aProb)
98 unsigned int tChanIndex = 0;
99 while ((mBranchingRatios[tChanIndex] < aProb) && (tChanIndex < mDecayChannels.size()))
106 DecayTable::ChooseDecayChannelOrNot(double aProb)
108 float tSumRatio = 0.0;
110 for (unsigned int tIter=0; tIter<mDecayChannels.size(); tIter++) {
111 if ((aProb > tSumRatio) && (aProb <= tSumRatio+mDecayChannels[tIter].GetBranchingRatio()))
113 tSumRatio += mDecayChannels[tIter].GetBranchingRatio();