]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSChannelStatus.cxx
Update of the class ESDMuonFilter. New marcros for creating AOD with muon information...
[u/mrichter/AliRoot.git] / ITS / AliITSChannelStatus.cxx
CommitLineData
4a60ccc4 1/**************************************************************************
2 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id: $ */
17
18//////////////////////////////////////////////////////////////////////////
19// //
20// Implementation of the class for bad channel treatment in the tracker //
21// Stores 1 status bit for each SPD pixel and SDD anode: //
22// 0 = bad channel //
23// 1 = good channel //
24// Dead and noisy channels are read from AliITSCalibration objects //
25// Origin: F.Prino, Torino, prino@to.infn.it //
26// //
27//////////////////////////////////////////////////////////////////////////
28
29#include "AliITSChannelStatus.h"
30#include "AliITSCalibrationSPD.h"
31#include "AliITSCalibrationSDD.h"
32#include "AliCDBEntry.h"
33#include "AliLog.h"
34
35ClassImp(AliITSChannelStatus)
36
37
38//______________________________________________________________________
39AliITSChannelStatus::AliITSChannelStatus():
40TObject(),
41fSPDChannelStatus(0),
42fSDDChannelStatus(0)
43{
44 // default constructor
45 UInt_t nSPDchan=kSPDModules*kSPDNpxPerModule*kSPDNpzPerModule;
46 fSPDChannelStatus=new TBits(nSPDchan);
47 UInt_t nSDDchan=kSDDModules*kSDDAnodesPerModule;
48 fSDDChannelStatus=new TBits(nSDDchan);
49 InitDefaults();
50}
51//______________________________________________________________________
52AliITSChannelStatus::AliITSChannelStatus(AliCDBManager *cdb):
53TObject(),
54fSPDChannelStatus(0),
55fSDDChannelStatus(0)
56{
57 AliCDBEntry* spdEntryD = cdb->Get("ITS/Calib/SPDDead");
58 if (!spdEntryD) AliFatal("Cannot get CDB entry for SPDDead");
59 TObjArray* deadArrSPD = (TObjArray*)spdEntryD->GetObject();
60 if (!deadArrSPD) AliFatal("No object found in SPDDead file");
61
62 AliCDBEntry* spdEntryN = cdb->Get("ITS/Calib/SPDNoisy");
63 if (!spdEntryN) AliFatal("Cannot get CDB entry for SPDNoisy");
64 TObjArray* noisArrSPD = (TObjArray*)spdEntryN->GetObject();
65 if (!noisArrSPD) AliFatal("No object found in SPDNoisy file");
66
67 AliCDBEntry* sddEntry = cdb->Get("ITS/Calib/CalibSDD");
68 if (!sddEntry) AliFatal("Cannot get CDB entry for CalibSDD");
69 TObjArray* calArrSDD = (TObjArray*)sddEntry->GetObject();
70 if (!calArrSDD) AliFatal("No object found in CalibSDD file");
71
72 UInt_t nSPDchan=kSPDModules*kSPDNpxPerModule*kSPDNpzPerModule;
73 fSPDChannelStatus=new TBits(nSPDchan);
74 UInt_t nSDDchan=kSDDModules*kSDDAnodesPerModule;
75 fSDDChannelStatus=new TBits(nSDDchan);
76 InitFromOCDB(deadArrSPD,noisArrSPD,calArrSDD);
77}
78//______________________________________________________________________
79void AliITSChannelStatus::InitDefaults(){
80 // fill bitmaps setting all channels as good
81 for(Int_t imod=0; imod<kSPDModules; imod++){
82 for(Int_t ix=0; ix<kSPDNpxPerModule; ix++){
83 for(Int_t iz=0; iz<kSPDNpzPerModule; iz++){
84 Int_t index=imod*kSPDNpxPerModule*kSPDNpzPerModule+ix*kSPDNpzPerModule+iz;
85 fSPDChannelStatus->SetBitNumber(index,kTRUE);
86 }
87 }
88 }
89 for(Int_t imod=0; imod<kSDDModules; imod++){
90 for(Int_t ian=0; ian<kSDDAnodesPerModule; ian++){
91 Int_t index=imod*kSDDAnodesPerModule+ian;
92 fSDDChannelStatus->SetBitNumber(index,kTRUE);
93 }
94 }
95}
96//______________________________________________________________________
97void AliITSChannelStatus::InitFromOCDB(TObjArray* deadArrSPD, TObjArray* noisArrSPD, TObjArray* calArrSDD){
98// fills bitmaps from arrays of AliITSCalibrationSXD objects
99
100 // SPD modules
101 for(Int_t imod=0; imod<kSPDModules; imod++){
102 for(Int_t ix=0; ix<kSPDNpxPerModule; ix++){
103 for(Int_t iz=0; iz<kSPDNpzPerModule; iz++){
104 Int_t index=imod*kSPDNpxPerModule*kSPDNpzPerModule+ix*kSPDNpzPerModule+iz;
105 fSPDChannelStatus->SetBitNumber(index,kTRUE);
106 }
107 }
108 Int_t ix,iz;
109
110 // Mask SPD dead pixels
111 AliITSCalibrationSPD* deadspd=(AliITSCalibrationSPD*)deadArrSPD->At(imod);
112 for(Int_t ipix=0; ipix<deadspd->GetNrBad();ipix++){
113 deadspd->GetBadPixel(ipix,ix,iz);
114 Int_t index=imod*kSPDNpxPerModule*kSPDNpzPerModule+ix*kSPDNpzPerModule+iz;
115 fSPDChannelStatus->SetBitNumber(index,kFALSE);
116 }
117
118 // Mask SPD noisy pixels
119 AliITSCalibrationSPD* noisspd=(AliITSCalibrationSPD*)noisArrSPD->At(imod);
120 for(Int_t ipix=0; ipix<noisspd->GetNrBad();ipix++){
121 noisspd->GetBadPixel(ipix,ix,iz);
122 Int_t index=imod*kSPDNpxPerModule*kSPDNpzPerModule+ix*kSPDNpzPerModule+iz;
123 fSPDChannelStatus->SetBitNumber(index,kFALSE);
124 }
125 }
126
127 // SDD modules
128 for(Int_t imod=0; imod<kSDDModules; imod++){
129 AliITSCalibrationSDD* calsdd=(AliITSCalibrationSDD*)calArrSDD->At(imod);
130 for(Int_t ian=0; ian<kSDDAnodesPerModule; ian++){
131 Bool_t cstatus=kTRUE;
132 if(calsdd->IsBadChannel(ian)) cstatus=kFALSE;
133 Int_t index=imod*kSDDAnodesPerModule+ian;
134 fSDDChannelStatus->SetBitNumber(index,cstatus);
135 }
136 }
137}
138//______________________________________________________________________
139AliITSChannelStatus::AliITSChannelStatus(const AliITSChannelStatus& cstatus):
140TObject(),
141fSPDChannelStatus(cstatus.fSPDChannelStatus),
142fSDDChannelStatus(cstatus.fSDDChannelStatus)
143{
144 // copy constructor
145}
146//______________________________________________________________________
147AliITSChannelStatus& AliITSChannelStatus::operator=(const AliITSChannelStatus& cstatus)
148{
149 // assignment operator
150 this->~AliITSChannelStatus();
151 new(this) AliITSChannelStatus(cstatus);
152 return *this;
153}
154
155//______________________________________________________________________
156AliITSChannelStatus::~AliITSChannelStatus(){
157 // destructor
158 if(fSPDChannelStatus) delete fSPDChannelStatus;
159 if(fSDDChannelStatus) delete fSDDChannelStatus;
160}
161
162//______________________________________________________________________
163Bool_t AliITSChannelStatus::CheckBounds(Int_t imod, Int_t iz, Int_t ix) const {
164 // check for out of bounds
165 if(imod<0 || imod>=kSPDModules+kSDDModules){
166 AliError(Form("Module number out of range 0-%d",kSPDModules+kSDDModules));
167 return kFALSE;
168 }
169 if(imod<kSPDModules){
170 if(ix<0 || ix>=kSPDNpxPerModule || iz<0 || iz>=kSPDNpzPerModule){
171 AliError("SPD: Pixel number out of range");
172 return kFALSE;
173 }
174 }else{
175 if(iz<0 || iz>=kSDDAnodesPerModule){
176 AliError("SDD: anode number out of range");
177 return kFALSE;
178 }
179 }
180 return kTRUE;
181}
182//______________________________________________________________________
183Bool_t AliITSChannelStatus::GetChannelStatus(Int_t imod, Int_t iz, Int_t ix) const {
184 // return status of inquired channel
185 if(CheckBounds(imod,iz,ix)==kFALSE) return kFALSE;
186 if(imod<kSPDModules){
187 Int_t index=imod*kSPDNpxPerModule*kSPDNpzPerModule+ix*kSPDNpzPerModule+iz;
188 return fSPDChannelStatus->TestBitNumber(index);
189 }else{
190 imod-=kSPDModules;
191 Int_t index=imod*kSDDAnodesPerModule+iz;
192 return fSDDChannelStatus->TestBitNumber(index);
193 }
194}
195//______________________________________________________________________
196void AliITSChannelStatus::SetChannelStatus(Bool_t cstatus, Int_t imod, Int_t iz, Int_t ix){
197 // set status for given channel
198 if(CheckBounds(imod,iz,ix)==kFALSE) return;
199 if(imod<kSPDModules){
200 Int_t index=imod*kSPDNpxPerModule*kSPDNpzPerModule+ix*kSPDNpzPerModule+iz;
201 fSPDChannelStatus->SetBitNumber(index,cstatus);
202 }else{
203 imod-=kSPDModules;
204 Int_t index=imod*kSDDAnodesPerModule+iz;
205 fSDDChannelStatus->SetBitNumber(index,cstatus);
206 }
207}