1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 #include "AliAnalysisTaskDiJets.h"
19 #include "AliAODEvent.h"
20 #include "AliAODJet.h"
21 #include "AliAODDiJet.h"
22 #include <TClonesArray.h>
23 #include <TLorentzVector.h>
27 ClassImp(AliAnalysisTaskDiJets)
29 ////////////////////////////////////////////////////////////////////////
31 AliAnalysisTaskDiJets::AliAnalysisTaskDiJets():
47 // Default constructor
50 //----------------------------------------------------------------------
51 AliAnalysisTaskDiJets::AliAnalysisTaskDiJets(const char* name):
52 AliAnalysisTaskSE(name),
67 // Default constructor
68 DefineOutput(1, TList::Class());
71 //----------------------------------------------------------------------
72 void AliAnalysisTaskDiJets::UserCreateOutputObjects()
74 // Create the output container
76 if (fDebug) printf("AnalysisTaskDiJets::CreateOutPutData() \n");
77 fDiJets = new TClonesArray("AliAODDiJet", 0);
79 fDiJets->SetName(Form("dijets_%s",fJetBranch.Data()));
80 AddAODBranch("TClonesArray", &fDiJets);
83 if (!fHistList) fHistList = new TList();
84 fHistList->SetOwner();
85 Float_t pi=TMath::Pi();
86 gStyle->SetPalette(1);
88 fH1DeltaPt = new TH1F("DeltaPt","Difference between the jets' Pt;#Deltap_{T} (GeV/c);Entries",150,0.,150.);
89 fH1DeltaPt->SetMarkerSize(0.6);
90 fH1DeltaPt->SetMarkerColor(4);
91 fH1DeltaPt->SetMarkerStyle(21);
92 fH1DeltaPt->SetOption("E");
94 fH1DeltaPhi = new TH1F("DeltaPhi","Difference in the azimuthal angle;#Delta#phi;Entries",100,0.,pi);
95 fH1DeltaPhi->SetMarkerSize(0.6);
96 fH1DeltaPhi->SetMarkerColor(4);
97 fH1DeltaPhi->SetMarkerStyle(21);
98 fH1DeltaPhi->SetOption("E");
100 fH1PhiImbal = new TH1F("PhiImb","Phi imbalance;#phi;Entries",100,-pi,pi);
101 fH1PhiImbal->SetMarkerSize(0.6);
102 fH1PhiImbal->SetMarkerColor(4);
103 fH1PhiImbal->SetMarkerStyle(21);
104 fH1PhiImbal->SetOption("E");
106 fH1Asym = new TH1F("Asym","Pt asymmetry;#Deltap_{T}/(p_{T,1}+p_{T,2});Entries",50,0.,1.);
107 fH1Asym->SetMarkerSize(0.6);
108 fH1Asym->SetMarkerColor(4);
109 fH1Asym->SetMarkerStyle(21);
110 fH1Asym->SetOption("E");
112 fH2Pt2vsPt1 = new TH2F("Pt2vsPt1","Pt2 versus Pt1;p_{T,1} (GeV/c);p_{T,2} (GeV/c)",250,0.,250.,250,0.,250.);
113 fH2Pt2vsPt1->SetOption("cont0");
115 fH2DifvsSum = new TH2F("DifvsSum","Pt difference vs Pt sum;p_{T,1}+p_{T,2} (GeV/c);#Deltap_{T} (GeV/c)",400,0.,400.,150,0.,150.);
116 fH2DifvsSum->SetOption("cont0");
118 fHistList->Add(fH1DeltaPt);
119 fHistList->Add(fH1DeltaPhi);
120 fHistList->Add(fH1PhiImbal);
121 fHistList->Add(fH1Asym);
122 fHistList->Add(fH2Pt2vsPt1);
123 fHistList->Add(fH2DifvsSum);
126 //----------------------------------------------------------------------
127 void AliAnalysisTaskDiJets::Init()
130 if (fDebug) printf("AnalysisTaskDiJets::Init() \n");
133 //----------------------------------------------------------------------
134 void AliAnalysisTaskDiJets::UserExec(Option_t */*option*/)
136 // Execute analysis for current event
138 if (fDiJets) fDiJets->Delete();
141 fAOD = dynamic_cast<AliAODEvent*> (InputEvent());
143 // We do not have an input AOD, look in the output
144 if (fDebug) printf("%s:%d No AOD event in the input\n",(char*)__FILE__,__LINE__);
150 if (fDebug) printf("%s:%d AODEvent not found in the Output",(char*)__FILE__,__LINE__);
155 TClonesArray* jets = (TClonesArray*) fAOD->FindListObject(fJetBranch.Data());
156 // N.B. if we take the aod from the output this is always
157 // empty and since it is the same as fDiJets
158 fDiJetsIn = (TClonesArray*) (fAOD->GetList()->FindObject("dijets"));
161 if (fDebug) printf("Found %d dijets in old list \n", fDiJetsIn->GetEntries());
162 AliAODJet* jj1, *jj2;
165 if (fDiJetsIn->GetEntries() > 0) {
166 testJ = (AliAODDiJet*) (fDiJetsIn->At(0));
174 Int_t nj = jets->GetEntriesFast();
175 if (fDebug) printf("There are %5d jets in the event \n", nj);
178 PostData(1, fHistList);
181 AliAODJet* jet1 = (AliAODJet*) (jets->At(0));
182 TLorentzVector v1 = *(jet1->MomentumVector());
183 AliAODJet* jet2 = (AliAODJet*) (jets->At(1));
184 TLorentzVector v2 = *(jet2->MomentumVector());
185 TLorentzVector v = v1 + v2;
187 Int_t ndi = fDiJets->GetEntriesFast();
188 TClonesArray &lref = *fDiJets;
189 new(lref[ndi]) AliAODDiJet(v);
190 AliAODDiJet* dijet = (AliAODDiJet*) (fDiJets->At(ndi));
191 dijet->SetJetRefs(jet1, jet2);
192 fH1DeltaPhi->Fill(dijet->DeltaPhi());
193 fH1PhiImbal->Fill(dijet->PhiImbalance());
197 fH1DeltaPt->Fill(jet1->Pt()-jet2->Pt());
198 fH1Asym->Fill((jet1->Pt()-jet2->Pt())/(jet1->Pt()+jet2->Pt()));
199 fH2Pt2vsPt1->Fill(jet1->Pt(),jet2->Pt());
200 fH2DifvsSum->Fill(jet1->Pt()+jet2->Pt(),jet1->Pt()-jet2->Pt());
202 PostData(1, fHistList);
206 //----------------------------------------------------------------------
207 void AliAnalysisTaskDiJets::Terminate(Option_t */*option*/)
209 // Terminate analysis
211 if (fDebug) printf("AnalysisDiJets: Terminate() \n");