Label for the ITS tracklets (Jan Fiete)
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 31 Mar 2008 09:29:19 +0000 (09:29 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 31 Mar 2008 09:29:19 +0000 (09:29 +0000)
ANALYSIS/AliAnalysisTaskESDfilter.cxx
ITS/AliITSMultReconstructor.cxx
ITS/AliITSVertexer.cxx
STEER/AliAODTracklets.cxx
STEER/AliAODTracklets.h
STEER/AliMultiplicity.cxx
STEER/AliMultiplicity.h

index 39ee74f..34c1100 100644 (file)
@@ -877,7 +877,7 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
        SPDTracklets.CreateContainer(mult->GetNumberOfTracklets());
 
        for (Int_t n=0; n<mult->GetNumberOfTracklets(); n++) {
-         SPDTracklets.SetTracklet(n, mult->GetTheta(n), mult->GetPhi(n), mult->GetDeltaPhi(n), mult->GetLabel(n));
+         SPDTracklets.SetTracklet(n, mult->GetTheta(n), mult->GetPhi(n), mult->GetDeltaPhi(n), mult->GetLabel(n, 0), mult->GetLabel(n, 1));
        }
       }
     } else {
index e903078..bef5d28 100644 (file)
@@ -111,7 +111,7 @@ fhphiClustersLay1(0){
   for(Int_t i=0; i<300000; i++) {
     fClustersLay1[i]       = new Float_t[6];
     fClustersLay2[i]       = new Float_t[6];
-    fTracklets[i]          = new Float_t[4];
+    fTracklets[i]          = new Float_t[5];
     fSClusters[i]           = new Float_t[2];
     fAssociationFlag[i]    = kFALSE;
   }
@@ -365,6 +365,8 @@ AliITSMultReconstructor::Reconstruct(TTree* clusterTree, Float_t* vtx, Float_t*
       fTracklets[fNTracklets][2] = fClustersLay1[iC1][1] - fClustersLay2[iC2WithBestDist][1];
 
       // find label
+      // if equal label in both clusters found this label is assigned
+      // if no equal label can be found the first labels of the L1 AND L2 cluster are assigned
       Int_t label1 = 0;
       Int_t label2 = 0;
       while (label2 < 3)
@@ -383,11 +385,13 @@ AliITSMultReconstructor::Reconstruct(TTree* clusterTree, Float_t* vtx, Float_t*
       {
         AliDebug(AliLog::kDebug, Form("Found label %d == %d for tracklet candidate %d\n", (Int_t) fClustersLay1[iC1][3+label1], (Int_t) fClustersLay2[iC2WithBestDist][3+label2], fNTracklets));
         fTracklets[fNTracklets][3] = fClustersLay1[iC1][3+label1];
+        fTracklets[fNTracklets][4] = fClustersLay2[iC2WithBestDist][3+label2];
       }
       else
       {
         AliDebug(AliLog::kDebug, Form("Did not find label %d %d %d %d %d %d for tracklet candidate %d\n", (Int_t) fClustersLay1[iC1][3], (Int_t) fClustersLay1[iC1][4], (Int_t) fClustersLay1[iC1][5], (Int_t) fClustersLay2[iC2WithBestDist][3], (Int_t) fClustersLay2[iC2WithBestDist][4], (Int_t) fClustersLay2[iC2WithBestDist][5], fNTracklets));
-        fTracklets[fNTracklets][3] = -2;
+        fTracklets[fNTracklets][3] = fClustersLay1[iC1][3];
+        fTracklets[fNTracklets][4] = fClustersLay2[iC2WithBestDist][3];
       }
 
       if (fHistOn) {
index 724e1a4..9c60a1f 100644 (file)
@@ -115,11 +115,13 @@ void AliITSVertexer::FindMultiplicity(Int_t evnumber){
   Float_t *phi = new Float_t [notracks];
   Float_t *dphi = new Float_t [notracks];
   Int_t *labels = new Int_t[notracks];
+  Int_t *labelsL2 = new Int_t[notracks];
   for(Int_t i=0;i<multReco->GetNTracklets();i++){
     tht[i] = multReco->GetTracklet(i)[0];
     phi[i] =  multReco->GetTracklet(i)[1];
     dphi[i] = multReco->GetTracklet(i)[2];
     labels[i] = static_cast<Int_t>(multReco->GetTracklet(i)[3]);
+    labelsL2[i] = static_cast<Int_t>(multReco->GetTracklet(i)[4]);
   }
   Int_t nosingleclus=multReco->GetNSingleClusters();
   Float_t *ths = new Float_t [nosingleclus];
@@ -128,13 +130,14 @@ void AliITSVertexer::FindMultiplicity(Int_t evnumber){
     ths[i] = multReco->GetCluster(i)[0];
     phs[i] =  multReco->GetCluster(i)[1];
   }
-  fMult = new AliMultiplicity(notracks,tht,phi,dphi,labels,nosingleclus,ths,phs);
+  fMult = new AliMultiplicity(notracks,tht,phi,dphi,labels,labelsL2,nosingleclus,ths,phs);
   delete [] tht;
   delete [] phi;
   delete [] dphi;
   delete [] ths;
   delete [] phs;
   delete [] labels;
+  delete [] labelsL2;
   itsLoader->UnloadRecPoints();
   delete multReco;
   return;
index c5d3bc1..e9a89e4 100644 (file)
 
 ClassImp(AliAODTracklets)
 
-AliAODTracklets::AliAODTracklets() : TNamed(), fNTracks(0), fTheta(0), fPhi(0), fDeltaPhi(0), fLabels(0)
+AliAODTracklets::AliAODTracklets() : TNamed(), fNTracks(0), fTheta(0), fPhi(0), fDeltaPhi(0), fLabels(0), fLabelsL2(0)
 {
   // default constructor
 }
 
-AliAODTracklets::AliAODTracklets(const char* name, const char* title) : TNamed(name, title), fNTracks(0), fTheta(0), fPhi(0), fDeltaPhi(0), fLabels(0)
+AliAODTracklets::AliAODTracklets(const char* name, const char* title) : TNamed(name, title), fNTracks(0), fTheta(0), fPhi(0), fDeltaPhi(0), fLabels(0), fLabelsL2(0)
 {
   // TNamed constructor
 }
@@ -41,18 +41,21 @@ AliAODTracklets::AliAODTracklets(const AliAODTracklets& tracklet) :
     fTheta(0),
     fPhi(0),
     fDeltaPhi(0),
-    fLabels(0)
+    fLabels(0), 
+    fLabelsL2(0)
 {
 // Copy constructor
     fTheta = new Double32_t[fNTracks];
     fPhi = new Double32_t[fNTracks];
     fDeltaPhi = new Double32_t[fNTracks];
     fLabels = new Int_t[fNTracks];
+    fLabelsL2 = new Int_t[fNTracks];
     for (Int_t i = 0; i < fNTracks; i++) {
        fTheta[i]    = tracklet.fTheta[i];
        fPhi[i]      = tracklet.fPhi[i];
        fDeltaPhi[i] = tracklet.fDeltaPhi[i];
        fLabels[i]   = tracklet.fLabels[i];
+       fLabelsL2[i]   = tracklet.fLabelsL2[i];
     }
 }
 
@@ -67,6 +70,7 @@ AliAODTracklets& AliAODTracklets::operator=(const AliAODTracklets& tracklet)
        fPhi[i]      = tracklet.fPhi[i];
        fDeltaPhi[i] = tracklet.fDeltaPhi[i];
        fLabels[i]   = tracklet.fLabels[i];
+       fLabelsL2[i]   = tracklet.fLabelsL2[i];
     }
     return *this;
 }
@@ -88,6 +92,7 @@ void AliAODTracklets::CreateContainer(Int_t nTracks)
   fPhi = new Double32_t[fNTracks];
   fDeltaPhi = new Double32_t[fNTracks];
   fLabels = new Int_t[fNTracks];
+  fLabelsL2 = new Int_t[fNTracks];
 }
 
 
@@ -126,10 +131,16 @@ void AliAODTracklets::DeleteContainer()
     fLabels = 0;
   }
 
+  if (fLabelsL2)
+  {
+    delete[] fLabelsL2;
+    fLabelsL2 = 0;
+  }
+
   fNTracks = 0;
 }
 
-Bool_t AliAODTracklets::SetTracklet(Int_t pos, Double32_t theta, Double32_t phi, Double32_t deltaPhi, Int_t label)
+Bool_t AliAODTracklets::SetTracklet(Int_t pos, Double32_t theta, Double32_t phi, Double32_t deltaPhi, Int_t labelL1, Int_t labelL2)
 {
   // Sets a tracklet at the given position
 
@@ -139,7 +150,9 @@ Bool_t AliAODTracklets::SetTracklet(Int_t pos, Double32_t theta, Double32_t phi,
   fTheta[pos] = theta;
   fPhi[pos] = phi;
   fDeltaPhi[pos] = deltaPhi;
-  fLabels[pos] = label;
+  fLabels[pos] = labelL1;
+  fLabelsL2[pos] = labelL2;
 
   return kTRUE;
 }
+
index db98812..4ad5068 100644 (file)
@@ -27,23 +27,24 @@ class AliAODTracklets : public TNamed
   void CreateContainer(Int_t nTracks);
   void DeleteContainer();
 
-  Bool_t SetTracklet(Int_t pos, Double32_t theta, Double32_t phi, Double32_t deltaPhi, Int_t label);
+  Bool_t SetTracklet(Int_t pos, Double32_t theta, Double32_t phi, Double32_t deltaPhi, Int_t labelL1, Int_t labelL2);
 
   Int_t GetNumberOfTracklets() const { return fNTracks; }
   inline Double32_t GetTheta(Int_t i) const;
   inline Double32_t GetPhi(Int_t i) const;
   inline Double32_t GetDeltaPhi(Int_t i) const;
-  inline Int_t   GetLabel(Int_t i) const;
+  inline Int_t   GetLabel(Int_t i, Int_t layer) const;
 
  protected:
   Int_t      fNTracks;       // Number of tracklets
   Double32_t *fTheta;        //[fNTracks] array with theta values
   Double32_t *fPhi;          //[fNTracks] array with phi values
   Double32_t *fDeltaPhi;     //[fNTracks] array with delta phi values
-  Int_t      *fLabels;       //[fNTracks] array with labels of tracklets
+  Int_t      *fLabels;       //[fNTracks] array with labels of cluster in L1 used for the tracklet
+  Int_t      *fLabelsL2;     //[fNTracks] array with labels of cluster in L2 used for the tracklet
 
 
-  ClassDef(AliAODTracklets, 2);
+  ClassDef(AliAODTracklets, 3);
 };
 
 Double32_t AliAODTracklets::GetTheta(Int_t i) const 
@@ -76,11 +77,11 @@ Double32_t AliAODTracklets::GetDeltaPhi(Int_t i) const
     Error("GetDeltaPhi","Invalid track number %d",i); return -9999.;
 }
 
