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),
71 fhDetJetPt_Matched(0x0),
72 fTreeRecursive_Det(0),
73 fTreeRecursive_True(0)
76 for(
Int_t i=0;i<4;i++){
80 SetMakeGeneralHistograms(kTRUE);
81 DefineOutput(1, TList::Class());
82 DefineOutput(2, TTree::Class());
83 DefineOutput(3, TTree::Class());
96 fSharedFractionPtMin(0.5),
100 fhDetJetPt_Matched(0x0),
101 fTreeRecursive_Det(0),
102 fTreeRecursive_True(0)
105 for(
Int_t i=0;i<4;i++){
110 DefineOutput(1, TList::Class());
111 DefineOutput(2, TTree::Class());
112 DefineOutput(3, TTree::Class());
128 Bool_t oldStatus = TH1::AddDirectoryStatus();
129 TH1::AddDirectory(kFALSE);
130 TH1::AddDirectory(oldStatus);
132 const char* nameoutput = GetOutputSlot(2)->GetContainer()->GetName();
134 const char* nameoutput2 = GetOutputSlot(3)->GetContainer()->GetName();
137 const Int_t intBranches = 4;
139 std::vector<TString> fShapesVarNames_Det(intBranches), fShapesVarNames_True(intBranches);
142 fShapesVarNames_Det[0] =
"Pt";
143 fShapesVarNames_Det[1] =
"Z";
144 fShapesVarNames_Det[2] =
"Theta";
145 fShapesVarNames_Det[3] =
"N";
146 fShapesVarNames_True[0] =
"Pt_Truth";
147 fShapesVarNames_True[1] =
"Z_Truth";
148 fShapesVarNames_True[2] =
"Theta_Truth";
149 fShapesVarNames_True[3] =
"N_Truth";
151 for(
Int_t ivar=0; ivar < intBranches; ivar++){
152 cout<<
"looping over variables"<<endl;
158 fhJetPt=
new TH1F(
"fhJetPt",
"Jet Pt",1500,-0.5,149.5 );
160 fhJetPhi=
new TH1F(
"fhJetPhi",
"Jet Phi",360 , -1.5*(TMath::Pi()), 1.5*(TMath::Pi()));
162 fhJetEta=
new TH1F(
"fhJetEta",
"Jet Eta",100,-2,2);
195 JetCont->ResetCurrentID();
199 else JetPt_ForThreshold = Jet1->
Pt();
206 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
207 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
228 Bool_t JetsMatched = kFALSE;
230 JetContHybridS->ResetCurrentID();
231 JetContHybridUS->ResetCurrentID();
232 JetContPythDet->ResetCurrentID();
233 JetContPythTrue->ResetCurrentID();
237 else JetPtThreshold=JetHybridS->
Pt()-(
GetRhoVal(0)*JetHybridS->
Area());
238 if ( (!JetHybridS) || (JetPtThreshold<
fPtThreshold))
continue;
241 JetHybridUS = JetContHybridUS->
GetJet(i);
242 if (!JetHybridUS)
continue;
248 if(JetNumber==-1)
continue;
249 JetHybridUS=JetContHybridUS->
GetJet(JetNumber);
255 Printf(
"Unsubtracted embedded jet does not exist, returning");
258 if (!JetPythDet)
continue;
259 UInt_t rejectionReason = 0;
260 if (!(JetContPythDet->
AcceptJet(JetPythDet,rejectionReason)))
continue;
263 if(!JetPythTrue)
continue;
269 if(JetPhi < -1*TMath::Pi()) JetPhi += (2*TMath::Pi());
270 else if (JetPhi > TMath::Pi()) JetPhi -= (2*TMath::Pi());
287 std::vector<fastjet::PseudoJet> fInputVectors;
288 fInputVectors.clear();
289 fastjet::PseudoJet PseudoTracks;
294 AliVParticle *fTrk = fJet->
TrackAt(i, fTrackCont->GetArray());
296 PseudoTracks.reset(fTrk->Px(), fTrk->Py(), fTrk->Pz(),fTrk->E());
297 PseudoTracks.set_user_index(fJet->
TrackAt(i)+100);
298 fInputVectors.push_back(PseudoTracks);
304 fastjet::JetAlgorithm jetalgo(fastjet::antikt_algorithm);
305 if(ReclusterAlgo==0){ xflagalgo=0.5;
306 jetalgo=fastjet::kt_algorithm ;}
308 if(ReclusterAlgo==1){ xflagalgo=1.5;
309 jetalgo=fastjet::cambridge_algorithm;
311 if(ReclusterAlgo==2){ xflagalgo=2.5;
312 jetalgo=fastjet::antikt_algorithm;
315 fastjet::JetDefinition fJetDef(jetalgo, 1., static_cast<fastjet::RecombinationScheme>(0), fastjet::BestFJ30 );
318 fastjet::ClusterSequence fClustSeqSA(fInputVectors, fJetDef);
319 std::vector<fastjet::PseudoJet> fOutputJets;
321 fOutputJets=fClustSeqSA.inclusive_jets(0);
323 fastjet::PseudoJet jj;
324 fastjet::PseudoJet j1;
325 fastjet::PseudoJet j2;
329 while(jj.has_parents(j1,j2)){
331 if(j1.perp() < j2.perp())
swap(j1,j2);
332 double delta_R=j1.delta_R(j2);
333 double z=j2.perp()/(j1.perp()+j2.perp());
351 }
catch (fastjet::Error) {
352 AliError(
" [w] FJ Exception caught.");
380 const char * njetsData,
381 const char * njetsTrue,
382 const char * njetsDet,
383 const char * njetsHybridUs,
384 const char * njetsHybridS,
386 const char * nrhoBase,
387 const char * ntracksData,
388 const char * ntracksTrue,
389 const char * ntracksDet,
390 const char * ntracksHybridUs,
391 const char * ntracksHybridS,
407 ::Error(
"AddTaskRecursiveSoftDrop",
"No analysis manager found.");
411 ismc = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE;
415 if (!mgr->GetInputEventHandler())
417 ::Error(
"AliAnalysisTaskRecursiveSoftDrop",
"This task requires an input event handler");
425 wagonName1 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%s",njetsData,trigClass.Data(),tag.Data());
426 wagonName2 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_Det",njetsData,trigClass.Data(),tag.Data());
427 wagonName3 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_True",njetsData,trigClass.Data(),tag.Data());
430 wagonName1 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%s",njetsHybridS,trigClass.Data(),tag.Data());
431 wagonName2 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_Det",njetsHybridS,trigClass.Data(),tag.Data());
432 wagonName3 = Form(
"AliAnalysisTaskRecursiveSoftDrop_%s_TC%s%sTree_True",njetsHybridS,trigClass.Data(),tag.Data());
437 task->SetJetShapeSub(jetShapeSub);
438 task->SetJetType(fjetType);
439 task->SetJetRadius(R);
447 trackContData = task->AddParticleContainer(ntracksData);
449 trackContDet = task->AddParticleContainer(ntracksDet);
450 trackContTrue = task->AddMCParticleContainer(ntracksTrue);
451 trackContHybridS = task->AddParticleContainer(ntracksHybridS);
452 trackContHybridUs = task->AddParticleContainer(ntracksHybridUs);
462 JetContData = task->AddJetContainer(njetsData,strType,R);
473 JetContHybridS = task->AddJetContainer(njetsHybridS,strType,R);
482 JetContHybridUs = task->AddJetContainer(njetsHybridUs,strType,R);
483 if(JetContHybridUs) {
491 JetContDet = task->AddJetContainer(njetsDet,strType,R);
500 JetContTrue = task->AddJetContainer(njetsTrue,strType,R);
511 task->SetCaloTriggerPatchInfoName(kEmcalTriggers.Data());
512 task->SetCentralityEstimator(CentEst);
513 task->SelectCollisionCandidates(pSel);
514 task->SetUseAliAnaUtils(kFALSE);
519 mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer() );
527 contName1 +=
"_Embedded";
528 contName2 +=
"_Embedded";
529 contName2 +=
"_Embedded";
534 TString outputfile = Form(
"%s",AliAnalysisManager::GetCommonFileName());
535 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contName1.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
536 mgr->ConnectOutput(task,1,coutput1);
537 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(contName2.Data(), TTree::Class(),AliAnalysisManager::kOutputContainer,outputfile);
538 mgr->ConnectOutput(task,2,coutput2);
539 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(contName3.Data(), TTree::Class(),AliAnalysisManager::kOutputContainer,outputfile);
540 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.
void RecursiveParents(AliEmcalJet *fJet, AliJetContainer *fJetCont, Int_t ReclusterAlgo, Bool_t bTruth)
AliEmcalJet * ClosestJet() const
AliJetContainer * GetJetContainer(Int_t i=0) const
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.
Int_t TrackAt(Int_t idx) const
UShort_t GetNumberOfTracks() const
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 fShapesVar_Det[4]
Double_t fShapesVar_True[4]
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 swap(AliEmcalContainerIndexMap< X, Y > &first, AliEmcalContainerIndexMap< X, Y > &second)
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