//*******************************************************************************************************
// get multiplicity from ITS tracklets to complement TPC+ITS, and ITSpureSA
const AliMultiplicity* spdmult = esd->GetMultiplicity(); // spd multiplicity object
- for (Int_t i=0; i<spdmult->GetNumberOfTracklets(); ++i) {
- if (TMath::Abs(spdmult->GetEta(i)) > etaRange) continue; // eta selection for tracklets
+ for (Int_t iTracklet=0; iTracklet<spdmult->GetNumberOfTracklets(); ++iTracklet) {
+ if (TMath::Abs(spdmult->GetEta(iTracklet)) > etaRange) continue; // eta selection for tracklets
// if counting tracks+tracklets, check if clusters were already used in tracks
- Int_t id1,id2,id3,id4;
- spdmult->GetTrackletTrackIDs(i,0,id1,id2); // references for eventual Global/ITS_SA tracks
- AliESDtrack* tr1 = id1>=0 ? esd->GetTrack(id1) : 0;
- spdmult->GetTrackletTrackIDs(i,1,id3,id4); // references for eventual ITS_SA_pure tracks
- AliESDtrack* tr3 = id3>=0 ? esd->GetTrack(id3) : 0;
-
+ Int_t id1, id2, id3, id4;
+ spdmult->GetTrackletTrackIDs ( iTracklet, 0, id1, id2 ); // references for eventual Global/ITS_SA tracks
+ spdmult->GetTrackletTrackIDs ( iTracklet, 1, id3, id4 ); // references for eventual ITS_SA_pure tracks
+
// are both clusters from the same tracks? If not, skip the tracklet (shouldn't change things much)
- if ((id1!=id2 && id1>=0 && id2>=0) || (id3!=id4 && id3>=0 && id4>=0)) continue;
-
- Bool_t bUsedInGlobal = 0;
- if (id1 != -1) bUsedInGlobal = globalBits.TestBitNumber(id1);
- else if (id2 != -1) bUsedInGlobal = globalBits.TestBitNumber(id2);
- //
- // has associated global track been associated to a previous tracklet?
- Bool_t bUsedInPureITS = 0;
- if (id3 != -1) bUsedInPureITS = pureITSBits.TestBitNumber(id3);
- else if (id4 != -1) bUsedInPureITS = pureITSBits.TestBitNumber(id4);
+ if ( ( id1 != id2 && id1 >= 0 && id2 >= 0 ) || ( id3 != id4 && id3 >= 0 && id4 >= 0 ) ) continue;
+
+ //referenced track
+ //at this point we either have id1 = id2 (id3 = id4) or only one of the ids pair is -1
+ // id1>=0, id2>=0, id1=id2 : tracklet has associated track
+ // id1>=0, id2 = -1 : 1st layer cluster has associated track
+ // id1=-1, id2>=0 : 2nd layer cluster has associated track
+ // id1=-1, id2=-1 : tracklet has no associated track
+
+ Int_t bUsedInGlobal(-1);
+ if ( id1 != -1 ) bUsedInGlobal = globalBits.TestBitNumber(id1);
+ else if ( id2 != -1) bUsedInGlobal = globalBits.TestBitNumber(id2);// has associated global track been associated to a previous tracklet?
+ Int_t bUsedInPureITS(-1);
+ if ( id3 != -1 ) bUsedInPureITS = pureITSBits.TestBitNumber(id3);
+ else if ( id4 != -1) bUsedInPureITS = pureITSBits.TestBitNumber(id4); // has associated pure ITS track been associated to a previous tracklet?
+
+ AliESDtrack* tr_global = bUsedInGlobal >= 0 ? esd->GetTrack ( bUsedInGlobal ) : 0;
+ AliESDtrack* tr_itssa = bUsedInPureITS >= 0 ? esd->GetTrack ( bUsedInPureITS ) : 0;
//
// has associated pure ITS track been associated to a previous tracklet?
//*******************************************************************************************************
if (trackType == kTrackletsITSTPC) {
- // count tracklets towards global+complementary tracks
- if ( (tr1 && !tr1->TestBit(kSecBit)) && // reject as secondary
- (tr1 && tr1->TestBit(kRejBit)) ) { // count tracklet as bad quality track
- if(!bUsedInGlobal){
- ++trackletsITSTPC_complementary;
- if(id1>=0) globalBits.SetBitNumber(id1); // mark global track linked to this tracklet as "associated"
- }
- }
- else if(!bUsedInGlobal) {
- ++trackletsITSTPC_complementary; // if no associated track, count the tracklet
- }
+ //*******************************************************************************************************
+ // count tracklets towards global+complimentary tracks
+ if ( ( tr_global && !tr_global->TestBit ( kSecBit ) ) && ( tr_global && tr_global->TestBit ( kRejBit ) ) ) { // count tracklet as bad quality track
+ globalBits.SetBitNumber( bUsedInGlobal ); // mark global track linked to this tracklet as used
+ ++trackletsITSTPC_complementary;
+ }
+
+ if ( bUsedInGlobal < 0 ) ++trackletsITSTPC_complementary; //no associated track, just count the tracklet
} else {
- // count tracklets towards ITS_SA_pure tracks
- if ( (tr3 && !tr3->TestBit(kSecBit)) && // reject as secondary
- (tr3 && tr3->TestBit(kRejBit)) ) { // count tracklet as bad quality track
- if(!bUsedInPureITS) {
- ++trackletsITSSA_complementary;
- if(id3>=0) pureITSBits.SetBitNumber(id3); // mark global track linked to this tracklet as "associated"
- }
- }
- else if (bUsedInPureITS) {
- ++trackletsITSSA_complementary; // if no associated track, count the tracklet
- }
+ //*******************************************************************************************************
+ // count tracklets towards ITS_SA_pure tracks
+ if ( ( tr_itssa && !tr_itssa->TestBit ( kSecBit ) ) && ( tr_itssa && tr_itssa->TestBit ( kRejBit ) ) ) { // count tracklet as bad quality track
+ pureITSBits.SetBitNumber( bUsedInPureITS ); // mark ITS pure SA track linked to this tracklet as used
+ ++trackletsITSSA_complementary;
+ }
+
+ if ( bUsedInPureITS < 0 ) ++trackletsITSSA_complementary; //no associated track, just count the tracklet
}
}