1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 //_________________________________________________________________________
19 // TOF sdigit: member variables
20 // fSector : TOF sector
22 // fStrip : strips number
23 // fPadx : pad number along x
24 // fPadz : pad number along z
25 // fTdc : TArrayF of TDC values
26 // fAdc : TArrayF of ADC values
28 // Getters, setters and member functions defined here
30 //*-- Authors: F. Pierella, A. Seganti, D. Vicinanza
32 #include <Riostream.h>
39 #include "AliTOFGeometry.h"
40 #include "AliTOFSDigit.h"
42 ClassImp(AliTOFSDigit)
44 ////////////////////////////////////////////////////////////////////////
45 AliTOFSDigit::AliTOFSDigit()
56 ////////////////////////////////////////////////////////////////////////
57 AliTOFSDigit::AliTOFSDigit(Int_t tracknum, Int_t *vol,Float_t *digit)
61 // Constructor of digit object
70 fTdc = new TArrayF(fNDigits);
71 (*fTdc)[0] = digit[0];
72 fAdc = new TArrayF(fNDigits);
73 (*fAdc)[0] = digit[1];
74 fTracks = new TArrayI(kMAXDIGITS*fNDigits);
75 (*fTracks)[0] = tracknum;
76 for (Int_t i = 1; i <kMAXDIGITS*fNDigits; i++) {
81 ////////////////////////////////////////////////////////////////////////
82 AliTOFSDigit::AliTOFSDigit(const AliTOFSDigit & digit)
86 // copy ctor for AliTOFSDigit object
88 fSector = digit.fSector;
89 fPlate = digit.fPlate;
90 fStrip = digit.fStrip;
93 fNDigits = digit.fNDigits;
94 fTdc = new TArrayF(*digit.fTdc);
95 fAdc = new TArrayF(*digit.fAdc);
96 fTracks = new TArrayI(*digit.fTracks);
99 ////////////////////////////////////////////////////////////////////////
100 AliTOFSDigit::AliTOFSDigit(Int_t sector, Int_t plate, Int_t strip, Int_t padx,
101 Int_t padz, Float_t tdc, Float_t adc)
104 // Constructor for sdigit
112 fTdc = new TArrayF(fNDigits);
114 fAdc = new TArrayF(fNDigits);
116 // no tracks were specified, set them to -1
117 fTracks = new TArrayI(kMAXDIGITS*fNDigits);
118 for (Int_t i = 0; i <kMAXDIGITS*fNDigits; i++) {
123 ////////////////////////////////////////////////////////////////////////
124 void AliTOFSDigit::GetLocation(Int_t *Loc) const
127 // Get the coordinates of the digit
128 // in terms of Sector - Plate - Strip - Pad
138 ////////////////////////////////////////////////////////////////////////
139 void AliTOFSDigit::Update(Float_t tdcbin, Int_t tdc, Int_t adc, Int_t track)
142 // Add charge and track
146 Float_t tdcwindow=((Float_t)AliTOFGeometry::TimeDiff())/tdcbin;
147 for (Int_t i = 0; i < fNDigits; i++) {
148 if (TMath::Abs(tdc-fTdc->At(i)) < tdcwindow) {
155 (*fAdc)[sameTime] += static_cast<Float_t>(adc);
156 // update track - find the first -1 value and replace it by the
158 for (Int_t iTrack=0; iTrack<kMAXDIGITS; iTrack++) {
159 if ((*fTracks)[sameTime*kMAXDIGITS+iTrack] == -1) {
160 (*fTracks)[sameTime*kMAXDIGITS+iTrack] = track;
163 // write warning about many tracks going to this pad
164 if (iTrack == kMAXDIGITS) {
165 AliWarning("Many hits in the padhit");
166 // ToAliWarning(PrintPad());
173 (*fTdc)[fNDigits-1] = tdc;
175 (*fAdc)[fNDigits-1] = adc;
176 fTracks->Set(fNDigits*kMAXDIGITS);
177 (*fTracks)[(fNDigits-1)*kMAXDIGITS] = track;
178 for (Int_t i = 1; i <kMAXDIGITS; i++) {
179 (*fTracks)[(fNDigits-1)*kMAXDIGITS+i] = -1;
185 ////////////////////////////////////////////////////////////////////////
186 void AliTOFSDigit::Update(AliTOFSDigit* sdig)
190 // Perform the sum with sdig
193 // start loop on all sdig locations
194 Int_t nlocations=sdig->GetNDigits();
196 for (Int_t j = 0; j < nlocations; j++) {
197 Float_t tdcbin = AliTOFGeometry::TdcBinWidth();// [ps] hardwired for the time being
198 Int_t tdc=(Int_t)sdig->GetTdc(j);
199 Int_t adc=(Int_t)sdig->GetAdc(j);
200 // getting here only the first track number
201 Int_t track=GetTrack(j,0);
205 Float_t tdcwindow=((Float_t)AliTOFGeometry::TimeDiff())/tdcbin;
206 for (Int_t i = 0; i < fNDigits; i++) {
207 if (TMath::Abs(tdc-fTdc->At(i)) < tdcwindow) {
214 (*fAdc)[sameTime] += static_cast<Float_t>(adc);
215 // update track - find the first -1 value and replace it by the
217 for (Int_t iTrack=0; iTrack<kMAXDIGITS; iTrack++) {
218 if ((*fTracks)[sameTime*kMAXDIGITS+iTrack] == -1) {
219 (*fTracks)[sameTime*kMAXDIGITS+iTrack] = track;
222 // write warning about many tracks going to this pad
223 if (iTrack == kMAXDIGITS) {
224 AliWarning("Many hits in the padhit");
225 // ToAliWarning(PrintPad());
232 (*fTdc)[fNDigits-1] = tdc;
234 (*fAdc)[fNDigits-1] = adc;
235 fTracks->Set(fNDigits*kMAXDIGITS);
236 (*fTracks)[(fNDigits-1)*kMAXDIGITS] = track;
237 for (Int_t i = 1; i <kMAXDIGITS; i++) {
238 (*fTracks)[(fNDigits-1)*kMAXDIGITS+i] = -1;
239 } // for (Int_t i = 1; i <kMAXDIGITS; i++)
240 } // if (sameTime >= 0)
241 } // end loop on sdig locations
244 ////////////////////////////////////////////////////////////////////////
245 AliTOFSDigit::~AliTOFSDigit()
255 ////////////////////////////////////////////////////////////////////////
257 Int_t AliTOFSDigit::GetTotPad(AliTOFGeometry *tofGeom) const
260 // Get the "total" index of the pad inside a Sector
261 // starting from the digits data.
264 Int_t pad = 2*fPadx + fPadz;
265 //Int_t pad = fPadx+AliTOFGeometry::NpadX()*fPadz;
273 before = tofGeom->NStripC();
276 before = AliTOFGeometry::NStripB() + tofGeom->NStripC();
279 before = AliTOFGeometry::NStripA() + AliTOFGeometry::NStripB() + tofGeom->NStripC();
282 before = AliTOFGeometry::NStripA() + 2*AliTOFGeometry::NStripB() + tofGeom->NStripC();
286 Int_t strip = fStrip + before;
287 Int_t padTot = AliTOFGeometry::NpadXStrip()*strip + pad;