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

// Macro to display the SDD Raw Data for 1 DDL
// Origin: F. Prino,   prino@to.infn.it

void PlotSDDRawData(Char_t datafil[100], 
		    Int_t nDDL, 
		    Int_t firstEv=18, 
		    Int_t lastEv=20){

  // Main function

  const Int_t nHybrids=24;
  Bool_t writtenoutput=kFALSE;
  TH2F** histo = new TH2F*[nHybrids];
  for(Int_t i=0;i<nHybrids;i++){
    histo[i]=new TH2F(Form("histo%d",i),"",256,-0.5,255.5,256,-0.5,255.5);
    histo[i]->SetStats(0);
  }

  Bool_t isSingleMod=kFALSE;
  Int_t npx=4;
  Int_t npy=6;
  Int_t xsiz=700;
  Int_t ysiz=700;
  Int_t nHybrToPlot=24;
  Int_t iMod=-1;
  Int_t nCarlos;
  if(nDDL>=240 && nDDL<500){
    iMod=nDDL;
    AliITSDDLModuleMapSDD* dmap=new AliITSDDLModuleMapSDD();
    dmap->SetJun09Map();
    dmap->FindInDDLMap(iMod,nDDL,nCarlos);
    histo[nCarlos*2]->SetTitle(Form("Module %d Side 0",iMod));
    histo[nCarlos*2+1]->SetTitle(Form("Module %d Side 1",iMod));
    isSingleMod=kTRUE;
    npx=2;
    npy=1;
    xsiz=900;
    ysiz=450;
    nHybrToPlot=2;
  }

  Int_t iev=firstEv;
  AliRawReader *rd; 
  if(strstr(datafil,".root")!=0){
    rd=new AliRawReaderRoot(datafil,iev);
  }else{
    rd=new AliRawReaderDate(datafil,iev);
  }
  TStopwatch *evtime=new TStopwatch();
  TCanvas* c0 = new TCanvas("cd0","c0",xsiz,ysiz);
  gStyle->SetPalette(1);

  do{
    c0->Clear();				
    c0->Divide(npx,npy,0.001,0.001);

    evtime->Start();
    printf("Event # %d\n",iev);
    rd->Reset();
    for(Int_t i=0;i<nHybrids;i++) histo[i]->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;
    }

    Int_t iCountNext=0;    
    while(s->Next()){
      iCountNext++;
      if(s->IsCompletedModule()==kFALSE && s->IsCompletedDDL()==kFALSE){
 	Int_t i=s->GetCarlosId()*2+s->GetChannel();
	if(rd->GetDDLID()==nDDL) histo[i]->Fill(s->GetCoord2(),s->GetCoord1(),s->GetSignal());
      }
    }
    evtime->Stop();
    printf("**** Event=%d  \n",iev);
    evtime->Print("u");
    evtime->Reset();
    iev++;
    
    for(Int_t i=0;i<nHybrToPlot;i++){
      c0->cd(i+1);
      if(isSingleMod){
	histo[nCarlos*2+i]->DrawCopy("colz");
      }else{
	histo[i]->DrawCopy("colz");
      }
    }
    c0->Update();
    //    if(histo[nCarlos*2]->GetMaximum()>1) getchar();
  }while(rd->NextEvent()&&iev<=lastEv);

}

void PlotSDDRawData(Int_t nrun, 
		    Int_t n2, 
		    Int_t year=2011, 
		    Char_t* dir="LHC11d_SDD",
		    Int_t nDDL=0, 
		    Int_t firstEv=18, 
		    Int_t lastEv=20){

  // Get file directly from alien

  TGrid::Connect("alien:",0,0,"t");
  Char_t filnam[200];
  sprintf(filnam,"alien:///alice/data/%d/%s/%09d/raw/%02d%09d%03d.10.root",year,dir,nrun,year-2000,nrun,n2);
  printf("Open file %s\n",filnam);
  PlotSDDRawData(filnam,nDDL,firstEv,lastEv);
}

