ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "TObjArray.h"
#include "TFile.h"
#include "TTree.h"
#include "TH1F.h"
#include "../ITS/UPGRADE/AliITSUClusterPix.h"
#include "../ITS/UPGRADE/AliITSURecoLayer.h"
#include "../ITS/UPGRADE/AliITSURecoDet.h"
#include "../ITS/UPGRADE/AliITSUHit.h"
#include "../ITS/UPGRADE/AliITSUGeomTGeo.h"
#include "AliITSsegmentation.h"
#include "AliGeomManager.h"
#include "AliStack.h"
#include "AliLoader.h"
#include "AliCDBManager.h"

#include "TROOT.h"
#include "TStyle.h"
#include "TGeoMatrix.h"
#include "TParticle.h"
#include "TCanvas.h"
#include "TPaveStats.h"
#include "TClonesArray.h"

#endif

TObjArray histoArr;
enum {kNPixAll=0,kNPixSPL=1,kDR=0,kDTXodd,kDTXeven,kDTZ, kDTXoddSPL,kDTXevenSPL,kDTZSPL};

TPaveStats* GetStPad(TH1* hst);
TPaveStats* SetStPadPos(TH1* hst,float x1,float x2,float y1,float y2, Int_t stl=-1,Int_t col=-1);
TCanvas* DrawNP(int np, TObjArray* harr=0, TCanvas* cnv=0);
TH1* GetHistoClSize(int npix,int id,TObjArray* harr=0);
void DrawReport(const char* psname, TObjArray* harr=0);


typedef struct {
  Int_t evID;
  Int_t volID;
  Int_t lrID;
  Int_t clID;
  Int_t nPix;
  Int_t nX;
  Int_t nZ;
  Int_t q;
  Float_t pt;
  Float_t eta;
  Float_t phi;
  Float_t xyz[3];
  Float_t dX;
  Float_t dY;
  Float_t dZ;  
  Bool_t split;  
  Bool_t prim;
  Int_t  pdg;
  Int_t  ntr;
} clSumm;

