#include "AliAnalysisTaskHFEemcQA.h"
+//QA task for EMCAL electron analysis
+
using std::cout;
using std::endl;
-//QA task for EMCAL electron analysis
ClassImp(AliAnalysisTaskHFEemcQA)
//________________________________________________________________________
fAOD(0),
fpidResponse(0),
fFlagSparse(kFALSE),
+ fUseTender(kTRUE),
+ fTracks_tender(0),
+ fCaloClusters_tender(0),
fOutputList(0),
fNevents(0),
fVtxZ(0),
fHistdEdxEop(0),
fHistNsigEop(0),
fHistEop(0),
+ fM20(0),
+ fM02(0),
+ fM20EovP(0),
+ fM02EovP(0),
fEleCanTPCNpts(0),
fEleCanTPCNCls(0),
fEleCanITSNCls(0),
fAOD(0),
fpidResponse(0),
fFlagSparse(kFALSE),
+ fUseTender(kTRUE),
+ fTracks_tender(0),
+ fCaloClusters_tender(0),
fOutputList(0),
fNevents(0),
fVtxZ(0),
fHistdEdxEop(0),
fHistNsigEop(0),
fHistEop(0),
+ fM20(0),
+ fM02(0),
+ fM20EovP(0),
+ fM02EovP(0),
fEleCanTPCNpts(0),
fEleCanTPCNCls(0),
fEleCanITSNCls(0),
{
//Destructor
delete fOutputList;
+ delete fTracks_tender;
+ delete fCaloClusters_tender;
delete fSparseElectron;
delete []fvalueElectron;
}
fEMCdEdx = new TH2F("fEMCdEdx","dE/dx distribution of tracks matched to EMCAL;p (GeV/c);dE/dx",200,0,20,500,0,160);
fOutputList->Add(fEMCdEdx);
-
+
fEMCTPCnsig = new TH2F("fEMCTPCnsig","TPC Nsigma distribution of tracks matched to EMCAL;p (GeV/c);#sigma_{TPC-dE/dx}",1000,0,50,200,-10,10);
fOutputList->Add(fEMCTPCnsig);
fHistdEdxEop = new TH2F("fHistdEdxEop", "E/p vs dE/dx;E/p;dE/dx", 60, 0.0, 3.0, 500,0,160);
fOutputList->Add(fHistdEdxEop);
-
+
fHistNsigEop = new TH2F ("fHistNsigEop", "E/p vs TPC nsig",60, 0.0, 3.0, 200, -10,10);
fOutputList->Add(fHistNsigEop);
+ fM20 = new TH2F ("fM20","M20 vs pt distribution",200,0,20,400,0,2);
+ fOutputList->Add(fM20);
+
+ fM02 = new TH2F ("fM02","M02 vs pt distribution",200,0,20,400,0,2);
+ fOutputList->Add(fM02);
+
+ fM20EovP = new TH2F ("fM20EovP","M20 vs E/p distribution",400,0,3,400,0,2);
+ fOutputList->Add(fM20EovP);
+
+ fM02EovP = new TH2F ("fM02EovP","M02 vs E/p distribution",400,0,3,400,0,2);
+ fOutputList->Add(fM02EovP);
+
fEleCanTPCNpts = new TH2F("fEleCanTPCNpts","TPC Npoints used for dE/dx for electron candidates;p_{T} (GeV/c);N points",200,0,20,200,0,200);
fOutputList->Add(fEleCanTPCNpts);
// printf("fESD available\n");
//return;
}
+
+ //////////////
+ //if Tender //
+ //////////////
+ if(fUseTender){
+ //new branches with calibrated tracks and clusters
+ if(IsAODanalysis()) fTracks_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("AODFilterTracks"));
+ if(!IsAODanalysis()) fTracks_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("ESDFilterTracks"));
+
+ fCaloClusters_tender = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject("EmcCaloClusters"));
+ }
////////////////////
//cuts initialised//
//Event vertex//
///////////////
Int_t ntracks;
- ntracks = fVevent->GetNumberOfTracks();
+ if(!fUseTender)ntracks = fVevent->GetNumberOfTracks();
+ if(fUseTender) ntracks = fTracks_tender->GetEntries();
printf("There are %d tracks in this event\n",ntracks);
fNevents->Fill(0); //all events
Int_t trigger = -1;
if (fAOD){
- Double_t multiplicity=fAOD->GetHeader()->GetRefMultiplicity();
+ AliAODHeader * header = dynamic_cast<AliAODHeader*>(fAOD->GetHeader());
+ if(!header) AliFatal("Not a standard AOD");
+ Double_t multiplicity=header->GetRefMultiplicity();
fTrigMulti->Fill(-0.5, multiplicity);
if(evSelMask & AliVEvent::kAny) fTrigMulti->Fill(0.5, multiplicity);
if(evSelMask & AliVEvent::kMB) fTrigMulti->Fill(1.5, multiplicity);
/////////////////////////////
//EMCAL cluster information//
////////////////////////////
- Int_t Nclust = 0;
- Nclust = fVevent->GetNumberOfCaloClusters();
+ Int_t Nclust = -999;
+ if(!fUseTender) Nclust = fVevent->GetNumberOfCaloClusters();
+ if(fUseTender) Nclust = fCaloClusters_tender->GetEntries();
for(Int_t icl=0; icl<Nclust; icl++)
{
AliVCluster *clust = 0x0;
- clust = fVevent->GetCaloCluster(icl);
+ if(!fUseTender) clust = fVevent->GetCaloCluster(icl);
+ if(fUseTender) clust = dynamic_cast<AliVCluster*>(fCaloClusters_tender->At(icl));
+ if(!clust) printf("ERROR: Could not receive cluster matched calibrated from track %d\n", icl);
+
if(clust && clust->IsEMCAL())
{
Double_t clustE = clust->E();
///////////////
for (Int_t iTracks = 0; iTracks < ntracks; iTracks++) {
- AliVParticle* Vtrack = fVevent->GetTrack(iTracks);
+ AliVParticle* Vtrack = 0x0;
+ if(!fUseTender) Vtrack = fVevent->GetTrack(iTracks);
+ if(fUseTender) Vtrack = dynamic_cast<AliVTrack*>(fTracks_tender->At(iTracks));
+
if (!Vtrack) {
printf("ERROR: Could not receive track %d\n", iTracks);
continue;
if(etrack->GetKinkIndex(0) != 0) continue;
}
-
////////////////////
//Track properties//
///////////////////
//E/p distribution
Double_t clustMatchE = clustMatch->E();
Double_t eop = -1.0;
+ Double_t m02 = -99999;
if(track->P()>0)eop = clustMatchE/track->P();
+ m02 =clustMatch->GetM02();
if(track->Pt()>1.0){
fHistdEdxEop->Fill(eop,dEdx);
fHistNsigEop->Fill(eop,fTPCnSigma);
+ fM20EovP->Fill(eop,clustMatch->GetM20());
+ fM02EovP->Fill(eop,clustMatch->GetM02());
}
+
fHistEop->Fill(track->Pt(),eop);
+ fM20->Fill(track->Pt(),clustMatch->GetM20());
+ fM02->Fill(track->Pt(),clustMatch->GetM02());
//EID THnsparse
fvalueElectron[0] = trigger;
////////////////////////////////////////////////
//Track properties of EMCAL electron cadidates//
///////////////////////////////////////////////
- if(fTPCnSigma > -1 && fTPCnSigma < 3 && eop>0.8 && eop<1.2){
+ if(fTPCnSigma > -1 && fTPCnSigma < 3 && eop>0.9 && eop<1.2 && m02 > 0.006 && m02 < 0.035){
fEleCanTPCNpts->Fill(track->Pt(),track->GetTPCsignalN());
fEleCanTPCNCls->Fill(track->Pt(),track->GetTPCNcls());