]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STAT/TStatToolkit.cxx
Fixed shadowed variable
[u/mrichter/AliRoot.git] / STAT / TStatToolkit.cxx
index 82e6015dd9e5af78620f00596ff42e8c6e39a77f..32d86951ef3c650f963f5c97f5cbe7ff8ae76637 100644 (file)
@@ -735,16 +735,25 @@ TGraph * TStatToolkit::MakeStat1D(TH3 * his, Int_t delta1, Int_t type){
 
 
 
-TString* TStatToolkit::FitPlane(TTree *tree, const char* drawCommand, const char* formula, const char* cuts, Double_t & chi2, Int_t &npoints, TVectorD &fitParam, TMatrixD &covMatrix, Float_t frac, Int_t start, Int_t stop){
+TString* TStatToolkit::FitPlane(TTree *tree, const char* drawCommand, const char* formula, const char* cuts, Double_t & chi2, Int_t &npoints, TVectorD &fitParam, TMatrixD &covMatrix, Float_t frac, Int_t start, Int_t stop,Bool_t fix0){
    //
    // fit an arbitrary function, specified by formula into the data, specified by drawCommand and cuts
    // returns chi2, fitParam and covMatrix
    // returns TString with fitted formula
    //
-    
+
    TString formulaStr(formula); 
    TString drawStr(drawCommand);
    TString cutStr(cuts);
+   TString ferr("1");
+
+   TString strVal(drawCommand);
+   if (strVal.Contains(":")){
+     TObjArray* valTokens = strVal.Tokenize(":");
+     drawStr = valTokens->At(0)->GetName();
+     ferr       = valTokens->At(1)->GetName();     
+   }
+
       
    formulaStr.ReplaceAll("++", "~");
    TObjArray* formulaTokens = formulaStr.Tokenize("~"); 
@@ -760,6 +769,11 @@ TString* TStatToolkit::FitPlane(TTree *tree, const char* drawCommand, const char
    Int_t entries = tree->Draw(drawStr.Data(), cutStr.Data(), "goff",  stop-start, start);
    if (entries == -1) return new TString("An ERROR has occured during fitting!");
    Double_t **values = new Double_t*[dim+1] ; 
+   //
+   entries = tree->Draw(ferr.Data(), cutStr.Data(), "goff",  stop-start, start);
+   if (entries == -1) return new TString("An ERROR has occured during fitting!");
+   Double_t *errors = new Double_t[entries];
+   memcpy(errors,  tree->GetV1(), entries*sizeof(Double_t));
    
    for (Int_t i = 0; i < dim + 1; i++){
       Int_t centries = 0;
@@ -775,12 +789,17 @@ TString* TStatToolkit::FitPlane(TTree *tree, const char* drawCommand, const char
    for (Int_t i = 0; i < entries; i++){
       Double_t x[1000];
       for (Int_t j=0; j<dim;j++) x[j]=values[j][i];
-      fitter->AddPoint(x, values[dim][i], 1);
+      fitter->AddPoint(x, values[dim][i], errors[i]);
    }
 
    fitter->Eval();
    if (frac>0.5 && frac<1){
      fitter->EvalRobust(frac);
+   }else{
+     if (fix0) {
+       fitter->FixParameter(0,0);
+       fitter->Eval();     
+     }
    }
    fitter->GetParameters(fitParam);
    fitter->GetCovarianceMatrix(covMatrix);