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

// Macro for a z-phi event display of the SDD Raw Data
// Origin: F. Prino,   prino@to.infn.it

void DisplaySDDRawData(TString filename, Int_t firstEv=0, Int_t lastEv=5){


  Bool_t writtenoutput=kFALSE;
  AliITSDDLModuleMapSDD* ddlmap=new AliITSDDLModuleMapSDD();
  ddlmap->SetJun09Map();

  TH2F* hzphi3=new TH2F("hzphi3","Layer 3",1536,-0.5,1535.5,3584,-0.5,3584.5);
  TH2F* hzphi4=new TH2F("hzphi4","Layer 4",2048,-0.5,2047.5,5632,-0.5,5631.5);

  TLine** lA3=new TLine*[5];
  for(Int_t ilin=0;ilin<5;ilin++){
    lA3[ilin]=new TLine((ilin+1)*256,0,(ilin+1)*256,3584.5);
    lA3[ilin]->SetLineColor(kGray);
    lA3[ilin]->SetLineStyle(2);
  }
  TLine** lT3=new TLine*[13];
  for(Int_t ilin=0;ilin<13;ilin++){
    lT3[ilin]=new TLine(0,(ilin+1)*256,1535.5,(ilin+1)*256);
    lT3[ilin]->SetLineColor(kGray);
    lT3[ilin]->SetLineStyle(2);
  }

  TLine** lA4=new TLine*[7];
  for(Int_t ilin=0;ilin<7;ilin++){
    lA4[ilin]=new TLine((ilin+1)*256,0,(ilin+1)*256,5631.5);
    lA4[ilin]->SetLineColor(kGray);
    lA4[ilin]->SetLineStyle(2);
  }
  TLine** lT4=new TLine*[21];
  for(Int_t ilin=0;ilin<21;ilin++){
    lT4[ilin]=new TLine(0,(ilin+1)*256,2047.5,(ilin+1)*256);
    lT4[ilin]->SetLineColor(kGray);
    lT4[ilin]->SetLineStyle(2);
  }

  hzphi3->SetStats(0);
  hzphi4->SetStats(0);

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

  TStopwatch *evtime=new TStopwatch();
  TCanvas* c0 = new TCanvas("cd0","c0",800,800);
  gStyle->SetPalette(1);
  do{
    c0->Clear();				
    c0->Divide(1,2,0.001,0.001);

    evtime->Start();
    printf("Event # %d\n",iev);
    rd->Reset();
    hzphi3->Reset();
    hzphi4->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 lay,lad,det;
	Int_t modID=ddlmap->GetModuleNumber(rd->GetDDLID(),s->GetCarlosId());
	AliITSgeomTGeo::GetModuleId(modID,lay,lad,det);
	Int_t iz=s->GetCoord1()+256*(det-1);
	Int_t iphi=s->GetCoord2()+256*(lad-1)+128*s->GetChannel();
	if(lay==3){
	  hzphi3->SetBinContent(iz+1,iphi+1,s->GetSignal());
	}else if(lay==4){
	  hzphi4->SetBinContent(iz+1,iphi+1,s->GetSignal());
	}
      }
    }
    evtime->Stop();
    printf("**** Event=%d \n",iev);
    evtime->Print("u");
    evtime->Reset();
    iev++;
    
    c0->cd(1);
    hzphi3->Draw("colz");
    for(Int_t ilin=0;ilin<5;ilin++) lA3[ilin]->Draw("same");
    for(Int_t ilin=0;ilin<13;ilin++) lT3[ilin]->Draw("same");
    hzphi3->GetXaxis()->SetTitle("Z (anode)");
    hzphi3->GetYaxis()->SetTitle("PHI (time bin)");
      
    c0->cd(2);
    hzphi4->Draw("colz");
    for(Int_t ilin=0;ilin<7;ilin++) lA4[ilin]->Draw("same");
    for(Int_t ilin=0;ilin<21;ilin++) lT4[ilin]->Draw("same");
    hzphi4->GetXaxis()->SetTitle("Z (anode)");
    hzphi4->GetYaxis()->SetTitle("PHI (time bin)");
    c0->Update();
  }while(rd->NextEvent()&&iev<=lastEv);

}

void DisplaySDDRawData(Int_t nrun, Int_t n2, Int_t chunk=10, Int_t year=2009, Char_t* dir="LHC09b", 
		       Int_t firstEv=21*3, 
		       Int_t lastEv=21*3+1){  
  TGrid::Connect("alien:",0,0,"t");
  TString filnam(Form("alien:///alice/data/%d/%s/%09d/raw/%02d%09d%03d.%02d.root",year,dir,nrun,year-2000,nrun,n2,chunk));
  printf("Open file %s\n",filnam.Data());
  DisplaySDDRawData(filnam,firstEv,lastEv);
}

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