void compClusHits(int nev=-1)
{
  const int kSplit=0x1<<22;
  const int kSplCheck=0x1<<23;
  //
  gSystem->Load("libITSUpgradeBase");
  gSystem->Load("libITSUpgradeSim");
  gSystem->Load("libITSUpgradeRec");
  gROOT->SetStyle("Plain");

  AliCDBManager* man = AliCDBManager::Instance();
  man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  man->SetSpecificStorage("GRP/GRP/Data",
			  Form("local://%s",gSystem->pwd()));
  man->SetSpecificStorage("ITS/Align/Data",
			  Form("local://%s",gSystem->pwd()));
  man->SetSpecificStorage("ITS/Calib/RecoParam",
			  Form("local://%s",gSystem->pwd()));
  man->SetRun(0);


  gAlice=NULL;
  AliRunLoader* runLoader = AliRunLoader::Open("galice.root");
  runLoader->LoadgAlice();

  gAlice = runLoader->GetAliRun();

  runLoader->LoadHeader();
  runLoader->LoadKinematics();
  runLoader->LoadRecPoints();
  runLoader->LoadSDigits();
  runLoader->LoadHits();

  AliLoader *dl = runLoader->GetDetectorLoader("ITS");

  AliGeomManager::LoadGeometry("geometry.root");
  TObjArray algITS;
  AliGeomManager::LoadAlignObjsFromCDBSingleDet("ITS",algITS);
  AliGeomManager::ApplyAlignObjsToGeom(algITS);
  //
  AliITSUGeomTGeo* gm = new AliITSUGeomTGeo(kTRUE);
  AliITSUClusterPix::SetGeom(gm);
  //
  AliITSURecoDet *its = new AliITSURecoDet(gm, "ITSinterface");
  its->CreateClusterArrays();
  //
  Double_t xg1,yg1,zg1=0.,xg0,yg0,zg0=0.,tg0;
  //
  TTree * cluTree = 0x0;
  TTree *hitTree = 0x0;
  TClonesArray *hitList=new TClonesArray("AliITSUHit");
  //
  TObjArray arrMCTracks; // array of hit arrays for each particle
  //
  Float_t xyzClGloF[3];
  Double_t xyzClGlo[3],xyzClTr[3];
  Int_t labels[3];
  int nLab = 0;
  int nlr=its->GetNLayersActive();
  int ntotev = (Int_t)runLoader->GetNumberOfEvents();
  printf("N Events : %i \n",ntotev);
  if (nev>0) ntotev = TMath::Min(nev,ntotev);
  //
  // output tree
  TFile* flOut = TFile::Open("clInfo.root","recreate");
  TTree* trOut = new TTree("clitsu","clitsu");
  clSumm cSum;
  trOut->Branch("evID", &cSum.evID ,"evID/I");
  trOut->Branch("volID",&cSum.volID,"volID/I");
  trOut->Branch("lrID", &cSum.lrID ,"lrID/I");  
  trOut->Branch("clID", &cSum.clID ,"clID/I");  
  trOut->Branch("nPix", &cSum.nPix ,"nPix/I");
  trOut->Branch("nX"  , &cSum.nX   ,"nX/I");
  trOut->Branch("nZ"  , &cSum.nZ   ,"nZ/I");
  trOut->Branch("q"   , &cSum.q    ,"q/I");
  trOut->Branch("pt"  , &cSum.pt   ,"pt/F");  
  trOut->Branch("eta"  ,&cSum.eta  ,"eta/F");  
  trOut->Branch("phi"  , &cSum.phi  ,"phi/F");  
  trOut->Branch("xyz",   cSum.xyz,  "xyz[3]/F");  
  trOut->Branch("dX"  , &cSum.dX   ,"dX/F");
  trOut->Branch("dY"  , &cSum.dY   ,"dY/F");
  trOut->Branch("dZ"  , &cSum.dZ   ,"dZ/F");  
  trOut->Branch("split",&cSum.split,"split/O");
  trOut->Branch("prim", &cSum.prim, "prim/O");
  trOut->Branch("pdg",  &cSum.pdg,  "pdg/I");
  trOut->Branch("ntr",  &cSum.ntr,  "ntr/I");
  //
  for (Int_t iEvent = 0; iEvent < ntotev; iEvent++) {
    printf("\n Event %i \n",iEvent);
    runLoader->GetEvent(iEvent);
    AliStack *stack = runLoader->Stack();
    cluTree=dl->TreeR();
    hitTree=dl->TreeH();
    hitTree->SetBranchAddress("ITS",&hitList);
    // 
    // read clusters
    for (int ilr=nlr;ilr--;) {
      TBranch* br = cluTree->GetBranch(Form("ITSRecPoints%d",ilr));
      if (!br) {printf("Did not find cluster branch for lr %d\n",ilr); exit(1);}
      br->SetAddress(its->GetLayerActive(ilr)->GetClustersAddress());
    }
    cluTree->GetEntry(0); 
    its->ProcessClusters();
    //
    // read hits
    for(Int_t iEnt=0;iEnt<hitTree->GetEntries();iEnt++){//entries loop degli hits
      hitTree->GetEntry(iEnt);
      int nh = hitList->GetEntries();      
      for(Int_t iHit=0; iHit<nh;iHit++){
	AliITSUHit *pHit = (AliITSUHit*)hitList->At(iHit);
	int mcID = pHit->GetTrack();
	TClonesArray* harr = arrMCTracks.GetEntriesFast()>mcID ? (TClonesArray*)arrMCTracks.At(mcID) : 0;
	if (!harr) {
	  harr = new TClonesArray("AliITSUHit"); // 1st encounter of the MC track
	  arrMCTracks.AddAtAndExpand(harr,mcID);
	}
	//
	new ( (*harr)[harr->GetEntriesFast()] ) AliITSUHit(*pHit);
      }
    }
    //
    // compare clusters and hits
    //
    printf(" tree entries: %lld\n",cluTree->GetEntries());
    //
    for (int ilr=0;ilr<nlr;ilr++) {
      AliITSURecoLayer* lr = its->GetLayerActive(ilr);
      TClonesArray* clr = lr->GetClusters();
      int nClu = clr->GetEntries();
      printf("Layer %d : %d clusters\n",ilr,nClu);
      //
      for (int icl=0;icl<nClu;icl++) {
	AliITSUClusterPix *cl = (AliITSUClusterPix*)clr->At(icl);
	int modID = cl->GetVolumeId();
	
	//------------ check if this is a split cluster
	if (!cl->TestBit(kSplCheck)) {
	  cl->SetBit(kSplCheck);
	  // check if there is no other cluster with same label on this module
	  AliITSURecoSens* sens = lr->GetSensorFromID(modID);
	  int nclSn = sens->GetNClusters();
	  int offs = sens->GetFirstClusterId();
	  //	printf("To check for %d (mod:%d) N=%d from %d\n",icl,modID,nclSn,offs);
	  for (int ics=0;ics<nclSn;ics++) {
	    AliITSUClusterPix* clusT = (AliITSUClusterPix*)lr->GetCluster(offs+ics); // access to clusters
	    if (clusT==cl) continue;
	    for (int ilb0=0;ilb0<3;ilb0++) {
	      int lb0 = cl->GetLabel(ilb0); if (lb0<=-1) break;
	      for (int ilb1=0;ilb1<3;ilb1++) {
		int lb1 = clusT->GetLabel(ilb1); if (lb1<=-1) break;
		if (lb1==lb0) {
		  cl->SetBit(kSplit);
		  clusT->SetBit(kSplit);
		  /*
		    printf("Discard clusters of module %d:\n",modID);
		    cl->Print();
		    clusT->Print();
		  */
		  break;
		}
	      }
	    }
	  }
	}
	//------------
	const AliITSsegmentation* segm = gm->GetSegmentation(ilr);
	//
	cl->GetGlobalXYZ(xyzClGloF);
	int clsize = cl->GetNPix();
	for (int i=3;i--;) xyzClGlo[i] = xyzClGloF[i];
	const TGeoHMatrix* mat = gm->GetMatrixSens(modID);
	if (!mat) {printf("failed to get matrix for module %d\n",cl->GetVolumeId());}
	mat->MasterToLocal(xyzClGlo,xyzClTr);
	//
	int col,row;
	segm->LocalToDet(xyzClTr[0],xyzClTr[2],row,col); // effective col/row
	nLab = 0;
	for (int il=0;il<3;il++) {
	  if (cl->GetLabel(il)>=0) labels[nLab++] = cl->GetLabel(il);
	  else break;
	}
	// find hit info
	for (int il=0;il<nLab;il++) {
	  TClonesArray* htArr = (TClonesArray*)arrMCTracks.At(labels[il]);
	  if (!htArr) {printf("did not find MChits for label %d ",labels[il]); cl->Print(); continue;}
	  //
	  int nh = htArr->GetEntriesFast();
	  AliITSUHit *pHit=0;
	  double dst2Max = 1e33;
	  for (int ih=nh;ih--;) {
	    AliITSUHit* tHit = (AliITSUHit*)htArr->At(ih);
	    if (tHit->GetChip()!=modID) continue;
	    tHit->GetPositionG(xg1,yg1,zg1);
	    tHit->GetPositionG0(xg0,yg0,zg0,tg0);
	    double gxyzHDif[3] = { (xg1+xg0)/2 - xyzClGlo[0], (yg1+yg0)/2 - xyzClGlo[1], (zg1+zg0)/2 - xyzClGlo[2] };
	    double dst2 = gxyzHDif[0]*gxyzHDif[0] + gxyzHDif[1]*gxyzHDif[1] + gxyzHDif[2]*gxyzHDif[2];
	    if (dst2<dst2Max) {
	      pHit = tHit;
	      dst2Max = dst2;
	    }
	  }
	  if (!pHit) {
	    printf("did not find MChit for label %d on module %d ",il,modID); 
	    cl->Print(); 
	    htArr->Print();
	    continue;
	  }
	  //
	  pHit->GetPositionG(xg1,yg1,zg1);
	  pHit->GetPositionG0(xg0,yg0,zg0,tg0);
	  //
	  double txyzH[3],gxyzH[3] = { (xg1+xg0)/2, (yg1+yg0)/2, (zg1+zg0)/2 };
	  mat->MasterToLocal(gxyzH,txyzH);
	  double rcl = TMath::Sqrt(xyzClTr[0]*xyzClTr[0]+xyzClTr[1]*xyzClTr[1]);
	  double rht = TMath::Sqrt(txyzH[0]*txyzH[0]+txyzH[1]*txyzH[1]);
	  //
	  GetHistoClSize(clsize,kDR,&histoArr)->Fill((rht-rcl)*1e4);
	  if (cl->TestBit(kSplit)) {
	    if (col%2) GetHistoClSize(clsize,kDTXoddSPL,&histoArr)->Fill((txyzH[0]-xyzClTr[0])*1e4);
	    else       GetHistoClSize(clsize,kDTXevenSPL,&histoArr)->Fill((txyzH[0]-xyzClTr[0])*1e4);
	    GetHistoClSize(clsize,kDTZSPL,&histoArr)->Fill((txyzH[2]-xyzClTr[2])*1e4);
	    GetHistoClSize(0,kNPixSPL,&histoArr)->Fill(clsize);
	  }
	  if (col%2) GetHistoClSize(clsize,kDTXodd,&histoArr)->Fill((txyzH[0]-xyzClTr[0])*1e4);
	  else       GetHistoClSize(clsize,kDTXeven,&histoArr)->Fill((txyzH[0]-xyzClTr[0])*1e4);
	  GetHistoClSize(clsize,kDTZ,&histoArr)->Fill((txyzH[2]-xyzClTr[2])*1e4);
	  GetHistoClSize(0,kNPixAll,&histoArr)->Fill(clsize);
	  //
	  cSum.evID = iEvent;
	  cSum.volID = cl->GetVolumeId();
	  cSum.lrID = ilr;
	  cSum.clID = icl;
	  cSum.nPix = cl->GetNPix();
	  cSum.nX   = cl->GetNx();
	  cSum.nZ   = cl->GetNz();
	  cSum.q    = cl->GetQ();
	  cSum.split = cl->TestBit(kSplit);
	  cSum.dX = (txyzH[0]-xyzClTr[0])*1e4;
	  cSum.dY = (txyzH[1]-xyzClTr[1])*1e4;
	  cSum.dZ = (txyzH[2]-xyzClTr[2])*1e4;
	  int label = cl->GetLabel(0);
	  TParticle* part = 0;
	  if (label>=0 && (part=stack->Particle(label)) ) {
	    cSum.pdg = part->GetPdgCode();
	    cSum.eta = part->Eta();
	    cSum.pt  = part->Pt();
	    cSum.phi = part->Phi();
	    cSum.prim = stack->IsPhysicalPrimary(label);
	  }
	  cSum.ntr = 0;
	  for (int ilb=0;ilb<3;ilb++) if (cl->GetLabel(ilb)>=0) cSum.ntr++;
	  for (int i=0;i<3;i++) cSum.xyz[i] = xyzClGloF[i];
	  //
	  trOut->Fill();
	  /*
	  if (clsize==5) {
	    printf("\nL%d(%c) Mod%d, Cl:%d | %+5.1f %+5.1f (%d/%d)|H:%e %e %e | C:%e %e %e\n",ilr,cl->TestBit(kSplit) ? 'S':'N',
		   modID,icl,(txyzH[0]-xyzClTr[0])*1e4,(txyzH[2]-xyzClTr[2])*1e4, row,col,
		   gxyzH[0],gxyzH[1],gxyzH[2],xyzClGlo[0],xyzClGlo[1],xyzClGlo[2]);
	    cl->Print();
	    pHit->Print();
	    //
	    double a0,b0,c0,a1,b1,c1,e0;
	    pHit->GetPositionL0(a0,b0,c0,e0);
	    pHit->GetPositionL(a1,b1,c1);
	    float cloc[3];
	    cl->GetLocalXYZ(cloc);
	    printf("LocH: %e %e %e | %e %e %e\n",a0,b0,c0,a1,b1,c1);
	    printf("LocC: %e %e %e | %e %e %e\n",cloc[0],cloc[1],cloc[2],xyzClTr[0],xyzClTr[1],xyzClTr[2]);
	  }
	  */
	  //
	}
      }
    }
    
    //    layerClus.Clear();
    //
    arrMCTracks.Delete();
  }//event loop
  //
  flOut->cd();
  trOut->Write();
  delete trOut;
  flOut->Close();
  flOut->Delete();
  DrawReport("clinfo.ps",&histoArr);
  //
}

