Another fix of combined mult. estimate from Anton
authorshahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 21 Nov 2013 11:51:38 +0000 (11:51 +0000)
committershahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 21 Nov 2013 11:51:38 +0000 (11:51 +0000)
ANALYSIS/AliESDtrackCuts.cxx

index 39fbded..8ef040d 100644 (file)
@@ -2322,54 +2322,54 @@ Int_t AliESDtrackCuts::GetReferenceMultiplicity(const AliESDEvent* esd, MultEstT
   //*******************************************************************************************************
   // 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
     }
   }