1 #if !defined(__CINT__) || defined(__MAKECINT__)
4 #include "AliRawReaderRoot.h"
5 #include "AliTRDrawStream.h"
6 #include "AliTRDdigitsManager.h"
7 #include "AliESDTrdTrack.h"
10 void AliTRDreadRaw(TString filename, Int_t firstEvent = 0, Int_t nEvents = 100,
11 Bool_t readDigits = kTRUE, Bool_t readAtOnce = kTRUE, Int_t debugLevel = -1)
13 // this macro demonstrates the usage of the TRD rawstream
14 // including access to error codes, event statistics, tracklets and tracks
16 Bool_t dump = kFALSE; // dump data from specified MCMs
17 Bool_t oldReadoutOrder = kTRUE; // set correct readout order
19 // create raw reader to retrieve data
20 AliRawReader *reader = new AliRawReaderRoot(filename.Data());
21 reader->Select("TRD");
22 reader->GotoEvent(firstEvent);
25 AliTRDrawStream *rawStream = new AliTRDrawStream(reader);
27 // enable debug output for the rawStream
29 AliLog::SetPrintLocation(kFALSE);
30 AliLog::SetClassDebugLevel("AliTRDrawStream", debugLevel);
33 // create the digits manager if wanted
34 AliTRDdigitsManager *digMgr = 0x0;
36 digMgr = new AliTRDdigitsManager();
37 digMgr->CreateArrays();
38 rawStream->SetDigitsManager(digMgr);
41 // setup MCM readout order and enable error message in case of wrong order
42 if (!oldReadoutOrder) {
43 for (Int_t iMcm = 0; iMcm < 16; iMcm++)
44 AliTRDrawStream::SetMCMReadoutPos(iMcm, iMcm);
46 AliTRDrawStream::SetErrorDebugLevel(AliTRDrawStream::kPosUnexp, 0);
48 // if you want you can dump data from individual MCMs
49 // add further MCMs as needed
51 rawStream->SetDumpMCM(330, 0, 10);
54 Int_t iEvent = firstEvent;
56 // create the array to hold the tracklets
57 TClonesArray *trklArray = new TClonesArray("AliTRDtrackletWord", 500);
59 // create the array to hold the tracks
60 TClonesArray *trkArray = new TClonesArray("AliESDTrdTrack", 50);
62 // open a file to hold output data (for testing only)
63 TFile *f = TFile::Open("raw-out.root", "RECREATE");
64 TTree *trackingTree = new TTree("trackingTree", "tree with tracklets and tracks");
65 trackingTree->Branch("event", &iEvent);
66 trackingTree->Branch("trkl", &trklArray);
67 trackingTree->Branch("trkl", &trkArray);
69 TTree *eventStats = new TTree("stats", "event statistics");
70 AliTRDrawStream::AliTRDrawStats *stats = rawStream->GetStats();
71 eventStats->Branch("event", &iEvent);
72 eventStats->Branch("stats", &stats);
75 while (reader->NextEvent()) {
78 // clear from previous event
80 for (Int_t iDet = 0; iDet < 540; iDet++)
81 digMgr->ClearArrays(iDet);
86 rawStream->ReadEvent();
91 while (rawStream->NextDDL()) {
92 while ((det = rawStream->NextChamber(digMgr)) > -1)
101 if (iEvent >= (firstEvent + nEvents))
105 // retrieve error tree and write output to file
106 TTree *t = rawStream->GetErrorTree();
108 f->WriteTObject(trackingTree);