ROOT logo
#include <string.h>
#include "AliMultiplicity.h"
#include "AliLog.h"
#include "AliRefArray.h"

ClassImp(AliMultiplicity)

//______________________________________________________________________
AliMultiplicity::AliMultiplicity():
AliVMultiplicity("AliMultiplicity",""),  // must be named like that to be searchable in ESDEvent
  fNtracks(0),
  fNsingle(0),
  fNsingleSPD2(0),
//
  fDPhiWindow2(0.08*0.08),  
  fDThetaWindow2(0.025*0.025),
  fDPhiShift(0.0045),
  fNStdDev(1.0),
//
  fLabels(0),
  fLabelsL2(0),
  fUsedClusS(0), 
  fUsedClusT(0),
  fTh(0),
  fPhi(0),
  fDeltTh(0),
  fDeltPhi(0),
  fThsingle(0),
  fPhisingle(0),
  fLabelssingle(0),
  fFastOrFiredChips(1200),
  fClusterFiredChips(1200)
{
  // Default Constructor
  fFiredChips[0] = 0;
  fFiredChips[1] = 0;
  for (int il=2;il--;) fSCl2Tracks[il] = fTCl2Tracks[il][0] = fTCl2Tracks[il][1] = 0;
  for(Int_t ilayer = 0; ilayer < 6; ilayer++)fITSClusters[ilayer] = 0;
}

//______________________________________________________________________
AliMultiplicity::AliMultiplicity(Int_t ntr, Float_t *th,  Float_t *ph, Float_t *dth, Float_t *dph, Int_t *labels, Int_t* labelsL2, Int_t ns, Float_t *ts, Float_t *ps, Int_t *labelss, Short_t nfcL1, Short_t nfcL2, const TBits & fFastOr):
  AliVMultiplicity("AliMultiplicity",""),
  fNtracks(ntr),
  fNsingle(ns),
  fNsingleSPD2(0),
  //
  fDPhiWindow2(0.08*0.08),  
  fDThetaWindow2(0.025*0.025),
  fDPhiShift(0.0045),
  fNStdDev(1.0),
  //
  fLabels(0),
  fLabelsL2(0),
  fUsedClusS(0),
  fUsedClusT(0),
  fTh(0),
  fPhi(0),
  fDeltTh(0),
  fDeltPhi(0),
  fThsingle(0),
  fPhisingle(0),
  fLabelssingle(0),
  fFastOrFiredChips(1200),
  fClusterFiredChips(1200)
{
// Standard constructor
  for (int il=2;il--;) fSCl2Tracks[il] = fTCl2Tracks[il][0] = fTCl2Tracks[il][1] = 0;
  if(ntr>0){
    fLabels = new Int_t[ntr];
    fLabelsL2 = new Int_t[ntr];
    fTh = new Double_t [ntr];
    fPhi = new Double_t [ntr];
    fDeltTh = new Double_t [ntr];
    fDeltPhi = new Double_t [ntr];
    for(Int_t i=0;i<fNtracks;i++){
      fTh[i]=th[i];
      fPhi[i]=ph[i];
      fDeltTh[i]=dth[i];
      fDeltPhi[i]=dph[i];
      fLabels[i] = labels[i];
      fLabelsL2[i] = labelsL2[i];
    }
  }
  if(ns>0){
    fThsingle = new Double_t [ns];
    fPhisingle = new Double_t [ns];
    fLabelssingle = new Int_t [ns];
    for(Int_t i=0;i<fNsingle;i++){
      fThsingle[i]=ts[i];
      fPhisingle[i]=ps[i];
      fLabelssingle[i]=labelss[i];
    }
  }
  fFiredChips[0] = nfcL1;
  fFiredChips[1] = nfcL2;
  fFastOrFiredChips = fFastOr;
  for(Int_t ilayer = 0; ilayer < 6; ilayer++)fITSClusters[ilayer] = 0;
}

//______________________________________________________________________
AliMultiplicity::AliMultiplicity(Int_t ntr, Int_t ns, Short_t nfcL1, Short_t nfcL2, const TBits & fFastOr) :
  AliVMultiplicity("AliMultiplicity",""),
  fNtracks(ntr),
  fNsingle(ns),
  fNsingleSPD2(0),
  //
  fDPhiWindow2(0.08*0.08),  
  fDThetaWindow2(0.025*0.025),
  fDPhiShift(0.0045),
  fNStdDev(1.0),
  //
  fLabels(0),
  fLabelsL2(0),
  fUsedClusS(0),
  fUsedClusT(0),
  fTh(0),
  fPhi(0),
  fDeltTh(0),
  fDeltPhi(0),
  fThsingle(0),
  fPhisingle(0),
  fLabelssingle(0),
  fFastOrFiredChips(1200),
  fClusterFiredChips(1200)
{
  // Standard constructor to create the arrays w/o filling
  for (int il=2;il--;) fSCl2Tracks[il] = fTCl2Tracks[il][0] = fTCl2Tracks[il][1] = 0;
  if(ntr>0){
    fLabels   = new Int_t[ntr];
    fLabelsL2 = new Int_t[ntr];
    fTh       = new Double_t [ntr];
    fPhi      = new Double_t [ntr];
    fDeltTh   = new Double_t [ntr];
    fDeltPhi  = new Double_t [ntr];
    for(Int_t i=fNtracks;i--;){
      fTh[i]=fPhi[i]=fDeltTh[i]=fDeltPhi[i] = 0;
      fLabels[i] = fLabelsL2[i] = 0;
    }
  }
  if(ns>0){
    fThsingle  = new Double_t [ns];
    fPhisingle = new Double_t [ns];
    fLabelssingle = new Int_t [ns];
    for(Int_t i=fNsingle;i--;) fThsingle[i] = fPhisingle[i] = fLabelssingle[i] = 0;
  }
  fFiredChips[0] = nfcL1;
  fFiredChips[1] = nfcL2;
  fFastOrFiredChips = fFastOr;
  for(Int_t ilayer=6;ilayer--;) fITSClusters[ilayer] = 0;
}

//______________________________________________________________________
AliMultiplicity::AliMultiplicity(const AliMultiplicity& m):
  AliVMultiplicity(m),
  fNtracks(m.fNtracks),
  fNsingle(m.fNsingle),
  fNsingleSPD2(m.fNsingleSPD2),
  //
  fDPhiWindow2(0.08*0.08),  
  fDThetaWindow2(0.025*0.025),
  fDPhiShift(0.0045),
  fNStdDev(1.0),
  //
  fLabels(0),
  fLabelsL2(0),
  fUsedClusS(0),
  fUsedClusT(0),
  fTh(0),
  fPhi(0),
  fDeltTh(0),
  fDeltPhi(0),
  fThsingle(0),
  fPhisingle(0),
  fLabelssingle(0),
  fFastOrFiredChips(1200),
  fClusterFiredChips(1200)
{
  // copy constructor
  for (int il=2;il--;) fSCl2Tracks[il] = fTCl2Tracks[il][0] = fTCl2Tracks[il][1] = 0;
  Duplicate(m);
}

