ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TSystem.h>
#include <TStyle.h>
#include <TROOT.h>
#include <Riostream.h>
#include <TFile.h>
#include <TH1F.h>
#include <TCanvas.h>
#include <TGraphErrors.h>
#include <TLegend.h>
#include <TTree.h>
#include <TTreeFormula.h>
#include <TEventList.h>
#include <TObjString.h>
#include <TList.h>
#include <TCut.h>
#include <TError.h>
#include <TDatime.h>
#include <TPRegexp.h>
#include <TInterpreter.h>
#include <TGaxis.h>
#endif

// This macro produces periodLevelQA for EMCAL from a trending tree
// Authors: A. Mas, M. Germain & A.Shabetai SUBATECH
// re-factored for automatic QA processing and trending A. A.SHABETAI

int PlotEMCALQATrendingTree(TTree* tree, const char* trig,TFile* fout,Bool_t SavePlots,TString expr);
TH1F* ZoomFromTree(TH1F* h, TTree* atree, Int_t n, const char* aVar, UShort_t aScaleFactor=1);
Double_t GetTreeMinimum(TTree* aTree, Int_t n, const char* columname);
Double_t GetTreeMaximum(TTree* aTree, Int_t n, const char* columname);

TString QAPATH;
TString QAPATHF= "./";

//--------------------------------------------------------------------------------------------------------------------
int NextInt(int newMax=0) 
{

  static int N=0; 
  static int nMax=1;

  if(newMax)  {nMax = newMax; N=0; return 0;}
  if (N == nMax) N=0;
  N = N +1;
  return N;

}

//--------------------------------------------------------------------------------------------------------------------
int PlotEMCALQATrendingTree(const char* filename="trending.root",Bool_t SavePlots=0, TString expr ="", TString fTrigger="")
{

  QAPATH = TString(gSystem->Getenv("QAPATH"));
  if(QAPATH.IsNull()) QAPATH = QAPATHF;
 
  Int_t ret=0;
  TFile* f = TFile::Open(filename);
  if(!f) { return -1;}
  TTree* tree = (TTree*)f->Get("trending");
  if (! tree) {Error("PlotEMCALQATrendingTree","No Tree found!"); return -1;}
  TFile* fout = new TFile(Form("%s/trendingPlots.root",QAPATH.Data()),"RECREATE");

  TList* TriggersList = new TList(); 
  if (fTrigger=="")
    {
      tree->Draw("fTrigger","","goff");
      const char* obj;
      for(Int_t i = 0 ; i < tree->GetSelectedRows() ; i++){
	tree->GetEntry(i);
	obj = tree->GetVar1()->PrintValue(0);
	if(! TriggersList->FindObject(obj)) {TriggersList->Add(new TObjString(obj));}
      }
    }
  else 
    { 
      if(!fTrigger.Contains("QA")) {fTrigger = "CaloQA_" + fTrigger;}
      TriggersList->Add(new TObjString(fTrigger.Data()));
    }
  TIter next(TriggersList);
  TObject* obj1;
  while ((obj1 = next()))
    { 
      ret = PlotEMCALQATrendingTree(tree,obj1->GetName(),fout,SavePlots,expr);
    }
  
  f->Close(); 
  return ret;

}

