26 #include <TClonesArray.h>
31 #include "AliAnalysisManager.h"
32 #include "AliAODHandler.h"
33 #include "AliAODEvent.h"
34 #include "AliAODVertex.h"
35 #include "AliESDtrack.h"
36 #include "AliAODTrack.h"
37 #include "AliAODMCHeader.h"
38 #include "AliAODMCParticle.h"
44 #include "AliAnalysisTaskSE.h"
75 DefineOutput(1,TList::Class());
77 DefineOutput(2,TNtuple::Class());
95 if(fDebug > 1) printf(
"AnalysisTaskSECompareHF::Init() \n");
105 if(fDebug > 1) printf(
"AnalysisTaskSECompareHF::UserCreateOutputObjects() \n");
111 fHistMass =
new TH1F(
"fHistMass",
"D^{0} invariant mass; M [GeV]; Entries",200,1.765,1.965);
116 fHistNEvents =
new TH1F(
"fHistNEvents",
"Number of processed events; ; Events",3,-1.5,1.5);
122 fNtupleCmp =
new TNtuple(
"fNtupleCmp",
"Charm comparison",
"pdg:nprongs:VxRec:VxTrue:ErrVx:VyRec:VyTrue:ErrVy:VzRec:VzTrue:ErrVz:Chi2toNDF:PtRec:Mrec:CPta:Prodd0");
136 TClonesArray *inputArrayVertices = 0;
137 TClonesArray *inputArrayD0toKpi = 0;
138 TClonesArray *inputArrayDstar = 0;
140 if(!aod && AODEvent() && IsStandardAOD()) {
146 AliAODHandler* aodHandler = (AliAODHandler*)
147 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
148 if(aodHandler->GetExtensions()) {
149 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
"AliAOD.VertexingHF.root");
152 inputArrayVertices = (TClonesArray*)aodFromExt->GetList()->FindObject(
"VerticesHF");
154 inputArrayD0toKpi = (TClonesArray*)aodFromExt->GetList()->FindObject(
"D0toKpi");
156 inputArrayDstar = (TClonesArray*)aodFromExt->GetList()->FindObject(
"Dstar");
160 inputArrayVertices = (TClonesArray*)aod->GetList()->FindObject(
"VerticesHF");
162 inputArrayD0toKpi = (TClonesArray*)aod->GetList()->FindObject(
"D0toKpi");
164 inputArrayDstar = (TClonesArray*)aod->GetList()->FindObject(
"Dstar");
168 if(!inputArrayVertices || !aod) {
169 printf(
"AliAnalysisTaskSECompareHF::UserExec: Vertices branch not found!\n");
172 if(!inputArrayD0toKpi) {
173 printf(
"AliAnalysisTaskSECompareHF::UserExec: D0toKpi branch not found!\n");
176 if(!inputArrayDstar) {
177 printf(
"AliAnalysisTaskSECompareHF::UserExec: Dstar branch not found!\n");
187 AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
191 TClonesArray *mcArray =
192 (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
194 printf(
"AliAnalysisTaskSECompareHF::UserExec: MC particles branch not found!\n");
199 AliAODMCHeader *mcHeader =
200 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
202 printf(
"AliAnalysisTaskSECompareHF::UserExec: MC header branch not found!\n");
208 Double_t invmass,posRec[3],posTrue[3],covRec[6],errx,erry,errz;
213 Int_t pdgDgD0toKpi[2]={321,211};
214 Int_t pdgDgDplustoKpipi[3]={321,211,211};
215 Int_t pdgDgD0toKpipipi[4]={321,211,211,211};
218 Int_t nVertices = inputArrayVertices->GetEntriesFast();
219 if(fDebug>1) printf(
"Number of vertices: %d\n",nVertices);
221 for (
Int_t iVtx = 0; iVtx < nVertices; iVtx++) {
222 AliAODVertex *vtx = (AliAODVertex*)inputArrayVertices->UncheckedAt(iVtx);
225 vtx->GetCovarianceMatrix(covRec);
226 errx=1.; erry=1.; errz=1.;
227 if(covRec[0]>0) errx = TMath::Sqrt(covRec[0]);
228 if(covRec[2]>0) erry = TMath::Sqrt(covRec[2]);
229 if(covRec[5]>0) errz = TMath::Sqrt(covRec[5]);
233 nprongs= vtx->GetNDaughters();
236 for(
Int_t idg=0; idg<nprongs; idg++) {
237 AliAODTrack *track = (AliAODTrack*)vtx->GetDaughter(idg);
238 if(!(track->GetStatus()&AliESDtrack::kITSrefit)) allDgOK=kFALSE;
239 if(!(track->GetStatus()&AliESDtrack::kTPCrefit)) allDgOK=kFALSE;
241 if(!allDgOK)
continue;
248 if(d2->Charge() != 0)
continue;
249 lab = d2->MatchToMC(421,mcArray,2,pdgDgD0toKpi);
257 AliAODMCParticle *dMC = (AliAODMCParticle*)mcArray->At(lab);
258 pdg = dMC->GetPdgCode();
261 AliAODMCParticle *dg0MC = (AliAODMCParticle*)mcArray->At(dMC->GetDaughter(0));
262 dg0MC->XvYvZv(posTrue);
281 lab = d3->MatchToMC(411,mcArray,3,pdgDgDplustoKpipi);
288 AliAODMCParticle *dMC = (AliAODMCParticle*)mcArray->At(lab);
289 pdg = dMC->GetPdgCode();
292 AliAODMCParticle *dg0MC = (AliAODMCParticle*)mcArray->At(dMC->GetDaughter(0));
293 dg0MC->XvYvZv(posTrue);
308 lab = d4->MatchToMC(421,mcArray,4,pdgDgD0toKpipipi);
316 AliAODMCParticle *dMC = (AliAODMCParticle*)mcArray->At(lab);
317 pdg = dMC->GetPdgCode();
321 AliAODMCParticle *dg0MC = (AliAODMCParticle*)mcArray->At(dMC->GetDaughter(0));
322 dg0MC->XvYvZv(posTrue);
359 if(fDebug > 1) printf(
"AnalysisTaskSECompareHF: Terminate() \n");
363 printf(
"ERROR: fOutput not available\n");
virtual void UserCreateOutputObjects()
Implementation of interface methods.
void UnsetOwnPrimaryVtx()
virtual void UserExec(Option_t *option)
Double_t InvMassD0() const
Double_t Prodd0d0() const
virtual void Terminate(Option_t *option)
TH1F * fHistNEvents
! output histogram
virtual ~AliAnalysisTaskSECompareHF()
AliAODVertex * GetOwnPrimaryVtx() const
AliAnalysisTaskSECompareHF()
Double_t InvMassDplus() const
Double_t InvMassD0bar() const
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
TH1F * fHistMass
! output histogram
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
TList * fOutput
! list send on output slot 0
Double_t CosPointingAngle() const
Bool_t IsLikeSign() const
check if it is like-sign
TNtuple * fNtupleCmp
! output ntuple
TList * OpenFile(const char *fname)