//______________________________________________________________________
AliMultiplicity &AliMultiplicity::operator=(const AliMultiplicity& m){
  // assignment operator
  if(this == &m)return *this;
  ((AliVMultiplicity*)this)->operator=(m);

  if(fTh)delete [] fTh;fTh = 0;
  if(fPhi)delete [] fPhi;fPhi = 0; 
  if(fDeltTh)delete [] fDeltTh;fDeltTh= 0; 
  if(fDeltPhi)delete [] fDeltPhi;fDeltPhi = 0; 
  if(fLabels)delete [] fLabels;fLabels = 0;
  if(fLabelsL2)delete [] fLabelsL2;fLabelsL2 = 0;
  if(fThsingle)delete [] fThsingle;fThsingle = 0;
  if(fPhisingle)delete [] fPhisingle;fPhisingle = 0;
  if(fLabelssingle)delete [] fLabelssingle;fLabelssingle = 0;
  if(fUsedClusS) delete[] fUsedClusS; fUsedClusS = 0;
  if(fUsedClusT) delete[] fUsedClusT; fUsedClusT = 0;
  for (int il=2;il--;) {
    if (fSCl2Tracks[il])    delete fSCl2Tracks[il];    fSCl2Tracks[il]    = 0;
    if (fTCl2Tracks[il][0]) delete fTCl2Tracks[il][0]; fTCl2Tracks[il][0] = 0;
    if (fTCl2Tracks[il][1]) delete fTCl2Tracks[il][1]; fTCl2Tracks[il][1] = 0;
  }
  Duplicate(m);
  //
  return *this;
}

void AliMultiplicity::Copy(TObject &obj) const {
  
  // this overwrites the virtual TOBject::Copy()
  // to allow run time copying without casting
  // in AliESDEvent

  if(this==&obj)return;
  AliMultiplicity *robj = dynamic_cast<AliMultiplicity*>(&obj);
  if(!robj)return; // not an AliMultiplicity
  *robj = *this;

}


//______________________________________________________________________
void AliMultiplicity::Duplicate(const AliMultiplicity& m){
  // used by copy constructor and assignment operator
  fNtracks = m.fNtracks;
  if(fNtracks>0){
    fTh = new Double_t[fNtracks];
    fPhi = new Double_t[fNtracks];
    fDeltTh = new Double_t[fNtracks];
    fDeltPhi = new Double_t[fNtracks];
    fLabels = new Int_t[fNtracks];
    fLabelsL2 = new Int_t[fNtracks];
    if (m.fUsedClusT) fUsedClusT = new ULong64_t[fNtracks]; else fUsedClusT = 0;
    if(m.fTh)memcpy(fTh,m.fTh,fNtracks*sizeof(Double_t));
    if(m.fPhi)memcpy(fPhi,m.fPhi,fNtracks*sizeof(Double_t));
    if(m.fDeltTh)memcpy(fDeltTh,m.fDeltTh,fNtracks*sizeof(Double_t));
    if(m.fDeltPhi)memcpy(fDeltPhi,m.fDeltPhi,fNtracks*sizeof(Double_t));
    if(m.fLabels)memcpy(fLabels,m.fLabels,fNtracks*sizeof(Int_t));
    if(m.fLabelsL2)memcpy(fLabelsL2,m.fLabelsL2,fNtracks*sizeof(Int_t));
    if(fUsedClusT) memcpy(fUsedClusT,m.fUsedClusT,fNtracks*sizeof(ULong64_t));
    for (int i=2;i--;) for (int j=2;j--;) if (m.fTCl2Tracks[i][j]) fTCl2Tracks[i][j] = new AliRefArray(*m.fTCl2Tracks[i][j]);
  }
  else {
    fTh = 0;
    fPhi = 0;
    fDeltTh = 0;
    fDeltPhi = 0;
    fLabels = 0;
    fLabelsL2 = 0;
  }
  fNsingle = m.fNsingle;
  fNsingleSPD2 = m.fNsingleSPD2;
  if(fNsingle>0){
    fThsingle = new Double_t[fNsingle];
    fPhisingle = new Double_t[fNsingle];
    fLabelssingle = new Int_t[fNsingle];
    if (m.fUsedClusS) fUsedClusS = new UInt_t[fNsingle];
    else fUsedClusS = 0;
    if(m.fThsingle)memcpy(fThsingle,m.fThsingle,fNsingle*sizeof(Double_t));
    if(m.fPhisingle)memcpy(fPhisingle,m.fPhisingle,fNsingle*sizeof(Double_t));
    if(m.fLabelssingle)memcpy(fLabelssingle,m.fLabelssingle,fNsingle*sizeof(Int_t));
    if(fUsedClusS) memcpy(fUsedClusS,m.fUsedClusS,fNsingle*sizeof(UInt_t));
    for (int i=2;i--;) if (m.fSCl2Tracks[i]) fSCl2Tracks[i] = new AliRefArray(*m.fSCl2Tracks[i]);
  }
  else {
    fThsingle = 0;
    fPhisingle = 0;
    fLabelssingle = 0;
  }

  fFiredChips[0] = m.fFiredChips[0];
  fFiredChips[1] = m.fFiredChips[1];
  for(Int_t ilayer = 0; ilayer < 6; ilayer++){
    fITSClusters[ilayer] = m.fITSClusters[ilayer];
  }
  fDPhiWindow2   = m.fDPhiWindow2;
  fDThetaWindow2 = m.fDThetaWindow2;
  fDPhiShift     = m.fDPhiShift;
  fNStdDev       = m.fNStdDev;
  fFastOrFiredChips = m.fFastOrFiredChips;
  fClusterFiredChips = m.fClusterFiredChips;
}

//______________________________________________________________________
AliMultiplicity::~AliMultiplicity(){
  // Destructor
  if(fTh)delete [] fTh;fTh = 0;
  if(fPhi)delete [] fPhi;fPhi = 0; 
  if(fDeltTh)delete [] fDeltTh;fDeltTh = 0; 
  if(fDeltPhi)delete [] fDeltPhi;fDeltPhi = 0; 
  if(fLabels)delete [] fLabels;fLabels = 0;
  if(fLabelsL2)delete [] fLabelsL2;fLabelsL2 = 0;
  if(fThsingle)delete [] fThsingle;fThsingle = 0;
  if(fPhisingle)delete [] fPhisingle;fPhisingle = 0;
  if(fLabelssingle)delete [] fLabelssingle;fLabelssingle = 0;
  if(fUsedClusS) delete[] fUsedClusS; fUsedClusS = 0;
  if(fUsedClusT) delete[] fUsedClusT; fUsedClusT = 0;
  for (int il=2;il--;) {
    if (fSCl2Tracks[il])    delete fSCl2Tracks[il];    fSCl2Tracks[il]    = 0;
    if (fTCl2Tracks[il][0]) delete fTCl2Tracks[il][0]; fTCl2Tracks[il][0] = 0;
    if (fTCl2Tracks[il][1]) delete fTCl2Tracks[il][1]; fTCl2Tracks[il][1] = 0;
  }
}