//--------------------------------------------------------------------------------------------------------------------
int PlotEMCALQATrendingTree(TTree* tree, const char* Trig, TFile* fout, Bool_t SavePlots,TString Expr) 
{

  TCut trig = Form("fTrigger==\"%s\"",Trig);
  TCut NotZero = TCut("Nevent>0.");
  TCut select = trig;
 
  if (Expr.Contains(".C"))
    {
      Info("PlotEMCALQATrendingTree",Form("Additional selections from %s: ", Expr.Data()));
      gInterpreter->ExecuteMacro(Expr.Data());
      select = trig + expr;
   }

  if (! tree) {Error("PlotEMCALQATrendingTree","No Tree found!"); return -1;}
  select.Print();
  int CurN=0;  
  TString* fCalorimeter; 
  TString* period;
  TString* pass; 
  TString* fTrigger; 
  TString* system;
  TDatime* dtime; 
 
  tree->SetBranchAddress("fDate",&dtime);
  tree->SetBranchAddress("nSM",&CurN);
  tree->SetBranchAddress("fCalorimeter",&fCalorimeter);
  tree->SetBranchAddress("system",&system);
  tree->SetBranchAddress("period",&period);
  tree->SetBranchAddress("pass",&pass);
  tree->SetBranchAddress("fTrigger",&fTrigger);


  tree->SetEventList(0);
  tree->Draw(">>elist",select);
  tree->Draw(">>listNotZero",select+NotZero);
  TEventList* listNotZero = (TEventList*)gDirectory->Get("listNotZero");
  TEventList* elist = (TEventList*)gDirectory->Get("elist");
  tree->SetEventList(elist);
  if(! elist->GetN()) { Error("PlotEMCALQATrendingTree","The current selection doess not match any entry!"); return -2; } 
  CurN = tree->GetMinimum("nSM"); 
  const Int_t n = CurN;
  tree->GetEntry(elist->GetEntry(0));

  TGraphErrors* AverNclustersSM[n];
  TGraphErrors* AverNcellsPerClusterSM[n];
  TGraphErrors* AverESM[n];
  TGraphErrors* AverMeanSM[n];
  TGraphErrors* AverWidthSM[n];
  TGraphErrors* AverNpi0SM[n];

  // --------------------------------- plots ------------------------------

  TString base = QAPATH + period->Data() + "_" + pass->Data() + "_";
  TPRegexp r("_\\w+");

  TString ClusterAverages ;        ClusterAverages         = base + "ClAvNew"     + (*fTrigger)(r) + ".png";
  TString Entries;                 Entries                 = base + "Nentries"    + (*fTrigger)(r) + ".png";
  TString ClusterAveragesEnergy;   ClusterAveragesEnergy   = base + "ClAvEne"     + (*fTrigger)(r) + ".png";
  TString ClusterAveragesEnergy2;  ClusterAveragesEnergy2  = base + "ClAvEne"     + (*fTrigger)(r) + ".pdf";
  TString ClusterAveragesEntries;  ClusterAveragesEntries  = base + "ClAvEnt"     + (*fTrigger)(r) + ".png";
  TString ClusterAveragesEntries2; ClusterAveragesEntries2 = base + "ClAvEnt"     + (*fTrigger)(r) + ".pdf";
  TString ClusterAveragesCells;    ClusterAveragesCells    = base + "ClAvCells"   + (*fTrigger)(r) + ".png";
  TString ClusterAveragesCells2;   ClusterAveragesCells2   = base + "ClAvCells"   + (*fTrigger)(r) + ".pdf";
  TString Pi0Entries;              Pi0Entries              = base + "Pi0Entries"  + (*fTrigger)(r) + ".png";
  TString Pi0Entries2;             Pi0Entries2             = base + "Pi0Entries"  + (*fTrigger)(r) + ".pdf";
  TString Pi0Mass;                 Pi0Mass                 = base + "Pi0Mass"     + (*fTrigger)(r) + ".png";
  TString Pi0Mass2;                Pi0Mass2                = base + "Pi0Mass"     + (*fTrigger)(r) + ".pdf";
  TString Pi0Width;                Pi0Width                = base + "Pi0Width"    + (*fTrigger)(r) + ".png";
  TString Pi0Width2;               Pi0Width2               = base + "Pi0Width"    + (*fTrigger)(r) + ".pdf";

  
  int nEmptyRuns = tree->Draw("run","Nevent==0","goff");
  if (nEmptyRuns && (nEmptyRuns != -1)) { 
   Info("PlotEMCALQATrendingTree",Form("The following %i runs are empty for trigger %s:",nEmptyRuns,Trig));
   for(Int_t i = 0 ; i < nEmptyRuns ; i++){
     cout<<tree->GetV1()[i]<<endl;
   }  
  }
 
  int nRun =  tree->Draw("run","","goff");
  NextInt(nRun); 
  TH1F* h1 = new TH1F("h1", "dummy", nRun, 0., nRun+0.5); 
  TGaxis::SetMaxDigits(3);
  h1->SetTitle("") ;
  h1->SetStats(kFALSE) ;
  h1->SetAxisRange(0, nRun, "X") ;
  h1->GetXaxis()->SetTitle("RUN Index");    
  h1->GetXaxis()->SetTitleOffset(1.86);
  h1->GetXaxis()->SetTitleSize(0.03);

  for(Int_t i = 0 ; i < nRun ; i++){
    TString label = " ";
    label+=tree->GetV1()[i];
    h1->GetXaxis()->SetBinLabel(i+1,label.Data());
    h1->GetXaxis()->LabelsOption("v");
  }
  
  //number of events 
  TCanvas* c1 = new TCanvas("Nevents","Nb of events", 1000, 500);
  c1->SetFillColor(0);
  c1->SetBorderSize(0);
  c1->SetFrameBorderMode(0); 
  gStyle->SetOptStat(0);  
  gPad->SetLeftMargin(0.08);
  gPad->SetRightMargin(0.02);
  c1->SetGrid();
  tree->Draw("NextInt():Nevent","","goff");
  h1->GetYaxis()->SetTitle("N_{events}"); 
  ZoomFromTree(h1,tree,n,"Nevent",2);
  if (h1->GetMinimum() > 0.) {c1->SetLogy();}
  h1->Draw();

  TGraph* Nevents = new TGraph(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2());
  Nevents->SetMarkerStyle(20);
  Nevents->SetMarkerColor(1);
  Nevents->SetLineColor(2);
  Nevents->Draw("same lp") ;

  c1->Update();
  if(SavePlots) c1->SaveAs(Entries);

  TCanvas* c2 = new TCanvas("ClusterAveragesEvents", "Mean Nb of Cluster per Event", 1000, 500);
  c2->SetFillColor(0);
  c2->SetBorderSize(0);
  c2->SetFrameBorderMode(0); 
  c2->SetGrid();
    
  gPad->SetLeftMargin(0.08);
  gPad->SetRightMargin(0.02);
  gPad->SetGrid();

  TH1F* h2 = (TH1F*)h1->Clone("");
  h2->GetYaxis()->SetTitle("<N_{clusters}>/event");  
  ZoomFromTree(h2,tree,n,"ClusterMeanSM");
  h2->GetXaxis()->SetTitle("RUN Index");    
  h2->GetXaxis()->SetTitleOffset(1.86);
  h2->GetXaxis()->SetTitleSize(0.03);
  h2->Draw();

  tree->Draw("NextInt():ClusterMean:xe:ClusterRMS","","goff");
  TGraphErrors * AverNclusters = new TGraphErrors(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2(),tree->GetV3(), tree->GetV4());
  AverNclusters->SetMarkerStyle(20);
  AverNclusters->SetMarkerColor(1);
  AverNclusters->Draw("same P") ;  
   
  for(Int_t ism = 0 ; ism < n ; ism++){
    tree->Draw(Form("NextInt():ClusterMeanSM[%i]:xe:ClusterRMSSM[%i]",ism,ism),"","goff");
    AverNclustersSM[ism] = new  TGraphErrors(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2(),tree->GetV3(),tree->GetV4());
    if (ism !=8)AverNclustersSM[ism]->SetMarkerColor(ism<10?ism+2:ism+1);else AverNclustersSM[ism]->SetMarkerColor(7);
    AverNclustersSM[ism]->SetMarkerStyle(21+(ism<10 ? ism: ism-10));
   
    AverNclustersSM[ism]->Draw("same P");  
  }

  TLegend* l2 = new TLegend(0.123, 0.744, 0.933, 0.894);
  l2->SetNColumns((n+1)/2.);
  l2->SetFillColor(0);
  l2->SetBorderSize(0);
  l2->SetTextSize(0.04);
  l2->SetHeader(Form("<# of clusters> in %s (period %s trigger %s)",fCalorimeter->Data(),period->Data(),((*fTrigger)(r)).Data()));
  l2->AddEntry(AverNclusters,"average", "p");
  for(Int_t ism = 0 ; ism < n ; ism++){
    TString projname = Form("SM %d",ism);
    l2->AddEntry(AverNclustersSM[ism],projname.Data(), "p");
  }
  l2->Draw("same");
  c2->Update();
  if(SavePlots)     c2->SaveAs(ClusterAveragesEntries);
  if(SavePlots==2)  c2->SaveAs(ClusterAveragesEntries2);

  TCanvas* c3 = new TCanvas("ClusterAveragesEnergy", "Mean Cluster Energy", 1000, 500);
  c3->SetFillColor(0);
  c3->SetBorderSize(0);
  c3->SetFrameBorderMode(0); 
  c3->SetGrid();

  gPad->SetLeftMargin(0.08);
  gPad->SetRightMargin(0.02);
  gPad->SetGrid();

  TH1F* h3 = (TH1F*)h1->Clone("");
  h3->GetYaxis()->SetTitle("<E> (GeV)"); 
  ZoomFromTree(h3,tree,n,"EtotalMeanSM"); 
  h3->GetXaxis()->SetTitle("RUN Index");    
  h3->GetXaxis()->SetTitleOffset(1.86);
  h3->GetXaxis()->SetTitleSize(0.03);
  h3->Draw();

  tree->Draw("NextInt():EtotalMean:xe:EtotalRMS","","goff");
  TGraphErrors * AverE = new TGraphErrors(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2(),tree->GetV3(),tree->GetV4());
  AverE->SetMarkerStyle(20);
  AverE->SetMarkerColor(1);
  AverE->Draw("same P");
 
  for(Int_t ism = 0 ; ism < n ; ism++){
    
    tree->Draw(Form("NextInt():EtotalMeanSM[%i]:xe:EtotalRMSSM[%i]",ism,ism),"","goff");
    AverESM[ism] = new  TGraphErrors(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2(),tree->GetV3(),tree->GetV4());
    if (ism !=8)AverESM[ism]->SetMarkerColor(ism<10?ism+2:ism+1);else AverESM[ism]->SetMarkerColor(7);
    AverESM[ism]->SetMarkerStyle(21+(ism<10 ? ism: ism-10));
    AverESM[ism]->Draw("same P");

  }

  TLegend* l3 = new TLegend(0.123, 0.744, 0.933, 0.894);
  l3->SetNColumns((n+1)/2.);
  l3->SetFillColor(0);
  l3->SetBorderSize(0);
  l3->SetTextSize(0.04);
  l3->SetHeader(Form("<E> in %s (period %s trigger %s)",fCalorimeter->Data(),period->Data(),((*fTrigger)(r)).Data()));
  l3->AddEntry(AverE,"average", "p");
  for(Int_t ism = 0 ; ism < n ; ism++){
    TString projname = Form("SM %d",ism);
    l3->AddEntry(AverESM[ism],projname.Data(), "p");
  }
  l3->Draw("same");
  
  if(SavePlots) c3->SaveAs(ClusterAveragesEnergy);
  if(SavePlots==2) c3->SaveAs(ClusterAveragesEnergy2);

  TCanvas* c4 = new TCanvas("ClusterAveragesCells", "Mean Nb of Cells per Cluster", 1000, 500);
  c4->SetFillColor(0);
  c4->SetBorderSize(0);
  c4->SetFrameBorderMode(0); 
  c4->SetGrid();

  gPad->SetLeftMargin(0.08);
  gPad->SetRightMargin(0.02); 
  gPad->SetGrid();

  TH1F* h4 = (TH1F*)h1->Clone("");
  h4->GetYaxis()->SetTitle("<N_{CellsPerCluster}>");  
  ZoomFromTree(h4,tree,n,"CellPerClusterMeanSM");
  h4->GetXaxis()->SetTitle("RUN Index");    
  h4->GetXaxis()->SetTitleOffset(1.86);
  h4->GetXaxis()->SetTitleSize(0.03);
  h4->Draw();

  // 
  tree->Draw("NextInt():CellPerClusterMean:xe:CellPerClusterRMS","","goff");
  TGraphErrors * AverCellPerCluster = new TGraphErrors(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2(),tree->GetV3(),tree->GetV4());
  AverCellPerCluster->SetMarkerStyle(20);
  AverCellPerCluster->SetMarkerColor(1);

  for(Int_t ism = 0 ; ism < n ; ism++){
    tree->Draw(Form("NextInt():CellPerClusterMeanSM[%i]:xe:CellPerClusterRMSSM[%i]",ism,ism),"","goff");
    AverNcellsPerClusterSM[ism] =  new TGraphErrors(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2(),tree->GetV3(),tree->GetV4());
    if (ism !=8)AverNcellsPerClusterSM[ism]->SetMarkerColor(ism<10?ism+2:ism+1);else AverNcellsPerClusterSM[ism]->SetMarkerColor(7);
    AverNcellsPerClusterSM[ism]->SetMarkerStyle(21+(ism<10 ? ism: ism-10));
    AverNcellsPerClusterSM[ism]->Draw("same P");
 
  }

  TLegend* l4 = new TLegend(0.123, 0.744, 0.933, 0.894);
  l4->SetNColumns((n+1)/2.);
  l4->SetFillColor(0);
  l4->SetBorderSize(0);
  l4->SetTextSize(0.04);
  l4->SetHeader(Form("<# of cells per cluster> in %s (period %s trigger %s)",fCalorimeter->Data(),period->Data(),((*fTrigger)(r)).Data()));
  l4->AddEntry(AverCellPerCluster,"average", "p");
  for(Int_t ism = 0 ; ism < n ; ism++){
    TString projname = Form("SM %d",ism);
    l4->AddEntry(AverNcellsPerClusterSM[ism],projname.Data(), "p");
  }
  l4->Draw("same");
 
  if(SavePlots) c4->SaveAs(ClusterAveragesCells);

  TCanvas* c5 = new TCanvas("Pi0Position", "Mean Pi0 Mass", 1000, 500);
  c5->SetFillColor(0);
  c5->SetBorderSize(0);
  c5->SetFrameBorderMode(0); 
  c5->SetGrid();

  gStyle->SetOptStat(0); 

  gPad->SetLeftMargin(0.08);
  gPad->SetRightMargin(0.02);
  gPad->SetGrid();

  TH1F * h5 = (TH1F*)h1->Clone("");
  ZoomFromTree(h5,tree,n,"MeanPosSM");
  h5->GetXaxis()->SetTitle("RUN Index");    
  h5->GetXaxis()->SetTitleOffset(1.86);
  h5->GetXaxis()->SetTitleSize(0.03);
  h5->GetYaxis()->SetTitle("Mean_{#pi^{0}}");
 
  h5->Draw();
  
  tree->Draw("NextInt():MeanPos:xe:MeanPosErr","","goff");
  TGraphErrors * AverMean = new TGraphErrors(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2(),tree->GetV3(),tree->GetV4());
  AverMean->SetMarkerStyle(20);
  AverMean->SetMarkerColor(1);
  AverMean->Draw("same P");
  
  for(Int_t ism = 0 ; ism < n ; ism++){

    tree->Draw(Form("NextInt():MeanPosSM[%i]:xe:MeanPosErrSM[%i]",ism,ism),"","goff");
    AverMeanSM[ism] = new TGraphErrors(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2(),tree->GetV3(),tree->GetV4());
    if (ism !=8)AverMeanSM[ism]->SetMarkerColor(ism<10?ism+2:ism+1);else AverMeanSM[ism]->SetMarkerColor(7); 
    AverMeanSM[ism]->SetMarkerStyle(21+(ism<10 ? ism: ism-10));
    AverMeanSM[ism]->Draw("same P");
  }
 
  
  TLegend* l5 = new TLegend(0.123, 0.744, 0.933, 0.894);
  l5->SetNColumns((n+1)/2.);
  l5->SetFillColor(0);
  l5->SetBorderSize(0);
  l5->SetTextSize(0.04);
  l5->SetHeader(Form("<M_{#pi^{0}}> (MeV) in %s (period %s trigger %s)",fCalorimeter->Data(),period->Data(),((*fTrigger)(r)).Data()));
  l5->AddEntry(AverMean,"average", "p");
  for(Int_t ism = 0 ; ism < n ; ism++){
    TString projname = Form("SM %d",ism);
    l5->AddEntry(AverMeanSM[ism],projname.Data(), "p");	 
  }
  l5->Draw("same");
  
  c5->Update();
  if(SavePlots) c5->SaveAs(Pi0Mass);


  TCanvas* c6 = new TCanvas("Pi0Width", "Mean Pi0 Width", 1000, 500);
  c6->SetFillColor(0);
  c6->SetBorderSize(0);
  c6->SetFrameBorderMode(0); 
  c6->SetGrid();

  gPad->SetLeftMargin(0.08);
  gPad->SetRightMargin(0.02);
  gPad->SetGrid();

  TH1F* h6 = (TH1F*)h1->Clone("");
  ZoomFromTree(h6,tree,n,"WidthSM");
  h6->GetXaxis()->SetTitle("RUN Index");   
  h6->GetXaxis()->SetTitleOffset(1.86);
  h6->GetXaxis()->SetTitleSize(0.03); 
  h6->GetYaxis()->SetTitle("#sigma_{#pi^{0}}");  
  h6->Draw();
  
  tree->Draw("NextInt():Width:xe:WidthErr","","goff");
  TGraphErrors * AverWidth = new TGraphErrors(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2(),tree->GetV3(),tree->GetV4());
  AverWidth->SetMarkerStyle(20);
  AverWidth->SetMarkerColor(1);
  AverWidth->Draw("same P");

  for(Int_t ism = 0 ; ism < n ; ism++){
    tree->Draw(Form("NextInt():WidthSM[%i]:xe:WidthErrSM[%i]",ism,ism),"","goff");
    AverWidthSM[ism] = new TGraphErrors(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2(),tree->GetV3(),tree->GetV4());
    if (ism !=8)AverWidthSM[ism]->SetMarkerColor(ism<10?ism+2:ism+1);else AverWidthSM[ism]->SetMarkerColor(7);
    AverWidthSM[ism]->SetMarkerStyle(21+(ism<10 ? ism: ism-10));
    AverWidthSM[ism]->Draw("same P");
  }
  
  
  TLegend* l6 = new TLegend(0.123, 0.744, 0.933, 0.894);
  l6->SetNColumns((n+1)/2.);
  l6->SetFillColor(0);
  l6->SetBorderSize(0);
  l6->SetTextSize(0.04);
  l6->SetHeader(Form("#sigma_{#pi^{0}} in %s (period %s trigger %s)",fCalorimeter->Data(),period->Data(),((*fTrigger)(r)).Data()));
  l6->AddEntry(AverWidth,"total", "p");
  for(Int_t ism = 0 ; ism < n ; ism++){
    TString projname = Form("SM %d",ism);
    l6->AddEntry(AverWidthSM[ism],projname.Data(), "p");
  }
  l6->Draw("same");
  c6->Update();
  if(SavePlots) c6->SaveAs(Pi0Width);
 
  TCanvas* c7 = new TCanvas("Npi0", "Mean Nb of Pi0", 1000, 500);
  c7->SetFillColor(0);
  c7->SetBorderSize(0);
  c7->SetFrameBorderMode(0); 
  c7->SetGrid();

  gPad->SetLeftMargin(0.08);
  gPad->SetRightMargin(0.02);
  gPad->SetGrid();

  TH1F* h7 = (TH1F*)h1->Clone("");
  ZoomFromTree(h7,tree,n,"Npi0SM");
  if (h7->GetMinimum() > 0.) {c7->SetLogy();} 
  h7->GetXaxis()->SetTitle("RUN Index");    
  h7->GetXaxis()->SetTitleOffset(1.86);
  h7->GetXaxis()->SetTitleSize(0.03);
  h7->GetYaxis()->SetTitle("<N_{#pi^{0}}>/event");  
  h7->Draw();
   
  tree->Draw("NextInt():Npi0:xe:Npi0Err","","goff");
  if (tree->GetMinimum("Npi0") > 1) c4->SetLogy();
  TGraphErrors * AverNpi0 = new TGraphErrors(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2(),tree->GetV3(),tree->GetV4());
  AverNpi0->SetMarkerStyle(20);
  AverNpi0->SetMarkerColor(1);
  AverNpi0->Draw("same P");
  
  for(Int_t ism = 0 ; ism < n ; ism++){
    tree->Draw(Form("NextInt():Npi0SM[%i]:xe:Npi0ErrSM[%i]",ism,ism),"","goff");
    AverNpi0SM[ism] = new  TGraphErrors(tree->GetSelectedRows(), tree->GetV1(), tree->GetV2(),tree->GetV3(),tree->GetV4());
    if (ism !=8)AverNpi0SM[ism]->SetMarkerColor(ism<10?ism+2:ism+1);else AverNpi0SM[ism]->SetMarkerColor(7);
    AverNpi0SM[ism]->SetMarkerStyle(21+(ism<10 ? ism: ism-10));
    AverNpi0SM[ism]->Draw("same P");
  }
  
  TLegend* l7 = new TLegend(0.123, 0.744, 0.933, 0.894);
  l7->SetNColumns((n+1)/2.);
  l7->SetFillColor(0);
  l7->SetBorderSize(0);
  l7->SetTextSize(0.04);
  l7->SetHeader(Form("<N_{#pi^{0}}>/event in %s (period %s trigger %s)",fCalorimeter->Data(),period->Data(),((*fTrigger)(r)).Data()));
  l7->AddEntry(AverNpi0,"total", "p");
  for(Int_t ism = 0 ; ism < n ; ism++){
    TString projname = Form("SM %d",ism);
    l7->AddEntry(AverNpi0SM[ism],projname.Data(), "p");
  }
  l7->Draw("same");
  c7->Update();
  if(SavePlots)  c7->SaveAs(Pi0Entries);
  if(SavePlots==2) c7->SaveAs(Pi0Entries2);

  fout->mkdir(Form("%s/%s/%s/%s",period->Data(),pass->Data(),"TrendingQA",fTrigger->Data()));
  fout->cd();
  fout->Cd(Form("%s/%s/%s/%s",period->Data(),pass->Data(),"TrendingQA",fTrigger->Data()));

  gROOT->GetListOfCanvases()->Write(); 
  gROOT->GetListOfCanvases()->Delete();

  if((!Expr.IsNull()) && (!Expr.EndsWith(".root"))) elist->Write();
  if(listNotZero) {listNotZero->Reset();}
  if(elist) {elist->Reset();}
  delete h1; 

  return 0; 

}

