ROOT logo
 /**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id: AliTPCCalibRawBase.cxx */

/////////////////////////////////////////////////////////////////////////////////////////
//                                                                                     //
//          Base class for the calibration algorithms using raw data as input          //
//                                                                                     //
//   Origin: Jens Wiechula   J.Wiechula@gsi.de                                         //
//                                                                                     //
/////////////////////////////////////////////////////////////////////////////////////////

//Root includes
#include <TDirectory.h>
#include <TFile.h>

//Aliroot includes
#include "AliRawReaderDate.h"
#include "AliRawReader.h"
#include "AliRawEventHeaderBase.h"
#include "AliAltroMapping.h"
#include "AliAltroRawStream.h"
#include "AliTPCROC.h"
#include "AliTPCRawStreamV3.h"
#include "AliLog.h"
#include "TTreeStream.h"
#include "event.h"

#include "AliTPCCalibRawBase.h"

ClassImp(AliTPCCalibRawBase)

AliTPCCalibRawBase::AliTPCCalibRawBase() :
  TNamed(),
  fFirstTimeBin(0),
  fLastTimeBin(1000),
  fNevents(0),
  fDebugLevel(0),
  fStreamLevel(0),
  fRunNumber(0),
  fFirstTimeStamp(0),
  fLastTimeStamp(0),
  fTimeStamp(0),
  fEventType(0),
  fAltroL1Phase(0),
  fAltroL1PhaseTB(0),
  fCurrRCUId(-1),
  fPrevRCUId(-1),
  fCurrDDLNum(-1),
  fPrevDDLNum(-1),
  fUseL1Phase(kTRUE),
  fDebugStreamer(0x0),
  fAltroRawStream(0x0),
  fMapping(0x0),
  fROC(AliTPCROC::Instance())
{
    //
    // default ctor
    //

}
//_____________________________________________________________________
AliTPCCalibRawBase::AliTPCCalibRawBase(const AliTPCCalibRawBase &calib) :
  TNamed(calib),
  fFirstTimeBin(calib.fFirstTimeBin),
  fLastTimeBin(calib.fLastTimeBin),
  fNevents(calib.fNevents),
  fDebugLevel(calib.fDebugLevel),
  fStreamLevel(calib.fStreamLevel),
  fRunNumber(calib.fRunNumber),
  fFirstTimeStamp(calib.fFirstTimeStamp),
  fLastTimeStamp(calib.fLastTimeStamp),
  fTimeStamp(0),
  fEventType(0),
  fAltroL1Phase(0),
  fAltroL1PhaseTB(0),
  fCurrRCUId(-1),
  fPrevRCUId(-1),
  fCurrDDLNum(-1),
  fPrevDDLNum(-1),
  fUseL1Phase(kTRUE),
  fDebugStreamer(0x0),
  fAltroRawStream(0x0),
  fMapping(0x0),
  fROC(AliTPCROC::Instance())
{
    //
    // copy ctor
    //
  
}
//_____________________________________________________________________
AliTPCCalibRawBase::~AliTPCCalibRawBase()
{
  //
  // dtor
  //
  if (fDebugStreamer) delete fDebugStreamer;
}
//_____________________________________________________________________
  AliTPCCalibRawBase& AliTPCCalibRawBase::operator = (const  AliTPCCalibRawBase &source)
  {
    //
    // assignment operator
    //
    if (&source == this) return *this;
    new (this) AliTPCCalibRawBase(source);
    
    return *this;
  }
