* 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"
fListCF(),
fSelectPhysics(kFALSE),
fTriggerMask(AliVEvent::kMB),
+ fTriggerOnV0AND(kFALSE),
+ fRejectPileup(kFALSE),
+ fTriggerAnalysis(0x0),
+ fEventFilter(0x0),
fEventStat(0x0)
{
//
fListCF(),
fSelectPhysics(kFALSE),
fTriggerMask(AliVEvent::kMB),
+ fTriggerOnV0AND(kFALSE),
+ fRejectPileup(kFALSE),
+ fTriggerAnalysis(0x0),
+ fEventFilter(0x0),
fEventStat(0x0)
{
//
DefineOutput(3, TH1D::Class());
fListHistos.SetName("Dielectron_Histos_Multi");
fListCF.SetName("Dielectron_CF_Multi");
+ fListDielectron.SetOwner();
+ fListHistos.SetOwner();
+ fListCF.SetOwner();
}
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())) ){
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);
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);
+ }
}
}
}
}
//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);