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

/////////////////////////////////////////////////////////////////////////
//                                                                     //
// AliTOFRawMap class                                                  //
//                                                                     //
// It enables fast check if the TDC channel was already engaged        //
// for a measurement.                                                  //
// The index of a AliTOFrawData is saved in the each rawdatamap "cell" //
// (there is an offset +1, because the index can be zero and           //
// zero means empty cell.                                              //
//                                                                     //
/////////////////////////////////////////////////////////////////////////

#include "TClonesArray.h"

#include "AliLog.h"

#include "AliTOFGeometry.h"
#include "AliTOFRawMap.h"

ClassImp(AliTOFRawMap)

AliTOFRawMap::AliTOFRawMap():
  TObject(),
  fNtrm(-1),
  fNtrmChain(-1),
  fNtdc(-1),
  fNtdcChannel(-1),
  fRawData(0x0),
  fMaxIndex(-1),
  fRawMap(0x0)
{
//
// Default ctor
//
}

////////////////////////////////////////////////////////////////////////
AliTOFRawMap::AliTOFRawMap(TClonesArray *dig)://, AliTOFGeometry *tofGeom:
  TObject(),
  fNtrm(AliTOFGeometry::NTRM()+2),
  fNtrmChain(AliTOFGeometry::NChain()),
  fNtdc(AliTOFGeometry::NTdc()),
  fNtdcChannel(AliTOFGeometry::NCh()),
  fRawData(dig),
  fMaxIndex(-1),
  fRawMap(0x0)
{
//
// ctor
//

// of course, these constants must not be hardwired
// change later

  fMaxIndex = fNtrm*fNtrmChain*fNtdc*fNtdcChannel;
  fRawMap = new Int_t[fMaxIndex];
  Clear();
}

////////////////////////////////////////////////////////////////////////
AliTOFRawMap::~AliTOFRawMap()
{
//
// Destructor
//
  if (fRawMap)
    delete[] fRawMap;

}

////////////////////////////////////////////////////////////////////////
void AliTOFRawMap::Clear(const char *)
{
//
// Clear hitmap
//
    memset(fRawMap,0,sizeof(int)*fMaxIndex);
}

////////////////////////////////////////////////////////////////////////
Int_t AliTOFRawMap::CheckedIndex(const Int_t * const slot) const
{
//
// Return checked indices for vol
//
  Int_t index =
    slot[0]*fNtrmChain*fNtdc*fNtdcChannel + // TRM
    slot[1]*fNtdc*fNtdcChannel +            // TRM chain
    slot[2]*fNtdcChannel +                  // TDC
    slot[3];                                // TDC channel

    if (index >= fMaxIndex) {
      AliError("CheckedIndex - input outside bounds");
	return -1;
    } else {
	return index;
    }
}

////////////////////////////////////////////////////////////////////////
void  AliTOFRawMap::SetHit(Int_t *slot, Int_t idigit)
{
//
// Assign digit to pad vol
//

// 0 means empty pad, we need to shift indeces by 1
    fRawMap[CheckedIndex(slot)]=idigit+1;
}

////////////////////////////////////////////////////////////////////////
void  AliTOFRawMap::SetHit(Int_t *slot)
{
//
// Assign last digit to channel slot
//

// 0 means empty pad, we need to shift indeces by 1
    fRawMap[CheckedIndex(slot)]=fRawData->GetLast()+1;
}

////////////////////////////////////////////////////////////////////////
Int_t AliTOFRawMap::GetHitIndex(Int_t *slot) const
{
//
// Get contents of channel slot
//

// 0 means empty pad, we need to shift indeces by 1
    return fRawMap[CheckedIndex(slot)]-1;
}

////////////////////////////////////////////////////////////////////////
TObject* AliTOFRawMap::GetHit(Int_t *slot) const
{
//
// Get pointer to object at alot
// return 0 if vol out of bounds
    Int_t index = GetHitIndex(slot);
    return (index <0) ? 0 : fRawData->UncheckedAt(index);
}

////////////////////////////////////////////////////////////////////////
FlagType AliTOFRawMap::TestHit(Int_t *slot) const
{
//
// Check if hit cell is empty, used or unused
//
    Int_t inf = fRawMap[CheckedIndex(slot)];
    if (inf > 0) {
	return kUsed;
    } else if (inf == 0) {
	return kEmpty;
    } else {
	return kUnused;
    }
}

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