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: AliTPCRawStreamV3.cxx 22777 2007-12-05 17:37:33Z marian $ */

///////////////////////////////////////////////////////////////////////////////
///
/// This class provides access to TPC digits in raw data.
///
/// It loops over all TPC digits in the raw data given by the AliRawReader.
/// The NextChannel method loads the data for the next pad. If there is no pad left
/// it returns kFALSE.
///
///////////////////////////////////////////////////////////////////////////////

#include <TSystem.h>

#include "AliTPCRawStreamV3.h"
#include "AliRawReader.h"
#include "AliLog.h"
#include "AliTPCAltroMapping.h"

ClassImp(AliTPCRawStreamV3)

//_____________________________________________________________________________
AliTPCRawStreamV3::AliTPCRawStreamV3(AliRawReader* rawReader, AliAltroMapping **mapping) :
  AliAltroRawStreamV3(rawReader),
  fSector(-1),
  fPrevSector(-1),
  fRow(-1),
  fPrevRow(-1),
  fPad(-1),
  fPrevPad(-1),
  fPatchIndex(-1),
  fIsMapOwner(kFALSE)
{
  // create an object to read TPC raw digits

  SelectRawData("TPC");

  if (mapping == NULL) {
    TString path = gSystem->Getenv("ALICE_ROOT");
    path += "/TPC/mapping/Patch";
    TString path2;
    for(Int_t i = 0; i < 6; i++) {
      path2 = path;
      path2 += i;
      path2 += ".data";
      fMapping[i] = new AliTPCAltroMapping(path2.Data());
    }
    fIsMapOwner = kTRUE;
  }
  else {
    for(Int_t i = 0; i < 6; i++)
      fMapping[i] = mapping[i];
  }


  //fNoAltroMapping = kFALSE;
}
//_____________________________________________________________________________
AliTPCRawStreamV3::~AliTPCRawStreamV3()
{
// destructor

  if (fIsMapOwner)
    for(Int_t i = 0; i < 6; i++) delete fMapping[i];
}

//_____________________________________________________________________________
void AliTPCRawStreamV3::Reset()
{
  // reset tpc raw stream params
  AliAltroRawStreamV3::Reset();
  fSector = fPrevSector = fRow = fPrevRow = fPad = fPrevPad = fPatchIndex = -1;
}

