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 //_________________________________________________________________________//
20 // TOF sdigit: member variables //
21 // fSector : TOF sector //
22 // fPlate : TOF plate //
23 // fStrip : strips number //
24 // fPadx : pad number along x //
25 // fPadz : pad number along z //
26 // fTdc : TArrayI of TDC values //
27 // fAdc : TArrayI of ADC values //
29 // Getters, setters and member functions defined here //
31 // -- Authors: F. Pierella, A. Seganti, D. Vicinanza //
32 //_________________________________________________________________________//
34 #include "AliTOFGeometry.h"
35 #include "AliTOFSDigit.h"
37 ClassImp(AliTOFSDigit)
39 ////////////////////////////////////////////////////////////////////////
40 AliTOFSDigit::AliTOFSDigit():
56 ////////////////////////////////////////////////////////////////////////
57 AliTOFSDigit::AliTOFSDigit(Int_t tracknum, Int_t *vol,Int_t *digit):
70 // Constructor of digit object
79 fTdc = new TArrayI(fNDigits);
80 (*fTdc)[0] = digit[0];
81 fAdc = new TArrayI(fNDigits);
82 (*fAdc)[0] = digit[1];
83 fTracks = new TArrayI(kMAXDIGITS*fNDigits);
84 (*fTracks)[0] = tracknum;
85 for (Int_t i = 1; i <kMAXDIGITS*fNDigits; i++) {
90 ////////////////////////////////////////////////////////////////////////
91 AliTOFSDigit::AliTOFSDigit(const AliTOFSDigit & digit):
93 fSector(digit.fSector),
98 fNDigits(digit.fNDigits),
104 // copy ctor for AliTOFSDigit object
106 fTdc = new TArrayI(*digit.fTdc);
107 fAdc = new TArrayI(*digit.fAdc);
108 fTracks = new TArrayI(*digit.fTracks);
111 ////////////////////////////////////////////////////////////////////////
112 AliTOFSDigit& AliTOFSDigit::operator=(const AliTOFSDigit & digit)
115 // copy ctor for AliTOFSDigit object
121 TObject::operator=(digit);
122 fSector = digit.fSector;
123 fPlate = digit.fPlate;
124 fStrip = digit.fStrip;
127 fNDigits = digit.fNDigits;
130 fTracks = digit.fTracks;
135 ////////////////////////////////////////////////////////////////////////
136 AliTOFSDigit::AliTOFSDigit(Int_t sector, Int_t plate, Int_t strip, Int_t padx,
137 Int_t padz, Int_t tdc, Int_t adc):
149 // Constructor for sdigit
151 fTdc = new TArrayI(fNDigits);
153 fAdc = new TArrayI(fNDigits);
155 // no tracks were specified, set them to -1
156 fTracks = new TArrayI(kMAXDIGITS*fNDigits);
157 for (Int_t i = 0; i <kMAXDIGITS*fNDigits; i++) {
162 ////////////////////////////////////////////////////////////////////////
163 void AliTOFSDigit::GetLocation(Int_t *Loc) const
166 // Get the coordinates of the digit
167 // in terms of Sector - Plate - Strip - Pad
177 ////////////////////////////////////////////////////////////////////////
178 void AliTOFSDigit::Update(Float_t tdcbin, Int_t tdc, Int_t adc, Int_t track)
181 // Add charge and track
185 Float_t tdcwindow = AliTOFGeometry::DeadTime()/tdcbin;
186 for (Int_t i = 0; i < fNDigits; i++) {
187 if (TMath::Abs(tdc-fTdc->At(i)) < tdcwindow) {
193 if (sameTime >= 0) { // another time measurement happens during the
194 // dead time of the hit pad => it corresponds
195 // to the same time measurement
196 (*fAdc)[sameTime] += adc;
198 // update track index array in case the current digit track index
199 // is different from -1
202 //Find the first -1 value of the track index array and replace
203 //it by the current digit track index
204 for (Int_t iTrack=0; iTrack<kMAXDIGITS; iTrack++) {
205 if (track==(*fTracks)[sameTime*kMAXDIGITS+iTrack]) break;
206 if ((*fTracks)[sameTime*kMAXDIGITS+iTrack] == -1) {
207 (*fTracks)[sameTime*kMAXDIGITS+iTrack] = track;
210 // write warning about many tracks going to this pad
211 if (iTrack == kMAXDIGITS-1) {
212 printf("W-AliTOFSDigit::Update: Many different tracks in the same TOF pad (%2d %1d %2d %1d %2d)\n",
213 fSector,fPlate,fStrip,fPadz,fPadx);
214 //ToAliWarning(PrintPad());
219 } else { // they are two different time measurements
224 (*fTdc)[fNDigits-1] = tdc;
226 (*fAdc)[fNDigits-1] = adc;
227 fTracks->Set(fNDigits*kMAXDIGITS);
228 (*fTracks)[(fNDigits-1)*kMAXDIGITS] = track;
229 for (Int_t i = 1; i <kMAXDIGITS; i++)
230 (*fTracks)[(fNDigits-1)*kMAXDIGITS+i] = -1;
236 ////////////////////////////////////////////////////////////////////////
237 void AliTOFSDigit::Update(AliTOFSDigit* sdig)
241 // Perform the sum with sdig
244 Float_t tdcbin = AliTOFGeometry::TdcBinWidth();// [ps] hardwired for the time being
250 // start loop on all sdig locations
251 Int_t nlocations = sdig->GetNDigits();
252 for (Int_t j = 0; j < nlocations; j++) {
253 tdc = (Int_t)sdig->GetTdc(j);
254 adc = (Int_t)sdig->GetAdc(j);
256 // getting here only the first track number
257 //Int_t track = GetTrack(j,0);
259 // getting here all the track numbers
260 for (Int_t iTrack = 0; iTrack<kMAXDIGITS; iTrack++) {
261 track = sdig->GetTrack(j,iTrack);
262 Update(tdcbin, tdc, adc, track);
263 } // end loop on tracks
265 } // end loop on sdig locations
270 ////////////////////////////////////////////////////////////////////////
271 AliTOFSDigit::~AliTOFSDigit()
281 ////////////////////////////////////////////////////////////////////////
283 Int_t AliTOFSDigit::GetTotPad() const
286 // Get the "total" index of the pad inside a Sector
287 // starting from the digits data.
290 Int_t pad = AliTOFGeometry::NpadZ()*fPadx + fPadz;
298 before = AliTOFGeometry::NStripC();
301 before = AliTOFGeometry::NStripB() + AliTOFGeometry::NStripC();
304 before = AliTOFGeometry::NStripA() + AliTOFGeometry::NStripB() + AliTOFGeometry::NStripC();
307 before = AliTOFGeometry::NStripA() + 2*AliTOFGeometry::NStripB() + AliTOFGeometry::NStripC();
311 Int_t strip = fStrip + before;
312 Int_t padTot = AliTOFGeometry::NpadXStrip()*strip + pad;