//______________________________________________________________________
void AliMultiplicity::Clear(Option_t*)
{
  // reset all
  AliVMultiplicity::Clear();
  if(fTh)delete [] fTh;fTh = 0;
  if(fPhi)delete [] fPhi;fPhi = 0; 
  if(fDeltTh)delete [] fDeltTh;fDeltTh = 0; 
  if(fDeltPhi)delete [] fDeltPhi;fDeltPhi = 0; 
  if(fLabels)delete [] fLabels;fLabels = 0;
  if(fLabelsL2)delete [] fLabelsL2;fLabelsL2 = 0;
  if(fThsingle)delete [] fThsingle;fThsingle = 0;
  if(fPhisingle)delete [] fPhisingle;fPhisingle = 0;
  if(fLabelssingle)delete [] fLabelssingle;fLabelssingle = 0;
  if(fUsedClusS) delete[] fUsedClusS; fUsedClusS = 0;
  if(fUsedClusT) delete[] fUsedClusT; fUsedClusT = 0;
  for (int il=2;il--;) {
    if (fSCl2Tracks[il])    delete fSCl2Tracks[il];    fSCl2Tracks[il]    = 0;
    if (fTCl2Tracks[il][0]) delete fTCl2Tracks[il][0]; fTCl2Tracks[il][0] = 0;
    if (fTCl2Tracks[il][1]) delete fTCl2Tracks[il][1]; fTCl2Tracks[il][1] = 0;
  }
  fNtracks = fNsingle = 0;
  for (int i=6;i--;) fITSClusters[0] = 0;
  fFiredChips[0] = fFiredChips[1] = 0;
  fFastOrFiredChips.ResetAllBits(kTRUE);
  fClusterFiredChips.ResetAllBits(kTRUE);
  //
}

//______________________________________________________________________
void AliMultiplicity::SetLabel(Int_t i, Int_t layer, Int_t label)
{
    if(i>=0 && i<fNtracks) {
	if (layer == 0) {
	    fLabels[i] = label;
	    return;
	} else if (layer == 1) {
	    if (fLabelsL2) {
		fLabelsL2[i] = label;
		return;
	    }
	}
    }
    Error("SetLabel","Invalid track number %d or layer %d",i,layer);
}

//______________________________________________________________________
void AliMultiplicity::SetLabelSingle(Int_t i, Int_t label) 
{
    if(i>=0 && i<fNsingle) {
      if (fLabelssingle) {
        fLabelssingle[i] = label;
        return;
      }
    }
    Error("SetLabelSingle","Invalid single cluster number %d",i);
}

//______________________________________________________________________
UInt_t AliMultiplicity::GetNumberOfITSClusters(Int_t layMin, Int_t layMax) const {

  if(layMax < layMin) {
    AliError("layer min > layer max");
    return 0;
  }
  if(layMin < 0) {
    AliError("layer min < 0");
    return 0;
  }
  if(layMax < 0) {
    AliError("layer max > 0");
    return 0;
  }

  Int_t sum=0; 
  for (Int_t i=layMin; i<=layMax; i++) sum+=fITSClusters[i]; 
  return sum; 

}

//______________________________________________________________________
void AliMultiplicity::SetTrackletData(Int_t id, const Float_t* tlet, UInt_t trSPD1, UInt_t trSPD2)
{
  // fill tracklet data
  if (id>=fNtracks) {AliError(Form("Number of declared tracklets %d < %d",fNtracks,id)); return;}
  fTh[id]      = tlet[0];
  fPhi[id]     = tlet[1];
  fDeltPhi[id] = tlet[2];
  fDeltTh[id]  = tlet[3];
  fLabels[id]   = Int_t(tlet[4]);
  fLabelsL2[id] = Int_t(tlet[5]);
  if (!GetMultTrackRefs()) {
    if (!fUsedClusT) {fUsedClusT = new ULong64_t[fNtracks]; memset(fUsedClusT,0,fNtracks*sizeof(ULong64_t));}
    fUsedClusT[id] = (((ULong64_t)trSPD2)<<32) + trSPD1;
  }
  //
}

//______________________________________________________________________
void AliMultiplicity::SetSingleClusterData(Int_t id, const Float_t* scl, UInt_t tr)
{
  // fill single cluster data
  if (id>=fNsingle) {AliError(Form("Number of declared singles %d < %d",fNsingle,id)); return;}
  fThsingle[id]  = scl[0];
  fPhisingle[id] = scl[1];
  fLabelssingle[id] = Int_t(scl[2]); 
  if (!GetMultTrackRefs()) {
    if (!fUsedClusS) {fUsedClusS = new UInt_t[fNsingle]; memset(fUsedClusS,0,fNsingle*sizeof(UInt_t));}
    fUsedClusS[id] = tr;
  }
  //
}

//______________________________________________________________________
Bool_t AliMultiplicity::FreeClustersTracklet(Int_t i, Int_t mode) const
{
  // return kTRUE if the tracklet was not used by the track (on any of layers) of type mode: 0=TPC/ITS or ITS_SA, 1=ITS_SA_Pure
  if (mode<0 || mode>1 || i<0 || i>fNtracks) return kFALSE;
  if (GetMultTrackRefs()) { // new format allows multiple references
    return !((fTCl2Tracks[0][mode] && fTCl2Tracks[0][mode]->HasReference(i)) ||
	     (fTCl2Tracks[1][mode] && fTCl2Tracks[1][mode]->HasReference(i)));
  }
  //
  if (!fUsedClusT) return kFALSE;
  const ULong64_t kMask0 = 0x0000ffff0000ffffLL;
  const ULong64_t kMask1 = 0xffff0000ffff0000LL;
  return (fUsedClusT[i]&(mode ? kMask1:kMask0)) == 0;
}

//______________________________________________________________________
Bool_t AliMultiplicity::GetTrackletTrackIDs(Int_t i, Int_t mode, Int_t &spd1, Int_t &spd2) const
{
  // set spd1 and spd2 to ID's of the tracks using the clusters of the tracklet (-1 if not used)
  // Mode: 0=TPC/ITS or ITS_SA, 1=ITS_SA_Pure tracks
  // return false if the neither of clusters is used
  // note: stored value:  [(idSAPureSPD2+1)<<16+(idTPCITS/SA_SPD2+1)]<<32 +  [(idSAPureSPD1+1)<<16+(idTPCITS/SA_SPD1+1)]
  // Attention: new format allows references to multiple tracks, here only the 1st will be returned
  spd1 = spd2 = -1;
  if ( mode<0 || mode>1 || i<0 || i>fNtracks ) return kFALSE;
  if (GetMultTrackRefs()) {
    if (fTCl2Tracks[0][mode]) spd1 = fTCl2Tracks[0][mode]->GetReference(i,0);
    if (fTCl2Tracks[1][mode]) spd2 = fTCl2Tracks[1][mode]->GetReference(i,0);
  }
  else {
    if (!fUsedClusT) return kFALSE;
    spd1 = (fUsedClusT[i]&0xffffffffLL);
    spd2 = (fUsedClusT[i]>>32);
    if (mode) { spd1 >>= 16;    spd2 >>= 16;}
    else      { spd1 &= 0xffff; spd2 &= 0xffff;}
    spd1--; // we are storing id+1
    spd2--;
  }
  return !(spd1<0&&spd2<0);
}

