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:  $ */

//_________________________________________________________________________//
//_________________________________________________________________________//

#include "AliESDTOFCluster.h"
#include "TClonesArray.h"
#include "AliESDEvent.h"

ClassImp(AliESDTOFCluster)

//_________________________________________________________________________
AliESDTOFCluster::AliESDTOFCluster(Int_t clID) :
  fID(clID),
  fNTOFhits(0),
  fStatus(0),
  fNmatchableTracks(0)
{
  //
  // default ctor
  //

  for(Int_t i=kMaxHits;i--;)    fHitIndex[i] = -1;
  for(Int_t i=kMaxMatches;i--;) fMatchIndex[i] = -1;
}

//_________________________________________________________________________
AliESDTOFCluster::AliESDTOFCluster(Int_t ,Int_t ,Float_t ,Float_t ,Float_t ,Int_t*,Int_t ,Int_t ,
				   Bool_t ,Float_t ,Float_t ,Float_t ,
				   Int_t ,Float_t ,Float_t ,Float_t ,Float_t ,Double_t*) :
  fID(-1),
  fNTOFhits(0),
  fStatus(1),
  fNmatchableTracks(1)
{
  //
  // Constructor of AliESDTOFCluster object
  //

  // to be replaced with hit creation
  for(Int_t i=kMaxHits;i--;) fHitIndex[i] = -1;
  for(Int_t i=kMaxMatches;i--;) fMatchIndex[i] = -1;
  //
}

//_________________________________________________________________________
AliESDTOFCluster::AliESDTOFCluster(Int_t ,Int_t ,Float_t ,Float_t ,Float_t ,Int_t*,Int_t ,Int_t ,
				   Bool_t ,Float_t ,Float_t ,Float_t ) :
  fID(-1),
  fNTOFhits(0),
  fStatus(1),
  fNmatchableTracks(0)
{
  //
  // Constructor of AliESDTOFCluster object
  //

  // to be replaced with hit creation
  for(Int_t i=kMaxHits;i--;) fHitIndex[i] = -1;
  for(Int_t i=kMaxMatches;i--;) fMatchIndex[i] = -1;

}

//_________________________________________________________________________
AliESDTOFCluster::AliESDTOFCluster(const AliESDTOFCluster & source) :
  AliVTOFcluster(source),
  fID(source.fID),
  fNTOFhits(source.fNTOFhits),
  fStatus(source.fStatus),
  fNmatchableTracks(source.fNmatchableTracks)
{
  // 
  // copy ctor for AliESDTOFCluster object
  //

  SetEvent(source.GetEvent());

  for(Int_t i=kMaxHits;i--;)    fHitIndex[i] = source.fHitIndex[i];
  for(Int_t i=kMaxMatches;i--;) fMatchIndex[i] = source.fMatchIndex[i];

}

//_________________________________________________________________________
AliESDTOFCluster & AliESDTOFCluster::operator=(const AliESDTOFCluster & source)
{
  // 
  // assignment op-r
  //
  if (this == &source) return *this;
  AliVTOFcluster::operator=(source);
  fID = source.fID;
  fNTOFhits = source.fNTOFhits;
  fStatus = source.fStatus;
  fNmatchableTracks = source.fNmatchableTracks;

  for(Int_t i=kMaxHits;i--;)    fHitIndex[i] = source.fHitIndex[i];
  for(Int_t i=kMaxMatches;i--;) fMatchIndex[i] = source.fMatchIndex[i];

  return *this;
}

//_________________________________________________________________________
Int_t AliESDTOFCluster::Update(Int_t trackIndex,Float_t dX,Float_t dY,Float_t dZ,
			       Float_t length,Double_t expTimes[AliPID::kSPECIESC])
{
  // update cluster info by new track
  //  AliInfo(Form("TOF %d %d",fNmatchableTracks,fNTOFhits));

  if(fNmatchableTracks >= kMaxMatches) return 2; // max number reached
  //
  // check if the track is not already stored
  for (Int_t ii=fNmatchableTracks; ii--;) if (trackIndex==GetTrackIndex(ii)) return 1;
  //
  const AliESDEvent *event = (AliESDEvent *) GetEvent();
  TClonesArray *matchAr = event->GetESDTOFMatches();
  int ntr = matchAr->GetEntriesFast();
  new((*matchAr)[ntr]) AliESDTOFMatch(trackIndex,expTimes,dX,dY,dZ,length);
  int nmt = fNmatchableTracks++;
  fMatchIndex[nmt] = ntr;
  //
  return 0;
  //
}

//_________________________________________________________________________
void AliESDTOFCluster::AddESDTOFHitIndex(Int_t hitID)
{
  // register new hit in the cluster
  if(fNTOFhits >= kMaxHits) return;
  int nth = fNTOFhits++;
  fHitIndex[nth] = hitID; // add the hit to the array
}

