* provided "as is" without express or implied warranty. *
**************************************************************************/
+/* $Id$ */
//_________________________________________________________________________
// TOF sdigit: member variables
//
//*-- Authors: F. Pierella, A. Seganti, D. Vicinanza
-#include <iostream.h>
+#include <Riostream.h>
#include "TArrayF.h"
#include "TArrayI.h"
+#include "AliRun.h"
#include "AliTOF.h"
+#include "AliTOFGeometry.h"
#include "AliTOFSDigit.h"
-#include "AliTOFConstants.h"
-#include "AliRun.h"
-#include "AliMC.h"
ClassImp(AliTOFSDigit)
////////////////////////////////////////////////////////////////////////
AliTOFSDigit::AliTOFSDigit(Int_t tracknum, Int_t *vol,Float_t *digit)
+:TObject()
{
//
// Constructor of digit object
//
+
fSector = vol[0];
fPlate = vol[1];
fStrip = vol[2];
////////////////////////////////////////////////////////////////////////
AliTOFSDigit::AliTOFSDigit(const AliTOFSDigit & digit)
+:TObject()
{
//
// copy ctor for AliTOFSDigit object
//
Int_t sameTime = -1;
- Float_t tdcwindow=((Float_t)AliTOFConstants::fgkTimeDiff)/tdcbin;
+ Float_t tdcwindow=((Float_t)AliTOFGeometry::TimeDiff())/tdcbin;
for (Int_t i = 0; i < fNDigits; i++) {
if (TMath::Abs(tdc-fTdc->At(i)) < tdcwindow) {
sameTime = i;
}
}
+
+////////////////////////////////////////////////////////////////////////
+void AliTOFSDigit::Update(AliTOFSDigit* sdig)
+{
+
+ //
+ // Perform the sum with sdig
+ //
+
+ // start loop on all sdig locations
+ Int_t nlocations=sdig->GetNDigits();
+
+ for (Int_t j = 0; j < nlocations; j++) {
+ Float_t tdcbin=50.; // [ps] hardwired for the time being
+ Int_t tdc=(Int_t)sdig->GetTdc(j);
+ Int_t adc=(Int_t)sdig->GetAdc(j);
+ // getting here only the first track number
+ Int_t track=GetTrack(j,0);
+
+
+ Int_t sameTime = -1;
+ Float_t tdcwindow=((Float_t)AliTOFGeometry::TimeDiff())/tdcbin;
+ for (Int_t i = 0; i < fNDigits; i++) {
+ if (TMath::Abs(tdc-fTdc->At(i)) < tdcwindow) {
+ sameTime = i;
+ break;
+ }
+ }
+
+ if (sameTime >= 0) {
+ (*fAdc)[sameTime] += static_cast<Float_t>(adc);
+ // update track - find the first -1 value and replace it by the
+ // track number
+ for (Int_t iTrack=0; iTrack<kMAXDIGITS; iTrack++) {
+ if ((*fTracks)[sameTime*kMAXDIGITS+iTrack] == -1) {
+ (*fTracks)[sameTime*kMAXDIGITS+iTrack] = track;
+ break;
+ }
+ // write warning about many tracks going to this pad
+ if (iTrack == kMAXDIGITS) {
+ cerr<<"WARNING: AliTOFSDigit::Update Many hits in the padhit"<<endl;
+ cerr<<" ";
+ // PrintPad();
+ }
+ }
+ } else {
+ // 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;
+ } // for (Int_t i = 1; i <kMAXDIGITS; i++)
+ } // if (sameTime >= 0)
+ } // end loop on sdig locations
+}
+
////////////////////////////////////////////////////////////////////////
AliTOFSDigit::~AliTOFSDigit()
{
// starting from the digits data.
//
- Int_t pad = fPadx+AliTOFConstants::fgkNpadX*(fPadz-1);
+ Int_t pad = 2*fPadx + fPadz;
+ //Int_t pad = fPadx+AliTOFGeometry::NpadX()*fPadz;
Int_t before=0;
switch(fPlate){
- case 1: before = 0;
+ case 0:
+ //before = 0;
break;
- case 2: before = AliTOFConstants::fgkNStripC;
+ case 1:
+ before = AliTOFGeometry::NStripC();
break;
- case 3: before = AliTOFConstants::fgkNStripB + AliTOFConstants::fgkNStripC;
+ case 2:
+ before = AliTOFGeometry::NStripB() + AliTOFGeometry::NStripC();
break;
- case 4: before = AliTOFConstants::fgkNStripA + AliTOFConstants::fgkNStripB + AliTOFConstants::fgkNStripC;
+ case 3:
+ before = AliTOFGeometry::NStripA() + AliTOFGeometry::NStripB() + AliTOFGeometry::NStripC();
break;
- case 5: before = AliTOFConstants::fgkNStripA + 2*AliTOFConstants::fgkNStripB + AliTOFConstants::fgkNStripC;
+ case 4:
+ before = AliTOFGeometry::NStripA() + 2*AliTOFGeometry::NStripB() + AliTOFGeometry::NStripC();
break;
}
- Int_t strip = fStrip+before;
- Int_t padTot = AliTOFConstants::fgkPadXStrip*(strip-1)+pad;
+ Int_t strip = fStrip + before;
+ Int_t padTot = AliTOFGeometry::NpadXStrip()*strip + pad;
return padTot;
}