ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TH1F.h>
#include <TH2F.h>
#include <TF1.h>
#include <TPad.h>
#include <TGraphErrors.h>
#include <TROOT.h>
#include <TFile.h>
#include <TTree.h>
#include <TGrid.h>
#include <TGridResult.h>
#include <TMath.h>
#include <TCanvas.h>
#include <TStyle.h>
#include <TLatex.h>
#include "AliITSgeomTGeo.h"
#endif

Double_t LangausFun(Double_t *x, Double_t *par);


void PlotOutputQAtrainSDD(TString option="local",
			  Int_t nRun=0,
			  TString period="LHC11a",
			  TString recoPass="pass2_with_SDD",
			  TString qaTrain="",
			  TString fileName="QAresults.root"){

  gStyle->SetOptStat(0);
  //  gStyle->SetOptTitle(0);
  TFile *f;
  TString path;
  Int_t year=2011;
  if(period.Contains("LHC10")) year=2010;
  else if(period.Contains("LHC09")) year=2009;

  if(option.Contains("local")){
    f=new TFile(fileName.Data());
    printf("Opened file %s\n",f->GetName());
  }else{
    TGrid::Connect("alien:");
    path=Form("/alice/data/%d/%s/%09d/ESDs/%s",year,period.Data(),nRun,recoPass.Data());    
    printf("search in path %s\n",path.Data());
    if(!gGrid||!gGrid->IsConnected()) {
      printf("gGrid not found! exit macro\n");
      return;
    }
    TGridResult *gr = gGrid->Query(path,fileName);
    Int_t nFiles = gr->GetEntries();
    if (nFiles < 1){
      printf("QA file for run %d not found\n",nRun);
      return;
    }
    printf("================>%d files found\n", nFiles);
    if(qaTrain.Length()>0){
      Int_t found=kFALSE;
      for (Int_t iFil = 0; iFil <nFiles ; iFil++) { 
 	fileName=Form("%s",gr->GetKey(iFil,"turl"));
	TString isMerged=fileName;
	isMerged.Remove(isMerged.Sizeof()-16); 
	isMerged.Remove(0,isMerged.Sizeof()-5);
	if(!isMerged.Contains("QA")) continue;
	if(fileName.Contains(qaTrain.Data())){
	  found=kTRUE;
	  break;
	}
      }
      if(!found){
	printf(" File from %s train not found\n",qaTrain.Data());
	return;
      }
    }else{
      Int_t theFile=0;
      Int_t maxVer=0;
      if (nFiles > 1){
	for (Int_t iFil = 0; iFil <nFiles ; iFil++) { 
	  fileName=Form("%s",gr->GetKey(iFil,"turl"));
	  TString isMerged=fileName;
	  isMerged.Remove(isMerged.Sizeof()-16); 
	  isMerged.Remove(0,isMerged.Sizeof()-5);
	  if(!isMerged.Contains("QA")) continue;
	  TString cutFilename=fileName.ReplaceAll("/QAresults.root","");
	  Int_t last=cutFilename.Sizeof()-3;
	  cutFilename.Remove(0,last);
	  Int_t qaver=atoi(cutFilename.Data());
	  if(qaver>maxVer){
	    maxVer=qaver;
	    theFile=iFil;
	  }
	}
      }
      fileName=Form("%s",gr->GetKey(theFile,"turl"));
    }
    f=TFile::Open(fileName.Data());
  }

  TDirectoryFile* df=(TDirectoryFile*)f->Get("SDD_Performance");
  if(!df){
    printf("SDD_Performance MISSING -> Exit\n");
    return;
  }
  TList* l=(TList*)df->Get("coutputRP");
  if(!df){
    printf("coutputRP TList MISSING -> Exit\n");
    return;
  }

  TH1F* hcllay=(TH1F*)l->FindObject("hCluInLay");
  TH1F* hapmod=(TH1F*)l->FindObject("hAllPmod");
  TH1F* hgpmod=(TH1F*)l->FindObject("hGoodPmod");
  TH1F* hmpmod=(TH1F*)l->FindObject("hMissPmod");
  TH1F* hbrmod=(TH1F*)l->FindObject("hBadRegmod");
  TH1F* hskmod=(TH1F*)l->FindObject("hSkippedmod");
  TH1F* hoamod=(TH1F*)l->FindObject("hOutAccmod");
  TH1F* hnrmod=(TH1F*)l->FindObject("hNoRefitmod");

  //  TH1F* hapxl=(TH1F*)l->FindObject("hAllPxloc");
  TH1F* hgpxl=(TH1F*)l->FindObject("hGoodPxloc");
  TH1F* hmpxl=(TH1F*)l->FindObject("hMissPxloc");
  TH1F* hbrxl=(TH1F*)l->FindObject("hBadRegxloc");
  //  TH1F* hapzl=(TH1F*)l->FindObject("hAllPzloc");
  TH1F* hgpzl=(TH1F*)l->FindObject("hGoodPzloc");
  TH1F* hmpzl=(TH1F*)l->FindObject("hMissPzloc");
  TH1F* hbrzl=(TH1F*)l->FindObject("hBadRegzloc");

  TH2F* hClSizAn=(TH2F*)l->FindObject("hCluSizAn");
  TH2F* hClSizTb=(TH2F*)l->FindObject("hCluSizTb");

  TH2F* hdedx3=(TH2F*)l->FindObject("hdEdxL3VsP");
  TH2F* hdedx4=(TH2F*)l->FindObject("hdEdxL4VsP");
  TH2F* hdedxmod=(TH2F*)l->FindObject("hdEdxVsMod");
  

  TH1F* hmodR=(TH1F*)l->FindObject("hRPMod");
  TH1F* hmodT=(TH1F*)l->FindObject("hTPMod");
  TH1F* hgamod=(TH1F*)l->FindObject("hGAMod");

  TH2F* h2dmodR3=new TH2F("h2dmodR3","Rec Points, Layer 3",6,0.5,6.5,14,0.5,14.5);
  TH2F* h2dmodR4=new TH2F("h2dmodR4","Rec Points, Layer 4",8,0.5,8.5,22,0.5,22.5);
  TH2F* h2dmodT3=new TH2F("h2dmodT3","Track Points, Layer 3",6,0.5,6.5,14,0.5,14.5);
  TH2F* h2dmodT4=new TH2F("h2dmodT4","Track Points, Layer 4",8,0.5,8.5,22,0.5,22.5);
  TH2F* h2dmodR3N=new TH2F("h2dmodR3N","Rec Points/GoodAnode/Event, Layer 3",6,0.5,6.5,14,0.5,14.5);
  TH2F* h2dmodR4N=new TH2F("h2dmodR4N","Rec Points/GoodAnode/Event, Layer 4",8,0.5,8.5,22,0.5,22.5);
  TH2F* h2dmodT3N=new TH2F("h2dmodT3N","Track Points/GoodAnode/Event, Layer 3",6,0.5,6.5,14,0.5,14.5);
  TH2F* h2dmodT4N=new TH2F("h2dmodT4N","Track Points/GoodAnode/Event, Layer 4",8,0.5,8.5,22,0.5,22.5);
  TH1F* hmodRN=new TH1F("hmodRN","Normalized Rec Points per Module",260,239.5,499.5);
  TH1F* hmodTN=new TH1F("hmodTN","Normalized Track Points per Module",260,239.5,499.5);

  TH1F* hev=(TH1F*)l->FindObject("hNEvents");
  Int_t nTotEvents=hev->GetBinContent(2);
  Int_t nTrigEvents=hev->GetBinContent(3);
  Int_t nEvents=nTotEvents;
  printf("---- Statistics ----\n");
  printf("Number of Events = %d\n",nTotEvents);
  if(nTrigEvents>0){ 
    printf("Number of Triggered Events = %d\n",nTrigEvents);
    nEvents=nTrigEvents;
  }else{
    printf("No request on the trigger done when running the task\n");
  }
  Int_t bestMod=0;
  for(Int_t iMod=0; iMod<260;iMod++){
    Int_t gda=(Int_t)hgamod->GetBinContent(iMod+1);
    if(gda>bestMod) bestMod=gda;
  }
  Int_t nChunks=1;
  if(bestMod>512){
    nChunks=(Int_t)(bestMod/512.+0.5);
  }
  printf("Chunks merged = %d\n",nChunks);
  hgamod->Scale(1./nChunks);
  TCanvas* cgan=new TCanvas("cgan","Good Anodes");
  cgan->SetTickx();
  cgan->SetTicky();
  hgamod->SetMarkerStyle(20);
  hgamod->SetMarkerSize(0.6);
  hgamod->SetMinimum(-10.);
  hgamod->Draw("P");
  hgamod->GetXaxis()->SetTitle("SDD Module Id");
  hgamod->GetYaxis()->SetTitle("Number of good anodes");
  cgan->Update();

  printf("---- Modules with > 2%% of bad anodes ----\n");
  for(Int_t iMod=0; iMod<260; iMod++){
    Int_t idMod=iMod+240;
    Float_t rps=hmodR->GetBinContent(iMod+1);
    Float_t tps=hmodT->GetBinContent(iMod+1);
    Float_t ga=hgamod->GetBinContent(iMod+1);
    if(ga<500){
      printf("Module %d - Good Anodes = %d\n",idMod,(Int_t)ga);
    }
    Float_t rpsN=0.;
    Float_t tpsN=0.;
    Float_t erpsN=0.;
    Float_t etpsN=0.;
    if(ga>0 && nEvents>0){
      rpsN=rps/ga/(Float_t)nEvents;
      tpsN=tps/ga/(Float_t)nEvents;
      erpsN=TMath::Sqrt(rps)/ga/(Float_t)nEvents;
      etpsN=TMath::Sqrt(tps)/ga/(Float_t)nEvents;
    }
    hmodRN->SetBinContent(iMod+1,rpsN);
    hmodTN->SetBinContent(iMod+1,tpsN);
    hmodRN->SetBinError(iMod+1,erpsN);
    hmodTN->SetBinError(iMod+1,etpsN);
    Int_t iLay,iLad,iDet;
    AliITSgeomTGeo::GetModuleId(idMod,iLay,iLad,iDet);
    if(iLay==3){
      h2dmodR3->SetBinContent(iDet,iLad,rps);
      h2dmodT3->SetBinContent(iDet,iLad,tps);
      h2dmodR3N->SetBinContent(iDet,iLad,rpsN);
      h2dmodT3N->SetBinContent(iDet,iLad,tpsN);
    }
    else if(iLay==4){
      h2dmodR4->SetBinContent(iDet,iLad,rps);
      h2dmodT4->SetBinContent(iDet,iLad,tps);
      h2dmodR4N->SetBinContent(iDet,iLad,rpsN);
      h2dmodT4N->SetBinContent(iDet,iLad,tpsN);
    }
  }
  if(nEvents<1) return;

  gStyle->SetPalette(1);

  if(hmodR->GetEntries()>0){
    TCanvas* cmodR=new TCanvas("cmodR","RecPoint Occup",1200,1200);
    cmodR->Divide(2,3);
    cmodR->cd(1);
    gPad->SetLeftMargin(0.14);
    hmodR->Draw();
    hmodR->GetXaxis()->SetTitle("SDD Module Id");
    hmodR->GetYaxis()->SetTitle("RecPoints");
    hmodR->GetYaxis()->SetTitleOffset(1.55);
    cmodR->cd(2);
    gPad->SetLeftMargin(0.14);
    hmodRN->Draw("E");
    hmodRN->GetXaxis()->SetTitle("SDD Module Id");
    hmodRN->GetYaxis()->SetTitle("RecPoints/GoodAnode/Event");
    hmodRN->GetYaxis()->SetTitleOffset(1.55);
    cmodR->cd(3);
    gPad->SetLeftMargin(0.14);
    h2dmodR3->Draw("colz");
    h2dmodR3->GetXaxis()->SetTitle("Detector");
    h2dmodR3->GetYaxis()->SetTitle("Ladder");
    cmodR->cd(4);
    gPad->SetLeftMargin(0.14);
    h2dmodR3N->Draw("colz");
    h2dmodR3N->GetXaxis()->SetTitle("Detector");
    h2dmodR3N->GetYaxis()->SetTitle("Ladder");
    cmodR->cd(5);
    gPad->SetLeftMargin(0.14);
    h2dmodR4->Draw("colz");
    h2dmodR4->GetXaxis()->SetTitle("Detector");
    h2dmodR4->GetYaxis()->SetTitle("Ladder");
    cmodR->cd(6);
    gPad->SetLeftMargin(0.14);
    gPad->SetLeftMargin(0.14);
    h2dmodR4N->Draw("colz");
    h2dmodR4N->GetXaxis()->SetTitle("Detector");
    h2dmodR4N->GetYaxis()->SetTitle("Ladder");
    cmodR->Update();
  }


  if(hmodT->GetEntries()>0){
    TCanvas* cmodT=new TCanvas("cmodT","TrackPoint Occup",1200,1200);
    cmodT->Divide(2,3);
    cmodT->cd(1);
    hmodT->Draw();
    hmodT->GetXaxis()->SetTitle("SDD Module Id");
    hmodT->GetYaxis()->SetTitle("TrackPoints");
    hmodT->GetYaxis()->SetTitleOffset(1.4);
    cmodT->cd(2);
    gPad->SetLeftMargin(0.14);
    hmodTN->Draw("E");
    hmodTN->GetXaxis()->SetTitle("SDD Module Id");
    hmodTN->GetYaxis()->SetTitle("TrackPoints");
    hmodTN->GetYaxis()->SetTitleOffset(1.4);
    cmodT->cd(3);
    gPad->SetLeftMargin(0.14);
    h2dmodT3->Draw("colz");
    h2dmodT3->GetXaxis()->SetTitle("Detector");
    h2dmodT3->GetYaxis()->SetTitle("Ladder");
    cmodT->cd(4);
    gPad->SetLeftMargin(0.14);
    h2dmodT3N->Draw("colz");
    h2dmodT3N->GetXaxis()->SetTitle("Detector");
    h2dmodT3N->GetYaxis()->SetTitle("Ladder");  
    cmodT->cd(5);
    gPad->SetLeftMargin(0.14);
    h2dmodT4->Draw("colz");
    h2dmodT4->GetXaxis()->SetTitle("Detector");
    h2dmodT4->GetYaxis()->SetTitle("Ladder");
    cmodT->cd(6);
    gPad->SetLeftMargin(0.14);
    h2dmodT4N->Draw("colz");
    h2dmodT4N->GetXaxis()->SetTitle("Detector");
    h2dmodT4N->GetYaxis()->SetTitle("Ladder");
    cmodT->Update();
  }

  TH1F* htplad3=(TH1F*)l->FindObject("hTPLad3");
  TH1F* htplad4=(TH1F*)l->FindObject("hTPLad4");
  TH1F* hgalad3=(TH1F*)l->FindObject("hGALad3");
  TH1F* hgalad4=(TH1F*)l->FindObject("hGALad4");
  TH1F* hnormOcc3=new TH1F("hnormOcc3","",14,-0.5,13.5);
  TH1F* hnormOcc4=new TH1F("hnormOcc4","",22,-0.5,21.5);
  Bool_t tpok=kFALSE;
  for(Int_t ilad=0;ilad<14;ilad++){ 
    Float_t occ=0.;
    Float_t eocc=0.;
    Int_t gd3=hgalad3->GetBinContent(ilad+1);
    if(gd3>0){
      occ=(Float_t)htplad3->GetBinContent(ilad+1)/(Float_t)gd3/(Float_t)nEvents;
      eocc=TMath::Sqrt((Float_t)htplad3->GetBinContent(ilad+1))/(Float_t)gd3/(Float_t)nEvents;
    }
    hnormOcc3->SetBinContent(ilad+1,occ);
    hnormOcc3->SetBinError(ilad+1,eocc);
  }
  for(Int_t ilad=0;ilad<22;ilad++){ 
    Float_t occ=0.;
    Float_t eocc=0.;
    Int_t gd4=hgalad4->GetBinContent(ilad+1);
    if(gd4>0){
      occ=(Float_t)htplad4->GetBinContent(ilad+1)/(Float_t)gd4/(Float_t)nEvents;
      eocc=TMath::Sqrt((Float_t)htplad4->GetBinContent(ilad+1))/(Float_t)gd4/(Float_t)nEvents;
    }
    hnormOcc4->SetBinContent(ilad+1,occ);
    hnormOcc4->SetBinError(ilad+1,eocc);
  }


  if(tpok){
    TCanvas* cn0=new TCanvas("cn0","Normalized Ladder Occupancy",1400,600);
    cn0->Divide(2,1);
    cn0->cd(1);
    gPad->SetLeftMargin(0.14);
    hnormOcc3->Draw();
    hnormOcc3->GetXaxis()->SetTitle("Ladder number (layer 3)");
    hnormOcc3->GetYaxis()->SetTitle("TrackPoints/GoodAnodes/Events");
    hnormOcc3->GetYaxis()->SetTitleOffset(1.35);
    cn0->cd(2);
    gPad->SetLeftMargin(0.14);
    hnormOcc4->Draw();
    hnormOcc4->GetXaxis()->SetTitle("Ladder number (layer 4)");
    hnormOcc4->GetYaxis()->SetTitle("TrackPoints/GoodAnode/Events");
    hnormOcc4->GetYaxis()->SetTitleOffset(1.35);
    cn0->Update();
  }

  if(hcllay){
    Double_t norm=hcllay->GetBinContent(1);
    if(norm>0.){
      hcllay->Scale(1./norm);
      hcllay->SetTitle("");
      hcllay->GetXaxis()->SetRange(2,7);
      hcllay->SetMinimum(0.);
      hcllay->SetMaximum(1.1);
      hcllay->SetMarkerStyle(23);
      TCanvas* ceffL=new TCanvas("ceffL","PointPerLayer",1000,600);
      ceffL->SetGridy();
      hcllay->Draw();
      hcllay->GetXaxis()->SetTitle("Layer");
      hcllay->GetYaxis()->SetTitle("Fraction of tracks with point in layer");
      ceffL->Update();
    }
  }

  hgpmod->SetTitle("");
  TCanvas* ceff0=new TCanvas("ceff0","ModuleIndexInfo",1000,600);
  hgpmod->Draw();
  hgpmod->GetXaxis()->SetTitle("SDD Module Id");
  hgpmod->GetYaxis()->SetTitle("Number of tracks");
  hmpmod->SetLineColor(2);
  hmpmod->SetMarkerColor(2);
  hmpmod->SetMarkerStyle(22);
  hmpmod->SetMarkerSize(0.5);
  hmpmod->Draw("psame");
  hbrmod->SetLineColor(kGreen+1);
  hbrmod->SetMarkerColor(kGreen+1);
  hbrmod->SetMarkerStyle(20);
  hbrmod->SetMarkerSize(0.5);
  hbrmod->Draw("same");
  hskmod->SetLineColor(kYellow);
  hskmod->Draw("same");
  hoamod->SetLineColor(4);
  hoamod->Draw("same");
  hnrmod->SetLineColor(6);
  hnrmod->Draw("same");
  TLatex* t1=new TLatex(0.7,0.85,"Good Point");
  t1->SetNDC();
  t1->SetTextColor(1);
  t1->Draw();
  TLatex* t2=new TLatex(0.7,0.8,"Missing Point");
  t2->SetNDC();
  t2->SetTextColor(2);
  t2->Draw();
  TLatex* t3=new TLatex(0.7,0.75,"Bad Region");
  t3->SetNDC();
  t3->SetTextColor(kGreen+1);
  t3->Draw();
  ceff0->Update();

  TH1F* heff=new TH1F("heff","",260,239.5,499.5);
  TH1F* hfracskip=new TH1F("hfracskip","",260,239.5,499.5);

  for(Int_t imod=0; imod<260;imod++){
    Float_t numer=hgpmod->GetBinContent(imod+1)+hbrmod->GetBinContent(imod+1)+hoamod->GetBinContent(imod+1)+hnrmod->GetBinContent(imod+1);
    Float_t denom=hapmod->GetBinContent(imod+1)-hskmod->GetBinContent(imod+1);
    Float_t eff=0.;
    Float_t erreff=0.;
    if(denom>0){
      eff=numer/denom;
      erreff=TMath::Sqrt(eff*(1-eff)/denom);
    }
    heff->SetBinContent(imod+1,eff);
    heff->SetBinError(imod+1,erreff);
    Float_t numer2=hskmod->GetBinContent(imod+1);
    Float_t denom2=hapmod->GetBinContent(imod+1);
    Float_t frac=0.;
    Float_t efrac=0.;
    if(denom2>0.){
      frac=numer2/denom2;
      efrac=TMath::Sqrt(frac*(1-frac)/denom2);
    }
    hfracskip->SetBinContent(imod+1,frac);
    hfracskip->SetBinError(imod+1,efrac);

  }

  printf("---- Modules with efficiency < 90%% ----\n");
  TCanvas* ceff1=new TCanvas("ceff1","Efficiency",1000,1000);
  ceff1->Divide(1,2);
  ceff1->cd(1);
  heff->Draw();
  heff->GetXaxis()->SetTitle("SDD Module Id");
  heff->GetYaxis()->SetTitle("Fraction of tracks with point in good region");
  for(Int_t ibin=1; ibin<=heff->GetNbinsX(); ibin++){
    Float_t e=heff->GetBinContent(ibin);
    if(e<0.9){
      Int_t iMod=(Int_t)heff->GetBinCenter(ibin);
      Int_t lay,lad,det;
      AliITSgeomTGeo::GetModuleId(iMod,lay,lad,det);
      printf("Module %d - Layer %d Ladder %2d Det %d  -   Eff. %.3f\n",iMod,lay,lad,det,heff->GetBinContent(ibin));
    }
  }
  ceff1->cd(2);
  hfracskip->Draw();
  hfracskip->GetXaxis()->SetTitle("SDD Module Id");
  hfracskip->GetYaxis()->SetTitle("Fraction of tracks with skipped SDD");
  

  if(hgpxl){
    hgpxl->SetTitle("");
    hgpzl->SetTitle("");
    TCanvas* ceff2=new TCanvas("ceff2","LocalCoord",1000,600);
    ceff2->Divide(2,1);
    ceff2->cd(1);
    hgpxl->Draw();
    hgpxl->GetXaxis()->SetTitle("Xlocal (cm)");
    hgpxl->GetYaxis()->SetTitle("Number of tracks");
    hmpxl->SetLineColor(2);
    hmpxl->SetMarkerColor(2);
    hmpxl->SetMarkerStyle(22);
    hmpxl->SetMarkerSize(0.5);
    hmpxl->Draw("psame");
    hbrxl->SetLineColor(kGreen+1);
    hbrxl->SetMarkerColor(kGreen+1);
    hbrxl->SetMarkerStyle(20);
    hbrxl->SetMarkerSize(0.5);
    hbrxl->Draw("same");
    t1->Draw();
    t2->Draw();
    t3->Draw();
    ceff2->cd(2);
    hgpzl->Draw();
    hgpzl->GetXaxis()->SetTitle("Zlocal (cm)");
    hgpzl->GetYaxis()->SetTitle("Number of tracks");
    hmpzl->SetLineColor(2);
    hmpzl->SetMarkerColor(2);
    hmpzl->SetMarkerStyle(22);
    hmpzl->SetMarkerSize(0.5);
    hmpzl->Draw("psame");
    hbrzl->SetLineColor(kGreen+1);
    hbrzl->SetMarkerColor(kGreen+1);
    hbrzl->SetMarkerStyle(20);
    hbrzl->SetMarkerSize(0.5);
    hbrzl->Draw("same");
    t1->Draw();
    t2->Draw();
    t3->Draw();
    ceff2->Update();
  }


  if(hClSizAn && hClSizTb){
    TCanvas* ccs=new TCanvas("ccs","Cluster Size",1200,600);
    ccs->Divide(2,1);
    ccs->cd(1);
    gPad->SetLogz();
    gPad->SetRightMargin(0.12);
    hClSizAn->Draw("colz");
    hClSizAn->GetXaxis()->SetTitle("Drift Time (ns)");
    hClSizAn->GetYaxis()->SetTitle("Cluster Size - Anodes");
    ccs->cd(2);
    gPad->SetLogz();
    gPad->SetRightMargin(0.12);
    hClSizTb->Draw("colz");
    hClSizTb->GetXaxis()->SetTitle("Drift Time (ns)");
    hClSizTb->GetYaxis()->SetTitle("Cluster Size - Time Bins");
    ccs->Update();
  }

  TH1F* htimR=(TH1F*)l->FindObject("hDrTimRP");
  TH1F* htimT=(TH1F*)l->FindObject("hDrTimTPAll");
  TH1F* htimTe=(TH1F*)l->FindObject("hDrTimTPExtra");
  TH1F* htimTne=(TH1F*)l->FindObject("hDrTimTPNoExtra");
  htimR->Rebin(4);
  htimT->Rebin(4);
  htimTe->Rebin(4);
  htimTne->Rebin(4);
  htimR->SetLineWidth(2);
  htimT->SetLineWidth(2);
  htimTe->SetLineWidth(2);
  htimTne->SetLineWidth(2);

  TCanvas* ctim=new TCanvas("ctim","DriftTime",1400,600);
  ctim->Divide(2,1);
  ctim->cd(1);
  htimR->Draw(); 
  htimR->GetYaxis()->SetTitleOffset(1.2);
  htimR->GetXaxis()->SetTitle("Drift Time (ns)");
  htimR->GetYaxis()->SetTitle("RecPoints");
  ctim->cd(2);
  htimT->Draw();
  htimTe->SetLineColor(2);
  htimTe->Draw("same");
  htimTne->SetLineColor(4);
  htimTne->Draw("same");
  htimT->GetXaxis()->SetTitle("Drift Time (ns)");
  htimT->GetYaxis()->SetTitle("TrackPoints");
  htimT->GetYaxis()->SetTitleOffset(1.2);
  TLatex* ta=new TLatex(0.5,0.85,"All Clusters");
  ta->SetNDC();
  ta->SetTextColor(1);
  ta->Draw();
  TLatex* te=new TLatex(0.5,0.8,"Extra Clusters");
  te->SetNDC();
  te->SetTextColor(2);
  te->Draw();
  TLatex* tn=new TLatex(0.5,0.75,"Non-Extra Clusters");
  tn->SetNDC();
  tn->SetTextColor(4);
  tn->Draw();
  ctim->Update();

  TCanvas* cdedx=new TCanvas("cdedx","dedx",1400,600);
  cdedx->Divide(3,1);
  cdedx->cd(1);
  gPad->SetLogz();
  hdedx3->Draw("col");
  hdedx3->GetXaxis()->SetTitle("P (GeV/c)");
  hdedx3->GetYaxis()->SetTitle("dE/dx (keV/300 #mum) Layer 3");
  hdedx3->GetYaxis()->SetTitleOffset(1.25);
  cdedx->cd(2);
  gPad->SetLogz();
  hdedx4->Draw("col");
  hdedx4->GetXaxis()->SetTitle("P (GeV/c)");
  hdedx4->GetYaxis()->SetTitle("dE/dx (keV/300 #mum) Layer 4");
  hdedx4->GetYaxis()->SetTitleOffset(1.25);
  cdedx->cd(3);
  gPad->SetLogz();
  hdedxmod->Draw("col"); 
  hdedxmod->GetXaxis()->SetTitle("SDD Module Id");
  hdedxmod->GetYaxis()->SetTitle("dE/dx (keV/300 #mum)");
  hdedxmod->GetYaxis()->SetTitleOffset(1.25);
  cdedx->Update();

  printf("---- dE/dx vs.DriftTime ----\n");
  TCanvas* csig=new TCanvas("csig","dedx vs. DriftTime",1000,700);
  csig->Divide(4,2);
  TH1F* hSigTim[8];
  TGraphErrors* gmpv=new TGraphErrors(0);
  TGraphErrors* gsigg=new TGraphErrors(0);
  TGraphErrors* gsigl=new TGraphErrors(0);
  gmpv->SetTitle("");
  gsigg->SetTitle("");
  gsigl->SetTitle("");
  Int_t iPoint=0;
  TF1 *lfun = new TF1("LangausFun",LangausFun,50.,300.,4);
  for(Int_t it=0; it<8; it++){
    hSigTim[it]=(TH1F*)l->FindObject(Form("hSigTimeInt%d",it));
    csig->cd(it+1);
    hSigTim[it]->Draw();
    if(hSigTim[it]->GetEntries()>200){
      lfun->SetLineWidth(2);
      lfun->SetParameter(0,5.);
      lfun->SetParameter(1,80.);
      lfun->SetParameter(2,hSigTim[it]->GetEntries()/10.);
      lfun->SetParameter(3,10.);
      lfun->SetParLimits(3,0.,20);

      hSigTim[it]->Fit("LangausFun","QLR");
      hSigTim[it]->GetXaxis()->SetTitle(Form("dE/dx, time interval %d",it+1));
      hSigTim[it]->GetYaxis()->SetTitle("Events");
      Float_t mpv=lfun->GetParameter(1);
      Float_t maxf=lfun->GetMaximumX(70.,90.);
      printf("mpv=%f   maxfunc=%f\n",mpv,maxf);
      Float_t empv=lfun->GetParError(1);
      Float_t sig=lfun->GetParameter(3);
      Float_t esig=lfun->GetParError(3);
      Float_t sigl=lfun->GetParameter(0);
      Float_t esigl=lfun->GetParError(0);
      gmpv->SetPoint(iPoint,(Float_t)it,mpv);
      gmpv->SetPointError(iPoint,0.,empv);
      gsigg->SetPoint(iPoint,(Float_t)it,sig);
      gsigg->SetPointError(iPoint,0.,esig);
      gsigl->SetPoint(iPoint,(Float_t)it,sigl);
      gsigl->SetPointError(iPoint,0.,esigl);
      ++iPoint;
      gPad->Update();
      printf("Bin %d - MPV=%.3f  \t SigmaLandau=%.3f  \t SigmaGaus=%.3f\n",it,mpv,sigl,sig);
    }
  }

  TCanvas* cpars=new TCanvas("cpars","Params",800,900);
  cpars->Divide(1,3,0.01,0.);
  cpars->cd(1);
  gPad->SetLeftMargin(0.14);
  gPad->SetFrameLineWidth(2);
  gPad->SetTickx();
  gPad->SetTicky();
  gmpv->SetMarkerStyle(20);
  gmpv->SetMinimum(70);
  gmpv->SetMaximum(90);
  gmpv->GetXaxis()->SetLimits(-0.2,6.8);
  gmpv->Draw("AP");
  //  gmpv->GetXaxis()->SetTitle("Drift Time interval number");
  gmpv->GetYaxis()->SetTitle("Landau MPV (keV)");
  gmpv->GetXaxis()->SetTitleSize(0.05);
  gmpv->GetYaxis()->SetTitleSize(0.05);
  gmpv->GetYaxis()->SetTitleOffset(1.2);
  cpars->cd(2);
  gPad->SetLeftMargin(0.14);
  gPad->SetFrameLineWidth(2);
  gPad->SetTickx();
  gPad->SetTicky();
  gsigl->SetMarkerStyle(20);
  gsigl->GetXaxis()->SetLimits(-0.2,6.8);
  gsigl->SetMinimum(7.);
  gsigl->SetMaximum(11.);
  gsigl->Draw("AP");
  //  gsigl->GetXaxis()->SetTitle("Drift Time interval number");
  gsigl->GetYaxis()->SetTitle("#sigma_{Landau} (keV)");
  gsigl->GetXaxis()->SetTitleSize(0.05);
  gsigl->GetYaxis()->SetTitleSize(0.05);
  gsigl->GetYaxis()->SetTitleOffset(1.2);
  cpars->cd(3);
  gPad->SetLeftMargin(0.14);
  gPad->SetFrameLineWidth(2);
  gPad->SetTickx();
  gPad->SetTicky();
  gsigg->SetMarkerStyle(20);
  gsigg->GetXaxis()->SetLimits(-0.2,6.8);
  gsigg->SetMinimum(3.);
  gsigg->SetMaximum(7.);
  gsigg->Draw("AP");
  gsigg->GetXaxis()->SetTitle("Drift Time interval number");
  gsigg->GetYaxis()->SetTitle("#sigma_{Gauss} (keV)");
  gsigg->GetXaxis()->SetTitleSize(0.05);
  gsigg->GetYaxis()->SetTitleSize(0.05);
  gsigg->GetYaxis()->SetTitleOffset(1.2);
  cpars->Update();

}


