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

////////////////////////////////////////////////////////////////////////
//
// AliTOFHitMap class
//
// hitmap enables fast check if the pad was already hit
// The index of a AliTOFSDigit is saved in the each hitmap "cell"
// (there is an offset +1, because the index can be zero and 
// zero means empty cell. 
// In TOF, number of strips varies according plate type, the highest
// number is in plate C. For all plates is used this number, so
// the size of the hitmap is a little bit greater than necessary, but
// it simplifies the access algorithm. 
// 
//
// Author: Jiri Chudoba (CERN), based on AliMUONHitMap
//
////////////////////////////////////////////////////////////////////////

#include "AliLog.h"
#include "AliTOFHitMap.h"
#include "AliTOFGeometry.h"


#include <TClonesArray.h>

ClassImp(AliTOFHitMap)

AliTOFHitMap::AliTOFHitMap():
  fNSector(-1),
  fNplate(-1),
  fNstrip(-1),
  fNpx(-1),
  fNpz(-1),
  fSDigits(0x0),
  fMaxIndex(-1),
  fHitMap(0x0)
{
//
// Default ctor
//
}

////////////////////////////////////////////////////////////////////////
AliTOFHitMap::AliTOFHitMap(TClonesArray *dig):
  fNSector(-1),
  fNplate(-1),
  fNstrip(-1),
  fNpx(-1),
  fNpz(-1),
  fSDigits(dig),
  fMaxIndex(-1),
  fHitMap(0x0)
{
//
// ctor
//

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

  fNSector = AliTOFGeometry::NSectors();
  fNplate = AliTOFGeometry::NPlates();
  fNstrip = AliTOFGeometry::NStripC();//fTOFGeometry->NMaxNstrip();
  fNpx  = AliTOFGeometry::NpadX();
  fNpz  = AliTOFGeometry::NpadZ();
  fMaxIndex=fNSector*fNplate*fNstrip*fNpx*fNpz;
  fHitMap = new Int_t[fMaxIndex];
  Clear();
}

////////////////////////////////////////////////////////////////////////
AliTOFHitMap::~AliTOFHitMap()
{
//
// Destructor
//
  delete[] fHitMap;

}

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

