Implement option to copy MC label from clusters to cells (for MC productions where...
authorsaiola <salvatore.aiola@cern.ch>
Thu, 4 Dec 2014 20:52:41 +0000 (15:52 -0500)
committersaiola <salvatore.aiola@cern.ch>
Thu, 4 Dec 2014 20:54:08 +0000 (15:54 -0500)
PWG/EMCAL/AliAnalysisTaskEMCALClusterizeFast.cxx
PWG/EMCAL/AliAnalysisTaskEMCALClusterizeFast.h

index 8bb0f2c..afcba18 100644 (file)
@@ -19,7 +19,6 @@
 // Author: Constantin Loizides, Salvatore Aiola
 //         Adapted from analysis class from Deepa Thomas
 //
-// $Id$
 //_________________________________________________________________________
 
 // --- Root ---
@@ -96,6 +95,7 @@ AliAnalysisTaskEMCALClusterizeFast::AliAnalysisTaskEMCALClusterizeFast() :
   fFiducial(kFALSE),
   fDoNonLinearity(kFALSE),
   fRecalDistToBadChannels(kFALSE),
+  fSetCellMCLabelFromCluster(0),
   fCaloCells(0),
   fCaloClusters(0),
   fEsd(0),
@@ -148,6 +148,7 @@ AliAnalysisTaskEMCALClusterizeFast::AliAnalysisTaskEMCALClusterizeFast(const cha
   fFiducial(kFALSE),
   fDoNonLinearity(kFALSE),
   fRecalDistToBadChannels(kFALSE),
+  fSetCellMCLabelFromCluster(0),
   fCaloCells(0),
   fCaloClusters(0),
   fEsd(0),
@@ -345,6 +346,26 @@ void AliAnalysisTaskEMCALClusterizeFast::FillDigitsArray()
   case kFEEDataMCOnly :
   case kFEEDataExcludeMC :
     {
+      // In case of MC productions done before aliroot tag v5-02-Rev09
+      // assing the cluster label to all the cells belonging to this cluster
+      // very rough
+      // Copied and simplified from AliEMCALTenderSupply
+      Int_t cellLabels[12672]={-1};
+      if (fSetCellMCLabelFromCluster) {
+        Int_t nClusters = InputEvent()->GetNumberOfCaloClusters();
+        for (Int_t i = 0; i < nClusters; i++) {
+          AliVCluster *clus =  InputEvent()->GetCaloCluster(i);
+      
+          if (!clus) continue;
+          if (!clus->IsEMCAL()) continue ;
+      
+          Int_t      label = clus->GetLabel();
+          UShort_t * index = clus->GetCellsAbsId() ;
+      
+          for (Int_t icell=0; icell < clus->GetNCells(); icell++) cellLabels[index[icell]] = label;
+        } // cluster loop
+      }
+
       Double_t avgE        = 0; // for background subtraction
       const Int_t ncells   = fCaloCells->GetNumberOfCells();
       for (Int_t icell = 0, idigit = 0; icell < ncells; ++icell) {
@@ -354,6 +375,8 @@ void AliAnalysisTaskEMCALClusterizeFast::FillDigitsArray()
        if (fCaloCells->GetCell(icell, cellNumber, cellAmplitude, cellTime, cellMCLabel, cellEFrac) != kTRUE)
          break;
 
+        if (fSetCellMCLabelFromCluster) cellMCLabel = cellLabels[cellNumber];
+
        if (cellMCLabel > 0 && cellEFrac < 1e-6) 
          cellEFrac = 1;
 
index 1fe219f..f894397 100644 (file)
@@ -1,8 +1,6 @@
 #ifndef ALIANALYSISTASKEMCALCLUSTERIZEFAST_H
 #define ALIANALYSISTASKEMCALCLUSTERIZEFAST_H
 
-// $Id$
-
 class TObjArray;
 class TClonesArray;
 class AliAODEvent;
@@ -86,6 +84,7 @@ class AliAnalysisTaskEMCALClusterizeFast : public AliAnalysisTaskSE {
   void                   SetFiducial(Bool_t b)                                { fFiducial                    = b     ; }
   void                   SetDoNonLinearity(Bool_t b)                          { fDoNonLinearity              = b     ; }
   void                   SetRecalDistToBadChannels(Bool_t b)                  { fRecalDistToBadChannels      = b     ; }
+  void                   SetCellMCLabelFromCluster(Int_t s)                   { fSetCellMCLabelFromCluster   = s     ; }
 
   // For backward compatibility
   const TString         &GetNewClusterArrayName()                     const   { return GetCaloClustersName()         ; }
@@ -145,6 +144,9 @@ class AliAnalysisTaskEMCALClusterizeFast : public AliAnalysisTaskSE {
   Bool_t                 fFiducial;                       // fiducial cut
   Bool_t                 fDoNonLinearity;                 // non linearity calib
   Bool_t                 fRecalDistToBadChannels;         // recalculate distance to bad channel
+  Int_t                  fSetCellMCLabelFromCluster;      // Use cluster MC label as cell label:
+                                                          // 0 - get the MC label stored in cells (not available for productions done with aliroot < v5-02-Rev09)
+                                                          // 1 - assign to the cell the MC label of the cluster
   AliVCaloCells         *fCaloCells;                      //!calo cells object
   TClonesArray          *fCaloClusters;                   //!calo clusters array       
   AliESDEvent           *fEsd;                            //!esd event