]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/dielectron/AliAnalysisTaskMultiDielectron.cxx
Adding Id to PWG3 classes for better tracking of the coverity defect fixes (Ivana)
[u/mrichter/AliRoot.git] / PWG3 / dielectron / AliAnalysisTaskMultiDielectron.cxx
index 192a6915e83621a56aec7af455f05e1f8b35bf82..30335b92744e3e61faa1eb7f828a8f231f040f44 100644 (file)
@@ -13,6 +13,8 @@
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
 
+/* $Id$ */
+
 ///////////////////////////////////////////////////////////////////////////
 //                                                                       //
 //                        Basic Analysis Task                            //
 #include <AliCFContainer.h>
 #include <AliInputEventHandler.h>
 #include <AliESDInputHandler.h>
+#include <AliAODInputHandler.h>
 #include <AliAnalysisManager.h>
 #include <AliVEvent.h>
+#include <AliTriggerAnalysis.h>
 
 #include "AliDielectron.h"
 #include "AliDielectronHistos.h"
@@ -44,6 +48,10 @@ AliAnalysisTaskMultiDielectron::AliAnalysisTaskMultiDielectron() :
   fListCF(),
   fSelectPhysics(kFALSE),
   fTriggerMask(AliVEvent::kMB),
+  fTriggerOnV0AND(kFALSE),
+  fRejectPileup(kFALSE),
+  fTriggerAnalysis(0x0),
+  fEventFilter(0x0),
   fEventStat(0x0)
 {
   //
@@ -59,6 +67,10 @@ AliAnalysisTaskMultiDielectron::AliAnalysisTaskMultiDielectron(const char *name)
   fListCF(),
   fSelectPhysics(kFALSE),
   fTriggerMask(AliVEvent::kMB),
+  fTriggerOnV0AND(kFALSE),
+  fRejectPileup(kFALSE),
+  fTriggerAnalysis(0x0),
+  fEventFilter(0x0),
   fEventStat(0x0)
 {
   //
@@ -70,6 +82,9 @@ AliAnalysisTaskMultiDielectron::AliAnalysisTaskMultiDielectron(const char *name)
   DefineOutput(3, TH1D::Class());
   fListHistos.SetName("Dielectron_Histos_Multi");
   fListCF.SetName("Dielectron_CF_Multi");
+  fListDielectron.SetOwner();
+  fListHistos.SetOwner();
+  fListCF.SetOwner();
 }
 
 
@@ -82,6 +97,10 @@ void AliAnalysisTaskMultiDielectron::UserCreateOutputObjects()
 
   if (!fListHistos.IsEmpty()||!fListCF.IsEmpty()) return; //already initialised
 
+  AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
+  Bool_t isESD=man->GetInputEventHandler()->IsA()==AliESDInputHandler::Class();
+//   Bool_t isAOD=man->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();
+  
   TIter nextDie(&fListDielectron);
   AliDielectron *die=0;
   while ( (die=static_cast<AliDielectron*>(nextDie())) ){
@@ -90,11 +109,25 @@ void AliAnalysisTaskMultiDielectron::UserCreateOutputObjects()
     if (die->GetCFManagerPair()) fListCF.Add(const_cast<AliCFContainer*>(die->GetCFManagerPair()->GetContainer()));
   }
 
+  Int_t cuts=fListDielectron.GetEntries();
+  Int_t nbins=kNbinsEvent+2*cuts;
   if (!fEventStat){
-    fEventStat=new TH1D("hEventStat","Event statistics",5,0,5);
+    fEventStat=new TH1D("hEventStat","Event statistics",nbins,0,nbins);
     fEventStat->GetXaxis()->SetBinLabel(1,"Before Phys. Sel.");
     fEventStat->GetXaxis()->SetBinLabel(2,"After Phys. Sel.");
+    if (fTriggerOnV0AND&&isESD) fEventStat->GetXaxis()->SetBinLabel(3,"V0and triggers");
+    if (fEventFilter) fEventStat->GetXaxis()->SetBinLabel(4,"After Event Filter");
+    if (fRejectPileup) fEventStat->GetXaxis()->SetBinLabel(5,"After Pileup rejection");
+    
+    for (Int_t i=0; i<cuts; ++i){
+      fEventStat->GetXaxis()->SetBinLabel((kNbinsEvent+1)+2*i,Form("#splitline{1 candidate}{%s}",fListDielectron.At(i)->GetName()));
+      fEventStat->GetXaxis()->SetBinLabel((kNbinsEvent+2)+2*i,Form("#splitline{With >1 candidate}{%s}",fListDielectron.At(i)->GetName()));
+    }
   }
+
+  if (!fTriggerAnalysis) fTriggerAnalysis=new AliTriggerAnalysis;
+  fTriggerAnalysis->EnableHistograms();
+  fTriggerAnalysis->SetAnalyzeMC(AliDielectronMC::Instance()->HasMC());
   
   PostData(1, &fListHistos);
   PostData(2, &fListCF);
@@ -112,17 +145,34 @@ void AliAnalysisTaskMultiDielectron::UserExec(Option_t *)
 
   AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
   AliESDInputHandler *esdHandler=0x0;
+  Bool_t isESD=man->GetInputEventHandler()->IsA()==AliESDInputHandler::Class();
+  Bool_t isAOD=man->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();
   if ( (esdHandler=dynamic_cast<AliESDInputHandler*>(man->GetInputEventHandler())) && esdHandler->GetESDpid() ){
     AliDielectronVarManager::SetESDpid(esdHandler->GetESDpid());
   } else {
     //load esd pid bethe bloch parameters depending on the existance of the MC handler
     // yes: MC parameters
     // no:  data parameters
-    if (!AliDielectronVarManager::GetESDpid()){
-      if (AliDielectronMC::Instance()->HasMC()) {
-        AliDielectronVarManager::InitESDpid();
-      } else {
-        AliDielectronVarManager::InitESDpid(1);
+
+    //ESD case
+    if (isESD){
+      if (!AliDielectronVarManager::GetESDpid()){
+        
+        if (AliDielectronMC::Instance()->HasMC()) {
+          AliDielectronVarManager::InitESDpid();
+        } else {
+          AliDielectronVarManager::InitESDpid(1);
+        }
+      }
+    }
+    //AOD case
+    if (isAOD){
+      if (!AliDielectronVarManager::GetAODpidUtil()){
+        if (AliDielectronMC::Instance()->HasMC()) {
+          AliDielectronVarManager::InitAODpidUtil();
+        } else {
+          AliDielectronVarManager::InitAODpidUtil(1);
+        }
       }
     }
   } 
@@ -135,23 +185,50 @@ void AliAnalysisTaskMultiDielectron::UserExec(Option_t *)
   }
   
   //Before physics selection
-  fEventStat->Fill(0.);
+  fEventStat->Fill(kAllEvents);
   if (isSelected==0) {
     PostData(3,fEventStat);
     return;
   }
   //after physics selection
-  fEventStat->Fill(1.);
+  fEventStat->Fill(kSelectedEvents);
+
+  //V0and
+  if (fTriggerOnV0AND&&isESD){
+    if (!fTriggerAnalysis->IsOfflineTriggerFired(static_cast<AliESDEvent*>(InputEvent()), AliTriggerAnalysis::kV0AND)) return;
+  }
+  fEventStat->Fill(kV0andEvents);
+  
+  //event filter
+  if (fEventFilter) {
+    if (!fEventFilter->IsSelected(InputEvent())) return;
+  }
+  fEventStat->Fill(kFilteredEvents);
+  
+  //pileup
+  if (fRejectPileup){
+    if (InputEvent()->IsPileupFromSPD(3,0.8,3.,2.,5.)) return;
+  }
+  fEventStat->Fill(kPileupEvents);
   
   //bz for AliKF
   Double_t bz = InputEvent()->GetMagneticField();
   AliKFParticle::SetField( bz );
 
+  AliDielectronPID::SetCorrVal((Double_t)InputEvent()->GetRunNumber());
+  
   //Process event in all AliDielectron instances
   TIter nextDie(&fListDielectron);
   AliDielectron *die=0;
+  Int_t idie=0;
   while ( (die=static_cast<AliDielectron*>(nextDie())) ){
     die->Process(InputEvent());
+    if (die->HasCandidates()){
+      Int_t ncandidates=die->GetPairArray(1)->GetEntriesFast();
+      if (ncandidates==1) fEventStat->Fill((kNbinsEvent)+2*idie);
+      else if (ncandidates>1) fEventStat->Fill((kNbinsEvent+1)+2*idie);
+    }
+    ++idie;
   }
   
   PostData(1, &fListHistos);