Double_t LangausFun(Double_t *x, Double_t *par) {

  //Fit parameters:
  //par[0]=Width (scale) parameter of Landau density
  //par[1]=Most Probable (MP, location) parameter of Landau density
  //par[2]=Total area (integral -inf to inf, normalization constant)
  //par[3]=Width (sigma) of convoluted Gaussian function
  //
  //In the Landau distribution (represented by the CERNLIB approximation), 
  //the maximum is located at x=-0.22278298 with the location parameter=0.
  //This shift is corrected within this function, so that the actual
  //maximum is identical to the MP parameter.

  // Numeric constants
  Double_t invsq2pi = 0.3989422804014;   // (2 pi)^(-1/2)
  Double_t mpshift  = -0.22278298;       // Landau maximum location

  // Control constants
  Double_t np = 100.0;      // number of convolution steps
  Double_t sc =   5.0;      // convolution extends to +-sc Gaussian sigmas

  // Variables
  Double_t xx;
  Double_t mpc;
  Double_t fland;
  Double_t sum = 0.0;
  Double_t xlow,xupp;
  Double_t step;
  Double_t i;


  // MP shift correction
  mpc = par[1] - mpshift * par[0]; 

  // Range of convolution integral
  xlow = x[0] - sc * par[3];
  xupp = x[0] + sc * par[3];

  step = (xupp-xlow) / np;

  // Convolution integral of Landau and Gaussian by sum
  for(i=1.0; i<=np/2; i++) {
    xx = xlow + (i-.5) * step;
    fland = TMath::Landau(xx,mpc,par[0]) / par[0];
    sum += fland * TMath::Gaus(x[0],xx,par[3]);

    xx = xupp - (i-.5) * step;
    fland = TMath::Landau(xx,mpc,par[0]) / par[0];
    sum += fland * TMath::Gaus(x[0],xx,par[3]);
  }

  return (par[2] * step * sum * invsq2pi / par[3]);
}

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