]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/AliAnalysisTaskJpsiCorrelation.cxx
Change Mult binning scheme
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliAnalysisTaskJpsiCorrelation.cxx
CommitLineData
151ddcbc 1/*************************************************************************
2* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
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**************************************************************************/
15
16///////////////////////////////////////////////////////////////////////////
17// //
18// Analysis task for J/psi - hadron correlations //
19// //
20///////////////////////////////////////////////////////////////////////////
21
22#include <iostream>
23using namespace std;
24
25#include <TChain.h>
26#include <TH1D.h>
27
28#include <AliCFContainer.h>
29#include <AliInputEventHandler.h>
30#include <AliESDInputHandler.h>
31#include <AliAODInputHandler.h>
32#include <AliAnalysisManager.h>
33#include <AliVEvent.h>
34#include <AliTriggerAnalysis.h>
35#include <AliESDtrackCuts.h>
36
37#include "AliDielectron.h"
38#include "AliDielectronHistos.h"
39#include "AliDielectronCF.h"
40#include "AliDielectronMC.h"
41#include "AliAnalysisTaskMultiDielectron.h"
42
43#include "AliAnalysisTaskJpsiCorrelation.h"
44ClassImp(AliAnalysisTaskJpsiCorrelation)
45
46//_________________________________________________________________________________
47AliAnalysisTaskJpsiCorrelation::AliAnalysisTaskJpsiCorrelation() :
48 AliAnalysisTaskMultiDielectron(),
49 fTreesList(),
50 fESD(0x0),
51 fESDTrackCuts(0x0),
52 fIdxDielectron(0),
53 fNjpsiPerEvent(0),
54 fSign(0),
55 fJpsiM(0.0),
56 fJpsiPt(0.0),
57 fJpsiPhi(0.0),
58 fJpsiTheta(0.0),
59 fJpsiY(0.0),
60 fTrackPt(0.0),
61 fTrackPhi(0.0),
62 fTrackTheta(0.0),
63 fTrackEta(0.0),
64 fMultiDieleOutputs(0)
65{
66 //
67 // Constructor
68 //
69 cout << "AliAnalysisTaskJpsiCorrelation::AliAnalysisTaskJpsiCorrelation()" << endl;
70}
71
72//_________________________________________________________________________________
73AliAnalysisTaskJpsiCorrelation::AliAnalysisTaskJpsiCorrelation(const char *name) :
74 AliAnalysisTaskMultiDielectron(name),
75 fTreesList(),
76 fESD(0x0),
77 fESDTrackCuts(0x0),
78 fIdxDielectron(0),
79 fNjpsiPerEvent(0),
80 fSign(0),
81 fJpsiM(0.0),
82 fJpsiPt(0.0),
83 fJpsiPhi(0.0),
84 fJpsiTheta(0.0),
85 fJpsiY(0.0),
86 fTrackPt(0.0),
87 fTrackPhi(0.0),
88 fTrackTheta(0.0),
89 fTrackEta(0.0),
90 fMultiDieleOutputs(0)
91{
92 //
93 // Constructor
94 //
95 /*
96 // Done in the AliAnalysisTaskMultiDielectron(name) constructor
97 DefineInput(0,TChain::Class());
98 DefineOutput(1, TList::Class());
99 DefineOutput(2, TList::Class());
100 DefineOutput(3, TH1D::Class());
101 */
102 // Add other outputs here
103 fMultiDieleOutputs = GetNoutputs(); // number of output slots in the mother analysis task
104 DefineOutput(fMultiDieleOutputs, TList::Class());
105}
106
107
108//_________________________________________________________________________________
109void AliAnalysisTaskJpsiCorrelation::UserCreateOutputObjects()
110{
111 //
112 // Add all histogram manager histogram lists to the output TList
113 //
114 cout << "AliAnalysisTaskJpsiCorrelation::UserCreateOutputObjects()" << endl;
115 AliAnalysisTaskMultiDielectron::UserCreateOutputObjects();
116
117 if (!fTreesList.IsEmpty()) return; //already initialised
118 fTreesList.SetOwner();
119
120 TIter nextDie(&fListDielectron);
121 AliDielectron *die=0;
122 while ( (die=static_cast<AliDielectron*>(nextDie())) ){
123 TTree* tree=new TTree(die->GetName(), die->GetTitle());
124 tree->Branch("idxDielectron",&fIdxDielectron,"fIdxDielectron/I");
125 tree->Branch("nJpsiPerEvent",&fNjpsiPerEvent,"fNjpsiPerEvent/I");
126 tree->Branch("sign",&fSign,"fSign/I");
127 tree->Branch("jpsiM",&fJpsiM,"fJpsiM/D");
128 tree->Branch("jpsiPt",&fJpsiPt,"fJpsiPt/D");
129 tree->Branch("jpsiPhi",&fJpsiPhi,"fJpsiPhi/D");
130 tree->Branch("jpsiTheta",&fJpsiTheta,"fJpsiTheta/D");
131 tree->Branch("jpsiY",&fJpsiY,"fJpsiY/D");
132 tree->Branch("trackPt",&fTrackPt,"fTrackPt/D");
133 tree->Branch("trackPhi",&fTrackPhi,"fTrackPhi/D");
134 tree->Branch("trackTheta",&fTrackTheta,"fTrackTheta/D");
135 tree->Branch("trackEta",&fTrackEta,"fTrackEta/D");
136 fTreesList.Add(tree);
137 }
138
139 /*
140 PostData(1, &fListHistos);
141 PostData(2, &fListCF);
142 PostData(3, fEventStat);
143 */
144 PostData(fMultiDieleOutputs, &fTreesList);
145}
146
147//_________________________________________________________________________________
148void AliAnalysisTaskJpsiCorrelation::UserExec(Option_t *option)
149{
150 //
151 // Main loop. Called for every event
152 //
153 //cout << "AliAnalysisTaskJpsiCorrelation::UserExec(Option_t *option)" << endl;
154 if(fTreesList.IsEmpty()) return;
155 AliAnalysisTaskMultiDielectron::UserExec(option);
156
157 //cout << "ndielectrons = " << fListDielectron.GetEntries() << endl;
158
159 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>
160 (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
161 if (!esdH) {
162 AliError("Could not get ESDInputHandler");
163 return;
164 }
165
166 fESD = esdH->GetEvent();
167
168 if (!fESD) {
169 AliError("fESD not available");
170 return;
171 }
172
173 //Process event in all AliDielectron instances
174 TIter nextDie(&fListDielectron);
175 AliDielectron *die=0;
176 Int_t idie=0;
177 while ( (die=static_cast<AliDielectron*>(nextDie())) ){
178 //cout << "idie = " << idie << endl;
179 die->Process(fESD);
180 for(Int_t isign=0; isign<=2; ++isign) {
181 //cout << "isign = " << isign << endl;
182 Int_t nCandidates=0;
183 if(die->GetPairArray(isign))
184 nCandidates = die->GetPairArray(isign)->GetEntriesFast();
185 if(nCandidates<1) continue;
186 cout << "candidates = " << nCandidates << endl;
187
188 fIdxDielectron = idie;
189 fSign = isign;
190 fNjpsiPerEvent = nCandidates;
191
192 for(Int_t iCandidate=0; iCandidate<nCandidates; ++iCandidate) {
193 TIter nextPair(die->GetPairArray(isign));
194 AliDielectronPair* pair = NULL;
195 while ((pair = static_cast<AliDielectronPair*>(nextPair()))) {
196
197 fJpsiM = pair->M();
198 fJpsiPt = pair->Pt();
199 fJpsiPhi = pair->Phi();
200 fJpsiTheta = pair->Theta();
201 fJpsiY = pair->Y();
202 cout << "jpsiM = " << fJpsiM << endl;
203 cout << "jpsiPt = " << fJpsiPt << endl;
204 cout << "jpsiPhi = " << fJpsiPhi << endl;
205 cout << "jpsiTheta = " << fJpsiTheta << endl;
206 cout << "jpsiY = " << fJpsiY << endl;
207
208 AliESDtrack* d1 = static_cast<AliESDtrack*>(pair->GetFirstDaughter());
209 AliESDtrack* d2 = static_cast<AliESDtrack*>(pair->GetSecondDaughter());
210
211 for (Int_t idx = 0; idx < fESD->GetNumberOfTracks(); idx++) {
212 AliESDtrack* esdTrack = fESD->GetTrack(idx);
213 if(!esdTrack) continue;
214 if(esdTrack==d1) continue;
215 if(esdTrack==d2) continue;
216 if(!fESDTrackCuts->AcceptTrack(esdTrack)) continue;
217
218 fTrackPt = esdTrack->Pt();
219 fTrackPhi = esdTrack->Phi();
220 fTrackTheta = esdTrack->Theta();
221 fTrackEta = esdTrack->Eta();
222
223 cout << "trackPt = " << fTrackPt << endl;
224 cout << "trackPhi = " << fTrackPhi << endl;
225 cout << "trackTheta = " << fTrackTheta << endl;
226 cout << "trackEta = " << fTrackEta << endl;
227
228 ((TTree*)fTreesList.At(idie))->Fill();
229 }
230 }
231 }
232 }
233
234 ++idie;
235 }
236
237 PostData(fMultiDieleOutputs, &fTreesList);
238}
239
240//_________________________________________________________________________________
241void AliAnalysisTaskJpsiCorrelation::FinishTaskOutput()
242{
243 //
244 // Finish function, called after all events
245 //
246 cout << "AliAnalysisTaskJpsiCorrelation::FinishTaskOutput()" << endl;
247 AliAnalysisTaskMultiDielectron::FinishTaskOutput();
248}