void DrawReport(const char* psname, TObjArray* harr) 
{
  gStyle->SetOptFit(1);
  if (!harr) harr = &histoArr;
  TCanvas* cnv = new TCanvas("cl","cl",900,600);
  //
  TString psnm1 = psname;
  if (psnm1.IsNull()) psnm1 = "clusters.ps";
  TString psnm0 = psnm1.Data(); 
  psnm0 += "[";
  TString psnm2 = psnm1.Data(); 
  psnm2 += "]";
  cnv->Print(psnm0.Data());
  //
  TH1* clall = GetHistoClSize(0,kNPixAll,harr);
  clall->SetLineColor(kRed);
  clall->Draw();
  TH1* clSpl = GetHistoClSize(0,kNPixSPL,harr);
  clSpl->SetLineColor(kBlue);
  clSpl->Draw("sames");
  gPad->Modified();
  gPad->Update();
  SetStPadPos(clall,0.75,0.97,0.8,1.,-1,clall->GetLineColor());
  SetStPadPos(clSpl,0.75,0.97,0.6,0.8,-1,clSpl->GetLineColor());
  gPad->Modified();
  gPad->Update();
  gPad->SetLogy(1);
  //
  cnv->cd();
  cnv->Print(psnm1.Data());
  //
  // plot cluster sized from 1 to 10
  for (int i=1;i<=10;i++) {
    if (clall->GetBinContent(clall->FindBin(i))<100) continue;
    DrawNP(i,harr,cnv);
    cnv->Print(psnm1.Data());
  }
  cnv->Print(psnm2.Data());
}

