KaliVeda
Toolkit for HIC analysis
Loading...
Searching...
No Matches
ExampleAnalysis_KVEventMixerN_2Body.cpp

Build \f$\alpha\f$-\f$\alpha\f$ azimuthal correlations using event mixing technique

Example of use of KVEventMixerN which is a generic implementation of event mixing for N-particle correlation studies. In this example, N=2.

#ifndef __CORRELATOR_H
#define __CORRELATOR_H
#include "KVReconEventSelector.h"
#include "KVEventMixerN.h"
#include "KVEventClassifier.h"
#include <vector>
#include <deque>
class ExampleAnalysis_KVEventMixerN_2Body : public KVReconEventSelector {
struct particle {
double phi;
int det_index;
particle() = default;
particle(particle&&) = default;
particle(const particle&) = default;
particle(const KVReconstructedNucleus& p) : phi{p.GetPhi()},
det_index{p.GetStoppingDetector()->GetIndex()}
{}
};
TString get_cor_histo_name(int bin, const TString& quantity)
{
return Form("h_cor_%s_bin_%d", quantity.Data(), bin);
}
TString get_uncor_histo_name(int bin, const TString& quantity)
{
return Form("h_uncor_%s_bin_%d", quantity.Data(), bin);
}
public:
virtual void InitRun();
virtual void EndRun() {}
virtual void InitAnalysis();
virtual Bool_t Analysis();
virtual void EndAnalysis() {}
ClassDef(ExampleAnalysis_KVEventMixerN_2Body, 0) //User analysis class
};
#endif
bool Bool_t
#define ClassDef(name, id)
winID h TVirtualViewer3D TVirtualGLPainter p
char * Form(const char *fmt,...)
Simple class for sorting events according to global variables.
Generic event mixing algorithm for N-particle correlation studies.
virtual void InitAnalysis()
virtual void EndRun()
virtual Bool_t Analysis()
void AddHisto(TH1 *histo)
virtual void EndAnalysis()
virtual void InitRun()
Base class for user analysis of reconstructed data.
Nuclei reconstructed from data measured by a detector array .
const char * Data() const
#include "ExampleAnalysis_KVEventMixerN_2Body.h"
ClassImp(ExampleAnalysis_KVEventMixerN_2Body)
void ExampleAnalysis_KVEventMixerN_2Body::InitAnalysis(void)
{
// Declaration of histograms, global variables, etc.
// Called at the beginning of the analysis
// The examples given are compatible with interactive, batch,
// and PROOFLite analyses.
AddGV("KVMult", "mtot"); // total multiplicity
mult_bin = GetGVList()->AddEventClassifier("mtot");
// Multiplicity cuts corresponding to 5 equal statistics bins of Xe+Sn 50AMeV
std::vector<Double_t> mult_slices = {8.4195047, 14.449584, 21.173604, 28.044737};
for (auto cut : mult_slices) mult_bin->AddCut(cut);
for (int i = 0; i <= mult_slices.size(); ++i) {
AddHisto<TH1F>(get_cor_histo_name(i, "dphi"), Form("Correlated spectrum #Delta#phi bin %d", i), 21, -4.5, 184.5);
AddHisto<TH1F>(get_uncor_histo_name(i, "dphi"), Form("Uncorrelated spectrum #Delta#phi bin %d", i), 21, -4.5, 184.5);
}
auto t = AddTree("check_tree", "check event classifier");
GetGVList()->MakeBranches(t);
/*** DEFINE WHERE TO SAVE THE RESULTS ***/
SetJobOutputFileName("ExampleAnalysis_KVEventMixerN_2Body_results.root");
}
//_____________________________________
void ExampleAnalysis_KVEventMixerN_2Body::InitRun(void)
{
// Reject events with less identified particles than the acquisition multiplicity trigger
SetTriggerConditionsForRun(GetCurrentRun()->GetNumber());
}
//_____________________________________
Bool_t ExampleAnalysis_KVEventMixerN_2Body::Analysis(void)
{
auto bin = mult_bin->GetEventClassification();
GetGVList()->FillBranches();
event_mixer.ProcessEvent(bin,
[ = ](int bin_num, KVRefVec<KVReconstructedNucleus>& alpha) {
// treat pair from same event
if (&alpha[0] == &alpha[1]) return; // avoid same alpha!!
auto dphi = pos.GetAzimuthalWidth(alpha[0].GetPhi(), alpha[1].GetPhi());
if (dphi > 180) dphi = 360 - dphi;
GetHisto(get_cor_histo_name(bin_num, "dphi"))->Fill(dphi);
},
[ = ](int bin_num, KVReconstructedNucleus & alpha, KVRefVec<particle>& other_alpha) {
// treat pair from different events
if (other_alpha[0].det_index != alpha.GetStoppingDetector()->GetIndex()) { // avoid particles in same detector!
auto dphi = pos.GetAzimuthalWidth(alpha.GetPhi(), other_alpha[0].phi);
if (dphi > 180) dphi = 360 - dphi;
GetHisto(get_uncor_histo_name(bin_num, "dphi"))->Fill(dphi);
}
},
ReconEventIterator(GetEvent(), {
"alpha",
{
return n->IsOK() && n->IsAMeasured() && n->IsIsotope(2, 4);
}
}),
ReconEventIterator(GetEvent(), {
"alpha",
{
return n->IsOK() && n->IsAMeasured() && n->IsIsotope(2, 4);
}
})
);
return kTRUE;
}
constexpr Bool_t kTRUE
Base class used for handling geometry in a multidetector array.
Definition KVPosition.h:91
Double_t GetAzimuthalWidth(Double_t phmin=-1., Double_t phimax=-1.) const
Vector of references to objects.
Definition KVRefVec.h:24
Wrapper class for iterating over nuclei in KVReconstructedEvent accessed through base pointer or refe...
const Int_t n
void FillTree(TTree &myTree, const RooDataSet &data)
ClassImp(TPyArg)