]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
calculate track multiplicity using the standard ESD cuts, and a cut on eta. Filter...
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 26 Oct 2010 14:28:16 +0000 (14:28 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 26 Oct 2010 14:28:16 +0000 (14:28 +0000)
PWG4/CaloCalib/AliAnalysisTaskCaloFilter.cxx
PWG4/CaloCalib/AliAnalysisTaskCaloFilter.h
PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h
PWG4/PartCorrBase/AliCaloTrackReader.cxx
PWG4/PartCorrBase/AliCaloTrackReader.h

index 849c1ea10b58296fa9e57bb308d621ee1dedf854..3ca24840c96a9441717323b488f269527b5cf4f9 100644 (file)
@@ -36,6 +36,7 @@
 #include "AliVEventHandler.h"
 #include "AliAnalysisManager.h"
 #include "AliInputEventHandler.h"
+#include "AliESDtrackCuts.h"
 
 ClassImp(AliAnalysisTaskCaloFilter)
   
@@ -45,9 +46,12 @@ AliAnalysisTaskCaloFilter::AliAnalysisTaskCaloFilter():
   AliAnalysisTaskSE(), //fCuts(0x0),
   fCaloFilter(0), fCorrect(kFALSE), 
   fEMCALGeo(0x0),fEMCALGeoName("EMCAL_FIRSTYEAR"), 
-  fEMCALRecoUtils(new AliEMCALRecoUtils)
+  fEMCALRecoUtils(new AliEMCALRecoUtils),
+  fESDtrackCuts(0), fTrackMultEtaCut(0.9)
 {
   // Default constructor
+  fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
+
 }
 
 //__________________________________________________
@@ -55,9 +59,12 @@ AliAnalysisTaskCaloFilter::AliAnalysisTaskCaloFilter(const char* name):
   AliAnalysisTaskSE(name), //fCuts(0x0),
   fCaloFilter(0), fCorrect(kFALSE),
   fEMCALGeo(0x0),fEMCALGeoName("EMCAL_FIRSTYEAR"), 
-  fEMCALRecoUtils(new AliEMCALRecoUtils)
+  fEMCALRecoUtils(new AliEMCALRecoUtils),
+  fESDtrackCuts(0), fTrackMultEtaCut(0.9)
 {
   // Constructor
+  fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
+
 }
 
 //__________________________________________________
@@ -66,8 +73,8 @@ AliAnalysisTaskCaloFilter::~AliAnalysisTaskCaloFilter()
   //Destructor.
        
   if(fEMCALGeo)       delete fEMCALGeo;        
-  if(fEMCALRecoUtils) delete fEMCALRecoUtils ;
-  
+  if(fEMCALRecoUtils) delete fEMCALRecoUtils;
+  if(fESDtrackCuts)   delete fESDtrackCuts;
 }
 
 //__________________________________________________
@@ -99,12 +106,23 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
   //Magic line to write events to file
   AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
     
-  
   Bool_t bAOD = kFALSE;
   if(!strcmp(event->GetName(),"AliAODEvent")) bAOD=kTRUE;
   Bool_t bESD = kFALSE;
   if(!strcmp(event->GetName(),"AliESDEvent")) bESD=kTRUE;
-    
+  
+  //Get track multiplicity
+  Int_t trackMult = 0;
+  if(bESD){
+    Int_t nTracks   = InputEvent()->GetNumberOfTracks() ;
+    for (Int_t itrack =  0; itrack <  nTracks; itrack++) {////////////// track loop
+      AliVTrack * track = (AliVTrack*)InputEvent()->GetTrack(itrack) ; // retrieve track from esd
+      if(!fESDtrackCuts->AcceptTrack((AliESDtrack*)track)) continue;
+      //Count the tracks in eta < 0.9
+      if(TMath::Abs(track->Eta())< fTrackMultEtaCut) trackMult++;
+    }    
+  }
+  
   // set arrays and pointers
   Float_t posF[3];
   Double_t pos[3];
