+//______________________________________________________________________
+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 (!fUsedClusT || mode<0 || mode>1 || i<0 || i>fNtracks) return kFALSE;
+ const ULong64_t kMask0 = 0x0000ffff0000ffff;
+ const ULong64_t kMask1 = 0xffff0000ffff0000;
+ 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)]
+ if (!fUsedClusT || mode<0 || mode>1 || i<0 || i>fNtracks) {spd1 = spd2 = -1; return kFALSE;}
+ spd1 = (fUsedClusT[i]&0xffffffff);
+ 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);
+}
+
+//______________________________________________________________________
+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 (!fUsedClusS || mode<0 || mode>1 || i<0 || i>fNsingle) 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
+ //
+ // note: stored value: [(idSAPure+1)<<16+(idTPCITS/SA+1)]
+ if (!fUsedClusS || mode<0 || mode>1 || i<0 || i>fNsingle) {tr = -1; return kFALSE;}
+ tr = fUsedClusS[i];
+ if (mode) tr >>= 16;
+ else tr &= 0xffff;
+ return (--tr)>=0; // we are storing id+1
+}
+