ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <Riostream.h>
#include <TCanvas.h>
#include <TLegend.h>
#include <TLegendEntry.h>
#include <TFile.h>
#include <TLine.h>
#include <TNtuple.h>
#include <TStyle.h>
#include <TString.h>
#include <TSystem.h>
#include <TH1F.h>
#include <TGraphErrors.h>
#include <TF1.h>
#endif

void PlotVertexESD(TString vtxtype="SPD",
		   TString fname="Vertex.Performance.root",
		   TString ntname="fNtupleVertexESD",
		   Bool_t useztrue=kFALSE,
		   Int_t optgif=0,
		   Bool_t doFits = kFALSE){
  //-------------------------------------------------------------------------
  // 
  // Plot output of AliAnalysisTaskVertexESD.
  // Origin: francesco.prino@to.infn.it 
  //         davide.caffarri@pd.infn.it
  //-------------------------------------------------------------------------

  // ranges for ideal geometry
  /*
  Float_t rangeHPull=40.;
  Float_t rangeHRes=2500.;
  Int_t binsHRes=250;
  Float_t rangeGrAve = 100; // micron
  Float_t rangeGrRms = 900; // micron
  Float_t rangeGrPull = 5; 
  */

  // ranges for misaligned geometry
  Float_t rangeHPull=40.;
  Float_t rangeHRes=10000.*0.5;
  Int_t binsHRes=250*0.5;
  Float_t rangeGrAve = 10000; // micron
  Float_t rangeGrRms = 5000; // micron
  Float_t rangeGrPull = 15; 


  Float_t limcont[10]={0.,2.5,3.5,4.5,6.5,9.5,14.5,20.5,99999.};
  const Int_t nbinsmult=7;
  Float_t limmult[nbinsmult+1]={0.,10.,14.,24.,30.,44.,60.,99999.};
  //const Int_t nbinseff=11;
  //Float_t limeff[nbinseff+1]={0.,0.5,1.5,2.5,3.5,4.5,5.5,7.5,10.5,13.,15.,999999.};
  const Int_t nbinseff=9;
  Float_t limeff[nbinseff+1]={0.,0.5,1.5,2.5,3.5,4.5,5.5,7.5,10.5,999999.};
  const Int_t nbinz = 14;
  Float_t limitzt[nbinz+1]={-20,-18,-15.,-12.,-9.,-6.,-3.,0.,3.,6.,9.,12.,15.,18,20};
  //Float_t limitzt[nbinz+1]={-3,0.,3.,6.,9.,11.,13.,15,17,19,21};

  TH1F **hxm=new TH1F*[nbinsmult];
  TH1F **hym=new TH1F*[nbinsmult];
  TH1F **hzm=new TH1F*[nbinsmult];
  TH1F **hxpullm=new TH1F*[nbinsmult];
  TH1F **hypullm=new TH1F*[nbinsmult];
  TH1F **hzpullm=new TH1F*[nbinsmult];
  TH1F **hmult=new TH1F*[nbinsmult];

  TH1F **hxc=new TH1F*[8];
  TH1F **hyc=new TH1F*[8];
  TH1F **hzc=new TH1F*[8];
  TH1F **hxpullc=new TH1F*[8];
  TH1F **hypullc=new TH1F*[8];
  TH1F **hzpullc=new TH1F*[8];
  TH1F **hcont=new TH1F*[8];

  TH1F **hxz=new TH1F*[nbinz];
  TH1F **hyz=new TH1F*[nbinz];
  TH1F **hzz=new TH1F*[nbinz];
  TH1F **hz=new TH1F*[nbinz];

  TH1F **hmulteff=new TH1F*[nbinseff];
  TH1F **haux=new TH1F*[nbinseff];
  TH1F *htot=new TH1F("htot","",100,-1000,1000);

  TH1F **htrkseff=new TH1F*[nbinseff];
  TH1F **htrksaux=new TH1F*[nbinseff];
  TH1F **htrks3Daux=new TH1F*[nbinseff];

  Char_t hisnam[10];
  
  TGraphErrors *gavexm=new TGraphErrors(0);
  TGraphErrors *gaveym=new TGraphErrors(0);
  TGraphErrors *gavezm=new TGraphErrors(0);
  TGraphErrors *grmsxm=new TGraphErrors(0);
  TGraphErrors *grmsym=new TGraphErrors(0);
  TGraphErrors *grmszm=new TGraphErrors(0);
  TGraphErrors *gavexmg=new TGraphErrors(0);
  TGraphErrors *gaveymg=new TGraphErrors(0);
  TGraphErrors *gavezmg=new TGraphErrors(0);
  TGraphErrors *grmsxmg=new TGraphErrors(0);
  TGraphErrors *grmsymg=new TGraphErrors(0);
  TGraphErrors *grmszmg=new TGraphErrors(0);
  TGraphErrors *gpullxm=new TGraphErrors(0);
  TGraphErrors *gpullym=new TGraphErrors(0);
  TGraphErrors *gpullzm=new TGraphErrors(0);
  TGraphErrors *gpullxmg=new TGraphErrors(0);
  TGraphErrors *gpullymg=new TGraphErrors(0);
  TGraphErrors *gpullzmg=new TGraphErrors(0);
  TGraphErrors *geffm=new TGraphErrors(0);
  TGraphErrors *gefftrks=new TGraphErrors(0);
  TGraphErrors *geff3Dtrks=new TGraphErrors(0);

  TGraphErrors *gavexc=new TGraphErrors(0);
  TGraphErrors *gaveyc=new TGraphErrors(0);
  TGraphErrors *gavezc=new TGraphErrors(0);
  TGraphErrors *grmsxc=new TGraphErrors(0);
  TGraphErrors *grmsyc=new TGraphErrors(0);
  TGraphErrors *grmszc=new TGraphErrors(0);
  TGraphErrors *gpullxc=new TGraphErrors(0);
  TGraphErrors *gpullyc=new TGraphErrors(0);
  TGraphErrors *gpullzc=new TGraphErrors(0);

  TGraph * gbeamxz=new TGraph(0);
  TGraph * gbeamyz=new TGraph(0);
  TGraph * gbeamxy=new TGraph(0);
  TH2F *hbeamxz = new TH2F("hbeamxz","",100,-14.,14.,100,-1.5,1.5);
  TH2F *hbeamyz = new TH2F("hbeamyz","",100,-14.,14.,100,-1.5,1.5);
  TH1F *hbeamx = new TH1F("hbeamx","",1000,-1.5,1.5);
  TH1F *hbeamy = new TH1F("hbeamy","",1000,-1.5,1.5);
  TH2F *hbeamxy = new TH2F("hbeamxy","",100,-1.5,1.5,100,-1.5,1.5);

  gavexm->SetName("gavexm");
  grmsxm->SetName("grmsxm");
  gavexmg->SetName("gavexmg");
  grmsxmg->SetName("grmsxmg");
  gpullxm->SetName("gpullxm");
  gpullxmg->SetName("gpullxmg");
  gaveym->SetName("gaveym");
  grmsym->SetName("grmsym");
  gaveymg->SetName("gaveymg");
  grmsymg->SetName("grmsymg");
  gpullym->SetName("gpullym");
  gpullymg->SetName("gpullymg");
  gavezm->SetName("gavezm");
  grmszm->SetName("grmszm");
  gavezmg->SetName("gavezmg");
  grmszmg->SetName("grmszmg");
  gpullzm->SetName("gpullzm");
  gpullzmg->SetName("gpullzmg");
  geffm->SetName("geffm");
  gefftrks->SetName("gefftrks");
  geff3Dtrks->SetName("geff3Dtrks");
  gavexc->SetName("gavexc");
  grmsxc->SetName("grmsxc");
  gpullxc->SetName("gpullxc");
  gaveyc->SetName("gaveyc");
  grmsyc->SetName("grmsyc");
  gpullyc->SetName("gpullyc");
  gavezc->SetName("gavezc");
  grmszc->SetName("grmszc");
  gpullzc->SetName("gpullzc");

  TGraphErrors *gavexz=new TGraphErrors(0);
  TGraphErrors *gaveyz=new TGraphErrors(0);
  TGraphErrors *gavezz=new TGraphErrors(0);
  TGraphErrors *grmsxz=new TGraphErrors(0);
  TGraphErrors *grmsyz=new TGraphErrors(0);
  TGraphErrors *grmszz=new TGraphErrors(0);
  TGraphErrors *gavexzg=new TGraphErrors(0);
  TGraphErrors *gaveyzg=new TGraphErrors(0);
  TGraphErrors *gavezzg=new TGraphErrors(0);
  TGraphErrors *grmsxzg=new TGraphErrors(0);
  TGraphErrors *grmsyzg=new TGraphErrors(0);
  TGraphErrors *grmszzg=new TGraphErrors(0);
  TGraphErrors *geffz=new TGraphErrors(0);

  gavexz->SetName("gavexz");
  grmsxz->SetName("grmsxz");
  gavexzg->SetName("gavexzg");
  grmsxzg->SetName("grmsxzg");
  gaveyz->SetName("gaveyz");
  grmsyz->SetName("grmsyz");
  gaveyzg->SetName("gaveyzg");
  grmsyzg->SetName("grmsyzg");
  gavezz->SetName("gavezz");
  grmszz->SetName("grmszz");
  gavezzg->SetName("gavezzg");
  grmszzg->SetName("grmszzg");
  geffz->SetName("geffz");

  TF1 *fitf;

  // histogram creation
  for(Int_t khis=0;khis<nbinseff;khis++){
    sprintf(hisnam,"hmeff%d",khis);
    hmulteff[khis]=new TH1F(hisnam,"",100,0.,200.);
    sprintf(hisnam,"htrkseff%d",khis);
    htrkseff[khis]=new TH1F(hisnam,"",100,0.,200.);
    sprintf(hisnam,"haux%d",khis);
    haux[khis]=new TH1F(hisnam,"",binsHRes,-rangeHRes,rangeHRes);
    sprintf(hisnam,"htrksaux%d",khis);
    htrksaux[khis]=new TH1F(hisnam,"",binsHRes,-rangeHRes,rangeHRes);
    sprintf(hisnam,"htrks3Daux%d",khis);
    htrks3Daux[khis]=new TH1F(hisnam,"",binsHRes,-rangeHRes,rangeHRes);
  }
  for(Int_t khis=0;khis<nbinsmult;khis++){
    sprintf(hisnam,"hxm%d",khis);
    hxm[khis]=new TH1F(hisnam,"",binsHRes,-rangeHRes,rangeHRes);
    sprintf(hisnam,"hym%d",khis);
    hym[khis]=new TH1F(hisnam,"",binsHRes,-rangeHRes,rangeHRes);
    sprintf(hisnam,"hzm%d",khis);
    hzm[khis]=new TH1F(hisnam,"",binsHRes,-rangeHRes,rangeHRes);
    sprintf(hisnam,"hxpm%d",khis);
    hxpullm[khis]=new TH1F(hisnam,"",100,-rangeHPull,rangeHPull);
    sprintf(hisnam,"hypm%d",khis);
    hypullm[khis]=new TH1F(hisnam,"",100,-rangeHPull,rangeHPull);
    sprintf(hisnam,"hzpm%d",khis);
    hzpullm[khis]=new TH1F(hisnam,"",100,-rangeHPull,rangeHPull);
    sprintf(hisnam,"hmult%d",khis);
    hmult[khis]=new TH1F(hisnam,"",100,0.,200.);
  }

  for(Int_t khis=0;khis<8;khis++){
    sprintf(hisnam,"hxc%d",khis);
    hxc[khis]=new TH1F(hisnam,"",binsHRes,-rangeHRes,rangeHRes);
    sprintf(hisnam,"hyc%d",khis);
    hyc[khis]=new TH1F(hisnam,"",binsHRes,-rangeHRes,rangeHRes);
    sprintf(hisnam,"hzc%d",khis);
    hzc[khis]=new TH1F(hisnam,"",binsHRes,-rangeHRes,rangeHRes);
    sprintf(hisnam,"hxpc%d",khis);
    hxpullc[khis]=new TH1F(hisnam,"",100,-rangeHPull,rangeHPull);
    sprintf(hisnam,"hypc%d",khis);
    hypullc[khis]=new TH1F(hisnam,"",100,-rangeHPull,rangeHPull);
    sprintf(hisnam,"hzpc%d",khis);
    hzpullc[khis]=new TH1F(hisnam,"",100,-rangeHPull,rangeHPull);
    sprintf(hisnam,"hcont%d",khis);
    hcont[khis]=new TH1F(hisnam,"",100,0.,200.);
  }

  for(Int_t khis=0;khis<nbinz;khis++){
    sprintf(hisnam,"hxz%d",khis);
    hxz[khis]=new TH1F(hisnam,"",binsHRes,-rangeHRes,rangeHRes);
    sprintf(hisnam,"hyz%d",khis);
    hyz[khis]=new TH1F(hisnam,"",binsHRes,-rangeHRes,rangeHRes);
    sprintf(hisnam,"hzz%d",khis);
    hzz[khis]=new TH1F(hisnam,"",binsHRes,-rangeHRes,rangeHRes);
    sprintf(hisnam,"hz%d",khis);
    hz[khis]=new TH1F(hisnam,"",100,-20.,20.);   
  }

  Float_t totev=0,totevtriggered=0,nvtx3D=0,nvtxZ=0;

  TFile *f=new TFile(fname.Data());
  TList *cOutput = (TList*)f->Get("cOutput");
  TNtuple *nt=(TNtuple*)cOutput->FindObject(ntname.Data());
  Int_t nnnev=nt->GetEntries();
  printf("Events = %d\n",nnnev);
  Float_t xVtx,xdiffVtx,xerrVtx;
  Float_t yVtx,ydiffVtx,yerrVtx;
  Float_t zVtx,zdiffVtx,zerrVtx;
  Float_t ntrklets,ncontrVtx,dndy,triggered,vtx3D;
  Float_t xtrue,ytrue,ztrue,zref;
  
  TString sxx="x"; sxx.Append(vtxtype.Data());
  nt->SetBranchAddress(sxx.Data(),&xVtx);
  TString syy="y"; syy.Append(vtxtype.Data());
  nt->SetBranchAddress(syy.Data(),&yVtx);
  TString szz="z"; szz.Append(vtxtype.Data());
  nt->SetBranchAddress(szz.Data(),&zVtx);
  
  TString xerr="xerr"; xerr.Append(vtxtype.Data());
  nt->SetBranchAddress(xerr.Data(),&xerrVtx);
  TString yerr="yerr"; yerr.Append(vtxtype.Data());
  nt->SetBranchAddress(yerr.Data(),&yerrVtx);
  TString zerr="zerr"; zerr.Append(vtxtype.Data());
  nt->SetBranchAddress(zerr.Data(),&zerrVtx);

  TString trkstitle;
  if(vtxtype.Contains("TPC")) {
    nt->SetBranchAddress("nTPCin",&ntrklets);
    trkstitle="TPC tracks pointing to beam pipe";
  } else {
    nt->SetBranchAddress("ntrklets",&ntrklets);
    trkstitle="SPD tracklets";
  }
  TString ntrks="ntrks"; ntrks.Append(vtxtype.Data());
  nt->SetBranchAddress(ntrks.Data(),&ncontrVtx);
  nt->SetBranchAddress("dndygen",&dndy);
  nt->SetBranchAddress("xtrue",&xtrue);
  nt->SetBranchAddress("ytrue",&ytrue);
  nt->SetBranchAddress("ztrue",&ztrue);
  nt->SetBranchAddress("triggered",&triggered);
  nt->SetBranchAddress("SPD3D",&vtx3D);

  // loop on events
  for(Int_t iev=0;iev<nnnev;iev++){
    nt->GetEvent(iev);

    xtrue=0;
    ytrue=0;
    ztrue=0;

    xdiffVtx=10000.*(xVtx-xtrue);
    ydiffVtx=10000.*(yVtx-ytrue);
    zdiffVtx=10000.*(zVtx-ztrue);


    zref = (useztrue ? ztrue : zVtx);
    if(!vtxtype.Contains("SPD")) vtx3D=1.;
    //if(triggered>0.5) continue; // not triggered
    totevtriggered += 1.;
    if(ncontrVtx>0) {
      htot->Fill(zdiffVtx);
      if(vtx3D>0.5) {
	nvtx3D += 1.;
      } else {
	nvtxZ += 1.;
      }
    }

    if(ncontrVtx>0 && vtx3D>0.5) {
      gbeamxz->SetPoint(gbeamxz->GetN(),zVtx,xVtx);
      gbeamyz->SetPoint(gbeamxz->GetN(),zVtx,yVtx);
      gbeamxy->SetPoint(gbeamxz->GetN(),xVtx,yVtx);
      
      hbeamx->Fill(xVtx);
      hbeamy->Fill(yVtx);
      hbeamxz->Fill(zVtx,xVtx);
      hbeamyz->Fill(zVtx,yVtx);
      hbeamxy->Fill(xVtx,yVtx);
    }

    for(Int_t khis=0;khis<nbinseff;khis++){
      if(dndy>=limeff[khis] && dndy<limeff[khis+1]){
	hmulteff[khis]->Fill(dndy);
	if(ncontrVtx>0) haux[khis]->Fill(zdiffVtx);
      }
      if(ntrklets>=limeff[khis] && ntrklets<limeff[khis+1]){
	htrkseff[khis]->Fill(ntrklets);
	if(ncontrVtx>0) htrksaux[khis]->Fill(zdiffVtx);
	if(ncontrVtx>0 && vtx3D>0.5) htrks3Daux[khis]->Fill(zdiffVtx);
      }
    }
    for(Int_t khis=0;khis<nbinsmult;khis++){
      if(ntrklets>=limmult[khis] && ntrklets<limmult[khis+1]){
	hmult[khis]->Fill(ntrklets);
	if(ncontrVtx>0){
	  if(vtx3D>0.5) hxm[khis]->Fill(xdiffVtx);
	  if(vtx3D>0.5) hym[khis]->Fill(ydiffVtx);
	  hzm[khis]->Fill(zdiffVtx);
	  if(vtx3D>0.5) hxpullm[khis]->Fill(xdiffVtx/10000./xerrVtx);
	  if(vtx3D>0.5) hypullm[khis]->Fill(ydiffVtx/10000./yerrVtx);
	  hzpullm[khis]->Fill(zdiffVtx/10000./zerrVtx);
	}
      }
    }
    for(Int_t khis=0;khis<8;khis++){
      if(ncontrVtx>=limcont[khis]&&ncontrVtx<limcont[khis+1]){
	hcont[khis]->Fill(ncontrVtx);
	if(ncontrVtx>0){	
	  if(vtx3D>0.5)hxc[khis]->Fill(xdiffVtx);
	  if(vtx3D>0.5)hyc[khis]->Fill(ydiffVtx);
	  hzc[khis]->Fill(zdiffVtx);
	  if(vtx3D>0.5)hxpullc[khis]->Fill(xdiffVtx/10000./xerrVtx);
	  if(vtx3D>0.5)hypullc[khis]->Fill(ydiffVtx/10000./yerrVtx);
	  hzpullc[khis]->Fill(zdiffVtx/10000./zerrVtx);
	}
      }
    }
    for(Int_t khis=0;khis<nbinz;khis++){
      if(zref>=limitzt[khis]&&zref<limitzt[khis+1]){
	hz[khis]->Fill(zref);
	if(ncontrVtx>0){
	  if(vtx3D>0.5)hxz[khis]->Fill(xdiffVtx);
	  if(vtx3D>0.5)hyz[khis]->Fill(ydiffVtx);
	  hzz[khis]->Fill(zdiffVtx);
	}
      }
    }
  }
  totev+=nnnev;

  if(totev==0){
    printf("Total number of events = 0\n");
    return;
  }
  for(Int_t khis=0;khis<nbinseff;khis++){
    Double_t x=hmulteff[khis]->GetMean();
    Double_t ex=hmulteff[khis]->GetRMS();;
    Float_t nEv=(Float_t)(hmulteff[khis]->GetEntries());
    Float_t trkeff=-1.;
    cout<<"Eff. dNch/dy bin "<<khis<<" ("<<limeff[khis]<<"-"<<limeff[khis+1]<<")  # Events ="<<nEv<<" with vertex ="<<haux[khis]->GetEntries()<<endl;
    if(nEv>0) trkeff=(Float_t)(haux[khis]->GetEntries())/nEv;
    geffm->SetPoint(khis,x,trkeff);
    if (nEv>0) Float_t effMultErr = (trkeff*(1-trkeff))/nEv;
    geffm->SetPointError(khis,ex,effMultErr);
  }

  for(Int_t khis=0;khis<nbinseff;khis++){
    Double_t x=htrkseff[khis]->GetMean();
    Double_t ex=htrkseff[khis]->GetRMS();;
    Float_t nEv=(Float_t)(htrkseff[khis]->GetEntries());
    Float_t trkeff=-1.;
    cout<<"Eff.trks bin "<<khis<<" ("<<limeff[khis]<<"-"<<limeff[khis+1]<<")  # Events ="<<nEv<<" with vertex ="<<htrksaux[khis]->GetEntries()<<endl;
    if(nEv>0) trkeff=(Float_t)(htrksaux[khis]->GetEntries())/nEv;
    gefftrks->SetPoint(khis,x,trkeff);
    if(nEv>0) Float_t effTrackErr = (trkeff*(1-trkeff))/nEv;
    gefftrks->SetPointError(khis,ex,effTrackErr);
    if(nEv>0) trkeff=(Float_t)(htrks3Daux[khis]->GetEntries())/nEv;
    geff3Dtrks->SetPoint(khis,x,trkeff);
    if(nEv>0) Float_t effTrack3DErr = (trkeff*(1-trkeff))/nEv;
    geff3Dtrks->SetPointError(khis,ex, effTrack3DErr);
  }

  TCanvas *c1=new TCanvas("c1","Residuals",1000,700);
  c1->Divide(nbinsmult,3,0.001,0.001);
  
  for(Int_t khis=0;khis<nbinsmult;khis++){ 
      c1->cd(khis+1);
      if(hxm[khis]->GetEffectiveEntries()<3) continue;
      hxm[khis]->Draw();
      hxm[khis]->Fit("gaus","Q0");
      fitf= hxm[khis]->GetFunction("gaus");
      Double_t avexg=fitf->GetParameter(1);
      Double_t eavexg=fitf->GetParError(1);
      Double_t rmsxg=fitf->GetParameter(2);
      Double_t ermsxg=fitf->GetParError(2);
      c1->cd(nbinsmult+khis+1);
      if(hym[khis]->GetEffectiveEntries()<3) continue;
      hym[khis]->Draw();
      hym[khis]->Fit("gaus","Q0");
      fitf= hym[khis]->GetFunction("gaus");
      Double_t aveyg=fitf->GetParameter(1);
      Double_t eaveyg=fitf->GetParError(1);
      Double_t rmsyg=fitf->GetParameter(2);
      Double_t ermsyg=fitf->GetParError(2);
      c1->cd(2*nbinsmult+khis+1);
      if(hzm[khis]->GetEffectiveEntries()<3) continue;
      hzm[khis]->Draw();
      hzm[khis]->Fit("gaus","Q0");
      fitf= hzm[khis]->GetFunction("gaus");
      Double_t avezg=fitf->GetParameter(1);
      Double_t eavezg=fitf->GetParError(1);
      Double_t rmszg=fitf->GetParameter(2);
      Double_t ermszg=fitf->GetParError(2);
      
      if (doFits){
	TCanvas *cp=new TCanvas("cp","Pulls",1000,700);
	cp->Divide(nbinsmult,3,0.001,0.001);
	cp->cd(khis+1);
	hxpullm[khis]->Draw();
	hxpullm[khis]->Fit("gaus","Q0");
	fitf= hxpullm[khis]->GetFunction("gaus");
	Double_t pullxg=fitf->GetParameter(2);
	Double_t epullxg=fitf->GetParError(2);
	cp->cd(nbinsmult+khis+1);
	hypullm[khis]->Draw();
	hypullm[khis]->Fit("gaus","Q0");
	fitf= hypullm[khis]->GetFunction("gaus");
	Double_t pullyg=fitf->GetParameter(2);
	Double_t epullyg=fitf->GetParError(2);
	cp->cd(2*nbinsmult+khis+1);
	hzpullm[khis]->Draw();
	hzpullm[khis]->Fit("gaus","Q0");
	fitf= hzpullm[khis]->GetFunction("gaus");
	Double_t pullzg=fitf->GetParameter(2);
	Double_t epullzg=fitf->GetParError(2);
      }
    
    Double_t rmsxt=hxm[khis]->GetRMS();
    Double_t rmsyt=hym[khis]->GetRMS();
    Double_t rmszt=hzm[khis]->GetRMS();
    Double_t ermsxt=hxm[khis]->GetRMSError();
    Double_t ermsyt=hym[khis]->GetRMSError();
    Double_t ermszt=hzm[khis]->GetRMSError();
    Double_t avext=hxm[khis]->GetMean();
    Double_t aveyt=hym[khis]->GetMean();
    Double_t avezt=hzm[khis]->GetMean();
    Double_t eavext=hxm[khis]->GetMeanError();
    Double_t eaveyt=hym[khis]->GetMeanError();
    Double_t eavezt=hzm[khis]->GetMeanError();
    Double_t pullxt=hxpullm[khis]->GetRMS();
    Double_t pullyt=hypullm[khis]->GetRMS();
    Double_t pullzt=hzpullm[khis]->GetRMS();
    Double_t epullxt=hxpullm[khis]->GetRMSError();
    Double_t epullyt=hypullm[khis]->GetRMSError();
    Double_t epullzt=hzpullm[khis]->GetRMSError();

    Double_t x=hmult[khis]->GetMean();
    if(hmult[khis]->GetEntries()==0) x=-1;
    Double_t ex=hmult[khis]->GetRMS();;

    gavexm->SetPoint(khis,x,avext);
    gavexm->SetPointError(khis,ex,eavext);
    gaveym->SetPoint(khis,x,aveyt);
    gaveym->SetPointError(khis,ex,eaveyt);
    gavezm->SetPoint(khis,x,avezt);
    gavezm->SetPointError(khis,ex,eavezt);
    grmsxm->SetPoint(khis,x,rmsxt);
    grmsxm->SetPointError(khis,ex,ermsxt);
    grmsym->SetPoint(khis,x,rmsyt);
    grmsym->SetPointError(khis,ex,ermsyt);
    grmszm->SetPoint(khis,x,rmszt);
    grmszm->SetPointError(khis,ex,ermszt);


    gavexmg->SetPoint(khis,x,avexg);
    gavexmg->SetPointError(khis,ex,eavexg);
    gaveymg->SetPoint(khis,x,aveyg);
    gaveymg->SetPointError(khis,ex,eaveyg);
    gavezmg->SetPoint(khis,x,avezg);
    gavezmg->SetPointError(khis,ex,eavezg);
    grmsxmg->SetPoint(khis,x,rmsxg);
    grmsxmg->SetPointError(khis,ex,ermsxg);
    grmsymg->SetPoint(khis,x,rmsyg);
    grmsymg->SetPointError(khis,ex,ermsyg);
    grmszmg->SetPoint(khis,x,rmszg);
    grmszmg->SetPointError(khis,ex,ermszg);
    
    if (doFits){
      gpullxm->SetPoint(khis,x,pullxt);
      gpullxm->SetPointError(khis,ex,epullxt);
      gpullym->SetPoint(khis,x,pullyt);
      gpullym->SetPointError(khis,ex,epullyt);
      gpullzm->SetPoint(khis,x,pullzt);
      gpullzm->SetPointError(khis,ex,epullzt);
      gpullxmg->SetPoint(khis,x,pullxg);
      gpullxmg->SetPointError(khis,ex,epullxg);
      gpullymg->SetPoint(khis,x,pullyg);
      gpullymg->SetPointError(khis,ex,epullyg);
      gpullzmg->SetPoint(khis,x,pullzg);
      gpullzmg->SetPointError(khis,ex,epullzg);
    }
    
    Float_t nEv=hmult[khis]->GetEntries();
    cout<<"Mult. bin "<<khis<<"  # Events ="<<nEv<<endl;
  }
  
  for(Int_t khis=0;khis<8;khis++){
    
    Double_t rmsxt=hxc[khis]->GetRMS();
    Double_t rmsyt=hyc[khis]->GetRMS();
    Double_t rmszt=hzc[khis]->GetRMS();
    Double_t ermsxt=hxc[khis]->GetRMSError();
    Double_t ermsyt=hyc[khis]->GetRMSError();
    Double_t ermszt=hzc[khis]->GetRMSError();
    Double_t avext=hxc[khis]->GetMean();
    Double_t aveyt=hyc[khis]->GetMean();
    Double_t avezt=hzc[khis]->GetMean();
    Double_t eavext=hxc[khis]->GetMeanError();
    Double_t eaveyt=hyc[khis]->GetMeanError();
    Double_t eavezt=hzc[khis]->GetMeanError();
    Double_t pullxt=hxpullc[khis]->GetRMS();
    Double_t pullyt=hypullc[khis]->GetRMS();
    Double_t pullzt=hzpullc[khis]->GetRMS();
    Double_t epullxt=hxpullc[khis]->GetRMSError();
    Double_t epullyt=hypullc[khis]->GetRMSError();
    Double_t epullzt=hzpullc[khis]->GetRMSError();

    Double_t x=hcont[khis]->GetMean();
    Double_t ex=hcont[khis]->GetRMS();;

    gavexc->SetPoint(khis,x,avext);
    gavexc->SetPointError(khis,ex,eavext);
    gaveyc->SetPoint(khis,x,aveyt);
    gaveyc->SetPointError(khis,ex,eaveyt);
    gavezc->SetPoint(khis,x,avezt);
    gavezc->SetPointError(khis,ex,eavezt);
    grmsxc->SetPoint(khis,x,rmsxt);
    grmsxc->SetPointError(khis,ex,ermsxt);
    grmsyc->SetPoint(khis,x,rmsyt);
    grmsyc->SetPointError(khis,ex,ermsyt);
    grmszc->SetPoint(khis,x,rmszt);
    grmszc->SetPointError(khis,ex,ermszt);

    if (doFits){
      gpullxc->SetPoint(khis,x,pullxt);
      gpullxc->SetPointError(khis,ex,epullxt);
      gpullyc->SetPoint(khis,x,pullyt);
      gpullyc->SetPointError(khis,ex,epullyt);
      gpullzc->SetPoint(khis,x,pullzt);
      gpullzc->SetPointError(khis,ex,epullzt);
    }
    
    Float_t nEv=hcont[khis]->GetEntries();
    cout<<"Contrib. bin "<<khis<<"  # Events ="<<nEv<<endl;
  }
  
  for(Int_t khis=0; khis<nbinz; khis++){
    
    Double_t rmsxt=hxz[khis]->GetRMS();
    Double_t rmsyt=hyz[khis]->GetRMS();
    Double_t rmszt=hzz[khis]->GetRMS();
    Double_t ermsxt=hxz[khis]->GetRMSError();
    Double_t ermsyt=hyz[khis]->GetRMSError();
    Double_t ermszt=hzz[khis]->GetRMSError();
    Double_t avext=hxz[khis]->GetMean();
    Double_t aveyt=hyz[khis]->GetMean();
    Double_t avezt=hzz[khis]->GetMean();
    Double_t eavext=hxz[khis]->GetMeanError();
    Double_t eaveyt=hyz[khis]->GetMeanError();
    Double_t eavezt=hzz[khis]->GetMeanError();

    Float_t nEv=hz[khis]->GetEntries();
    Double_t x=-999.;
    if(nEv>0) x=hz[khis]->GetMean();
    Double_t ex=hz[khis]->GetRMS();;
    
    gavexz->SetPoint(khis,x,avext);
    gavexz->SetPointError(khis,ex,eavext);
    gaveyz->SetPoint(khis,x,aveyt);
    gaveyz->SetPointError(khis,ex,eaveyt);
    gavezz->SetPoint(khis,x,avezt);
    gavezz->SetPointError(khis,ex,eavezt);
    grmsxz->SetPoint(khis,x,rmsxt);
    grmsxz->SetPointError(khis,ex,ermsxt);
    grmsyz->SetPoint(khis,x,rmsyt);
    grmsyz->SetPointError(khis,ex,ermsyt);
    grmszz->SetPoint(khis,x,rmszt);
    grmszz->SetPointError(khis,ex,ermszt);

    if (doFits){
      TCanvas *c1z = new TCanvas("c1z","Residuals z", 1000, 700);
      c1z->Divide(nbinz,3,0.001,0.001);
      
      c1z->cd(khis+1);
      hxz[khis]->Draw();
      hxz[khis]->Fit("gaus","Q0");
      fitf= hxz[khis]->GetFunction("gaus");
      Double_t avexg=fitf->GetParameter(1);
      Double_t eavexg=fitf->GetParError(1);
      Double_t rmsxg=fitf->GetParameter(2);
      Double_t ermsxg=fitf->GetParError(2);
      c1z->cd(1*nbinz+khis+1);
      hyz[khis]->Draw();
      hyz[khis]->Fit("gaus","Q0");
      fitf= hyz[khis]->GetFunction("gaus");
      Double_t aveyg=fitf->GetParameter(1);
      Double_t eaveyg=fitf->GetParError(1);
      Double_t rmsyg=fitf->GetParameter(2);
      Double_t ermsyg=fitf->GetParError(2);
      c1z->cd(2*nbinz+khis+1);
      hzz[khis]->Draw();
      hzz[khis]->Fit("gaus","Q0");
      fitf= hzz[khis]->GetFunction("gaus");
      Double_t avezg=fitf->GetParameter(1);
      Double_t eavezg=fitf->GetParError(1);
      Double_t rmszg=fitf->GetParameter(2);
      Double_t ermszg=fitf->GetParError(2);
      gavexzg->SetPoint(khis,x,avexg);
      gavexzg->SetPointError(khis,ex,eavexg);
      gaveyzg->SetPoint(khis,x,aveyg);
      gaveyzg->SetPointError(khis,ex,eaveyg);
      gavezzg->SetPoint(khis,x,avezg);
      gavezzg->SetPointError(khis,ex,eavezg);
      grmsxzg->SetPoint(khis,x,rmsxg);
      grmsxzg->SetPointError(khis,ex,ermsxg);
      grmsyzg->SetPoint(khis,x,rmsyg);
      grmsyzg->SetPointError(khis,ex,ermsyg);
      grmszzg->SetPoint(khis,x,rmszg);
      grmszzg->SetPointError(khis,ex,ermszg);
    }
    
    Float_t zeff=-999.;
    if(nEv>0) zeff=hzz[khis]->GetEntries()/nEv;
    geffz->SetPoint(khis,x,zeff);
    if (nEv>0) Double_t effError = (zeff*(1-zeff))/nEv;
    geffz->SetPointError(khis,ex,effError);
    
    cout<<"Z bin "<<khis<<"  # Events ="<<nEv<<endl;
  }
  
  Double_t efftrk=(htot->GetEntries())/totevtriggered;
  
  printf("EVENTS STATISTICS:\n Total: %d\n Triggered (MB1): %d\n Triggered and with vertex %d\n",totev,totevtriggered,htot->GetEntries());
  if(vtxtype.Contains("SPD")) printf("  %d with Vertexer3D, %d with VertexerZ\n",nvtx3D,nvtxZ);
  printf("Overall efficiency (for triggered evts) Vertexer%s = %f / %f = %f\n",vtxtype.Data(),htot->GetEntries(),totevtriggered,efftrk);

  TFile* in = new TFile("vert-graphs.root","recreate");
  gbeamxz->Write("gbeamxz");
  gbeamyz->Write("gbeamyz");
  grmsxm->Write();
  gavexm->Write();
  grmsym->Write();
  gaveym->Write();
  grmszm->Write();
  gavezm->Write();
  geffm->Write();
  gefftrks->Write();
  geff3Dtrks->Write();
  grmsxc->Write();
  gavexc->Write();
  grmsyc->Write();
  gaveyc->Write();
  grmszc->Write();
  gavezc->Write();
  gavexz->Write();
  gaveyz->Write();
  gavezz->Write();
  grmsxz->Write();
  grmsyz->Write();
  grmszz->Write();
  grmsxmg->Write();   
  gavexmg->Write();
  grmsymg->Write();
  gaveymg->Write();
  grmszmg->Write();
  gavezmg->Write();
  
  grmsxzg->Write();
  gavexzg->Write();
  gaveyzg->Write();
  gavezzg->Write();
  grmsyzg->Write();
  grmszzg->Write();
  
  if (doFits){
    gpullxm->Write();
    gpullym->Write();
    gpullzm->Write();
    gpullxc->Write();
    gpullyc->Write();
    gpullzc->Write();
    gpullxmg->Write();
    gpullymg->Write();
    gpullzmg->Write();
  

  }
  
  in->Close();
  
  gStyle->SetOptTitle(0);

  Char_t outgif[100];

  TLine *lin0=new TLine(0,0,60,0);
  lin0->SetLineStyle(2);
  TLegend *leg=new TLegend(0.18,0.70,0.25,0.90);
  TLegendEntry *ent=leg->AddEntry(gavexm,"x","P");
  ent->SetTextColor(1);
  ent=leg->AddEntry(gaveym,"y","P");
  ent->SetTextColor(2);
  ent=leg->AddEntry(gavezm,"z","P");
  ent->SetTextColor(4);
  
  TCanvas *cg1=new TCanvas("cg1","Histo mean");
  cg1->SetBottomMargin(0.14);
  cg1->SetTopMargin(0.08);
  cg1->SetLeftMargin(0.14);
  cg1->SetRightMargin(0.08);
  gavezm->SetMarkerStyle(22);
  gavezm->SetMarkerColor(4);
  gaveym->SetMarkerStyle(21);
  gaveym->SetMarkerColor(2);
  gavexm->SetMarkerStyle(20);
  gavexm->SetMarkerColor(1);
  leg->SetBorderSize(0);
  leg->SetFillStyle(0);
  gavexm->GetXaxis()->SetLimits(0.,60.);
  gavexm->SetMinimum(-rangeGrAve);
  gavexm->SetMaximum(rangeGrAve);
  gavexm->Draw("AP");
  gavexm->GetXaxis()->SetTitle(trkstitle.Data());
  gavexm->GetXaxis()->SetTitleSize(0.05);
  gavexm->GetYaxis()->SetTitle("<Pos_{mean}> [#mum]");
  gavexm->GetYaxis()->SetTitleSize(0.05);
  //gavezm->Draw("PSAME");
  gaveym->Draw("PSAME");
  leg->Draw();
  lin0->Draw();
  sprintf(outgif,"vert%s-ave-mult.gif",vtxtype.Data());
  if(optgif) cg1->SaveAs(outgif);
  
  TCanvas *cg2=new TCanvas("cg2","Histo RMS");
  cg2->SetBottomMargin(0.14);
  cg2->SetTopMargin(0.08);
  cg2->SetLeftMargin(0.14);
  cg2->SetRightMargin(0.08);
  grmszm->SetMarkerStyle(22);
  grmszm->SetMarkerColor(4);
  grmsym->SetMarkerStyle(21);
  grmsym->SetMarkerColor(2);
  grmsxm->SetMarkerStyle(20);
  grmsxm->SetMarkerColor(1);
  grmsxm->SetMinimum(0);
  grmsxm->SetMaximum(rangeGrRms);
  grmsxm->GetXaxis()->SetLimits(0,60);
  grmsxm->Draw("AP");
  grmsxm->GetXaxis()->SetTitle(trkstitle.Data());
  grmsxm->GetXaxis()->SetTitleSize(0.05);
  grmsxm->GetYaxis()->SetTitle("Resolution [#mum]");
  grmsxm->GetYaxis()->SetTitleSize(0.05);
  grmsym->Draw("PSAME");
  //grmszm->Draw("PSAME");
  grmszmg->SetMarkerStyle(26);
  grmszmg->SetMarkerColor(4);
  grmsymg->SetMarkerStyle(25);
  grmsymg->SetMarkerColor(2);
  grmsxmg->SetMarkerStyle(24);
  grmsxmg->SetMarkerColor(1);
  grmsxmg->SetMinimum(0);
  grmsxmg->SetMaximum(rangeGrRms);
  grmsxmg->GetXaxis()->SetLimits(0,60);
  grmsxmg->Draw("PSAME");
  grmsxmg->GetXaxis()->SetTitle(trkstitle.Data());
  grmsxmg->GetXaxis()->SetTitleSize(0.05);
  grmsxmg->GetYaxis()->SetTitle("Resolution [#mum]");
  grmsxmg->GetYaxis()->SetTitleSize(0.05);
  grmsymg->Draw("PSAME");
  TF1 *f1 = new TF1("f1","TMath::Sqrt([0]*[0]+[1]*[1]/x) ", 0, 40);
  grmsxmg->Fit("f1", "R");

  //grmszmg->Draw("PSAME");
  leg->Draw();
  sprintf(outgif,"vert%s-rms-mult.gif",vtxtype.Data());
  if(optgif) cg2->SaveAs(outgif);


  if (doFits){
    TCanvas *cg3=new TCanvas("cg3","Efficiency vs dNch/dy");
    cg3->SetBottomMargin(0.14);
    cg3->SetTopMargin(0.08);
    cg3->SetLeftMargin(0.14);
    cg3->SetRightMargin(0.08);
    geffm->SetMarkerStyle(22);
    geffm->SetMarkerColor(1);
    geffm->GetXaxis()->SetLimits(0.,40.);
    geffm->SetMinimum(0.);
    geffm->SetMaximum(1.2);
    geffm->Draw("AP");
    geffm->GetXaxis()->SetTitle("MC dN_{ch}/dy in |y|<1");
    geffm->GetXaxis()->SetTitleSize(0.05);
    geffm->GetYaxis()->SetTitle("efficiency");
    geffm->GetYaxis()->SetTitleSize(0.05);
    sprintf(outgif,"vert%s-eff-mult.gif",vtxtype.Data());
    if(optgif) cg3->SaveAs(outgif);
  }

  TCanvas *cg3b=new TCanvas("cg3b","Efficiency vs tracks");
  cg3b->SetBottomMargin(0.14);
  cg3b->SetTopMargin(0.08);
  cg3b->SetLeftMargin(0.14);
  cg3b->SetRightMargin(0.08);
  gefftrks->SetMarkerStyle(22);
  gefftrks->SetMarkerColor(1);
  gefftrks->GetXaxis()->SetLimits(0.,40.);
  gefftrks->SetMinimum(0.);
  gefftrks->SetMaximum(1.2);
  gefftrks->Draw("AP");
  gefftrks->GetXaxis()->SetTitle(trkstitle.Data());
  gefftrks->GetXaxis()->SetTitleSize(0.05);
  gefftrks->GetYaxis()->SetTitle("efficiency");
  gefftrks->GetYaxis()->SetTitleSize(0.05);
  if(vtxtype.Contains("SPD")) {
    geff3Dtrks->SetMarkerStyle(28);
    geff3Dtrks->SetMarkerColor(2);
    geff3Dtrks->Draw("P");
  }
  sprintf(outgif,"vert%s-eff-mult.gif",vtxtype.Data());
  if(optgif) cg3b->SaveAs(outgif);
  
  if (doFits){
    TCanvas *cg4=new TCanvas("cg4","Pulls");
    cg4->SetBottomMargin(0.14);
    cg4->SetTopMargin(0.08);
    cg4->SetLeftMargin(0.14);
    cg4->SetRightMargin(0.08);
    gpullxm->SetMarkerStyle(20);
    gpullxm->SetMarkerColor(1);
    gpullym->SetMarkerStyle(21);
    gpullym->SetMarkerColor(2);
    gpullzm->SetMarkerStyle(22);
    gpullzm->SetMarkerColor(4);
    gpullzm->GetXaxis()->SetLimits(0,60);
    gpullzm->SetMinimum(0);
    gpullzm->SetMaximum(rangeGrPull);
    gpullzm->Draw("AP");
    gpullzm->GetXaxis()->SetTitle(trkstitle.Data());
    gpullzm->GetXaxis()->SetTitleSize(0.05);
    gpullzm->GetYaxis()->SetTitle("PULL");
    gpullzm->GetYaxis()->SetTitleSize(0.05);
    gpullxm->Draw("PSAME");
    gpullym->Draw("PSAME");
    gpullxmg->SetMarkerStyle(24);
    gpullxmg->SetMarkerColor(1);
    gpullymg->SetMarkerStyle(25);
    gpullymg->SetMarkerColor(2);
    gpullzmg->SetMarkerStyle(26);
    gpullzmg->SetMarkerColor(4);
    gpullzmg->GetXaxis()->SetLimits(0,60);
    gpullzmg->SetMinimum(0);
    gpullzmg->SetMaximum(rangeGrPull);
    gpullzmg->Draw("PSAME");
    gpullzmg->GetXaxis()->SetTitle(trkstitle.Data());
    gpullzmg->GetXaxis()->SetTitleSize(0.05);
    gpullzmg->GetYaxis()->SetTitle("PULL");
    gpullzmg->GetYaxis()->SetTitleSize(0.05);
    gpullxmg->Draw("PSAME");
    gpullymg->Draw("PSAME");
    TLine *lin=new TLine(0,1,60,1);
    lin->SetLineStyle(2);
    lin->Draw();
    leg->Draw();
    sprintf(outgif,"vert%s-pull-mult.gif",vtxtype.Data());
    if(optgif) cg4->SaveAs(outgif);
  }
  
  TCanvas *cz1=new TCanvas("cz1","Efficiency vs. Z");
  cz1->SetBottomMargin(0.14);
  cz1->SetTopMargin(0.08);
  cz1->SetLeftMargin(0.14);
  cz1->SetRightMargin(0.08);
  geffz->SetMarkerStyle(22);
  geffz->SetMarkerColor(1);
  geffz->GetXaxis()->SetLimits(-20,20.);
  geffz->SetMinimum(0.);
  geffz->SetMaximum(1.);
  geffz->Draw("AP");
  geffz->GetXaxis()->SetTitle("Z [cm]");
  geffz->GetXaxis()->SetTitleSize(0.05);
  geffz->GetYaxis()->SetTitle("efficiency");
  geffz->GetYaxis()->SetTitleSize(0.05);
  sprintf(outgif,"vert%s-eff-z.gif",vtxtype.Data());
  if(optgif) cz1->SaveAs(outgif);
  
  
  TLine *lin0z=new TLine(-20,0,20,0);
  lin0z->SetLineStyle(2);
  if (doFits){  
    TCanvas *cz2=new TCanvas("cz2","Mean vs. Z");
    cz2->SetBottomMargin(0.14);
    cz2->SetTopMargin(0.08);
    cz2->SetLeftMargin(0.14);
    cz2->SetRightMargin(0.08);
    gavexz->SetMarkerStyle(20);
    gavexz->SetMarkerColor(1);
    gaveyz->SetMarkerStyle(21);
    gaveyz->SetMarkerColor(2);
    gavezz->SetMarkerStyle(22);
    gavezz->SetMarkerColor(4);
    gavezz->GetXaxis()->SetLimits(-20,20.);
    gavezz->SetMinimum(-rangeGrAve);
    gavezz->SetMaximum(rangeGrAve);
    gavezz->Draw("AP");
    gavezz->GetXaxis()->SetTitle("Z [cm]");
    gavezz->GetXaxis()->SetTitleSize(0.05);
    gavezz->GetYaxis()->SetTitle("<Pos_{mean}> [#mum]");
    gavezz->GetYaxis()->SetTitleSize(0.05);
    gavexz->Draw("PSAME");
    gaveyz->Draw("PSAME");
    lin0z->Draw();
    gavexzg->SetMarkerStyle(24);
    gavexzg->SetMarkerColor(1);
    gavexzg->Draw("P");
    gaveyzg->SetMarkerStyle(25);
    gaveyzg->SetMarkerColor(2);
    gaveyzg->Draw("P");
    gavezzg->SetMarkerStyle(26);
    gavezzg->SetMarkerColor(4);
    gavezzg->Draw("P");
    leg->Draw();
    
    sprintf(outgif,"vert%s-ave-z.gif",vtxtype.Data());
    if(optgif) cz2->SaveAs(outgif);
  }

  TCanvas *cz3=new TCanvas("cz3","Resolution vs. Z");
  cz3->SetBottomMargin(0.14);
  cz3->SetTopMargin(0.08);
  cz3->SetLeftMargin(0.14);
  cz3->SetRightMargin(0.08);
  grmsxz->SetMarkerStyle(20);
  grmsxz->SetMarkerColor(1);
  grmsyz->SetMarkerStyle(21);
  grmsyz->SetMarkerColor(2);
  grmszz->SetMarkerStyle(22);
  grmszz->SetMarkerColor(4);
  grmszz->SetMinimum(0);
  grmszz->SetMaximum(rangeGrRms);
  grmszz->GetXaxis()->SetLimits(-20,20);
  grmszz->Draw("AP");
  grmszz->GetXaxis()->SetTitle("Z [cm]");
  grmszz->GetXaxis()->SetTitleSize(0.05);
  grmszz->GetYaxis()->SetTitle("Resolution [#mum]");
  grmszz->GetYaxis()->SetTitleSize(0.05);
  grmsxz->Draw("PSAME");
  grmsyz->Draw("PSAME");
  leg->Draw();
  sprintf(outgif,"vert%s-rms-z.gif",vtxtype.Data());
  if(optgif) cz3->SaveAs(outgif);

  gStyle->SetPalette(1);
  TCanvas *cbeam = new TCanvas("cbeam","Beam Long",800,800);
  cbeam->Divide(2,2);
  cbeam->cd(1);
  hbeamx->GetYaxis()->SetTitle("X [cm]");
  hbeamx->Draw();
  cbeam->cd(3);
  hbeamx->GetYaxis()->SetTitle("Y [cm]");
  hbeamy->Draw();
  cbeam->cd(2);
  cbeam_2->SetLogz();
  //gbeamxz->SetMarkerStyle(7);
  hbeamxz->Draw("colz");
  hbeamxz->GetXaxis()->SetTitle("Z [cm]");
  hbeamxz->GetYaxis()->SetTitle("X [cm]");
  cbeam_1->Update();
  TPaveStats *st1=(TPaveStats*)hbeamxz->GetListOfFunctions()->FindObject("stats");
  st1->SetX1NDC(0.13);
  st1->SetX2NDC(0.33);
  cbeam_2->Modified();
  cbeam_2->Update();
  cbeam->cd(4);
  cbeam_4->SetLogz();
  //gbeamyz->SetMarkerStyle(7);
  hbeamyz->Draw("colz");
  hbeamyz->GetXaxis()->SetTitle("Z [cm]");
  hbeamyz->GetYaxis()->SetTitle("Y [cm]");
  cbeam_4->Update();
  TPaveStats *st2=(TPaveStats*)hbeamyz->GetListOfFunctions()->FindObject("stats");
  st2->SetX1NDC(0.13);
  st2->SetX2NDC(0.33);
  cbeam_4->Modified();
  cbeam_4->Update();
  cbeam->Update();

  TCanvas *cbeam2 = new TCanvas("cbeam2","Beam Transv",500,500);
  cbeam2->SetLogz();
  cbeam2->SetRightMargin(0.14);
  //gbeamxy->SetMarkerStyle(7);
  hbeamxy->Draw("colz");
  hbeamxy->GetXaxis()->SetTitle("X [cm]");
  hbeamxy->GetYaxis()->SetTitle("Y [cm]");
  cbeam2->Update();
  TPaveStats *st3=(TPaveStats*)hbeamxy->GetListOfFunctions()->FindObject("stats");
  st3->SetX1NDC(0.13);
  st3->SetX2NDC(0.33);
  cbeam2->Modified();
  cbeam2->Update();

  vertexStudy();

  return;
}
//----------------------------------------------------------------------------
void ComputeVtxMean(TString vtxtype="SPD",
		    TString fname="Vertex.Performance.root",
		    TString ntname="fNtupleVertexESD",
		    Int_t nEventsToUse=10000,
		    Int_t mincontr=1) {
  //-----------------------------------------------------------------------
  // Compute weighted mean and cov. matrix from the ntuple
  //-----------------------------------------------------------------------
  gStyle->SetOptStat(0);
  //gStyle->SetOptFit(0);

  Double_t diamondx=0.0200.,diamondy=0.0200.,diamondz=7.5.;

  Double_t avx=0.;
  Double_t avy=0.;
  Double_t avz=0.;
  Double_t wgtavx=0.;
  Double_t wgtavy=0.;
  Double_t wgtavz=0.;
  Double_t sum=0.;
  Double_t sumwgtx=0.;
  Double_t sumwgty=0.;
  Double_t sumwgtz=0.;
  Double_t rmsx=0;
  Double_t rmsy=0;
  Double_t rmsz=0;
  Double_t varx=0.;
  Double_t vary=0.;
  Double_t varz=0.;
  Double_t covxy=0.;
  Double_t covxz=0.;
  Double_t covyz=0.;
  Double_t eavx,eavy,eavz,ewgtavx,ewgtavy,ewgtavz;

  TH1F* hx = new TH1F("hx","",1000,-1,1);
  hx->SetXTitle("vertex x [#mu m]");
  hx->SetYTitle("events");
  TH1F* hy = new TH1F("hy","",1000,-1,1);
  hy->SetXTitle("vertex y [#mu m]");
  hy->SetYTitle("events");
  TH1F* hz = new TH1F("hz","",200,-20,20);
  hz->SetXTitle("vertex z [cm]");
  hz->SetYTitle("events");


  TFile *f=new TFile(fname.Data());
  TList *cOutput = (TList*)f->Get("cOutput");
  TNtuple *nt=(TNtuple*)cOutput->FindObject(ntname.Data());
  Int_t nnnev=nt->GetEntries();
  printf("Events = %d\n",nnnev);
  Float_t xVtx,xdiffVtx,xerrVtx;
  Float_t yVtx,ydiffVtx,yerrVtx;
  Float_t zVtx,zdiffVtx,zerrVtx;
  Float_t ntrklets,ncontrVtx,dndy,triggered,vtx3D;
  Float_t ztrue,zref;
  
  TString sxx="x"; sxx.Append(vtxtype.Data());
  nt->SetBranchAddress(sxx.Data(),&xVtx);
  TString syy="y"; syy.Append(vtxtype.Data());
  nt->SetBranchAddress(syy.Data(),&yVtx);
  TString szz="z"; szz.Append(vtxtype.Data());
  nt->SetBranchAddress(szz.Data(),&zVtx);
  
  TString xerr="xerr"; xerr.Append(vtxtype.Data());
  nt->SetBranchAddress(xerr.Data(),&xerrVtx);
  TString yerr="yerr"; yerr.Append(vtxtype.Data());
  nt->SetBranchAddress(yerr.Data(),&yerrVtx);
  TString zerr="zerr"; zerr.Append(vtxtype.Data());
  nt->SetBranchAddress(zerr.Data(),&zerrVtx);

  TString trkstitle;
  if(vtxtype.Contains("TPC")) {
    nt->SetBranchAddress("nTPCin",&ntrklets);
    trkstitle="TPC tracks pointing to beam pipe";
  } else {
    nt->SetBranchAddress("ntrklets",&ntrklets);
    trkstitle="SPD tracklets";
  }
  TString ntrks="ntrks"; ntrks.Append(vtxtype.Data());
  nt->SetBranchAddress(ntrks.Data(),&ncontrVtx);
  nt->SetBranchAddress("dndygen",&dndy);
  
  nt->SetBranchAddress("ztrue",&ztrue);

  nt->SetBranchAddress("triggered",&triggered);

  nt->SetBranchAddress("SPD3D",&vtx3D);

  Int_t total=0;

  // first loop on events
  for(Int_t iev=0;iev<nnnev;iev++) {
    //if(iev%nnnev!=100) continue;
    total++;
    nt->GetEvent(iev);
    if(!vtxtype.Contains("SPD")) vtx3D=1.;
    if(vtx3D<0.5) continue;
    //if(triggered<0.5) continue; // not triggered
    if(ncontrVtx<=0) continue; // no vertex

    if(ncontrVtx<mincontr) continue;

    avx += xVtx;
    avy += yVtx;
    avz += zVtx;
    sum += 1.;
   
    wgtavx += xVtx/xerrVtx/xerrVtx;
    wgtavy += yVtx/yerrVtx/yerrVtx;
    wgtavz += zVtx/zerrVtx/zerrVtx;
    sumwgtx += 1./xerrVtx/xerrVtx;
    sumwgty += 1./yerrVtx/yerrVtx;
    sumwgtz += 1./zerrVtx/zerrVtx;
  
    hx->Fill(xVtx);
    hy->Fill(yVtx);
    hz->Fill(zVtx);
  }
  
  avx /= sum;
  avy /= sum;
  avz /= sum;
  wgtavx /= sumwgtx;
  wgtavy /= sumwgty;
  wgtavz /= sumwgtz;
  ewgtavx = 1./TMath::Sqrt(sumwgtx);
  ewgtavy = 1./TMath::Sqrt(sumwgty);
  ewgtavz = 1./TMath::Sqrt(sumwgtz);
  

  // second loop on events
  for(Int_t iev=0;iev<nnnev;iev++){
    //if(iev%divider!=0) continue;
    nt->GetEvent(iev);
    if(!vtxtype.Contains("SPD")) vtx3D=1.;
    if(vtx3D<0.5) continue;
    //if(triggered<0.5) continue; // not triggered
    if(ncontrVtx<=0) continue; // no vertex

    if(ncontrVtx<mincontr) continue;
  
    varx += (xVtx-avx)*(xVtx-avx);
    vary += (yVtx-avy)*(yVtx-avy);
    varz += (zVtx-avz)*(zVtx-avz);
    covxy += (xVtx-avx)*(yVtx-avy);
    covxz += (xVtx-avx)*(zVtx-avz);
    covyz += (yVtx-avy)*(zVtx-avz);
  }
  
  varx /= sum;
  vary /= sum;
  varz /= sum;
  covxy /= sum;
  covxz /= sum;
  covyz /= sum;
  rmsx = TMath::Sqrt(varx);
  rmsy = TMath::Sqrt(vary);
  rmsz = TMath::Sqrt(varz);
  eavx = rmsx/TMath::Sqrt(sum);
  eavy = rmsy/TMath::Sqrt(sum);
  eavz = rmsz/TMath::Sqrt(sum);
  

  printf("\n\nNumber of events: Total %d, Used %d\n",total,sum);
  printf("Minimum number of contributors: %d\n",mincontr);
  printf("Average:\n x = (%f +- %f) cm\n y = (%f +- %f) cm\n z = (%f +- %f) cm\n",avx,eavx,avy,eavy,avz,eavz);
  printf("Weighted Average:\n x = (%f +- %f) cm\n y = (%f +- %f) cm\n z = (%f +- %f) cm\n",wgtavx,ewgtavx,wgtavy,ewgtavy,wgtavz,ewgtavz);
  printf("RMS:\n x = %f cm\n y = %f cm\n z = %f cm\n",rmsx,rmsy,rmsz);

  TCanvas *c = new TCanvas("c","c",0,0,1000,500);
  c->Divide(3,1);
  c->cd(1);
  hx->Draw();
  TF1 *gx = new TF1("gx","gaus",-1000,1000);
  gx->SetLineColor(2);
  hx->Fit(gx,"Q");
  TF1 *gxx = (TF1*)gx->Clone("gxx");
  gxx->FixParameter(2,diamondx);
  gxx->SetLineStyle(2);
  gxx->Draw("same");
  c->cd(2);
  hy->Draw();
  TF1 *gy = new TF1("gy","gaus",-1000,1000);
  gy->SetLineColor(2);
  hy->Fit(gy,"Q");
  TF1 *gyy = (TF1*)gy->Clone("gyy");
  gyy->FixParameter(2,diamondy);
  gyy->SetLineStyle(2);
  gyy->Draw("same");
  c->cd(3);
  hz->Draw();
  TF1 *gz = new TF1("gz","gaus",-10,10);
  gz->SetLineColor(2);
  hz->Fit(gz,"Q");
  TF1 *gzz = (TF1*)gz->Clone("gzz");
  gzz->FixParameter(2,diamondz);
  gzz->SetLineStyle(2);
  gzz->Draw("same");


  return;
}
  

