MC labeling added
authorshahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 24 Jan 2013 00:19:20 +0000 (00:19 +0000)
committershahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 24 Jan 2013 00:19:20 +0000 (00:19 +0000)
ITS/UPGRADE/AliITSUTrackHyp.cxx
ITS/UPGRADE/AliITSUTrackHyp.h
ITS/UPGRADE/AliITSUTrackerGlo.cxx
ITS/UPGRADE/AliITSUTrackerGlo.h

index b8d3de5..a95f4dc 100644 (file)
@@ -1,6 +1,7 @@
 #include "AliITSUTrackHyp.h"
 #include "AliESDtrack.h"
 #include "AliCluster.h"
+#include "AliITSUAux.h"
 
 ClassImp(AliITSUTrackHyp)
 
@@ -9,6 +10,7 @@ ClassImp(AliITSUTrackHyp)
 //__________________________________________________________________
 AliITSUTrackHyp::AliITSUTrackHyp(Int_t nlr) 
 : fNLayers(nlr)
+  ,fITSLabel(0)
   ,fESDTrack(0)
   ,fLayerSeeds(0)
 {
@@ -134,4 +136,3 @@ void AliITSUTrackHyp::FetchClusterInfo(Int_t *clIDarr) const
     seed = (AliITSUSeed*)seed->GetParent();
   }
 }
-
index fd0036c..66dc815 100644 (file)
@@ -23,10 +23,12 @@ class AliITSUTrackHyp: public AliKalmanTrack
   AliITSUSeed*       GetSeed(Int_t lr, Int_t id) const {return (AliITSUSeed*)fLayerSeeds[lr].UncheckedAt(id);}
   AliITSUSeed*       GetWinner()         const;
   AliESDtrack*       GetESDTrack()       const {return fESDTrack;}
+  Int_t              GetITSLabel()       const {return fITSLabel;}
   void               DefineWinner(Int_t lr=0, Int_t id=0);
   const TObjArray*   GetLayerSeeds(Int_t lr) const {return lr<fNLayers ? &fLayerSeeds[lr] : 0;}
   void               AddSeed(AliITSUSeed* seed, Int_t lr);
   void               SetESDTrack(AliESDtrack* esdtr) {fESDTrack = esdtr;}
+  void               SetITSLabel(Int_t lb)    {fITSLabel=lb;}
   void               FetchClusterInfo(Int_t* clIDarr) const;
   //
   void               SetChi2(Double_t chi2) {fChi2 = chi2;}
@@ -44,6 +46,7 @@ class AliITSUTrackHyp: public AliKalmanTrack
   //
  protected:
   UChar_t          fNLayers;               // number of layers
+  Int_t            fITSLabel;              // ITS MC Label, the global one (wrt TPC) is fLab
   AliESDtrack*     fESDTrack;              // reference esd track
   TObjArray*       fLayerSeeds;            // seeds of given layer
   //
index aa14ff5..ebd66aa 100644 (file)
@@ -886,3 +886,53 @@ Bool_t AliITSUTrackerGlo::RefitTrack(AliITSUTrackHyp* trc, Double_t rDest)
   printf("After refit (now at lr %d): ",lrStart); trc->AliExternalTrackParam::Print();
   return kTRUE;
 }
+
+//__________________________________________________________________
+void AliITSUTrackerGlo::CookMCLabel(AliITSUTrackHyp* hyp) 
+{
+  // build MC label
+  //
+  const int kMaxLbPerCl = 3;
+  int lbID[kMaxLayers*6],lbStat[kMaxLayers*6];
+  Int_t lr,nLab=0,nCl=0;
+  AliITSUSeed *seed = hyp->GetWinner();
+  while(seed) {
+    int clID = seed->GetLrCluster(lr);
+    if (clID>=0) {
+      AliCluster *cl = fITS->GetLayerActive(lr)->GetCluster(clID);
+      nCl++;
+      for (int imc=0;imc<kMaxLbPerCl;imc++) { // labels within single cluster
+       int trLb = cl->GetLabel(imc);
+       if (imc<0) break;
+       // search this mc track in already accounted ones
+       int iLab;
+       for (iLab=0;iLab<nLab;iLab++) if (lbID[iLab]==trLb) break;
+       if (iLab<nLab) lbStat[iLab]++;
+       else {
+         lbID[nLab] = trLb;
+         lbStat[nLab++] = 1;
+       }
+      } // loop over given cluster's labels
+    }
+    seed = (AliITSUSeed*)seed->GetParent();
+  } // loop over clusters
+  // 
+  if (nCl) {
+    int maxLab=0,nTPCok=0;
+    AliESDtrack* esdTr = hyp->GetESDTrack();
+    int tpcLab = esdTr ? Abs(esdTr->GetTPCLabel()) : -kDummyLabel;
+    for (int ilb=nLab;ilb--;) {
+      int st = lbStat[ilb];
+      if (lbStat[maxLab]<st) maxLab=ilb;
+      if (tpcLab==lbID[ilb]) nTPCok += st;
+    }
+    hyp->SetFakeRatio(1.-float(nTPCok)/nCl);
+    hyp->SetLabel( nTPCok==nCl ? tpcLab : -tpcLab);
+    hyp->SetITSLabel( lbStat[maxLab]==nCl ? lbStat[maxLab] : -lbStat[maxLab]); // winner label
+    return;
+  }
+  //
+  hyp->SetFakeRatio(-1.);
+  hyp->SetLabel( kDummyLabel );
+  hyp->SetITSLabel( kDummyLabel );
+}
index b98d280..7112f3b 100644 (file)
@@ -37,7 +37,8 @@ class AliITSUTrackerGlo : public AliTracker {
        ,kRWCheckFailed =2  // failed to rotate the seed to frame of the layer impact point
   };
   enum {kStopSearchOnSensor,kClusterNotMatching,kClusterMatching}; // flags for track-to-cluster checks
-
+  //
+  enum {kDummyLabel=-3141593};
   AliITSUTrackerGlo(AliITSUReconstructor* rec);
   virtual ~AliITSUTrackerGlo();
 
@@ -81,6 +82,7 @@ class AliITSUTrackerGlo : public AliTracker {
   void                   SaveCurrentTrackHypotheses();
   void                   FinalizeHypotheses();
   void                   UpdateESDTrack(AliITSUTrackHyp* hyp);
+  void                   CookMCLabel(AliITSUTrackHyp* hyp);
  //
  protected:
   TObject*&              NextFreeSeed();