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: $ */

///////////////////////////////////////////////////////////////////////////////
//
// This class provides access to PHOS/EMCAL digits in raw data.
//
// It loops over all PHOS/EMCAL digits in the raw data given by the AliRawReader.
// The Next method goes to the next digit. If there are no digits left
// it returns kFALSE.
// Several getters provide information about the current digit.
// usage: 
//    AliRawReader *reader = AliRawReader::Create(fileName);
//    AliCaloRawStreamV3 *stream = new AliCaloRawStreamV3(reader,calo);
//    while (reader->NextEvent())
//      while (stream->NextDDL())
//        while (stream->NextChannel()) ...
///
/// Yuri Kharlov. 23 June 2009
///////////////////////////////////////////////////////////////////////////////

#include <TString.h>
#include <TSystem.h>

#include "AliLog.h"
#include "AliCaloRawStreamV3.h"
#include "AliRawReader.h"
#include "AliCaloAltroMapping.h"

ClassImp(AliCaloRawStreamV3)


//_____________________________________________________________________________
AliCaloRawStreamV3::AliCaloRawStreamV3(AliRawReader* rawReader, TString calo, AliAltroMapping **mapping) :
  AliAltroRawStreamV3(rawReader),
  fModule(-1),
  fRow(-1),
  fColumn(-1),
  fCaloFlag(0),
  fNModules(0),
  fNRCU(0),
  fNSides(0),
  fCalo(calo),
  fExternalMapping(kFALSE)
{
  // create an object to read PHOS/EMCAL raw digits
  SelectRawData(calo);

  // PHOS and EMCAL have different number of RCU per module
  //For PHOS (different mappings for different modules)
  if(fCalo == "PHOS")  {
    fNModules = 5;
    fNRCU     = 4;
    fNSides   = 1;
  }
  //For EMCAL (the same mapping for all modules)
  if(fCalo == "EMCAL")  {
    fNModules = 1;
    fNRCU     = 2;
    fNSides   = 2;
  }
  TString sides[]={"A","C"};

  if (mapping == NULL) {
    // Read mapping files from $ALICE_ROOT/CALO/mapping/*.data
    TString path = gSystem->Getenv("ALICE_ROOT");
    path += "/"+fCalo+"/mapping/";
    TString path1, path2;
    for(Int_t m = 0; m < fNModules; m++) {
      path1 = path;
      if     (fCalo == "EMCAL") {
	path1 += "RCU";
      }
      else if(fCalo == "PHOS" ) {
	path1 += "Mod";
	path1 += m;
	path1 += "RCU";
      }
      for(Int_t j = 0; j < fNSides; j++){
	for(Int_t i = 0; i < fNRCU; i++) {
	  path2 = path1;
	  path2 += i;
	  if(fCalo == "EMCAL") path2 += sides[j];
	  path2 += ".data";
	  AliDebug(2,Form("Mapping file: %s",path2.Data()));
	  fMapping[m*fNSides*fNRCU + j*fNRCU + i] = new AliCaloAltroMapping(path2.Data());
	}
      }
    }
  }
  else {
    // Mapping is supplied by reconstruction
    fExternalMapping = kTRUE;
    for(Int_t i = 0; i < fNModules*fNRCU*fNSides; i++)
      fMapping[i] = mapping[i];
  }
}

//_____________________________________________________________________________
AliCaloRawStreamV3::AliCaloRawStreamV3(const AliCaloRawStreamV3& stream) :
  AliAltroRawStreamV3(stream),
  fModule(-1),
  fRow(-1),
  fColumn(-1),
  fCaloFlag(0),
  fNModules(0),
  fNRCU(0),
  fNSides(0),
  fCalo(""),
  fExternalMapping(kFALSE)
{  
  // Dummy copy constructor
  Fatal("AliCaloRawStreamV3", "copy constructor not implemented");
}