//------------------------------------------
TH1* GetHistoClSize(int npix,int id,TObjArray* harr)
{
  // book histos
  TH1* h = 0;
  if (!harr) harr = &histoArr;
  //
  if (npix<1) {
    if (harr->GetEntriesFast()>=id && (h=(TH1*)harr->At(id))) return h;
    h = new TH1F("npixAll","npixAll",150,0.5,54.5); 
    h->SetDirectory(0);
    h->SetLineColor(kRed);
    harr->AddAtAndExpand(h, kNPixAll);
    //
    h = new TH1F("npixSpl","npixSpl",150,0.5,54.5);
    h->SetLineColor(kBlue);
    h->SetDirectory(0);
    harr->AddAtAndExpand(h, kNPixSPL);
    //
    h = (TH1*)harr->At(id);
    if (!h) {printf("Unknown histo id=%d\n",id); exit(1);}
    return h;
  }
  //
  int idh = npix*10+id;
  if (harr->GetEntriesFast()>=idh && (h=(TH1*)harr->At(idh))) return h;
  //
  const int nbin=100;
  const double kdiff=80;
  // need to create set of histos
  //
  h = new TH1F(Form("dxy_npix%d",npix),Form("dr_npix%d",npix),nbin,-kdiff,kdiff);
  h->SetDirectory(0);
  harr->AddAtAndExpand(h, npix*10 + kDR);
  //
  h  = new TH1F(Form("dtxODD_npix%d",npix),Form("dtxODD_npix%d",npix),nbin,-kdiff,kdiff);
  h->SetDirectory(0);
  h->SetLineColor(kRed);
  harr->AddAtAndExpand(h, npix*10 + kDTXodd);
  h  = new TH1F(Form("dtxEVN_npix%d",npix),Form("dtxEVN_npix%d",npix),nbin,-kdiff,kdiff);
  h->SetDirectory(0);
  h->SetLineColor(kBlue);
  harr->AddAtAndExpand(h, npix*10 + kDTXeven);
  //
  h  = new TH1F(Form("dtz_npix%d",npix),Form("dtz_npix%d",npix),nbin,-kdiff,kdiff);
  h->SetLineColor(kGreen);
  h->SetDirectory(0);
  harr->AddAtAndExpand(h, npix*10 + kDTZ);
  //
  //
  h  = new TH1F(Form("SPL_dtxODD_npix%d",npix),Form("SPL_dtxODD_npix%d",npix),nbin,-kdiff,kdiff);
  h->SetLineColor(kMagenta);
  h->SetFillColor(kMagenta);
  h->SetFillStyle(3001);  
  h->SetLineStyle(2);
  h->SetDirectory(0);

  harr->AddAtAndExpand(h, npix*10 + kDTXoddSPL);
  h  = new TH1F(Form("SPL_dtxEVN_npix%d",npix),Form("SPL_dtxEVN_npix%d",npix),nbin,-kdiff,kdiff);
  h->SetLineColor(kCyan);
  h->SetFillColor(kCyan);
  h->SetFillStyle(3006);  
  h->SetLineStyle(2);
  h->SetDirectory(0);
  harr->AddAtAndExpand(h, npix*10 + kDTXevenSPL);
  //
  h  = new TH1F(Form("SPL_dtz_npix%d",npix),Form("SPLdtz_npix%d",npix),nbin,-kdiff,kdiff);
  harr->AddAtAndExpand(h, npix*10 + kDTZSPL);
  h->SetDirectory(0);
  //
  h->SetLineColor(kGreen+2);
  h->SetFillColor(kGreen+2);
  h->SetLineStyle(2);
  h->SetFillStyle(3001);
  h = (TH1*)harr->At(idh);
  if (!h) {printf("Unknown histo id=%d\n",idh); exit(1);}
  return h;
}



