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)
77 for(
Int_t i=0;i<5;i++){
81 SetMakeGeneralHistograms(kTRUE);
82 DefineOutput(1, TList::Class());
83 DefineOutput(2, TTree::Class());
84 DefineOutput(3, TTree::Class());
97 fSharedFractionPtMin(0.5),
102 fhDetJetPt_Matched(0x0),
103 fTreeRecursive_Det(0),
104 fTreeRecursive_True(0)
107 for(
Int_t i=0;i<5;i++){
112 DefineOutput(1, TList::Class());
113 DefineOutput(2, TTree::Class());
114 DefineOutput(3, TTree::Class());
130 Bool_t oldStatus = TH1::AddDirectoryStatus();
131 TH1::AddDirectory(kFALSE);
132 TH1::AddDirectory(oldStatus);
134 const char* nameoutput = GetOutputSlot(2)->GetContainer()->GetName();
136 const char* nameoutput2 = GetOutputSlot(3)->GetContainer()->GetName();
139 const Int_t intBranches = 5;
141 std::vector<TString> fShapesVarNames_Det(intBranches), fShapesVarNames_True(intBranches);
144 fShapesVarNames_Det[0] =
"Pt";
145 fShapesVarNames_Det[1] =
"Z";
146 fShapesVarNames_Det[2] =
"Theta";
147 fShapesVarNames_Det[3] =
"N";
148 fShapesVarNames_Det[4] =
"ParentPt";
149 fShapesVarNames_True[0] =
"Pt_Truth";
150 fShapesVarNames_True[1] =
"Z_Truth";
151 fShapesVarNames_True[2] =
"Theta_Truth";
152 fShapesVarNames_True[3] =
"N_Truth";
153 fShapesVarNames_True[4] =
"ParentPt_Truth";
155 for(
Int_t ivar=0; ivar < intBranches; ivar++){
156 cout<<
"looping over variables"<<endl;
161 fhJetPt=
new TH1F(
"fhJetPt",
"Jet Pt",1500,-0.5,149.5 );
163 fhJetPhi=
new TH1F(
"fhJetPhi",
"Jet Phi",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
165 fhJetEta=
new TH1F(
"fhJetEta",
"Jet Eta",100,-2,2);
198 JetCont->ResetCurrentID();
202 else JetPt_ForThreshold = Jet1->
Pt();
209 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
210 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
231 Bool_t JetsMatched = kFALSE;
233 JetContHybridS->ResetCurrentID();
234 JetContHybridUS->ResetCurrentID();
235 JetContPythDet->ResetCurrentID();
236 JetContPythTrue->ResetCurrentID();
240 else JetPtThreshold=JetHybridS->
Pt()-(
GetRhoVal(0)*JetHybridS->
Area());
241 if ( (!JetHybridS) || (JetPtThreshold<
fPtThreshold))
continue;
244 JetHybridUS = JetContHybridUS->
GetJet(i);
245 if (!JetHybridUS)
continue;
251 if(JetNumber==-1)
continue;
252 JetHybridUS=JetContHybridUS->
GetJet(JetNumber);
258 Printf(
"Unsubtracted embedded jet does not exist, returning");
261 if (!JetPythDet)
continue;
262 UInt_t rejectionReason = 0;
263 if (!(JetContPythDet->
AcceptJet(JetPythDet,rejectionReason)))
continue;
266 if(!JetPythTrue)
continue;
272 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
273 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
293 Bool_t JetsMatched = kFALSE;
295 JetContPythDet->ResetCurrentID();
296 JetContPythTrue->ResetCurrentID();
300 else JetPtThreshold=JetPythDet->
Pt()-(
GetRhoVal(0)*JetPythDet->
Area());
301 if ( (!JetPythDet) || (JetPtThreshold<
fPtThreshold))
continue;
311 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
312 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
329 std::vector<fastjet::PseudoJet> fInputVectors;
330 fInputVectors.clear();
331 fastjet::PseudoJet PseudoTracks;
336 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
338 PseudoTracks.reset(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
339 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
340 fInputVectors.push_back(PseudoTracks);
346 fastjet::JetAlgorithm jetalgo(fastjet::antikt_algorithm);
348 jetalgo=fastjet::kt_algorithm ;}
351 jetalgo=fastjet::cambridge_algorithm;
354 jetalgo=fastjet::antikt_algorithm;
357 fastjet::JetDefinition fJetDef(jetalgo, 1., static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
360 fastjet::ClusterSequence fClustSeqSA(fInputVectors, fJetDef);
361 std::vector<fastjet::PseudoJet> fOutputJets;
363 fOutputJets=fClustSeqSA.inclusive_jets(0);
365 fastjet::PseudoJet jj;
366 fastjet::PseudoJet j1;
367 fastjet::PseudoJet j2;
371 while(jj.has_parents(j1,j2)){
373 if(j1.perp() < j2.perp())
swap(j1,j2);
374 double delta_R=j1.delta_R(j2);
375 double z=j2.perp()/(j1.perp()+j2.perp());
395 }
catch (fastjet::Error) {
396 AliError(
" [w] FJ Exception caught.");
424 const char * njetsData,
425 const char * njetsTrue,
426 const char * njetsDet,
427 const char * njetsHybridUs,
428 const char * njetsHybridS,
430 const char * nrhoBase,
431 const char * ntracksData,
432 const char * ntracksTrue,
433 const char * ntracksDet,
434 const char * ntracksHybridUs,
435 const char * ntracksHybridS,
451 ::Error(
"AddTaskRecursiveSoftDrop",
"No analysis manager found.");
455 ismc = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE;
459 if (!mgr->GetInputEventHandler())
461 ::Error(
"AliAnalysisTaskRecursiveSoftDrop",
"This task requires an input event handler");
469 wagonName1 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%s",njetsData,trigClass.Data(),tag.Data());
470 wagonName2 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_Det",njetsData,trigClass.Data(),tag.Data());
471 wagonName3 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_True",njetsData,trigClass.Data(),tag.Data());
474 wagonName1 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%s",njetsHybridS,trigClass.Data(),tag.Data());
475 wagonName2 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_Det",njetsHybridS,trigClass.Data(),tag.Data());
476 wagonName3 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_True",njetsHybridS,trigClass.Data(),tag.Data());
479 wagonName1 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%s",njetsDet,trigClass.Data(),tag.Data());
480 wagonName2 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_Det",njetsDet,trigClass.Data(),tag.Data());
481 wagonName3 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_True",njetsDet,trigClass.Data(),tag.Data());
486 task->SetJetShapeSub(jetShapeSub);
487 task->SetJetType(fjetType);
488 task->SetJetRadius(R);
498 trackContDet = task->AddParticleContainer(ntracksDet);
499 trackContTrue = task->AddMCParticleContainer(ntracksTrue);
500 trackContHybridS = task->AddParticleContainer(ntracksHybridS);
501 trackContHybridUs = task->AddParticleContainer(ntracksHybridUs);
504 trackContDet = task->AddParticleContainer(ntracksDet);
505 trackContTrue = task->AddMCParticleContainer(ntracksTrue);
515 JetContData = task->AddJetContainer(njetsData,strType,R);
526 JetContHybridS = task->AddJetContainer(njetsHybridS,strType,R);
535 JetContHybridUs = task->AddJetContainer(njetsHybridUs,strType,R);
536 if(JetContHybridUs) {
544 JetContDet = task->AddJetContainer(njetsDet,strType,R);
553 JetContTrue = task->AddJetContainer(njetsTrue,strType,R);
565 JetContDet = task->AddJetContainer(njetsDet,strType,R);
574 JetContTrue = task->AddJetContainer(njetsTrue,strType,R);
585 task->SetCaloTriggerPatchInfoName(kEmcalTriggers.Data());
586 task->SetCentralityEstimator(CentEst);
587 task->SelectCollisionCandidates(pSel);
588 task->SetUseAliAnaUtils(kFALSE);
593 mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer() );
601 contName1 +=
"_Embedded";
602 contName2 +=
"_Embedded";
603 contName2 +=
"_Embedded";
608 TString outputfile = Form(
"%s",AliAnalysisManager::GetCommonFileName());
609 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contName1.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
610 mgr->ConnectOutput(task,1,coutput1);
611 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(contName2.Data(), TTree::Class(),AliAnalysisManager::kOutputContainer,outputfile);
612 mgr->ConnectOutput(task,2,coutput2);
613 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(contName3.Data(), TTree::Class(),AliAnalysisManager::kOutputContainer,outputfile);
614 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.
AliEmcalJet * GetJet(Int_t i) const