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 <TH1.h>
#include <TObjArray.h>

#include "AliITSMapA2.h"
#include "AliITSsegmentation.h"
#include "AliITSdigit.h"

////////////////////////////////////////////////////////////////////////
//  Map Class for ITS. Implementation A2. In this implementation, the //
// 2 dimensional (iz,ix) map is filled with Double precision floating //
// point values. Since this class is derived for AliITSMapA1 it also  //
// has all of the functionality of that class as well. 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(AliITSMapA2)

//______________________________________________________________________
AliITSMapA2::AliITSMapA2():
fHitMapD(0),
fMapThresholdD(0),
fScaleSizeX(0),
fScaleSizeZ(0){
    // default constructor

    fSegmentation  = 0;
    fNpz           = 0;
    fNpx           = 0;
    fMaxIndex      = 0;
    fObjects       = 0;
    fNobjects      = 0;
}
//______________________________________________________________________
AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg):
fHitMapD(0),
fMapThresholdD(0),
fScaleSizeX(1),
fScaleSizeZ(1){
    //constructor

    fSegmentation  = seg;
    fNpz           = fSegmentation->Npz();
    fNpx           = fSegmentation->Npx();
    fMaxIndex      = fNpz*fNpx+fNpx;       // 2 halves of detector
    fHitMapD       = new Double_t[fMaxIndex+1];
    fObjects       = 0;
    fNobjects      = 0;
    ClearMap();
}
//______________________________________________________________________
AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg,
			 Int_t scalesizeX, Int_t scalesizeZ):
fHitMapD(0),
fMapThresholdD(0),
fScaleSizeX(scalesizeX),
fScaleSizeZ(scalesizeZ){
    //constructor

    fSegmentation  = seg;
    fNpz           = fScaleSizeZ*fSegmentation->Npz();
    fNpx           = fScaleSizeX*fSegmentation->Npx();
    fMaxIndex      = fNpz*fNpx+fNpx;             // 2 halves of detector
    fHitMapD       = new Double_t[fMaxIndex+1];
    fObjects       = 0;
    fNobjects      = 0;
    ClearMap();
}
//______________________________________________________________________
AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg, TObjArray *obj, 
			 Double_t thresh):
fHitMapD(0),
fMapThresholdD(thresh),
fScaleSizeX(1),
fScaleSizeZ(1){
    //constructor

    fNobjects      = 0;
    fSegmentation  = seg;
    fNpz           = fSegmentation->Npz();
    fNpx           = fSegmentation->Npx();
    fMaxIndex      = fNpz*fNpx+fNpx;             // 2 halves of detector  
    fHitMapD       = new Double_t[fMaxIndex+1];
    fObjects       =  obj;
    if (fObjects) fNobjects = fObjects->GetEntriesFast();
    ClearMap();
}
//______________________________________________________________________
AliITSMapA2::~AliITSMapA2(){
    //destructor

    if (fHitMapD) delete[] fHitMapD;
}


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

    memset(fHitMapD,0,sizeof(Double_t)*fMaxIndex);
}
//______________________________________________________________________
void  AliITSMapA2::FillMap(){
    // fills signal map from digits - apply a threshold for signal
  
    if (!fObjects) return;

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

    AliITSdigit *dig;
    for (Int_t ndig=0; ndig<ndigits; ndig++) {
	dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
	Double_t signal = (Double_t)(dig->GetSignal());
	if (signal > fMapThresholdD) SetHit(dig->GetCoord1(),dig->GetCoord2(),signal);
    } // end for ndig
}
//______________________________________________________________________
void AliITSMapA2::FlagHit(Int_t iz, Int_t ix){
  //flag an entry

    fHitMapD[CheckedIndex(iz, ix)]=
                -1000.*TMath::Abs((Int_t)(fHitMapD[CheckedIndex(iz, ix)])+1.);
}
//______________________________________________________________________
TObject* AliITSMapA2::GetHit(Int_t i, Int_t /* dummy */) const {
  //return a pointer to the 1D histogram

    if (fObjects) {
	return fObjects->UncheckedAt(i);
    } else return NULL;
}
//______________________________________________________________________
Double_t AliITSMapA2::GetSignal(Int_t index) const {
    //get signal in a cell 

    if (index<fMaxIndex) return (index <0) ? 0. : fHitMapD[index];
    else return 0.;
}
//______________________________________________________________________
FlagTypeITS AliITSMapA2::TestHit(Int_t iz, Int_t ix){
    // check if the entry has already been flagged

    if (CheckedIndex(iz, ix) < 0) return kEmptyITS;
    Int_t inf=(Int_t)fHitMapD[CheckedIndex(iz, ix)];
    
    if (inf <= -1000) {
	return kUsedITS;
    } else if (inf == 0) {
	return kEmptyITS;
    } else {
	return kUnusedITS;
    } // end if inf...
}
//______________________________________________________________________
void  AliITSMapA2::FillMapFromHist(){
    // fills map from 1D histograms

    if (!fObjects) return;

    // an example
    for( Int_t i=0; i<fNobjects; i++) {
	TH1F *hist =(TH1F *)fObjects->UncheckedAt(i);
	Int_t nsamples = hist->GetNbinsX();
	for( Int_t j=0; j<nsamples; j++) {
	    Double_t signal = (Double_t)(hist->GetBinContent(j+1));
	    if (signal > fMapThresholdD) SetHit(i,j,signal);
	} // end for j
    } // end for i
}
//______________________________________________________________________
void  AliITSMapA2::FillHist(){
    // fill 1D histograms from map

    if (!fObjects || fScaleSizeX != 1) return;

    // an example
    for( Int_t i=0; i<fNobjects; i++) {
	TH1F *hist =(TH1F *)fObjects->UncheckedAt(i);
	for( Int_t j=0; j<fNpx; j++) {
	    Double_t signal=GetSignal(i,j);
	    if (signal > fMapThresholdD) hist->Fill((Float_t)j,signal);
	} // end for j
    } // end for i
}
//______________________________________________________________________
void  AliITSMapA2::ResetHist(){
    // Reset histograms

    if (!fObjects) return;

    for( Int_t i=0; i<fNobjects; i++) {
	if ((*fObjects)[i])    ((TH1F*)(*fObjects)[i])->Reset();
    } // end for i
}
//______________________________________________________________________
void AliITSMapA2::AddSignal(Int_t iz,Int_t ix,Double_t sig){
    // Addes sig to cell iz. equivalent to the very common
    // sig = fMapA2->GetSignal(iz,ix) + sig; fMapA2->SetHit(iz,ix,sig);


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