ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TH2F.h>
#include <TFile.h>
#include <TGrid.h>
#include <TCanvas.h>
#include <TStopwatch.h>
#include <TStyle.h>
#include <TProfile.h>
#include <TLegend.h>
#include <TLegendEntry.h>
#include <TLatex.h>
#include <TGrid.h>
#include "AliRawReaderDate.h"
#include "AliRawReaderRoot.h"
#include "AliITSRawStreamSDD.h"
#include "AliITSRawStreamSDDCompressed.h"
#endif


void CheckDataSizeSDD(TString datafil="12000188359004.16.root",
		      Int_t firstEv=0, 
		      Int_t lastEv=123456){

  if(datafil.Contains("alien:")) TGrid::Connect("alien:");
  printf("FILE: %s\n",datafil.Data());

  gStyle->SetOptStat(0);
  gStyle->SetTitleFont(42,"XY");
  gStyle->SetLabelFont(42,"XYZ");

  Double_t maxOcc=2500.;
  TH2F* hCellsOnMod=new TH2F("hCellsOnMod","",260,239.5,499.5,500,0.,maxOcc);
  TH2F* hCellsOnDDL=new TH2F("hCellsOnDDL","",24,-0.5,23.5,500,0.,maxOcc*12);
  TH1F* hMaxOccMod=new TH1F("hMaxOccMod","",260,239.5,499.5);
  TH1F* hMaxOccDDL=new TH1F("hMaxOccDDL","",24,-0.5,23.5);

  AliITSDDLModuleMapSDD* dmap=new AliITSDDLModuleMapSDD();
  dmap->SetJun09Map();


  Int_t iev=firstEv;
  AliRawReader *rd; 
  if(datafil.Contains(".root")){
    rd=new AliRawReaderRoot(datafil.Data(),iev);
  }else{
    rd=new AliRawReaderDate(datafil.Data(),iev);
  }

  Bool_t writtenoutput=kFALSE;
  Int_t countMod[260],countDDL[24];
  Int_t maxOccMod[260],maxOccDDL[24];
  for(Int_t im=0; im<260; im++) maxOccMod[im]=0;
  for(Int_t id=0; id<24; id++) maxOccDDL[id]=0;

  do{

    printf("Event # %d\n",iev);
    for(Int_t im=0; im<260; im++) countMod[im]=0;
    for(Int_t id=0; id<24; id++) countDDL[id]=0;
    rd->Reset();
    UChar_t cdhAttr=AliITSRawStreamSDD::ReadBlockAttributes(rd);
    UInt_t amSamplFreq=AliITSRawStreamSDD::ReadAMSamplFreqFromCDH(cdhAttr);
    AliITSRawStream* s=AliITSRawStreamSDD::CreateRawStreamSDD(rd,cdhAttr);
    if(!writtenoutput){
      printf("Use %s raw stream, sampling frequency %d MHz\n",s->ClassName(),amSamplFreq);
      writtenoutput=kTRUE;
    }

    while(s->Next()){
      if(s->IsCompletedModule()==kFALSE && s->IsCompletedDDL()==kFALSE){
	Int_t counts=s->GetSignal();
	if(counts>0){
	  Int_t iDDL=rd->GetDDLID();
	  ++countDDL[iDDL];
	  Int_t iMod=s->GetCarlosId();
	  Int_t modInd=dmap->GetModuleNumber(iDDL,iMod)-240;
	  if(modInd>=0 && modInd<260) ++countMod[modInd];
	}
      }
    }
    for(Int_t im=0; im<260; im++){
      hCellsOnMod->Fill(im+240,countMod[im]);
      if(countMod[im]>maxOccMod[im]) maxOccMod[im]=countMod[im];
    }
    for(Int_t id=0; id<24; id++){
      hCellsOnDDL->Fill(id,countDDL[id]);
      if(countDDL[id]>maxOccDDL[id]) maxOccDDL[id]=countDDL[id];
    }
    iev++;
    
  }while(rd->NextEvent()&&iev<=lastEv);

  for(Int_t im=0; im<260; im++) hMaxOccMod->SetBinContent(im+1,maxOccMod[im]);
  for(Int_t id=0; id<24; id++) hMaxOccDDL->SetBinContent(id+1,maxOccDDL[id]);

  TProfile* hAveOccDDL=hCellsOnDDL->ProfileX();
  TProfile* hAveOccMod=hCellsOnMod->ProfileX();
  TH1D* hOccDstDDL[24];
  Int_t totEv=0;
  for(Int_t i=0; i<24;i++){
    hOccDstDDL[i]=(TH1D*)hCellsOnDDL->ProjectionY(Form("hOccDstDDL%d",i),i+1,i+1);
    printf("DDL %d  Entries %.0f\n",i,hOccDstDDL[i]->Integral());
    totEv=hOccDstDDL[i]->Integral();
  }
  Double_t xmax=hMaxOccDDL->GetMaximum()*1.1;
  Int_t ddlForPlot[4]={9,15,17,21};

  TCanvas* c1= new TCanvas("c1","Module occupancy",1100,750);
  c1->Divide(2,2);
  c1->cd(1);
  gPad->SetLogz();
  hCellsOnMod->GetXaxis()->SetTitle("Module Id");
  hCellsOnMod->GetYaxis()->SetTitle("Number of cells on per event");
  hCellsOnMod->GetYaxis()->SetTitleOffset(1.3);
  hCellsOnMod->Draw("colz");
  c1->cd(3);
  hAveOccMod->GetXaxis()->SetTitle("Module Id");
  hAveOccMod->GetYaxis()->SetTitle("<Occupancy>");
  hAveOccMod->GetYaxis()->SetTitleOffset(1.3);
  hAveOccMod->Draw();
  c1->cd(4);
  hMaxOccMod->GetXaxis()->SetTitle("Module Id");
  hMaxOccMod->GetYaxis()->SetTitle("Maximum Occupancy");
  hMaxOccMod->GetYaxis()->SetTitleOffset(1.3);
  hMaxOccMod->Draw();

  TCanvas* c2= new TCanvas("c2","DDL occupancy",1100,750);
  c2->Divide(2,2);
  c2->cd(1);
  gPad->SetLogz();
  hCellsOnDDL->GetXaxis()->SetTitle("DDL Number");
  hCellsOnDDL->GetYaxis()->SetTitle("Number of cells on per event");
  hCellsOnDDL->GetYaxis()->SetTitleOffset(1.3);
  hCellsOnDDL->Draw("colz");
  TLatex* textev=new TLatex(0.15,0.8,Form("%d events",totEv));
  textev->SetNDC();
  textev->Draw();
  c2->cd(2);
  gPad->SetLogy();
  TLegend* leg=new TLegend(0.6,0.6,0.89,0.89);
  leg->SetFillColor(0);
  for(Int_t i=0; i<4; i++){
    Int_t iddl=ddlForPlot[i];
    hOccDstDDL[iddl]->GetXaxis()->SetTitle("Occupancy");
    hOccDstDDL[iddl]->GetXaxis()->SetRangeUser(0.,xmax);
    hOccDstDDL[iddl]->SetLineColor(i+1);
    if(i==0) hOccDstDDL[iddl]->Draw();
    else hOccDstDDL[iddl]->Draw("same");
    leg->AddEntry(hOccDstDDL[iddl],Form("DDL %d",iddl),"L")->SetTextColor(hOccDstDDL[iddl]->GetLineColor());
  }
  leg->Draw();
  c2->cd(3);
  hAveOccDDL->GetXaxis()->SetTitle("DDL Number");
  hAveOccDDL->GetYaxis()->SetTitle("<Occupancy>");
  hAveOccDDL->GetYaxis()->SetTitleOffset(1.3);
  hAveOccDDL->Draw();
  c2->cd(4);
  hMaxOccDDL->GetXaxis()->SetTitle("DDL Number");
  hMaxOccDDL->GetYaxis()->SetTitle("Maximum Occupancy");
  hMaxOccDDL->GetYaxis()->SetTitleOffset(1.3);
  hMaxOccDDL->Draw();

  TString outfilname=datafil.Data();
  if(outfilname.Contains("alien")){
    outfilname.Remove(0,outfilname.Length()-22);
  }
  outfilname.Prepend("DataSize_");
  printf("%s\n",outfilname.Data());
  TFile* outf=new TFile(outfilname.Data(),"recreate");
  hCellsOnMod->Write();
  hMaxOccMod->Write();
  hCellsOnDDL->Write();
  hMaxOccDDL->Write();
  outf->Close();
}
 CheckDataSizeSDD.C:1
 CheckDataSizeSDD.C:2
 CheckDataSizeSDD.C:3
 CheckDataSizeSDD.C:4
 CheckDataSizeSDD.C:5
 CheckDataSizeSDD.C:6
 CheckDataSizeSDD.C:7
 CheckDataSizeSDD.C:8
 CheckDataSizeSDD.C:9
 CheckDataSizeSDD.C:10
 CheckDataSizeSDD.C:11
 CheckDataSizeSDD.C:12
 CheckDataSizeSDD.C:13
 CheckDataSizeSDD.C:14
 CheckDataSizeSDD.C:15
 CheckDataSizeSDD.C:16
 CheckDataSizeSDD.C:17
 CheckDataSizeSDD.C:18
 CheckDataSizeSDD.C:19
 CheckDataSizeSDD.C:20
 CheckDataSizeSDD.C:21
 CheckDataSizeSDD.C:22
 CheckDataSizeSDD.C:23
 CheckDataSizeSDD.C:24
 CheckDataSizeSDD.C:25
 CheckDataSizeSDD.C:26
 CheckDataSizeSDD.C:27
 CheckDataSizeSDD.C:28
 CheckDataSizeSDD.C:29
 CheckDataSizeSDD.C:30
 CheckDataSizeSDD.C:31
 CheckDataSizeSDD.C:32
 CheckDataSizeSDD.C:33
 CheckDataSizeSDD.C:34
 CheckDataSizeSDD.C:35
 CheckDataSizeSDD.C:36
 CheckDataSizeSDD.C:37
 CheckDataSizeSDD.C:38
 CheckDataSizeSDD.C:39
 CheckDataSizeSDD.C:40
 CheckDataSizeSDD.C:41
 CheckDataSizeSDD.C:42
 CheckDataSizeSDD.C:43
 CheckDataSizeSDD.C:44
 CheckDataSizeSDD.C:45
 CheckDataSizeSDD.C:46
 CheckDataSizeSDD.C:47
 CheckDataSizeSDD.C:48
 CheckDataSizeSDD.C:49
 CheckDataSizeSDD.C:50
 CheckDataSizeSDD.C:51
 CheckDataSizeSDD.C:52
 CheckDataSizeSDD.C:53
 CheckDataSizeSDD.C:54
 CheckDataSizeSDD.C:55
 CheckDataSizeSDD.C:56
 CheckDataSizeSDD.C:57
 CheckDataSizeSDD.C:58
 CheckDataSizeSDD.C:59
 CheckDataSizeSDD.C:60
 CheckDataSizeSDD.C:61
 CheckDataSizeSDD.C:62
 CheckDataSizeSDD.C:63
 CheckDataSizeSDD.C:64
 CheckDataSizeSDD.C:65
 CheckDataSizeSDD.C:66
 CheckDataSizeSDD.C:67
 CheckDataSizeSDD.C:68
 CheckDataSizeSDD.C:69
 CheckDataSizeSDD.C:70
 CheckDataSizeSDD.C:71
 CheckDataSizeSDD.C:72
 CheckDataSizeSDD.C:73
 CheckDataSizeSDD.C:74
 CheckDataSizeSDD.C:75
 CheckDataSizeSDD.C:76
 CheckDataSizeSDD.C:77
 CheckDataSizeSDD.C:78
 CheckDataSizeSDD.C:79
 CheckDataSizeSDD.C:80
 CheckDataSizeSDD.C:81
 CheckDataSizeSDD.C:82
 CheckDataSizeSDD.C:83
 CheckDataSizeSDD.C:84
 CheckDataSizeSDD.C:85
 CheckDataSizeSDD.C:86
 CheckDataSizeSDD.C:87
 CheckDataSizeSDD.C:88
 CheckDataSizeSDD.C:89
 CheckDataSizeSDD.C:90
 CheckDataSizeSDD.C:91
 CheckDataSizeSDD.C:92
 CheckDataSizeSDD.C:93
 CheckDataSizeSDD.C:94
 CheckDataSizeSDD.C:95
 CheckDataSizeSDD.C:96
 CheckDataSizeSDD.C:97
 CheckDataSizeSDD.C:98
 CheckDataSizeSDD.C:99
 CheckDataSizeSDD.C:100
 CheckDataSizeSDD.C:101
 CheckDataSizeSDD.C:102
 CheckDataSizeSDD.C:103
 CheckDataSizeSDD.C:104
 CheckDataSizeSDD.C:105
 CheckDataSizeSDD.C:106
 CheckDataSizeSDD.C:107
 CheckDataSizeSDD.C:108
 CheckDataSizeSDD.C:109
 CheckDataSizeSDD.C:110
 CheckDataSizeSDD.C:111
 CheckDataSizeSDD.C:112
 CheckDataSizeSDD.C:113
 CheckDataSizeSDD.C:114
 CheckDataSizeSDD.C:115
 CheckDataSizeSDD.C:116
 CheckDataSizeSDD.C:117
 CheckDataSizeSDD.C:118
 CheckDataSizeSDD.C:119
 CheckDataSizeSDD.C:120
 CheckDataSizeSDD.C:121
 CheckDataSizeSDD.C:122
 CheckDataSizeSDD.C:123
 CheckDataSizeSDD.C:124
 CheckDataSizeSDD.C:125
 CheckDataSizeSDD.C:126
 CheckDataSizeSDD.C:127
 CheckDataSizeSDD.C:128
 CheckDataSizeSDD.C:129
 CheckDataSizeSDD.C:130
 CheckDataSizeSDD.C:131
 CheckDataSizeSDD.C:132
 CheckDataSizeSDD.C:133
 CheckDataSizeSDD.C:134
 CheckDataSizeSDD.C:135
 CheckDataSizeSDD.C:136
 CheckDataSizeSDD.C:137
 CheckDataSizeSDD.C:138
 CheckDataSizeSDD.C:139
 CheckDataSizeSDD.C:140
 CheckDataSizeSDD.C:141
 CheckDataSizeSDD.C:142
 CheckDataSizeSDD.C:143
 CheckDataSizeSDD.C:144
 CheckDataSizeSDD.C:145
 CheckDataSizeSDD.C:146
 CheckDataSizeSDD.C:147
 CheckDataSizeSDD.C:148
 CheckDataSizeSDD.C:149
 CheckDataSizeSDD.C:150
 CheckDataSizeSDD.C:151
 CheckDataSizeSDD.C:152
 CheckDataSizeSDD.C:153
 CheckDataSizeSDD.C:154
 CheckDataSizeSDD.C:155
 CheckDataSizeSDD.C:156
 CheckDataSizeSDD.C:157
 CheckDataSizeSDD.C:158
 CheckDataSizeSDD.C:159
 CheckDataSizeSDD.C:160
 CheckDataSizeSDD.C:161
 CheckDataSizeSDD.C:162
 CheckDataSizeSDD.C:163
 CheckDataSizeSDD.C:164
 CheckDataSizeSDD.C:165
 CheckDataSizeSDD.C:166
 CheckDataSizeSDD.C:167
 CheckDataSizeSDD.C:168
 CheckDataSizeSDD.C:169
 CheckDataSizeSDD.C:170
 CheckDataSizeSDD.C:171
 CheckDataSizeSDD.C:172
 CheckDataSizeSDD.C:173
 CheckDataSizeSDD.C:174
 CheckDataSizeSDD.C:175
 CheckDataSizeSDD.C:176