ROOT logo
//_____________________________________________________//
//                                                     //
//    This macro reads AD DDL Raw Data and          //
//    converts it into Digits                          //
//                                                     //
//____________________________________________________ //


void ADRaw2Digits(Int_t nEvent = 5) 
{
     for(int iEvent=0; iEvent<nEvent; iEvent++) {
		printf("=========== EVENT  %d ===========\n",iEvent);
		TString FileName = "raw.root";
		RawStreamEvent(FileName.Data(),iEvent); }
}


Bool_t RawStreamEvent(TString fileName = "./",Int_t iEvent = 0)
{
  // Reads DDL data from fileName

  TStopwatch timer;
  timer.Start();

// Creates a TreeD to dump Digits

  AliRunLoader* rl = AliRunLoader::Open("galice.root");    

  AliADLoader* loader = (AliADLoader*) rl->GetLoader("ADLoader");
  
  if(!loader) {
    AliError("no AD loader found");
    return kFALSE; }

  TTree* treeD  = loader->TreeD();
  if(!treeD) {
      loader->MakeTree("D");
      treeD = loader->TreeD(); }
        
  AliADdigit  digit;
  AliADdigit* pdigit = &digit;
  const Int_t kBufferSize = 4000;
   
  treeD->Branch("AD", "AliADdigit",  &pdigit, kBufferSize);

  AliRawReader* rawReader = 0x0;
  rawReader = new AliRawReaderRoot(fileName); // DDL files
  
  AliADRawStream* rawStream  = new AliADRawStream(rawReader);    
  
  rawReader->GotoEvent(iEvent);  
     
  rawStream->Next();
  
  printf("Data size is %d\n",rawReader->GetDataSize());
  
  for(Int_t i=0; i<16; i++) {
  
      Short_t chargeADC[21];
      for(Int_t iClock=0; iClock < 21; ++iClock) {
	chargeADC[iClock] = rawStream->GetPedestal(i,iClock);
      }

      new(pdigit) AliADdigit(i, (Int_t)rawStream->GetTime(i), (Int_t)rawStream->GetWidth(i), rawStream->GetIntegratorFlag(i, 10),chargeADC); 
      treeD->Fill();
  }
 
// Checks if everything is OK by printing results 

   for(int i=0;i<16;i++) {
 	printf("Channel %d : %d %d \n",i,rawStream->GetADC(i),rawStream->GetTime(i)); }
   //treeD->Print(); printf(" \n"); 
   	
  loader->WriteDigits("OVERWRITE");
  loader->UnloadDigits();
  
  	
	
  delete rawReader;
  delete rawStream;

  timer.Stop();
  timer.Print();
}


 ADRaw2Digits.C:1
 ADRaw2Digits.C:2
 ADRaw2Digits.C:3
 ADRaw2Digits.C:4
 ADRaw2Digits.C:5
 ADRaw2Digits.C:6
 ADRaw2Digits.C:7
 ADRaw2Digits.C:8
 ADRaw2Digits.C:9
 ADRaw2Digits.C:10
 ADRaw2Digits.C:11
 ADRaw2Digits.C:12
 ADRaw2Digits.C:13
 ADRaw2Digits.C:14
 ADRaw2Digits.C:15
 ADRaw2Digits.C:16
 ADRaw2Digits.C:17
 ADRaw2Digits.C:18
 ADRaw2Digits.C:19
 ADRaw2Digits.C:20
 ADRaw2Digits.C:21
 ADRaw2Digits.C:22
 ADRaw2Digits.C:23
 ADRaw2Digits.C:24
 ADRaw2Digits.C:25
 ADRaw2Digits.C:26
 ADRaw2Digits.C:27
 ADRaw2Digits.C:28
 ADRaw2Digits.C:29
 ADRaw2Digits.C:30
 ADRaw2Digits.C:31
 ADRaw2Digits.C:32
 ADRaw2Digits.C:33
 ADRaw2Digits.C:34
 ADRaw2Digits.C:35
 ADRaw2Digits.C:36
 ADRaw2Digits.C:37
 ADRaw2Digits.C:38
 ADRaw2Digits.C:39
 ADRaw2Digits.C:40
 ADRaw2Digits.C:41
 ADRaw2Digits.C:42
 ADRaw2Digits.C:43
 ADRaw2Digits.C:44
 ADRaw2Digits.C:45
 ADRaw2Digits.C:46
 ADRaw2Digits.C:47
 ADRaw2Digits.C:48
 ADRaw2Digits.C:49
 ADRaw2Digits.C:50
 ADRaw2Digits.C:51
 ADRaw2Digits.C:52
 ADRaw2Digits.C:53
 ADRaw2Digits.C:54
 ADRaw2Digits.C:55
 ADRaw2Digits.C:56
 ADRaw2Digits.C:57
 ADRaw2Digits.C:58
 ADRaw2Digits.C:59
 ADRaw2Digits.C:60
 ADRaw2Digits.C:61
 ADRaw2Digits.C:62
 ADRaw2Digits.C:63
 ADRaw2Digits.C:64
 ADRaw2Digits.C:65
 ADRaw2Digits.C:66
 ADRaw2Digits.C:67
 ADRaw2Digits.C:68
 ADRaw2Digits.C:69
 ADRaw2Digits.C:70
 ADRaw2Digits.C:71
 ADRaw2Digits.C:72
 ADRaw2Digits.C:73
 ADRaw2Digits.C:74
 ADRaw2Digits.C:75
 ADRaw2Digits.C:76
 ADRaw2Digits.C:77
 ADRaw2Digits.C:78
 ADRaw2Digits.C:79
 ADRaw2Digits.C:80
 ADRaw2Digits.C:81
 ADRaw2Digits.C:82
 ADRaw2Digits.C:83
 ADRaw2Digits.C:84
 ADRaw2Digits.C:85
 ADRaw2Digits.C:86
 ADRaw2Digits.C:87