By default, 10**5 events are generated for the decay of a Carbon-12 nucleus with E*=50 MeV.
Histograms are filled with the kinetic energy distributions of the three particles, which are then fitted using the exact microcanonical probability distribution for a classical gas of 3 unequal-mass particles.
#include "KVNucleus.h"
#include "KVNucleusEvent.h"
#include "mdweight.h"
double edist(
double*
x,
double* par)
{
if (
E > 0 &&
E * par[3] < par[1]) {
double w = par[0] *
pow(
E /
pow(par[1], 3), 0.5);
w *=
pow((1. - par[3] *
E / par[1]), (3.*par[2] - 8.) / 2.);
}
return 0.;
}
{
if (!EDis) EDis =
new TF1(
"EDis", edist, 0., etot, 4);
}
void example(
double E0 = 50,
int nevents = 100000)
{
CN.SetExcitEnergy(E0);
Double_t etot = E0 + decay.GetChannelQValue();
Double_t total_mass = decay.GetSum(
"GetMass");
if (etot <= 0) {
printf("Break-up channel is not allowed\n");
return;
}
std::cout << "Edisp = " << etot << " MeV" << std::endl;
for (auto& n : decay) {
Double_t kappa = total_mass / (total_mass -
n.GetMass());
std::cout <<
n.GetSymbol() <<
" : max KE = " << 1. / kappa <<
" * " << etot <<
" MeV" << std::endl;
std::cout <<
n.GetSymbol() <<
" : m/M = " <<
n.GetMass() / total_mass <<
" k = " << kappa << std::endl;
histos.
Add(h =
new TH1F(
n.GetSymbol(),
Form(
"Kinetic energy of %s",
n.GetSymbol()), 200, 0, etot));
}
while (nevents--) {
for (
auto& n :
event)((
TH1F*)histos.FindObject(
n.GetSymbol()))->Fill(
n.GetE());
}
while ((h = (
TH1F*)it())) {
FitEDist(h, etot, decay.GetMult(), total_mass, part.GetMass());
}
}
char * Form(const char *fmt,...)
R__EXTERN TStyle * gStyle
Extended version of ROOT THashList.
An event container for KVNucleus objects.
Description of properties and kinematics of atomic nuclei.
virtual void Add(TObject *obj)
void GenerateEvent(KVEvent *partition, KVEvent *event)
Calculate molecular dynamics ensemble weights for events .
void resetGenerateEvent()
void initGenerateEvent(KVEvent *partition)
virtual void SetWeight(KVEvent *e, Double_t E)
virtual void SetNpx(Int_t npx=100)
virtual void SetParLimits(Int_t ipar, Double_t parmin, Double_t parmax)
virtual void FixParameter(Int_t ipar, Double_t value)
virtual TFitResultPtr Fit(const char *formula, Option_t *option="", Option_t *goption="", Double_t xmin=0, Double_t xmax=0)
virtual void Sumw2(Bool_t flag=kTRUE)
const char * GetName() const override
void Print(Option_t *option="") const override
void SetOptFit(Int_t fit=1)
RVec< PromoteTypes< T0, T1 > > pow(const RVec< T0 > &v, const T1 &y)