7 #include <TClonesArray.h> 12 #include <THnSparse.h> 15 #include <TLorentzVector.h> 21 #include <AliAnalysisDataSlot.h> 22 #include <AliAnalysisDataContainer.h> 25 #include "TMatrixDSym.h" 26 #include "TMatrixDSymEigen.h" 29 #include "AliVCluster.h" 30 #include "AliVTrack.h" 35 #include "AliMCEvent.h" 36 #include "AliGenPythiaEventHeader.h" 37 #include "AliAODMCHeader.h" 38 #include "AliMCEvent.h" 39 #include "AliAnalysisManager.h" 46 #include "AliAODEvent.h" 67 fSharedFractionPtMin(0.5),
72 fhDetJetPt_Matched(0x0),
73 fTreeRecursive_Det(0),
74 fTreeRecursive_True(0),
80 for(
Int_t i=0;i<5;i++){
84 SetMakeGeneralHistograms(kTRUE);
85 DefineOutput(1, TList::Class());
86 DefineOutput(2, TTree::Class());
87 DefineOutput(3, TTree::Class());
100 fSharedFractionPtMin(0.5),
101 fReclusteringAlgo(0),
105 fhDetJetPt_Matched(0x0),
106 fTreeRecursive_Det(0),
107 fTreeRecursive_True(0),
109 fAddMedScatPtFrac(1),
113 for(
Int_t i=0;i<5;i++){
118 DefineOutput(1, TList::Class());
119 DefineOutput(2, TTree::Class());
120 DefineOutput(3, TTree::Class());
136 Bool_t oldStatus = TH1::AddDirectoryStatus();
137 TH1::AddDirectory(kFALSE);
138 TH1::AddDirectory(oldStatus);
140 const char* nameoutput = GetOutputSlot(2)->GetContainer()->GetName();
142 const char* nameoutput2 = GetOutputSlot(3)->GetContainer()->GetName();
145 const Int_t intBranches = 5;
147 std::vector<TString> fShapesVarNames_Det(intBranches), fShapesVarNames_True(intBranches);
150 fShapesVarNames_Det[0] =
"Pt";
151 fShapesVarNames_Det[1] =
"Z";
152 fShapesVarNames_Det[2] =
"Theta";
153 fShapesVarNames_Det[3] =
"N";
154 fShapesVarNames_Det[4] =
"ParentPt";
155 fShapesVarNames_True[0] =
"Pt_Truth";
156 fShapesVarNames_True[1] =
"Z_Truth";
157 fShapesVarNames_True[2] =
"Theta_Truth";
158 fShapesVarNames_True[3] =
"N_Truth";
159 fShapesVarNames_True[4] =
"ParentPt_Truth";
161 for(
Int_t ivar=0; ivar < intBranches; ivar++){
162 cout<<
"looping over variables"<<endl;
167 fhJetPt=
new TH1F(
"fhJetPt",
"Jet Pt",1500,-0.5,149.5 );
169 fhJetPhi=
new TH1F(
"fhJetPhi",
"Jet Phi",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
171 fhJetEta=
new TH1F(
"fhJetEta",
"Jet Eta",100,-2,2);
204 JetCont->ResetCurrentID();
208 else JetPt_ForThreshold = Jet1->
Pt();
215 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
216 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
237 Bool_t JetsMatched = kFALSE;
239 JetContHybridS->ResetCurrentID();
240 JetContHybridUS->ResetCurrentID();
241 JetContPythDet->ResetCurrentID();
242 JetContPythTrue->ResetCurrentID();
246 else JetPtThreshold=JetHybridS->
Pt()-(
GetRhoVal(0)*JetHybridS->
Area());
247 if ( (!JetHybridS) || (JetPtThreshold<
fPtThreshold))
continue;
250 JetHybridUS = JetContHybridUS->
GetJet(i);
251 if (!JetHybridUS)
continue;
257 if(JetNumber==-1)
continue;
258 JetHybridUS=JetContHybridUS->
GetJet(JetNumber);
264 Printf(
"Unsubtracted embedded jet does not exist, returning");
267 if (!JetPythDet)
continue;
268 UInt_t rejectionReason = 0;
269 if (!(JetContPythDet->
AcceptJet(JetPythDet,rejectionReason)))
continue;
272 if(!JetPythTrue)
continue;
278 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
279 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
299 Bool_t JetsMatched = kFALSE;
301 JetContPythDet->ResetCurrentID();
302 JetContPythTrue->ResetCurrentID();
306 else JetPtThreshold=JetPythDet->
Pt()-(
GetRhoVal(0)*JetPythDet->
Area());
307 if ( (!JetPythDet) || (JetPtThreshold<
fPtThreshold))
continue;
317 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
318 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
335 std::vector<fastjet::PseudoJet> fInputVectors;
336 fInputVectors.clear();
337 fastjet::PseudoJet PseudoTracks;
342 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
344 PseudoTracks.reset(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
345 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
346 fInputVectors.push_back(PseudoTracks);
351 TRandom3 rand1(0),rand2(0);
352 Double_t randN1 = 0.4*0.4*rand1.Rndm();
353 Double_t randN2 = 2*TMath::Pi()*rand2.Rndm();
354 Double_t phi_rand = (fJet->
Phi())+TMath::Sqrt(randN1)*TMath::Sin(randN2);
355 Double_t eta_rand = (fJet->
Eta())+TMath::Sqrt(randN1)*TMath::Cos(randN2);
357 PseudoTracks.reset(fAddMedScatPt*TMath::Cos(phi_rand),fAddMedScatPt*TMath::Sin(phi_rand),fAddMedScatPt/TMath::Tan(eta_rand),fAddMedScatPt);
358 fInputVectors.push_back(PseudoTracks);
364 fastjet::JetAlgorithm jetalgo(fastjet::antikt_algorithm);
366 jetalgo=fastjet::kt_algorithm ;}
369 jetalgo=fastjet::cambridge_algorithm;
372 jetalgo=fastjet::antikt_algorithm;
375 fastjet::JetDefinition fJetDef(jetalgo, 1., static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
378 fastjet::ClusterSequence fClustSeqSA(fInputVectors, fJetDef);
379 std::vector<fastjet::PseudoJet> fOutputJets;
381 fOutputJets=fClustSeqSA.inclusive_jets(0);
383 fastjet::PseudoJet jj;
384 fastjet::PseudoJet j1;
385 fastjet::PseudoJet j2;
389 while(jj.has_parents(j1,j2)){
391 if(j1.perp() < j2.perp())
swap(j1,j2);
392 double delta_R=j1.delta_R(j2);
393 double z=j2.perp()/(j1.perp()+j2.perp());
413 }
catch (fastjet::Error) {
414 AliError(
" [w] FJ Exception caught.");
442 const char * njetsData,
443 const char * njetsTrue,
444 const char * njetsDet,
445 const char * njetsHybridUs,
446 const char * njetsHybridS,
448 const char * nrhoBase,
449 const char * ntracksData,
450 const char * ntracksTrue,
451 const char * ntracksDet,
452 const char * ntracksHybridUs,
453 const char * ntracksHybridS,
469 ::Error(
"AddTaskRecursiveSoftDrop",
"No analysis manager found.");
473 ismc = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE;
477 if (!mgr->GetInputEventHandler())
479 ::Error(
"AliAnalysisTaskRecursiveSoftDrop",
"This task requires an input event handler");
487 wagonName1 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%s",njetsData,trigClass.Data(),tag.Data());
488 wagonName2 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_Det",njetsData,trigClass.Data(),tag.Data());
489 wagonName3 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_True",njetsData,trigClass.Data(),tag.Data());
492 wagonName1 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%s",njetsHybridS,trigClass.Data(),tag.Data());
493 wagonName2 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_Det",njetsHybridS,trigClass.Data(),tag.Data());
494 wagonName3 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_True",njetsHybridS,trigClass.Data(),tag.Data());
497 wagonName1 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%s",njetsDet,trigClass.Data(),tag.Data());
498 wagonName2 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_Det",njetsDet,trigClass.Data(),tag.Data());
499 wagonName3 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_True",njetsDet,trigClass.Data(),tag.Data());
504 task->SetJetShapeSub(jetShapeSub);
505 task->SetJetType(fjetType);
506 task->SetJetRadius(R);
516 trackContDet = task->AddParticleContainer(ntracksDet);
517 trackContTrue = task->AddMCParticleContainer(ntracksTrue);
518 trackContHybridS = task->AddParticleContainer(ntracksHybridS);
519 trackContHybridUs = task->AddParticleContainer(ntracksHybridUs);
522 trackContDet = task->AddParticleContainer(ntracksDet);
523 trackContTrue = task->AddMCParticleContainer(ntracksTrue);
533 JetContData = task->AddJetContainer(njetsData,strType,R);
544 JetContHybridS = task->AddJetContainer(njetsHybridS,strType,R);
553 JetContHybridUs = task->AddJetContainer(njetsHybridUs,strType,R);
554 if(JetContHybridUs) {
562 JetContDet = task->AddJetContainer(njetsDet,strType,R);
571 JetContTrue = task->AddJetContainer(njetsTrue,strType,R);
583 JetContDet = task->AddJetContainer(njetsDet,strType,R);
592 JetContTrue = task->AddJetContainer(njetsTrue,strType,R);
603 task->SetCaloTriggerPatchInfoName(kEmcalTriggers.Data());
604 task->SetCentralityEstimator(CentEst);
605 task->SelectCollisionCandidates(pSel);
606 task->SetUseAliAnaUtils(kFALSE);
611 mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer() );
619 contName1 +=
"_Embedded";
620 contName2 +=
"_Embedded";
621 contName2 +=
"_Embedded";
626 TString outputfile = Form(
"%s",AliAnalysisManager::GetCommonFileName());
627 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contName1.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
628 mgr->ConnectOutput(task,1,coutput1);
629 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(contName2.Data(), TTree::Class(),AliAnalysisManager::kOutputContainer,outputfile);
630 mgr->ConnectOutput(task,2,coutput2);
631 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(contName3.Data(), TTree::Class(),AliAnalysisManager::kOutputContainer,outputfile);
632 mgr->ConnectOutput(task,3,coutput3);
void Terminate(Option_t *option)
void SetAreaEmcCut(Double_t a=0.99)
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
AliEmcalJet * ClosestJet() const
AliJetContainer * GetJetContainer(Int_t i=0) const
void RecursiveParents(AliEmcalJet *fJet, AliJetContainer *fJetCont, Bool_t bTruth)
virtual Bool_t AcceptJet(Int_t i, UInt_t &rejectionReason) const
Bool_t RetrieveEventObjects()
void SetPercAreaCut(Float_t p)
Bool_t FillHistograms()
Function filling histograms.
Container for particles within the EMCAL framework.
Double_t fShapesVar_True[5]
Int_t TrackAt(Int_t idx) const
UShort_t GetNumberOfTracks() const
Double_t fShapesVar_Det[5]
void SetRhoName(const char *n)
TPC fiducial acceptance (each eta edge narrowed by jet R)
AliParticleContainer * GetParticleContainer() const
void SetJetRadius(Float_t r)
AliAnalysisTaskRecursiveSoftDrop()
Bool_t Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
static AliAnalysisTaskRecursiveSoftDrop * AddTaskRecursiveSoftDrop(const char *njetsData, const char *njetsTrue, const char *njetsDet, const char *njetsHybridUs, const char *njetsHybridS, const Double_t R, const char *nrhoBase, const char *ntracksData, const char *ntracksTrue, const char *ntracksDet, const char *ntracksHybridUs, const char *ntracksHybridS, const char *type, const char *CentEst, Int_t pSel, TString trigClass="", TString kEmcalTriggers="", TString tag="", AliAnalysisTaskRecursiveSoftDrop::JetShapeSub jetShapeSub=JetShapeSub::kConstSub, AliAnalysisTaskRecursiveSoftDrop::JetType fjetType=JetType::kData)
virtual ~AliAnalysisTaskRecursiveSoftDrop()
TH1F * fhDetJetPt_Matched
Float_t fSharedFractionPtMin
Double_t fCent
!event centrality
void UserCreateOutputObjects()
AliEmcalJet * GetNextAcceptJet()
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
void ConnectParticleContainer(AliParticleContainer *c)
Double_t GetRhoVal(Int_t i=0) const
AliEmcalList * fOutput
!output list
TTree * fTreeRecursive_Det
TTree * fTreeRecursive_True
void SetMakeGeneralHistograms(Bool_t g)
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
void UserCreateOutputObjects()
Main initialization function on the worker.
void SetJetAcceptanceType(UInt_t type)
Container for jet within the EMCAL jet framework.
Float_t fAddMedScatPtFrac
AliEmcalJet * GetJet(Int_t i) const