ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "TFile.h"

#include "AliRawReaderRoot.h"
#include "AliTRDrawStream.h"
#include "AliTRDdigitsManager.h"
#include "AliESDTrdTrack.h"
#endif

void AliTRDreadRaw(TString filename, Int_t firstEvent = 0, Int_t nEvents = 100,
	      Bool_t readDigits = kTRUE, Bool_t readAtOnce = kTRUE, Int_t debugLevel = -1)
{
  // this macro demonstrates the usage of the TRD rawstream
  // including access to error codes, event statistics, tracklets and tracks

  Bool_t dump = kFALSE; // dump data from specified MCMs
  Bool_t oldReadoutOrder = kTRUE; // set correct readout order

  // create raw reader to retrieve data
  AliRawReader *reader = new AliRawReaderRoot(filename.Data());
  reader->Select("TRD");
  reader->GotoEvent(firstEvent);

  // create raw stream
  AliTRDrawStream *rawStream = new AliTRDrawStream(reader);

  // enable debug output for the rawStream
  if (debugLevel > 0) {
    AliLog::SetPrintLocation(kFALSE);
    AliLog::SetClassDebugLevel("AliTRDrawStream", debugLevel);
  }

  // create the digits manager if wanted
  AliTRDdigitsManager *digMgr = 0x0;
  if (readDigits) {
     digMgr = new AliTRDdigitsManager();
     digMgr->CreateArrays();
     rawStream->SetDigitsManager(digMgr);
  }

  // setup MCM readout order and enable error message in case of wrong order
  if (!oldReadoutOrder) {
    for (Int_t iMcm = 0; iMcm < 16; iMcm++)
      AliTRDrawStream::SetMCMReadoutPos(iMcm, iMcm);
  }
  AliTRDrawStream::SetErrorDebugLevel(AliTRDrawStream::kPosUnexp, 0);

  // if you want you can dump data from individual MCMs
  // add further MCMs as needed
  if (dump) {
    rawStream->SetDumpMCM(330, 0, 10);
  }

  Int_t iEvent = firstEvent;

  // create the array to hold the tracklets
  TClonesArray *trklArray = new TClonesArray("AliTRDtrackletWord", 500);

  // create the array to hold the tracks
  TClonesArray *trkArray = new TClonesArray("AliESDTrdTrack", 50);

  // open a file to hold output data (for testing only)
  TFile *f = TFile::Open("raw-out.root", "RECREATE");
  TTree *trackingTree = new TTree("trackingTree", "tree with tracklets and tracks");
  trackingTree->Branch("event", &iEvent);
  trackingTree->Branch("trkl", &trklArray);
  trackingTree->Branch("trkl", &trkArray);

  TTree *eventStats = new TTree("stats", "event statistics");
  AliTRDrawStream::AliTRDrawStats *stats = rawStream->GetStats();
  eventStats->Branch("event", &iEvent);
  eventStats->Branch("stats", &stats);

  // loop over events
  while (reader->NextEvent()) {
    iEvent++;

    // clear from previous event
    if (digMgr) {
      for (Int_t iDet = 0; iDet < 540; iDet++)
	digMgr->ClearArrays(iDet);
    }
    stats->ClearStats();

    if (readAtOnce) {
      rawStream->ReadEvent();
    }
    else {
      Int_t det;

      while (rawStream->NextDDL()) {
	while ((det = rawStream->NextChamber(digMgr)) > -1)
	;
      }
    }

    // store the output
    trackingTree->Fill();
    eventStats->Fill();

    if (iEvent >= (firstEvent + nEvents))
      break;
  }

  // retrieve error tree and write output to file
  TTree *t = rawStream->GetErrorTree();
  f->WriteTObject(t);
  f->WriteTObject(trackingTree);
  eventStats->Write();

  f->Close();
}
 AliTRDreadRaw.C:1
 AliTRDreadRaw.C:2
 AliTRDreadRaw.C:3
 AliTRDreadRaw.C:4
 AliTRDreadRaw.C:5
 AliTRDreadRaw.C:6
 AliTRDreadRaw.C:7
 AliTRDreadRaw.C:8
 AliTRDreadRaw.C:9
 AliTRDreadRaw.C:10
 AliTRDreadRaw.C:11
 AliTRDreadRaw.C:12
 AliTRDreadRaw.C:13
 AliTRDreadRaw.C:14
 AliTRDreadRaw.C:15
 AliTRDreadRaw.C:16
 AliTRDreadRaw.C:17
 AliTRDreadRaw.C:18
 AliTRDreadRaw.C:19
 AliTRDreadRaw.C:20
 AliTRDreadRaw.C:21
 AliTRDreadRaw.C:22
 AliTRDreadRaw.C:23
 AliTRDreadRaw.C:24
 AliTRDreadRaw.C:25
 AliTRDreadRaw.C:26
 AliTRDreadRaw.C:27
 AliTRDreadRaw.C:28
 AliTRDreadRaw.C:29
 AliTRDreadRaw.C:30
 AliTRDreadRaw.C:31
 AliTRDreadRaw.C:32
 AliTRDreadRaw.C:33
 AliTRDreadRaw.C:34
 AliTRDreadRaw.C:35
 AliTRDreadRaw.C:36
 AliTRDreadRaw.C:37
 AliTRDreadRaw.C:38
 AliTRDreadRaw.C:39
 AliTRDreadRaw.C:40
 AliTRDreadRaw.C:41
 AliTRDreadRaw.C:42
 AliTRDreadRaw.C:43
 AliTRDreadRaw.C:44
 AliTRDreadRaw.C:45
 AliTRDreadRaw.C:46
 AliTRDreadRaw.C:47
 AliTRDreadRaw.C:48
 AliTRDreadRaw.C:49
 AliTRDreadRaw.C:50
 AliTRDreadRaw.C:51
 AliTRDreadRaw.C:52
 AliTRDreadRaw.C:53
 AliTRDreadRaw.C:54
 AliTRDreadRaw.C:55
 AliTRDreadRaw.C:56
 AliTRDreadRaw.C:57
 AliTRDreadRaw.C:58
 AliTRDreadRaw.C:59
 AliTRDreadRaw.C:60
 AliTRDreadRaw.C:61
 AliTRDreadRaw.C:62
 AliTRDreadRaw.C:63
 AliTRDreadRaw.C:64
 AliTRDreadRaw.C:65
 AliTRDreadRaw.C:66
 AliTRDreadRaw.C:67
 AliTRDreadRaw.C:68
 AliTRDreadRaw.C:69
 AliTRDreadRaw.C:70
 AliTRDreadRaw.C:71
 AliTRDreadRaw.C:72
 AliTRDreadRaw.C:73
 AliTRDreadRaw.C:74
 AliTRDreadRaw.C:75
 AliTRDreadRaw.C:76
 AliTRDreadRaw.C:77
 AliTRDreadRaw.C:78
 AliTRDreadRaw.C:79
 AliTRDreadRaw.C:80
 AliTRDreadRaw.C:81
 AliTRDreadRaw.C:82
 AliTRDreadRaw.C:83
 AliTRDreadRaw.C:84
 AliTRDreadRaw.C:85
 AliTRDreadRaw.C:86
 AliTRDreadRaw.C:87
 AliTRDreadRaw.C:88
 AliTRDreadRaw.C:89
 AliTRDreadRaw.C:90
 AliTRDreadRaw.C:91
 AliTRDreadRaw.C:92
 AliTRDreadRaw.C:93
 AliTRDreadRaw.C:94
 AliTRDreadRaw.C:95
 AliTRDreadRaw.C:96
 AliTRDreadRaw.C:97
 AliTRDreadRaw.C:98
 AliTRDreadRaw.C:99
 AliTRDreadRaw.C:100
 AliTRDreadRaw.C:101
 AliTRDreadRaw.C:102
 AliTRDreadRaw.C:103
 AliTRDreadRaw.C:104
 AliTRDreadRaw.C:105
 AliTRDreadRaw.C:106
 AliTRDreadRaw.C:107
 AliTRDreadRaw.C:108
 AliTRDreadRaw.C:109
 AliTRDreadRaw.C:110
 AliTRDreadRaw.C:111
 AliTRDreadRaw.C:112
 AliTRDreadRaw.C:113