//_________________________________________________________________________
void AliESDTOFCluster::AddTOFhit(AliESDTOFHit *hit)
{
  // add new hit
  if(fNTOFhits >= kMaxHits) return;
  // add the hit to the array
  const AliESDEvent *event = (AliESDEvent *) GetEvent();
  TClonesArray *hitAr = event->GetESDTOFHits();
  int nh = hitAr->GetEntriesFast();
  new((*hitAr)[nh]) AliESDTOFHit(*hit);
  //   hitN->SetIndex(nh); // RS: why do we need this
  int nth = fNTOFhits++;
  fHitIndex[nth] = nh;
  //
}

//_________________________________________________________________________
void AliESDTOFCluster::AddTOFhit(Int_t ,Int_t ,Float_t ,Float_t ,Float_t ,Int_t*,Int_t ,Int_t , Bool_t ,Float_t ,Float_t ,Float_t )
{
}

//_________________________________________________________________________
Int_t AliESDTOFCluster::GetClusterIndex(int ihit) const
{
  AliESDTOFHit* hit = GetTOFHit(ihit);
  return hit ? hit->GetClusterIndex() : -1;
} 

//_________________________________________________________________________
Int_t AliESDTOFCluster::GetTOFchannel(int ihit) const 
{
  AliESDTOFHit* hit = GetTOFHit(ihit);
  return hit ? hit->GetTOFchannel() : -1;
}

//_________________________________________________________________________
Float_t AliESDTOFCluster::GetTime(int ihit) const 
{
  AliESDTOFHit* hit = GetTOFHit(ihit);
  return hit ? hit->GetTime() : 0;
}

//_________________________________________________________________________
Float_t AliESDTOFCluster::GetTimeRaw(Int_t ihit) const 
{
 AliESDTOFHit* hit = GetTOFHit(ihit);
 return hit ? hit->GetTimeRaw() : 0;
} // TOF raw time

//_________________________________________________________________________
Float_t AliESDTOFCluster::GetTOT(Int_t ihit) const 
{
  AliESDTOFHit* hit = GetTOFHit(ihit);
  return hit ? hit->GetTOT() : 0;
} // TOF tot

//_________________________________________________________________________
Float_t AliESDTOFCluster::GetTOFsignalToT(Int_t ihit) const 
{
  AliESDTOFHit* hit = GetTOFHit(ihit);
  return hit ? hit->GetTOT() : 0; // RS: Why signalTot and TOT are the same?
} // TOF tot

//_________________________________________________________________________
Int_t AliESDTOFCluster::GetLabel(Int_t i,Int_t ihit) const 
{
  AliESDTOFHit* hit = GetTOFHit(ihit);
  if (!hit || i>=3) return -999;
  return hit->GetTOFLabel(i);
}

//_________________________________________________________________________
Int_t AliESDTOFCluster::GetDeltaBC(Int_t ihit) const 
{
  AliESDTOFHit* hit = GetTOFHit(ihit);
  return hit ? hit->GetDeltaBC() : 0;
}

//_________________________________________________________________________
Int_t AliESDTOFCluster::GetL0L1Latency(Int_t ihit) const 
{
  AliESDTOFHit* hit = GetTOFHit(ihit);  
  return hit ? hit->GetL0L1Latency() : 0;
}

//_________________________________________________________________________
Bool_t AliESDTOFCluster::GetStatus() const 
{
  if(!fEvent){
    AliInfo("No AliESDEvent available here!");
    return 0;
  }
  return fStatus;
}

//_________________________________________________________________________
Float_t AliESDTOFCluster::GetZ() const 
{
  AliESDTOFHit* hit = GetTOFHit(0);
  return hit ? hit->GetZ() : 0;
}

//_________________________________________________________________________
Float_t AliESDTOFCluster::GetPhi() const 
{
  AliESDTOFHit* hit = GetTOFHit(0);
  return hit ? hit->GetPhi() : 0;
}

//_________________________________________________________________________
Float_t AliESDTOFCluster::GetR() const 
{
  AliESDTOFHit* hit = GetTOFHit(0);
  return hit ? hit->GetR() : 0;
}

//_________________________________________________________________________
Int_t AliESDTOFCluster::GetNMatchableTracks() const 
{
  return fNmatchableTracks;
}

//_________________________________________________________________________
Int_t AliESDTOFCluster::GetNTOFhits() const 
{
  return fNTOFhits;
}

//_________________________________________________________________________
Int_t AliESDTOFCluster::GetTrackIndex(Int_t i) const 
{
  AliESDTOFMatch* match = 0;
  return (i<fNmatchableTracks && (match=GetTOFMatch(i))) ? match->GetTrackIndex() : -999;
}

