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.                  * 
 **************************************************************************/

/* $Id$ */

//_________________________________________________________________________//
//                                                                         //
//  TOF sdigit: member variables                                           //
//  fSector  : TOF sector                                                  //
//  fPlate   : TOF plate                                                   //
//  fStrip   : strips number                                               //
//  fPadx    : pad number along x                                          //
//  fPadz    : pad number along z                                          //
//  fTdc     : TArrayI of TDC values                                       //
//  fAdc     : TArrayI of ADC values                                       //
//                                                                         //
//  Getters, setters and member functions  defined here                    //
//                                                                         //
// -- Authors: F. Pierella, A. Seganti, D. Vicinanza                       //
//_________________________________________________________________________//

#include "AliLog.h"

#include "AliTOFGeometry.h"
#include "AliTOFSDigit.h"

ClassImp(AliTOFSDigit)

////////////////////////////////////////////////////////////////////////
AliTOFSDigit::AliTOFSDigit():
  fSector(-1),
  fPlate(-1),
  fStrip(-1),
  fPadx(-1),
  fPadz(-1),
  fNDigits(0),
  fTdc(0x0),
  fAdc(0x0),
  fTracks(0x0)
{
  //
  // default ctor
  //
}

////////////////////////////////////////////////////////////////////////
AliTOFSDigit::AliTOFSDigit(Int_t tracknum, Int_t * const vol,Int_t * const digit):
  TObject(),
  fSector(-1),
  fPlate(-1),
  fStrip(-1),
  fPadx(-1),
  fPadz(-1),
  fNDigits(0),
  fTdc(0x0),
  fAdc(0x0),
  fTracks(0x0)
{
  //
  // Constructor of digit object
  //

  fSector = vol[0];
  fPlate  = vol[1];
  fStrip  = vol[2];
  fPadx   = vol[3];
  fPadz   = vol[4];
  fNDigits = 1;
  fTdc = new TArrayI(fNDigits);
  (*fTdc)[0] = digit[0];
  fAdc = new TArrayI(fNDigits);
  (*fAdc)[0] = digit[1];
  fTracks = new TArrayI(kMAXDIGITS*fNDigits);
  (*fTracks)[0] = tracknum;
  for (Int_t i = 1; i <kMAXDIGITS*fNDigits; i++) {
    (*fTracks)[i] = -1;
  }
}

////////////////////////////////////////////////////////////////////////
AliTOFSDigit::AliTOFSDigit(const AliTOFSDigit & digit):
  TObject(digit),
  fSector(digit.fSector),
  fPlate(digit.fPlate),
  fStrip(digit.fStrip),
  fPadx(digit.fPadx),
  fPadz(digit.fPadz),
  fNDigits(digit.fNDigits),
  fTdc(0x0),
  fAdc(0x0),
  fTracks(0x0)
{
  // 
  // copy ctor for AliTOFSDigit object
  //
  fTdc = new TArrayI(*digit.fTdc);  
  fAdc = new TArrayI(*digit.fAdc);
  fTracks = new TArrayI(*digit.fTracks);
}

////////////////////////////////////////////////////////////////////////
AliTOFSDigit& AliTOFSDigit::operator=(const AliTOFSDigit & digit)
{
  // 
  // copy ctor for AliTOFSDigit object
  //

  if (this == &digit)
    return *this;

  TObject::operator=(digit);
  fSector = digit.fSector;
  fPlate  = digit.fPlate;
  fStrip  = digit.fStrip;
  fPadx   = digit.fPadx;
  fPadz   = digit.fPadz;
  fNDigits = digit.fNDigits;
  fTdc = digit.fTdc;
  fAdc = digit.fAdc;
  fTracks = digit.fTracks;
  return *this;

}