////////////////////////////////////////////////////////////////////////
Int_t AliTOFHitMap::CheckedIndex(Int_t * const vol) const
{
//
// Return checked indices for vol
//
  Int_t index=
    vol[0]*fNplate*fNstrip*fNpx*fNpz+             // sector
    vol[1]*fNstrip*fNpx*fNpz+                     // plate
    vol[2]*fNpx*fNpz+                             // strip
    vol[3]*fNpz+                                  // padx
    vol[4];                                       // padz

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

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

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

////////////////////////////////////////////////////////////////////////
void  AliTOFHitMap::SetHit(Int_t *vol)
{
//
// Assign last digit to pad vol 
//

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

////////////////////////////////////////////////////////////////////////
Int_t AliTOFHitMap::GetHitIndex(Int_t *vol) const
{
//
// Get contents of pad vol
//

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

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

////////////////////////////////////////////////////////////////////////
FlagType AliTOFHitMap::TestHit(Int_t *vol) const
{
//
// Check if hit cell is empty, used or unused
//
    Int_t inf=fHitMap[CheckedIndex(vol)];
    if (inf > 0) {
	return kUsed;
    } else if (inf == 0) {
	return kEmpty;
    } else {
	return kUnused;
    }
}
 AliTOFHitMap.cxx:1
 AliTOFHitMap.cxx:2
 AliTOFHitMap.cxx:3
 AliTOFHitMap.cxx:4
 AliTOFHitMap.cxx:5
 AliTOFHitMap.cxx:6
 AliTOFHitMap.cxx:7
 AliTOFHitMap.cxx:8
 AliTOFHitMap.cxx:9
 AliTOFHitMap.cxx:10
 AliTOFHitMap.cxx:11
 AliTOFHitMap.cxx:12
 AliTOFHitMap.cxx:13
 AliTOFHitMap.cxx:14
 AliTOFHitMap.cxx:15
 AliTOFHitMap.cxx:16
 AliTOFHitMap.cxx:17
 AliTOFHitMap.cxx:18
 AliTOFHitMap.cxx:19
 AliTOFHitMap.cxx:20
 AliTOFHitMap.cxx:21
 AliTOFHitMap.cxx:22
 AliTOFHitMap.cxx:23
 AliTOFHitMap.cxx:24
 AliTOFHitMap.cxx:25
 AliTOFHitMap.cxx:26
 AliTOFHitMap.cxx:27
 AliTOFHitMap.cxx:28
 AliTOFHitMap.cxx:29
 AliTOFHitMap.cxx:30
 AliTOFHitMap.cxx:31
 AliTOFHitMap.cxx:32
 AliTOFHitMap.cxx:33
 AliTOFHitMap.cxx:34
 AliTOFHitMap.cxx:35
 AliTOFHitMap.cxx:36
 AliTOFHitMap.cxx:37
 AliTOFHitMap.cxx:38
 AliTOFHitMap.cxx:39
 AliTOFHitMap.cxx:40
 AliTOFHitMap.cxx:41
 AliTOFHitMap.cxx:42
 AliTOFHitMap.cxx:43
 AliTOFHitMap.cxx:44
 AliTOFHitMap.cxx:45
 AliTOFHitMap.cxx:46
 AliTOFHitMap.cxx:47
 AliTOFHitMap.cxx:48
 AliTOFHitMap.cxx:49
 AliTOFHitMap.cxx:50
 AliTOFHitMap.cxx:51
 AliTOFHitMap.cxx:52
 AliTOFHitMap.cxx:53
 AliTOFHitMap.cxx:54
 AliTOFHitMap.cxx:55
 AliTOFHitMap.cxx:56
 AliTOFHitMap.cxx:57
 AliTOFHitMap.cxx:58
 AliTOFHitMap.cxx:59
 AliTOFHitMap.cxx:60
 AliTOFHitMap.cxx:61
 AliTOFHitMap.cxx:62
 AliTOFHitMap.cxx:63
 AliTOFHitMap.cxx:64
 AliTOFHitMap.cxx:65
 AliTOFHitMap.cxx:66
 AliTOFHitMap.cxx:67
 AliTOFHitMap.cxx:68
 AliTOFHitMap.cxx:69
 AliTOFHitMap.cxx:70
 AliTOFHitMap.cxx:71
 AliTOFHitMap.cxx:72
 AliTOFHitMap.cxx:73
 AliTOFHitMap.cxx:74
 AliTOFHitMap.cxx:75
 AliTOFHitMap.cxx:76
 AliTOFHitMap.cxx:77
 AliTOFHitMap.cxx:78
 AliTOFHitMap.cxx:79
 AliTOFHitMap.cxx:80
 AliTOFHitMap.cxx:81
 AliTOFHitMap.cxx:82
 AliTOFHitMap.cxx:83
 AliTOFHitMap.cxx:84
 AliTOFHitMap.cxx:85
 AliTOFHitMap.cxx:86
 AliTOFHitMap.cxx:87
 AliTOFHitMap.cxx:88
 AliTOFHitMap.cxx:89
 AliTOFHitMap.cxx:90
 AliTOFHitMap.cxx:91
 AliTOFHitMap.cxx:92
 AliTOFHitMap.cxx:93
 AliTOFHitMap.cxx:94
 AliTOFHitMap.cxx:95
 AliTOFHitMap.cxx:96
 AliTOFHitMap.cxx:97
 AliTOFHitMap.cxx:98
 AliTOFHitMap.cxx:99
 AliTOFHitMap.cxx:100
 AliTOFHitMap.cxx:101
 AliTOFHitMap.cxx:102
 AliTOFHitMap.cxx:103
 AliTOFHitMap.cxx:104
 AliTOFHitMap.cxx:105
 AliTOFHitMap.cxx:106
 AliTOFHitMap.cxx:107
 AliTOFHitMap.cxx:108
 AliTOFHitMap.cxx:109
 AliTOFHitMap.cxx:110
 AliTOFHitMap.cxx:111
 AliTOFHitMap.cxx:112
 AliTOFHitMap.cxx:113
 AliTOFHitMap.cxx:114
 AliTOFHitMap.cxx:115
 AliTOFHitMap.cxx:116
 AliTOFHitMap.cxx:117
 AliTOFHitMap.cxx:118
 AliTOFHitMap.cxx:119
 AliTOFHitMap.cxx:120
 AliTOFHitMap.cxx:121
 AliTOFHitMap.cxx:122
 AliTOFHitMap.cxx:123
 AliTOFHitMap.cxx:124
 AliTOFHitMap.cxx:125
 AliTOFHitMap.cxx:126
 AliTOFHitMap.cxx:127
 AliTOFHitMap.cxx:128
 AliTOFHitMap.cxx:129
 AliTOFHitMap.cxx:130
 AliTOFHitMap.cxx:131
 AliTOFHitMap.cxx:132
 AliTOFHitMap.cxx:133
 AliTOFHitMap.cxx:134
 AliTOFHitMap.cxx:135
 AliTOFHitMap.cxx:136
 AliTOFHitMap.cxx:137
 AliTOFHitMap.cxx:138
 AliTOFHitMap.cxx:139
 AliTOFHitMap.cxx:140
 AliTOFHitMap.cxx:141
 AliTOFHitMap.cxx:142
 AliTOFHitMap.cxx:143
 AliTOFHitMap.cxx:144
 AliTOFHitMap.cxx:145
 AliTOFHitMap.cxx:146
 AliTOFHitMap.cxx:147
 AliTOFHitMap.cxx:148
 AliTOFHitMap.cxx:149
 AliTOFHitMap.cxx:150
 AliTOFHitMap.cxx:151
 AliTOFHitMap.cxx:152
 AliTOFHitMap.cxx:153
 AliTOFHitMap.cxx:154
 AliTOFHitMap.cxx:155
 AliTOFHitMap.cxx:156
 AliTOFHitMap.cxx:157
 AliTOFHitMap.cxx:158
 AliTOFHitMap.cxx:159
 AliTOFHitMap.cxx:160
 AliTOFHitMap.cxx:161
 AliTOFHitMap.cxx:162
 AliTOFHitMap.cxx:163
 AliTOFHitMap.cxx:164
 AliTOFHitMap.cxx:165
 AliTOFHitMap.cxx:166
 AliTOFHitMap.cxx:167
 AliTOFHitMap.cxx:168
 AliTOFHitMap.cxx:169
 AliTOFHitMap.cxx:170
 AliTOFHitMap.cxx:171
 AliTOFHitMap.cxx:172
 AliTOFHitMap.cxx:173
 AliTOFHitMap.cxx:174
 AliTOFHitMap.cxx:175
 AliTOFHitMap.cxx:176
 AliTOFHitMap.cxx:177
 AliTOFHitMap.cxx:178
 AliTOFHitMap.cxx:179
 AliTOFHitMap.cxx:180
 AliTOFHitMap.cxx:181
 AliTOFHitMap.cxx:182
 AliTOFHitMap.cxx:183
 AliTOFHitMap.cxx:184
 AliTOFHitMap.cxx:185