+void AliHFMassFitter::Reset() {
+ cout<<"Reset called: delete histogram, set mean value to 1.85 and sigma to 0.012"<<endl;
+ fMass=1.85;
+ fSigmaSgn=0.012;
+ cout<<"Reset "<<fhistoInvMass<<endl;
+ if(fhistoInvMass) {
+ //cout<<"esiste"<<endl;
+ delete fhistoInvMass;
+ fhistoInvMass=NULL;
+ cout<<fhistoInvMass<<endl;
+ }
+ else cout<<"histogram doesn't exist, do not delete"<<endl;
+
+}
+
+//_________________________________________________________________________
+
+void AliHFMassFitter::InitNtuParam(char *ntuname) {
+ // Create ntuple to keep fit parameters
+ fntuParam=0;
+ fntuParam=new TNtuple(ntuname,"Contains fit parameters","intbkg1:slope1:conc1:intGB:meanGB:sigmaGB:intbkg2:slope2:conc2:inttot:slope3:conc3:intsgn:meansgn:sigmasgn:intbkg1Err:slope1Err:conc1Err:intGBErr:meanGBErr:sigmaGBErr:intbkg2Err:slope2Err:conc2Err:inttotErr:slope3Err:conc3Err:intsgnErr:meansgnErr:sigmasgnErr");
+
+}
+
+//_________________________________________________________________________
+
+void AliHFMassFitter::FillNtuParam() {
+ // Fill ntuple with fit parameters
+
+ Float_t nothing=0.;
+
+ if (ftypeOfFit4Bkg==2) {
+ fntuParam->SetBranchAddress("intbkg1",&fFitPars[0]);
+ fntuParam->SetBranchAddress("slope1",&fFitPars[1]);
+ fntuParam->SetBranchAddress("conc1",&fFitPars[2]);
+ fntuParam->SetBranchAddress("intGB",&fFitPars[3]);
+ fntuParam->SetBranchAddress("meanGB",&fFitPars[4]);
+ fntuParam->SetBranchAddress("sigmaGB",&fFitPars[5]);
+ fntuParam->SetBranchAddress("intbkg2",&fFitPars[6]);
+ fntuParam->SetBranchAddress("slope2",&fFitPars[7]);
+ fntuParam->SetBranchAddress("conc2",&fFitPars[8]);
+ fntuParam->SetBranchAddress("inttot",&fFitPars[9]);
+ fntuParam->SetBranchAddress("slope3",&fFitPars[10]);
+ fntuParam->SetBranchAddress("conc3",&fFitPars[11]);
+ fntuParam->SetBranchAddress("intsgn",&fFitPars[12]);
+ fntuParam->SetBranchAddress("meansgn",&fFitPars[13]);
+ fntuParam->SetBranchAddress("sigmasgn",&fFitPars[14]);
+
+ fntuParam->SetBranchAddress("intbkg1Err",&fFitPars[15]);
+ fntuParam->SetBranchAddress("slope1Err",&fFitPars[16]);
+ fntuParam->SetBranchAddress("conc1Err",&fFitPars[17]);
+ fntuParam->SetBranchAddress("intGBErr",&fFitPars[18]);
+ fntuParam->SetBranchAddress("meanGBErr",&fFitPars[19]);
+ fntuParam->SetBranchAddress("sigmaGBErr",&fFitPars[20]);
+ fntuParam->SetBranchAddress("intbkg2Err",&fFitPars[21]);
+ fntuParam->SetBranchAddress("slope2Err",&fFitPars[22]);
+ fntuParam->SetBranchAddress("conc2Err",&fFitPars[23]);
+ fntuParam->SetBranchAddress("inttotErr",&fFitPars[24]);
+ fntuParam->SetBranchAddress("slope3Err",&fFitPars[25]);
+ fntuParam->SetBranchAddress("conc3Err",&fFitPars[26]);
+ fntuParam->SetBranchAddress("intsgnErr",&fFitPars[27]);
+ fntuParam->SetBranchAddress("meansgnErr",&fFitPars[28]);
+ fntuParam->SetBranchAddress("sigmasgnErr",&fFitPars[29]);
+
+ } else {
+
+ if(ftypeOfFit4Bkg==3){
+ fntuParam->SetBranchAddress("intbkg1",&fFitPars[0]);
+ fntuParam->SetBranchAddress("slope1",¬hing);
+ fntuParam->SetBranchAddress("conc1",¬hing);
+ fntuParam->SetBranchAddress("intGB",&fFitPars[1]);
+ fntuParam->SetBranchAddress("meanGB",&fFitPars[2]);
+ fntuParam->SetBranchAddress("sigmaGB",&fFitPars[3]);
+ fntuParam->SetBranchAddress("intbkg2",&fFitPars[4]);
+ fntuParam->SetBranchAddress("slope2",¬hing);
+ fntuParam->SetBranchAddress("conc2",¬hing);
+ fntuParam->SetBranchAddress("inttot",&fFitPars[6]);
+ fntuParam->SetBranchAddress("slope3",¬hing);
+ fntuParam->SetBranchAddress("conc3",¬hing);
+ fntuParam->SetBranchAddress("intsgn",&fFitPars[6]);
+ fntuParam->SetBranchAddress("meansgn",&fFitPars[7]);
+ fntuParam->SetBranchAddress("sigmasgn",&fFitPars[8]);
+
+ fntuParam->SetBranchAddress("intbkg1Err",&fFitPars[9]);
+ fntuParam->SetBranchAddress("slope1Err",¬hing);
+ fntuParam->SetBranchAddress("conc1Err",¬hing);
+ fntuParam->SetBranchAddress("intGBErr",&fFitPars[10]);
+ fntuParam->SetBranchAddress("meanGBErr",&fFitPars[11]);
+ fntuParam->SetBranchAddress("sigmaGBErr",&fFitPars[12]);
+ fntuParam->SetBranchAddress("intbkg2Err",&fFitPars[13]);
+ fntuParam->SetBranchAddress("slope2Err",¬hing);
+ fntuParam->SetBranchAddress("conc2Err",¬hing);
+ fntuParam->SetBranchAddress("inttotErr",&fFitPars[15]);
+ fntuParam->SetBranchAddress("slope3Err",¬hing);
+ fntuParam->SetBranchAddress("conc3Err",¬hing);
+ fntuParam->SetBranchAddress("intsgnErr",&fFitPars[15]);
+ fntuParam->SetBranchAddress("meansgnErr",&fFitPars[16]);
+ fntuParam->SetBranchAddress("sigmasgnErr",&fFitPars[17]);
+
+ }
+ else{
+ fntuParam->SetBranchAddress("intbkg1",&fFitPars[0]);
+ fntuParam->SetBranchAddress("slope1",&fFitPars[1]);
+ fntuParam->SetBranchAddress("conc1",¬hing);
+ fntuParam->SetBranchAddress("intGB",&fFitPars[2]);
+ fntuParam->SetBranchAddress("meanGB",&fFitPars[3]);
+ fntuParam->SetBranchAddress("sigmaGB",&fFitPars[4]);
+ fntuParam->SetBranchAddress("intbkg2",&fFitPars[5]);
+ fntuParam->SetBranchAddress("slope2",&fFitPars[6]);
+ fntuParam->SetBranchAddress("conc2",¬hing);
+ fntuParam->SetBranchAddress("inttot",&fFitPars[7]);
+ fntuParam->SetBranchAddress("slope3",&fFitPars[8]);
+ fntuParam->SetBranchAddress("conc3",¬hing);
+ fntuParam->SetBranchAddress("intsgn",&fFitPars[9]);
+ fntuParam->SetBranchAddress("meansgn",&fFitPars[10]);
+ fntuParam->SetBranchAddress("sigmasgn",&fFitPars[11]);
+
+ fntuParam->SetBranchAddress("intbkg1Err",&fFitPars[12]);
+ fntuParam->SetBranchAddress("slope1Err",&fFitPars[13]);
+ fntuParam->SetBranchAddress("conc1Err",¬hing);
+ fntuParam->SetBranchAddress("intGBErr",&fFitPars[14]);
+ fntuParam->SetBranchAddress("meanGBErr",&fFitPars[15]);
+ fntuParam->SetBranchAddress("sigmaGBErr",&fFitPars[16]);
+ fntuParam->SetBranchAddress("intbkg2Err",&fFitPars[17]);
+ fntuParam->SetBranchAddress("slope2Err",&fFitPars[18]);
+ fntuParam->SetBranchAddress("conc2Err",¬hing);
+ fntuParam->SetBranchAddress("inttotErr",&fFitPars[19]);
+ fntuParam->SetBranchAddress("slope3Err",&fFitPars[20]);
+ fntuParam->SetBranchAddress("conc3Err",¬hing);
+ fntuParam->SetBranchAddress("intsgnErr",&fFitPars[21]);
+ fntuParam->SetBranchAddress("meansgnErr",&fFitPars[22]);
+ fntuParam->SetBranchAddress("sigmasgnErr",&fFitPars[23]);
+ }
+
+ }
+ fntuParam->TTree::Fill();
+}
+
+//_________________________________________________________________________
+
+TNtuple* AliHFMassFitter::NtuParamOneShot(char *ntuname){
+ // Create, fill and return ntuple with fit parameters
+
+ InitNtuParam(ntuname);
+ FillNtuParam();
+ return fntuParam;
+}
+//_________________________________________________________________________
+
+void AliHFMassFitter::RebinMass(Int_t bingroup){
+ // Rebin invariant mass histogram
+
+ if(bingroup<1){
+ cout<<"Error! Cannot group "<<bingroup<<" bins\n";
+ fNbin=fhistoInvMass->GetNbinsX();
+ cout<<"Kept original number of bins: "<<fNbin<<endl;
+ } else{
+ fhistoInvMass->Rebin(bingroup);
+ fNbin = fhistoInvMass->GetNbinsX();
+ cout<<"New number of bins: "<<fNbin<<endl;
+ }
+
+
+}
+
+//************* fit
+
+//___________________________________________________________________________
+