@@ -127,8 +145,9 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
   header->SetPeriodNumber(event->GetPeriodNumber());
   header->SetEventType(event->GetEventType());
   header->SetMuonMagFieldScale(-999.); // FIXME
-  header->SetCentrality(-999.);        // FIXME
-  
+  //printf("Track Multiplicity for eta < %f: %d \n",fTrackMultEtaCut,trackMult);
+  header->SetCentrality((Double_t)trackMult);        // FIXME
+  //printf("Centrality %f\n",header->GetCentrality());
   
   header->SetTriggerMask(event->GetTriggerMask()); 
   header->SetTriggerCluster(event->GetTriggerCluster());
@@ -261,6 +280,18 @@ void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
       printf("Filter, aod       : i %d, x %f, y %f, z %f\n",caloCluster->GetID(), posF[0], posF[1], posF[2]);
     }    
     
+    //Matched tracks, just to know if there was any match, the track pointer is useless.
+    if(bESD){
+      TArrayI* matchedT =      ((AliESDCaloCluster*)cluster)->GetTracksMatched();
+      if (InputEvent()->GetNumberOfTracks() > 0 && matchedT && cluster->GetTrackMatchedIndex() >= 0) { 
+        for (Int_t im = 0; im < matchedT->GetSize(); im++) {
+          Int_t iESDtrack = matchedT->At(im);;
+          if ((AliVTrack*)InputEvent()->GetTrack(iESDtrack) != 0) {
+            caloCluster->AddTrackMatched((AliVTrack*)InputEvent()->GetTrack(iESDtrack));
+          }
+        }
+      }// There is at least a match with a track
+    }
   } 
   caloClusters.Expand(jClusters); // resize TObjArray to 'remove' slots for pseudo clusters     
   // end of loop on calo clusters
index 3d2beda794b8528781cbb70a0f45db0d49193034..ec8ce73f742eedeef427ef6dcc17389fbc1cd41b 100644 (file)
@@ -21,6 +21,7 @@ class TList;
 #include "AliAnalysisTaskSE.h"
 class AliEMCALRecoUtils;
 class AliEMCALGeometry;
+class AliESDtrackCuts;
 
 class AliAnalysisTaskCaloFilter : public AliAnalysisTaskSE
 {
@@ -53,6 +54,12 @@ public:
   void SwitchOnClusterCorrection()  {fCorrect = kTRUE ;}
   void SwitchOffClusterCorrection() {fCorrect = kFALSE;}
 
+  AliESDtrackCuts* GetTrackCuts()          const  { return fESDtrackCuts    ; }
+  void    SetTrackCuts(AliESDtrackCuts * cuts)    { fESDtrackCuts = cuts    ; }                  
+  Float_t GetTrackMultiplicityEtaCut()     const  { return fTrackMultEtaCut ; }
+  void    SetTrackMultiplicityEtaCut(Float_t eta) { fTrackMultEtaCut = eta  ; }                
+  
+  
   void PrintInfo();
   
 private:
@@ -65,7 +72,11 @@ private:
   TString             fEMCALGeoName;   // Name of geometry to use.
   AliEMCALRecoUtils * fEMCALRecoUtils; // Pointer to EMCAL utilities for clusterization
 
-  ClassDef(AliAnalysisTaskCaloFilter, 2); // Analysis task for standard ESD filtering
+  AliESDtrackCuts *fESDtrackCuts       ; // Track cut  
+  Float_t          fTrackMultEtaCut    ; // Track multiplicity eta cut
+  
+  
+  ClassDef(AliAnalysisTaskCaloFilter, 3); // Analysis task for standard ESD filtering
 };
 
 #endif
index 7bbdbfad1f639c575b6cabe72367e65b70ff0f23..6b592786db5cd92ccb03a1d556e45d24294ec7b4 100755 (executable)
@@ -74,6 +74,8 @@ public:
   virtual AliCaloTrackReader * GetReader() const {return fReader ; }
   virtual void SetReader(AliCaloTrackReader * const reader) { fReader = reader ; }
   
