void example(double E0 = 50, int nevents = 100000) { TStopwatch timer; // compound nucleus = carbon KVNucleus CN(6, 12); CN.SetExcitEnergy(E0); // decay products KVEvent decay; KVNucleus* n = decay.AddParticle(); n->SetZandA(1, 2); n = decay.AddParticle(); n->SetZandA(2, 4); n = decay.AddParticle(); n->SetZandA(3, 6); MicroStat::mdweight gps; 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; } gps.SetWeight(&decay, etot); gps.initGenerateEvent(&decay); std::cout << "Edisp = " << etot << " MeV" << std::endl; KVHashList histos; TH1F* h; while ((n = decay.GetNextParticle())) { 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)); h->Sumw2(); } KVEvent event; while (nevents--) { gps.GenerateEvent(&decay, &event); while ((n = event.GetNextParticle()))((TH1F*)histos.FindObject(n->GetSymbol()))->Fill(n->GetE()); gps.resetGenerateEvent(); } TIter it(&histos); while ((h = (TH1F*)it())) { KVNucleus part(h->GetName()); new TCanvas; FitEDist(h, etot, decay.GetMult(), total_mass, part.GetMass()); } timer.Print(); }
void example(double E0 = 50, int nevents = 100000) { TStopwatch timer; // 12C* -> 3(4He) // compound nucleus = carbon KVNucleus CN(6, 12); CN.SetExcitEnergy(E0); // decay products KVEvent decay; KVNucleus* n = decay.AddParticle(); n->SetZandA(2, 4); n = decay.AddParticle(); n->SetZandA(2, 4); n = decay.AddParticle(); n->SetZandA(2, 4); MicroStat::mdweight gps; Double_t etot = E0 + decay.GetChannelQValue(); if (etot <= 0) { printf("Break-up channel is not allowed\n"); return; } gps.SetWeight(&decay, etot); gps.initGenerateEvent(&decay); TH1F* h1 = new TH1F("h1", "Kinetic energy of alpha particle 3", 200, 0, etot * 2. / 3.); h1->Sumw2(); KVEvent event; while (nevents--) { gps.GenerateEvent(&decay, &event); h1->Fill(event.GetParticle(3)->GetKE()); gps.resetGenerateEvent(); } h1->Draw(); TF1* EDis = new TF1("EDis", edist, 0., etot, 3); EDis->SetNpx(500); EDis->SetParLimits(0, 0, 1.e+08); EDis->SetParLimits(1, 0, 2 * etot); EDis->FixParameter(2, 3); gStyle->SetOptFit(1); h1->Fit(EDis, "EM"); timer.Print(); }