void PlotSDDRawData(Char_t datafil[100], 
		    Int_t nLay, 
		    Int_t nLad, 
		    Int_t nDet,
		    Int_t firstEv, 
		    Int_t lastEv){

  // plot raw data for single module starting from 
  // Layer, Ladder and detector numbers (counted from 1)
  Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(nLay,nLad,nDet);
  PlotSDDRawData(datafil,modIndex,firstEv,lastEv);

}
 PlotSDDRawData.C:1
 PlotSDDRawData.C:2
 PlotSDDRawData.C:3
 PlotSDDRawData.C:4
 PlotSDDRawData.C:5
 PlotSDDRawData.C:6
 PlotSDDRawData.C:7
 PlotSDDRawData.C:8
 PlotSDDRawData.C:9
 PlotSDDRawData.C:10
 PlotSDDRawData.C:11
 PlotSDDRawData.C:12
 PlotSDDRawData.C:13
 PlotSDDRawData.C:14
 PlotSDDRawData.C:15
 PlotSDDRawData.C:16
 PlotSDDRawData.C:17
 PlotSDDRawData.C:18
 PlotSDDRawData.C:19
 PlotSDDRawData.C:20
 PlotSDDRawData.C:21
 PlotSDDRawData.C:22
 PlotSDDRawData.C:23
 PlotSDDRawData.C:24
 PlotSDDRawData.C:25
 PlotSDDRawData.C:26
 PlotSDDRawData.C:27
 PlotSDDRawData.C:28
 PlotSDDRawData.C:29
 PlotSDDRawData.C:30
 PlotSDDRawData.C:31
 PlotSDDRawData.C:32
 PlotSDDRawData.C:33
 PlotSDDRawData.C:34
 PlotSDDRawData.C:35
 PlotSDDRawData.C:36
 PlotSDDRawData.C:37
 PlotSDDRawData.C:38
 PlotSDDRawData.C:39
 PlotSDDRawData.C:40
 PlotSDDRawData.C:41
 PlotSDDRawData.C:42
 PlotSDDRawData.C:43
 PlotSDDRawData.C:44
 PlotSDDRawData.C:45
 PlotSDDRawData.C:46
 PlotSDDRawData.C:47
 PlotSDDRawData.C:48
 PlotSDDRawData.C:49
 PlotSDDRawData.C:50
 PlotSDDRawData.C:51
 PlotSDDRawData.C:52
 PlotSDDRawData.C:53
 PlotSDDRawData.C:54
 PlotSDDRawData.C:55
 PlotSDDRawData.C:56
 PlotSDDRawData.C:57
 PlotSDDRawData.C:58
 PlotSDDRawData.C:59
 PlotSDDRawData.C:60
 PlotSDDRawData.C:61
 PlotSDDRawData.C:62
 PlotSDDRawData.C:63
 PlotSDDRawData.C:64
 PlotSDDRawData.C:65
 PlotSDDRawData.C:66
 PlotSDDRawData.C:67
 PlotSDDRawData.C:68
 PlotSDDRawData.C:69
 PlotSDDRawData.C:70
 PlotSDDRawData.C:71
 PlotSDDRawData.C:72
 PlotSDDRawData.C:73
 PlotSDDRawData.C:74
 PlotSDDRawData.C:75
 PlotSDDRawData.C:76
 PlotSDDRawData.C:77
 PlotSDDRawData.C:78
 PlotSDDRawData.C:79
 PlotSDDRawData.C:80
 PlotSDDRawData.C:81
 PlotSDDRawData.C:82
 PlotSDDRawData.C:83
 PlotSDDRawData.C:84
 PlotSDDRawData.C:85
 PlotSDDRawData.C:86
 PlotSDDRawData.C:87
 PlotSDDRawData.C:88
 PlotSDDRawData.C:89
 PlotSDDRawData.C:90
 PlotSDDRawData.C:91
 PlotSDDRawData.C:92
 PlotSDDRawData.C:93
 PlotSDDRawData.C:94
 PlotSDDRawData.C:95
 PlotSDDRawData.C:96
 PlotSDDRawData.C:97
 PlotSDDRawData.C:98
 PlotSDDRawData.C:99
 PlotSDDRawData.C:100
 PlotSDDRawData.C:101
 PlotSDDRawData.C:102
 PlotSDDRawData.C:103
 PlotSDDRawData.C:104
 PlotSDDRawData.C:105
 PlotSDDRawData.C:106
 PlotSDDRawData.C:107
 PlotSDDRawData.C:108
 PlotSDDRawData.C:109
 PlotSDDRawData.C:110
 PlotSDDRawData.C:111
 PlotSDDRawData.C:112
 PlotSDDRawData.C:113
 PlotSDDRawData.C:114
 PlotSDDRawData.C:115
 PlotSDDRawData.C:116
 PlotSDDRawData.C:117
 PlotSDDRawData.C:118
 PlotSDDRawData.C:119
 PlotSDDRawData.C:120
 PlotSDDRawData.C:121
 PlotSDDRawData.C:122
 PlotSDDRawData.C:123
 PlotSDDRawData.C:124
 PlotSDDRawData.C:125
 PlotSDDRawData.C:126
 PlotSDDRawData.C:127
 PlotSDDRawData.C:128
 PlotSDDRawData.C:129
 PlotSDDRawData.C:130
 PlotSDDRawData.C:131
 PlotSDDRawData.C:132
 PlotSDDRawData.C:133
 PlotSDDRawData.C:134
 PlotSDDRawData.C:135
 PlotSDDRawData.C:136
 PlotSDDRawData.C:137
 PlotSDDRawData.C:138
 PlotSDDRawData.C:139