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.                  *
 **************************************************************************/
#include <TObjArray.h>
#include "AliITSMapA1.h"
#include "AliITSsegmentation.h"
#include "AliITSdigit.h"

////////////////////////////////////////////////////////////////////////
//  Map Class for ITS. Implementation A1. In this implementation, the //
// 2 dimensional (iz,ix) map is filled with integers values. For each //
// cell a corresponding TObject, a hit, can also be stored.           //
//  The detector geometry is accessed via the that detectors          //
// segmentation class and stored here for conveniance.                //
////////////////////////////////////////////////////////////////////////

ClassImp(AliITSMapA1)
//______________________________________________________________________
AliITSMapA1::AliITSMapA1():
fSegmentation(0),
fNpx(0),
fNpz(0),
fObjects(0),
fNobjects(0),
fMaxIndex(0),
fMapThresholdArr(0),
fHitMap(0),
fMapThreshold(0){
    // default constructor

}
//______________________________________________________________________
AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg):
fSegmentation(seg),
fNpx(0),
fNpz(0),
fObjects(0),
fNobjects(0),
fMaxIndex(0),
fMapThresholdArr(0),
fHitMap(0),
fMapThreshold(0){
    //constructor

    fNpz          = fSegmentation->Npz();
    fNpx          = fSegmentation->Npx();
    fMaxIndex     = fNpz*fNpx+fNpx;             // 2 halves of detector
    fHitMap       = new Int_t[fMaxIndex];
    ClearMap();
}
//______________________________________________________________________
AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj):
fSegmentation(seg),
fNpx(0),
fNpz(0),
fObjects(obj),
fNobjects(0),
fMaxIndex(0),
fMapThresholdArr(0),
fHitMap(0),
fMapThreshold(0){
    //constructor

  fNpz          = fSegmentation->Npz();
  fNpx          = fSegmentation->Npx();
  fMaxIndex     = fNpz*fNpx+fNpx;             // 2 halves of detector
  fHitMap       = new Int_t[fMaxIndex];
  if(fObjects) fNobjects = fObjects->GetEntriesFast();
  ClearMap();
}
//______________________________________________________________________
AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj, Int_t thr):
fSegmentation(seg),
fNpx(0),
fNpz(0),
fObjects(obj),
fNobjects(0),
fMaxIndex(0),
fMapThresholdArr(0),
fHitMap(0),
fMapThreshold(thr){
    //constructor

  fNpz          = fSegmentation->Npz();
  fNpx          = fSegmentation->Npx();
  fMaxIndex     = fNpz*fNpx+fNpx;             // 2 halves of detector
  fHitMap       = new Int_t[fMaxIndex];
  if(fObjects) fNobjects = fObjects->GetEntriesFast();
  ClearMap();
}
//______________________________________________________________________
AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj, TArrayI thr):
fSegmentation(seg),
fNpx(0),
fNpz(0),
fObjects(obj),
fNobjects(0),
fMaxIndex(0),
fMapThresholdArr(thr),
fHitMap(0),
fMapThreshold(0){
    //constructor

  fNpz          = fSegmentation->Npz();
  fNpx          = fSegmentation->Npx();
  fMaxIndex     = fNpz*fNpx+fNpx;             // 2 halves of detector
  fHitMap       = new Int_t[fMaxIndex];
  if(fObjects) fNobjects = fObjects->GetEntriesFast();
  ClearMap();
}

//______________________________________________________________________
AliITSMapA1::~AliITSMapA1(){
    //destructor

    if(fHitMap) delete[] fHitMap;
}

