24 #include <TDatabasePDG.h>
25 #include <TParticle.h>
31 #include "AliMCEvent.h"
32 #include "AliAODMCHeader.h"
33 #include "AliAODHandler.h"
34 #include "AliAnalysisManager.h"
36 #include "AliAODVertex.h"
37 #include "AliAODJet.h"
38 #include "AliAODRecoDecay.h"
41 #include "AliESDtrack.h"
42 #include "AliAODMCParticle.h"
54 fRequireNormalization(kTRUE),
88 fRequireNormalization(kTRUE),
116 Info(
"AliAnalysisTaskSEDStarJets",
"Calling Constructor");
118 DefineOutput(1,TList::Class());
119 DefineOutput(2,AliRDHFCutsDStartoKpipi::Class());
127 Info(
"~AliAnalysisTaskSEDStarJets",
"Calling Destructor");
165 if(fDebug > 1) printf(
"AnalysisTaskSEDStarJets::Init() \n");
168 PostData(2,copyfCuts);
178 Error(
"UserExec",
"NO EVENT FOUND!");
183 AliInfo(Form(
"Event %d",
fEvents));
189 TClonesArray *arrayDStartoD0pi=0;
191 if(!aodEvent && AODEvent() && IsStandardAOD()) {
194 aodEvent =
dynamic_cast<AliAODEvent*
> (AODEvent());
197 AliAODHandler* aodHandler = (AliAODHandler*)
198 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
199 if(aodHandler->GetExtensions()) {
200 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
"AliAOD.VertexingHF.root");
202 arrayDStartoD0pi=(TClonesArray*)aodFromExt->GetList()->FindObject(
"Dstar");
205 arrayDStartoD0pi=(TClonesArray*)aodEvent->GetList()->FindObject(
"Dstar");
208 if (!arrayDStartoD0pi){
209 AliInfo(
"Could not find array of HF vertices, skipping the event");
211 }
else AliDebug(2, Form(
"Found %d vertices",arrayDStartoD0pi->GetEntriesFast()));
215 if(!aodEvent->GetPrimaryVertex() || TMath::Abs(aodEvent->GetMagneticField())<0.001)
return;
218 TClonesArray *arrayofJets = (TClonesArray*)aodEvent->GetJets();
219 if(aodEvent->GetNJets()<=0)
return;
222 Int_t icountReco = 0;
230 Int_t pdgDgDStartoD0pi[2]={421,211};
231 Int_t pdgDgD0toKpi[2]={321,211};
240 for (
Int_t iJets = 0; iJets<arrayofJets->GetEntriesFast(); iJets++) {
241 AliAODJet* jet = (AliAODJet*)arrayofJets->At(iJets);
261 for (
Int_t iDStartoD0pi = 0; iDStartoD0pi<arrayDStartoD0pi->GetEntriesFast(); iDStartoD0pi++) {
271 Int_t mcLabel = -9999;
275 TClonesArray* mcArray =
dynamic_cast<TClonesArray*
>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
277 printf(
"AliAnalysisTaskSEDStarSpectra::UserExec: MC particles not found!\n");
280 mcLabel = dstarD0pi->
MatchToMC(413,421,pdgDgDStartoD0pi,pdgDgD0toKpi,mcArray);
282 if(mcLabel>=0) isDStar = 1;
285 AliAODMCParticle* mcPart =
dynamic_cast<AliAODMCParticle*
>(mcArray->At(mcLabel));
287 zMC=
FillMCFF(mcPart,mcArray,mcLabel);
293 AliAODTrack *track2 = (AliAODTrack*)dstarD0pi->
GetBachelor();
298 if(!isTkSelected)
continue;
303 if (!isSelected)
continue;
314 Double_t phiDStar = dstarD0pi->Phi();
315 Double_t phiD0 = theD0particle->Phi();
317 Double_t dPhiD0Dstar = phiD0 - phiDStar;
319 dPhi = phiJet - phiDStar;
322 if(dPhi<=-(TMath::Pi())/2) dPhi = dPhi+2*(TMath::Pi());
323 if(dPhi>(3*(TMath::Pi()))/2) dPhi = dPhi-2*(TMath::Pi());
325 Double_t corrFactorCharge = (ejet/100)*20;
326 EGjet = ejet + corrFactorCharge;
329 Double_t mPDGD0=TDatabasePDG::Instance()->GetParticle(421)->Mass();
330 if(finvM >= (mPDGD0-0.05) && finvM <=(mPDGD0+0.05)){
340 fDiff ->Fill(finvMDStar-finvM);
342 Double_t mPDGDstar=TDatabasePDG::Instance()->GetParticle(413)->Mass();
346 if (TMath::Abs(invmassDelta-(mPDGDstar-mPDGD0))<0.0019){
355 if(dPhi>=-jetCone && dPhi<=jetCone){
356 Double_t zFrag = (TMath::Cos(dPhi)*dStarMom)/EGjet;
357 fResZ->Fill(TMath::Abs(zFrag));
366 AliDebug(2, Form(
"Found %i Reco particles that are D*!!",icountReco));
378 Info(
"Terminate",
" terminate");
379 AliAnalysisTaskSE::Terminate();
383 printf(
"ERROR: fOutput not available\n");
392 fDiff =
dynamic_cast<TH1F*
>(
fOutput->FindObject(
"fDiff"));
397 fEjet =
dynamic_cast<TH1F*
>(
fOutput->FindObject(
"fEjet"));
400 fPhi =
dynamic_cast<TH1F*
>(
fOutput->FindObject(
"fPhi"));
401 fResZ =
dynamic_cast<TH1F*
>(
fOutput->FindObject(
"fResZ"));
413 Info(
"UserCreateOutputObjects",
"CreateOutputObjects of task %s\n", GetName());
429 fInvMass =
new TH1F(
"invMass",
"Kpi invariant mass distribution",1500,.5,3.5);
431 fInvMass->GetXaxis()->SetTitle(
"GeV/c");
432 fInvMass->GetYaxis()->SetTitle(
"Entries");
435 fDStar =
new TH1F(
"invMassDStar",
"DStar invariant mass after D0 cuts ",600,1.8,2.4);
437 fDStar->GetXaxis()->SetTitle(
"GeV/c");
438 fDStar->GetYaxis()->SetTitle(
"Entries");
441 fDiff =
new TH1F(
"Diff",
"M(kpipi)-M(kpi)",750,0.1,0.2);
442 fDiff->SetStats(kTRUE);
443 fDiff->GetXaxis()->SetTitle(
"M(kpipi)-M(kpi) GeV/c^2");
444 fDiff->GetYaxis()->SetTitle(
"Entries");
447 fDiffSideBand =
new TH1F(
"DiffSide",
"M(kpipi)-M(kpi) Side Band Background",750,0.1,0.2);
449 fDiffSideBand->GetXaxis()->SetTitle(
"M(kpipi)-M(Kpi) GeV/c^2");
453 fDStarMass =
new TH1F(
"RECODStar2",
"RECO DStar invariant mass distribution",750,1.5,2.5);
456 fTrueDiff =
new TH1F(
"dstar",
"True Reco diff",750,0,0.2);
460 ftrigger =
new TH1F(
"Normalization",
"Normalization factor for correlations",1,0,10);
465 fPhi =
new TH1F(
"phi",
"Delta phi between Jet axis and DStar ",25,-1.57,4.72);
466 fPhi->SetStats(kTRUE);
467 fPhi->GetXaxis()->SetTitle(
"#Delta #phi (rad)");
468 fPhi->GetYaxis()->SetTitle(
"Entries");
471 fDphiD0Dstar =
new TH1F(
"phiD0Dstar",
"Delta phi between D0 and DStar ",1000,-6.5,6.5);
474 fPhiBkg =
new TH1F(
"phiBkg",
"Delta phi between Jet axis and DStar background ",25,-1.57,4.72);
476 fPhiBkg->GetXaxis()->SetTitle(
"#Delta #phi (rad)");
477 fPhiBkg->GetYaxis()->SetTitle(
"Entries");
480 fRECOPtDStar =
new TH1F(
"RECODStar1",
"RECO DStar pt distribution",30,0,30);
487 fRECOPtBkg =
new TH1F(
"RECOptBkg",
"RECO pt distribution side bands",30,0,30);
494 fPtPion =
new TH1F(
"pionpt",
"Primary pions candidates pt ",500,0,10);
496 fPtPion->GetXaxis()->SetTitle(
"GeV/c");
497 fPtPion->GetYaxis()->SetTitle(
"Entries");
501 fEjet =
new TH1F(
"ejet",
"UA1 algorithm jet energy distribution",1000,0,500);
502 fPhijet =
new TH1F(
"Phijet",
"UA1 algorithm jet #phi distribution", 200,-7,7);
503 fEtaJet =
new TH1F(
"Etajet",
"UA1 algorithm jet #eta distribution", 200,-7,7);
504 fPtJet =
new TH1F(
"PtJet",
"UA1 algorithm jet Pt distribution",1000,0,500);
510 theMCFF =
new TH1F(
"FragFuncMC",
"Fragmentation function in MC for FC ",100,0,10);
511 fResZ =
new TH1F(
"FragFunc",
"Fragmentation function ",50,0,1);
512 fResZBkg =
new TH1F(
"FragFuncBkg",
"Fragmentation function background",50,0,1);
528 if((invM>=1.7 && invM<=1.8) || (invM>=1.92 && invM<=2.19)){
530 if ((invMDStar-invM)<=0.14732 && (invMDStar-invM)>=0.14352) {
533 if(dPhi>=-0.4 && dPhi<=0.4){
534 Double_t zFragBkg = (TMath::Cos(dPhi)*dStarMomBkg)/EGjet;
535 fResZBkg->Fill(TMath::Abs(zFragBkg));
556 if (!mcPart)
return zMC2;
557 if (!mcArray)
return zMC2;
560 for (
Int_t iPart=0; iPart<mcArray->GetEntriesFast(); iPart++) {
561 AliAODMCParticle* Part =
dynamic_cast<AliAODMCParticle*
>(mcArray->At(iPart));
563 AliWarning(
"MC Particle not found in tree, skipping");
568 if(iPart == mcLabel)
continue;
569 if(iPart <= 8)
continue;
572 Int_t PDGCode = Part->GetPdgCode();
579 if(TMath::Abs(PDGCode)== 2212 && x<3 && y<3)
continue;
580 if(TMath::Abs(x)>30 || TMath::Abs(y)>30 || TMath::Abs(z)>30 )
continue;
581 if(TMath::Abs(PDGCode)!=211 && TMath::Abs(PDGCode)!=321 && TMath::Abs(PDGCode)!=11 && TMath::Abs(PDGCode)!=13 && TMath::Abs(PDGCode)!=2212)
continue;
588 daug0 = Part->GetDaughter(0);
591 AliAODMCParticle* tdaug =
dynamic_cast<AliAODMCParticle*
>(mcArray->At(daug0));
598 if(TMath::Abs(xd)<3 || TMath::Abs(yd)<3)
continue;
600 Bool_t AliceAcc = (TMath::Abs(Part->Eta()) <= 0.9);
601 if(!AliceAcc)
continue;
607 PhiLeading = Part->Phi();
608 EtaLeading = Part->Eta();
609 PtLeading = Part->Pt();
618 for (
Int_t iiPart=0; iiPart<mcArray->GetEntriesFast(); iiPart++) {
619 AliAODMCParticle* tPart =
dynamic_cast<AliAODMCParticle*
>(mcArray->At(iiPart));
621 AliWarning(
"MC Particle not found in tree, skipping");
625 if(iiPart == counter)
continue;
626 if(iiPart == mcLabel)
continue;
627 if(iiPart <= 8)
continue;
630 Int_t PDGCode = tPart->GetPdgCode();
637 if(TMath::Abs(PDGCode)== 2212 && (x<3 && y<3))
continue;
638 if(TMath::Abs(x)>30 || TMath::Abs(y)>30 || TMath::Abs(z)>30 )
continue;
639 if(TMath::Abs(PDGCode)!=211 && TMath::Abs(PDGCode)!=321 && TMath::Abs(PDGCode)!=11 && TMath::Abs(PDGCode)!=13 && TMath::Abs(PDGCode)!=2212)
continue;
647 daug0 = tPart->GetDaughter(0);
650 AliAODMCParticle* tdaug =
dynamic_cast<AliAODMCParticle*
>(mcArray->At(daug0));
657 if(TMath::Abs(xd)<3 && TMath::Abs(yd)<3)
continue;
659 if(tPart->Pt()<0.07)
continue;
660 Bool_t AliceAcc = (TMath::Abs(tPart->Eta()) <= 0.9);
661 if(!AliceAcc)
continue;
666 Double_t DphiMClead = PhiLeading-PhiMCp;
668 if(DphiMClead<=-(TMath::Pi())/2) DphiMClead = DphiMClead+2*(TMath::Pi());
669 if(DphiMClead>(3*(TMath::Pi()))/2) DphiMClead = DphiMClead-2*(TMath::Pi());
671 Double_t deta = (EtaLeading-EtaMCp);
673 Double_t radius = TMath::Sqrt((DphiMClead*DphiMClead)+(deta*deta));
675 if(radius>0.4)
continue;
676 if(tPart->Charge()==0)
continue;
678 jetEnergy = jetEnergy+(tPart->E());
681 jetEnergy = jetEnergy + leading;
684 Double_t dPhi = PhiLeading - (mcPart->Phi());
687 if(dPhi<=-(TMath::Pi())/2) dPhi = dPhi+2*(TMath::Pi());
688 if(dPhi>(3*(TMath::Pi()))/2) dPhi = dPhi-2*(TMath::Pi());
690 zMC2 = (TMath::Cos(dPhi)*(mcPart->P()))/jetEnergy;
Double_t DeltaInvMass() const
virtual void UserExec(Option_t *option)
Int_t MatchToMC(Int_t pdgabs, Int_t pdgabs2prong, Int_t *pdgDg, Int_t *pdgDg2prong, TClonesArray *mcArray, Bool_t isV0=kFALSE) const
AliAnalysisTaskSEDStarJets()
AliRDHFCutsDStartoKpipi * fCuts
Bool_t fUseMCInfo
Charge fraction correction UA1 algorithm.
Bool_t DefineHistoFroAnalysis()
inizializations
virtual ~AliAnalysisTaskSEDStarJets()
AliAODTrack * GetBachelor() const
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel, AliAODEvent *aod)
Bool_t fRequireNormalization
Use MC info.
double FillMCFF(AliAODMCParticle *mcPart, TClonesArray *mcArray, Int_t mcLabel)
MC FF.
virtual void Terminate(Option_t *)
virtual Bool_t IsInFiducialAcceptance(Double_t pt, Double_t y) const
TList * fOutput
normalization
Double_t InvMassD0() const
Double_t InvMassDstarKpipi() const
virtual void UserCreateOutputObjects()
AliAODRecoDecayHF2Prong * Get2Prong() const
void SideBandBackground(Double_t finvM, Double_t finvMDStar, Double_t dStarMomBkg, Double_t fejet, Double_t ejet)
side band background eval
TList * OpenFile(const char *fname)