//_____________________________________________________________________
Bool_t AliTPCCalibRawBase::ProcessEvent(AliTPCRawStreamV3 * const rawStreamV3)
{
  //
  // Event Processing loop - AliTPCRawStreamV3
  //
  ResetEvent();
  Bool_t withInput = kFALSE;
  fAltroL1Phase=0;
  fAltroL1PhaseTB=0;
//   fAltroRawStream = static_cast<AliAltroRawStream*>(rawStreamV3);
  while ( rawStreamV3->NextDDL() ){
    if (AliLog::GetGlobalDebugLevel()>2) rawStreamV3->PrintRCUTrailer();
    fPrevDDLNum=-1;
    fCurrRCUId=rawStreamV3->GetRCUId();
    fCurrDDLNum=rawStreamV3->GetDDLNumber();
    if (fUseL1Phase){
//         fAltroL1Phase  = fAltroRawStream->GetL1Phase();
      fAltroL1Phase  = rawStreamV3->GetL1Phase();
      fAltroL1PhaseTB = (fAltroL1Phase*1e09/100.);
      AliDebug(1, Form("L1Phase: %.2e (%03d)\n",fAltroL1PhaseTB,fCurrDDLNum));
    }
    UpdateDDL();
    while ( rawStreamV3->NextChannel() ){
      Int_t isector  = rawStreamV3->GetSector();                       //  current sector
      Int_t iRow     = rawStreamV3->GetRow();                          //  current row
      Int_t iPad     = rawStreamV3->GetPad();                          //  current pad
      while ( rawStreamV3->NextBunch() ){
        UInt_t  startTbin    = rawStreamV3->GetStartTimeBin();
//         Int_t  endTbin      = (Int_t)rawStreamV3->GetEndTimeBin();
        Int_t  bunchlength  = rawStreamV3->GetBunchLength();
        const UShort_t *sig = rawStreamV3->GetSignals();
        ProcessBunch(isector,iRow,iPad,bunchlength,startTbin,sig);
        for (Int_t iTimeBin = 0; iTimeBin<bunchlength; iTimeBin++){
          Float_t signal=(Float_t)sig[iTimeBin];
//            printf("%02d - %03d - %03d - %04d: %.1f\n",isector,iRow,iPad,startTbin,signal);
          Update(isector,iRow,iPad,startTbin--,signal);
          fPrevRCUId=fCurrRCUId;
          fPrevDDLNum=fCurrDDLNum;
          withInput = kTRUE;
        }
      }
    }
  }
  if (withInput){
    EndEvent();
  }
  return withInput;
}
//_____________________________________________________________________
Bool_t AliTPCCalibRawBase::ProcessEvent(AliRawReader * const rawReader)
{
  //
  //  Event processing loop - AliRawReader
  //
  AliRawEventHeaderBase* eventHeader = (AliRawEventHeaderBase*)rawReader->GetEventHeader();
  if (eventHeader){
    fTimeStamp   = eventHeader->Get("Timestamp");
    fRunNumber = eventHeader->Get("RunNb");
    fEventType = eventHeader->Get("Type");
  }
  if (!fFirstTimeStamp) fFirstTimeStamp=fTimeStamp;

  AliTPCRawStreamV3 *rawStreamV3 = new AliTPCRawStreamV3(rawReader, (AliAltroMapping**)fMapping);
  Bool_t res=ProcessEvent(rawStreamV3);
  
  fLastTimeStamp=fTimeStamp;
  
  delete rawStreamV3;
  return res;
}
//_____________________________________________________________________
Bool_t AliTPCCalibRawBase::ProcessEvent(eventHeaderStruct * const event)
{
  //
  //  Event processing loop - date event
  //

  fRunNumber=event->eventRunNb;
  fTimeStamp=event->eventTimestamp;
  if (!fFirstTimeStamp) fFirstTimeStamp=fTimeStamp;
  fLastTimeStamp=fTimeStamp;
  fEventType=event->eventType;
  AliRawReader *rawReader = new AliRawReaderDate((void*)event);
  AliTPCRawStreamV3 *rawStreamV3 = new AliTPCRawStreamV3(rawReader, (AliAltroMapping**)fMapping);
  Bool_t result=ProcessEvent(rawStreamV3);
  delete rawStreamV3;
  delete rawReader;
  return result;

}
//_____________________________________________________________________
void AliTPCCalibRawBase::DumpToFile(const Char_t *filename, const Char_t *dir, Bool_t append)
{
    //
    //  Write class to file
    //
  
  TString sDir(dir);
  TString option;
  
  if ( append )
    option = "update";
  else
    option = "recreate";
  
  TDirectory *backup = gDirectory;
  TFile f(filename,option.Data());
  f.cd();
  if ( !sDir.IsNull() ){
    f.mkdir(sDir.Data());
    f.cd(sDir);
  }
  this->Write();
  f.Close();
  
  if ( backup ) backup->cd();
}
//_____________________________________________________________________
TTreeSRedirector *AliTPCCalibRawBase::GetDebugStreamer(){
  //
  // Get Debug streamer
  // In case debug streamer not yet initialized and StreamLevel>0 create new one
  //
  if (fStreamLevel==0) return 0;
  if (fDebugStreamer) return fDebugStreamer;
  TString dsName;
  dsName=GetName();
  dsName+="Debug.root";
  dsName.ReplaceAll(" ","");
  fDebugStreamer = new TTreeSRedirector(dsName.Data());
  return fDebugStreamer;
}
//_____________________________________________________________________
void AliTPCCalibRawBase::MergeBase(const AliTPCCalibRawBase *calib)
{
  //
  // merge this with base
  //
  if (calib->fFirstTimeStamp<fFirstTimeStamp) fFirstTimeStamp=calib->fFirstTimeStamp;
  if (calib->fLastTimeStamp>fLastTimeStamp)   fLastTimeStamp =calib->fLastTimeStamp;
}

 AliTPCCalibRawBase.cxx:1
 AliTPCCalibRawBase.cxx:2
 AliTPCCalibRawBase.cxx:3
 AliTPCCalibRawBase.cxx:4
 AliTPCCalibRawBase.cxx:5
 AliTPCCalibRawBase.cxx:6
 AliTPCCalibRawBase.cxx:7
 AliTPCCalibRawBase.cxx:8
 AliTPCCalibRawBase.cxx:9
 AliTPCCalibRawBase.cxx:10
 AliTPCCalibRawBase.cxx:11
 AliTPCCalibRawBase.cxx:12
 AliTPCCalibRawBase.cxx:13
 AliTPCCalibRawBase.cxx:14
 AliTPCCalibRawBase.cxx:15
 AliTPCCalibRawBase.cxx:16
 AliTPCCalibRawBase.cxx:17
 AliTPCCalibRawBase.cxx:18
 AliTPCCalibRawBase.cxx:19
 AliTPCCalibRawBase.cxx:20
 AliTPCCalibRawBase.cxx:21
 AliTPCCalibRawBase.cxx:22
 AliTPCCalibRawBase.cxx:23
 AliTPCCalibRawBase.cxx:24
 AliTPCCalibRawBase.cxx:25
 AliTPCCalibRawBase.cxx:26
 AliTPCCalibRawBase.cxx:27
 AliTPCCalibRawBase.cxx:28
 AliTPCCalibRawBase.cxx:29
 AliTPCCalibRawBase.cxx:30
 AliTPCCalibRawBase.cxx:31
 AliTPCCalibRawBase.cxx:32
 AliTPCCalibRawBase.cxx:33
 AliTPCCalibRawBase.cxx:34
 AliTPCCalibRawBase.cxx:35
 AliTPCCalibRawBase.cxx:36
 AliTPCCalibRawBase.cxx:37
 AliTPCCalibRawBase.cxx:38
 AliTPCCalibRawBase.cxx:39
 AliTPCCalibRawBase.cxx:40
 AliTPCCalibRawBase.cxx:41
 AliTPCCalibRawBase.cxx:42
 AliTPCCalibRawBase.cxx:43
 AliTPCCalibRawBase.cxx:44
 AliTPCCalibRawBase.cxx:45
 AliTPCCalibRawBase.cxx:46
 AliTPCCalibRawBase.cxx:47
 AliTPCCalibRawBase.cxx:48
 AliTPCCalibRawBase.cxx:49
 AliTPCCalibRawBase.cxx:50
 AliTPCCalibRawBase.cxx:51
 AliTPCCalibRawBase.cxx:52
 AliTPCCalibRawBase.cxx:53
 AliTPCCalibRawBase.cxx:54
 AliTPCCalibRawBase.cxx:55
 AliTPCCalibRawBase.cxx:56
 AliTPCCalibRawBase.cxx:57
 AliTPCCalibRawBase.cxx:58
 AliTPCCalibRawBase.cxx:59
 AliTPCCalibRawBase.cxx:60
 AliTPCCalibRawBase.cxx:61
 AliTPCCalibRawBase.cxx:62
 AliTPCCalibRawBase.cxx:63
 AliTPCCalibRawBase.cxx:64
 AliTPCCalibRawBase.cxx:65
 AliTPCCalibRawBase.cxx:66
 AliTPCCalibRawBase.cxx:67
 AliTPCCalibRawBase.cxx:68
 AliTPCCalibRawBase.cxx:69
 AliTPCCalibRawBase.cxx:70
 AliTPCCalibRawBase.cxx:71
 AliTPCCalibRawBase.cxx:72
 AliTPCCalibRawBase.cxx:73
 AliTPCCalibRawBase.cxx:74
 AliTPCCalibRawBase.cxx:75
 AliTPCCalibRawBase.cxx:76
 AliTPCCalibRawBase.cxx:77
 AliTPCCalibRawBase.cxx:78
 AliTPCCalibRawBase.cxx:79
 AliTPCCalibRawBase.cxx:80
 AliTPCCalibRawBase.cxx:81
 AliTPCCalibRawBase.cxx:82
 AliTPCCalibRawBase.cxx:83
 AliTPCCalibRawBase.cxx:84
 AliTPCCalibRawBase.cxx:85
 AliTPCCalibRawBase.cxx:86
 AliTPCCalibRawBase.cxx:87
 AliTPCCalibRawBase.cxx:88
 AliTPCCalibRawBase.cxx:89
 AliTPCCalibRawBase.cxx:90
 AliTPCCalibRawBase.cxx:91
 AliTPCCalibRawBase.cxx:92
 AliTPCCalibRawBase.cxx:93
 AliTPCCalibRawBase.cxx:94
 AliTPCCalibRawBase.cxx:95
 AliTPCCalibRawBase.cxx:96
 AliTPCCalibRawBase.cxx:97
 AliTPCCalibRawBase.cxx:98
 AliTPCCalibRawBase.cxx:99
 AliTPCCalibRawBase.cxx:100
 AliTPCCalibRawBase.cxx:101
 AliTPCCalibRawBase.cxx:102
 AliTPCCalibRawBase.cxx:103
 AliTPCCalibRawBase.cxx:104
 AliTPCCalibRawBase.cxx:105
 AliTPCCalibRawBase.cxx:106
 AliTPCCalibRawBase.cxx:107
 AliTPCCalibRawBase.cxx:108
 AliTPCCalibRawBase.cxx:109
 AliTPCCalibRawBase.cxx:110
 AliTPCCalibRawBase.cxx:111
 AliTPCCalibRawBase.cxx:112
 AliTPCCalibRawBase.cxx:113
 AliTPCCalibRawBase.cxx:114
 AliTPCCalibRawBase.cxx:115
 AliTPCCalibRawBase.cxx:116
 AliTPCCalibRawBase.cxx:117
 AliTPCCalibRawBase.cxx:118
 AliTPCCalibRawBase.cxx:119
 AliTPCCalibRawBase.cxx:120
 AliTPCCalibRawBase.cxx:121
 AliTPCCalibRawBase.cxx:122
 AliTPCCalibRawBase.cxx:123
 AliTPCCalibRawBase.cxx:124
 AliTPCCalibRawBase.cxx:125
 AliTPCCalibRawBase.cxx:126
 AliTPCCalibRawBase.cxx:127
 AliTPCCalibRawBase.cxx:128
 AliTPCCalibRawBase.cxx:129
 AliTPCCalibRawBase.cxx:130
 AliTPCCalibRawBase.cxx:131
 AliTPCCalibRawBase.cxx:132
 AliTPCCalibRawBase.cxx:133
 AliTPCCalibRawBase.cxx:134
 AliTPCCalibRawBase.cxx:135
 AliTPCCalibRawBase.cxx:136
 AliTPCCalibRawBase.cxx:137
 AliTPCCalibRawBase.cxx:138
 AliTPCCalibRawBase.cxx:139
 AliTPCCalibRawBase.cxx:140
 AliTPCCalibRawBase.cxx:141
 AliTPCCalibRawBase.cxx:142
 AliTPCCalibRawBase.cxx:143
 AliTPCCalibRawBase.cxx:144
 AliTPCCalibRawBase.cxx:145
 AliTPCCalibRawBase.cxx:146
 AliTPCCalibRawBase.cxx:147
 AliTPCCalibRawBase.cxx:148
 AliTPCCalibRawBase.cxx:149
 AliTPCCalibRawBase.cxx:150
 AliTPCCalibRawBase.cxx:151
 AliTPCCalibRawBase.cxx:152
 AliTPCCalibRawBase.cxx:153
 AliTPCCalibRawBase.cxx:154
 AliTPCCalibRawBase.cxx:155
 AliTPCCalibRawBase.cxx:156
 AliTPCCalibRawBase.cxx:157
 AliTPCCalibRawBase.cxx:158
 AliTPCCalibRawBase.cxx:159
 AliTPCCalibRawBase.cxx:160
 AliTPCCalibRawBase.cxx:161
 AliTPCCalibRawBase.cxx:162
 AliTPCCalibRawBase.cxx:163
 AliTPCCalibRawBase.cxx:164
 AliTPCCalibRawBase.cxx:165
 AliTPCCalibRawBase.cxx:166
 AliTPCCalibRawBase.cxx:167
 AliTPCCalibRawBase.cxx:168
 AliTPCCalibRawBase.cxx:169
 AliTPCCalibRawBase.cxx:170
 AliTPCCalibRawBase.cxx:171
 AliTPCCalibRawBase.cxx:172
 AliTPCCalibRawBase.cxx:173
 AliTPCCalibRawBase.cxx:174
 AliTPCCalibRawBase.cxx:175
 AliTPCCalibRawBase.cxx:176
 AliTPCCalibRawBase.cxx:177
 AliTPCCalibRawBase.cxx:178
 AliTPCCalibRawBase.cxx:179
 AliTPCCalibRawBase.cxx:180
 AliTPCCalibRawBase.cxx:181
 AliTPCCalibRawBase.cxx:182
 AliTPCCalibRawBase.cxx:183
 AliTPCCalibRawBase.cxx:184
 AliTPCCalibRawBase.cxx:185
 AliTPCCalibRawBase.cxx:186
 AliTPCCalibRawBase.cxx:187
 AliTPCCalibRawBase.cxx:188
 AliTPCCalibRawBase.cxx:189
 AliTPCCalibRawBase.cxx:190
 AliTPCCalibRawBase.cxx:191
 AliTPCCalibRawBase.cxx:192
 AliTPCCalibRawBase.cxx:193
 AliTPCCalibRawBase.cxx:194
 AliTPCCalibRawBase.cxx:195
 AliTPCCalibRawBase.cxx:196
 AliTPCCalibRawBase.cxx:197
 AliTPCCalibRawBase.cxx:198
 AliTPCCalibRawBase.cxx:199
 AliTPCCalibRawBase.cxx:200
 AliTPCCalibRawBase.cxx:201
 AliTPCCalibRawBase.cxx:202
 AliTPCCalibRawBase.cxx:203
 AliTPCCalibRawBase.cxx:204
 AliTPCCalibRawBase.cxx:205
 AliTPCCalibRawBase.cxx:206
 AliTPCCalibRawBase.cxx:207
 AliTPCCalibRawBase.cxx:208
 AliTPCCalibRawBase.cxx:209
 AliTPCCalibRawBase.cxx:210
 AliTPCCalibRawBase.cxx:211
 AliTPCCalibRawBase.cxx:212
 AliTPCCalibRawBase.cxx:213
 AliTPCCalibRawBase.cxx:214
 AliTPCCalibRawBase.cxx:215
 AliTPCCalibRawBase.cxx:216
 AliTPCCalibRawBase.cxx:217
 AliTPCCalibRawBase.cxx:218
 AliTPCCalibRawBase.cxx:219
 AliTPCCalibRawBase.cxx:220
 AliTPCCalibRawBase.cxx:221
 AliTPCCalibRawBase.cxx:222
 AliTPCCalibRawBase.cxx:223
 AliTPCCalibRawBase.cxx:224
 AliTPCCalibRawBase.cxx:225
 AliTPCCalibRawBase.cxx:226
 AliTPCCalibRawBase.cxx:227
 AliTPCCalibRawBase.cxx:228
 AliTPCCalibRawBase.cxx:229
 AliTPCCalibRawBase.cxx:230
 AliTPCCalibRawBase.cxx:231
 AliTPCCalibRawBase.cxx:232
 AliTPCCalibRawBase.cxx:233
 AliTPCCalibRawBase.cxx:234
 AliTPCCalibRawBase.cxx:235
 AliTPCCalibRawBase.cxx:236
 AliTPCCalibRawBase.cxx:237
 AliTPCCalibRawBase.cxx:238
 AliTPCCalibRawBase.cxx:239
 AliTPCCalibRawBase.cxx:240
 AliTPCCalibRawBase.cxx:241
 AliTPCCalibRawBase.cxx:242
 AliTPCCalibRawBase.cxx:243
 AliTPCCalibRawBase.cxx:244
 AliTPCCalibRawBase.cxx:245
 AliTPCCalibRawBase.cxx:246
 AliTPCCalibRawBase.cxx:247
 AliTPCCalibRawBase.cxx:248
 AliTPCCalibRawBase.cxx:249
 AliTPCCalibRawBase.cxx:250
 AliTPCCalibRawBase.cxx:251
 AliTPCCalibRawBase.cxx:252
 AliTPCCalibRawBase.cxx:253
 AliTPCCalibRawBase.cxx:254
 AliTPCCalibRawBase.cxx:255
 AliTPCCalibRawBase.cxx:256
 AliTPCCalibRawBase.cxx:257
 AliTPCCalibRawBase.cxx:258
 AliTPCCalibRawBase.cxx:259
 AliTPCCalibRawBase.cxx:260
 AliTPCCalibRawBase.cxx:261
 AliTPCCalibRawBase.cxx:262
 AliTPCCalibRawBase.cxx:263
 AliTPCCalibRawBase.cxx:264
 AliTPCCalibRawBase.cxx:265
 AliTPCCalibRawBase.cxx:266