ROOT logo
/**************************************************************************
 * Author: Andrey Ivanov.                                                 *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

//-------------------------------------------------------------------------
//    Description: 
//    This class include into LRC library for Long-Range Correlation analysis
//    it makes fit of the 1d histogramm
//    calculates ax+b coefficients with error and hi square
//    Origin: Petr Naumenko, SPbSU-CERN, Petr.Naoumenko@cern.ch,
//    Andrey Ivanov (SPbSU-CERN), Igor Altsebeev (SPbSU-CERN) 
//-------------------------------------------------------------------------

/* $Id$ */

#include "AliLRCFit.h"
#include "TH1D.h"
#include "math.h"

class TH1D;

ClassImp(AliLRCFit) 


AliLRCFit::AliLRCFit():TObject(),fN (0), fTrueN(0), fNmin (0), fNmax(0), fS1(.0), fSz(.0), fSfz(.0), fSf(.0), fSf2(.0), fhi2(.0), fw(.0), fz(.0), f(.0), fnum(.0), fdf(.0), fdelta(.0), fa(.0), fb(.0), fda(.0), fdb(.0), fda1(.0), fdb1(.0), fxmin(.0), fxmax(.0){
//Empty constructor
}

AliLRCFit::AliLRCFit(TH1D * const h,double xShift):TObject(),fN (0), fTrueN(0), fNmin (0), fNmax(0), fS1(.0), fSz(.0), fSfz(.0), fSf(.0), fSf2(.0), fhi2(.0), fw(.0), fz(.0), f(.0), fnum(.0), fdf(.0), fdelta(.0), fa(.0), fb(.0), fda(.0), fdb(.0), fda1(.0), fdb1(.0), fxmin(.0), fxmax(.0){
    //Constructor make fit of 1d histogramm
AliLRCFit(h,h->GetXaxis()->GetXmin(),h->GetXaxis()->GetXmax(),xShift);
}

AliLRCFit::AliLRCFit(TH1D * const h, double xmin, double xmax,double xShift):TObject(),fN (0), fTrueN(0), fNmin (0), fNmax(0), fS1(.0), fSz(.0), fSfz(.0), fSf(.0), fSf2(.0), fhi2(.0), fw(.0), fz(.0), f(.0), fnum(.0), fdf(.0), fdelta(.0), fa(.0), fb(.0), fda(.0), fdb(.0), fda1(.0), fdb1(.0), fxmin(.0), fxmax(.0){
     //Constructor make fit of 1d histogramm between xmin and xmax
	fNmin=h->GetXaxis()->FindBin(xmin);
	fNmax=h->GetXaxis()->FindBin(xmax);
	//double xShift=0;
	for(int i=fNmin; i<=fNmax; i++){
	fw = h->GetBinError(i);
	f= h->GetBinCenter(i)-xShift;
	fz= h->GetBinContent(i);
	if(fw){
		fTrueN++;
		fS1  += 1.0/(fw*fw);
		fSz  += fz/(fw*fw);
		fSf  += f/(fw*fw);
		fSfz += f*fz/(fw*fw);
		fSf2 += (f*f)/(fw*fw);
		}
	}
	if(fTrueN<2)return;
        fdelta = fS1*fSf2 - fSf*fSf;
        fa = (fSf2*fSz - fSf*fSfz)/fdelta;
	fb = (fS1*fSfz - fSf*fSz)/fdelta;
 	fda = sqrt(fSf2/fdelta);
 	fdb = sqrt(fS1/fdelta);
        fdb1 = 0;
        fda1 = 0;
	fhi2 = 0;
        for(int i=fNmin; i<=fNmax; i++){
	fw = h->GetBinError(i);
	f= h->GetBinCenter(i)-xShift;
	fz= h->GetBinContent(i);
	if(fw){
		double fDletaZ2=fz-fa-fb*f;
		fDletaZ2*=fDletaZ2;
		fhi2 += fDletaZ2/(fw*fw);
		fda1 += ( fDletaZ2/(fdelta*fdelta) ) * ((fSf2 - fSf*f)/ (fw*fw))*((fSf2 - fSf*f)/ (fw*fw));
		fdb1 += ( fDletaZ2/(fdelta*fdelta) ) * ((fS1*f - fSf)/ (fw*fw))*((fS1*f - fSf)/ (fw*fw));
		}
	}
	fda1 = sqrt( fda1 );
	fdb1 = sqrt( fdb1 );
	fhi2 = fTrueN > 2 ? fhi2 / (fTrueN-2) : -1;
}

AliLRCFit::~AliLRCFit() {
}

