1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 /* $Id: AliTPCCalibRawBase.cxx */
18 /////////////////////////////////////////////////////////////////////////////////////////
20 // Base class for the calibration algorithms using raw data as input //
22 // Origin: Jens Wiechula J.Wiechula@gsi.de //
24 /////////////////////////////////////////////////////////////////////////////////////////
27 #include <TDirectory.h>
31 #include "AliRawReaderDate.h"
32 #include "AliRawReader.h"
33 #include "AliRawEventHeaderBase.h"
34 #include "AliAltroMapping.h"
35 #include "AliAltroRawStream.h"
36 #include "AliTPCROC.h"
37 #include "AliTPCRawStreamFast.h"
38 #include "AliTPCRawStreamV3.h"
39 #include "AliTPCRawStream.h"
41 #include "TTreeStream.h"
44 #include "AliTPCCalibRawBase.h"
46 ClassImp(AliTPCCalibRawBase)
48 AliTPCCalibRawBase::AliTPCCalibRawBase() :
68 fROC(AliTPCROC::Instance())
75 //_____________________________________________________________________
76 AliTPCCalibRawBase::AliTPCCalibRawBase(const AliTPCCalibRawBase &calib) :
78 fFirstTimeBin(calib.fFirstTimeBin),
79 fLastTimeBin(calib.fLastTimeBin),
80 fNevents(calib.fNevents),
81 fDebugLevel(calib.fDebugLevel),
82 fStreamLevel(calib.fStreamLevel),
96 fROC(AliTPCROC::Instance())
103 //_____________________________________________________________________
104 AliTPCCalibRawBase::~AliTPCCalibRawBase()
109 if (fDebugStreamer) delete fDebugStreamer;
111 //_____________________________________________________________________
112 AliTPCCalibRawBase& AliTPCCalibRawBase::operator = (const AliTPCCalibRawBase &source)
115 // assignment operator
117 if (&source == this) return *this;
118 new (this) AliTPCCalibRawBase(source);
122 //_____________________________________________________________________
123 Bool_t AliTPCCalibRawBase::ProcessEventFast(AliTPCRawStreamFast *rawStreamFast)
126 // Event Processing loop - AliTPCRawStreamFast
129 Bool_t withInput = kFALSE;
130 while ( rawStreamFast->NextDDL() ){
131 while ( rawStreamFast->NextChannel() ){
132 Int_t isector = rawStreamFast->GetSector(); // current sector
133 Int_t iRow = rawStreamFast->GetRow(); // current row
134 Int_t iPad = rawStreamFast->GetPad(); // current pad
136 while ( rawStreamFast->NextBunch() ){
137 Int_t startTbin = (Int_t)rawStreamFast->GetStartTimeBin();
138 Int_t endTbin = (Int_t)rawStreamFast->GetEndTimeBin();
139 for (Int_t iTimeBin = startTbin; iTimeBin < endTbin; iTimeBin++){
140 Float_t signal=(Float_t)rawStreamFast->GetSignals()[iTimeBin-startTbin];
141 Update(isector,iRow,iPad,iTimeBin+1,signal);
152 //_____________________________________________________________________
153 Bool_t AliTPCCalibRawBase::ProcessEventFast(AliRawReader *rawReader)
156 // Event processing loop - AliRawReader
158 AliRawEventHeaderBase* eventHeader = (AliRawEventHeaderBase*)rawReader->GetEventHeader();
160 fTimeStamp = eventHeader->Get("Timestamp");
161 fRunNumber = eventHeader->Get("RunNb");
162 fEventType = eventHeader->Get("Type");
164 AliTPCRawStreamFast *rawStreamFast = new AliTPCRawStreamFast(rawReader, (AliAltroMapping**)fMapping);
165 Bool_t res=ProcessEventFast(rawStreamFast);
166 delete rawStreamFast;
169 //_____________________________________________________________________
170 Bool_t AliTPCCalibRawBase::ProcessEvent(AliTPCRawStreamV3 *rawStreamV3)
173 // Event Processing loop - AliTPCRawStreamV3
176 Bool_t withInput = kFALSE;
179 // fAltroRawStream = static_cast<AliAltroRawStream*>(rawStreamV3);
180 while ( rawStreamV3->NextDDL() ){
181 if (AliLog::GetGlobalDebugLevel()>2) rawStreamV3->PrintRCUTrailer();
183 fCurrRCUId=rawStreamV3->GetRCUId();
184 fCurrDDLNum=rawStreamV3->GetDDLNumber();
186 // fAltroL1Phase = fAltroRawStream->GetL1Phase();
187 fAltroL1Phase = rawStreamV3->GetL1Phase();
188 fAltroL1PhaseTB = (fAltroL1Phase*1e09/100.);
189 AliDebug(1, Form("L1Phase: %.2e (%03d)\n",fAltroL1PhaseTB,fCurrDDLNum));
192 while ( rawStreamV3->NextChannel() ){
193 Int_t isector = rawStreamV3->GetSector(); // current sector
194 Int_t iRow = rawStreamV3->GetRow(); // current row
195 Int_t iPad = rawStreamV3->GetPad(); // current pad
196 while ( rawStreamV3->NextBunch() ){
197 Int_t startTbin = (Int_t)rawStreamV3->GetStartTimeBin();
198 // Int_t endTbin = (Int_t)rawStreamV3->GetEndTimeBin();
199 Int_t bunchlength = (Int_t)rawStreamV3->GetBunchLength();
200 const UShort_t *sig = rawStreamV3->GetSignals();
201 for (Int_t iTimeBin = 0; iTimeBin<bunchlength; iTimeBin++){
202 Float_t signal=(Float_t)sig[iTimeBin];
203 // printf("%02d - %03d - %03d - %04d: %.1f\n",isector,iRow,iPad,startTbin,signal);
204 Update(isector,iRow,iPad,startTbin--,signal);
205 fPrevRCUId=fCurrRCUId;
206 fPrevDDLNum=fCurrDDLNum;
217 //_____________________________________________________________________
218 Bool_t AliTPCCalibRawBase::ProcessEvent(AliRawReader *rawReader)
221 // Event processing loop - AliRawReader
223 AliRawEventHeaderBase* eventHeader = (AliRawEventHeaderBase*)rawReader->GetEventHeader();
225 fTimeStamp = eventHeader->Get("Timestamp");
226 fRunNumber = eventHeader->Get("RunNb");
227 fEventType = eventHeader->Get("Type");
229 AliTPCRawStreamV3 *rawStreamV3 = new AliTPCRawStreamV3(rawReader, (AliAltroMapping**)fMapping);
230 Bool_t res=ProcessEvent(rawStreamV3);
234 //_____________________________________________________________________
235 Bool_t AliTPCCalibRawBase::ProcessEvent(AliTPCRawStream *rawStream)
238 // Event Processing loop - AliTPCRawStream
243 Bool_t withInput = kFALSE;
246 fAltroRawStream = static_cast<AliAltroRawStream*>(rawStream);
247 while (rawStream->Next()) {
249 fAltroL1Phase = fAltroRawStream->GetL1Phase();
250 fAltroL1PhaseTB = (fAltroL1Phase*1e09/100.);
252 fPrevRCUId=fCurrRCUId;
253 fCurrRCUId=rawStream->GetRCUId();
254 fPrevDDLNum=fCurrDDLNum;
255 fCurrDDLNum=rawStream->GetDDLNumber();
256 Int_t isector = rawStream->GetSector(); // current sector
257 Int_t iRow = rawStream->GetRow(); // current row
258 Int_t iPad = rawStream->GetPad(); // current pad
259 Int_t iTimeBin = rawStream->GetTime(); // current time bin
260 Float_t signal = rawStream->GetSignal(); // current ADC signal
262 Update(isector,iRow,iPad,iTimeBin,signal);
271 //_____________________________________________________________________
272 Bool_t AliTPCCalibRawBase::ProcessEventOld(AliRawReader *rawReader)
275 // Event processing loop - AliRawReader
277 AliRawEventHeaderBase* eventHeader = (AliRawEventHeaderBase*)rawReader->GetEventHeader();
279 fTimeStamp = eventHeader->Get("Timestamp");
280 fRunNumber = eventHeader->Get("RunNb");
281 fEventType = eventHeader->Get("Type");
284 AliTPCRawStream rawStream(rawReader, (AliAltroMapping**)fMapping);
285 rawReader->Select("TPC");
286 return ProcessEvent(&rawStream);
288 //_____________________________________________________________________
289 Bool_t AliTPCCalibRawBase::ProcessEvent(eventHeaderStruct *event)
292 // Event processing loop - date event
295 fRunNumber=event->eventRunNb;
296 fTimeStamp=event->eventTimestamp;
297 fEventType=event->eventType;
298 AliRawReader *rawReader = new AliRawReaderDate((void*)event);
299 AliTPCRawStreamV3 *rawStreamV3 = new AliTPCRawStreamV3(rawReader, (AliAltroMapping**)fMapping);
300 Bool_t result=ProcessEvent(rawStreamV3);
306 //_____________________________________________________________________
307 void AliTPCCalibRawBase::DumpToFile(const Char_t *filename, const Char_t *dir, Bool_t append)
310 // Write class to file
321 TDirectory *backup = gDirectory;
322 TFile f(filename,option.Data());
324 if ( !sDir.IsNull() ){
325 f.mkdir(sDir.Data());
331 if ( backup ) backup->cd();
333 //_____________________________________________________________________
334 TTreeSRedirector *AliTPCCalibRawBase::GetDebugStreamer(){
336 // Get Debug streamer
337 // In case debug streamer not yet initialized and StreamLevel>0 create new one
339 if (fStreamLevel==0) return 0;
340 if (fDebugStreamer) return fDebugStreamer;
343 dsName+="Debug.root";
344 dsName.ReplaceAll(" ","");
345 fDebugStreamer = new TTreeSRedirector(dsName.Data());
346 return fDebugStreamer;