//______________________________________________________________________________
-Double_t fitf_pol2(Double_t* x, Double_t* par) {
+Double_t fitf_pol2(Double_t* x, Double_t* par)
+{
Double_t fitValue =
(par[0]+
par[1]*x[0]+
par[2]*x[0]*x[0]);
return fitValue;
}
-Double_t fitf_pol3(Double_t* x, Double_t* par) {
+Double_t fitf_pol3(Double_t* x, Double_t* par)
+{
Double_t fitValue =
(par[0]+
par[1]*x[0]+
par[3]*x[0]*x[0]*x[0]);
return fitValue;
}
-Double_t fitf_pol4(Double_t* x, Double_t* par) {
+Double_t fitf_pol4(Double_t* x, Double_t* par)
+{
Double_t fitValue =
(par[0]+
par[1]*x[0]+
return fitValue;
}
-AliCentralityByFunction::AliCentralityByFunction() {
+AliCentralityByFunction::AliCentralityByFunction() :
+ finrootfile(0),
+ foutrootfilename(0),
+ foutrootfile(0),
+ fhistnames(),
+ fpercentXsec(0),
+ fitfunc(),
+ fitter()
+{
// standard constructor
fitter["fitf_pol2"] = new TF1("fitf_pol2",fitf_pol2,0,1,3);
fitter["fitf_pol2"]->SetLineColor(kRed);
fitter["fitf_pol6"]->SetLineColor(kRed);
}
-AliCentralityByFunction::~AliCentralityByFunction() {
- // destructor
-}
-
-void AliCentralityByFunction::AddHisto(TString name) {
- histnames.push_back(name);
-}
-
-void AliCentralityByFunction::SetPercentileFile(TString filename) {
- outrootfilename = filename;
-}
-
-void AliCentralityByFunction::SetPercentileCrossSection(Float_t xsec) {
- percentXsec = xsec;
-}
-
-void AliCentralityByFunction::SetFitFunction(TString distribution, TString func, Double_t xmin, Double_t xmax) {
+void AliCentralityByFunction::SetFitFunction(TString distribution, TString func, Double_t xmin, Double_t xmax)
+{
+ // Set fit function
fitfunc[distribution] = func;
fitter[fitfunc[distribution]]->SetRange(xmin,xmax);
}
-void AliCentralityByFunction::MakePercentiles(TString infilename) {
+void AliCentralityByFunction::MakePercentiles(TString infilename)
+{
+ // Make percentile bins
+
TH1D *hpercentile;
// open inrootfile, outrootfile
- inrootfile = new TFile(infilename);
- outrootfile = new TFile(outrootfilename,"RECREATE");
+ finrootfile = new TFile(infilename);
+ foutrootfile = new TFile(foutrootfilename,"RECREATE");
// loop over all distribution names
- vector<TString>::const_iterator hni;
- for(hni=histnames.begin(); hni!=histnames.end(); hni++) {
+ std::vector<TString>::const_iterator hni;
+ for(hni=fhistnames.begin(); hni!=fhistnames.end(); hni++) {
hpercentile = FitHisto(*hni);
- outrootfile->cd();
+ foutrootfile->cd();
hpercentile->Write();
}
// close inrootfile, outrootfile
- inrootfile->Close();
- outrootfile->Close();
-
+ finrootfile->Close();
+ foutrootfile->Close();
}
- TH1D *AliCentralityByFunction::FitHisto(TString hdistributionName) {
- TH2D *hdist = (TH2D*) (inrootfile->Get(hdistributionName));
+TH1D *AliCentralityByFunction::FitHisto(TString hdistributionName)
+{
+ // Fit histogram
+ TH2D *hdist = (TH2D*) (finrootfile->Get(hdistributionName));
TProfile *profile =hdist->ProfileX();
// fitter[fitfunc[hdistributionName]]->SetRange(0,profile->GetBinCenter(profile->GetNbinsX()));
profile->Fit(fitter[fitfunc[hdistributionName]], "RNM");
- outrootfile->cd();
+ foutrootfile->cd();
profile->Write();
fitter[fitfunc[hdistributionName]]->Write(hdistributionName.Append("_fit"));
return MakePercentHisto(hdist);
}
-TH1D * AliCentralityByFunction::MakePercentHisto(TH2D *histo) {
+TH1D * AliCentralityByFunction::MakePercentHisto(TH2D *histo)
+{
TH2D *htemp = (TH2D*)histo->Clone("htemp");
TString hdistributionName = htemp->GetTitle();
- const int NUM_DIVISION=500;
+ const int num_DIVISION=500;
- TH1D *hpercent = new TH1D("","",NUM_DIVISION,0,htemp->GetXaxis()->GetBinCenter(htemp->GetNbinsX()));
+ TH1D *hpercent = new TH1D("","",num_DIVISION,0,htemp->GetXaxis()->GetBinCenter(htemp->GetNbinsX()));
hpercent->Reset();
- double Xpoint, Ypoint, Xcomp, Ycomp, count;
+ double xpoint, ypoint, xcomp, ycomp, count;
- double Xmax = htemp->GetXaxis()->GetBinCenter(htemp->GetNbinsX());
- double Xmin = 0;
+ double xmax = htemp->GetXaxis()->GetBinCenter(htemp->GetNbinsX());
+ double xmin = 0;
- double delta = (Xmax - Xmin) / NUM_DIVISION;
+ double delta = (xmax - xmin) / num_DIVISION;
double slopePerp; // slope of the perpendicular line
double slopeFunction;
- cout << "Start Percentile Histo for distribution " << hdistributionName << " with fit function " << fitfunc[hdistributionName] << endl;
+ std::cout << "Start Percentile Histo for distribution " << hdistributionName << " with fit function " << fitfunc[hdistributionName] << std::endl;
// move perpendicular line along fitting curve
// and count number of points on the right
- for (int i = 0; i <= NUM_DIVISION; i++) {
- Xcomp = Xmin + i * delta;
- Ycomp = fitter[fitfunc[hdistributionName]]->Eval(Xcomp);
+ for (int i = 0; i <= num_DIVISION; i++) {
+ xcomp = xmin + i * delta;
+ ycomp = fitter[fitfunc[hdistributionName]]->Eval(xcomp);
count = 0.0;
- slopeFunction = fitter[fitfunc[hdistributionName]]->Derivative(Xcomp,NULL,0.0001);
+ slopeFunction = fitter[fitfunc[hdistributionName]]->Derivative(xcomp,NULL,0.0001);
slopePerp = -1.0 /slopeFunction;
//
// equation of perpendicular line
// (y-Ycomp)/(x-Xcomp) = slopePerp
//
for (int ibiny = 1; ibiny < htemp->GetNbinsY(); ibiny++) {
- Ypoint = htemp->GetYaxis()->GetBinCenter(ibiny);
+ ypoint = htemp->GetYaxis()->GetBinCenter(ibiny);
- double XonLine =(Ypoint - Ycomp)/slopePerp + Xcomp;
+ double xonLine =(ypoint - ycomp)/slopePerp + xcomp;
// double YonLine = slopePerp*(XonLine - Xcomp) +Ycomp;
for (int ibinx = 1; ibinx < htemp->GetNbinsX(); ibinx++) {
- Xpoint = htemp->GetXaxis()->GetBinCenter(ibinx);
+ xpoint = htemp->GetXaxis()->GetBinCenter(ibinx);
//
// (XonLine,Ypoint) lies on the perpendicular
//
- if ((Xpoint > XonLine && Xpoint > Xcomp - 0.5)||
- (Xpoint > Xcomp + 0.2)) {
+ if ((xpoint > xonLine && xpoint > xcomp - 0.5)||
+ (xpoint > xcomp + 0.2)) {
count += htemp->GetBinContent(ibinx,ibiny);
}
return hpercent;
}
-
-
-
// //
///////////////////////////////////////////////////////////////////////////////
-#include "TObject.h"
+#include <vector>
+#include <map>
+#include <TString.h>
// forward decl
class TF1;
+class TH1D;
+class TH2D;
class AliCentralityByFunction : public TObject {
public:
AliCentralityByFunction();
- virtual ~AliCentralityByFunction();
+ virtual ~AliCentralityByFunction() {}
- void SetPercentileFile(TString outrootfilename);
- void SetPercentileCrossSection(Float_t percentXsec);
- // void SetFitFunction(TString distribution, TString func);
+ void SetPercentileFile(TString filename) { foutrootfilename = filename; }
+ void SetPercentileCrossSection(Float_t xsec) { fpercentXsec = xsec; }
void SetFitFunction(TString distribution, TString func, Double_t xmin, Double_t xmax);
- void AddHisto(TString name);
+ void AddHisto(TString name) { fhistnames.push_back(name); }
void MakePercentiles(TString infilename);
private:
-
- TFile *inrootfile;
- TString outrootfilename;
- TFile *outrootfile;
-
- vector<TString> histnames;
- Float_t percentXsec;
- map<TString, TString>fitfunc; // mapping from distribution to fit function name
- map<TString, TF1 *>fitter; // mapping from fit function name to corresponding TF1
+ AliCentralityByFunction(const AliCentralityByFunction&);
+ AliCentralityByFunction& operator=(const AliCentralityByFunction&);
+
+ TFile *finrootfile; // input root file
+ TString foutrootfilename; // output root file name
+ TFile *foutrootfile; // output root file
+ std::vector<TString> fhistnames; // hist names
+ Float_t fpercentXsec; // percentile cross section
+ std::map<TString, TString> fitfunc; // mapping from distribution to fit function name
+ std::map<TString, TF1 *> fitter; // mapping from fit function name to corresponding TF1
TH1D *FitHisto(TString hdistributionName);
- TH1D * MakePercentHisto(TH2D *hist);
+ TH1D *MakePercentHisto(TH2D *hist);
ClassDef(AliCentralityByFunction, 1)
};
#endif
-
-