ROOT logo
// AliTRDcompareDigits.C
//
// Author
//   Ken Oyama
//   Mateusz Ploskon
//
// Example and diagnostics macro to compare digits
// before and after the raw data simulation.
// Please simulate raw data in root format with keeping
// all intermediate data unerased to run the macro.

class Histograms {
public:
  Histograms() {
    adc_all = new TH1F("adc_all", "adc_all", 1025, -1.5, 1023.5 );
  }

  ~Histograms() {
    delete adc_all;
  }

  setattr( Color_t c, Color_t fc, Float_t lw ) {
    if( c  != -1 ) adc_all->SetLineColor( c );
    if( fc != -1 ) adc_all->SetFillColor( fc );
    if( lw != -1 ) adc_all->SetLineWidth( lw );
  }

  TH1F *adc_all; 
};

AliTRDgeometry *gGeo;

void AliTRDcompareDigits( Int_t id_start = 0 , Int_t id_end = 539 )
{
  AliCDBManager *cdb = AliCDBManager::Instance();
  cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  cdb->SetRun(0);
  //AliCDBStorage* localStorage = cdb->GetStorage("local://$ALICE_ROOT/OCDB");
  //  cout << "[I] Is storage set : " << cdb->IsDefaultStorageSet() << endl;
  cout << endl;

  // Read raw data after zero suppression
  AliLog::SetClassDebugLevel("AliTRDRawStream", 10);
  AliLog::SetFileOutput("decodeZS.log");
  AliRawReaderRoot reader("raw.root", 0);
  reader.Select("TRD");
  AliTRDrawData data;
  AliTRDdigitsManager *dmz = data.Raw2Digits(&reader);

  gGeo = new AliTRDgeometry(); 
  Ho   = new Histograms(); // Original
  Hz   = new Histograms(); // Zero suppressed
  Ho->setattr( 46 , 46, -1);
  Hz->setattr( -1 , -1, 2 );

  // Read original data from digits tree
  AliRunLoader *runLoader  = AliRunLoader::Open("galice.root" ,AliConfig::GetDefaultEventFolderName(),"READ");
  AliLoader *loader = runLoader->GetLoader("TRDLoader");
  loader->LoadDigits();
  AliTRDdigitsManager *dmo = new AliTRDdigitsManager();  // Original digits
  dmo->ReadDigits(loader->TreeD());

  for( int id = id_start ; id <= id_end ; id++ ) {
    AliTRDdataArrayI *dao = dmo->GetDigits( id );
    AliTRDdataArrayI *daz = dmz->GetDigits( id );
    dao->Expand();
    daz->Expand();
    analyze_det( id, dao, Ho );
    analyze_det( id, daz, Hz );
    compare_signal_position( id, dao, daz );
  }

  TCanvas *c = new TCanvas("decodeZS", "decodeZS", 800, 500);
  c->Draw();
  c->SetLogy();
  Ho->adc_all->Draw();
  Hz->adc_all->Draw("SAME");
}

//
// Analyze detector digits, printout data and fill histogram
//
void analyze_det( Int_t det, AliTRDdataArrayI *d, Histograms *h )
{
  Int_t        plan = gGeo->GetPlane( det );   // Plane
  Int_t        cham = gGeo->GetChamber( det ); // Chamber
  Int_t        sect = gGeo->GetSector( det );  // Sector (=iDDL)
  Int_t        nRow = gGeo->GetRowMax( plan, cham, sect );
  Int_t        nCol = gGeo->GetColMax( plan );
  Int_t       nTBin = AliTRDcalibDB::Instance()->GetNumberOfTimeBins();
  Int_t       ctype = 0;                       // Chamber type (0:C0, 1:C1)
  Int_t        adc;

  printf("Det=%03d Sector=%02d Stack=%d Layer=%d\n", det,sect, cham, plan );
  // printf("Size=%d\n", d->GetSize());

  for (Int_t irow = 0; irow < nRow; irow++ ) {
    for (Int_t icol = 0; icol < nCol; icol++ ) {
      // printf(" Row=%02d Col=%03d :", irow, icol);
      Int_t signal = 0;
      for (Int_t it = 0; it < nTBin; it++ ) {
 	adc = d->GetData(irow, icol, it);
	// printf(" % 3d", adc );
	h->adc_all->Fill( adc );
	if( adc > 5 ) signal++;
      }
      // if( signal != 0 ) printf(" ... signal!");
      // printf("\n");
    }
  } 
}