//______________________________________________________________________
Int_t AliMultiplicity::GetTrackletTrackIDsLay(Int_t lr,Int_t i, Int_t mode, UInt_t* refs, UInt_t maxRef) const
{
  // fill array refs with maximum maxRef references on tracks used by the cluster of layer lr of tracklet i.
  // return number of filled references
  // Mode: 0=TPC/ITS or ITS_SA, 1=ITS_SA_Pure tracks
  //
  int nrefs = 0;
  if ( mode<0 || mode>1 || i<0 || i>fNtracks || lr<0||lr>1) return nrefs;
  if (GetMultTrackRefs()) {
    if (fTCl2Tracks[lr][mode]) nrefs = fTCl2Tracks[lr][mode]->GetReferences(i,refs, maxRef);
  }
  else {
    if (!fUsedClusT || maxRef<1) return nrefs;
    int tr = (fUsedClusT[i]&0xffffffffLL);
    if (mode) { lr==0 ? tr >>= 16    : tr >>= 16;}
    else      { lr==0 ? tr &= 0xffff : tr &= 0xffff;}
    refs[0] = tr--; // we are storing id+1
    nrefs = 1;
  }
  return nrefs;
}

//______________________________________________________________________
Int_t AliMultiplicity::GetSingleClusterTrackIDs(Int_t i, Int_t mode, UInt_t* refs, UInt_t maxRef) const
{
  // fill array refs with maximum maxRef references on tracks used by the single cluster i of layer lr
  // return number of filled references
  // Mode: 0=TPC/ITS or ITS_SA, 1=ITS_SA_Pure tracks
  //
  int nrefs = 0;
  if ( mode<0 || mode>1 || i<0 || i>fNtracks) return nrefs;
  if (GetMultTrackRefs()) {
    if (fSCl2Tracks[mode]) nrefs = fSCl2Tracks[mode]->GetReferences(i,refs, maxRef);
  }
  else {
    if (!fUsedClusS || maxRef<1) return nrefs;
    int tr = fUsedClusS[i];
    if (mode) tr >>= 16;
    else      tr &= 0xffff;
    refs[0] = tr--; // we are storing id+1
    nrefs = 1;
  }
  return nrefs;
}

//______________________________________________________________________
Bool_t AliMultiplicity::FreeSingleCluster(Int_t i, Int_t mode) const
{
  // return kTRUE if the cluster was not used by the track of type mode: 0=TPC/ITS or ITS_SA, 1=ITS_SA_Pure
  if (mode<0 || mode>1 || i<0 || i>fNsingle) return kFALSE;
  if (GetMultTrackRefs()) { // new format allows multiple references
    return !(fSCl2Tracks[mode] && fSCl2Tracks[mode]->HasReference(i));
  }
  if (!fUsedClusS) return kFALSE;
  const UInt_t kMask0 = 0x0000ffff;
  const UInt_t kMask1 = 0xffff0000;
  return (fUsedClusS[i]&(mode ? kMask1:kMask0)) == 0;
}

//______________________________________________________________________
Bool_t AliMultiplicity::GetSingleClusterTrackID(Int_t i, Int_t mode, Int_t &tr) const
{
  // set tr to id of the track using the single clusters  (-1 if not used)
  // Mode: 0=TPC/ITS or ITS_SA, 1=ITS_SA_Pure tracks
  // return false if the cluster is not used
  //
  // Attention: new format allows references to multiple tracks, here only the 1st will be returned
  tr = -1;
  if (mode<0 || mode>1 || i<0 || i>fNsingle) return kFALSE;
  if (GetMultTrackRefs()) { if (fSCl2Tracks[mode]) tr = fSCl2Tracks[mode]->GetReference(i,0);}
  else {
    if (!fUsedClusS) return kFALSE;
    tr = fUsedClusS[i];
    if (mode) tr >>= 16;  else tr &= 0xffff;
    tr--;
  }
  return tr>=0;
}

//______________________________________________________________________
void AliMultiplicity::CompactBits()
{
  // sqeeze bit contrainers to minimum
  fFastOrFiredChips.Compact();
  fClusterFiredChips.Compact();
}

//______________________________________________________________________
void AliMultiplicity::Print(Option_t *opt) const
{
  // print
  printf("N.tracklets: %4d N.singles: %4d, Multiple cluster->track refs:%s\n"
	 "Used: DPhiShift: %.3e Sig^2: dPhi:%.3e dTht:%.3e NStdDev:%.2f ScaleDThtSin2T:%s\n",
	 fNtracks,fNsingle,GetMultTrackRefs() ? "ON":"OFF",
	 fDPhiShift,fDPhiWindow2,fDThetaWindow2,fNStdDev,GetScaleDThetaBySin2T() ? "ON":"OFF");
  TString opts = opt; opts.ToLower();
  int t0spd1=-1,t1spd1=-1,t0spd2=-1,t1spd2=-1,nt[2][2]={{0}};
  UInt_t t[2][2][10]={{{0}}};
  //
  if (opts.Contains("t")) {
    for (int i=0;i<fNtracks;i++) {
      if (GetMultTrackRefs()) for (int il=2;il--;)for(int it=2;it--;) nt[il][it] = GetTrackletTrackIDsLay(il,i,it,t[il][it],10);
      else {
	GetTrackletTrackIDs(i,0,t0spd1,t0spd2);
	GetTrackletTrackIDs(i,1,t1spd1,t1spd2);
      }
      printf("T#%3d| Eta:%+5.2f Th:%+6.3f Phi:%+6.3f DTh:%+6.3f DPhi:%+6.3f L1:%5d L2:%5d ",
	     i,GetEta(i),fTh[i],fPhi[i],fDeltTh[i],fDeltPhi[i],fLabels[i],fLabelsL2[i]);
      if (!GetMultTrackRefs()) printf("U:L1[%4d/%4d] L2[%4d/%4d]\n",t0spd1,t1spd1,t0spd2,t1spd2);
      else {
	printf("U:L1[");
	if (!nt[0][0]) printf("%4d ",-1); else for(int j=0;j<nt[0][0];j++) printf("%4d ",t[0][0][j]); printf("/");
	if (!nt[0][1]) printf("%4d ",-1); else for(int j=0;j<nt[0][1];j++) printf("%4d ",t[0][1][j]); printf("]");
	//
	printf(" L2[");
	if (!nt[1][0]) printf("%4d ",-1); else for(int j=0;j<nt[1][0];j++) printf("%4d ",t[1][0][j]); printf("/");
	if (!nt[1][1]) printf("%4d ",-1); else for(int j=0;j<nt[1][1];j++) printf("%4d ",t[1][1][j]); printf("]\n");      
      }      
    }
  }
  if (opts.Contains("s")) {
    for (int i=0;i<fNsingle;i++) {
      if (GetMultTrackRefs()) for(int it=2;it--;) nt[0][it] = GetSingleClusterTrackIDs(i,it,t[0][it],10);
      else {
	GetSingleClusterTrackID(i,0,t0spd1);
	GetSingleClusterTrackID(i,1,t1spd1);
      }
      printf("S#%3d| Th:%+6.3f Phi:%+6.3f L:%6d ",i,fThsingle[i],fPhisingle[i],fLabelssingle[i]);
      if (!GetMultTrackRefs()) printf("U:[%4d/%4d]\n", t0spd1,t1spd1);
      else {
	printf("U:["); 
	if (!nt[0][0]) printf("%4d ",-1); else for(int j=0;j<nt[0][0];j++) printf("%4d ",t[0][0][j]); printf("/");
	if (!nt[0][1]) printf("%4d ",-1); else for(int j=0;j<nt[0][1];j++) printf("%4d ",t[0][1][j]); printf("]\n");	
      }
    }
  }
  //
}

