Merging changes from the TPc development branch
authormivanov <mivanov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 3 Sep 2013 08:23:47 +0000 (08:23 +0000)
committermivanov <mivanov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 3 Sep 2013 08:23:47 +0000 (08:23 +0000)
"Robust drawing of the histograms" ()

svn merge -r62643:63254 https://svn.cern.ch/reps/AliRoot/branches/TPCdev/STAT/
void TStatToolkit::DrawHistogram(TTree * tree, const char* drawCommand, const char* cuts, const char* histoname, const char* histotitle, Int_t nsigma, Float_t fraction )
{
  //
  // Draw histogram from TTree with robust range
  // Only for 1D so far!
  //
  // Parameters:
  // - histoname:  name of histogram
  // - histotitle: title of histgram
  // - fraction:   fraction of data to define the robust mean
  // - nsigma:     nsigma value for range
  //

STAT/TStatToolkit.cxx
STAT/TStatToolkit.h

index 3948efd..9ca9e96 100644 (file)
@@ -24,6 +24,7 @@
 #include "TMath.h"
 #include "Riostream.h"
 #include "TH1F.h"
+#include "TH2F.h"
 #include "TH3.h"
 #include "TF1.h"
 #include "TTree.h"
@@ -1565,3 +1566,67 @@ void  TStatToolkit::DrawStatusGraphs(TObjArray* oaMultGr)
     ylabel->Draw();
   }
 }
+
+
+void TStatToolkit::DrawHistogram(TTree * tree, const char* drawCommand, const char* cuts, const char* histoname, const char* histotitle, Int_t nsigma, Float_t fraction )
+{
+  //
+  // Draw histogram from TTree with robust range
+  // Only for 1D so far!
+  // 
+  // Parameters:
+  // - histoname:  name of histogram
+  // - histotitle: title of histgram
+  // - fraction:   fraction of data to define the robust mean
+  // - nsigma:     nsigma value for range
+  //
+
+   TString drawStr(drawCommand);
+   TString cutStr(cuts);
+   Int_t dim = 1;
+
+   if(!tree) {
+     cerr<<" Tree pointer is NULL!"<<endl;
+     return;
+   }
+
+   // get entries
+   Int_t entries = tree->Draw(drawStr.Data(), cutStr.Data(), "goff");
+   if (entries == -1) {
+     cerr<<"TTree draw returns -1"<<endl;
+     return;
+   }
+
+   // get dimension
+   if(tree->GetV1()) dim = 1;
+   if(tree->GetV2()) dim = 2;
+   if(tree->GetV3()) dim = 3;
+   if(dim > 2){
+     cerr<<"TTree has more than 2 dimensions (not yet supported)"<<endl;
+     return;
+   }
+
+   // draw robust
+   Double_t meanX, rmsX=0;
+   Double_t meanY, rmsY=0;
+   TStatToolkit::EvaluateUni(entries, tree->GetV1(),meanX,rmsX, fraction*entries);
+   if(dim==2){
+     TStatToolkit::EvaluateUni(entries, tree->GetV1(),meanY,rmsY, fraction*entries);
+     TStatToolkit::EvaluateUni(entries, tree->GetV2(),meanX,rmsX, fraction*entries);
+   }
+   TH1* hOut;
+   if(dim==1){
+     hOut = new TH1F(histoname, histotitle, 200, meanX-nsigma*rmsX, meanX+nsigma*rmsX);
+     for (Int_t i=0; i<entries; i++) hOut->Fill(tree->GetV1()[i]);
+     hOut->GetXaxis()->SetTitle(tree->GetHistogram()->GetXaxis()->GetTitle());
+     hOut->Draw();
+   }
+   else if(dim==2){
+     hOut = new TH2F(histoname, histotitle, 200, meanX-nsigma*rmsX, meanX+nsigma*rmsX,200, meanY-nsigma*rmsY, meanY+nsigma*rmsY);
+     for (Int_t i=0; i<entries; i++) hOut->Fill(tree->GetV2()[i],tree->GetV1()[i]);
+     hOut->GetXaxis()->SetTitle(tree->GetHistogram()->GetXaxis()->GetTitle());
+     hOut->GetYaxis()->SetTitle(tree->GetHistogram()->GetYaxis()->GetTitle());
+     hOut->Draw("colz");
+   }
+
+}
index c0ca2a8..06499d4 100644 (file)
@@ -75,6 +75,10 @@ class TStatToolkit : public TObject
   static void  AddStatusPad(TCanvas* c1, Float_t padratio, Float_t bottommargin);
   static void  DrawStatusGraphs(TObjArray* oaMultGr);
   //
+  // TTree function for robust draw
+  //
+  static void DrawHistogram(TTree * tree, const char* drawCommand, const char* cuts = "1", const char* hname = "histo", const char* htitle = "histo", Int_t nsigma = 4, Float_t fraction = 0.75);
+  //
   // TestFunctions:
   //
  static  void TestGausFit(Int_t nhistos=5000);