//_________________________________________________________________________
Float_t AliESDTOFCluster::GetDistanceInStripPlane(Int_t i) const 
{
  // distance
  AliESDTOFMatch* match = 0;
  if (i>=fNmatchableTracks || !(match=GetTOFMatch(i))) return -999;
  Double_t dz = match->GetDz();
  Double_t dx = match->GetDx();
  return TMath::Sqrt(dx*dx+dz*dz);
}

//_________________________________________________________________________
Float_t AliESDTOFCluster::GetDx(Int_t i)  const 
{
  AliESDTOFMatch* match = 0;  
  return (i<fNmatchableTracks && (match=GetTOFMatch(i))) ? match->GetDx() : -999;
} // distance, X component

//_________________________________________________________________________
Float_t AliESDTOFCluster::GetDy(Int_t i)  const 
{
  AliESDTOFMatch* match = 0;  
  return (i<fNmatchableTracks && (match=GetTOFMatch(i))) ? match->GetDy() : -999;
} // distance, Y component

//_________________________________________________________________________
Float_t AliESDTOFCluster::GetDz(Int_t i)  const 
{
  AliESDTOFMatch* match = 0;  
  return (i<fNmatchableTracks && (match=GetTOFMatch(i))) ? match->GetDz() : -999;
} // distance, Z component

//_________________________________________________________________________
Float_t AliESDTOFCluster::GetLength(Int_t i) const 
{
  AliESDTOFMatch* match = 0;  
  return (i<fNmatchableTracks && (match=GetTOFMatch(i))) ? match->GetTrackLength() : -999.;
} // reconstructed track length at TOF

//_________________________________________________________________________
Double_t AliESDTOFCluster::GetIntegratedTime(Int_t iPart,Int_t i) const 
{
  AliESDTOFMatch* match = 0;  
  return (i<fNmatchableTracks && (match=GetTOFMatch(i))) ? match->GetIntegratedTimes(iPart) : -999.;
} // reconstructed track length at TOF

//_________________________________________________________________________
void AliESDTOFCluster::Print(const Option_t*) const
{
  // print full chain
  printf("#%5d TOF Cluster %5d of %d Hits, %d Matchable Tracks\n",GetESDID(),fID, fNTOFhits, fNmatchableTracks);
  for (int ih=0;ih<fNTOFhits;ih++) {
    AliESDTOFHit* ht = GetTOFHit(ih);
    if (ht) {
      printf("%d: ",ih);
      ht->Print();
    }
  }
  //
  for (int it=0;it<fNmatchableTracks;it++) {
    AliESDTOFMatch* mt = GetTOFMatch(it);
    if (mt) {
      printf("%d: ",it);
      mt->Print();
    }
  }
  //
}

//_________________________________________________________________________
AliESDTOFHit* AliESDTOFCluster::GetTOFHit(Int_t i) const
{
  return fEvent ? ((AliESDTOFHit *) ((AliESDEvent *) GetEvent())->GetESDTOFHits()->At(fHitIndex[i])):0;
}

//_________________________________________________________________________
AliESDTOFMatch* AliESDTOFCluster::GetTOFMatch(Int_t i) const 
{
  return fEvent ? ((AliESDTOFMatch *) ((AliESDEvent *) GetEvent())->GetESDTOFMatches()->At(fMatchIndex[i])) : 0;
}

//_________________________________________________________________________
void AliESDTOFCluster::SuppressMatchedTrack(Int_t id)
{
  // suppress the reference to track id
  for (int it=fNmatchableTracks;it--;) {
    AliESDTOFMatch* mtc = GetTOFMatch(it);
    if (mtc->GetTrackIndex()!=id) continue;
    // need to suprress the match: simply remove reference to it
    int rmID = fMatchIndex[it];
    for (int jt=it+1;jt<fNmatchableTracks;jt++) fMatchIndex[jt-1] = fMatchIndex[jt];
    fNmatchableTracks--;
    // remove match rmID
    TClonesArray* arrMatch = ((AliESDEvent *)GetEvent())->GetESDTOFMatches();
    int last = arrMatch->GetEntriesFast()-1;
    AliESDTOFMatch* mtcL = (AliESDTOFMatch*)arrMatch->At(last);
    if (rmID!=last) {
      *mtc = *mtcL; // assign the last match to removed slot
      int trID = mtc->GetTrackIndex();
      AliESDtrack* trc = ((AliESDEvent *)GetEvent())->GetTrack(trID);
      trc->ReplaceTOFMatchID(last,rmID); // fix the reference to reassigned match
      // fix the 
    }
    arrMatch->RemoveAt(last);
    break;
  }
  //
  if (!fNmatchableTracks) { // no matches left, clear all hits: prepare for selfelimination
    // first remove associated hits
    TClonesArray* arrHits = ((AliESDEvent *)GetEvent())->GetESDTOFHits();
    TClonesArray* arrClus = ((AliESDEvent *)GetEvent())->GetESDTOFClusters();
    int last = arrHits->GetEntriesFast()-1;
    for (;fNTOFhits--;) { // remove hits
      int hID = fHitIndex[int(fNTOFhits)];
      AliESDTOFHit* hit = (AliESDTOFHit*)arrHits->At(hID);
      AliESDTOFHit* hitL = (AliESDTOFHit*)arrHits->At(last);
      if (hID!=last) {
	*hit = *hitL; // assign the last match to removed slot
	// fix reference on hitL in the owner cluster
	int clID = hit->GetESDTOFClusterIndex();
	AliESDTOFCluster* clusL = (AliESDTOFCluster*)arrClus->At(clID);
	clusL->ReplaceHitID(last,hID);
      }
      arrHits->RemoveAt(last--);
    }
  }

}