//______________________________________________________________________
void AliITSMapA1::ClearMap(){
    //clear array

    memset(fHitMap,0,sizeof(int)*fMaxIndex);
}
//______________________________________________________________________
void AliITSMapA1::SetArray(TObjArray *obj){
    // set array of objects

    fObjects =  obj;
    if (fObjects) fNobjects = fObjects->GetEntriesFast();
}
//______________________________________________________________________
Int_t AliITSMapA1::CheckedIndex(Int_t iz, Int_t ix) const {
    //check boundaries and return an index in array
    Int_t index=fNpx*iz+ix;

    //if (index > fMaxIndex) {
    if (index > fMaxIndex || index < 0) {
	printf("\n \n \n Try to read/write outside array !!!!"
	       " \n \n %d %d %d %d %d %d \n",iz,ix,fMaxIndex,index,fNpz,fNpx);
	// force crash
	return  -1;
    } else {
	return index;
    } // end if index>max or < 0
}
//______________________________________________________________________
void  AliITSMapA1::FillMap(){
    // fill array with digits indices

    Int_t ndigits = fObjects->GetEntriesFast();
    if (!ndigits) return;

    AliITSdigit *dig;
    for (Int_t ndig=0; ndig<ndigits; ndig++) {
	dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
	if(dig->GetSignal() > fMapThreshold) {
	    SetHit(dig->GetCoord1(),dig->GetCoord2(),ndig);
	} // end if fSignal > fMapthreshold
    } // end for ndig
}
//______________________________________________________________________
void  AliITSMapA1::FillMap2(){
    // fill array with digits indices

    Int_t ndigits = fObjects->GetEntriesFast();
    if (!ndigits) return;

    AliITSdigit *dig;
    for (Int_t ndig=0; ndig<ndigits; ndig++) {
	dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
	if(dig->GetSignal() > fMapThresholdArr[dig->GetCoord1()]) {
	    SetHit(dig->GetCoord1(),dig->GetCoord2(),ndig);
	} // end if fSignal > fMapthreshold
    } // end for ndig
}

//______________________________________________________________________
void  AliITSMapA1::SetHit(Int_t iz, Int_t ix, Int_t idigit){
    // set the digit index at a certain position in array

    fHitMap[CheckedIndex(iz, ix)]=idigit+1;
}
//______________________________________________________________________
void AliITSMapA1::DeleteHit(Int_t iz, Int_t ix){
    // delete an entry in array

    fHitMap[CheckedIndex(iz, ix)]=0;
}
//______________________________________________________________________
void AliITSMapA1::FlagHit(Int_t iz, Int_t ix){
    // flag an entry in array

    fHitMap[CheckedIndex(iz, ix)] = -TMath::Abs(fHitMap[CheckedIndex(iz, ix)]);
}
//______________________________________________________________________
Int_t AliITSMapA1::GetHitIndex(Int_t iz, Int_t ix) const {
    // return the digit index from a specific entry in array

    return TMath::Abs(fHitMap[CheckedIndex(iz, ix)])-1;
}
//______________________________________________________________________
TObject* AliITSMapA1::GetHit(Int_t iz, Int_t ix) const {
    // return the pointer to the digit 

    Int_t index=GetHitIndex(iz,ix);
    // Force crash if index does not exist ! 
    return (index <0) ? 0 : fObjects->UncheckedAt(GetHitIndex(iz,ix));
}
//______________________________________________________________________
Double_t AliITSMapA1::GetSignal(Int_t iz, Int_t ix) const{
    // get a pad signal
    Double_t signal;

    AliITSdigit *dig = (AliITSdigit*)GetHit(iz,ix);
    if(dig) signal=(Double_t)dig->GetSignal();
    else signal=0.;
    return signal;
}
//______________________________________________________________________
FlagTypeITS AliITSMapA1::TestHit(Int_t iz, Int_t ix)  {
    // check whether the digit has already been flagged

    if (CheckedIndex(iz, ix) < 0) return kEmptyITS;
    Int_t inf=fHitMap[CheckedIndex(iz, ix)]; 
    if (inf < 0) {
	return kUsedITS;
    } else if (inf == 0) {
	return kEmptyITS;
    } else {
	return kUnusedITS;
    } // end if inf
}

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