-Int_t AliAODTracklets::GetLabel(Int_t i) const 
+Int_t AliAODTracklets::GetLabel(Int_t i, Int_t layer) const 
 {
   if (i>=0 && i<fNTracks) 
   {
-    return fLabels[i];
+    return (layer == 0) ? fLabels[i] : fLabelsL2[i];
   }
   else 
     Error("GetLabel","Invalid track number %d",i); return -9999;
index df50864..960968a 100644 (file)
@@ -9,6 +9,7 @@ AliMultiplicity::AliMultiplicity():
   fNtracks(0),
   fNsingle(0),
   fLabels(0),
+  fLabelsL2(0),
   fTh(0),
   fPhi(0),
   fDeltPhi(0),
@@ -21,11 +22,12 @@ AliMultiplicity::AliMultiplicity():
 }
 
 //______________________________________________________________________
-AliMultiplicity::AliMultiplicity(Int_t ntr, Float_t *t,  Float_t *ph, Float_t *df, Int_t *labels, Int_t ns, Float_t *ts, Float_t *ps):
+AliMultiplicity::AliMultiplicity(Int_t ntr, Float_t *t,  Float_t *ph, Float_t *df, Int_t *labels, Int_t* labelsL2, Int_t ns, Float_t *ts, Float_t *ps):
   TObject(),
   fNtracks(ntr),
   fNsingle(ns),
   fLabels(0),