+  Int_t GetTrackMultiplicity() const {return fReader->GetTrackMultiplicity();}
+  
   //Calorimeter helper class access methods
   AliEMCALGeoUtils *  GetEMCALGeometry() const { return fCaloUtils->GetEMCALGeometry(); }
   AliPHOSGeoUtils  *  GetPHOSGeometry()  const { return fCaloUtils->GetPHOSGeometry() ; }
index 41dcefb43f5ecaa8f6b5cb2781ed67196bee4a10..27645fd53d583c77b73f1c4c2079b9126fd3b8c9 100755 (executable)
@@ -44,6 +44,7 @@
 #include "AliMixedEvent.h"
 #include "AliESDtrack.h"
 #include "AliEMCALRecoUtils.h"
+#include "AliESDtrackCuts.h"
 
 ClassImp(AliCaloTrackReader)
   
@@ -62,7 +63,7 @@ ClassImp(AliCaloTrackReader)
 //    fSecondInputFileName(""),fSecondInputFirstEvent(0), 
 //    fAODCTSNormalInputEntries(0), fAODEMCALNormalInputEntries(0), 
 //    fAODPHOSNormalInputEntries(0), 
-    fTrackStatus(0), 
+    fTrackStatus(0),   fESDtrackCuts(0), fTrackMult(0), fTrackMultEtaCut(0.9),
     fReadStack(kFALSE), fReadAODMCParticles(kFALSE), 
     fDeltaAODFileName("deltaAODPartCorr.root"),fFiredTriggerClassName(""),
     fAnaLED(kFALSE),fTaskName(""),fCaloUtils(0x0), 
@@ -118,6 +119,8 @@ AliCaloTrackReader::~AliCaloTrackReader() {
     delete [] fVertex ;
        }
 
+  if(fESDtrackCuts)   delete fESDtrackCuts;
+  
 //  Pointers not owned, done by the analysis frame
 //  if(fInputEvent)  delete fInputEvent ;
 //  if(fOutputEvent) delete fOutputEvent ;
@@ -312,8 +315,11 @@ void AliCaloTrackReader::InitParameters()
   fAnaLED = kFALSE;
   
   //We want tracks fitted in the detectors:
-  fTrackStatus=AliESDtrack::kTPCrefit;
-  fTrackStatus|=AliESDtrack::kITSrefit;  
+  //fTrackStatus=AliESDtrack::kTPCrefit;
+  //fTrackStatus|=AliESDtrack::kITSrefit;  
+  
+  fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
+
   
 }
 
@@ -337,6 +343,7 @@ void AliCaloTrackReader::Print(const Option_t * opt) const
   printf("Use EMCAL Cells =     %d\n", fFillEMCALCells) ;
   printf("Use PHOS  Cells =     %d\n", fFillPHOSCells) ;
   printf("Track status    =     %d\n", (Int_t) fTrackStatus) ;
+  printf("Track Mult Eta Cut =  %d\n", (Int_t) fTrackMultEtaCut) ;
   printf("Write delta AOD =     %d\n", fWriteOutputDeltaAOD) ;
 
   if(fComparePtHardAndJetPt)