void vertexStudy(TString vtxtype="SPD",
		     TString fname="Vertex.Performance.root",
		     TString ntname="fNtupleVertexESD"){
  
  TFile *f=new TFile(fname.Data());
  TList *cOutput = (TList*)f->Get("cOutput");
  TNtuple *nt=(TNtuple*)cOutput->FindObject(ntname.Data());
  
  TCanvas *spdCanvas = new TCanvas ("spdCanvas", "spdCanvas");
  spdCanvas->Divide(3);
  TCanvas *trkCanvas = new TCanvas ("trkCanvas", "trkCanvas");
  trkCanvas->Divide(3);
  TCanvas *tpcCanvas = new TCanvas ("tpcCanvas", "tpcCanvas");
  tpcCanvas->Divide(3);
  TCanvas *stampCanvas = new TCanvas ("stampCanvas", "stampCanvas");
  stampCanvas->Divide(3);
  TCanvas *vtxTRKvsSPDCanvas = new TCanvas ("TRKvsSPDCanvas", "TRKvsSPDCanvas");
  vtxTRKvsSPDCanvas->Divide(3);
  TCanvas *vtxTPCvsSPDCanvas = new TCanvas ("TPCvsSPDCanvas", "TPCvsSPDCanvas");
  vtxTPCvsSPDCanvas->Divide(3);
  TCanvas *vtxMultCanvas =new TCanvas ("vtx Multiplicity", "vtx Multiplicity");
  vtxMultCanvas->Divide(3);

  TCanvas *corrCanvas = new TCanvas("corr", "corr");
  corrCanvas->Divide(3);
  
  /*
    TFile *foutput = new TFile("Vertex.Performance.root");
    TList *fListOutput = (TList*)foutput->Get("cOutput");
    TNtuple *fNtupleVertexESD = (TNtuple*)fListOutput->FindObject("fNtupleVertexESD"); 
  */
  
  Float_t xSPD, ySPD, zSPD;
  Float_t xTRK, yTRK, zTRK;
  Float_t xTPC, yTPC, zTPC;
  Float_t SPD3D, ntrksSPD, ntrksTRK, ntrksTPC;
  Float_t ntrklets, tstamp, nTPCin, nITSrefit5or6;

  TH1F *histXspd = new TH1F("xSPDvertex", "xSPDvertex", 125, -1, 1);
  TH1F *histYspd = new TH1F("ySPDvertex", "ySPDvertex", 125, -1, 1);
  TH1F *histZspd = new TH1F ("zSPDvertex", "zSPDvertex", 40, -40, 40);

  TH1F *histXtrack = new TH1F("xTRKvertex", "xTRKvertex", 125, -1, 1);
  TH1F *histYtrack = new TH1F("yTRKvertex", "yTRKvertex", 125, -1, 1);
  TH1F *histZtrack = new TH1F("zTRKvertex", "zTRKvertex", 40, -40, 40);

  TH1F *histXtpc = new TH1F("xTPCvertex", "xTPCvertex", 125, -1, 1);
  TH1F *histYtpc = new TH1F("yTPCvertex", "yTPCvertex", 125, -1, 1);
  TH1F *histZtpc = new TH1F("zTPCvertex", "zTPCvertex", 40, -40, 40);

  TH2F *hntrkletsnTRK = new TH2F ("TRK vertex corr", "TRK vertex corr", 100, -4, 20, 100, -4, 20);
  TH2F *hntrkletsnSPD = new TH2F ("SPD vertex corr", "SPD vertex corr", 100, 0, 20, 100, 0, 20);
  TH2F *hntrkletsnTPC = new TH2F ("TPC vertex corr", "TPC vertex corr", 100, -4, 20, 100, -4, 20);

  TH2F *htstampXtpc = new TH2F("tstamp Vx TPC","tstamp Vx TPC", 22, 1258.9900E6, 1258.9940E6, 125, -1, 1 );
  TH2F *htstampYtpc = new TH2F("tstamp Vy TPC","tstamp Vy TPC", 22 ,1258.9900E6, 1258.9940E6, 125, -1, 1 );
  TH2F *htstampZtpc = new TH2F("tstamp Vz TPC","tstamp Vz TPC", 22, 1258.9900E6, 1258.9940E6, 40, -40, 40 );

  TH2F *hvertexX = new TH2F("Vx TRK vs SPD","Vx TRK vs SPD", 100, -1, 1, 100, -1, 1 );
  TH2F *hvertexY = new TH2F("Vy TRK vs SPD","Vy TRK vs SPD", 100, -1, 1, 100, -1, 1 );
  TH2F *hvertexZ = new TH2F("Vz TRK vs SPD","Vz TRK vs SPD", 100, -20, 20, 100, -20, 20 );

  
  TH2F *fhVtxTPCvsSPDx = new TH2F("fhVtxTPCvsSPDx","TPC vs SPD ; x SPD [cm]; x TPC [cm]",100,-1,1,100,-1,1);
  //fOutput->Add(fhVtxTPCvsSPDx);
  TH2F *fhVtxTPCvsSPDy = new TH2F("fhVtxTPCvsSPDy","TPC vs SPD ; y SPD [cm]; y TPC [cm]",100,-1,1,100,-1,1);
  //fOutput->Add(fhVtxTPCvsSPDy);
  TH2F *fhVtxTPCvsSPDz = new TH2F("fhVtxTPCvsSPDz","TPC vs SPD ; z SPD [cm]; z TPC [cm]",100,-20,20,100,-20,20);

  TH2F *fhVtxSPDContrvsMult = new TH2F("fhVtxSPDContrvsMult","SPD vertex: contributors VS SPD tracklets; contributors; SPD tracklets (AliMult)",100,-0.5,99.5,100,-0.5,99.5);
  TH2F *fhVtxTRKContrvsTrks56 = new TH2F("fhVtxTRKContrvsTrks56","TRK vertex: contributors VS trks with #ge 5 ITS cls; contributors; tracks with ncluster>4",100,-0.5,99.5,100,-0.5,99.5);
  TH2F *fhVtxTPCContrvsTrks = new TH2F("fhVtxTPCContrvsTrks","TPC vertex: contributors VS TPC trks (all); contributors; TPC tracks",100,-0.5,99.5,100,-0.5,99.5);

  nt->SetBranchAddress("SPD3D", &SPD3D);
  nt->SetBranchAddress("xSPD",&xSPD);
  nt->SetBranchAddress("ySPD",&ySPD); 
  nt->SetBranchAddress("zSPD",&zSPD);
  
  nt->SetBranchAddress("xTRK",&xTRK);
  nt->SetBranchAddress("yTRK",&yTRK); 
  nt->SetBranchAddress("zTRK",&zTRK);

  nt->SetBranchAddress("xTPC",&xTPC);
  nt->SetBranchAddress("yTPC",&yTPC); 
  nt->SetBranchAddress("zTPC",&zTPC);
  
  nt->SetBranchAddress("ntrksTRK",&ntrksTRK);
  nt->SetBranchAddress("ntrksSPD",&ntrksSPD); 
  nt->SetBranchAddress("ntrksTPC", &ntrksTPC);
  
  nt->SetBranchAddress("ntrklets",&ntrklets);
  nt->SetBranchAddress("tstamp", &tstamp);
  nt->SetBranchAddress("nTPCin", &nTPCin);
  nt->SetBranchAddress("nITSrefit5or6", &nITSrefit5or6);

  Float_t minTstamp=10E+13;
  Float_t maxTstamp=-1;

  for (Int_t ientries=0; ientries<nt->GetEntriesFast(); ientries++){
    nt->GetEntry(ientries);
  
    if (tstamp<minTstamp) minTstamp=tstamp;
    if (tstamp>maxTstamp) maxTstamp=tstamp;
  }
  
 TH2F *htstampX = new TH2F("tstamp Vx SPD","tstamp Vx SPD", 22, minTstamp, maxTstamp, 125, -1, 1 );
 TH2F *htstampY = new TH2F("tstamp Vy SPD","tstamp Vy SPD", 22, minTstamp, maxTstamp, 125, -1, 1 );
 TH2F *htstampZ = new TH2F("tstamp Vz SPD","tstamp Vz SPD", 22, minTstamp, maxTstamp, 40, -40, 40 );

 for (Int_t ientries=0; ientries<nt->GetEntriesFast(); ientries++){
    nt->GetEntry(ientries);

    if (ntrksSPD > 0) {
      
      histZspd->Fill(zSPD);
      fhVtxSPDContrvsMult->Fill(ntrklets,ntrksSPD);
      
      if (SPD3D > 0.5){    
	histYspd->Fill(ySPD);
	histXspd->Fill(xSPD);
      }
      
      htstampX->Fill(tstamp, xSPD);
      htstampY->Fill(tstamp, ySPD);
      htstampZ->Fill(tstamp, zSPD);

      hntrkletsnSPD->Fill(ntrklets, ntrksSPD);
      hntrkletsnTRK->Fill(ntrklets, ntrksTRK);
      hntrkletsnTPC->Fill(ntrklets, ntrksTPC);
    }
    
    if (ntrksTRK>0){
      histXtrack->Fill(xTRK);
      histYtrack->Fill(yTRK);
      histZtrack->Fill(zTRK);
      
      if (ntrksSPD>0){
	if (SPD3D>0.5){ 
	  hvertexX->Fill(xSPD,xTRK);
	  hvertexY->Fill(ySPD,yTRK);
	}
	hvertexZ->Fill(zSPD,zTRK);
      }
      
      fhVtxTRKContrvsTrks56->Fill(nITSrefit5or6,ntrksTRK);   
    }
    
    if (ntrksTPC>0){
      histXtpc->Fill(xTPC);
      histYtpc->Fill(yTPC);
      histZtpc->Fill(zTPC);
      
 
      if (ntrksSPD>0){
	if (SPD3D>0.5){
	  fhVtxTPCvsSPDx->Fill(xSPD,xTPC);
	  fhVtxTPCvsSPDy->Fill(ySPD,yTPC);
	}
	fhVtxTPCvsSPDz->Fill(zSPD,zTPC);
      }
      
      htstampXtpc->Fill(tstamp, xTPC);
      htstampYtpc->Fill(tstamp, yTPC);
      htstampZtpc->Fill(tstamp, zTPC);
 
      fhVtxTPCContrvsTrks->Fill(nTPCin,ntrksTPC);
    }
    
  } 
  spdCanvas->cd(1);
  histXspd->Draw();
  spdCanvas->cd(2);
  histYspd->Draw();
  spdCanvas->cd(3);
  histZspd->Draw();
  
  trkCanvas->cd(1);
  histXtrack->Draw();
  trkCanvas->cd(2);
  histYtrack->Draw();
  trkCanvas->cd(3);
  histZtrack->Draw();

  tpcCanvas->cd(1);
  histXtpc->Draw();
  tpcCanvas->cd(2);
  histYtpc->Draw();
  tpcCanvas->cd(3);
  histZtpc->Draw();

  stampCanvas->cd(1);
  htstampX->ProfileX()->Draw();
  htstampXtpc->ProfileX()->Draw("SAME");
  stampCanvas->cd(2);
  htstampY->ProfileX()->Draw();
  htstampYtpc->ProfileX()->Draw("SAME");
  stampCanvas->cd(3);
  htstampZ->ProfileX()->Draw();
  htstampZtpc->ProfileX()->Draw("SAME");  

  vtxTRKvsSPDCanvas->cd(1);
  hvertexX->Draw();
  vtxTRKvsSPDCanvas->cd(2);
  hvertexY->Draw();
  vtxTRKvsSPDCanvas->cd(3);
  hvertexZ->Draw();

  vtxTPCvsSPDCanvas->cd(1);
  fhVtxTPCvsSPDx->Draw();
  vtxTPCvsSPDCanvas->cd(2);
  fhVtxTPCvsSPDy->Draw();
  vtxTPCvsSPDCanvas->cd(3);
  fhVtxTPCvsSPDz->Draw();

  corrCanvas->cd(1);
  hntrkletsnSPD->Draw();
  corrCanvas->cd(2);
  hntrkletsnTRK->Draw();
  corrCanvas->cd(3);
  hntrkletsnTPC->Draw();
  
  vtxMultCanvas->cd(1);
  fhVtxSPDContrvsMult->Draw();
  vtxMultCanvas->cd(2);
  fhVtxTRKContrvsTrks56->Draw();
  vtxMultCanvas->cd(3);
  fhVtxTPCContrvsTrks->Draw();
}
 PlotVertexESD.C:1
 PlotVertexESD.C:2
 PlotVertexESD.C:3
 PlotVertexESD.C:4
 PlotVertexESD.C:5
 PlotVertexESD.C:6
 PlotVertexESD.C:7
 PlotVertexESD.C:8
 PlotVertexESD.C:9
 PlotVertexESD.C:10
 PlotVertexESD.C:11
 PlotVertexESD.C:12
 PlotVertexESD.C:13
 PlotVertexESD.C:14
 PlotVertexESD.C:15
 PlotVertexESD.C:16
 PlotVertexESD.C:17
 PlotVertexESD.C:18
 PlotVertexESD.C:19
 PlotVertexESD.C:20
 PlotVertexESD.C:21
 PlotVertexESD.C:22
 PlotVertexESD.C:23
 PlotVertexESD.C:24
 PlotVertexESD.C:25
 PlotVertexESD.C:26
 PlotVertexESD.C:27
 PlotVertexESD.C:28
 PlotVertexESD.C:29
 PlotVertexESD.C:30
 PlotVertexESD.C:31
 PlotVertexESD.C:32
 PlotVertexESD.C:33
 PlotVertexESD.C:34
 PlotVertexESD.C:35
 PlotVertexESD.C:36
 PlotVertexESD.C:37
 PlotVertexESD.C:38
 PlotVertexESD.C:39
 PlotVertexESD.C:40
 PlotVertexESD.C:41
 PlotVertexESD.C:42
 PlotVertexESD.C:43
 PlotVertexESD.C:44
 PlotVertexESD.C:45
 PlotVertexESD.C:46
 PlotVertexESD.C:47
 PlotVertexESD.C:48
 PlotVertexESD.C:49
 PlotVertexESD.C:50
 PlotVertexESD.C:51
 PlotVertexESD.C:52
 PlotVertexESD.C:53
 PlotVertexESD.C:54
 PlotVertexESD.C:55
 PlotVertexESD.C:56
 PlotVertexESD.C:57
 PlotVertexESD.C:58
 PlotVertexESD.C:59
 PlotVertexESD.C:60
 PlotVertexESD.C:61
 PlotVertexESD.C:62
 PlotVertexESD.C:63
 PlotVertexESD.C:64
 PlotVertexESD.C:65
 PlotVertexESD.C:66
 PlotVertexESD.C:67
 PlotVertexESD.C:68
 PlotVertexESD.C:69
 PlotVertexESD.C:70
 PlotVertexESD.C:71
 PlotVertexESD.C:72
 PlotVertexESD.C:73
 PlotVertexESD.C:74
 PlotVertexESD.C:75
 PlotVertexESD.C:76
 PlotVertexESD.C:77
 PlotVertexESD.C:78
 PlotVertexESD.C:79
 PlotVertexESD.C:80
 PlotVertexESD.C:81
 PlotVertexESD.C:82
 PlotVertexESD.C:83
 PlotVertexESD.C:84
 PlotVertexESD.C:85
 PlotVertexESD.C:86
 PlotVertexESD.C:87
 PlotVertexESD.C:88
 PlotVertexESD.C:89
 PlotVertexESD.C:90
 PlotVertexESD.C:91
 PlotVertexESD.C:92
 PlotVertexESD.C:93
 PlotVertexESD.C:94
 PlotVertexESD.C:95
 PlotVertexESD.C:96
 PlotVertexESD.C:97
 PlotVertexESD.C:98
 PlotVertexESD.C:99
 PlotVertexESD.C:100
 PlotVertexESD.C:101
 PlotVertexESD.C:102
 PlotVertexESD.C:103
 PlotVertexESD.C:104
 PlotVertexESD.C:105
 PlotVertexESD.C:106
 PlotVertexESD.C:107
 PlotVertexESD.C:108
 PlotVertexESD.C:109
 PlotVertexESD.C:110
 PlotVertexESD.C:111
 PlotVertexESD.C:112
 PlotVertexESD.C:113
 PlotVertexESD.C:114
 PlotVertexESD.C:115
 PlotVertexESD.C:116
 PlotVertexESD.C:117
 PlotVertexESD.C:118
 PlotVertexESD.C:119
 PlotVertexESD.C:120
 PlotVertexESD.C:121
 PlotVertexESD.C:122
 PlotVertexESD.C:123
 PlotVertexESD.C:124
 PlotVertexESD.C:125
 PlotVertexESD.C:126
 PlotVertexESD.C:127
 PlotVertexESD.C:128
 PlotVertexESD.C:129
 PlotVertexESD.C:130
 PlotVertexESD.C:131
 PlotVertexESD.C:132
 PlotVertexESD.C:133
 PlotVertexESD.C:134
 PlotVertexESD.C:135
 PlotVertexESD.C:136
 PlotVertexESD.C:137
 PlotVertexESD.C:138
 PlotVertexESD.C:139
 PlotVertexESD.C:140
 PlotVertexESD.C:141
 PlotVertexESD.C:142
 PlotVertexESD.C:143
 PlotVertexESD.C:144
 PlotVertexESD.C:145
 PlotVertexESD.C:146
 PlotVertexESD.C:147
 PlotVertexESD.C:148
 PlotVertexESD.C:149
 PlotVertexESD.C:150
 PlotVertexESD.C:151
 PlotVertexESD.C:152
 PlotVertexESD.C:153
 PlotVertexESD.C:154
 PlotVertexESD.C:155
 PlotVertexESD.C:156
 PlotVertexESD.C:157
 PlotVertexESD.C:158
 PlotVertexESD.C:159
 PlotVertexESD.C:160
 PlotVertexESD.C:161
 PlotVertexESD.C:162
 PlotVertexESD.C:163
 PlotVertexESD.C:164
 PlotVertexESD.C:165
 PlotVertexESD.C:166
 PlotVertexESD.C:167
 PlotVertexESD.C:168
 PlotVertexESD.C:169
 PlotVertexESD.C:170
 PlotVertexESD.C:171
 PlotVertexESD.C:172
 PlotVertexESD.C:173
 PlotVertexESD.C:174
 PlotVertexESD.C:175
 PlotVertexESD.C:176
 PlotVertexESD.C:177
 PlotVertexESD.C:178
 PlotVertexESD.C:179
 PlotVertexESD.C:180
 PlotVertexESD.C:181
 PlotVertexESD.C:182
 PlotVertexESD.C:183
 PlotVertexESD.C:184
 PlotVertexESD.C:185
 PlotVertexESD.C:186
 PlotVertexESD.C:187
 PlotVertexESD.C:188
 PlotVertexESD.C:189
 PlotVertexESD.C:190
 PlotVertexESD.C:191
 PlotVertexESD.C:192
 PlotVertexESD.C:193
 PlotVertexESD.C:194
 PlotVertexESD.C:195
 PlotVertexESD.C:196
 PlotVertexESD.C:197
 PlotVertexESD.C:198
 PlotVertexESD.C:199
 PlotVertexESD.C:200
 PlotVertexESD.C:201
 PlotVertexESD.C:202
 PlotVertexESD.C:203
 PlotVertexESD.C:204
 PlotVertexESD.C:205
 PlotVertexESD.C:206
 PlotVertexESD.C:207
 PlotVertexESD.C:208
 PlotVertexESD.C:209
 PlotVertexESD.C:210
 PlotVertexESD.C:211
 PlotVertexESD.C:212
 PlotVertexESD.C:213
 PlotVertexESD.C:214
 PlotVertexESD.C:215
 PlotVertexESD.C:216
 PlotVertexESD.C:217
 PlotVertexESD.C:218
 PlotVertexESD.C:219
 PlotVertexESD.C:220
 PlotVertexESD.C:221
 PlotVertexESD.C:222
 PlotVertexESD.C:223
 PlotVertexESD.C:224
 PlotVertexESD.C:225
 PlotVertexESD.C:226
 PlotVertexESD.C:227
 PlotVertexESD.C:228
 PlotVertexESD.C:229
 PlotVertexESD.C:230
 PlotVertexESD.C:231
 PlotVertexESD.C:232
 PlotVertexESD.C:233
 PlotVertexESD.C:234
 PlotVertexESD.C:235
 PlotVertexESD.C:236
 PlotVertexESD.C:237
 PlotVertexESD.C:238
 PlotVertexESD.C:239
 PlotVertexESD.C:240
 PlotVertexESD.C:241
 PlotVertexESD.C:242
 PlotVertexESD.C:243
 PlotVertexESD.C:244
 PlotVertexESD.C:245
 PlotVertexESD.C:246
 PlotVertexESD.C:247
 PlotVertexESD.C:248
 PlotVertexESD.C:249
 PlotVertexESD.C:250
 PlotVertexESD.C:251
 PlotVertexESD.C:252
 PlotVertexESD.C:253
 PlotVertexESD.C:254
 PlotVertexESD.C:255
 PlotVertexESD.C:256
 PlotVertexESD.C:257
 PlotVertexESD.C:258
 PlotVertexESD.C:259
 PlotVertexESD.C:260
 PlotVertexESD.C:261
 PlotVertexESD.C:262
 PlotVertexESD.C:263
 PlotVertexESD.C:264
 PlotVertexESD.C:265
 PlotVertexESD.C:266
 PlotVertexESD.C:267
 PlotVertexESD.C:268
 PlotVertexESD.C:269
 PlotVertexESD.C:270
 PlotVertexESD.C:271
 PlotVertexESD.C:272
 PlotVertexESD.C:273
 PlotVertexESD.C:274
 PlotVertexESD.C:275
 PlotVertexESD.C:276
 PlotVertexESD.C:277
 PlotVertexESD.C:278
 PlotVertexESD.C:279
 PlotVertexESD.C:280
 PlotVertexESD.C:281
 PlotVertexESD.C:282
 PlotVertexESD.C:283
 PlotVertexESD.C:284
 PlotVertexESD.C:285
 PlotVertexESD.C:286
 PlotVertexESD.C:287
 PlotVertexESD.C:288
 PlotVertexESD.C:289
 PlotVertexESD.C:290
 PlotVertexESD.C:291
 PlotVertexESD.C:292
 PlotVertexESD.C:293
 PlotVertexESD.C:294
 PlotVertexESD.C:295
 PlotVertexESD.C:296
 PlotVertexESD.C:297
 PlotVertexESD.C:298
 PlotVertexESD.C:299
 PlotVertexESD.C:300
 PlotVertexESD.C:301
 PlotVertexESD.C:302
 PlotVertexESD.C:303
 PlotVertexESD.C:304
 PlotVertexESD.C:305
 PlotVertexESD.C:306
 PlotVertexESD.C:307
 PlotVertexESD.C:308
 PlotVertexESD.C:309
 PlotVertexESD.C:310
 PlotVertexESD.C:311
 PlotVertexESD.C:312
 PlotVertexESD.C:313
 PlotVertexESD.C:314
 PlotVertexESD.C:315
 PlotVertexESD.C:316
 PlotVertexESD.C:317
 PlotVertexESD.C:318
 PlotVertexESD.C:319
 PlotVertexESD.C:320
 PlotVertexESD.C:321
 PlotVertexESD.C:322
 PlotVertexESD.C:323
 PlotVertexESD.C:324
 PlotVertexESD.C:325
 PlotVertexESD.C:326
 PlotVertexESD.C:327
 PlotVertexESD.C:328
 PlotVertexESD.C:329
 PlotVertexESD.C:330
 PlotVertexESD.C:331
 PlotVertexESD.C:332
 PlotVertexESD.C:333
 PlotVertexESD.C:334
 PlotVertexESD.C:335
 PlotVertexESD.C:336
 PlotVertexESD.C:337
 PlotVertexESD.C:338
 PlotVertexESD.C:339
 PlotVertexESD.C:340
 PlotVertexESD.C:341
 PlotVertexESD.C:342
 PlotVertexESD.C:343
 PlotVertexESD.C:344
 PlotVertexESD.C:345
 PlotVertexESD.C:346
 PlotVertexESD.C:347
 PlotVertexESD.C:348
 PlotVertexESD.C:349
 PlotVertexESD.C:350
 PlotVertexESD.C:351
 PlotVertexESD.C:352
 PlotVertexESD.C:353
 PlotVertexESD.C:354
 PlotVertexESD.C:355
 PlotVertexESD.C:356
 PlotVertexESD.C:357
 PlotVertexESD.C:358
 PlotVertexESD.C:359
 PlotVertexESD.C:360
 PlotVertexESD.C:361
 PlotVertexESD.C:362
 PlotVertexESD.C:363
 PlotVertexESD.C:364
 PlotVertexESD.C:365
 PlotVertexESD.C:366
 PlotVertexESD.C:367
 PlotVertexESD.C:368
 PlotVertexESD.C:369
 PlotVertexESD.C:370
 PlotVertexESD.C:371
 PlotVertexESD.C:372
 PlotVertexESD.C:373
 PlotVertexESD.C:374
 PlotVertexESD.C:375
 PlotVertexESD.C:376
 PlotVertexESD.C:377
 PlotVertexESD.C:378
 PlotVertexESD.C:379
 PlotVertexESD.C:380
 PlotVertexESD.C:381
 PlotVertexESD.C:382
 PlotVertexESD.C:383
 PlotVertexESD.C:384
 PlotVertexESD.C:385
 PlotVertexESD.C:386
 PlotVertexESD.C:387
 PlotVertexESD.C:388
 PlotVertexESD.C:389
 PlotVertexESD.C:390
 PlotVertexESD.C:391
 PlotVertexESD.C:392
 PlotVertexESD.C:393
 PlotVertexESD.C:394
 PlotVertexESD.C:395
 PlotVertexESD.C:396
 PlotVertexESD.C:397
 PlotVertexESD.C:398
 PlotVertexESD.C:399
 PlotVertexESD.C:400
 PlotVertexESD.C:401
 PlotVertexESD.C:402
 PlotVertexESD.C:403
 PlotVertexESD.C:404
 PlotVertexESD.C:405
 PlotVertexESD.C:406
 PlotVertexESD.C:407
 PlotVertexESD.C:408
 PlotVertexESD.C:409
 PlotVertexESD.C:410
 PlotVertexESD.C:411
 PlotVertexESD.C:412
 PlotVertexESD.C:413
 PlotVertexESD.C:414
 PlotVertexESD.C:415
 PlotVertexESD.C:416
 PlotVertexESD.C:417
 PlotVertexESD.C:418
 PlotVertexESD.C:419
 PlotVertexESD.C:420
 PlotVertexESD.C:421
 PlotVertexESD.C:422
 PlotVertexESD.C:423
 PlotVertexESD.C:424
 PlotVertexESD.C:425
 PlotVertexESD.C:426
 PlotVertexESD.C:427
 PlotVertexESD.C:428
 PlotVertexESD.C:429
 PlotVertexESD.C:430
 PlotVertexESD.C:431
 PlotVertexESD.C:432
 PlotVertexESD.C:433
 PlotVertexESD.C:434
 PlotVertexESD.C:435
 PlotVertexESD.C:436
 PlotVertexESD.C:437
 PlotVertexESD.C:438
 PlotVertexESD.C:439
 PlotVertexESD.C:440
 PlotVertexESD.C:441
 PlotVertexESD.C:442
 PlotVertexESD.C:443
 PlotVertexESD.C:444
 PlotVertexESD.C:445
 PlotVertexESD.C:446
 PlotVertexESD.C:447
 PlotVertexESD.C:448
 PlotVertexESD.C:449
 PlotVertexESD.C:450
 PlotVertexESD.C:451
 PlotVertexESD.C:452
 PlotVertexESD.C:453
 PlotVertexESD.C:454
 PlotVertexESD.C:455
 PlotVertexESD.C:456
 PlotVertexESD.C:457
 PlotVertexESD.C:458
 PlotVertexESD.C:459
 PlotVertexESD.C:460
 PlotVertexESD.C:461
 PlotVertexESD.C:462
 PlotVertexESD.C:463
 PlotVertexESD.C:464
 PlotVertexESD.C:465
 PlotVertexESD.C:466
 PlotVertexESD.C:467
 PlotVertexESD.C:468
 PlotVertexESD.C:469
 PlotVertexESD.C:470
 PlotVertexESD.C:471
 PlotVertexESD.C:472
 PlotVertexESD.C:473
 PlotVertexESD.C:474
 PlotVertexESD.C:475
 PlotVertexESD.C:476
 PlotVertexESD.C:477
 PlotVertexESD.C:478
 PlotVertexESD.C:479
 PlotVertexESD.C:480
 PlotVertexESD.C:481
 PlotVertexESD.C:482
 PlotVertexESD.C:483
 PlotVertexESD.C:484
 PlotVertexESD.C:485
 PlotVertexESD.C:486
 PlotVertexESD.C:487
 PlotVertexESD.C:488
 PlotVertexESD.C:489
 PlotVertexESD.C:490
 PlotVertexESD.C:491
 PlotVertexESD.C:492
 PlotVertexESD.C:493
 PlotVertexESD.C:494
 PlotVertexESD.C:495
 PlotVertexESD.C:496
 PlotVertexESD.C:497
 PlotVertexESD.C:498
 PlotVertexESD.C:499
 PlotVertexESD.C:500
 PlotVertexESD.C:501
 PlotVertexESD.C:502
 PlotVertexESD.C:503
 PlotVertexESD.C:504
 PlotVertexESD.C:505
 PlotVertexESD.C:506
 PlotVertexESD.C:507
 PlotVertexESD.C:508
 PlotVertexESD.C:509
 PlotVertexESD.C:510
 PlotVertexESD.C:511
 PlotVertexESD.C:512
 PlotVertexESD.C:513
 PlotVertexESD.C:514
 PlotVertexESD.C:515
 PlotVertexESD.C:516
 PlotVertexESD.C:517
 PlotVertexESD.C:518
 PlotVertexESD.C:519
 PlotVertexESD.C:520
 PlotVertexESD.C:521
 PlotVertexESD.C:522
 PlotVertexESD.C:523
 PlotVertexESD.C:524
 PlotVertexESD.C:525
 PlotVertexESD.C:526
 PlotVertexESD.C:527
 PlotVertexESD.C:528
 PlotVertexESD.C:529
 PlotVertexESD.C:530
 PlotVertexESD.C:531
 PlotVertexESD.C:532
 PlotVertexESD.C:533
 PlotVertexESD.C:534
 PlotVertexESD.C:535
 PlotVertexESD.C:536
 PlotVertexESD.C:537
 PlotVertexESD.C:538
 PlotVertexESD.C:539
 PlotVertexESD.C:540
 PlotVertexESD.C:541
 PlotVertexESD.C:542
 PlotVertexESD.C:543
 PlotVertexESD.C:544
 PlotVertexESD.C:545
 PlotVertexESD.C:546
 PlotVertexESD.C:547
 PlotVertexESD.C:548
 PlotVertexESD.C:549
 PlotVertexESD.C:550
 PlotVertexESD.C:551
 PlotVertexESD.C:552
 PlotVertexESD.C:553
 PlotVertexESD.C:554
 PlotVertexESD.C:555
 PlotVertexESD.C:556
 PlotVertexESD.C:557
 PlotVertexESD.C:558
 PlotVertexESD.C:559
 PlotVertexESD.C:560
 PlotVertexESD.C:561
 PlotVertexESD.C:562
 PlotVertexESD.C:563
 PlotVertexESD.C:564
 PlotVertexESD.C:565
 PlotVertexESD.C:566
 PlotVertexESD.C:567
 PlotVertexESD.C:568
 PlotVertexESD.C:569
 PlotVertexESD.C:570
 PlotVertexESD.C:571
 PlotVertexESD.C:572
 PlotVertexESD.C:573
 PlotVertexESD.C:574
 PlotVertexESD.C:575
 PlotVertexESD.C:576
 PlotVertexESD.C:577
 PlotVertexESD.C:578
 PlotVertexESD.C:579
 PlotVertexESD.C:580
 PlotVertexESD.C:581
 PlotVertexESD.C:582
 PlotVertexESD.C:583
 PlotVertexESD.C:584
 PlotVertexESD.C:585
 PlotVertexESD.C:586
 PlotVertexESD.C:587
 PlotVertexESD.C:588
 PlotVertexESD.C:589
 PlotVertexESD.C:590
 PlotVertexESD.C:591
 PlotVertexESD.C:592
 PlotVertexESD.C:593
 PlotVertexESD.C:594
 PlotVertexESD.C:595
 PlotVertexESD.C:596
 PlotVertexESD.C:597
 PlotVertexESD.C:598
 PlotVertexESD.C:599
 PlotVertexESD.C:600
 PlotVertexESD.C:601
 PlotVertexESD.C:602
 PlotVertexESD.C:603
 PlotVertexESD.C:604
 PlotVertexESD.C:605
 PlotVertexESD.C:606
 PlotVertexESD.C:607
 PlotVertexESD.C:608
 PlotVertexESD.C:609
 PlotVertexESD.C:610
 PlotVertexESD.C:611
 PlotVertexESD.C:612
 PlotVertexESD.C:613
 PlotVertexESD.C:614
 PlotVertexESD.C:615
 PlotVertexESD.C:616
 PlotVertexESD.C:617
 PlotVertexESD.C:618
 PlotVertexESD.C:619
 PlotVertexESD.C:620
 PlotVertexESD.C:621
 PlotVertexESD.C:622
 PlotVertexESD.C:623
 PlotVertexESD.C:624
 PlotVertexESD.C:625
 PlotVertexESD.C:626
 PlotVertexESD.C:627
 PlotVertexESD.C:628
 PlotVertexESD.C:629
 PlotVertexESD.C:630
 PlotVertexESD.C:631
 PlotVertexESD.C:632
 PlotVertexESD.C:633
 PlotVertexESD.C:634
 PlotVertexESD.C:635
 PlotVertexESD.C:636
 PlotVertexESD.C:637
 PlotVertexESD.C:638
 PlotVertexESD.C:639
 PlotVertexESD.C:640
 PlotVertexESD.C:641
 PlotVertexESD.C:642
 PlotVertexESD.C:643
 PlotVertexESD.C:644
 PlotVertexESD.C:645
 PlotVertexESD.C:646
 PlotVertexESD.C:647
 PlotVertexESD.C:648
 PlotVertexESD.C:649
 PlotVertexESD.C:650
 PlotVertexESD.C:651
 PlotVertexESD.C:652
 PlotVertexESD.C:653
 PlotVertexESD.C:654
 PlotVertexESD.C:655
 PlotVertexESD.C:656
 PlotVertexESD.C:657
 PlotVertexESD.C:658
 PlotVertexESD.C:659
 PlotVertexESD.C:660
 PlotVertexESD.C:661
 PlotVertexESD.C:662
 PlotVertexESD.C:663
 PlotVertexESD.C:664
 PlotVertexESD.C:665
 PlotVertexESD.C:666
 PlotVertexESD.C:667
 PlotVertexESD.C:668
 PlotVertexESD.C:669
 PlotVertexESD.C:670
 PlotVertexESD.C:671
 PlotVertexESD.C:672
 PlotVertexESD.C:673
 PlotVertexESD.C:674
 PlotVertexESD.C:675
 PlotVertexESD.C:676
 PlotVertexESD.C:677
 PlotVertexESD.C:678
 PlotVertexESD.C:679
 PlotVertexESD.C:680
 PlotVertexESD.C:681
 PlotVertexESD.C:682
 PlotVertexESD.C:683
 PlotVertexESD.C:684
 PlotVertexESD.C:685
 PlotVertexESD.C:686
 PlotVertexESD.C:687
 PlotVertexESD.C:688
 PlotVertexESD.C:689
 PlotVertexESD.C:690
 PlotVertexESD.C:691
 PlotVertexESD.C:692
 PlotVertexESD.C:693
 PlotVertexESD.C:694
 PlotVertexESD.C:695
 PlotVertexESD.C:696
 PlotVertexESD.C:697
 PlotVertexESD.C:698
 PlotVertexESD.C:699
 PlotVertexESD.C:700
 PlotVertexESD.C:701
 PlotVertexESD.C:702
 PlotVertexESD.C:703
 PlotVertexESD.C:704
 PlotVertexESD.C:705
 PlotVertexESD.C:706
 PlotVertexESD.C:707
 PlotVertexESD.C:708
 PlotVertexESD.C:709
 PlotVertexESD.C:710
 PlotVertexESD.C:711
 PlotVertexESD.C:712
 PlotVertexESD.C:713
 PlotVertexESD.C:714
 PlotVertexESD.C:715
 PlotVertexESD.C:716
 PlotVertexESD.C:717
 PlotVertexESD.C:718
 PlotVertexESD.C:719
 PlotVertexESD.C:720
 PlotVertexESD.C:721
 PlotVertexESD.C:722
 PlotVertexESD.C:723
 PlotVertexESD.C:724
 PlotVertexESD.C:725
 PlotVertexESD.C:726
 PlotVertexESD.C:727
 PlotVertexESD.C:728
 PlotVertexESD.C:729
 PlotVertexESD.C:730
 PlotVertexESD.C:731
 PlotVertexESD.C:732
 PlotVertexESD.C:733
 PlotVertexESD.C:734
 PlotVertexESD.C:735
 PlotVertexESD.C:736
 PlotVertexESD.C:737
 PlotVertexESD.C:738
 PlotVertexESD.C:739
 PlotVertexESD.C:740
 PlotVertexESD.C:741
 PlotVertexESD.C:742
 PlotVertexESD.C:743
 PlotVertexESD.C:744
 PlotVertexESD.C:745
 PlotVertexESD.C:746
 PlotVertexESD.C:747
 PlotVertexESD.C:748
 PlotVertexESD.C:749
 PlotVertexESD.C:750
 PlotVertexESD.C:751
 PlotVertexESD.C:752
 PlotVertexESD.C:753
 PlotVertexESD.C:754
 PlotVertexESD.C:755
 PlotVertexESD.C:756
 PlotVertexESD.C:757
 PlotVertexESD.C:758
 PlotVertexESD.C:759
 PlotVertexESD.C:760
 PlotVertexESD.C:761
 PlotVertexESD.C:762
 PlotVertexESD.C:763
 PlotVertexESD.C:764
 PlotVertexESD.C:765
 PlotVertexESD.C:766
 PlotVertexESD.C:767
 PlotVertexESD.C:768
 PlotVertexESD.C:769
 PlotVertexESD.C:770
 PlotVertexESD.C:771
 PlotVertexESD.C:772
 PlotVertexESD.C:773
 PlotVertexESD.C:774
 PlotVertexESD.C:775
 PlotVertexESD.C:776
 PlotVertexESD.C:777
 PlotVertexESD.C:778
 PlotVertexESD.C:779
 PlotVertexESD.C:780
 PlotVertexESD.C:781
 PlotVertexESD.C:782
 PlotVertexESD.C:783
 PlotVertexESD.C:784
 PlotVertexESD.C:785
 PlotVertexESD.C:786
 PlotVertexESD.C:787
 PlotVertexESD.C:788
 PlotVertexESD.C:789
 PlotVertexESD.C:790
 PlotVertexESD.C:791
 PlotVertexESD.C:792
 PlotVertexESD.C:793
 PlotVertexESD.C:794
 PlotVertexESD.C:795
 PlotVertexESD.C:796
 PlotVertexESD.C:797
 PlotVertexESD.C:798
 PlotVertexESD.C:799
 PlotVertexESD.C:800
 PlotVertexESD.C:801
 PlotVertexESD.C:802
 PlotVertexESD.C:803
 PlotVertexESD.C:804
 PlotVertexESD.C:805
 PlotVertexESD.C:806
 PlotVertexESD.C:807
 PlotVertexESD.C:808
 PlotVertexESD.C:809
 PlotVertexESD.C:810
 PlotVertexESD.C:811
 PlotVertexESD.C:812
 PlotVertexESD.C:813
 PlotVertexESD.C:814
 PlotVertexESD.C:815
 PlotVertexESD.C:816
 PlotVertexESD.C:817
 PlotVertexESD.C:818
 PlotVertexESD.C:819
 PlotVertexESD.C:820
 PlotVertexESD.C:821
 PlotVertexESD.C:822
 PlotVertexESD.C:823
 PlotVertexESD.C:824
 PlotVertexESD.C:825
 PlotVertexESD.C:826
 PlotVertexESD.C:827
 PlotVertexESD.C:828
 PlotVertexESD.C:829
 PlotVertexESD.C:830
 PlotVertexESD.C:831
 PlotVertexESD.C:832
 PlotVertexESD.C:833
 PlotVertexESD.C:834
 PlotVertexESD.C:835
 PlotVertexESD.C:836
 PlotVertexESD.C:837
 PlotVertexESD.C:838
 PlotVertexESD.C:839
 PlotVertexESD.C:840
 PlotVertexESD.C:841
 PlotVertexESD.C:842
 PlotVertexESD.C:843
 PlotVertexESD.C:844
 PlotVertexESD.C:845
 PlotVertexESD.C:846
 PlotVertexESD.C:847
 PlotVertexESD.C:848
 PlotVertexESD.C:849
 PlotVertexESD.C:850
 PlotVertexESD.C:851
 PlotVertexESD.C:852
 PlotVertexESD.C:853
 PlotVertexESD.C:854
 PlotVertexESD.C:855
 PlotVertexESD.C:856
 PlotVertexESD.C:857
 PlotVertexESD.C:858
 PlotVertexESD.C:859
 PlotVertexESD.C:860
 PlotVertexESD.C:861
 PlotVertexESD.C:862
 PlotVertexESD.C:863
 PlotVertexESD.C:864
 PlotVertexESD.C:865
 PlotVertexESD.C:866
 PlotVertexESD.C:867
 PlotVertexESD.C:868
 PlotVertexESD.C:869
 PlotVertexESD.C:870
 PlotVertexESD.C:871
 PlotVertexESD.C:872
 PlotVertexESD.C:873
 PlotVertexESD.C:874
 PlotVertexESD.C:875
 PlotVertexESD.C:876
 PlotVertexESD.C:877
 PlotVertexESD.C:878
 PlotVertexESD.C:879
 PlotVertexESD.C:880
 PlotVertexESD.C:881
 PlotVertexESD.C:882
 PlotVertexESD.C:883
 PlotVertexESD.C:884
 PlotVertexESD.C:885
 PlotVertexESD.C:886
 PlotVertexESD.C:887
 PlotVertexESD.C:888
 PlotVertexESD.C:889
 PlotVertexESD.C:890
 PlotVertexESD.C:891
 PlotVertexESD.C:892
 PlotVertexESD.C:893
 PlotVertexESD.C:894
 PlotVertexESD.C:895
 PlotVertexESD.C:896
 PlotVertexESD.C:897
 PlotVertexESD.C:898
 PlotVertexESD.C:899
 PlotVertexESD.C:900
 PlotVertexESD.C:901
 PlotVertexESD.C:902
 PlotVertexESD.C:903
 PlotVertexESD.C:904
 PlotVertexESD.C:905
 PlotVertexESD.C:906
 PlotVertexESD.C:907
 PlotVertexESD.C:908
 PlotVertexESD.C:909
 PlotVertexESD.C:910
 PlotVertexESD.C:911
 PlotVertexESD.C:912
 PlotVertexESD.C:913
 PlotVertexESD.C:914
 PlotVertexESD.C:915
 PlotVertexESD.C:916
 PlotVertexESD.C:917
 PlotVertexESD.C:918
 PlotVertexESD.C:919
 PlotVertexESD.C:920
 PlotVertexESD.C:921
 PlotVertexESD.C:922
 PlotVertexESD.C:923
 PlotVertexESD.C:924
 PlotVertexESD.C:925
 PlotVertexESD.C:926
 PlotVertexESD.C:927
 PlotVertexESD.C:928
 PlotVertexESD.C:929
 PlotVertexESD.C:930
 PlotVertexESD.C:931
 PlotVertexESD.C:932
 PlotVertexESD.C:933
 PlotVertexESD.C:934
 PlotVertexESD.C:935
 PlotVertexESD.C:936
 PlotVertexESD.C:937
 PlotVertexESD.C:938
 PlotVertexESD.C:939
 PlotVertexESD.C:940
 PlotVertexESD.C:941
 PlotVertexESD.C:942
 PlotVertexESD.C:943
 PlotVertexESD.C:944
 PlotVertexESD.C:945
 PlotVertexESD.C:946
 PlotVertexESD.C:947
 PlotVertexESD.C:948
 PlotVertexESD.C:949
 PlotVertexESD.C:950
 PlotVertexESD.C:951
 PlotVertexESD.C:952
 PlotVertexESD.C:953
 PlotVertexESD.C:954
 PlotVertexESD.C:955
 PlotVertexESD.C:956
 PlotVertexESD.C:957
 PlotVertexESD.C:958
 PlotVertexESD.C:959
 PlotVertexESD.C:960
 PlotVertexESD.C:961
 PlotVertexESD.C:962
 PlotVertexESD.C:963
 PlotVertexESD.C:964
 PlotVertexESD.C:965
 PlotVertexESD.C:966
 PlotVertexESD.C:967
 PlotVertexESD.C:968
 PlotVertexESD.C:969
 PlotVertexESD.C:970
 PlotVertexESD.C:971
 PlotVertexESD.C:972
 PlotVertexESD.C:973
 PlotVertexESD.C:974
 PlotVertexESD.C:975
 PlotVertexESD.C:976
 PlotVertexESD.C:977
 PlotVertexESD.C:978
 PlotVertexESD.C:979
 PlotVertexESD.C:980
 PlotVertexESD.C:981
 PlotVertexESD.C:982
 PlotVertexESD.C:983
 PlotVertexESD.C:984
 PlotVertexESD.C:985
 PlotVertexESD.C:986
 PlotVertexESD.C:987
 PlotVertexESD.C:988
 PlotVertexESD.C:989
 PlotVertexESD.C:990
 PlotVertexESD.C:991
 PlotVertexESD.C:992
 PlotVertexESD.C:993
 PlotVertexESD.C:994
 PlotVertexESD.C:995
 PlotVertexESD.C:996
 PlotVertexESD.C:997
 PlotVertexESD.C:998
 PlotVertexESD.C:999
 PlotVertexESD.C:1000
 PlotVertexESD.C:1001
 PlotVertexESD.C:1002
 PlotVertexESD.C:1003
 PlotVertexESD.C:1004
 PlotVertexESD.C:1005
 PlotVertexESD.C:1006
 PlotVertexESD.C:1007
 PlotVertexESD.C:1008
 PlotVertexESD.C:1009
 PlotVertexESD.C:1010
 PlotVertexESD.C:1011
 PlotVertexESD.C:1012
 PlotVertexESD.C:1013
 PlotVertexESD.C:1014
 PlotVertexESD.C:1015
 PlotVertexESD.C:1016
 PlotVertexESD.C:1017
 PlotVertexESD.C:1018
 PlotVertexESD.C:1019
 PlotVertexESD.C:1020
 PlotVertexESD.C:1021
 PlotVertexESD.C:1022
 PlotVertexESD.C:1023
 PlotVertexESD.C:1024
 PlotVertexESD.C:1025
 PlotVertexESD.C:1026
 PlotVertexESD.C:1027
 PlotVertexESD.C:1028
 PlotVertexESD.C:1029
 PlotVertexESD.C:1030
 PlotVertexESD.C:1031
 PlotVertexESD.C:1032
 PlotVertexESD.C:1033
 PlotVertexESD.C:1034
 PlotVertexESD.C:1035
 PlotVertexESD.C:1036
 PlotVertexESD.C:1037
 PlotVertexESD.C:1038
 PlotVertexESD.C:1039
 PlotVertexESD.C:1040
 PlotVertexESD.C:1041
 PlotVertexESD.C:1042
 PlotVertexESD.C:1043
 PlotVertexESD.C:1044
 PlotVertexESD.C:1045
 PlotVertexESD.C:1046
 PlotVertexESD.C:1047
 PlotVertexESD.C:1048
 PlotVertexESD.C:1049
 PlotVertexESD.C:1050
 PlotVertexESD.C:1051
 PlotVertexESD.C:1052
 PlotVertexESD.C:1053
 PlotVertexESD.C:1054
 PlotVertexESD.C:1055
 PlotVertexESD.C:1056
 PlotVertexESD.C:1057
 PlotVertexESD.C:1058
 PlotVertexESD.C:1059
 PlotVertexESD.C:1060
 PlotVertexESD.C:1061
 PlotVertexESD.C:1062
 PlotVertexESD.C:1063
 PlotVertexESD.C:1064
 PlotVertexESD.C:1065
 PlotVertexESD.C:1066
 PlotVertexESD.C:1067
 PlotVertexESD.C:1068
 PlotVertexESD.C:1069
 PlotVertexESD.C:1070
 PlotVertexESD.C:1071
 PlotVertexESD.C:1072
 PlotVertexESD.C:1073
 PlotVertexESD.C:1074
 PlotVertexESD.C:1075
 PlotVertexESD.C:1076
 PlotVertexESD.C:1077
 PlotVertexESD.C:1078
 PlotVertexESD.C:1079
 PlotVertexESD.C:1080
 PlotVertexESD.C:1081
 PlotVertexESD.C:1082
 PlotVertexESD.C:1083
 PlotVertexESD.C:1084
 PlotVertexESD.C:1085
 PlotVertexESD.C:1086
 PlotVertexESD.C:1087
 PlotVertexESD.C:1088
 PlotVertexESD.C:1089
 PlotVertexESD.C:1090
 PlotVertexESD.C:1091
 PlotVertexESD.C:1092
 PlotVertexESD.C:1093
 PlotVertexESD.C:1094
 PlotVertexESD.C:1095
 PlotVertexESD.C:1096
 PlotVertexESD.C:1097
 PlotVertexESD.C:1098
 PlotVertexESD.C:1099
 PlotVertexESD.C:1100
 PlotVertexESD.C:1101
 PlotVertexESD.C:1102
 PlotVertexESD.C:1103
 PlotVertexESD.C:1104
 PlotVertexESD.C:1105
 PlotVertexESD.C:1106
 PlotVertexESD.C:1107
 PlotVertexESD.C:1108
 PlotVertexESD.C:1109
 PlotVertexESD.C:1110
 PlotVertexESD.C:1111
 PlotVertexESD.C:1112
 PlotVertexESD.C:1113
 PlotVertexESD.C:1114
 PlotVertexESD.C:1115
 PlotVertexESD.C:1116
 PlotVertexESD.C:1117
 PlotVertexESD.C:1118
 PlotVertexESD.C:1119
 PlotVertexESD.C:1120
 PlotVertexESD.C:1121
 PlotVertexESD.C:1122
 PlotVertexESD.C:1123
 PlotVertexESD.C:1124
 PlotVertexESD.C:1125
 PlotVertexESD.C:1126
 PlotVertexESD.C:1127
 PlotVertexESD.C:1128
 PlotVertexESD.C:1129
 PlotVertexESD.C:1130
 PlotVertexESD.C:1131
 PlotVertexESD.C:1132
 PlotVertexESD.C:1133
 PlotVertexESD.C:1134
 PlotVertexESD.C:1135
 PlotVertexESD.C:1136
 PlotVertexESD.C:1137
 PlotVertexESD.C:1138
 PlotVertexESD.C:1139
 PlotVertexESD.C:1140
 PlotVertexESD.C:1141
 PlotVertexESD.C:1142
 PlotVertexESD.C:1143
 PlotVertexESD.C:1144
 PlotVertexESD.C:1145
 PlotVertexESD.C:1146
 PlotVertexESD.C:1147
 PlotVertexESD.C:1148
 PlotVertexESD.C:1149
 PlotVertexESD.C:1150
 PlotVertexESD.C:1151
 PlotVertexESD.C:1152
 PlotVertexESD.C:1153
 PlotVertexESD.C:1154
 PlotVertexESD.C:1155
 PlotVertexESD.C:1156
 PlotVertexESD.C:1157
 PlotVertexESD.C:1158
 PlotVertexESD.C:1159
 PlotVertexESD.C:1160
 PlotVertexESD.C:1161
 PlotVertexESD.C:1162
 PlotVertexESD.C:1163
 PlotVertexESD.C:1164
 PlotVertexESD.C:1165
 PlotVertexESD.C:1166
 PlotVertexESD.C:1167
 PlotVertexESD.C:1168
 PlotVertexESD.C:1169
 PlotVertexESD.C:1170
 PlotVertexESD.C:1171
 PlotVertexESD.C:1172
 PlotVertexESD.C:1173
 PlotVertexESD.C:1174
 PlotVertexESD.C:1175
 PlotVertexESD.C:1176
 PlotVertexESD.C:1177
 PlotVertexESD.C:1178
 PlotVertexESD.C:1179
 PlotVertexESD.C:1180
 PlotVertexESD.C:1181
 PlotVertexESD.C:1182
 PlotVertexESD.C:1183
 PlotVertexESD.C:1184
 PlotVertexESD.C:1185
 PlotVertexESD.C:1186
 PlotVertexESD.C:1187
 PlotVertexESD.C:1188
 PlotVertexESD.C:1189
 PlotVertexESD.C:1190
 PlotVertexESD.C:1191
 PlotVertexESD.C:1192
 PlotVertexESD.C:1193
 PlotVertexESD.C:1194
 PlotVertexESD.C:1195
 PlotVertexESD.C:1196
 PlotVertexESD.C:1197
 PlotVertexESD.C:1198
 PlotVertexESD.C:1199
 PlotVertexESD.C:1200
 PlotVertexESD.C:1201
 PlotVertexESD.C:1202
 PlotVertexESD.C:1203
 PlotVertexESD.C:1204
 PlotVertexESD.C:1205
 PlotVertexESD.C:1206
 PlotVertexESD.C:1207
 PlotVertexESD.C:1208
 PlotVertexESD.C:1209
 PlotVertexESD.C:1210
 PlotVertexESD.C:1211
 PlotVertexESD.C:1212
 PlotVertexESD.C:1213
 PlotVertexESD.C:1214
 PlotVertexESD.C:1215
 PlotVertexESD.C:1216
 PlotVertexESD.C:1217
 PlotVertexESD.C:1218
 PlotVertexESD.C:1219
 PlotVertexESD.C:1220
 PlotVertexESD.C:1221
 PlotVertexESD.C:1222
 PlotVertexESD.C:1223
 PlotVertexESD.C:1224
 PlotVertexESD.C:1225
 PlotVertexESD.C:1226
 PlotVertexESD.C:1227
 PlotVertexESD.C:1228
 PlotVertexESD.C:1229
 PlotVertexESD.C:1230
 PlotVertexESD.C:1231
 PlotVertexESD.C:1232
 PlotVertexESD.C:1233
 PlotVertexESD.C:1234
 PlotVertexESD.C:1235
 PlotVertexESD.C:1236
 PlotVertexESD.C:1237
 PlotVertexESD.C:1238
 PlotVertexESD.C:1239
 PlotVertexESD.C:1240
 PlotVertexESD.C:1241
 PlotVertexESD.C:1242
 PlotVertexESD.C:1243
 PlotVertexESD.C:1244
 PlotVertexESD.C:1245
 PlotVertexESD.C:1246
 PlotVertexESD.C:1247
 PlotVertexESD.C:1248
 PlotVertexESD.C:1249
 PlotVertexESD.C:1250
 PlotVertexESD.C:1251
 PlotVertexESD.C:1252
 PlotVertexESD.C:1253
 PlotVertexESD.C:1254
 PlotVertexESD.C:1255
 PlotVertexESD.C:1256
 PlotVertexESD.C:1257
 PlotVertexESD.C:1258
 PlotVertexESD.C:1259
 PlotVertexESD.C:1260
 PlotVertexESD.C:1261
 PlotVertexESD.C:1262
 PlotVertexESD.C:1263
 PlotVertexESD.C:1264
 PlotVertexESD.C:1265
 PlotVertexESD.C:1266
 PlotVertexESD.C:1267
 PlotVertexESD.C:1268
 PlotVertexESD.C:1269
 PlotVertexESD.C:1270
 PlotVertexESD.C:1271
 PlotVertexESD.C:1272
 PlotVertexESD.C:1273
 PlotVertexESD.C:1274
 PlotVertexESD.C:1275
 PlotVertexESD.C:1276
 PlotVertexESD.C:1277
 PlotVertexESD.C:1278
 PlotVertexESD.C:1279
 PlotVertexESD.C:1280
 PlotVertexESD.C:1281
 PlotVertexESD.C:1282
 PlotVertexESD.C:1283
 PlotVertexESD.C:1284
 PlotVertexESD.C:1285
 PlotVertexESD.C:1286
 PlotVertexESD.C:1287
 PlotVertexESD.C:1288
 PlotVertexESD.C:1289
 PlotVertexESD.C:1290
 PlotVertexESD.C:1291
 PlotVertexESD.C:1292
 PlotVertexESD.C:1293
 PlotVertexESD.C:1294
 PlotVertexESD.C:1295
 PlotVertexESD.C:1296
 PlotVertexESD.C:1297
 PlotVertexESD.C:1298
 PlotVertexESD.C:1299
 PlotVertexESD.C:1300
 PlotVertexESD.C:1301
 PlotVertexESD.C:1302
 PlotVertexESD.C:1303
 PlotVertexESD.C:1304
 PlotVertexESD.C:1305
 PlotVertexESD.C:1306
 PlotVertexESD.C:1307
 PlotVertexESD.C:1308
 PlotVertexESD.C:1309
 PlotVertexESD.C:1310
 PlotVertexESD.C:1311
 PlotVertexESD.C:1312
 PlotVertexESD.C:1313
 PlotVertexESD.C:1314
 PlotVertexESD.C:1315
 PlotVertexESD.C:1316
 PlotVertexESD.C:1317
 PlotVertexESD.C:1318
 PlotVertexESD.C:1319
 PlotVertexESD.C:1320
 PlotVertexESD.C:1321
 PlotVertexESD.C:1322
 PlotVertexESD.C:1323
 PlotVertexESD.C:1324
 PlotVertexESD.C:1325
 PlotVertexESD.C:1326
 PlotVertexESD.C:1327
 PlotVertexESD.C:1328
 PlotVertexESD.C:1329
 PlotVertexESD.C:1330
 PlotVertexESD.C:1331
 PlotVertexESD.C:1332
 PlotVertexESD.C:1333
 PlotVertexESD.C:1334
 PlotVertexESD.C:1335
 PlotVertexESD.C:1336
 PlotVertexESD.C:1337
 PlotVertexESD.C:1338
 PlotVertexESD.C:1339
 PlotVertexESD.C:1340
 PlotVertexESD.C:1341
 PlotVertexESD.C:1342
 PlotVertexESD.C:1343
 PlotVertexESD.C:1344
 PlotVertexESD.C:1345
 PlotVertexESD.C:1346
 PlotVertexESD.C:1347
 PlotVertexESD.C:1348
 PlotVertexESD.C:1349
 PlotVertexESD.C:1350
 PlotVertexESD.C:1351
 PlotVertexESD.C:1352
 PlotVertexESD.C:1353
 PlotVertexESD.C:1354
 PlotVertexESD.C:1355
 PlotVertexESD.C:1356
 PlotVertexESD.C:1357
 PlotVertexESD.C:1358
 PlotVertexESD.C:1359
 PlotVertexESD.C:1360
 PlotVertexESD.C:1361
 PlotVertexESD.C:1362
 PlotVertexESD.C:1363
 PlotVertexESD.C:1364
 PlotVertexESD.C:1365
 PlotVertexESD.C:1366
 PlotVertexESD.C:1367
 PlotVertexESD.C:1368
 PlotVertexESD.C:1369
 PlotVertexESD.C:1370
 PlotVertexESD.C:1371
 PlotVertexESD.C:1372
 PlotVertexESD.C:1373
 PlotVertexESD.C:1374
 PlotVertexESD.C:1375
 PlotVertexESD.C:1376
 PlotVertexESD.C:1377
 PlotVertexESD.C:1378
 PlotVertexESD.C:1379
 PlotVertexESD.C:1380
 PlotVertexESD.C:1381
 PlotVertexESD.C:1382
 PlotVertexESD.C:1383
 PlotVertexESD.C:1384
 PlotVertexESD.C:1385
 PlotVertexESD.C:1386
 PlotVertexESD.C:1387
 PlotVertexESD.C:1388
 PlotVertexESD.C:1389
 PlotVertexESD.C:1390
 PlotVertexESD.C:1391
 PlotVertexESD.C:1392
 PlotVertexESD.C:1393
 PlotVertexESD.C:1394
 PlotVertexESD.C:1395
 PlotVertexESD.C:1396
 PlotVertexESD.C:1397
 PlotVertexESD.C:1398
 PlotVertexESD.C:1399
 PlotVertexESD.C:1400
 PlotVertexESD.C:1401
 PlotVertexESD.C:1402
 PlotVertexESD.C:1403
 PlotVertexESD.C:1404
 PlotVertexESD.C:1405
 PlotVertexESD.C:1406
 PlotVertexESD.C:1407
 PlotVertexESD.C:1408
 PlotVertexESD.C:1409
 PlotVertexESD.C:1410
 PlotVertexESD.C:1411
 PlotVertexESD.C:1412
 PlotVertexESD.C:1413
 PlotVertexESD.C:1414
 PlotVertexESD.C:1415
 PlotVertexESD.C:1416
 PlotVertexESD.C:1417
 PlotVertexESD.C:1418
 PlotVertexESD.C:1419
 PlotVertexESD.C:1420
 PlotVertexESD.C:1421
 PlotVertexESD.C:1422
 PlotVertexESD.C:1423
 PlotVertexESD.C:1424
 PlotVertexESD.C:1425
 PlotVertexESD.C:1426
 PlotVertexESD.C:1427
 PlotVertexESD.C:1428
 PlotVertexESD.C:1429
 PlotVertexESD.C:1430
 PlotVertexESD.C:1431
 PlotVertexESD.C:1432
 PlotVertexESD.C:1433
 PlotVertexESD.C:1434
 PlotVertexESD.C:1435
 PlotVertexESD.C:1436
 PlotVertexESD.C:1437
 PlotVertexESD.C:1438
 PlotVertexESD.C:1439
 PlotVertexESD.C:1440
 PlotVertexESD.C:1441
 PlotVertexESD.C:1442
 PlotVertexESD.C:1443
 PlotVertexESD.C:1444
 PlotVertexESD.C:1445
 PlotVertexESD.C:1446
 PlotVertexESD.C:1447
 PlotVertexESD.C:1448
 PlotVertexESD.C:1449
 PlotVertexESD.C:1450
 PlotVertexESD.C:1451
 PlotVertexESD.C:1452
 PlotVertexESD.C:1453
 PlotVertexESD.C:1454
 PlotVertexESD.C:1455
 PlotVertexESD.C:1456
 PlotVertexESD.C:1457
 PlotVertexESD.C:1458
 PlotVertexESD.C:1459
 PlotVertexESD.C:1460
 PlotVertexESD.C:1461
 PlotVertexESD.C:1462
 PlotVertexESD.C:1463
 PlotVertexESD.C:1464
 PlotVertexESD.C:1465
 PlotVertexESD.C:1466
 PlotVertexESD.C:1467
 PlotVertexESD.C:1468
 PlotVertexESD.C:1469
 PlotVertexESD.C:1470
 PlotVertexESD.C:1471
 PlotVertexESD.C:1472
 PlotVertexESD.C:1473
 PlotVertexESD.C:1474
 PlotVertexESD.C:1475
 PlotVertexESD.C:1476
 PlotVertexESD.C:1477
 PlotVertexESD.C:1478
 PlotVertexESD.C:1479