//_________________________________________________________________________
void AliESDTOFCluster::ReplaceHitID(int oldID, int newID)
{
  // replace the reference to hit from oldID by newID
  for (int it=fNTOFhits;it--;) {
    if (fHitIndex[it]==oldID) {
      fHitIndex[it]=newID;
      return;
    }
  }
}

//_________________________________________________________________________
void AliESDTOFCluster::ReplaceMatchID(int oldID, int newID)
{
  // replace the reference to match from oldID by newID
  for (int it=fNmatchableTracks;it--;) {
    if (fMatchIndex[it]==oldID) {
      fMatchIndex[it]=newID;
      return;
    }
  }
}

//_________________________________________________________________________
void AliESDTOFCluster::ReplaceMatchedTrackID(int oldID, int newID)
{
  // replace the reference to track oldID by newID
  for (int it=fNmatchableTracks;it--;) {
    AliESDTOFMatch* mtc = GetTOFMatch(it);
    if (mtc->GetTrackIndex()!=oldID) continue;
    mtc->SetTrackIndex(newID);
    break;
  }
  //
}

//_________________________________________________________________________
void AliESDTOFCluster::FixSelfReferences(int oldID, int newID)
{
  // replace the references (in tracks and hist) to this cluster from oldID by newID  
  for (int it=fNmatchableTracks;it--;) {
    int trID = GetTOFMatch(it)->GetTrackIndex();
    AliESDtrack* trc = ((AliESDEvent *)GetEvent())->GetTrack(trID);
    trc->ReplaceTOFClusterID(oldID,newID);
  }
  for (int it=fNTOFhits;it--;) {
    AliESDTOFHit* hit = GetTOFHit(it);
    if (hit) hit->SetESDTOFClusterIndex(newID);
  }
  //
}
 AliESDTOFCluster.cxx:1
 AliESDTOFCluster.cxx:2
 AliESDTOFCluster.cxx:3
 AliESDTOFCluster.cxx:4
 AliESDTOFCluster.cxx:5
 AliESDTOFCluster.cxx:6
 AliESDTOFCluster.cxx:7
 AliESDTOFCluster.cxx:8
 AliESDTOFCluster.cxx:9
 AliESDTOFCluster.cxx:10
 AliESDTOFCluster.cxx:11
 AliESDTOFCluster.cxx:12
 AliESDTOFCluster.cxx:13
 AliESDTOFCluster.cxx:14
 AliESDTOFCluster.cxx:15
 AliESDTOFCluster.cxx:16
 AliESDTOFCluster.cxx:17
 AliESDTOFCluster.cxx:18
 AliESDTOFCluster.cxx:19
 AliESDTOFCluster.cxx:20
 AliESDTOFCluster.cxx:21
 AliESDTOFCluster.cxx:22
 AliESDTOFCluster.cxx:23
 AliESDTOFCluster.cxx:24
 AliESDTOFCluster.cxx:25
 AliESDTOFCluster.cxx:26
 AliESDTOFCluster.cxx:27
 AliESDTOFCluster.cxx:28
 AliESDTOFCluster.cxx:29
 AliESDTOFCluster.cxx:30
 AliESDTOFCluster.cxx:31
 AliESDTOFCluster.cxx:32
 AliESDTOFCluster.cxx:33
 AliESDTOFCluster.cxx:34
 AliESDTOFCluster.cxx:35
 AliESDTOFCluster.cxx:36
 AliESDTOFCluster.cxx:37
 AliESDTOFCluster.cxx:38
 AliESDTOFCluster.cxx:39
 AliESDTOFCluster.cxx:40
 AliESDTOFCluster.cxx:41
 AliESDTOFCluster.cxx:42
 AliESDTOFCluster.cxx:43
 AliESDTOFCluster.cxx:44
 AliESDTOFCluster.cxx:45
 AliESDTOFCluster.cxx:46
 AliESDTOFCluster.cxx:47
 AliESDTOFCluster.cxx:48
 AliESDTOFCluster.cxx:49
 AliESDTOFCluster.cxx:50
 AliESDTOFCluster.cxx:51
 AliESDTOFCluster.cxx:52
 AliESDTOFCluster.cxx:53
 AliESDTOFCluster.cxx:54
 AliESDTOFCluster.cxx:55
 AliESDTOFCluster.cxx:56
 AliESDTOFCluster.cxx:57
 AliESDTOFCluster.cxx:58
 AliESDTOFCluster.cxx:59
 AliESDTOFCluster.cxx:60
 AliESDTOFCluster.cxx:61
 AliESDTOFCluster.cxx:62
 AliESDTOFCluster.cxx:63
 AliESDTOFCluster.cxx:64
 AliESDTOFCluster.cxx:65
 AliESDTOFCluster.cxx:66
 AliESDTOFCluster.cxx:67
 AliESDTOFCluster.cxx:68
 AliESDTOFCluster.cxx:69
 AliESDTOFCluster.cxx:70
 AliESDTOFCluster.cxx:71
 AliESDTOFCluster.cxx:72
 AliESDTOFCluster.cxx:73
 AliESDTOFCluster.cxx:74
 AliESDTOFCluster.cxx:75
 AliESDTOFCluster.cxx:76
 AliESDTOFCluster.cxx:77
 AliESDTOFCluster.cxx:78
 AliESDTOFCluster.cxx:79
 AliESDTOFCluster.cxx:80
 AliESDTOFCluster.cxx:81
 AliESDTOFCluster.cxx:82
 AliESDTOFCluster.cxx:83
 AliESDTOFCluster.cxx:84
 AliESDTOFCluster.cxx:85
 AliESDTOFCluster.cxx:86
 AliESDTOFCluster.cxx:87
 AliESDTOFCluster.cxx:88
 AliESDTOFCluster.cxx:89
 AliESDTOFCluster.cxx:90
 AliESDTOFCluster.cxx:91
 AliESDTOFCluster.cxx:92
 AliESDTOFCluster.cxx:93
 AliESDTOFCluster.cxx:94
 AliESDTOFCluster.cxx:95
 AliESDTOFCluster.cxx:96
 AliESDTOFCluster.cxx:97
 AliESDTOFCluster.cxx:98
 AliESDTOFCluster.cxx:99
 AliESDTOFCluster.cxx:100
 AliESDTOFCluster.cxx:101
 AliESDTOFCluster.cxx:102
 AliESDTOFCluster.cxx:103
 AliESDTOFCluster.cxx:104
 AliESDTOFCluster.cxx:105
 AliESDTOFCluster.cxx:106
 AliESDTOFCluster.cxx:107
 AliESDTOFCluster.cxx:108
 AliESDTOFCluster.cxx:109
 AliESDTOFCluster.cxx:110
 AliESDTOFCluster.cxx:111
 AliESDTOFCluster.cxx:112
 AliESDTOFCluster.cxx:113
 AliESDTOFCluster.cxx:114
 AliESDTOFCluster.cxx:115
 AliESDTOFCluster.cxx:116
 AliESDTOFCluster.cxx:117
 AliESDTOFCluster.cxx:118
 AliESDTOFCluster.cxx:119
 AliESDTOFCluster.cxx:120
 AliESDTOFCluster.cxx:121
 AliESDTOFCluster.cxx:122
 AliESDTOFCluster.cxx:123
 AliESDTOFCluster.cxx:124
 AliESDTOFCluster.cxx:125
 AliESDTOFCluster.cxx:126
 AliESDTOFCluster.cxx:127
 AliESDTOFCluster.cxx:128
 AliESDTOFCluster.cxx:129
 AliESDTOFCluster.cxx:130
 AliESDTOFCluster.cxx:131
 AliESDTOFCluster.cxx:132
 AliESDTOFCluster.cxx:133
 AliESDTOFCluster.cxx:134
 AliESDTOFCluster.cxx:135
 AliESDTOFCluster.cxx:136
 AliESDTOFCluster.cxx:137
 AliESDTOFCluster.cxx:138
 AliESDTOFCluster.cxx:139
 AliESDTOFCluster.cxx:140
 AliESDTOFCluster.cxx:141
 AliESDTOFCluster.cxx:142
 AliESDTOFCluster.cxx:143
 AliESDTOFCluster.cxx:144
 AliESDTOFCluster.cxx:145
 AliESDTOFCluster.cxx:146
 AliESDTOFCluster.cxx:147
 AliESDTOFCluster.cxx:148
 AliESDTOFCluster.cxx:149
 AliESDTOFCluster.cxx:150
 AliESDTOFCluster.cxx:151
 AliESDTOFCluster.cxx:152
 AliESDTOFCluster.cxx:153
 AliESDTOFCluster.cxx:154
 AliESDTOFCluster.cxx:155
 AliESDTOFCluster.cxx:156
 AliESDTOFCluster.cxx:157
 AliESDTOFCluster.cxx:158
 AliESDTOFCluster.cxx:159
 AliESDTOFCluster.cxx:160
 AliESDTOFCluster.cxx:161
 AliESDTOFCluster.cxx:162
 AliESDTOFCluster.cxx:163
 AliESDTOFCluster.cxx:164
 AliESDTOFCluster.cxx:165
 AliESDTOFCluster.cxx:166
 AliESDTOFCluster.cxx:167
 AliESDTOFCluster.cxx:168
 AliESDTOFCluster.cxx:169
 AliESDTOFCluster.cxx:170
 AliESDTOFCluster.cxx:171
 AliESDTOFCluster.cxx:172
 AliESDTOFCluster.cxx:173
 AliESDTOFCluster.cxx:174
 AliESDTOFCluster.cxx:175
 AliESDTOFCluster.cxx:176
 AliESDTOFCluster.cxx:177
 AliESDTOFCluster.cxx:178
 AliESDTOFCluster.cxx:179
 AliESDTOFCluster.cxx:180
 AliESDTOFCluster.cxx:181
 AliESDTOFCluster.cxx:182
 AliESDTOFCluster.cxx:183
 AliESDTOFCluster.cxx:184
 AliESDTOFCluster.cxx:185
 AliESDTOFCluster.cxx:186
 AliESDTOFCluster.cxx:187
 AliESDTOFCluster.cxx:188
 AliESDTOFCluster.cxx:189
 AliESDTOFCluster.cxx:190
 AliESDTOFCluster.cxx:191
 AliESDTOFCluster.cxx:192
 AliESDTOFCluster.cxx:193
 AliESDTOFCluster.cxx:194
 AliESDTOFCluster.cxx:195
 AliESDTOFCluster.cxx:196
 AliESDTOFCluster.cxx:197
 AliESDTOFCluster.cxx:198
 AliESDTOFCluster.cxx:199
 AliESDTOFCluster.cxx:200
 AliESDTOFCluster.cxx:201
 AliESDTOFCluster.cxx:202
 AliESDTOFCluster.cxx:203
 AliESDTOFCluster.cxx:204
 AliESDTOFCluster.cxx:205
 AliESDTOFCluster.cxx:206
 AliESDTOFCluster.cxx:207
 AliESDTOFCluster.cxx:208
 AliESDTOFCluster.cxx:209
 AliESDTOFCluster.cxx:210
 AliESDTOFCluster.cxx:211
 AliESDTOFCluster.cxx:212
 AliESDTOFCluster.cxx:213
 AliESDTOFCluster.cxx:214
 AliESDTOFCluster.cxx:215
 AliESDTOFCluster.cxx:216
 AliESDTOFCluster.cxx:217
 AliESDTOFCluster.cxx:218
 AliESDTOFCluster.cxx:219
 AliESDTOFCluster.cxx:220
 AliESDTOFCluster.cxx:221
 AliESDTOFCluster.cxx:222
 AliESDTOFCluster.cxx:223
 AliESDTOFCluster.cxx:224
 AliESDTOFCluster.cxx:225
 AliESDTOFCluster.cxx:226
 AliESDTOFCluster.cxx:227
 AliESDTOFCluster.cxx:228
 AliESDTOFCluster.cxx:229
 AliESDTOFCluster.cxx:230
 AliESDTOFCluster.cxx:231
 AliESDTOFCluster.cxx:232
 AliESDTOFCluster.cxx:233
 AliESDTOFCluster.cxx:234
 AliESDTOFCluster.cxx:235
 AliESDTOFCluster.cxx:236
 AliESDTOFCluster.cxx:237
 AliESDTOFCluster.cxx:238
 AliESDTOFCluster.cxx:239
 AliESDTOFCluster.cxx:240
 AliESDTOFCluster.cxx:241
 AliESDTOFCluster.cxx:242
 AliESDTOFCluster.cxx:243
 AliESDTOFCluster.cxx:244
 AliESDTOFCluster.cxx:245
 AliESDTOFCluster.cxx:246
 AliESDTOFCluster.cxx:247
 AliESDTOFCluster.cxx:248
 AliESDTOFCluster.cxx:249
 AliESDTOFCluster.cxx:250
 AliESDTOFCluster.cxx:251
 AliESDTOFCluster.cxx:252
 AliESDTOFCluster.cxx:253
 AliESDTOFCluster.cxx:254
 AliESDTOFCluster.cxx:255
 AliESDTOFCluster.cxx:256
 AliESDTOFCluster.cxx:257
 AliESDTOFCluster.cxx:258
 AliESDTOFCluster.cxx:259
 AliESDTOFCluster.cxx:260
 AliESDTOFCluster.cxx:261
 AliESDTOFCluster.cxx:262
 AliESDTOFCluster.cxx:263
 AliESDTOFCluster.cxx:264
 AliESDTOFCluster.cxx:265
 AliESDTOFCluster.cxx:266
 AliESDTOFCluster.cxx:267
 AliESDTOFCluster.cxx:268
 AliESDTOFCluster.cxx:269
 AliESDTOFCluster.cxx:270
 AliESDTOFCluster.cxx:271
 AliESDTOFCluster.cxx:272
 AliESDTOFCluster.cxx:273
 AliESDTOFCluster.cxx:274
 AliESDTOFCluster.cxx:275
 AliESDTOFCluster.cxx:276
 AliESDTOFCluster.cxx:277
 AliESDTOFCluster.cxx:278
 AliESDTOFCluster.cxx:279
 AliESDTOFCluster.cxx:280
 AliESDTOFCluster.cxx:281
 AliESDTOFCluster.cxx:282
 AliESDTOFCluster.cxx:283
 AliESDTOFCluster.cxx:284
 AliESDTOFCluster.cxx:285
 AliESDTOFCluster.cxx:286
 AliESDTOFCluster.cxx:287
 AliESDTOFCluster.cxx:288
 AliESDTOFCluster.cxx:289
 AliESDTOFCluster.cxx:290
 AliESDTOFCluster.cxx:291
 AliESDTOFCluster.cxx:292
 AliESDTOFCluster.cxx:293
 AliESDTOFCluster.cxx:294
 AliESDTOFCluster.cxx:295
 AliESDTOFCluster.cxx:296
 AliESDTOFCluster.cxx:297
 AliESDTOFCluster.cxx:298
 AliESDTOFCluster.cxx:299
 AliESDTOFCluster.cxx:300
 AliESDTOFCluster.cxx:301
 AliESDTOFCluster.cxx:302
 AliESDTOFCluster.cxx:303
 AliESDTOFCluster.cxx:304
 AliESDTOFCluster.cxx:305
 AliESDTOFCluster.cxx:306
 AliESDTOFCluster.cxx:307
 AliESDTOFCluster.cxx:308
 AliESDTOFCluster.cxx:309
 AliESDTOFCluster.cxx:310
 AliESDTOFCluster.cxx:311
 AliESDTOFCluster.cxx:312
 AliESDTOFCluster.cxx:313
 AliESDTOFCluster.cxx:314
 AliESDTOFCluster.cxx:315
 AliESDTOFCluster.cxx:316
 AliESDTOFCluster.cxx:317
 AliESDTOFCluster.cxx:318
 AliESDTOFCluster.cxx:319
 AliESDTOFCluster.cxx:320
 AliESDTOFCluster.cxx:321
 AliESDTOFCluster.cxx:322
 AliESDTOFCluster.cxx:323
 AliESDTOFCluster.cxx:324
 AliESDTOFCluster.cxx:325
 AliESDTOFCluster.cxx:326
 AliESDTOFCluster.cxx:327
 AliESDTOFCluster.cxx:328
 AliESDTOFCluster.cxx:329
 AliESDTOFCluster.cxx:330
 AliESDTOFCluster.cxx:331
 AliESDTOFCluster.cxx:332
 AliESDTOFCluster.cxx:333
 AliESDTOFCluster.cxx:334
 AliESDTOFCluster.cxx:335
 AliESDTOFCluster.cxx:336
 AliESDTOFCluster.cxx:337
 AliESDTOFCluster.cxx:338
 AliESDTOFCluster.cxx:339
 AliESDTOFCluster.cxx:340
 AliESDTOFCluster.cxx:341
 AliESDTOFCluster.cxx:342
 AliESDTOFCluster.cxx:343
 AliESDTOFCluster.cxx:344
 AliESDTOFCluster.cxx:345
 AliESDTOFCluster.cxx:346
 AliESDTOFCluster.cxx:347
 AliESDTOFCluster.cxx:348
 AliESDTOFCluster.cxx:349
 AliESDTOFCluster.cxx:350
 AliESDTOFCluster.cxx:351
 AliESDTOFCluster.cxx:352
 AliESDTOFCluster.cxx:353
 AliESDTOFCluster.cxx:354
 AliESDTOFCluster.cxx:355
 AliESDTOFCluster.cxx:356
 AliESDTOFCluster.cxx:357
 AliESDTOFCluster.cxx:358
 AliESDTOFCluster.cxx:359
 AliESDTOFCluster.cxx:360
 AliESDTOFCluster.cxx:361
 AliESDTOFCluster.cxx:362
 AliESDTOFCluster.cxx:363
 AliESDTOFCluster.cxx:364
 AliESDTOFCluster.cxx:365
 AliESDTOFCluster.cxx:366
 AliESDTOFCluster.cxx:367
 AliESDTOFCluster.cxx:368
 AliESDTOFCluster.cxx:369
 AliESDTOFCluster.cxx:370
 AliESDTOFCluster.cxx:371
 AliESDTOFCluster.cxx:372
 AliESDTOFCluster.cxx:373
 AliESDTOFCluster.cxx:374
 AliESDTOFCluster.cxx:375
 AliESDTOFCluster.cxx:376
 AliESDTOFCluster.cxx:377
 AliESDTOFCluster.cxx:378
 AliESDTOFCluster.cxx:379
 AliESDTOFCluster.cxx:380
 AliESDTOFCluster.cxx:381
 AliESDTOFCluster.cxx:382
 AliESDTOFCluster.cxx:383
 AliESDTOFCluster.cxx:384
 AliESDTOFCluster.cxx:385
 AliESDTOFCluster.cxx:386
 AliESDTOFCluster.cxx:387
 AliESDTOFCluster.cxx:388
 AliESDTOFCluster.cxx:389
 AliESDTOFCluster.cxx:390
 AliESDTOFCluster.cxx:391
 AliESDTOFCluster.cxx:392
 AliESDTOFCluster.cxx:393
 AliESDTOFCluster.cxx:394
 AliESDTOFCluster.cxx:395
 AliESDTOFCluster.cxx:396
 AliESDTOFCluster.cxx:397
 AliESDTOFCluster.cxx:398
 AliESDTOFCluster.cxx:399
 AliESDTOFCluster.cxx:400
 AliESDTOFCluster.cxx:401
 AliESDTOFCluster.cxx:402
 AliESDTOFCluster.cxx:403
 AliESDTOFCluster.cxx:404
 AliESDTOFCluster.cxx:405
 AliESDTOFCluster.cxx:406
 AliESDTOFCluster.cxx:407
 AliESDTOFCluster.cxx:408
 AliESDTOFCluster.cxx:409
 AliESDTOFCluster.cxx:410
 AliESDTOFCluster.cxx:411
 AliESDTOFCluster.cxx:412
 AliESDTOFCluster.cxx:413
 AliESDTOFCluster.cxx:414
 AliESDTOFCluster.cxx:415
 AliESDTOFCluster.cxx:416
 AliESDTOFCluster.cxx:417
 AliESDTOFCluster.cxx:418
 AliESDTOFCluster.cxx:419
 AliESDTOFCluster.cxx:420
 AliESDTOFCluster.cxx:421
 AliESDTOFCluster.cxx:422
 AliESDTOFCluster.cxx:423
 AliESDTOFCluster.cxx:424
 AliESDTOFCluster.cxx:425
 AliESDTOFCluster.cxx:426
 AliESDTOFCluster.cxx:427
 AliESDTOFCluster.cxx:428
 AliESDTOFCluster.cxx:429
 AliESDTOFCluster.cxx:430
 AliESDTOFCluster.cxx:431
 AliESDTOFCluster.cxx:432
 AliESDTOFCluster.cxx:433
 AliESDTOFCluster.cxx:434
 AliESDTOFCluster.cxx:435
 AliESDTOFCluster.cxx:436
 AliESDTOFCluster.cxx:437
 AliESDTOFCluster.cxx:438
 AliESDTOFCluster.cxx:439
 AliESDTOFCluster.cxx:440
 AliESDTOFCluster.cxx:441
 AliESDTOFCluster.cxx:442
 AliESDTOFCluster.cxx:443
 AliESDTOFCluster.cxx:444
 AliESDTOFCluster.cxx:445
 AliESDTOFCluster.cxx:446
 AliESDTOFCluster.cxx:447
 AliESDTOFCluster.cxx:448
 AliESDTOFCluster.cxx:449
 AliESDTOFCluster.cxx:450
 AliESDTOFCluster.cxx:451
 AliESDTOFCluster.cxx:452
 AliESDTOFCluster.cxx:453
 AliESDTOFCluster.cxx:454
 AliESDTOFCluster.cxx:455
 AliESDTOFCluster.cxx:456
 AliESDTOFCluster.cxx:457
 AliESDTOFCluster.cxx:458
 AliESDTOFCluster.cxx:459
 AliESDTOFCluster.cxx:460
 AliESDTOFCluster.cxx:461
 AliESDTOFCluster.cxx:462
 AliESDTOFCluster.cxx:463
 AliESDTOFCluster.cxx:464