Int_t AliMultiplicity::GetLabelSingleLr(Int_t i, Int_t lr) const 
{
  if (lr==1) {
    if (!AreSPD2SinglesStored()) return -1;
    else i += GetNumberOfSingleClustersLr(0);
  }
  if(i>=0 && i<fNsingle) {
      return fLabelssingle[i];
  } else {
    Error("GetLabelSingle","Invalid cluster number %d",i); return -9999;
  }
  return -9999;
}

Float_t AliMultiplicity::GetPhiAll(int icl, int lr) const
{
  // return phi of the cluster out of total tracklets + singles
  if (lr<0||lr>1) return -999;
  if (icl<0||icl>(int)GetNumberOfITSClusters(lr)) {Error("GetPhiAll","Wrong cluster ID=%d for SPD%d",icl,lr); return -999;}
  if (lr==0) return (icl<fNtracks) ? GetPhi(icl) : GetPhiSingle(icl-fNtracks);
  return (icl<fNtracks) ? (GetPhi(icl) + GetDeltaPhi(icl)) : GetPhiSingleLr(icl-fNtracks, 1);
} 

Float_t AliMultiplicity::GetThetaAll(int icl, int lr) const
{
  // return theta of the cluster out of total tracklets + singles
  if (lr<0||lr>1) return -999;
  if (icl<0||icl>(int)GetNumberOfITSClusters(lr)) {Error("GetPhiAll","Wrong cluster ID=%d for SPD%d",icl,lr); return -999;}
  if (lr==0) return (icl<fNtracks) ? GetTheta(icl) : GetThetaSingle(icl-fNtracks);
  return (icl<fNtracks) ?  (GetTheta(icl) + GetDeltaTheta(icl)) : GetThetaSingleLr(icl-fNtracks, 1);
} 