////////////////////////////////////////////////////////////////////////
AliTOFSDigit::AliTOFSDigit(Int_t sector, Int_t plate, Int_t strip, Int_t padx,
			   Int_t padz, Int_t tdc, Int_t adc):
  fSector(sector),
  fPlate(plate),
  fStrip(strip),
  fPadx(padx),
  fPadz(padz),
  fNDigits(1),
  fTdc(0x0),
  fAdc(0x0),
  fTracks(0x0)
{
  //
  // Constructor for sdigit
  //
  fTdc = new TArrayI(fNDigits);
  (*fTdc)[0] = tdc;   
  fAdc = new TArrayI(fNDigits);
  (*fAdc)[0] = adc;   
  // no tracks were specified, set them to -1
  fTracks = new TArrayI(kMAXDIGITS*fNDigits);
  for (Int_t i = 0; i <kMAXDIGITS*fNDigits; i++) {
    (*fTracks)[i] = -1;
  }
}

////////////////////////////////////////////////////////////////////////
void AliTOFSDigit::GetLocation(Int_t *Loc) const
{
  //
  // Get the coordinates of the digit
  // in terms of Sector - Plate - Strip - Pad
  //
  
  Loc[0]=fSector;
  Loc[1]=fPlate;
  Loc[2]=fStrip;
  Loc[3]=fPadx;
  Loc[4]=fPadz;
}

////////////////////////////////////////////////////////////////////////
void AliTOFSDigit::Update(Float_t tdcbin, Int_t tdc, Int_t adc, Int_t track)
{
  //
  // Add charge and track
  //
  
  Int_t sameTime = -1;
  Float_t tdcwindow = AliTOFGeometry::DeadTime()/tdcbin;
  for (Int_t i = 0; i < fNDigits; i++) {
    if (TMath::Abs(tdc-fTdc->At(i)) < tdcwindow) {
      sameTime = i;
      break;
    }
  }
  
  if (sameTime >= 0) { // another time measurement happens during the
		       // dead time of the hit pad => it corresponds
		       // to the same time measurement
    (*fAdc)[sameTime] += adc;

    // update track index array in case the current digit track index
    // is different from -1
    if (track!=-1) {

      //Find the first -1 value of the track index array and replace
      //it by the current digit track index
      for (Int_t iTrack=0; iTrack<kMAXDIGITS; iTrack++) {
	if (track==(*fTracks)[sameTime*kMAXDIGITS+iTrack]) break;
	if ((*fTracks)[sameTime*kMAXDIGITS+iTrack] == -1) {
	  (*fTracks)[sameTime*kMAXDIGITS+iTrack] = track;
	  break;
	}
	// write warning about many tracks going to this pad at same time
	if (iTrack == kMAXDIGITS-1) {
	  AliDebug(1,Form("Update: Many different tracks in the same TOF pad"
			  " (%2d %1d %2d %1d %2d)\n",
			  fSector,fPlate,fStrip,fPadz,fPadx));
	  //ToAliWarning(PrintPad());
	}
      }
    }

  } else { // they are two different time measurements

    // add new time slot
    fNDigits++;
    fTdc->Set(fNDigits);
    (*fTdc)[fNDigits-1] = tdc;
    fAdc->Set(fNDigits);
    (*fAdc)[fNDigits-1] = adc;
    fTracks->Set(fNDigits*kMAXDIGITS);
    (*fTracks)[(fNDigits-1)*kMAXDIGITS] = track;
    for (Int_t i = 1; i <kMAXDIGITS; i++)
      (*fTracks)[(fNDigits-1)*kMAXDIGITS+i] = -1;

  }
  
}

