ROOT logo
#if !defined(__CINT__)
#include <Riostream.h>
#include <TFile.h>
#include <TTree.h>
#include "AliTPCParamSR.h"
#include "AliTPCDigitsArray.h"
#include "AliSimDigits.h"
#include "AliTPCBuffer160.h"
#endif

int AliTPCAltro(Int_t eth=0){
  //eth is a threshold.
  //Digits stored into a file have an amplitude value greater than "eth"
  Int_t offset=1; //this should be equal to the threshold
  /*
    NB the amplitude values stored in the ALTRO file are shifted  by offset 
    because the range for each word goes from 0 to 1023, now due to zero suppression 
    values lower that the threshold never appear.
   */

  Int_t PSecNumber=-1;  //Previous Sector number
  Int_t PRowNumber=-1;  //Previous Row number  
  Int_t PPadNumber=-1;  //Previous Pad number
  Int_t PTimeBin=-1;    //Previous Time-Bin
  Int_t BunchLength=0;
  //AliTPCBuffer160 is used in write mode to generate AltroFormat.dat file
  AliTPCBuffer160 Buffer("AltroFormat.dat",1); 
  ULong_t Count=0;
  Int_t nwords=0;
  Int_t numPackets=0;
  
  const char * inFile_new = "galice.root";
  AliRunLoader *rl = AliRunLoader::Open(inFile_new,"Event","read");

  Int_t nevents=rl->GetNumberOfEvents();
  cout<<"Number of Events:"<<nevents<<endl;
  Int_t choice=0;
  do{
    cout<<"Insert the event number: "; 
    cin>>choice;
  }while (choice<=0 || choice>nevents);
  rl->GetEvent(choice-1);
  AliLoader *tpcloader=rl->GetLoader("TPCLoader");
  tpcloader->LoadDigits();
  TTree *digitsTree=tpcloader->TreeD();

  AliSimDigits digrows, *dummy=&digrows;
  digitsTree->GetBranch("Segment")->SetAddress(&dummy);
  Stat_t nrows = digitsTree->GetEntries();
  cout<<"Number of entries (rows):"<<nrows<<endl;
  // get the TPC parameters
  rl->CdGAFile();
  AliTPCParamSR* param = AliTPC::LoadTPCParam(gFile);
  if (!param)
    cout<<"No TPC parameter"<<endl;
  AliTPCDigitsArray *digarr=new AliTPCDigitsArray;
  digarr->Setup(param);
  digarr->ConnectTree(digitsTree);
  //ofstream ftxt("Data.txt");
  for (Int_t n=0; n<nrows; n++) {
    Int_t sec,row; // sector and row number (in the TPC)
    AliSimDigits *digrow=(AliSimDigits*)digarr->LoadEntry(n);
    param->AdjustSectorRow(digrow->GetID(),sec,row);   

    //cout<<"Sector:"<<sec<<" Row:"<<row<<endl;
    digrow->First();
    do{
      Short_t dig=digrow->CurrentDigit();  //adc
      Int_t time=digrow->CurrentRow();     //time
      Int_t pad =digrow->CurrentColumn();  // pad 
      //cout<<"dig:"<<dig<<" time:"<<time<<" pad:"<<pad<<endl;
           if(dig>eth){
	Count++;
	//ftxt<<"Sec: "<<sec<<" Row: "<<row<<" Pad:"<<pad<<" Time: "<<time<<" ADC:"<<dig<<endl;
	//cout<<"Sec: "<<sec<<" Row: "<<row<<" Pad:"<<pad<<" Time: "<<time<<" ADC:"<<dig<<endl;
	if (PPadNumber==-1){
	  PSecNumber=sec;
	  PRowNumber=row;
	  PPadNumber=pad;
	  // PAmplitude=dig;
	  PTimeBin=time;
	  BunchLength=1;
	  Buffer.FillBuffer(dig-offset);
	  nwords++;
	}//end if
	else{
	  if ( (time==(PTimeBin+1)) &&
	       (PPadNumber==pad) &&
	       (PRowNumber==row) &&
	       (PSecNumber==sec)){
	    BunchLength++;
	  }//end if
	  else{
	    Buffer.FillBuffer(PTimeBin);
	    Buffer.FillBuffer(BunchLength+2);
	    nwords+=2;
	    if ((PPadNumber!=pad)||(PRowNumber!=row)||(PSecNumber!=sec)){
	      //Trailer is formatted and inserted!!
	      Buffer.WriteTrailer(nwords,PPadNumber,PRowNumber,PSecNumber);
	      numPackets++;
	      nwords=0;
	    }//end if
	    
	    BunchLength=1;
	    PPadNumber=pad;
	    PRowNumber=row;
	    PSecNumber=sec;
	  }//end else
	  PTimeBin=time;
	  Buffer.FillBuffer(dig-offset);
	  nwords++;
	}//end else
      }//end if
    } while (digrow->Next());
  }//end for
  
  Buffer.FillBuffer(PTimeBin);
  Buffer.FillBuffer(BunchLength+2);
  nwords+=2;
  Buffer.WriteTrailer(nwords,PPadNumber,PRowNumber,PSecNumber);
 
  numPackets++;
  cout<<"There are "<<Count<<" Digits\n";
  cout<<"Packets "<<numPackets<<"\n";
  //ftxt.close();
  return 0;
}//end macro
 AliTPCAltro.C:1
 AliTPCAltro.C:2
 AliTPCAltro.C:3
 AliTPCAltro.C:4
 AliTPCAltro.C:5
 AliTPCAltro.C:6
 AliTPCAltro.C:7
 AliTPCAltro.C:8
 AliTPCAltro.C:9
 AliTPCAltro.C:10
 AliTPCAltro.C:11
 AliTPCAltro.C:12
 AliTPCAltro.C:13
 AliTPCAltro.C:14
 AliTPCAltro.C:15
 AliTPCAltro.C:16
 AliTPCAltro.C:17
 AliTPCAltro.C:18
 AliTPCAltro.C:19
 AliTPCAltro.C:20
 AliTPCAltro.C:21
 AliTPCAltro.C:22
 AliTPCAltro.C:23
 AliTPCAltro.C:24
 AliTPCAltro.C:25
 AliTPCAltro.C:26
 AliTPCAltro.C:27
 AliTPCAltro.C:28
 AliTPCAltro.C:29
 AliTPCAltro.C:30
 AliTPCAltro.C:31
 AliTPCAltro.C:32
 AliTPCAltro.C:33
 AliTPCAltro.C:34
 AliTPCAltro.C:35
 AliTPCAltro.C:36
 AliTPCAltro.C:37
 AliTPCAltro.C:38
 AliTPCAltro.C:39
 AliTPCAltro.C:40
 AliTPCAltro.C:41
 AliTPCAltro.C:42
 AliTPCAltro.C:43
 AliTPCAltro.C:44
 AliTPCAltro.C:45
 AliTPCAltro.C:46
 AliTPCAltro.C:47
 AliTPCAltro.C:48
 AliTPCAltro.C:49
 AliTPCAltro.C:50
 AliTPCAltro.C:51
 AliTPCAltro.C:52
 AliTPCAltro.C:53
 AliTPCAltro.C:54
 AliTPCAltro.C:55
 AliTPCAltro.C:56
 AliTPCAltro.C:57
 AliTPCAltro.C:58
 AliTPCAltro.C:59
 AliTPCAltro.C:60
 AliTPCAltro.C:61
 AliTPCAltro.C:62
 AliTPCAltro.C:63
 AliTPCAltro.C:64
 AliTPCAltro.C:65
 AliTPCAltro.C:66
 AliTPCAltro.C:67
 AliTPCAltro.C:68
 AliTPCAltro.C:69
 AliTPCAltro.C:70
 AliTPCAltro.C:71
 AliTPCAltro.C:72
 AliTPCAltro.C:73
 AliTPCAltro.C:74
 AliTPCAltro.C:75
 AliTPCAltro.C:76
 AliTPCAltro.C:77
 AliTPCAltro.C:78
 AliTPCAltro.C:79
 AliTPCAltro.C:80
 AliTPCAltro.C:81
 AliTPCAltro.C:82
 AliTPCAltro.C:83
 AliTPCAltro.C:84
 AliTPCAltro.C:85
 AliTPCAltro.C:86
 AliTPCAltro.C:87
 AliTPCAltro.C:88
 AliTPCAltro.C:89
 AliTPCAltro.C:90
 AliTPCAltro.C:91
 AliTPCAltro.C:92
 AliTPCAltro.C:93
 AliTPCAltro.C:94
 AliTPCAltro.C:95
 AliTPCAltro.C:96
 AliTPCAltro.C:97
 AliTPCAltro.C:98
 AliTPCAltro.C:99
 AliTPCAltro.C:100
 AliTPCAltro.C:101
 AliTPCAltro.C:102
 AliTPCAltro.C:103
 AliTPCAltro.C:104
 AliTPCAltro.C:105
 AliTPCAltro.C:106
 AliTPCAltro.C:107
 AliTPCAltro.C:108
 AliTPCAltro.C:109
 AliTPCAltro.C:110
 AliTPCAltro.C:111
 AliTPCAltro.C:112
 AliTPCAltro.C:113
 AliTPCAltro.C:114
 AliTPCAltro.C:115
 AliTPCAltro.C:116
 AliTPCAltro.C:117
 AliTPCAltro.C:118
 AliTPCAltro.C:119
 AliTPCAltro.C:120
 AliTPCAltro.C:121
 AliTPCAltro.C:122
 AliTPCAltro.C:123
 AliTPCAltro.C:124
 AliTPCAltro.C:125
 AliTPCAltro.C:126
 AliTPCAltro.C:127
 AliTPCAltro.C:128