Int_t AliMultiplicity::GetLabelAll(int icl, int lr) const
{
  // return label of the cluster out of total tracklets + singles
  if (lr<0||lr>1) return -99999;
  if (icl<0||icl>(int)GetNumberOfITSClusters(lr)) {Error("GetPhiAll","Wrong cluster ID=%d for SPD%d",icl,lr); return -99999;}
  if (lr==0) return (icl<fNtracks) ? GetLabel(icl,0) : GetLabelSingle(icl-fNtracks);
  return (icl<fNtracks) ?  GetLabel(icl,1) : GetLabelSingleLr(icl-fNtracks, 1);
} 
 AliMultiplicity.cxx:1
 AliMultiplicity.cxx:2
 AliMultiplicity.cxx:3
 AliMultiplicity.cxx:4
 AliMultiplicity.cxx:5
 AliMultiplicity.cxx:6
 AliMultiplicity.cxx:7
 AliMultiplicity.cxx:8
 AliMultiplicity.cxx:9
 AliMultiplicity.cxx:10
 AliMultiplicity.cxx:11
 AliMultiplicity.cxx:12
 AliMultiplicity.cxx:13
 AliMultiplicity.cxx:14
 AliMultiplicity.cxx:15
 AliMultiplicity.cxx:16
 AliMultiplicity.cxx:17
 AliMultiplicity.cxx:18
 AliMultiplicity.cxx:19
 AliMultiplicity.cxx:20
 AliMultiplicity.cxx:21
 AliMultiplicity.cxx:22
 AliMultiplicity.cxx:23
 AliMultiplicity.cxx:24
 AliMultiplicity.cxx:25
 AliMultiplicity.cxx:26
 AliMultiplicity.cxx:27
 AliMultiplicity.cxx:28
 AliMultiplicity.cxx:29
 AliMultiplicity.cxx:30
 AliMultiplicity.cxx:31
 AliMultiplicity.cxx:32
 AliMultiplicity.cxx:33
 AliMultiplicity.cxx:34
 AliMultiplicity.cxx:35
 AliMultiplicity.cxx:36
 AliMultiplicity.cxx:37
 AliMultiplicity.cxx:38
 AliMultiplicity.cxx:39
 AliMultiplicity.cxx:40
 AliMultiplicity.cxx:41
 AliMultiplicity.cxx:42
 AliMultiplicity.cxx:43
 AliMultiplicity.cxx:44
 AliMultiplicity.cxx:45
 AliMultiplicity.cxx:46
 AliMultiplicity.cxx:47
 AliMultiplicity.cxx:48
 AliMultiplicity.cxx:49
 AliMultiplicity.cxx:50
 AliMultiplicity.cxx:51
 AliMultiplicity.cxx:52
 AliMultiplicity.cxx:53
 AliMultiplicity.cxx:54
 AliMultiplicity.cxx:55
 AliMultiplicity.cxx:56
 AliMultiplicity.cxx:57
 AliMultiplicity.cxx:58
 AliMultiplicity.cxx:59
 AliMultiplicity.cxx:60
 AliMultiplicity.cxx:61
 AliMultiplicity.cxx:62
 AliMultiplicity.cxx:63
 AliMultiplicity.cxx:64
 AliMultiplicity.cxx:65
 AliMultiplicity.cxx:66
 AliMultiplicity.cxx:67
 AliMultiplicity.cxx:68
 AliMultiplicity.cxx:69
 AliMultiplicity.cxx:70
 AliMultiplicity.cxx:71
 AliMultiplicity.cxx:72
 AliMultiplicity.cxx:73
 AliMultiplicity.cxx:74
 AliMultiplicity.cxx:75
 AliMultiplicity.cxx:76
 AliMultiplicity.cxx:77
 AliMultiplicity.cxx:78
 AliMultiplicity.cxx:79
 AliMultiplicity.cxx:80
 AliMultiplicity.cxx:81
 AliMultiplicity.cxx:82
 AliMultiplicity.cxx:83
 AliMultiplicity.cxx:84
 AliMultiplicity.cxx:85
 AliMultiplicity.cxx:86
 AliMultiplicity.cxx:87
 AliMultiplicity.cxx:88
 AliMultiplicity.cxx:89
 AliMultiplicity.cxx:90
 AliMultiplicity.cxx:91
 AliMultiplicity.cxx:92
 AliMultiplicity.cxx:93
 AliMultiplicity.cxx:94
 AliMultiplicity.cxx:95
 AliMultiplicity.cxx:96
 AliMultiplicity.cxx:97
 AliMultiplicity.cxx:98
 AliMultiplicity.cxx:99
 AliMultiplicity.cxx:100
 AliMultiplicity.cxx:101
 AliMultiplicity.cxx:102
 AliMultiplicity.cxx:103
 AliMultiplicity.cxx:104
 AliMultiplicity.cxx:105
 AliMultiplicity.cxx:106
 AliMultiplicity.cxx:107
 AliMultiplicity.cxx:108
 AliMultiplicity.cxx:109
 AliMultiplicity.cxx:110
 AliMultiplicity.cxx:111
 AliMultiplicity.cxx:112
 AliMultiplicity.cxx:113
 AliMultiplicity.cxx:114
 AliMultiplicity.cxx:115
 AliMultiplicity.cxx:116
 AliMultiplicity.cxx:117
 AliMultiplicity.cxx:118
 AliMultiplicity.cxx:119
 AliMultiplicity.cxx:120
 AliMultiplicity.cxx:121
 AliMultiplicity.cxx:122
 AliMultiplicity.cxx:123
 AliMultiplicity.cxx:124
 AliMultiplicity.cxx:125
 AliMultiplicity.cxx:126
 AliMultiplicity.cxx:127
 AliMultiplicity.cxx:128
 AliMultiplicity.cxx:129
 AliMultiplicity.cxx:130
 AliMultiplicity.cxx:131
 AliMultiplicity.cxx:132
 AliMultiplicity.cxx:133
 AliMultiplicity.cxx:134
 AliMultiplicity.cxx:135
 AliMultiplicity.cxx:136
 AliMultiplicity.cxx:137
 AliMultiplicity.cxx:138
 AliMultiplicity.cxx:139
 AliMultiplicity.cxx:140
 AliMultiplicity.cxx:141
 AliMultiplicity.cxx:142
 AliMultiplicity.cxx:143
 AliMultiplicity.cxx:144
 AliMultiplicity.cxx:145
 AliMultiplicity.cxx:146
 AliMultiplicity.cxx:147
 AliMultiplicity.cxx:148
 AliMultiplicity.cxx:149
 AliMultiplicity.cxx:150
 AliMultiplicity.cxx:151
 AliMultiplicity.cxx:152
 AliMultiplicity.cxx:153
 AliMultiplicity.cxx:154
 AliMultiplicity.cxx:155
 AliMultiplicity.cxx:156
 AliMultiplicity.cxx:157
 AliMultiplicity.cxx:158
 AliMultiplicity.cxx:159
 AliMultiplicity.cxx:160
 AliMultiplicity.cxx:161
 AliMultiplicity.cxx:162
 AliMultiplicity.cxx:163
 AliMultiplicity.cxx:164
 AliMultiplicity.cxx:165
 AliMultiplicity.cxx:166
 AliMultiplicity.cxx:167
 AliMultiplicity.cxx:168
 AliMultiplicity.cxx:169
 AliMultiplicity.cxx:170
 AliMultiplicity.cxx:171
 AliMultiplicity.cxx:172
 AliMultiplicity.cxx:173
 AliMultiplicity.cxx:174
 AliMultiplicity.cxx:175
 AliMultiplicity.cxx:176
 AliMultiplicity.cxx:177
 AliMultiplicity.cxx:178
 AliMultiplicity.cxx:179
 AliMultiplicity.cxx:180
 AliMultiplicity.cxx:181
 AliMultiplicity.cxx:182
 AliMultiplicity.cxx:183
 AliMultiplicity.cxx:184
 AliMultiplicity.cxx:185
 AliMultiplicity.cxx:186
 AliMultiplicity.cxx:187
 AliMultiplicity.cxx:188
 AliMultiplicity.cxx:189
 AliMultiplicity.cxx:190
 AliMultiplicity.cxx:191
 AliMultiplicity.cxx:192
 AliMultiplicity.cxx:193
 AliMultiplicity.cxx:194
 AliMultiplicity.cxx:195
 AliMultiplicity.cxx:196
 AliMultiplicity.cxx:197
 AliMultiplicity.cxx:198
 AliMultiplicity.cxx:199
 AliMultiplicity.cxx:200
 AliMultiplicity.cxx:201
 AliMultiplicity.cxx:202
 AliMultiplicity.cxx:203
 AliMultiplicity.cxx:204
 AliMultiplicity.cxx:205
 AliMultiplicity.cxx:206
 AliMultiplicity.cxx:207
 AliMultiplicity.cxx:208
 AliMultiplicity.cxx:209
 AliMultiplicity.cxx:210
 AliMultiplicity.cxx:211
 AliMultiplicity.cxx:212
 AliMultiplicity.cxx:213
 AliMultiplicity.cxx:214
 AliMultiplicity.cxx:215
 AliMultiplicity.cxx:216
 AliMultiplicity.cxx:217
 AliMultiplicity.cxx:218
 AliMultiplicity.cxx:219
 AliMultiplicity.cxx:220
 AliMultiplicity.cxx:221
 AliMultiplicity.cxx:222
 AliMultiplicity.cxx:223
 AliMultiplicity.cxx:224
 AliMultiplicity.cxx:225
 AliMultiplicity.cxx:226
 AliMultiplicity.cxx:227
 AliMultiplicity.cxx:228
 AliMultiplicity.cxx:229
 AliMultiplicity.cxx:230
 AliMultiplicity.cxx:231
 AliMultiplicity.cxx:232
 AliMultiplicity.cxx:233
 AliMultiplicity.cxx:234
 AliMultiplicity.cxx:235
 AliMultiplicity.cxx:236
 AliMultiplicity.cxx:237
 AliMultiplicity.cxx:238
 AliMultiplicity.cxx:239
 AliMultiplicity.cxx:240
 AliMultiplicity.cxx:241
 AliMultiplicity.cxx:242
 AliMultiplicity.cxx:243
 AliMultiplicity.cxx:244
 AliMultiplicity.cxx:245
 AliMultiplicity.cxx:246
 AliMultiplicity.cxx:247
 AliMultiplicity.cxx:248
 AliMultiplicity.cxx:249
 AliMultiplicity.cxx:250
 AliMultiplicity.cxx:251
 AliMultiplicity.cxx:252
 AliMultiplicity.cxx:253
 AliMultiplicity.cxx:254
 AliMultiplicity.cxx:255
 AliMultiplicity.cxx:256
 AliMultiplicity.cxx:257
 AliMultiplicity.cxx:258
 AliMultiplicity.cxx:259
 AliMultiplicity.cxx:260
 AliMultiplicity.cxx:261
 AliMultiplicity.cxx:262
 AliMultiplicity.cxx:263
 AliMultiplicity.cxx:264
 AliMultiplicity.cxx:265
 AliMultiplicity.cxx:266
 AliMultiplicity.cxx:267
 AliMultiplicity.cxx:268
 AliMultiplicity.cxx:269
 AliMultiplicity.cxx:270
 AliMultiplicity.cxx:271
 AliMultiplicity.cxx:272
 AliMultiplicity.cxx:273
 AliMultiplicity.cxx:274
 AliMultiplicity.cxx:275
 AliMultiplicity.cxx:276
 AliMultiplicity.cxx:277
 AliMultiplicity.cxx:278
 AliMultiplicity.cxx:279
 AliMultiplicity.cxx:280
 AliMultiplicity.cxx:281
 AliMultiplicity.cxx:282
 AliMultiplicity.cxx:283
 AliMultiplicity.cxx:284
 AliMultiplicity.cxx:285
 AliMultiplicity.cxx:286
 AliMultiplicity.cxx:287
 AliMultiplicity.cxx:288
 AliMultiplicity.cxx:289
 AliMultiplicity.cxx:290
 AliMultiplicity.cxx:291
 AliMultiplicity.cxx:292
 AliMultiplicity.cxx:293
 AliMultiplicity.cxx:294
 AliMultiplicity.cxx:295
 AliMultiplicity.cxx:296
 AliMultiplicity.cxx:297
 AliMultiplicity.cxx:298
 AliMultiplicity.cxx:299
 AliMultiplicity.cxx:300
 AliMultiplicity.cxx:301
 AliMultiplicity.cxx:302
 AliMultiplicity.cxx:303
 AliMultiplicity.cxx:304
 AliMultiplicity.cxx:305
 AliMultiplicity.cxx:306
 AliMultiplicity.cxx:307
 AliMultiplicity.cxx:308
 AliMultiplicity.cxx:309
 AliMultiplicity.cxx:310
 AliMultiplicity.cxx:311
 AliMultiplicity.cxx:312
 AliMultiplicity.cxx:313
 AliMultiplicity.cxx:314
 AliMultiplicity.cxx:315
 AliMultiplicity.cxx:316
 AliMultiplicity.cxx:317
 AliMultiplicity.cxx:318
 AliMultiplicity.cxx:319
 AliMultiplicity.cxx:320
 AliMultiplicity.cxx:321
 AliMultiplicity.cxx:322
 AliMultiplicity.cxx:323
 AliMultiplicity.cxx:324
 AliMultiplicity.cxx:325
 AliMultiplicity.cxx:326
 AliMultiplicity.cxx:327
 AliMultiplicity.cxx:328
 AliMultiplicity.cxx:329
 AliMultiplicity.cxx:330
 AliMultiplicity.cxx:331
 AliMultiplicity.cxx:332
 AliMultiplicity.cxx:333
 AliMultiplicity.cxx:334
 AliMultiplicity.cxx:335
 AliMultiplicity.cxx:336
 AliMultiplicity.cxx:337
 AliMultiplicity.cxx:338
 AliMultiplicity.cxx:339
 AliMultiplicity.cxx:340
 AliMultiplicity.cxx:341
 AliMultiplicity.cxx:342
 AliMultiplicity.cxx:343
 AliMultiplicity.cxx:344
 AliMultiplicity.cxx:345
 AliMultiplicity.cxx:346
 AliMultiplicity.cxx:347
 AliMultiplicity.cxx:348
 AliMultiplicity.cxx:349
 AliMultiplicity.cxx:350
 AliMultiplicity.cxx:351
 AliMultiplicity.cxx:352
 AliMultiplicity.cxx:353
 AliMultiplicity.cxx:354
 AliMultiplicity.cxx:355
 AliMultiplicity.cxx:356
 AliMultiplicity.cxx:357
 AliMultiplicity.cxx:358
 AliMultiplicity.cxx:359
 AliMultiplicity.cxx:360
 AliMultiplicity.cxx:361
 AliMultiplicity.cxx:362
 AliMultiplicity.cxx:363
 AliMultiplicity.cxx:364
 AliMultiplicity.cxx:365
 AliMultiplicity.cxx:366
 AliMultiplicity.cxx:367
 AliMultiplicity.cxx:368
 AliMultiplicity.cxx:369
 AliMultiplicity.cxx:370
 AliMultiplicity.cxx:371
 AliMultiplicity.cxx:372
 AliMultiplicity.cxx:373
 AliMultiplicity.cxx:374
 AliMultiplicity.cxx:375
 AliMultiplicity.cxx:376
 AliMultiplicity.cxx:377
 AliMultiplicity.cxx:378
 AliMultiplicity.cxx:379
 AliMultiplicity.cxx:380
 AliMultiplicity.cxx:381
 AliMultiplicity.cxx:382
 AliMultiplicity.cxx:383
 AliMultiplicity.cxx:384
 AliMultiplicity.cxx:385
 AliMultiplicity.cxx:386
 AliMultiplicity.cxx:387
 AliMultiplicity.cxx:388
 AliMultiplicity.cxx:389
 AliMultiplicity.cxx:390
 AliMultiplicity.cxx:391
 AliMultiplicity.cxx:392
 AliMultiplicity.cxx:393
 AliMultiplicity.cxx:394
 AliMultiplicity.cxx:395
 AliMultiplicity.cxx:396
 AliMultiplicity.cxx:397
 AliMultiplicity.cxx:398
 AliMultiplicity.cxx:399
 AliMultiplicity.cxx:400
 AliMultiplicity.cxx:401
 AliMultiplicity.cxx:402
 AliMultiplicity.cxx:403
 AliMultiplicity.cxx:404
 AliMultiplicity.cxx:405
 AliMultiplicity.cxx:406
 AliMultiplicity.cxx:407
 AliMultiplicity.cxx:408
 AliMultiplicity.cxx:409
 AliMultiplicity.cxx:410
 AliMultiplicity.cxx:411
 AliMultiplicity.cxx:412
 AliMultiplicity.cxx:413
 AliMultiplicity.cxx:414
 AliMultiplicity.cxx:415
 AliMultiplicity.cxx:416
 AliMultiplicity.cxx:417
 AliMultiplicity.cxx:418
 AliMultiplicity.cxx:419
 AliMultiplicity.cxx:420
 AliMultiplicity.cxx:421
 AliMultiplicity.cxx:422
 AliMultiplicity.cxx:423
 AliMultiplicity.cxx:424
 AliMultiplicity.cxx:425
 AliMultiplicity.cxx:426
 AliMultiplicity.cxx:427
 AliMultiplicity.cxx:428
 AliMultiplicity.cxx:429
 AliMultiplicity.cxx:430
 AliMultiplicity.cxx:431
 AliMultiplicity.cxx:432
 AliMultiplicity.cxx:433
 AliMultiplicity.cxx:434
 AliMultiplicity.cxx:435
 AliMultiplicity.cxx:436
 AliMultiplicity.cxx:437
 AliMultiplicity.cxx:438
 AliMultiplicity.cxx:439
 AliMultiplicity.cxx:440
 AliMultiplicity.cxx:441
 AliMultiplicity.cxx:442
 AliMultiplicity.cxx:443
 AliMultiplicity.cxx:444
 AliMultiplicity.cxx:445
 AliMultiplicity.cxx:446
 AliMultiplicity.cxx:447
 AliMultiplicity.cxx:448
 AliMultiplicity.cxx:449
 AliMultiplicity.cxx:450
 AliMultiplicity.cxx:451
 AliMultiplicity.cxx:452
 AliMultiplicity.cxx:453
 AliMultiplicity.cxx:454
 AliMultiplicity.cxx:455
 AliMultiplicity.cxx:456
 AliMultiplicity.cxx:457
 AliMultiplicity.cxx:458
 AliMultiplicity.cxx:459
 AliMultiplicity.cxx:460
 AliMultiplicity.cxx:461
 AliMultiplicity.cxx:462
 AliMultiplicity.cxx:463
 AliMultiplicity.cxx:464
 AliMultiplicity.cxx:465
 AliMultiplicity.cxx:466
 AliMultiplicity.cxx:467
 AliMultiplicity.cxx:468
 AliMultiplicity.cxx:469
 AliMultiplicity.cxx:470
 AliMultiplicity.cxx:471
 AliMultiplicity.cxx:472
 AliMultiplicity.cxx:473
 AliMultiplicity.cxx:474
 AliMultiplicity.cxx:475
 AliMultiplicity.cxx:476
 AliMultiplicity.cxx:477
 AliMultiplicity.cxx:478
 AliMultiplicity.cxx:479
 AliMultiplicity.cxx:480
 AliMultiplicity.cxx:481
 AliMultiplicity.cxx:482
 AliMultiplicity.cxx:483
 AliMultiplicity.cxx:484
 AliMultiplicity.cxx:485
 AliMultiplicity.cxx:486
 AliMultiplicity.cxx:487
 AliMultiplicity.cxx:488
 AliMultiplicity.cxx:489
 AliMultiplicity.cxx:490
 AliMultiplicity.cxx:491
 AliMultiplicity.cxx:492
 AliMultiplicity.cxx:493
 AliMultiplicity.cxx:494
 AliMultiplicity.cxx:495
 AliMultiplicity.cxx:496
 AliMultiplicity.cxx:497
 AliMultiplicity.cxx:498
 AliMultiplicity.cxx:499
 AliMultiplicity.cxx:500
 AliMultiplicity.cxx:501
 AliMultiplicity.cxx:502
 AliMultiplicity.cxx:503
 AliMultiplicity.cxx:504
 AliMultiplicity.cxx:505
 AliMultiplicity.cxx:506
 AliMultiplicity.cxx:507
 AliMultiplicity.cxx:508
 AliMultiplicity.cxx:509
 AliMultiplicity.cxx:510
 AliMultiplicity.cxx:511
 AliMultiplicity.cxx:512
 AliMultiplicity.cxx:513
 AliMultiplicity.cxx:514
 AliMultiplicity.cxx:515
 AliMultiplicity.cxx:516
 AliMultiplicity.cxx:517
 AliMultiplicity.cxx:518
 AliMultiplicity.cxx:519
 AliMultiplicity.cxx:520
 AliMultiplicity.cxx:521
 AliMultiplicity.cxx:522
 AliMultiplicity.cxx:523
 AliMultiplicity.cxx:524
 AliMultiplicity.cxx:525
 AliMultiplicity.cxx:526
 AliMultiplicity.cxx:527
 AliMultiplicity.cxx:528
 AliMultiplicity.cxx:529
 AliMultiplicity.cxx:530
 AliMultiplicity.cxx:531
 AliMultiplicity.cxx:532
 AliMultiplicity.cxx:533
 AliMultiplicity.cxx:534
 AliMultiplicity.cxx:535
 AliMultiplicity.cxx:536
 AliMultiplicity.cxx:537
 AliMultiplicity.cxx:538
 AliMultiplicity.cxx:539
 AliMultiplicity.cxx:540
 AliMultiplicity.cxx:541
 AliMultiplicity.cxx:542
 AliMultiplicity.cxx:543
 AliMultiplicity.cxx:544
 AliMultiplicity.cxx:545
 AliMultiplicity.cxx:546
 AliMultiplicity.cxx:547
 AliMultiplicity.cxx:548
 AliMultiplicity.cxx:549
 AliMultiplicity.cxx:550
 AliMultiplicity.cxx:551
 AliMultiplicity.cxx:552
 AliMultiplicity.cxx:553
 AliMultiplicity.cxx:554
 AliMultiplicity.cxx:555
 AliMultiplicity.cxx:556
 AliMultiplicity.cxx:557
 AliMultiplicity.cxx:558
 AliMultiplicity.cxx:559
 AliMultiplicity.cxx:560
 AliMultiplicity.cxx:561
 AliMultiplicity.cxx:562
 AliMultiplicity.cxx:563
 AliMultiplicity.cxx:564
 AliMultiplicity.cxx:565
 AliMultiplicity.cxx:566
 AliMultiplicity.cxx:567
 AliMultiplicity.cxx:568
 AliMultiplicity.cxx:569
 AliMultiplicity.cxx:570
 AliMultiplicity.cxx:571
 AliMultiplicity.cxx:572
 AliMultiplicity.cxx:573
 AliMultiplicity.cxx:574
 AliMultiplicity.cxx:575
 AliMultiplicity.cxx:576
 AliMultiplicity.cxx:577
 AliMultiplicity.cxx:578
 AliMultiplicity.cxx:579
 AliMultiplicity.cxx:580
 AliMultiplicity.cxx:581
 AliMultiplicity.cxx:582
 AliMultiplicity.cxx:583
 AliMultiplicity.cxx:584
 AliMultiplicity.cxx:585
 AliMultiplicity.cxx:586
 AliMultiplicity.cxx:587
 AliMultiplicity.cxx:588
 AliMultiplicity.cxx:589
 AliMultiplicity.cxx:590
 AliMultiplicity.cxx:591
 AliMultiplicity.cxx:592
 AliMultiplicity.cxx:593
 AliMultiplicity.cxx:594
 AliMultiplicity.cxx:595
 AliMultiplicity.cxx:596
 AliMultiplicity.cxx:597
 AliMultiplicity.cxx:598
 AliMultiplicity.cxx:599
 AliMultiplicity.cxx:600
 AliMultiplicity.cxx:601
 AliMultiplicity.cxx:602
 AliMultiplicity.cxx:603
 AliMultiplicity.cxx:604
 AliMultiplicity.cxx:605
 AliMultiplicity.cxx:606
 AliMultiplicity.cxx:607
 AliMultiplicity.cxx:608
 AliMultiplicity.cxx:609
 AliMultiplicity.cxx:610
 AliMultiplicity.cxx:611
 AliMultiplicity.cxx:612
 AliMultiplicity.cxx:613
 AliMultiplicity.cxx:614
 AliMultiplicity.cxx:615
 AliMultiplicity.cxx:616
 AliMultiplicity.cxx:617
 AliMultiplicity.cxx:618
 AliMultiplicity.cxx:619
 AliMultiplicity.cxx:620
 AliMultiplicity.cxx:621
 AliMultiplicity.cxx:622
 AliMultiplicity.cxx:623
 AliMultiplicity.cxx:624
 AliMultiplicity.cxx:625
 AliMultiplicity.cxx:626
 AliMultiplicity.cxx:627
 AliMultiplicity.cxx:628
 AliMultiplicity.cxx:629
 AliMultiplicity.cxx:630
 AliMultiplicity.cxx:631
 AliMultiplicity.cxx:632
 AliMultiplicity.cxx:633
 AliMultiplicity.cxx:634
 AliMultiplicity.cxx:635
 AliMultiplicity.cxx:636
 AliMultiplicity.cxx:637
 AliMultiplicity.cxx:638
 AliMultiplicity.cxx:639
 AliMultiplicity.cxx:640
 AliMultiplicity.cxx:641
 AliMultiplicity.cxx:642