@@ -551,13 +558,23 @@ void AliCaloTrackReader::FillInputCTS() {
   
   Int_t nTracks   = fInputEvent->GetNumberOfTracks() ;
   Double_t p[3];
+  fTrackMult = 0;
+  Int_t nstatus = 0;
   for (Int_t itrack =  0; itrack <  nTracks; itrack++) {////////////// track loop
     AliVTrack * track = (AliVTrack*)fInputEvent->GetTrack(itrack) ; // retrieve track from esd
-    
-      //Select tracks under certain conditions, TPCrefit, ITSrefit ... check the set bits
+
+    //Select tracks under certain conditions, TPCrefit, ITSrefit ... check the set bits
     if (fTrackStatus && !((track->GetStatus() & fTrackStatus) == fTrackStatus)) 
       continue ;
     
+    nstatus++;
+    
+    if(fDataType==kESD && !fESDtrackCuts->AcceptTrack((AliESDtrack*)track)) continue;
+    
+    //Count the tracks in eta < 0.9
+    //printf("Eta %f cut  %f\n",TMath::Abs(track->Eta()),fTrackMultEtaCut);
+    if(TMath::Abs(track->Eta())< fTrackMultEtaCut) fTrackMult++;
+    
     track->GetPxPyPz(p) ;
     TLorentzVector momentum(p[0],p[1],p[2],0);
     
@@ -580,7 +597,8 @@ void AliCaloTrackReader::FillInputCTS() {
   }// track loop
        
   //fAODCTSNormalInputEntries = fAODCTS->GetEntriesFast();
-  if(fDebug > 1) printf("AliCaloTrackReader::FillInputCTS()   - aod entries %d\n", fAODCTS->GetEntriesFast());//fAODCTSNormalInputEntries);
+  if(fDebug > 1) 
+    printf("AliCaloTrackReader::FillInputCTS()   - aod entries %d, input tracks %d, pass status %d, multipliticy %d\n", fAODCTS->GetEntriesFast(), nTracks, nstatus, fTrackMult);//fAODCTSNormalInputEntries);
   
     //  //If second input event available, add the clusters.
     //  if(fSecondInputAODTree && fSecondInputAODEvent){
index b73cc64f4e5d051d2f5a1be5cbac5d4a6ae15116..9015141d9716df6c6d490689b5b30e4ec00d6e6a 100755 (executable)
@@ -35,6 +35,7 @@ class AliMixedEvent;
 #include "AliFiducialCut.h"
 class AliAODMCHeader;
 #include "AliCalorimeterUtils.h"
+class AliESDtrackCuts;
 
 class AliCaloTrackReader : public TObject {
 
@@ -171,9 +172,17 @@ public:
 //  Int_t GetAODPHOSNormalInputEntries()  {if(!fSecondInputAODTree) { fAODPHOSNormalInputEntries  = fAODPHOS->GetEntriesFast() ;}
 //                                                                              return fAODPHOSNormalInputEntries ; }
        
-  ULong_t GetTrackStatus() const    {return fTrackStatus ; }
+  // Track selection
+  ULong_t GetTrackStatus() const   {return fTrackStatus ; }
   void SetTrackStatus(ULong_t bit) { fTrackStatus = bit ; }            
        
+  AliESDtrackCuts* GetTrackCuts()          const  { return fESDtrackCuts    ; }
+  void    SetTrackCuts(AliESDtrackCuts * cuts)    { fESDtrackCuts = cuts    ; }                  
+  Int_t   GetTrackMultiplicity()           const  { return fTrackMult       ; }
+  Float_t GetTrackMultiplicityEtaCut()     const  { return fTrackMultEtaCut ; }
+  void    SetTrackMultiplicityEtaCut(Float_t eta) { fTrackMultEtaCut = eta  ; }                
+  
+  //MC switchs
   void SwitchOnStack()              { fReadStack          = kTRUE  ; }
   void SwitchOffStack()             { fReadStack          = kFALSE ; }
   void SwitchOnAODMCParticles()     { fReadAODMCParticles = kTRUE  ; }
@@ -267,6 +276,9 @@ public:
 //  Int_t          fAODPHOSNormalInputEntries;  // Number of entries in PHOS  in case of standard input, larger with mixing.
        
   ULong_t          fTrackStatus        ; // Track selection bit, select tracks refitted in TPC, ITS ...
+  AliESDtrackCuts *fESDtrackCuts       ; // Track cut  
+  Int_t            fTrackMult          ; // Track multiplicity
+  Float_t          fTrackMultEtaCut    ; // Track multiplicity eta cut
   Bool_t           fReadStack          ; // Access kine information from stack
   Bool_t                fReadAODMCParticles ; // Access kine information from filtered AOD MC particles
        
@@ -286,7 +298,7 @@ public:
   Bool_t           fWriteOutputDeltaAOD;// Write the created delta AOD objects into file  
        Bool_t           fOldAOD;             // Old AODs, before revision 4.20
   
-  ClassDef(AliCaloTrackReader,19)
+  ClassDef(AliCaloTrackReader,20)
 } ;