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 "AliTPCRawStream.h"
39 #include "TTreeStream.h"
42 #include "AliTPCCalibRawBase.h"
44 ClassImp(AliTPCCalibRawBase)
46 AliTPCCalibRawBase::AliTPCCalibRawBase() :
62 fROC(AliTPCROC::Instance())
69 //_____________________________________________________________________
70 AliTPCCalibRawBase::AliTPCCalibRawBase(const AliTPCCalibRawBase &calib) :
72 fFirstTimeBin(calib.fFirstTimeBin),
73 fLastTimeBin(calib.fLastTimeBin),
74 fNevents(calib.fNevents),
75 fDebugLevel(calib.fDebugLevel),
76 fStreamLevel(calib.fStreamLevel),
86 fROC(AliTPCROC::Instance())
93 //_____________________________________________________________________
94 AliTPCCalibRawBase::~AliTPCCalibRawBase()
99 if (fDebugStreamer) delete fDebugStreamer;
101 //_____________________________________________________________________
102 AliTPCCalibRawBase& AliTPCCalibRawBase::operator = (const AliTPCCalibRawBase &source)
105 // assignment operator
107 if (&source == this) return *this;
108 new (this) AliTPCCalibRawBase(source);
112 //_____________________________________________________________________
113 Bool_t AliTPCCalibRawBase::ProcessEventFast(AliTPCRawStreamFast *rawStreamFast)
116 // Event Processing loop - AliTPCRawStreamFast
119 Bool_t withInput = kFALSE;
120 while ( rawStreamFast->NextDDL() ){
121 while ( rawStreamFast->NextChannel() ){
122 Int_t isector = rawStreamFast->GetSector(); // current sector
123 Int_t iRow = rawStreamFast->GetRow(); // current row
124 Int_t iPad = rawStreamFast->GetPad(); // current pad
126 while ( rawStreamFast->NextBunch() ){
127 Int_t startTbin = (Int_t)rawStreamFast->GetStartTimeBin();
128 Int_t endTbin = (Int_t)rawStreamFast->GetEndTimeBin();
129 for (Int_t iTimeBin = startTbin; iTimeBin < endTbin; iTimeBin++){
130 Float_t signal=(Float_t)rawStreamFast->GetSignals()[iTimeBin-startTbin];
131 Update(isector,iRow,iPad,iTimeBin+1,signal);
142 //_____________________________________________________________________
143 Bool_t AliTPCCalibRawBase::ProcessEventFast(AliRawReader *rawReader)
146 // Event processing loop - AliRawReader
148 AliRawEventHeaderBase* eventHeader = (AliRawEventHeaderBase*)rawReader->GetEventHeader();
150 fTimeStamp = eventHeader->Get("Timestamp");
151 fRunNumber = eventHeader->Get("RunNb");
152 fEventType = eventHeader->Get("Type");
154 AliTPCRawStreamFast *rawStreamFast = new AliTPCRawStreamFast(rawReader, (AliAltroMapping**)fMapping);
155 Bool_t res=ProcessEventFast(rawStreamFast);
156 delete rawStreamFast;
159 //_____________________________________________________________________
160 Bool_t AliTPCCalibRawBase::ProcessEvent(AliTPCRawStream *rawStream)
163 // Event Processing loop - AliTPCRawStream
168 Bool_t withInput = kFALSE;
171 fAltroRawStream = static_cast<AliAltroRawStream*>(rawStream);
172 while (rawStream->Next()) {
174 fAltroL1Phase = fAltroRawStream->GetL1Phase();
175 fAltroL1PhaseTB = (fAltroL1Phase*1e09/100.);
177 Int_t isector = rawStream->GetSector(); // current sector
178 Int_t iRow = rawStream->GetRow(); // current row
179 Int_t iPad = rawStream->GetPad(); // current pad
180 Int_t iTimeBin = rawStream->GetTime(); // current time bin
181 Float_t signal = rawStream->GetSignal(); // current ADC signal
183 Update(isector,iRow,iPad,iTimeBin,signal);
192 //_____________________________________________________________________
193 Bool_t AliTPCCalibRawBase::ProcessEvent(AliRawReader *rawReader)
196 // Event processing loop - AliRawReader
198 AliRawEventHeaderBase* eventHeader = (AliRawEventHeaderBase*)rawReader->GetEventHeader();
200 fTimeStamp = eventHeader->Get("Timestamp");
201 fRunNumber = eventHeader->Get("RunNb");
202 fEventType = eventHeader->Get("Type");
205 AliTPCRawStream rawStream(rawReader, (AliAltroMapping**)fMapping);
206 rawReader->Select("TPC");
207 return ProcessEvent(&rawStream);
209 //_____________________________________________________________________
210 Bool_t AliTPCCalibRawBase::ProcessEvent(eventHeaderStruct *event)
213 // Event processing loop - date event
215 AliRawReader *rawReader = new AliRawReaderDate((void*)event);
216 Bool_t result=ProcessEvent(rawReader);
221 //_____________________________________________________________________
222 void AliTPCCalibRawBase::DumpToFile(const Char_t *filename, const Char_t *dir, Bool_t append)
225 // Write class to file
236 TDirectory *backup = gDirectory;
237 TFile f(filename,option.Data());
239 if ( !sDir.IsNull() ){
240 f.mkdir(sDir.Data());
246 if ( backup ) backup->cd();
248 //_____________________________________________________________________
249 TTreeSRedirector *AliTPCCalibRawBase::GetDebugStreamer(){
251 // Get Debug streamer
252 // In case debug streamer not yet initialized and StreamLevel>0 create new one
254 if (fStreamLevel==0) return 0;
255 if (fDebugStreamer) return fDebugStreamer;
258 dsName+="Debug.root";
259 dsName.ReplaceAll(" ","");
260 fDebugStreamer = new TTreeSRedirector(dsName.Data());
261 return fDebugStreamer;