//---------------------------------------------------------------------------------------------
TH1F* ZoomFromTree(TH1F* h, TTree* atree, Int_t n, const char* aVar, UShort_t  aScaleFactor)
{

  atree->SetEventList(0);
  TEventList *listNotZero = (TEventList*)gDirectory->Get("listNotZero");
  atree->SetEventList(listNotZero);

  double treeMin = GetTreeMinimum(atree,n,aVar);
  double treeMax = GetTreeMaximum(atree,n,aVar);
  double offset =  30*((treeMax - treeMin)/(100.*aScaleFactor));

  if(treeMin != -treeMax){
   h->SetMinimum(TMath::Max(0.,treeMin-offset));
   h->SetMaximum(treeMax+2*offset);
  }
 
  atree->SetEventList(0);
  TEventList *elist = (TEventList*)gDirectory->Get("elist");
  atree->SetEventList(elist);

  return h; 

}

//--------------------------------------------------------------------------------------------
Double_t GetTreeMinimum(TTree* aTree,Int_t n, const char* columname)
{	

  TLeaf* leaf = aTree->GetLeaf(columname);
  if (!leaf) {
    return 0;
  }
  TBranch* branch = leaf->GetBranch();
  Double_t cmin = 3.40282e+38; 
  for (Long64_t i = 0; i < aTree->GetEntries(); ++i) {
    Long64_t entryNumber = aTree->GetEntryNumber(i);
    if (entryNumber < 0) break;
    branch->GetEntry(entryNumber);
    for (Int_t j = 0;j < TMath::Min(leaf->GetLen(),n); ++j) {
      Double_t val = leaf->GetValue(j);
      if (val < cmin) {
	cmin = val;
      }
    }
  }
  
  return cmin;

}