////////////////////////////////////////////////////////////////////////
void AliTOFSDigit::Update(AliTOFSDigit * const sdig)
{

  //
  // Perform the sum with sdig
  //

  Float_t tdcbin = AliTOFGeometry::TdcBinWidth();// [ps] hardwired for the time being

  Int_t track = -1;
  Int_t adc = -1;
  Int_t tdc = -1;

  // start loop on all sdig locations
  Int_t nlocations = sdig->GetNDigits();
  for (Int_t j = 0; j < nlocations; j++) {
    tdc = (Int_t)sdig->GetTdc(j);
    adc = (Int_t)sdig->GetAdc(j);

    // getting here only the first track number
    //Int_t track = GetTrack(j,0);

    // getting here all the track numbers
    for (Int_t iTrack = 0; iTrack<kMAXDIGITS; iTrack++) {
      track = sdig->GetTrack(j,iTrack);
      Update(tdcbin, tdc, adc, track);
    } // end loop on tracks

  } // end loop on sdig locations


}

////////////////////////////////////////////////////////////////////////
AliTOFSDigit::~AliTOFSDigit()
{
  //
  // dtor
  //
  delete fTdc;
  delete fAdc;
  delete fTracks;
}

////////////////////////////////////////////////////////////////////////

Int_t AliTOFSDigit::GetTotPad() const
{
  //
  // Get the "total" index of the pad inside a Sector
  // starting from the digits data.
  //
  
  Int_t pad = AliTOFGeometry::NpadZ()*fPadx + fPadz;
  Int_t before=0;
  
  switch(fPlate){ 
  case 0:
    //before = 0;
    break;
  case 1:
    before = AliTOFGeometry::NStripC();
    break;
  case 2:
    before = AliTOFGeometry::NStripB() +   AliTOFGeometry::NStripC();
    break;
  case 3:
    before = AliTOFGeometry::NStripA() +   AliTOFGeometry::NStripB() + AliTOFGeometry::NStripC();
    break;
  case 4:
    before = AliTOFGeometry::NStripA() + 2*AliTOFGeometry::NStripB() + AliTOFGeometry::NStripC();
    break;
  }
  
  Int_t strip = fStrip + before;
  Int_t padTot = AliTOFGeometry::NpadXStrip()*strip + pad;
  return padTot;
}
 AliTOFSDigit.cxx:1
 AliTOFSDigit.cxx:2
 AliTOFSDigit.cxx:3
 AliTOFSDigit.cxx:4
 AliTOFSDigit.cxx:5
 AliTOFSDigit.cxx:6
 AliTOFSDigit.cxx:7
 AliTOFSDigit.cxx:8
 AliTOFSDigit.cxx:9
 AliTOFSDigit.cxx:10
 AliTOFSDigit.cxx:11
 AliTOFSDigit.cxx:12
 AliTOFSDigit.cxx:13
 AliTOFSDigit.cxx:14
 AliTOFSDigit.cxx:15
 AliTOFSDigit.cxx:16
 AliTOFSDigit.cxx:17
 AliTOFSDigit.cxx:18
 AliTOFSDigit.cxx:19
 AliTOFSDigit.cxx:20
 AliTOFSDigit.cxx:21
 AliTOFSDigit.cxx:22
 AliTOFSDigit.cxx:23
 AliTOFSDigit.cxx:24
 AliTOFSDigit.cxx:25
 AliTOFSDigit.cxx:26
 AliTOFSDigit.cxx:27
 AliTOFSDigit.cxx:28
 AliTOFSDigit.cxx:29
 AliTOFSDigit.cxx:30
 AliTOFSDigit.cxx:31
 AliTOFSDigit.cxx:32
 AliTOFSDigit.cxx:33
 AliTOFSDigit.cxx:34
 AliTOFSDigit.cxx:35
 AliTOFSDigit.cxx:36
 AliTOFSDigit.cxx:37
 AliTOFSDigit.cxx:38
 AliTOFSDigit.cxx:39
 AliTOFSDigit.cxx:40
 AliTOFSDigit.cxx:41
 AliTOFSDigit.cxx:42
 AliTOFSDigit.cxx:43
 AliTOFSDigit.cxx:44
 AliTOFSDigit.cxx:45
 AliTOFSDigit.cxx:46
 AliTOFSDigit.cxx:47
 AliTOFSDigit.cxx:48
 AliTOFSDigit.cxx:49
 AliTOFSDigit.cxx:50
 AliTOFSDigit.cxx:51
 AliTOFSDigit.cxx:52
 AliTOFSDigit.cxx:53
 AliTOFSDigit.cxx:54
 AliTOFSDigit.cxx:55
 AliTOFSDigit.cxx:56
 AliTOFSDigit.cxx:57
 AliTOFSDigit.cxx:58
 AliTOFSDigit.cxx:59
 AliTOFSDigit.cxx:60
 AliTOFSDigit.cxx:61
 AliTOFSDigit.cxx:62
 AliTOFSDigit.cxx:63
 AliTOFSDigit.cxx:64
 AliTOFSDigit.cxx:65
 AliTOFSDigit.cxx:66
 AliTOFSDigit.cxx:67
 AliTOFSDigit.cxx:68
 AliTOFSDigit.cxx:69
 AliTOFSDigit.cxx:70
 AliTOFSDigit.cxx:71
 AliTOFSDigit.cxx:72
 AliTOFSDigit.cxx:73
 AliTOFSDigit.cxx:74
 AliTOFSDigit.cxx:75
 AliTOFSDigit.cxx:76
 AliTOFSDigit.cxx:77
 AliTOFSDigit.cxx:78
 AliTOFSDigit.cxx:79
 AliTOFSDigit.cxx:80
 AliTOFSDigit.cxx:81
 AliTOFSDigit.cxx:82
 AliTOFSDigit.cxx:83
 AliTOFSDigit.cxx:84
 AliTOFSDigit.cxx:85
 AliTOFSDigit.cxx:86
 AliTOFSDigit.cxx:87
 AliTOFSDigit.cxx:88
 AliTOFSDigit.cxx:89
 AliTOFSDigit.cxx:90
 AliTOFSDigit.cxx:91
 AliTOFSDigit.cxx:92
 AliTOFSDigit.cxx:93
 AliTOFSDigit.cxx:94
 AliTOFSDigit.cxx:95
 AliTOFSDigit.cxx:96
 AliTOFSDigit.cxx:97
 AliTOFSDigit.cxx:98
 AliTOFSDigit.cxx:99
 AliTOFSDigit.cxx:100
 AliTOFSDigit.cxx:101
 AliTOFSDigit.cxx:102
 AliTOFSDigit.cxx:103
 AliTOFSDigit.cxx:104
 AliTOFSDigit.cxx:105
 AliTOFSDigit.cxx:106
 AliTOFSDigit.cxx:107
 AliTOFSDigit.cxx:108
 AliTOFSDigit.cxx:109
 AliTOFSDigit.cxx:110
 AliTOFSDigit.cxx:111
 AliTOFSDigit.cxx:112
 AliTOFSDigit.cxx:113
 AliTOFSDigit.cxx:114
 AliTOFSDigit.cxx:115
 AliTOFSDigit.cxx:116
 AliTOFSDigit.cxx:117
 AliTOFSDigit.cxx:118
 AliTOFSDigit.cxx:119
 AliTOFSDigit.cxx:120
 AliTOFSDigit.cxx:121
 AliTOFSDigit.cxx:122
 AliTOFSDigit.cxx:123
 AliTOFSDigit.cxx:124
 AliTOFSDigit.cxx:125
 AliTOFSDigit.cxx:126
 AliTOFSDigit.cxx:127
 AliTOFSDigit.cxx:128
 AliTOFSDigit.cxx:129
 AliTOFSDigit.cxx:130
 AliTOFSDigit.cxx:131
 AliTOFSDigit.cxx:132
 AliTOFSDigit.cxx:133
 AliTOFSDigit.cxx:134
 AliTOFSDigit.cxx:135
 AliTOFSDigit.cxx:136
 AliTOFSDigit.cxx:137
 AliTOFSDigit.cxx:138
 AliTOFSDigit.cxx:139
 AliTOFSDigit.cxx:140
 AliTOFSDigit.cxx:141
 AliTOFSDigit.cxx:142
 AliTOFSDigit.cxx:143
 AliTOFSDigit.cxx:144
 AliTOFSDigit.cxx:145
 AliTOFSDigit.cxx:146
 AliTOFSDigit.cxx:147
 AliTOFSDigit.cxx:148
 AliTOFSDigit.cxx:149
 AliTOFSDigit.cxx:150
 AliTOFSDigit.cxx:151
 AliTOFSDigit.cxx:152
 AliTOFSDigit.cxx:153
 AliTOFSDigit.cxx:154
 AliTOFSDigit.cxx:155
 AliTOFSDigit.cxx:156
 AliTOFSDigit.cxx:157
 AliTOFSDigit.cxx:158
 AliTOFSDigit.cxx:159
 AliTOFSDigit.cxx:160
 AliTOFSDigit.cxx:161
 AliTOFSDigit.cxx:162
 AliTOFSDigit.cxx:163
 AliTOFSDigit.cxx:164
 AliTOFSDigit.cxx:165
 AliTOFSDigit.cxx:166
 AliTOFSDigit.cxx:167
 AliTOFSDigit.cxx:168
 AliTOFSDigit.cxx:169
 AliTOFSDigit.cxx:170
 AliTOFSDigit.cxx:171
 AliTOFSDigit.cxx:172
 AliTOFSDigit.cxx:173
 AliTOFSDigit.cxx:174
 AliTOFSDigit.cxx:175
 AliTOFSDigit.cxx:176
 AliTOFSDigit.cxx:177
 AliTOFSDigit.cxx:178
 AliTOFSDigit.cxx:179
 AliTOFSDigit.cxx:180
 AliTOFSDigit.cxx:181
 AliTOFSDigit.cxx:182
 AliTOFSDigit.cxx:183
 AliTOFSDigit.cxx:184
 AliTOFSDigit.cxx:185
 AliTOFSDigit.cxx:186
 AliTOFSDigit.cxx:187
 AliTOFSDigit.cxx:188
 AliTOFSDigit.cxx:189
 AliTOFSDigit.cxx:190
 AliTOFSDigit.cxx:191
 AliTOFSDigit.cxx:192
 AliTOFSDigit.cxx:193
 AliTOFSDigit.cxx:194
 AliTOFSDigit.cxx:195
 AliTOFSDigit.cxx:196
 AliTOFSDigit.cxx:197
 AliTOFSDigit.cxx:198
 AliTOFSDigit.cxx:199
 AliTOFSDigit.cxx:200
 AliTOFSDigit.cxx:201
 AliTOFSDigit.cxx:202
 AliTOFSDigit.cxx:203
 AliTOFSDigit.cxx:204
 AliTOFSDigit.cxx:205
 AliTOFSDigit.cxx:206
 AliTOFSDigit.cxx:207
 AliTOFSDigit.cxx:208
 AliTOFSDigit.cxx:209
 AliTOFSDigit.cxx:210
 AliTOFSDigit.cxx:211
 AliTOFSDigit.cxx:212
 AliTOFSDigit.cxx:213
 AliTOFSDigit.cxx:214
 AliTOFSDigit.cxx:215
 AliTOFSDigit.cxx:216
 AliTOFSDigit.cxx:217
 AliTOFSDigit.cxx:218
 AliTOFSDigit.cxx:219
 AliTOFSDigit.cxx:220
 AliTOFSDigit.cxx:221
 AliTOFSDigit.cxx:222
 AliTOFSDigit.cxx:223
 AliTOFSDigit.cxx:224
 AliTOFSDigit.cxx:225
 AliTOFSDigit.cxx:226
 AliTOFSDigit.cxx:227
 AliTOFSDigit.cxx:228
 AliTOFSDigit.cxx:229
 AliTOFSDigit.cxx:230
 AliTOFSDigit.cxx:231
 AliTOFSDigit.cxx:232
 AliTOFSDigit.cxx:233
 AliTOFSDigit.cxx:234
 AliTOFSDigit.cxx:235
 AliTOFSDigit.cxx:236
 AliTOFSDigit.cxx:237
 AliTOFSDigit.cxx:238
 AliTOFSDigit.cxx:239
 AliTOFSDigit.cxx:240
 AliTOFSDigit.cxx:241
 AliTOFSDigit.cxx:242
 AliTOFSDigit.cxx:243
 AliTOFSDigit.cxx:244
 AliTOFSDigit.cxx:245
 AliTOFSDigit.cxx:246
 AliTOFSDigit.cxx:247
 AliTOFSDigit.cxx:248
 AliTOFSDigit.cxx:249
 AliTOFSDigit.cxx:250
 AliTOFSDigit.cxx:251
 AliTOFSDigit.cxx:252
 AliTOFSDigit.cxx:253
 AliTOFSDigit.cxx:254
 AliTOFSDigit.cxx:255
 AliTOFSDigit.cxx:256
 AliTOFSDigit.cxx:257
 AliTOFSDigit.cxx:258
 AliTOFSDigit.cxx:259
 AliTOFSDigit.cxx:260
 AliTOFSDigit.cxx:261
 AliTOFSDigit.cxx:262
 AliTOFSDigit.cxx:263
 AliTOFSDigit.cxx:264
 AliTOFSDigit.cxx:265
 AliTOFSDigit.cxx:266
 AliTOFSDigit.cxx:267
 AliTOFSDigit.cxx:268
 AliTOFSDigit.cxx:269
 AliTOFSDigit.cxx:270
 AliTOFSDigit.cxx:271
 AliTOFSDigit.cxx:272
 AliTOFSDigit.cxx:273
 AliTOFSDigit.cxx:274
 AliTOFSDigit.cxx:275
 AliTOFSDigit.cxx:276
 AliTOFSDigit.cxx:277
 AliTOFSDigit.cxx:278
 AliTOFSDigit.cxx:279
 AliTOFSDigit.cxx:280
 AliTOFSDigit.cxx:281
 AliTOFSDigit.cxx:282
 AliTOFSDigit.cxx:283
 AliTOFSDigit.cxx:284
 AliTOFSDigit.cxx:285
 AliTOFSDigit.cxx:286
 AliTOFSDigit.cxx:287
 AliTOFSDigit.cxx:288
 AliTOFSDigit.cxx:289
 AliTOFSDigit.cxx:290
 AliTOFSDigit.cxx:291
 AliTOFSDigit.cxx:292
 AliTOFSDigit.cxx:293
 AliTOFSDigit.cxx:294
 AliTOFSDigit.cxx:295
 AliTOFSDigit.cxx:296
 AliTOFSDigit.cxx:297
 AliTOFSDigit.cxx:298
 AliTOFSDigit.cxx:299
 AliTOFSDigit.cxx:300
 AliTOFSDigit.cxx:301
 AliTOFSDigit.cxx:302
 AliTOFSDigit.cxx:303
 AliTOFSDigit.cxx:304
 AliTOFSDigit.cxx:305
 AliTOFSDigit.cxx:306
 AliTOFSDigit.cxx:307
 AliTOFSDigit.cxx:308
 AliTOFSDigit.cxx:309
 AliTOFSDigit.cxx:310
 AliTOFSDigit.cxx:311
 AliTOFSDigit.cxx:312
 AliTOFSDigit.cxx:313
 AliTOFSDigit.cxx:314
 AliTOFSDigit.cxx:315
 AliTOFSDigit.cxx:316
 AliTOFSDigit.cxx:317