photon trackid assignment is corrected
authorbasanta <basanta@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 13 Jan 2010 16:32:42 +0000 (16:32 +0000)
committerbasanta <basanta@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 13 Jan 2010 16:32:42 +0000 (16:32 +0000)
PMD/AliPMDtracker.cxx

index d91d84e..dc1a060 100644 (file)
@@ -332,20 +332,32 @@ void AliPMDtracker::AssignTrPidToCluster(Int_t nentry, Int_t *itra,
   // split cluster part will be done at the time of calculating eff/pur
 
   Int_t *phentry = new Int_t [nentry];
+  Int_t *hadentry = new Int_t [nentry];
   Int_t *trenergy = 0x0;
+  Int_t *trpid    = 0x0;
   Int_t *sortcoord = 0x0;
 
   Int_t ngtrack = 0;
+  Int_t nhtrack = 0;
   for (Int_t i = 0; i < nentry; i++)
     {
       phentry[i] = -1;
+      hadentry[i] = -1;
+
       if (ipid[i] == 22)
        {
          phentry[ngtrack] = i;
          ngtrack++;
        }
+      else if (ipid[i] != 22)
+       {
+         hadentry[nhtrack] = i;
+         nhtrack++;
+       }
     }
   
+  Int_t nghadtrack = ngtrack + nhtrack;
+
   if (ngtrack == 0)
     {
       // hadron track
@@ -353,42 +365,62 @@ void AliPMDtracker::AssignTrPidToCluster(Int_t nentry, Int_t *itra,
       trackpid = 8;
       trackno  = -1;
     }
-  else if (ngtrack == 1)
-    {
-      // only one photon track
-      // track number set to photon track
-      trackpid = 1;
-      trackno  = itra[phentry[0]];
-    }
-  else if (ngtrack > 1)
+  else if (ngtrack >= 1)
     {
-      // more than one photon track
-      
-      trenergy  = new Int_t [ngtrack];
-      sortcoord = new Int_t [ngtrack];
+      // one or more than one photon track + charged track
+      // find out which track deposits maximum energy and
+      // assign that track number and track pid
+
+      trenergy  = new Int_t [nghadtrack];
+      trpid     = new Int_t [nghadtrack];
+      sortcoord = new Int_t [nghadtrack];
       for (Int_t i = 0; i < ngtrack; i++)
        {
          trenergy[i] = 0.;
+         trpid[i]    = -1;
          for (Int_t j = 0; j < nentry; j++)
            {
              if (ipid[j] == 22 && itra[j] == itra[phentry[i]])
                {
                  trenergy[i] += cadc[j];
+                 trpid[i]     = 22;
+               }
+           }
+       }
+      for (Int_t i = ngtrack; i < nghadtrack; i++)
+       {
+         trenergy[i] = 0.;
+         trpid[i]    = -1;
+         for (Int_t j = 0; j < nentry; j++)
+           {
+             if (ipid[j] != 22 && itra[j] == itra[hadentry[i-ngtrack]])
+               {
+                 trenergy[i] += cadc[j];
+                 trpid[i]     = ipid[j];
                }
            }
        }
       
       Bool_t jsort = true;
-      TMath::Sort(ngtrack,trenergy,sortcoord,jsort);
+      TMath::Sort(nghadtrack,trenergy,sortcoord,jsort);
       
       Int_t gtr = sortcoord[0];   
-      trackno  = itra[phentry[gtr]];   // highest adc track
-      trackpid = 1;
+      if (trpid[gtr] == 22)
+       {
+         trackpid = 22;
+         trackno  = itra[phentry[gtr]];   // highest adc track
+       }
+      else
+       {
+         trackpid = 8;
+         trackno = -1;
+       }
       
       delete [] trenergy;
+      delete [] trpid;
       delete [] sortcoord;
       
-    }   // end of ngtrack > 1
+    }   // end of ngtrack >= 1
   
 }
 //--------------------------------------------------------------------//