double AliLRCFit::Geta() const {return fa;}
double AliLRCFit::Getb() const {return fb;}
double AliLRCFit::Getda() const {return fda;}
double AliLRCFit::Getdb() const {return fdb;}
double AliLRCFit::Getda1() const {return fda1;}
double AliLRCFit::Getdb1() const {return fdb1;}
double AliLRCFit::Gethi2() const {return fhi2;}
double AliLRCFit::Getf() const {return f;}
double AliLRCFit::Getxmin() const {return fxmin;}
double AliLRCFit::Getxmax() const {return fxmax;}
int AliLRCFit::GetN() const {return fN;}
double AliLRCFit::GetFitRange() const
{
//Returns range between xmin and xmax
return (fxmax-fxmin);
}



 AliLRCFit.cxx:1
 AliLRCFit.cxx:2
 AliLRCFit.cxx:3
 AliLRCFit.cxx:4
 AliLRCFit.cxx:5
 AliLRCFit.cxx:6
 AliLRCFit.cxx:7
 AliLRCFit.cxx:8
 AliLRCFit.cxx:9
 AliLRCFit.cxx:10
 AliLRCFit.cxx:11
 AliLRCFit.cxx:12
 AliLRCFit.cxx:13
 AliLRCFit.cxx:14
 AliLRCFit.cxx:15
 AliLRCFit.cxx:16
 AliLRCFit.cxx:17
 AliLRCFit.cxx:18
 AliLRCFit.cxx:19
 AliLRCFit.cxx:20
 AliLRCFit.cxx:21
 AliLRCFit.cxx:22
 AliLRCFit.cxx:23
 AliLRCFit.cxx:24
 AliLRCFit.cxx:25
 AliLRCFit.cxx:26
 AliLRCFit.cxx:27
 AliLRCFit.cxx:28
 AliLRCFit.cxx:29
 AliLRCFit.cxx:30
 AliLRCFit.cxx:31
 AliLRCFit.cxx:32
 AliLRCFit.cxx:33
 AliLRCFit.cxx:34
 AliLRCFit.cxx:35
 AliLRCFit.cxx:36
 AliLRCFit.cxx:37
 AliLRCFit.cxx:38
 AliLRCFit.cxx:39
 AliLRCFit.cxx:40
 AliLRCFit.cxx:41
 AliLRCFit.cxx:42
 AliLRCFit.cxx:43
 AliLRCFit.cxx:44
 AliLRCFit.cxx:45
 AliLRCFit.cxx:46
 AliLRCFit.cxx:47
 AliLRCFit.cxx:48
 AliLRCFit.cxx:49
 AliLRCFit.cxx:50
 AliLRCFit.cxx:51
 AliLRCFit.cxx:52
 AliLRCFit.cxx:53
 AliLRCFit.cxx:54
 AliLRCFit.cxx:55
 AliLRCFit.cxx:56
 AliLRCFit.cxx:57
 AliLRCFit.cxx:58
 AliLRCFit.cxx:59
 AliLRCFit.cxx:60
 AliLRCFit.cxx:61
 AliLRCFit.cxx:62
 AliLRCFit.cxx:63
 AliLRCFit.cxx:64
 AliLRCFit.cxx:65
 AliLRCFit.cxx:66
 AliLRCFit.cxx:67
 AliLRCFit.cxx:68
 AliLRCFit.cxx:69
 AliLRCFit.cxx:70
 AliLRCFit.cxx:71
 AliLRCFit.cxx:72
 AliLRCFit.cxx:73
 AliLRCFit.cxx:74
 AliLRCFit.cxx:75
 AliLRCFit.cxx:76
 AliLRCFit.cxx:77
 AliLRCFit.cxx:78
 AliLRCFit.cxx:79
 AliLRCFit.cxx:80
 AliLRCFit.cxx:81
 AliLRCFit.cxx:82
 AliLRCFit.cxx:83
 AliLRCFit.cxx:84
 AliLRCFit.cxx:85
 AliLRCFit.cxx:86
 AliLRCFit.cxx:87
 AliLRCFit.cxx:88
 AliLRCFit.cxx:89
 AliLRCFit.cxx:90
 AliLRCFit.cxx:91
 AliLRCFit.cxx:92
 AliLRCFit.cxx:93
 AliLRCFit.cxx:94
 AliLRCFit.cxx:95
 AliLRCFit.cxx:96
 AliLRCFit.cxx:97
 AliLRCFit.cxx:98
 AliLRCFit.cxx:99
 AliLRCFit.cxx:100
 AliLRCFit.cxx:101
 AliLRCFit.cxx:102
 AliLRCFit.cxx:103
 AliLRCFit.cxx:104
 AliLRCFit.cxx:105
 AliLRCFit.cxx:106
 AliLRCFit.cxx:107
 AliLRCFit.cxx:108