//
// Compare two digits array
//
void compare_signal_position( Int_t det, AliTRDdataArrayI *dao, AliTRDdataArrayI *daz )
{
  Int_t        plan = gGeo->GetPlane( det );   // Plane
  Int_t        cham = gGeo->GetChamber( det ); // Chamber
  Int_t        sect = gGeo->GetSector( det );  // Sector (=iDDL)
  Int_t        nRow = gGeo->GetRowMax( plan, cham, sect );
  Int_t        nCol = gGeo->GetColMax( plan );
  Int_t       nTBin = AliTRDcalibDB::Instance()->GetNumberOfTimeBins();
  Int_t       wrong = 0;
  Int_t       adc_o;
  Int_t       adc_z;

  for (Int_t irow = 0; irow < nRow; irow++ ) {
    for (Int_t icol = 0; icol < nCol; icol++ ) {
      for (Int_t it = 0; it < nTBin; it++ ) {
	adc_o = dao->GetData(irow, icol, it);
	adc_z = daz->GetData(irow, icol, it);
	if( adc_o > 5 && adc_o != adc_z ) {
	  printf("              can not find adc=%d at Row=%02d Col=%03d TimeBin=%02d in ZS digits.\n", adc_o, irow, icol, it ); 
	  wrong++;
	}
      }
    }
  } 
  if( wrong != 0 ) printf("               %d wrong ADC hit(s) found !!!\n", wrong);
}
 AliTRDcompareDigits.C:1
 AliTRDcompareDigits.C:2
 AliTRDcompareDigits.C:3
 AliTRDcompareDigits.C:4
 AliTRDcompareDigits.C:5
 AliTRDcompareDigits.C:6
 AliTRDcompareDigits.C:7
 AliTRDcompareDigits.C:8
 AliTRDcompareDigits.C:9
 AliTRDcompareDigits.C:10
 AliTRDcompareDigits.C:11
 AliTRDcompareDigits.C:12
 AliTRDcompareDigits.C:13
 AliTRDcompareDigits.C:14
 AliTRDcompareDigits.C:15
 AliTRDcompareDigits.C:16
 AliTRDcompareDigits.C:17
 AliTRDcompareDigits.C:18
 AliTRDcompareDigits.C:19
 AliTRDcompareDigits.C:20
 AliTRDcompareDigits.C:21
 AliTRDcompareDigits.C:22
 AliTRDcompareDigits.C:23
 AliTRDcompareDigits.C:24
 AliTRDcompareDigits.C:25
 AliTRDcompareDigits.C:26
 AliTRDcompareDigits.C:27
 AliTRDcompareDigits.C:28
 AliTRDcompareDigits.C:29
 AliTRDcompareDigits.C:30
 AliTRDcompareDigits.C:31
 AliTRDcompareDigits.C:32
 AliTRDcompareDigits.C:33
 AliTRDcompareDigits.C:34
 AliTRDcompareDigits.C:35
 AliTRDcompareDigits.C:36
 AliTRDcompareDigits.C:37
 AliTRDcompareDigits.C:38
 AliTRDcompareDigits.C:39
 AliTRDcompareDigits.C:40
 AliTRDcompareDigits.C:41
 AliTRDcompareDigits.C:42
 AliTRDcompareDigits.C:43
 AliTRDcompareDigits.C:44
 AliTRDcompareDigits.C:45
 AliTRDcompareDigits.C:46
 AliTRDcompareDigits.C:47
 AliTRDcompareDigits.C:48
 AliTRDcompareDigits.C:49
 AliTRDcompareDigits.C:50
 AliTRDcompareDigits.C:51
 AliTRDcompareDigits.C:52
 AliTRDcompareDigits.C:53
 AliTRDcompareDigits.C:54
 AliTRDcompareDigits.C:55
 AliTRDcompareDigits.C:56
 AliTRDcompareDigits.C:57
 AliTRDcompareDigits.C:58
 AliTRDcompareDigits.C:59
 AliTRDcompareDigits.C:60
 AliTRDcompareDigits.C:61
 AliTRDcompareDigits.C:62
 AliTRDcompareDigits.C:63
 AliTRDcompareDigits.C:64
 AliTRDcompareDigits.C:65
 AliTRDcompareDigits.C:66
 AliTRDcompareDigits.C:67
 AliTRDcompareDigits.C:68
 AliTRDcompareDigits.C:69
 AliTRDcompareDigits.C:70
 AliTRDcompareDigits.C:71
 AliTRDcompareDigits.C:72
 AliTRDcompareDigits.C:73
 AliTRDcompareDigits.C:74
 AliTRDcompareDigits.C:75
 AliTRDcompareDigits.C:76
 AliTRDcompareDigits.C:77
 AliTRDcompareDigits.C:78
 AliTRDcompareDigits.C:79
 AliTRDcompareDigits.C:80
 AliTRDcompareDigits.C:81
 AliTRDcompareDigits.C:82
 AliTRDcompareDigits.C:83
 AliTRDcompareDigits.C:84
 AliTRDcompareDigits.C:85
 AliTRDcompareDigits.C:86
 AliTRDcompareDigits.C:87
 AliTRDcompareDigits.C:88
 AliTRDcompareDigits.C:89
 AliTRDcompareDigits.C:90
 AliTRDcompareDigits.C:91
 AliTRDcompareDigits.C:92
 AliTRDcompareDigits.C:93
 AliTRDcompareDigits.C:94
 AliTRDcompareDigits.C:95
 AliTRDcompareDigits.C:96
 AliTRDcompareDigits.C:97
 AliTRDcompareDigits.C:98
 AliTRDcompareDigits.C:99
 AliTRDcompareDigits.C:100
 AliTRDcompareDigits.C:101
 AliTRDcompareDigits.C:102
 AliTRDcompareDigits.C:103
 AliTRDcompareDigits.C:104
 AliTRDcompareDigits.C:105
 AliTRDcompareDigits.C:106
 AliTRDcompareDigits.C:107
 AliTRDcompareDigits.C:108
 AliTRDcompareDigits.C:109
 AliTRDcompareDigits.C:110
 AliTRDcompareDigits.C:111
 AliTRDcompareDigits.C:112
 AliTRDcompareDigits.C:113
 AliTRDcompareDigits.C:114
 AliTRDcompareDigits.C:115
 AliTRDcompareDigits.C:116
 AliTRDcompareDigits.C:117
 AliTRDcompareDigits.C:118
 AliTRDcompareDigits.C:119
 AliTRDcompareDigits.C:120
 AliTRDcompareDigits.C:121
 AliTRDcompareDigits.C:122
 AliTRDcompareDigits.C:123
 AliTRDcompareDigits.C:124
 AliTRDcompareDigits.C:125
 AliTRDcompareDigits.C:126
 AliTRDcompareDigits.C:127
 AliTRDcompareDigits.C:128
 AliTRDcompareDigits.C:129
 AliTRDcompareDigits.C:130
 AliTRDcompareDigits.C:131
 AliTRDcompareDigits.C:132
 AliTRDcompareDigits.C:133
 AliTRDcompareDigits.C:134
 AliTRDcompareDigits.C:135
 AliTRDcompareDigits.C:136
 AliTRDcompareDigits.C:137
 AliTRDcompareDigits.C:138
 AliTRDcompareDigits.C:139
 AliTRDcompareDigits.C:140
 AliTRDcompareDigits.C:141
 AliTRDcompareDigits.C:142