+  fLabelsL2(0),
   fTh(0),
   fPhi(0),
   fDeltPhi(0),
@@ -35,6 +37,7 @@ AliMultiplicity::AliMultiplicity(Int_t ntr, Float_t *t,  Float_t *ph, Float_t *d
 // Standard constructor
   if(ntr>0){
     fLabels = new Int_t[ntr];
+    fLabelsL2 = new Int_t[ntr];
     fTh = new Double_t [ntr];
     fPhi = new Double_t [ntr];
     fDeltPhi = new Double_t [ntr];
@@ -43,6 +46,7 @@ AliMultiplicity::AliMultiplicity(Int_t ntr, Float_t *t,  Float_t *ph, Float_t *d
       fPhi[i]=ph[i];
       fDeltPhi[i]=df[i];
       fLabels[i] = labels[i];
+      fLabelsL2[i] = labelsL2[i];
     }
   }
   if(ns>0){
@@ -63,6 +67,7 @@ AliMultiplicity::AliMultiplicity(const AliMultiplicity& m):
   fNtracks(m.fNtracks),
   fNsingle(m.fNsingle),
   fLabels(0),
+  fLabelsL2(0),
   fTh(0),
   fPhi(0),
   fDeltPhi(0),
@@ -83,6 +88,7 @@ AliMultiplicity &AliMultiplicity::operator=(const AliMultiplicity& m){
   if(fPhi)delete [] fPhi;fPhi = 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;
   Duplicate(m);
@@ -99,12 +105,14 @@ void AliMultiplicity::Duplicate(const AliMultiplicity& m){
     fPhi = new Double_t[fNtracks];
     fDeltPhi = new Double_t[fNtracks];
     fLabels = new Int_t[fNtracks];
+    fLabelsL2 = new Int_t[fNtracks];
   }
   else {
     fTh = 0;
     fPhi = 0;
     fDeltPhi = 0;
     fLabels = 0;
+    fLabelsL2 = 0;
   }
   fNsingle = m.fNsingle;
   if(fNsingle>0){
@@ -119,6 +127,7 @@ void AliMultiplicity::Duplicate(const AliMultiplicity& m){
   if(m.fPhi)memcpy(fPhi,m.fPhi,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(m.fThsingle)memcpy(fThsingle,m.fThsingle,fNsingle*sizeof(Double_t));
   if(m.fPhisingle)memcpy(fPhisingle,m.fPhisingle,fNsingle*sizeof(Double_t));
 
@@ -133,6 +142,7 @@ AliMultiplicity::~AliMultiplicity(){
   if(fPhi)delete [] fPhi;fPhi = 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;
 
index 952c650..1959ae3 100644 (file)
@@ -16,7 +16,7 @@ class AliMultiplicity : public TObject {
   AliMultiplicity();               // default constructor
   // standard constructor
   AliMultiplicity(Int_t ntr,Float_t *t, Float_t *ph, Float_t *df, Int_t *labels,
-                  Int_t ns, Float_t *ts, Float_t *ps);
+                  Int_t* labelsL2, Int_t ns, Float_t *ts, Float_t *ps);
   AliMultiplicity(const AliMultiplicity& m);
   AliMultiplicity& operator=(const AliMultiplicity& m);
   virtual ~AliMultiplicity();
@@ -30,7 +30,7 @@ class AliMultiplicity : public TObject {
   else {Error("GetPhi","Invalid track number %d",i); return -9999.;}}
   Double_t GetDeltaPhi(Int_t i) const {if(i>=0 && i<fNtracks) {return fDeltPhi[i];}
   else {Error("GetDeltaPhi","Invalid track number %d",i); return -9999.;}}
-  Int_t GetLabel(Int_t i) const {if(i>=0 && i<fNtracks) {return fLabels[i];}
+  Int_t GetLabel(Int_t i, Int_t layer) const {if(i>=0 && i<fNtracks) {return (layer == 0) ? fLabels[i] : fLabelsL2[i];}
   else {Error("GetLabel","Invalid track number %d",i); return -9999;}}
 // methods to access single cluster information
   Int_t GetNumberOfSingleClusters() const {return fNsingle;}
@@ -47,8 +47,9 @@ class AliMultiplicity : public TObject {
 
   Int_t fNtracks;            // Number of tracklets
   Int_t fNsingle;            // Number of clusters on SPD layer 1, not associated
-  Int_t *fLabels;            //[fNtracks] array with labels of tracklets
                              // with a tracklet on SPD layer 2
+  Int_t *fLabels;            //[fNtracks] array with labels of cluster in L1 used for tracklet
+  Int_t *fLabelsL2;          //[fNtracks] array with labels of cluster in L2 used for tracklet
   Double32_t *fTh;           //[fNtracks] array with theta values
   Double32_t *fPhi;          //[fNtracks] array with phi values
   Double32_t *fDeltPhi;      //[fNtracks] array with delta phi values
@@ -56,7 +57,7 @@ class AliMultiplicity : public TObject {
   Double32_t *fPhisingle;    //[fNsingle] array with phi values of L2 clusters
   Short_t fFiredChips[2]; // number of fired chips in the two SPD layers
 
-  ClassDef(AliMultiplicity,6);
+  ClassDef(AliMultiplicity,7);
 };
 
 #endif