//______________________________________________________________________________
Double_t GetTreeMaximum(TTree* aTree,Int_t n,const char* columname)
{

  TLeaf* leaf = aTree->GetLeaf(columname);
  if (!leaf) {
    return 0;
  }
  TBranch* branch = leaf->GetBranch();
  Double_t cmax = - 3.40282e+38;
  for (Long64_t i = 0; i < aTree->GetEntries(); ++i) {
    Long64_t entryNumber = aTree->GetEntryNumber(i);
    if (entryNumber < 0) break;
    branch->GetEntry(entryNumber);
    for (Int_t j = 0; j <  TMath::Min(leaf->GetLen(),n); ++j) {
      Double_t val = leaf->GetValue(j);
      if (val > cmax) {
	cmax = val;
      }
    }
  }

  return cmax;

}

 PlotEMCALQATrendingTree.C:1
 PlotEMCALQATrendingTree.C:2
 PlotEMCALQATrendingTree.C:3
 PlotEMCALQATrendingTree.C:4
 PlotEMCALQATrendingTree.C:5
 PlotEMCALQATrendingTree.C:6
 PlotEMCALQATrendingTree.C:7
 PlotEMCALQATrendingTree.C:8
 PlotEMCALQATrendingTree.C:9
 PlotEMCALQATrendingTree.C:10
 PlotEMCALQATrendingTree.C:11
 PlotEMCALQATrendingTree.C:12
 PlotEMCALQATrendingTree.C:13
 PlotEMCALQATrendingTree.C:14
 PlotEMCALQATrendingTree.C:15
 PlotEMCALQATrendingTree.C:16
 PlotEMCALQATrendingTree.C:17
 PlotEMCALQATrendingTree.C:18
 PlotEMCALQATrendingTree.C:19
 PlotEMCALQATrendingTree.C:20
 PlotEMCALQATrendingTree.C:21
 PlotEMCALQATrendingTree.C:22
 PlotEMCALQATrendingTree.C:23
 PlotEMCALQATrendingTree.C:24
 PlotEMCALQATrendingTree.C:25
 PlotEMCALQATrendingTree.C:26
 PlotEMCALQATrendingTree.C:27
 PlotEMCALQATrendingTree.C:28
 PlotEMCALQATrendingTree.C:29
 PlotEMCALQATrendingTree.C:30
 PlotEMCALQATrendingTree.C:31
 PlotEMCALQATrendingTree.C:32
 PlotEMCALQATrendingTree.C:33
 PlotEMCALQATrendingTree.C:34
 PlotEMCALQATrendingTree.C:35
 PlotEMCALQATrendingTree.C:36
 PlotEMCALQATrendingTree.C:37
 PlotEMCALQATrendingTree.C:38
 PlotEMCALQATrendingTree.C:39
 PlotEMCALQATrendingTree.C:40
 PlotEMCALQATrendingTree.C:41
 PlotEMCALQATrendingTree.C:42
 PlotEMCALQATrendingTree.C:43
 PlotEMCALQATrendingTree.C:44
 PlotEMCALQATrendingTree.C:45
 PlotEMCALQATrendingTree.C:46
 PlotEMCALQATrendingTree.C:47
 PlotEMCALQATrendingTree.C:48
 PlotEMCALQATrendingTree.C:49
 PlotEMCALQATrendingTree.C:50
 PlotEMCALQATrendingTree.C:51
 PlotEMCALQATrendingTree.C:52
 PlotEMCALQATrendingTree.C:53
 PlotEMCALQATrendingTree.C:54
 PlotEMCALQATrendingTree.C:55
 PlotEMCALQATrendingTree.C:56
 PlotEMCALQATrendingTree.C:57
 PlotEMCALQATrendingTree.C:58
 PlotEMCALQATrendingTree.C:59
 PlotEMCALQATrendingTree.C:60
 PlotEMCALQATrendingTree.C:61
 PlotEMCALQATrendingTree.C:62
 PlotEMCALQATrendingTree.C:63
 PlotEMCALQATrendingTree.C:64
 PlotEMCALQATrendingTree.C:65
 PlotEMCALQATrendingTree.C:66
 PlotEMCALQATrendingTree.C:67
 PlotEMCALQATrendingTree.C:68
 PlotEMCALQATrendingTree.C:69
 PlotEMCALQATrendingTree.C:70
 PlotEMCALQATrendingTree.C:71
 PlotEMCALQATrendingTree.C:72
 PlotEMCALQATrendingTree.C:73
 PlotEMCALQATrendingTree.C:74
 PlotEMCALQATrendingTree.C:75
 PlotEMCALQATrendingTree.C:76
 PlotEMCALQATrendingTree.C:77
 PlotEMCALQATrendingTree.C:78
 PlotEMCALQATrendingTree.C:79
 PlotEMCALQATrendingTree.C:80
 PlotEMCALQATrendingTree.C:81
 PlotEMCALQATrendingTree.C:82
 PlotEMCALQATrendingTree.C:83
 PlotEMCALQATrendingTree.C:84
 PlotEMCALQATrendingTree.C:85
 PlotEMCALQATrendingTree.C:86
 PlotEMCALQATrendingTree.C:87
 PlotEMCALQATrendingTree.C:88
 PlotEMCALQATrendingTree.C:89
 PlotEMCALQATrendingTree.C:90
 PlotEMCALQATrendingTree.C:91
 PlotEMCALQATrendingTree.C:92
 PlotEMCALQATrendingTree.C:93
 PlotEMCALQATrendingTree.C:94
 PlotEMCALQATrendingTree.C:95
 PlotEMCALQATrendingTree.C:96
 PlotEMCALQATrendingTree.C:97
 PlotEMCALQATrendingTree.C:98
 PlotEMCALQATrendingTree.C:99
 PlotEMCALQATrendingTree.C:100
 PlotEMCALQATrendingTree.C:101
 PlotEMCALQATrendingTree.C:102
 PlotEMCALQATrendingTree.C:103
 PlotEMCALQATrendingTree.C:104
 PlotEMCALQATrendingTree.C:105
 PlotEMCALQATrendingTree.C:106
 PlotEMCALQATrendingTree.C:107
 PlotEMCALQATrendingTree.C:108
 PlotEMCALQATrendingTree.C:109
 PlotEMCALQATrendingTree.C:110
 PlotEMCALQATrendingTree.C:111
 PlotEMCALQATrendingTree.C:112
 PlotEMCALQATrendingTree.C:113
 PlotEMCALQATrendingTree.C:114
 PlotEMCALQATrendingTree.C:115
 PlotEMCALQATrendingTree.C:116
 PlotEMCALQATrendingTree.C:117
 PlotEMCALQATrendingTree.C:118
 PlotEMCALQATrendingTree.C:119
 PlotEMCALQATrendingTree.C:120
 PlotEMCALQATrendingTree.C:121
 PlotEMCALQATrendingTree.C:122
 PlotEMCALQATrendingTree.C:123
 PlotEMCALQATrendingTree.C:124
 PlotEMCALQATrendingTree.C:125
 PlotEMCALQATrendingTree.C:126
 PlotEMCALQATrendingTree.C:127
 PlotEMCALQATrendingTree.C:128
 PlotEMCALQATrendingTree.C:129
 PlotEMCALQATrendingTree.C:130
 PlotEMCALQATrendingTree.C:131
 PlotEMCALQATrendingTree.C:132
 PlotEMCALQATrendingTree.C:133
 PlotEMCALQATrendingTree.C:134
 PlotEMCALQATrendingTree.C:135
 PlotEMCALQATrendingTree.C:136
 PlotEMCALQATrendingTree.C:137
 PlotEMCALQATrendingTree.C:138
 PlotEMCALQATrendingTree.C:139
 PlotEMCALQATrendingTree.C:140
 PlotEMCALQATrendingTree.C:141
 PlotEMCALQATrendingTree.C:142
 PlotEMCALQATrendingTree.C:143
 PlotEMCALQATrendingTree.C:144
 PlotEMCALQATrendingTree.C:145
 PlotEMCALQATrendingTree.C:146
 PlotEMCALQATrendingTree.C:147
 PlotEMCALQATrendingTree.C:148
 PlotEMCALQATrendingTree.C:149
 PlotEMCALQATrendingTree.C:150
 PlotEMCALQATrendingTree.C:151
 PlotEMCALQATrendingTree.C:152
 PlotEMCALQATrendingTree.C:153
 PlotEMCALQATrendingTree.C:154
 PlotEMCALQATrendingTree.C:155
 PlotEMCALQATrendingTree.C:156
 PlotEMCALQATrendingTree.C:157
 PlotEMCALQATrendingTree.C:158
 PlotEMCALQATrendingTree.C:159
 PlotEMCALQATrendingTree.C:160
 PlotEMCALQATrendingTree.C:161
 PlotEMCALQATrendingTree.C:162
 PlotEMCALQATrendingTree.C:163
 PlotEMCALQATrendingTree.C:164
 PlotEMCALQATrendingTree.C:165
 PlotEMCALQATrendingTree.C:166
 PlotEMCALQATrendingTree.C:167
 PlotEMCALQATrendingTree.C:168
 PlotEMCALQATrendingTree.C:169
 PlotEMCALQATrendingTree.C:170
 PlotEMCALQATrendingTree.C:171
 PlotEMCALQATrendingTree.C:172
 PlotEMCALQATrendingTree.C:173
 PlotEMCALQATrendingTree.C:174
 PlotEMCALQATrendingTree.C:175
 PlotEMCALQATrendingTree.C:176
 PlotEMCALQATrendingTree.C:177
 PlotEMCALQATrendingTree.C:178
 PlotEMCALQATrendingTree.C:179
 PlotEMCALQATrendingTree.C:180
 PlotEMCALQATrendingTree.C:181
 PlotEMCALQATrendingTree.C:182
 PlotEMCALQATrendingTree.C:183
 PlotEMCALQATrendingTree.C:184
 PlotEMCALQATrendingTree.C:185
 PlotEMCALQATrendingTree.C:186
 PlotEMCALQATrendingTree.C:187
 PlotEMCALQATrendingTree.C:188
 PlotEMCALQATrendingTree.C:189
 PlotEMCALQATrendingTree.C:190
 PlotEMCALQATrendingTree.C:191
 PlotEMCALQATrendingTree.C:192
 PlotEMCALQATrendingTree.C:193
 PlotEMCALQATrendingTree.C:194
 PlotEMCALQATrendingTree.C:195
 PlotEMCALQATrendingTree.C:196
 PlotEMCALQATrendingTree.C:197
 PlotEMCALQATrendingTree.C:198
 PlotEMCALQATrendingTree.C:199
 PlotEMCALQATrendingTree.C:200
 PlotEMCALQATrendingTree.C:201
 PlotEMCALQATrendingTree.C:202
 PlotEMCALQATrendingTree.C:203
 PlotEMCALQATrendingTree.C:204
 PlotEMCALQATrendingTree.C:205
 PlotEMCALQATrendingTree.C:206
 PlotEMCALQATrendingTree.C:207
 PlotEMCALQATrendingTree.C:208
 PlotEMCALQATrendingTree.C:209
 PlotEMCALQATrendingTree.C:210
 PlotEMCALQATrendingTree.C:211
 PlotEMCALQATrendingTree.C:212
 PlotEMCALQATrendingTree.C:213
 PlotEMCALQATrendingTree.C:214
 PlotEMCALQATrendingTree.C:215
 PlotEMCALQATrendingTree.C:216
 PlotEMCALQATrendingTree.C:217
 PlotEMCALQATrendingTree.C:218
 PlotEMCALQATrendingTree.C:219
 PlotEMCALQATrendingTree.C:220
 PlotEMCALQATrendingTree.C:221
 PlotEMCALQATrendingTree.C:222
 PlotEMCALQATrendingTree.C:223
 PlotEMCALQATrendingTree.C:224
 PlotEMCALQATrendingTree.C:225
 PlotEMCALQATrendingTree.C:226
 PlotEMCALQATrendingTree.C:227
 PlotEMCALQATrendingTree.C:228
 PlotEMCALQATrendingTree.C:229
 PlotEMCALQATrendingTree.C:230
 PlotEMCALQATrendingTree.C:231
 PlotEMCALQATrendingTree.C:232
 PlotEMCALQATrendingTree.C:233
 PlotEMCALQATrendingTree.C:234
 PlotEMCALQATrendingTree.C:235
 PlotEMCALQATrendingTree.C:236
 PlotEMCALQATrendingTree.C:237
 PlotEMCALQATrendingTree.C:238
 PlotEMCALQATrendingTree.C:239
 PlotEMCALQATrendingTree.C:240
 PlotEMCALQATrendingTree.C:241
 PlotEMCALQATrendingTree.C:242
 PlotEMCALQATrendingTree.C:243
 PlotEMCALQATrendingTree.C:244
 PlotEMCALQATrendingTree.C:245
 PlotEMCALQATrendingTree.C:246
 PlotEMCALQATrendingTree.C:247
 PlotEMCALQATrendingTree.C:248
 PlotEMCALQATrendingTree.C:249
 PlotEMCALQATrendingTree.C:250
 PlotEMCALQATrendingTree.C:251
 PlotEMCALQATrendingTree.C:252
 PlotEMCALQATrendingTree.C:253
 PlotEMCALQATrendingTree.C:254
 PlotEMCALQATrendingTree.C:255
 PlotEMCALQATrendingTree.C:256
 PlotEMCALQATrendingTree.C:257
 PlotEMCALQATrendingTree.C:258
 PlotEMCALQATrendingTree.C:259
 PlotEMCALQATrendingTree.C:260
 PlotEMCALQATrendingTree.C:261
 PlotEMCALQATrendingTree.C:262
 PlotEMCALQATrendingTree.C:263
 PlotEMCALQATrendingTree.C:264
 PlotEMCALQATrendingTree.C:265
 PlotEMCALQATrendingTree.C:266
 PlotEMCALQATrendingTree.C:267
 PlotEMCALQATrendingTree.C:268
 PlotEMCALQATrendingTree.C:269
 PlotEMCALQATrendingTree.C:270
 PlotEMCALQATrendingTree.C:271
 PlotEMCALQATrendingTree.C:272
 PlotEMCALQATrendingTree.C:273
 PlotEMCALQATrendingTree.C:274
 PlotEMCALQATrendingTree.C:275
 PlotEMCALQATrendingTree.C:276
 PlotEMCALQATrendingTree.C:277
 PlotEMCALQATrendingTree.C:278
 PlotEMCALQATrendingTree.C:279
 PlotEMCALQATrendingTree.C:280
 PlotEMCALQATrendingTree.C:281
 PlotEMCALQATrendingTree.C:282
 PlotEMCALQATrendingTree.C:283
 PlotEMCALQATrendingTree.C:284
 PlotEMCALQATrendingTree.C:285
 PlotEMCALQATrendingTree.C:286
 PlotEMCALQATrendingTree.C:287
 PlotEMCALQATrendingTree.C:288
 PlotEMCALQATrendingTree.C:289
 PlotEMCALQATrendingTree.C:290
 PlotEMCALQATrendingTree.C:291
 PlotEMCALQATrendingTree.C:292
 PlotEMCALQATrendingTree.C:293
 PlotEMCALQATrendingTree.C:294
 PlotEMCALQATrendingTree.C:295
 PlotEMCALQATrendingTree.C:296
 PlotEMCALQATrendingTree.C:297
 PlotEMCALQATrendingTree.C:298
 PlotEMCALQATrendingTree.C:299
 PlotEMCALQATrendingTree.C:300
 PlotEMCALQATrendingTree.C:301
 PlotEMCALQATrendingTree.C:302
 PlotEMCALQATrendingTree.C:303
 PlotEMCALQATrendingTree.C:304
 PlotEMCALQATrendingTree.C:305
 PlotEMCALQATrendingTree.C:306
 PlotEMCALQATrendingTree.C:307
 PlotEMCALQATrendingTree.C:308
 PlotEMCALQATrendingTree.C:309
 PlotEMCALQATrendingTree.C:310
 PlotEMCALQATrendingTree.C:311
 PlotEMCALQATrendingTree.C:312
 PlotEMCALQATrendingTree.C:313
 PlotEMCALQATrendingTree.C:314
 PlotEMCALQATrendingTree.C:315
 PlotEMCALQATrendingTree.C:316
 PlotEMCALQATrendingTree.C:317
 PlotEMCALQATrendingTree.C:318
 PlotEMCALQATrendingTree.C:319
 PlotEMCALQATrendingTree.C:320
 PlotEMCALQATrendingTree.C:321
 PlotEMCALQATrendingTree.C:322
 PlotEMCALQATrendingTree.C:323
 PlotEMCALQATrendingTree.C:324
 PlotEMCALQATrendingTree.C:325
 PlotEMCALQATrendingTree.C:326
 PlotEMCALQATrendingTree.C:327
 PlotEMCALQATrendingTree.C:328
 PlotEMCALQATrendingTree.C:329
 PlotEMCALQATrendingTree.C:330
 PlotEMCALQATrendingTree.C:331
 PlotEMCALQATrendingTree.C:332
 PlotEMCALQATrendingTree.C:333
 PlotEMCALQATrendingTree.C:334
 PlotEMCALQATrendingTree.C:335
 PlotEMCALQATrendingTree.C:336
 PlotEMCALQATrendingTree.C:337
 PlotEMCALQATrendingTree.C:338
 PlotEMCALQATrendingTree.C:339
 PlotEMCALQATrendingTree.C:340
 PlotEMCALQATrendingTree.C:341
 PlotEMCALQATrendingTree.C:342
 PlotEMCALQATrendingTree.C:343
 PlotEMCALQATrendingTree.C:344
 PlotEMCALQATrendingTree.C:345
 PlotEMCALQATrendingTree.C:346
 PlotEMCALQATrendingTree.C:347
 PlotEMCALQATrendingTree.C:348
 PlotEMCALQATrendingTree.C:349
 PlotEMCALQATrendingTree.C:350
 PlotEMCALQATrendingTree.C:351
 PlotEMCALQATrendingTree.C:352
 PlotEMCALQATrendingTree.C:353
 PlotEMCALQATrendingTree.C:354
 PlotEMCALQATrendingTree.C:355
 PlotEMCALQATrendingTree.C:356
 PlotEMCALQATrendingTree.C:357
 PlotEMCALQATrendingTree.C:358
 PlotEMCALQATrendingTree.C:359
 PlotEMCALQATrendingTree.C:360
 PlotEMCALQATrendingTree.C:361
 PlotEMCALQATrendingTree.C:362
 PlotEMCALQATrendingTree.C:363
 PlotEMCALQATrendingTree.C:364
 PlotEMCALQATrendingTree.C:365
 PlotEMCALQATrendingTree.C:366
 PlotEMCALQATrendingTree.C:367
 PlotEMCALQATrendingTree.C:368
 PlotEMCALQATrendingTree.C:369
 PlotEMCALQATrendingTree.C:370
 PlotEMCALQATrendingTree.C:371
 PlotEMCALQATrendingTree.C:372
 PlotEMCALQATrendingTree.C:373
 PlotEMCALQATrendingTree.C:374
 PlotEMCALQATrendingTree.C:375
 PlotEMCALQATrendingTree.C:376
 PlotEMCALQATrendingTree.C:377
 PlotEMCALQATrendingTree.C:378
 PlotEMCALQATrendingTree.C:379
 PlotEMCALQATrendingTree.C:380
 PlotEMCALQATrendingTree.C:381
 PlotEMCALQATrendingTree.C:382
 PlotEMCALQATrendingTree.C:383
 PlotEMCALQATrendingTree.C:384
 PlotEMCALQATrendingTree.C:385
 PlotEMCALQATrendingTree.C:386
 PlotEMCALQATrendingTree.C:387
 PlotEMCALQATrendingTree.C:388
 PlotEMCALQATrendingTree.C:389
 PlotEMCALQATrendingTree.C:390
 PlotEMCALQATrendingTree.C:391
 PlotEMCALQATrendingTree.C:392
 PlotEMCALQATrendingTree.C:393
 PlotEMCALQATrendingTree.C:394
 PlotEMCALQATrendingTree.C:395
 PlotEMCALQATrendingTree.C:396
 PlotEMCALQATrendingTree.C:397
 PlotEMCALQATrendingTree.C:398
 PlotEMCALQATrendingTree.C:399
 PlotEMCALQATrendingTree.C:400
 PlotEMCALQATrendingTree.C:401
 PlotEMCALQATrendingTree.C:402
 PlotEMCALQATrendingTree.C:403
 PlotEMCALQATrendingTree.C:404
 PlotEMCALQATrendingTree.C:405
 PlotEMCALQATrendingTree.C:406
 PlotEMCALQATrendingTree.C:407
 PlotEMCALQATrendingTree.C:408
 PlotEMCALQATrendingTree.C:409
 PlotEMCALQATrendingTree.C:410
 PlotEMCALQATrendingTree.C:411
 PlotEMCALQATrendingTree.C:412
 PlotEMCALQATrendingTree.C:413
 PlotEMCALQATrendingTree.C:414
 PlotEMCALQATrendingTree.C:415
 PlotEMCALQATrendingTree.C:416
 PlotEMCALQATrendingTree.C:417
 PlotEMCALQATrendingTree.C:418
 PlotEMCALQATrendingTree.C:419
 PlotEMCALQATrendingTree.C:420
 PlotEMCALQATrendingTree.C:421
 PlotEMCALQATrendingTree.C:422
 PlotEMCALQATrendingTree.C:423
 PlotEMCALQATrendingTree.C:424
 PlotEMCALQATrendingTree.C:425
 PlotEMCALQATrendingTree.C:426
 PlotEMCALQATrendingTree.C:427
 PlotEMCALQATrendingTree.C:428
 PlotEMCALQATrendingTree.C:429
 PlotEMCALQATrendingTree.C:430
 PlotEMCALQATrendingTree.C:431
 PlotEMCALQATrendingTree.C:432
 PlotEMCALQATrendingTree.C:433
 PlotEMCALQATrendingTree.C:434
 PlotEMCALQATrendingTree.C:435
 PlotEMCALQATrendingTree.C:436
 PlotEMCALQATrendingTree.C:437
 PlotEMCALQATrendingTree.C:438
 PlotEMCALQATrendingTree.C:439
 PlotEMCALQATrendingTree.C:440
 PlotEMCALQATrendingTree.C:441
 PlotEMCALQATrendingTree.C:442
 PlotEMCALQATrendingTree.C:443
 PlotEMCALQATrendingTree.C:444
 PlotEMCALQATrendingTree.C:445
 PlotEMCALQATrendingTree.C:446
 PlotEMCALQATrendingTree.C:447
 PlotEMCALQATrendingTree.C:448
 PlotEMCALQATrendingTree.C:449
 PlotEMCALQATrendingTree.C:450
 PlotEMCALQATrendingTree.C:451
 PlotEMCALQATrendingTree.C:452
 PlotEMCALQATrendingTree.C:453
 PlotEMCALQATrendingTree.C:454
 PlotEMCALQATrendingTree.C:455
 PlotEMCALQATrendingTree.C:456
 PlotEMCALQATrendingTree.C:457
 PlotEMCALQATrendingTree.C:458
 PlotEMCALQATrendingTree.C:459
 PlotEMCALQATrendingTree.C:460
 PlotEMCALQATrendingTree.C:461
 PlotEMCALQATrendingTree.C:462
 PlotEMCALQATrendingTree.C:463
 PlotEMCALQATrendingTree.C:464
 PlotEMCALQATrendingTree.C:465
 PlotEMCALQATrendingTree.C:466
 PlotEMCALQATrendingTree.C:467
 PlotEMCALQATrendingTree.C:468
 PlotEMCALQATrendingTree.C:469
 PlotEMCALQATrendingTree.C:470
 PlotEMCALQATrendingTree.C:471
 PlotEMCALQATrendingTree.C:472
 PlotEMCALQATrendingTree.C:473
 PlotEMCALQATrendingTree.C:474
 PlotEMCALQATrendingTree.C:475
 PlotEMCALQATrendingTree.C:476
 PlotEMCALQATrendingTree.C:477
 PlotEMCALQATrendingTree.C:478
 PlotEMCALQATrendingTree.C:479
 PlotEMCALQATrendingTree.C:480
 PlotEMCALQATrendingTree.C:481
 PlotEMCALQATrendingTree.C:482
 PlotEMCALQATrendingTree.C:483
 PlotEMCALQATrendingTree.C:484
 PlotEMCALQATrendingTree.C:485
 PlotEMCALQATrendingTree.C:486
 PlotEMCALQATrendingTree.C:487
 PlotEMCALQATrendingTree.C:488
 PlotEMCALQATrendingTree.C:489
 PlotEMCALQATrendingTree.C:490
 PlotEMCALQATrendingTree.C:491
 PlotEMCALQATrendingTree.C:492
 PlotEMCALQATrendingTree.C:493
 PlotEMCALQATrendingTree.C:494
 PlotEMCALQATrendingTree.C:495
 PlotEMCALQATrendingTree.C:496
 PlotEMCALQATrendingTree.C:497
 PlotEMCALQATrendingTree.C:498
 PlotEMCALQATrendingTree.C:499
 PlotEMCALQATrendingTree.C:500
 PlotEMCALQATrendingTree.C:501
 PlotEMCALQATrendingTree.C:502
 PlotEMCALQATrendingTree.C:503
 PlotEMCALQATrendingTree.C:504
 PlotEMCALQATrendingTree.C:505
 PlotEMCALQATrendingTree.C:506
 PlotEMCALQATrendingTree.C:507
 PlotEMCALQATrendingTree.C:508
 PlotEMCALQATrendingTree.C:509
 PlotEMCALQATrendingTree.C:510
 PlotEMCALQATrendingTree.C:511
 PlotEMCALQATrendingTree.C:512
 PlotEMCALQATrendingTree.C:513
 PlotEMCALQATrendingTree.C:514
 PlotEMCALQATrendingTree.C:515
 PlotEMCALQATrendingTree.C:516
 PlotEMCALQATrendingTree.C:517
 PlotEMCALQATrendingTree.C:518
 PlotEMCALQATrendingTree.C:519
 PlotEMCALQATrendingTree.C:520
 PlotEMCALQATrendingTree.C:521
 PlotEMCALQATrendingTree.C:522
 PlotEMCALQATrendingTree.C:523
 PlotEMCALQATrendingTree.C:524
 PlotEMCALQATrendingTree.C:525
 PlotEMCALQATrendingTree.C:526
 PlotEMCALQATrendingTree.C:527
 PlotEMCALQATrendingTree.C:528
 PlotEMCALQATrendingTree.C:529
 PlotEMCALQATrendingTree.C:530
 PlotEMCALQATrendingTree.C:531
 PlotEMCALQATrendingTree.C:532
 PlotEMCALQATrendingTree.C:533
 PlotEMCALQATrendingTree.C:534
 PlotEMCALQATrendingTree.C:535
 PlotEMCALQATrendingTree.C:536
 PlotEMCALQATrendingTree.C:537
 PlotEMCALQATrendingTree.C:538
 PlotEMCALQATrendingTree.C:539
 PlotEMCALQATrendingTree.C:540
 PlotEMCALQATrendingTree.C:541
 PlotEMCALQATrendingTree.C:542
 PlotEMCALQATrendingTree.C:543
 PlotEMCALQATrendingTree.C:544
 PlotEMCALQATrendingTree.C:545
 PlotEMCALQATrendingTree.C:546
 PlotEMCALQATrendingTree.C:547
 PlotEMCALQATrendingTree.C:548
 PlotEMCALQATrendingTree.C:549
 PlotEMCALQATrendingTree.C:550
 PlotEMCALQATrendingTree.C:551
 PlotEMCALQATrendingTree.C:552
 PlotEMCALQATrendingTree.C:553
 PlotEMCALQATrendingTree.C:554
 PlotEMCALQATrendingTree.C:555
 PlotEMCALQATrendingTree.C:556
 PlotEMCALQATrendingTree.C:557
 PlotEMCALQATrendingTree.C:558
 PlotEMCALQATrendingTree.C:559
 PlotEMCALQATrendingTree.C:560
 PlotEMCALQATrendingTree.C:561
 PlotEMCALQATrendingTree.C:562
 PlotEMCALQATrendingTree.C:563
 PlotEMCALQATrendingTree.C:564
 PlotEMCALQATrendingTree.C:565
 PlotEMCALQATrendingTree.C:566
 PlotEMCALQATrendingTree.C:567
 PlotEMCALQATrendingTree.C:568
 PlotEMCALQATrendingTree.C:569
 PlotEMCALQATrendingTree.C:570
 PlotEMCALQATrendingTree.C:571
 PlotEMCALQATrendingTree.C:572
 PlotEMCALQATrendingTree.C:573
 PlotEMCALQATrendingTree.C:574
 PlotEMCALQATrendingTree.C:575
 PlotEMCALQATrendingTree.C:576
 PlotEMCALQATrendingTree.C:577
 PlotEMCALQATrendingTree.C:578
 PlotEMCALQATrendingTree.C:579
 PlotEMCALQATrendingTree.C:580
 PlotEMCALQATrendingTree.C:581
 PlotEMCALQATrendingTree.C:582
 PlotEMCALQATrendingTree.C:583
 PlotEMCALQATrendingTree.C:584
 PlotEMCALQATrendingTree.C:585
 PlotEMCALQATrendingTree.C:586
 PlotEMCALQATrendingTree.C:587
 PlotEMCALQATrendingTree.C:588
 PlotEMCALQATrendingTree.C:589
 PlotEMCALQATrendingTree.C:590
 PlotEMCALQATrendingTree.C:591
 PlotEMCALQATrendingTree.C:592
 PlotEMCALQATrendingTree.C:593
 PlotEMCALQATrendingTree.C:594
 PlotEMCALQATrendingTree.C:595
 PlotEMCALQATrendingTree.C:596
 PlotEMCALQATrendingTree.C:597
 PlotEMCALQATrendingTree.C:598
 PlotEMCALQATrendingTree.C:599
 PlotEMCALQATrendingTree.C:600
 PlotEMCALQATrendingTree.C:601
 PlotEMCALQATrendingTree.C:602
 PlotEMCALQATrendingTree.C:603
 PlotEMCALQATrendingTree.C:604
 PlotEMCALQATrendingTree.C:605
 PlotEMCALQATrendingTree.C:606
 PlotEMCALQATrendingTree.C:607