]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG0/TPC/AliROCRawAnalysisSelector.cxx
LoadMacro("Hmenu.C") allows to execute menu manually
[u/mrichter/AliRoot.git] / PWG0 / TPC / AliROCRawAnalysisSelector.cxx
CommitLineData
eb884e16 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id$ */
17
18
19#include "AliROCRawAnalysisSelector.h"
20
21#include <AliLog.h>
22
c50f9dc0 23#include <AliRawEvent.h>
24#include <AliRawReaderRoot.h>
25#include <AliRawEventHeaderBase.h>
26#include <AliTPCRawStream.h>
27#include <AliTPCParamSR.h>
28
eb884e16 29#include <TFile.h>
30#include <TTree.h>
31#include <TCanvas.h>
c50f9dc0 32#include <TTimeStamp.h>
eb884e16 33
1d7991a5 34#include <TPC/AliTPCRawHistograms.h>
35
eb884e16 36
37ClassImp(AliROCRawAnalysisSelector)
38
39AliROCRawAnalysisSelector::AliROCRawAnalysisSelector() :
c50f9dc0 40 TSelector(),
41 fRawEvent(0),
1d7991a5 42 fTree(0),
43 fParam(0)
eb884e16 44{
45 //
46 // Constructor. Initialization of pointers
47 //
1d7991a5 48
49 for (Int_t i=0; i<kTPCSectors; i++)
50 fHistograms[i] = 0;
51
52 fParam = new AliTPCParamSR;
eb884e16 53}
54
55AliROCRawAnalysisSelector::~AliROCRawAnalysisSelector()
56{
57 //
58 // Destructor
59 //
60}
61
62void AliROCRawAnalysisSelector::SlaveBegin(TTree* tree)
63{
64 //
c50f9dc0 65
66 if (tree != 0)
67 Init(tree);
eb884e16 68}
69
c50f9dc0 70void AliROCRawAnalysisSelector::Init(TTree* tree)
eb884e16 71{
72 // The Init() function is called when the selector needs to initialize
73 // a new tree or chain. Typically here the branch addresses of the tree
74 // will be set. It is normaly not necessary to make changes to the
75 // generated code, but the routine can be extended by the user if needed.
76 // Init() will be called many times when running with PROOF.
77
c50f9dc0 78 fTree = tree;
79
eb884e16 80 // Set branch address
1d7991a5 81 if (tree)
82 {
c50f9dc0 83 AliDebug(AliLog::kInfo, "INFO: Tree found");
84
85 tree->SetBranchAddress("rawevent", &fRawEvent);
86 }
eb884e16 87}
88
89Bool_t AliROCRawAnalysisSelector::Process(Long64_t entry)
90{
91 //
1d7991a5 92 //
eb884e16 93 //
94
1d7991a5 95 AliDebug(AliLog::kInfo, Form("Processing event %lld", entry));
96
dc89d87e 97 fTree->GetTree()->GetEntry(entry);
98
1d7991a5 99 if (!fRawEvent)
100 {
101 AliDebug(AliLog::kError, "fRawEvent empty");
102 return kFALSE;
103 }
104
105 AliRawReaderRoot* rawReader = new AliRawReaderRoot(fRawEvent);
eb884e16 106
1d7991a5 107 const AliRawEventHeaderBase* eventHeader = dynamic_cast<const AliRawEventHeaderBase*> (rawReader->GetEventHeader());
108 if (eventHeader)
109 {
c50f9dc0 110 eventHeader->Print();
111
112 UInt_t timeStamp = eventHeader->Get("Timestamp");
113 UInt_t eventType = eventHeader->Get("Type");
114
1d7991a5 115 AliDebug(AliLog::kInfo, Form("Time stamp: %s, event type %d", TTimeStamp(timeStamp).AsString(), eventType));
c50f9dc0 116 }
eb884e16 117
c50f9dc0 118 AliTPCRawStream* tpcRawStream = new AliTPCRawStream(rawReader);
119
c50f9dc0 120 const Int_t kNIS = fParam->GetNInnerSector();
121 const Int_t kNOS = fParam->GetNOuterSector();
122 const Int_t kNS = kNIS + kNOS;
123
1d7991a5 124 for (Int_t sector = 0; sector < kNS; sector++)
125 {
126 AliDebug(AliLog::kInfo, Form("*** Looking at sector %d ***", sector));
c50f9dc0 127
128 Int_t nRows = 0;
129 Int_t nDDLs = 0, indexDDL = 0;
130
1d7991a5 131 if (sector < kNIS)
132 {
c50f9dc0 133 nRows = fParam->GetNRowLow();
c50f9dc0 134 nDDLs = 2;
1d7991a5 135 indexDDL = sector * 2;
c50f9dc0 136 }
1d7991a5 137 else
138 {
c50f9dc0 139 nRows = fParam->GetNRowUp();
c50f9dc0 140 nDDLs = 4;
1d7991a5 141 indexDDL = (sector-kNIS) * 4 + kNIS * 2;
c50f9dc0 142 }
143
144 // Loas the raw data for corresponding DDLs
145 rawReader->Reset();
146 tpcRawStream->SetOldRCUFormat(kTRUE);
147 rawReader->Select("TPC",indexDDL,indexDDL+nDDLs-1);
c50f9dc0 148
1d7991a5 149 AliDebug(AliLog::kDebug, Form("Selected DDLs %d ... %d", indexDDL, indexDDL+nDDLs-1));
c50f9dc0 150
1d7991a5 151 Int_t count = 0;
c50f9dc0 152
1d7991a5 153 while (tpcRawStream->Next())
154 {
155 if (tpcRawStream->GetSector() != sector)
156 {
157 AliDebug(AliLog::kError, Form("Sector index mismatch ! Expected (%d), but got (%d) !",sector,tpcRawStream->GetSector()));
158 return kFALSE;
159 }
160
161 if ((count++ % 100000) == 0)
162 AliDebug(AliLog::kDebug, Form("Found %d. digit in sector %d: row %d, pad %d, time %d, signal %d", count,
163 tpcRawStream->GetSector(), tpcRawStream->GetRow(), tpcRawStream->GetPad(), tpcRawStream->GetTime(), tpcRawStream->GetSignal()));
164
165 if (!fHistograms[sector])
166 {
167 // not sure if this is still needed, should prevent creation of the histogram in the opened root file
168 gROOT->cd();
169 fHistograms[sector] = new AliTPCRawHistograms(sector);
170 }
171
172 fHistograms[sector]->FillDigit(tpcRawStream);
173 }
c50f9dc0 174 }
dc89d87e 175
176 delete fRawEvent;
177 fRawEvent = 0;
eb884e16 178
179 return kTRUE;
180}
181
182void AliROCRawAnalysisSelector::SlaveTerminate()
183{
184 //
1d7991a5 185 for (Int_t i=0; i<kTPCSectors; i++)
186 if (fHistograms[i])
187 fOutput->Add(fHistograms[i]);
eb884e16 188}
189
190void AliROCRawAnalysisSelector::Terminate()
191{
c50f9dc0 192 AliDebug(AliLog::kInfo, "Terminate....");
193
eb884e16 194 // TODO read from output list for PROOF
195
196 TFile* file = TFile::Open("rocRaw.root", "RECREATE");
197
1d7991a5 198 for (Int_t i=0; i<kTPCSectors; i++)
199 if (fHistograms[i])
200 fHistograms[i]->SaveHistograms();
eb884e16 201
202 file->Close();
1d7991a5 203
204 for (Int_t i=0; i<kTPCSectors; i++)
205 if (fHistograms[i])
206 fHistograms[i]->DrawHistograms();
eb884e16 207}