//_____________________________________________________________________________
AliCaloRawStreamV3& AliCaloRawStreamV3::operator = (const AliCaloRawStreamV3& 
					      /* stream */)
{
  // Dummy assignment operator
  Fatal("operator =", "assignment operator not implemented");
  return *this;
}

//_____________________________________________________________________________
AliCaloRawStreamV3::~AliCaloRawStreamV3()
{
// destructor

  if (!fExternalMapping)
    for(Int_t i = 0; i < fNModules*fNRCU*fNSides; i++)
      delete fMapping[i];
}

//_____________________________________________________________________________
void AliCaloRawStreamV3::Reset()
{
  // reset PHOS/EMCAL raw stream params
  AliAltroRawStreamV3::Reset();
  fModule = fRow = fColumn = -1;
  fCaloFlag = 0;
  fCalo="";
}

//_____________________________________________________________________________
Bool_t AliCaloRawStreamV3::NextChannel()
{
  // Read next PHOS/EMCAL signal
  // Apply the PHOS/EMCAL altro mapping to get
  // the module,row and column indeces

  if (AliAltroRawStreamV3::NextChannel()) {
    ApplyAltroMapping();
    return kTRUE;
  }
  else
    return kFALSE;
}

//_____________________________________________________________________________
void AliCaloRawStreamV3::ApplyAltroMapping()
{
  // Take the DDL index, load
  // the corresponding altro mapping
  // object and fill the sector,row and pad indeces

  Int_t ddlNumber = GetDDLNumber();
  fModule = ddlNumber / fNRCU;

  Int_t rcuIndex = ddlNumber % fNRCU;

  if( fNModules > 1) rcuIndex += fModule*fNRCU*fNSides;
  if( fNRCU == 2 ){ // EMCAL may need to increase RCU index for the maps
    if (fModule%2 == 1) { rcuIndex += 2; } // other='C' side maps
  }

  Short_t hwAddress = GetHWAddress();
  fRow      = fMapping[rcuIndex]->GetPadRow(hwAddress);
  fColumn   = fMapping[rcuIndex]->GetPad(hwAddress);
  fCaloFlag = fMapping[rcuIndex]->GetSector(hwAddress);
}
 AliCaloRawStreamV3.cxx:1
 AliCaloRawStreamV3.cxx:2
 AliCaloRawStreamV3.cxx:3
 AliCaloRawStreamV3.cxx:4
 AliCaloRawStreamV3.cxx:5
 AliCaloRawStreamV3.cxx:6
 AliCaloRawStreamV3.cxx:7
 AliCaloRawStreamV3.cxx:8
 AliCaloRawStreamV3.cxx:9
 AliCaloRawStreamV3.cxx:10
 AliCaloRawStreamV3.cxx:11
 AliCaloRawStreamV3.cxx:12
 AliCaloRawStreamV3.cxx:13
 AliCaloRawStreamV3.cxx:14
 AliCaloRawStreamV3.cxx:15
 AliCaloRawStreamV3.cxx:16
 AliCaloRawStreamV3.cxx:17
 AliCaloRawStreamV3.cxx:18
 AliCaloRawStreamV3.cxx:19
 AliCaloRawStreamV3.cxx:20
 AliCaloRawStreamV3.cxx:21
 AliCaloRawStreamV3.cxx:22
 AliCaloRawStreamV3.cxx:23
 AliCaloRawStreamV3.cxx:24
 AliCaloRawStreamV3.cxx:25
 AliCaloRawStreamV3.cxx:26
 AliCaloRawStreamV3.cxx:27
 AliCaloRawStreamV3.cxx:28
 AliCaloRawStreamV3.cxx:29
 AliCaloRawStreamV3.cxx:30
 AliCaloRawStreamV3.cxx:31
 AliCaloRawStreamV3.cxx:32
 AliCaloRawStreamV3.cxx:33
 AliCaloRawStreamV3.cxx:34
 AliCaloRawStreamV3.cxx:35
 AliCaloRawStreamV3.cxx:36
 AliCaloRawStreamV3.cxx:37
 AliCaloRawStreamV3.cxx:38
 AliCaloRawStreamV3.cxx:39
 AliCaloRawStreamV3.cxx:40
 AliCaloRawStreamV3.cxx:41
 AliCaloRawStreamV3.cxx:42
 AliCaloRawStreamV3.cxx:43
 AliCaloRawStreamV3.cxx:44
 AliCaloRawStreamV3.cxx:45
 AliCaloRawStreamV3.cxx:46
 AliCaloRawStreamV3.cxx:47
 AliCaloRawStreamV3.cxx:48
 AliCaloRawStreamV3.cxx:49
 AliCaloRawStreamV3.cxx:50
 AliCaloRawStreamV3.cxx:51
 AliCaloRawStreamV3.cxx:52
 AliCaloRawStreamV3.cxx:53
 AliCaloRawStreamV3.cxx:54
 AliCaloRawStreamV3.cxx:55
 AliCaloRawStreamV3.cxx:56
 AliCaloRawStreamV3.cxx:57
 AliCaloRawStreamV3.cxx:58
 AliCaloRawStreamV3.cxx:59
 AliCaloRawStreamV3.cxx:60
 AliCaloRawStreamV3.cxx:61
 AliCaloRawStreamV3.cxx:62
 AliCaloRawStreamV3.cxx:63
 AliCaloRawStreamV3.cxx:64
 AliCaloRawStreamV3.cxx:65
 AliCaloRawStreamV3.cxx:66
 AliCaloRawStreamV3.cxx:67
 AliCaloRawStreamV3.cxx:68
 AliCaloRawStreamV3.cxx:69
 AliCaloRawStreamV3.cxx:70
 AliCaloRawStreamV3.cxx:71
 AliCaloRawStreamV3.cxx:72
 AliCaloRawStreamV3.cxx:73
 AliCaloRawStreamV3.cxx:74
 AliCaloRawStreamV3.cxx:75
 AliCaloRawStreamV3.cxx:76
 AliCaloRawStreamV3.cxx:77
 AliCaloRawStreamV3.cxx:78
 AliCaloRawStreamV3.cxx:79
 AliCaloRawStreamV3.cxx:80
 AliCaloRawStreamV3.cxx:81
 AliCaloRawStreamV3.cxx:82
 AliCaloRawStreamV3.cxx:83
 AliCaloRawStreamV3.cxx:84
 AliCaloRawStreamV3.cxx:85
 AliCaloRawStreamV3.cxx:86
 AliCaloRawStreamV3.cxx:87
 AliCaloRawStreamV3.cxx:88
 AliCaloRawStreamV3.cxx:89
 AliCaloRawStreamV3.cxx:90
 AliCaloRawStreamV3.cxx:91
 AliCaloRawStreamV3.cxx:92
 AliCaloRawStreamV3.cxx:93
 AliCaloRawStreamV3.cxx:94
 AliCaloRawStreamV3.cxx:95
 AliCaloRawStreamV3.cxx:96
 AliCaloRawStreamV3.cxx:97
 AliCaloRawStreamV3.cxx:98
 AliCaloRawStreamV3.cxx:99
 AliCaloRawStreamV3.cxx:100
 AliCaloRawStreamV3.cxx:101
 AliCaloRawStreamV3.cxx:102
 AliCaloRawStreamV3.cxx:103
 AliCaloRawStreamV3.cxx:104
 AliCaloRawStreamV3.cxx:105
 AliCaloRawStreamV3.cxx:106
 AliCaloRawStreamV3.cxx:107
 AliCaloRawStreamV3.cxx:108
 AliCaloRawStreamV3.cxx:109
 AliCaloRawStreamV3.cxx:110
 AliCaloRawStreamV3.cxx:111
 AliCaloRawStreamV3.cxx:112
 AliCaloRawStreamV3.cxx:113
 AliCaloRawStreamV3.cxx:114
 AliCaloRawStreamV3.cxx:115
 AliCaloRawStreamV3.cxx:116
 AliCaloRawStreamV3.cxx:117
 AliCaloRawStreamV3.cxx:118
 AliCaloRawStreamV3.cxx:119
 AliCaloRawStreamV3.cxx:120
 AliCaloRawStreamV3.cxx:121
 AliCaloRawStreamV3.cxx:122
 AliCaloRawStreamV3.cxx:123
 AliCaloRawStreamV3.cxx:124
 AliCaloRawStreamV3.cxx:125
 AliCaloRawStreamV3.cxx:126
 AliCaloRawStreamV3.cxx:127
 AliCaloRawStreamV3.cxx:128
 AliCaloRawStreamV3.cxx:129
 AliCaloRawStreamV3.cxx:130
 AliCaloRawStreamV3.cxx:131
 AliCaloRawStreamV3.cxx:132
 AliCaloRawStreamV3.cxx:133
 AliCaloRawStreamV3.cxx:134
 AliCaloRawStreamV3.cxx:135
 AliCaloRawStreamV3.cxx:136
 AliCaloRawStreamV3.cxx:137
 AliCaloRawStreamV3.cxx:138
 AliCaloRawStreamV3.cxx:139
 AliCaloRawStreamV3.cxx:140
 AliCaloRawStreamV3.cxx:141
 AliCaloRawStreamV3.cxx:142
 AliCaloRawStreamV3.cxx:143
 AliCaloRawStreamV3.cxx:144
 AliCaloRawStreamV3.cxx:145
 AliCaloRawStreamV3.cxx:146
 AliCaloRawStreamV3.cxx:147
 AliCaloRawStreamV3.cxx:148
 AliCaloRawStreamV3.cxx:149
 AliCaloRawStreamV3.cxx:150
 AliCaloRawStreamV3.cxx:151
 AliCaloRawStreamV3.cxx:152
 AliCaloRawStreamV3.cxx:153
 AliCaloRawStreamV3.cxx:154
 AliCaloRawStreamV3.cxx:155
 AliCaloRawStreamV3.cxx:156
 AliCaloRawStreamV3.cxx:157
 AliCaloRawStreamV3.cxx:158
 AliCaloRawStreamV3.cxx:159
 AliCaloRawStreamV3.cxx:160
 AliCaloRawStreamV3.cxx:161
 AliCaloRawStreamV3.cxx:162
 AliCaloRawStreamV3.cxx:163
 AliCaloRawStreamV3.cxx:164
 AliCaloRawStreamV3.cxx:165
 AliCaloRawStreamV3.cxx:166
 AliCaloRawStreamV3.cxx:167
 AliCaloRawStreamV3.cxx:168
 AliCaloRawStreamV3.cxx:169
 AliCaloRawStreamV3.cxx:170
 AliCaloRawStreamV3.cxx:171
 AliCaloRawStreamV3.cxx:172
 AliCaloRawStreamV3.cxx:173
 AliCaloRawStreamV3.cxx:174
 AliCaloRawStreamV3.cxx:175
 AliCaloRawStreamV3.cxx:176
 AliCaloRawStreamV3.cxx:177
 AliCaloRawStreamV3.cxx:178
 AliCaloRawStreamV3.cxx:179
 AliCaloRawStreamV3.cxx:180
 AliCaloRawStreamV3.cxx:181
 AliCaloRawStreamV3.cxx:182
 AliCaloRawStreamV3.cxx:183
 AliCaloRawStreamV3.cxx:184
 AliCaloRawStreamV3.cxx:185
 AliCaloRawStreamV3.cxx:186
 AliCaloRawStreamV3.cxx:187
 AliCaloRawStreamV3.cxx:188
 AliCaloRawStreamV3.cxx:189
 AliCaloRawStreamV3.cxx:190
 AliCaloRawStreamV3.cxx:191
 AliCaloRawStreamV3.cxx:192
 AliCaloRawStreamV3.cxx:193
 AliCaloRawStreamV3.cxx:194
 AliCaloRawStreamV3.cxx:195