//_____________________________________________________________________________
Bool_t AliTPCRawStreamV3::NextChannel()
{
  // Read next TPC Channel
  // Apply the TPC altro mapping to get
  // the pad-row and pad indeces

/*
  fPrevSector = fSector;
  fPrevRow = fRow;
  fPrevPad = fPad;
  if (AliAltroRawStreamV3::NextChannel()) {
      //    if (IsNewHWAddress())
    if ( GetHWAddress() > -1 )
      ApplyAltroMapping();
    return kTRUE;
  }
  else
    return kFALSE;
  */
  
  fPrevRow = fRow;
  fPrevPad = fPad;
  fRow = -1;
  fPad = -1;
  if (!AliAltroRawStreamV3::NextChannel()) return kFALSE;

  Short_t hwAddress = GetHWAddress();
  if (hwAddress>-1){
    fRow = fMapping[fPatchIndex]->GetPadRow(hwAddress);
    fPad = fMapping[fPatchIndex]->GetPad(hwAddress);
  }
  return kTRUE;
}
//_____________________________________________________________________________
Bool_t AliTPCRawStreamV3::NextDDL()
{
  // Take the DDL index,
  // calculate the patch number and
  // set the sector number
//   return AliAltroRawStreamV3::NextDDL();
  fPrevSector = fSector;
  fSector     = -1;
  if (!AliAltroRawStreamV3::NextDDL()) return kFALSE;
  
  Int_t ddlNumber = GetDDLNumber();
  if (ddlNumber < 72) {
    fSector = ddlNumber / 2;
    fPatchIndex = ddlNumber % 2;
  }
  else {
    fSector = (ddlNumber - 72) / 4 + 36;
    fPatchIndex = (ddlNumber - 72) % 4 + 2;
  }
  return kTRUE;
}
//_____________________________________________________________________________
void AliTPCRawStreamV3::ApplyAltroMapping()
{
  Int_t ddlNumber = GetDDLNumber();
  Int_t patchIndex;
  if (ddlNumber < 72) {
    fSector = ddlNumber / 2;
    patchIndex = ddlNumber % 2;
  }
  else {
    fSector = (ddlNumber - 72) / 4 + 36;
    patchIndex = (ddlNumber - 72) % 4 + 2;
  }
  
  Short_t hwAddress = GetHWAddress();
  fRow = fMapping[patchIndex]->GetPadRow(hwAddress);
  fPad = fMapping[patchIndex]->GetPad(hwAddress);
  

//  if ((fRow < 0) || (fPad < 0))
//    AddMappingErrorLog(Form("hw=%d",hwAddress));
}
 AliTPCRawStreamV3.cxx:1
 AliTPCRawStreamV3.cxx:2
 AliTPCRawStreamV3.cxx:3
 AliTPCRawStreamV3.cxx:4
 AliTPCRawStreamV3.cxx:5
 AliTPCRawStreamV3.cxx:6
 AliTPCRawStreamV3.cxx:7
 AliTPCRawStreamV3.cxx:8
 AliTPCRawStreamV3.cxx:9
 AliTPCRawStreamV3.cxx:10
 AliTPCRawStreamV3.cxx:11
 AliTPCRawStreamV3.cxx:12
 AliTPCRawStreamV3.cxx:13
 AliTPCRawStreamV3.cxx:14
 AliTPCRawStreamV3.cxx:15
 AliTPCRawStreamV3.cxx:16
 AliTPCRawStreamV3.cxx:17
 AliTPCRawStreamV3.cxx:18
 AliTPCRawStreamV3.cxx:19
 AliTPCRawStreamV3.cxx:20
 AliTPCRawStreamV3.cxx:21
 AliTPCRawStreamV3.cxx:22
 AliTPCRawStreamV3.cxx:23
 AliTPCRawStreamV3.cxx:24
 AliTPCRawStreamV3.cxx:25
 AliTPCRawStreamV3.cxx:26
 AliTPCRawStreamV3.cxx:27
 AliTPCRawStreamV3.cxx:28
 AliTPCRawStreamV3.cxx:29
 AliTPCRawStreamV3.cxx:30
 AliTPCRawStreamV3.cxx:31
 AliTPCRawStreamV3.cxx:32
 AliTPCRawStreamV3.cxx:33
 AliTPCRawStreamV3.cxx:34
 AliTPCRawStreamV3.cxx:35
 AliTPCRawStreamV3.cxx:36
 AliTPCRawStreamV3.cxx:37
 AliTPCRawStreamV3.cxx:38
 AliTPCRawStreamV3.cxx:39
 AliTPCRawStreamV3.cxx:40
 AliTPCRawStreamV3.cxx:41
 AliTPCRawStreamV3.cxx:42
 AliTPCRawStreamV3.cxx:43
 AliTPCRawStreamV3.cxx:44
 AliTPCRawStreamV3.cxx:45
 AliTPCRawStreamV3.cxx:46
 AliTPCRawStreamV3.cxx:47
 AliTPCRawStreamV3.cxx:48
 AliTPCRawStreamV3.cxx:49
 AliTPCRawStreamV3.cxx:50
 AliTPCRawStreamV3.cxx:51
 AliTPCRawStreamV3.cxx:52
 AliTPCRawStreamV3.cxx:53
 AliTPCRawStreamV3.cxx:54
 AliTPCRawStreamV3.cxx:55
 AliTPCRawStreamV3.cxx:56
 AliTPCRawStreamV3.cxx:57
 AliTPCRawStreamV3.cxx:58
 AliTPCRawStreamV3.cxx:59
 AliTPCRawStreamV3.cxx:60
 AliTPCRawStreamV3.cxx:61
 AliTPCRawStreamV3.cxx:62
 AliTPCRawStreamV3.cxx:63
 AliTPCRawStreamV3.cxx:64
 AliTPCRawStreamV3.cxx:65
 AliTPCRawStreamV3.cxx:66
 AliTPCRawStreamV3.cxx:67
 AliTPCRawStreamV3.cxx:68
 AliTPCRawStreamV3.cxx:69
 AliTPCRawStreamV3.cxx:70
 AliTPCRawStreamV3.cxx:71
 AliTPCRawStreamV3.cxx:72
 AliTPCRawStreamV3.cxx:73
 AliTPCRawStreamV3.cxx:74
 AliTPCRawStreamV3.cxx:75
 AliTPCRawStreamV3.cxx:76
 AliTPCRawStreamV3.cxx:77
 AliTPCRawStreamV3.cxx:78
 AliTPCRawStreamV3.cxx:79
 AliTPCRawStreamV3.cxx:80
 AliTPCRawStreamV3.cxx:81
 AliTPCRawStreamV3.cxx:82
 AliTPCRawStreamV3.cxx:83
 AliTPCRawStreamV3.cxx:84
 AliTPCRawStreamV3.cxx:85
 AliTPCRawStreamV3.cxx:86
 AliTPCRawStreamV3.cxx:87
 AliTPCRawStreamV3.cxx:88
 AliTPCRawStreamV3.cxx:89
 AliTPCRawStreamV3.cxx:90
 AliTPCRawStreamV3.cxx:91
 AliTPCRawStreamV3.cxx:92
 AliTPCRawStreamV3.cxx:93
 AliTPCRawStreamV3.cxx:94
 AliTPCRawStreamV3.cxx:95
 AliTPCRawStreamV3.cxx:96
 AliTPCRawStreamV3.cxx:97
 AliTPCRawStreamV3.cxx:98
 AliTPCRawStreamV3.cxx:99
 AliTPCRawStreamV3.cxx:100
 AliTPCRawStreamV3.cxx:101
 AliTPCRawStreamV3.cxx:102
 AliTPCRawStreamV3.cxx:103
 AliTPCRawStreamV3.cxx:104
 AliTPCRawStreamV3.cxx:105
 AliTPCRawStreamV3.cxx:106
 AliTPCRawStreamV3.cxx:107
 AliTPCRawStreamV3.cxx:108
 AliTPCRawStreamV3.cxx:109
 AliTPCRawStreamV3.cxx:110
 AliTPCRawStreamV3.cxx:111
 AliTPCRawStreamV3.cxx:112
 AliTPCRawStreamV3.cxx:113
 AliTPCRawStreamV3.cxx:114
 AliTPCRawStreamV3.cxx:115
 AliTPCRawStreamV3.cxx:116
 AliTPCRawStreamV3.cxx:117
 AliTPCRawStreamV3.cxx:118
 AliTPCRawStreamV3.cxx:119
 AliTPCRawStreamV3.cxx:120
 AliTPCRawStreamV3.cxx:121
 AliTPCRawStreamV3.cxx:122
 AliTPCRawStreamV3.cxx:123
 AliTPCRawStreamV3.cxx:124
 AliTPCRawStreamV3.cxx:125
 AliTPCRawStreamV3.cxx:126
 AliTPCRawStreamV3.cxx:127
 AliTPCRawStreamV3.cxx:128
 AliTPCRawStreamV3.cxx:129
 AliTPCRawStreamV3.cxx:130
 AliTPCRawStreamV3.cxx:131
 AliTPCRawStreamV3.cxx:132
 AliTPCRawStreamV3.cxx:133
 AliTPCRawStreamV3.cxx:134
 AliTPCRawStreamV3.cxx:135
 AliTPCRawStreamV3.cxx:136
 AliTPCRawStreamV3.cxx:137
 AliTPCRawStreamV3.cxx:138
 AliTPCRawStreamV3.cxx:139
 AliTPCRawStreamV3.cxx:140
 AliTPCRawStreamV3.cxx:141
 AliTPCRawStreamV3.cxx:142
 AliTPCRawStreamV3.cxx:143
 AliTPCRawStreamV3.cxx:144
 AliTPCRawStreamV3.cxx:145
 AliTPCRawStreamV3.cxx:146
 AliTPCRawStreamV3.cxx:147
 AliTPCRawStreamV3.cxx:148
 AliTPCRawStreamV3.cxx:149
 AliTPCRawStreamV3.cxx:150
 AliTPCRawStreamV3.cxx:151
 AliTPCRawStreamV3.cxx:152
 AliTPCRawStreamV3.cxx:153
 AliTPCRawStreamV3.cxx:154
 AliTPCRawStreamV3.cxx:155
 AliTPCRawStreamV3.cxx:156
 AliTPCRawStreamV3.cxx:157
 AliTPCRawStreamV3.cxx:158
 AliTPCRawStreamV3.cxx:159
 AliTPCRawStreamV3.cxx:160
 AliTPCRawStreamV3.cxx:161
 AliTPCRawStreamV3.cxx:162
 AliTPCRawStreamV3.cxx:163
 AliTPCRawStreamV3.cxx:164
 AliTPCRawStreamV3.cxx:165
 AliTPCRawStreamV3.cxx:166
 AliTPCRawStreamV3.cxx:167