TCanvas* DrawNP(int np, TObjArray* harr, TCanvas* cnv)
{
  if (!harr) harr = &histoArr;
  if (!cnv) cnv = new TCanvas(Form("cnv%d",np),Form("cnv%d",np),900,700);
  cnv->Clear();
  cnv->Divide(2,1);
  cnv->cd(1);
  //
  TH1* dxodd = (TH1*)harr->At(np*10+kDTXodd);
  TH1* dxevn = (TH1*)harr->At(np*10+kDTXeven);
  TH1* dxoddS =(TH1*)harr->At(np*10+kDTXoddSPL);
  TH1* dxevnS =(TH1*)harr->At(np*10+kDTXevenSPL);
  double max = TMath::Max(dxodd->GetMaximum(),dxevn->GetMaximum());
  dxodd->SetMaximum(1.1*max);
  dxodd->GetXaxis()->SetTitle("#DeltaX, #mum");
  dxodd->SetTitle(Form("#DeltaX for clSize=%d",np));
  dxodd->Fit("gaus","","");
  dxevn->Fit("gaus","","sames");
  //
  dxoddS->Draw("sames");
  dxevnS->Draw("sames");
  //
  gPad->Modified();
  gPad->Update();
  SetStPadPos(dxodd,0.75,0.97,0.8,1., -1,dxodd->GetLineColor());
  SetStPadPos(dxevn,0.75,0.97,0.6,0.8, -1,dxevn->GetLineColor());
  SetStPadPos(dxoddS,0.75,0.97,0.4,0.6, -1,dxoddS->GetLineColor());
  SetStPadPos(dxevnS,0.75,0.97,0.2,0.4, -1,dxevnS->GetLineColor());
  //
  cnv->cd(2);
  TH1* dz  = (TH1*)harr->At(np*10+kDTZ);
  dz->SetTitle(Form("#DeltaZ for clSize=%d",np));
  dz->GetXaxis()->SetTitle("#DeltaZ, #mum");
  dz->Fit("gaus");
  TH1* dzS = (TH1*)harr->At(np*10+kDTZSPL);
  dz->Draw("sames");
  gPad->Modified();
  gPad->Update();
  SetStPadPos(dz,0.75,0.97,0.8,1., -1, dz->GetLineColor());
  SetStPadPos(dzS,0.75,0.97,0.5,0.7, -1, dzS->GetLineColor());
  gPad->Modified();
  gPad->Update();
  //
  cnv->cd();
  return cnv;
}


TPaveStats* GetStPad(TH1* hst)
{
  TList *lst = hst->GetListOfFunctions();
  if (!lst) return 0;
  int nf = lst->GetSize();
  for (int i=0;i<nf;i++) {
    TPaveStats *fnc = (TPaveStats*) lst->At(i);
    if (fnc->InheritsFrom("TPaveStats")) return fnc;
  }
  return 0;
  //
}


TPaveStats* SetStPadPos(TH1* hst,float x1,float x2,float y1,float y2, Int_t stl, Int_t col)
{
  TPaveStats* pad = GetStPad(hst);
  if (!pad) return 0;
  pad->SetX1NDC( x1 );
  pad->SetX2NDC( x2 );
  pad->SetY1NDC( y1 );
  pad->SetY2NDC( y2 );
  if (stl>=0) pad->SetFillStyle(stl);
  if (col>=0) pad->SetTextColor(col);
  pad->SetFillColor(0);
  //
  gPad->Modified();
  return pad;
}

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