24 #include <TDatabasePDG.h>
25 #include <TParticle.h>
32 #include "AliMCEvent.h"
33 #include "AliAODMCHeader.h"
34 #include "AliAODHandler.h"
35 #include "AliAnalysisManager.h"
37 #include "AliAODVertex.h"
38 #include "AliAODJet.h"
39 #include "AliAODRecoDecay.h"
42 #include "AliESDtrack.h"
43 #include "AliAODMCParticle.h"
55 fRequireNormalization(kTRUE),
89 fRequireNormalization(kTRUE),
117 Info(
"AliAnalysisTaskSEDStarJets",
"Calling Constructor");
119 DefineOutput(1,TList::Class());
120 DefineOutput(2,AliRDHFCutsDStartoKpipi::Class());
128 Info(
"~AliAnalysisTaskSEDStarJets",
"Calling Destructor");
166 if(fDebug > 1) printf(
"AnalysisTaskSEDStarJets::Init() \n");
169 PostData(2,copyfCuts);
179 Error(
"UserExec",
"NO EVENT FOUND!");
184 AliInfo(Form(
"Event %d",
fEvents));
190 TClonesArray *arrayDStartoD0pi=0;
192 if(!aodEvent && AODEvent() && IsStandardAOD()) {
195 aodEvent =
dynamic_cast<AliAODEvent*
> (AODEvent());
198 AliAODHandler* aodHandler = (AliAODHandler*)
199 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
200 if(aodHandler->GetExtensions()) {
201 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
"AliAOD.VertexingHF.root");
203 arrayDStartoD0pi=(TClonesArray*)aodFromExt->GetList()->FindObject(
"Dstar");
206 arrayDStartoD0pi=(TClonesArray*)aodEvent->GetList()->FindObject(
"Dstar");
209 if (!arrayDStartoD0pi){
210 AliInfo(
"Could not find array of HF vertices, skipping the event");
212 }
else AliDebug(2, Form(
"Found %d vertices",arrayDStartoD0pi->GetEntriesFast()));
216 if(!aodEvent->GetPrimaryVertex() || TMath::Abs(aodEvent->GetMagneticField())<0.001)
return;
219 TClonesArray *arrayofJets = (TClonesArray*)aodEvent->GetJets();
220 if(aodEvent->GetNJets()<=0)
return;
223 Int_t icountReco = 0;
231 Int_t pdgDgDStartoD0pi[2]={421,211};
232 Int_t pdgDgD0toKpi[2]={321,211};
241 for (
Int_t iJets = 0; iJets<arrayofJets->GetEntriesFast(); iJets++) {
242 AliAODJet* jet = (AliAODJet*)arrayofJets->At(iJets);
262 for (
Int_t iDStartoD0pi = 0; iDStartoD0pi<arrayDStartoD0pi->GetEntriesFast(); iDStartoD0pi++) {
272 Int_t mcLabel = -9999;
276 TClonesArray* mcArray =
dynamic_cast<TClonesArray*
>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
278 printf(
"AliAnalysisTaskSEDStarSpectra::UserExec: MC particles not found!\n");
281 mcLabel = dstarD0pi->
MatchToMC(413,421,pdgDgDStartoD0pi,pdgDgD0toKpi,mcArray);
283 if(mcLabel>=0) isDStar = 1;
286 AliAODMCParticle* mcPart =
dynamic_cast<AliAODMCParticle*
>(mcArray->At(mcLabel));
288 zMC=
FillMCFF(mcPart,mcArray,mcLabel);
294 AliAODTrack *track2 = (AliAODTrack*)dstarD0pi->
GetBachelor();
299 if(!isTkSelected)
continue;
304 if (!isSelected)
continue;
315 Double_t phiDStar = dstarD0pi->Phi();
316 Double_t phiD0 = theD0particle->Phi();
318 Double_t dPhiD0Dstar = phiD0 - phiDStar;
320 dPhi = phiJet - phiDStar;
323 if(dPhi<=-(TMath::Pi())/2) dPhi = dPhi+2*(TMath::Pi());
324 if(dPhi>(3*(TMath::Pi()))/2) dPhi = dPhi-2*(TMath::Pi());
326 Double_t corrFactorCharge = (ejet/100)*20;
327 EGjet = ejet + corrFactorCharge;
330 Double_t mPDGD0=TDatabasePDG::Instance()->GetParticle(421)->Mass();
331 if(finvM >= (mPDGD0-0.05) && finvM <=(mPDGD0+0.05)){
341 fDiff ->Fill(finvMDStar-finvM);
343 Double_t mPDGDstar=TDatabasePDG::Instance()->GetParticle(413)->Mass();
347 if (TMath::Abs(invmassDelta-(mPDGDstar-mPDGD0))<0.0019){
356 if(dPhi>=-jetCone && dPhi<=jetCone){
357 Double_t zFrag = (TMath::Cos(dPhi)*dStarMom)/EGjet;
358 fResZ->Fill(TMath::Abs(zFrag));
367 AliDebug(2, Form(
"Found %i Reco particles that are D*!!",icountReco));
379 Info(
"Terminate",
" terminate");
380 AliAnalysisTaskSE::Terminate();
384 printf(
"ERROR: fOutput not available\n");
393 fDiff =
dynamic_cast<TH1F*
>(
fOutput->FindObject(
"fDiff"));
398 fEjet =
dynamic_cast<TH1F*
>(
fOutput->FindObject(
"fEjet"));
401 fPhi =
dynamic_cast<TH1F*
>(
fOutput->FindObject(
"fPhi"));
402 fResZ =
dynamic_cast<TH1F*
>(
fOutput->FindObject(
"fResZ"));
414 Info(
"UserCreateOutputObjects",
"CreateOutputObjects of task %s\n", GetName());
430 fInvMass =
new TH1F(
"invMass",
"Kpi invariant mass distribution",1500,.5,3.5);
432 fInvMass->GetXaxis()->SetTitle(
"GeV/c");
433 fInvMass->GetYaxis()->SetTitle(
"Entries");
436 fDStar =
new TH1F(
"invMassDStar",
"DStar invariant mass after D0 cuts ",600,1.8,2.4);
438 fDStar->GetXaxis()->SetTitle(
"GeV/c");
439 fDStar->GetYaxis()->SetTitle(
"Entries");
442 fDiff =
new TH1F(
"Diff",
"M(kpipi)-M(kpi)",750,0.1,0.2);
443 fDiff->SetStats(kTRUE);
444 fDiff->GetXaxis()->SetTitle(
"M(kpipi)-M(kpi) GeV/c^2");
445 fDiff->GetYaxis()->SetTitle(
"Entries");
448 fDiffSideBand =
new TH1F(
"DiffSide",
"M(kpipi)-M(kpi) Side Band Background",750,0.1,0.2);
450 fDiffSideBand->GetXaxis()->SetTitle(
"M(kpipi)-M(Kpi) GeV/c^2");
454 fDStarMass =
new TH1F(
"RECODStar2",
"RECO DStar invariant mass distribution",750,1.5,2.5);
457 fTrueDiff =
new TH1F(
"dstar",
"True Reco diff",750,0,0.2);
461 ftrigger =
new TH1F(
"Normalization",
"Normalization factor for correlations",1,0,10);
466 fPhi =
new TH1F(
"phi",
"Delta phi between Jet axis and DStar ",25,-1.57,4.72);
467 fPhi->SetStats(kTRUE);
468 fPhi->GetXaxis()->SetTitle(
"#Delta #phi (rad)");
469 fPhi->GetYaxis()->SetTitle(
"Entries");
472 fDphiD0Dstar =
new TH1F(
"phiD0Dstar",
"Delta phi between D0 and DStar ",1000,-6.5,6.5);
475 fPhiBkg =
new TH1F(
"phiBkg",
"Delta phi between Jet axis and DStar background ",25,-1.57,4.72);
477 fPhiBkg->GetXaxis()->SetTitle(
"#Delta #phi (rad)");
478 fPhiBkg->GetYaxis()->SetTitle(
"Entries");
481 fRECOPtDStar =
new TH1F(
"RECODStar1",
"RECO DStar pt distribution",30,0,30);
488 fRECOPtBkg =
new TH1F(
"RECOptBkg",
"RECO pt distribution side bands",30,0,30);
495 fPtPion =
new TH1F(
"pionpt",
"Primary pions candidates pt ",500,0,10);
497 fPtPion->GetXaxis()->SetTitle(
"GeV/c");
498 fPtPion->GetYaxis()->SetTitle(
"Entries");
502 fEjet =
new TH1F(
"ejet",
"UA1 algorithm jet energy distribution",1000,0,500);
503 fPhijet =
new TH1F(
"Phijet",
"UA1 algorithm jet #phi distribution", 200,-7,7);
504 fEtaJet =
new TH1F(
"Etajet",
"UA1 algorithm jet #eta distribution", 200,-7,7);
505 fPtJet =
new TH1F(
"PtJet",
"UA1 algorithm jet Pt distribution",1000,0,500);
511 theMCFF =
new TH1F(
"FragFuncMC",
"Fragmentation function in MC for FC ",100,0,10);
512 fResZ =
new TH1F(
"FragFunc",
"Fragmentation function ",50,0,1);
513 fResZBkg =
new TH1F(
"FragFuncBkg",
"Fragmentation function background",50,0,1);
529 if((invM>=1.7 && invM<=1.8) || (invM>=1.92 && invM<=2.19)){
531 if ((invMDStar-invM)<=0.14732 && (invMDStar-invM)>=0.14352) {
534 if(dPhi>=-0.4 && dPhi<=0.4){
535 Double_t zFragBkg = (TMath::Cos(dPhi)*dStarMomBkg)/EGjet;
536 fResZBkg->Fill(TMath::Abs(zFragBkg));
557 if (!mcPart)
return zMC2;
558 if (!mcArray)
return zMC2;
561 for (
Int_t iPart=0; iPart<mcArray->GetEntriesFast(); iPart++) {
562 AliAODMCParticle* Part =
dynamic_cast<AliAODMCParticle*
>(mcArray->At(iPart));
564 AliWarning(
"MC Particle not found in tree, skipping");
569 if(iPart == mcLabel)
continue;
570 if(iPart <= 8)
continue;
573 Int_t PDGCode = Part->GetPdgCode();
580 if(TMath::Abs(PDGCode)== 2212 && x<3 && y<3)
continue;
581 if(TMath::Abs(x)>30 || TMath::Abs(y)>30 || TMath::Abs(z)>30 )
continue;
582 if(TMath::Abs(PDGCode)!=211 && TMath::Abs(PDGCode)!=321 && TMath::Abs(PDGCode)!=11 && TMath::Abs(PDGCode)!=13 && TMath::Abs(PDGCode)!=2212)
continue;
589 daug0 = Part->GetDaughter(0);
592 AliAODMCParticle* tdaug =
dynamic_cast<AliAODMCParticle*
>(mcArray->At(daug0));
599 if(TMath::Abs(xd)<3 || TMath::Abs(yd)<3)
continue;
601 Bool_t AliceAcc = (TMath::Abs(Part->Eta()) <= 0.9);
602 if(!AliceAcc)
continue;
608 PhiLeading = Part->Phi();
609 EtaLeading = Part->Eta();
610 PtLeading = Part->Pt();
619 for (
Int_t iiPart=0; iiPart<mcArray->GetEntriesFast(); iiPart++) {
620 AliAODMCParticle* tPart =
dynamic_cast<AliAODMCParticle*
>(mcArray->At(iiPart));
622 AliWarning(
"MC Particle not found in tree, skipping");
626 if(iiPart == counter)
continue;
627 if(iiPart == mcLabel)
continue;
628 if(iiPart <= 8)
continue;
631 Int_t PDGCode = tPart->GetPdgCode();
638 if(TMath::Abs(PDGCode)== 2212 && (x<3 && y<3))
continue;
639 if(TMath::Abs(x)>30 || TMath::Abs(y)>30 || TMath::Abs(z)>30 )
continue;
640 if(TMath::Abs(PDGCode)!=211 && TMath::Abs(PDGCode)!=321 && TMath::Abs(PDGCode)!=11 && TMath::Abs(PDGCode)!=13 && TMath::Abs(PDGCode)!=2212)
continue;
648 daug0 = tPart->GetDaughter(0);
651 AliAODMCParticle* tdaug =
dynamic_cast<AliAODMCParticle*
>(mcArray->At(daug0));
658 if(TMath::Abs(xd)<3 && TMath::Abs(yd)<3)
continue;
660 if(tPart->Pt()<0.07)
continue;
661 Bool_t AliceAcc = (TMath::Abs(tPart->Eta()) <= 0.9);
662 if(!AliceAcc)
continue;
667 Double_t DphiMClead = PhiLeading-PhiMCp;
669 if(DphiMClead<=-(TMath::Pi())/2) DphiMClead = DphiMClead+2*(TMath::Pi());
670 if(DphiMClead>(3*(TMath::Pi()))/2) DphiMClead = DphiMClead-2*(TMath::Pi());
672 Double_t deta = (EtaLeading-EtaMCp);
674 Double_t radius = TMath::Sqrt((DphiMClead*DphiMClead)+(deta*deta));
676 if(radius>0.4)
continue;
677 if(tPart->Charge()==0)
continue;
679 jetEnergy = jetEnergy+(tPart->E());
682 jetEnergy = jetEnergy + leading;
685 Double_t dPhi = PhiLeading - (mcPart->Phi());
688 if(dPhi<=-(TMath::Pi())/2) dPhi = dPhi+2*(TMath::Pi());
689 if(dPhi>(3*(TMath::Pi()))/2) dPhi = dPhi-2*(TMath::Pi());
691 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
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
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)