]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/vertexingHF/AliAnalysisTaskSEBkgLikeSignJPSI.cxx
Fix bug for cosThetaStar in case of like-sign (Carmelo)
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSEBkgLikeSignJPSI.cxx
CommitLineData
adef5d4e 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// AliAnalysisTaskSE for reading both reconstructed JPSI -> ee candidates
19// and like sign pairs and for drawing corresponding distributions
20//
21// Author: C.Di Giglio, carmelo.digiglio@ba.infn.it
22///////////////////////////////////////////////////////////////////////////
23
24#include <TSystem.h>
25#include <TROOT.h>
26#include <TClonesArray.h>
cbfc2f04 27#include <TNtuple.h>
28#include <TList.h>
29#include <TH1F.h>
adef5d4e 30
31#include "AliAODEvent.h"
32#include "AliAODVertex.h"
33#include "AliAODTrack.h"
34#include "AliAODRecoDecayHF2Prong.h"
cbfc2f04 35#include "AliAnalysisVertexingHF.h"
adef5d4e 36#include "AliAnalysisTaskSE.h"
37#include "AliAnalysisTaskSEBkgLikeSignJPSI.h"
38
39ClassImp(AliAnalysisTaskSEBkgLikeSignJPSI)
40
41//________________________________________________________________________
42AliAnalysisTaskSEBkgLikeSignJPSI::AliAnalysisTaskSEBkgLikeSignJPSI():
43AliAnalysisTaskSE(),
44fOutput(0),
45fHistMassJPSI(0),
46fHistMassLS(0),
47fHistCtsJPSI(0),
48fHistCtsLS(0),
49fHistCtsLSpos(0),
50fHistCtsLSneg(0),
51fHistCPtaJPSI(0),
52fHistCPtaLS(0),
53fHistd0d0JPSI(0),
54fHistd0d0LS(0),
55fHistDCAJPSI(0),
56fHistDCALS(0),
57fVHF(0),
58fTotPosPairs(0),
59fTotNegPairs(0),
60fLsNormalization(1.)
61{
62 //
63 // Default constructor
64 //
adef5d4e 65}
66
67//________________________________________________________________________
68AliAnalysisTaskSEBkgLikeSignJPSI::AliAnalysisTaskSEBkgLikeSignJPSI(const char *name):
69AliAnalysisTaskSE(name),
70fOutput(0),
71fHistMassJPSI(0),
72fHistMassLS(0),
73fHistCtsJPSI(0),
74fHistCtsLS(0),
75fHistCtsLSpos(0),
76fHistCtsLSneg(0),
77fHistCPtaJPSI(0),
78fHistCPtaLS(0),
79fHistd0d0JPSI(0),
80fHistd0d0LS(0),
81fHistDCAJPSI(0),
82fHistDCALS(0),
83fVHF(0),
84fTotPosPairs(0),
85fTotNegPairs(0),
86fLsNormalization(1.)
87{
88 //
9d6d35b0 89 // Standard constructor
adef5d4e 90 //
91 // Output slot #1 writes into a TList container
92 DefineOutput(1,TList::Class()); //My private output
93}
94
95//________________________________________________________________________
96AliAnalysisTaskSEBkgLikeSignJPSI::~AliAnalysisTaskSEBkgLikeSignJPSI()
97{
98 // Destructor
99 if (fOutput) {
100 delete fOutput;
101 fOutput = 0;
102 }
103
104 if (fVHF) {
105 delete fVHF;
106 fVHF = 0;
107 }
108
109}
110//________________________________________________________________________
111void AliAnalysisTaskSEBkgLikeSignJPSI::Init()
112{
113 // Initialization
114
115 if(fDebug > 1) printf("AnalysisTaskSEBkgLikeSignJPSI::Init() \n");
116
117 gROOT->LoadMacro("ConfigVertexingHF.C");
118
119 fVHF = (AliAnalysisVertexingHF*)gROOT->ProcessLine("ConfigVertexingHF()");
120 fVHF->PrintStatus();
121
122 return;
adef5d4e 123}
124
125//________________________________________________________________________
126void AliAnalysisTaskSEBkgLikeSignJPSI::UserCreateOutputObjects()
127{
128 // Create the output container
129 //
130 if(fDebug > 1) printf("AnalysisTaskSEBkgLikeSignJPSI::UserCreateOutputObjects() \n");
131
132 // Several histograms are more conveniently managed in a TList
133 fOutput = new TList();
134 fOutput->SetOwner();
135
136 fHistMassJPSI = new TH1F("fHistMassJPSI", "J/#Psi invariant mass; M [GeV]; Entries",200,2.8,3.25);
137 fHistMassJPSI->Sumw2();
138 fHistMassJPSI->SetMinimum(0);
139 fOutput->Add(fHistMassJPSI);
140
141 fHistMassLS = new TH1F("fHistMassLS", "Like sign pairs invariant mass; M [GeV]; Entries",200,2.8,3.25);
142 fHistMassLS->Sumw2();
143 fHistMassLS->SetMinimum(0);
144 fOutput->Add(fHistMassLS);
145
146 fHistCtsJPSI = new TH1F("fHistCtsJPSI", "J/#Psi cosine of decay angle; Cos#Theta*; Entries",200,-1.,1.);
147 fHistCtsJPSI->Sumw2();
148 fHistCtsJPSI->SetMinimum(0);
149 fOutput->Add(fHistCtsJPSI);
150
151 fHistCtsLS = new TH1F("fHistCtsLS", "Like sign pairs cosine of decay angle; Cos#Theta*; Entries",200,-1.,1.);
152 fHistCtsLS->Sumw2();
153 fHistCtsLS->SetMinimum(0);
154 fOutput->Add(fHistCtsLS);
155
156 fHistCtsLSpos = new TH1F("fHistCtsLSpos", "Like sign ++ pairs cosine of decay angle; Cos#Theta*; Entries",200,-1.,1.);
157 fHistCtsLSpos->Sumw2();
158 fHistCtsLSpos->SetMinimum(0);
159 fOutput->Add(fHistCtsLSpos);
160
161 fHistCtsLSneg = new TH1F("fHistCtsLSneg", "Like sign -- pairs cosine of decay angle; Cos#Theta*; Entries",200,-1.,1.);
162 fHistCtsLSneg->Sumw2();
163 fHistCtsLSneg->SetMinimum(0);
164 fOutput->Add(fHistCtsLSneg);
165
166 fHistCPtaJPSI = new TH1F("fHistCPtaJPSI", "J/#Psi cosine of pointing angle; Cos#Theta_{point}; Entries",200,-1.,1.);
167 fHistCPtaJPSI->Sumw2();
168 fHistCPtaJPSI->SetMinimum(0);
169 fOutput->Add(fHistCPtaJPSI);
170
171 fHistCPtaLS = new TH1F("fHistCPtaLS", "Like sign pairs cosine of pointing angle; Cos#Theta_{point}; Entries",200,-1.,1.);
172 fHistCPtaLS->Sumw2();
173 fHistCPtaLS->SetMinimum(0);
174 fOutput->Add(fHistCPtaLS);
175
176 fHistd0d0JPSI = new TH1F("fHistd0d0JPSI", "J/#Psi product of impact parameters; d0xd0 [#mu m^{2}]; Entries",200,-100000.,100000.);
177 fHistd0d0JPSI->Sumw2();
178 fHistd0d0JPSI->SetMinimum(0);
179 fOutput->Add(fHistd0d0JPSI);
180
181 fHistd0d0LS = new TH1F("fHistd0d0LS", "Like sign pairs product of impact parameters; d0xd0 [#mu m^{2}]; Entries",200,-100000.,100000.);
182 fHistd0d0LS->Sumw2();
183 fHistd0d0LS->SetMinimum(0);
184 fOutput->Add(fHistd0d0LS);
185
186 fHistDCAJPSI = new TH1F("fHistDCAJPSI", "J/#Psi distance of closest approach; dca [10^{2}#mu m]; Entries",100,0.,5.);
187 fHistDCAJPSI->Sumw2();
188 fHistDCAJPSI->SetMinimum(0);
189 fOutput->Add(fHistDCAJPSI);
190
191 fHistDCALS = new TH1F("fHistDCALS", "Like sign pairs distance of closest approach; dca [10^{2}#mu m]; Entries",100,0.,5.);
192 fHistDCALS->Sumw2();
193 fHistDCALS->SetMinimum(0);
194 fOutput->Add(fHistDCALS);
195
196 return;
197}
198
199//________________________________________________________________________
200void AliAnalysisTaskSEBkgLikeSignJPSI::UserExec(Option_t */*option*/)
201{
202 // Execute analysis for current event:
203 // heavy flavor candidates association to MC truth
204
205 AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
206
207 // load heavy flavour vertices
208 TClonesArray *arrayVerticesHF =
209 (TClonesArray*)aod->GetList()->FindObject("VerticesHF");
210 if(!arrayVerticesHF) {
211 printf("AliAnalysisTaskSEBkgLikeSignJPSI::UserExec: VerticesHF branch not found!\n");
212 return;
213 }
214
215 // load JPSI->ee candidates
216 TClonesArray *arrayJPSItoEle =
217 (TClonesArray*)aod->GetList()->FindObject("JPSItoEle");
218 if(!arrayJPSItoEle) {
219 printf("AliAnalysisTaskSEBkgLikeSignJPSI::UserExec: JPSItoEle branch not found!\n");
220 return;
221 }
222
223 // load like sign candidates
224 TClonesArray *arrayLikeSign =
225 (TClonesArray*)aod->GetList()->FindObject("LikeSign2Prong");
226 if(!arrayLikeSign) {
227 printf("AliAnalysisTaskSEBkgLikeSignJPSI::UserExec: LikeSign2Prong branch not found!\n");
228 return;
229 }
230
231 // AOD primary vertex
232 AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
233
234 // make trkIDtoEntry register (temporary)
235 Int_t trkIDtoEntry[100000];
236 for(Int_t it=0;it<aod->GetNumberOfTracks();it++) {
237 AliAODTrack *track = aod->GetTrack(it);
238 trkIDtoEntry[track->GetID()]=it;
239 }
240
241 // loop over Like sign candidates
242 Int_t nPosPairs=0,nNegPairs=0;
243 Int_t nLikeSign = arrayLikeSign->GetEntriesFast();
244 printf("+++\n+++Number of like sign pairs ---> %d \n+++\n", nLikeSign);
245
246 for(Int_t iLikeSign = 0; iLikeSign < nLikeSign; iLikeSign++) {
247 AliAODRecoDecayHF2Prong *d = (AliAODRecoDecayHF2Prong*)arrayLikeSign->UncheckedAt(iLikeSign);
248 Bool_t unsetvtx=kFALSE;
249 if(!d->GetOwnPrimaryVtx()) {
250 d->SetOwnPrimaryVtx(vtx1); // needed to compute all variables
251 unsetvtx=kTRUE;
252 }
253 Int_t okBtoJPSIls=0;
254 if(d->SelectBtoJPSI(fVHF->GetBtoJPSICuts(),okBtoJPSIls)) {
1fd36d27 255 AliAODTrack *trk0 = (AliAODTrack*)d->GetDaughter(0);
adef5d4e 256 fHistMassLS->Fill(d->InvMassJPSIee());
257 fHistCPtaLS->Fill(d->CosPointingAngle());
258 fHistd0d0LS->Fill(1e8*d->Prodd0d0());
adef5d4e 259 fHistDCALS->Fill(100*d->GetDCA());
1fd36d27 260 //PostData(1,fOutput);
adef5d4e 261 if(!trk0) {
262 trk0=aod->GetTrack(trkIDtoEntry[d->GetProngID(0)]);
263 printf("references to standard AOD not available \n");
264 }
265 if((trk0->Charge())==1) {
266 nPosPairs++;
1fd36d27 267 fHistCtsLS->Fill(d->CosThetaStar(0,443,11,11));
268 fHistCtsLSpos->Fill(d->CosThetaStar(0,443,11,11));
269 //PostData(1,fOutput);
adef5d4e 270 } else {
271 nNegPairs++;
1fd36d27 272 fHistCtsLS->Fill(d->CosThetaStarJPSI());
adef5d4e 273 fHistCtsLSneg->Fill(d->CosThetaStarJPSI());
1fd36d27 274 //PostData(1,fOutput);
adef5d4e 275 }
cbfc2f04 276 PostData(1,fOutput);
277 }
adef5d4e 278 if(unsetvtx) d->UnsetOwnPrimaryVtx();
279 }
280
281 printf("------------ N. of positive pairs in Event ----- %d \n", nPosPairs);
282 printf("------------ N. of negative pairs in Event ----- %d \n", nNegPairs);
283
284 fTotPosPairs += nPosPairs;
285 fTotNegPairs += nNegPairs;
286
287 // loop over JPSI candidates
288 Int_t nBtoJpsiToEle = arrayJPSItoEle->GetEntriesFast();
289 printf("Number of like JPSI -> ee candidates ---> %d \n", nBtoJpsiToEle);
290
291 for (Int_t iBtoJpsiToEle = 0; iBtoJpsiToEle < nBtoJpsiToEle; iBtoJpsiToEle++) {
292 AliAODRecoDecayHF2Prong *d = (AliAODRecoDecayHF2Prong*)arrayJPSItoEle->UncheckedAt(iBtoJpsiToEle);
293 Bool_t unsetvtx=kFALSE;
294 if(!d->GetOwnPrimaryVtx()) {
295 d->SetOwnPrimaryVtx(vtx1); // needed to compute all variables
296 unsetvtx=kTRUE;
297 }
298 Int_t okBtoJPSI=0;
299 if(d->SelectBtoJPSI(fVHF->GetBtoJPSICuts(),okBtoJPSI)) {
300 fHistMassJPSI->Fill(d->InvMassJPSIee());
301 fHistCtsJPSI->Fill(d->CosThetaStarJPSI());
302 fHistd0d0JPSI->Fill(1e8*d->Prodd0d0());
303 fHistCPtaJPSI->Fill(d->CosPointingAngle());
304 fHistDCAJPSI->Fill(100*d->GetDCA());
305 PostData(1,fOutput);
306 }
cbfc2f04 307 if(unsetvtx) d->UnsetOwnPrimaryVtx();
adef5d4e 308 }
309
310 return;
311}
312
313//________________________________________________________________________
314void AliAnalysisTaskSEBkgLikeSignJPSI::Terminate(Option_t */*option*/)
315{
316 // Terminate analysis
317 //
318 if(fDebug > 1) printf("AnalysisTaskSEBkgLikeSignJPSI: Terminate() \n");
319
320 fOutput = dynamic_cast<TList*> (GetOutputData(1));
321 if (!fOutput) {
322 printf("ERROR: fOutput not available\n");
323 return;
324 }
325
326 fLsNormalization = 2.*TMath::Sqrt(fTotPosPairs*fTotNegPairs);
327
328 fHistMassJPSI = dynamic_cast<TH1F*>(fOutput->FindObject("fHistMassJPSI"));
329 fHistMassLS = dynamic_cast<TH1F*>(fOutput->FindObject("fHistMassLS"));
330 fHistCtsJPSI = dynamic_cast<TH1F*>(fOutput->FindObject("fHistCtsJPSI"));
331 fHistCtsLS = dynamic_cast<TH1F*>(fOutput->FindObject("fHistCtsLS"));
332 fHistCtsLSpos = dynamic_cast<TH1F*>(fOutput->FindObject("fHistCtsLSpos"));
333 fHistCtsLSneg = dynamic_cast<TH1F*>(fOutput->FindObject("fHistCtsLSneg"));
334 fHistCPtaJPSI = dynamic_cast<TH1F*>(fOutput->FindObject("fHistCPtaJPSI"));
335 fHistCPtaLS = dynamic_cast<TH1F*>(fOutput->FindObject("fHistCPtaLS"));
336 fHistd0d0JPSI = dynamic_cast<TH1F*>(fOutput->FindObject("fHistd0d0JPSI"));
337 fHistd0d0LS = dynamic_cast<TH1F*>(fOutput->FindObject("fHistd0d0LS"));
338 fHistDCAJPSI = dynamic_cast<TH1F*>(fOutput->FindObject("fHistDCAJPSI"));
339 fHistDCALS = dynamic_cast<TH1F*>(fOutput->FindObject("fHistDCALS"));
340
7fcc8b15 341 if(fLsNormalization>0.) {
342 fHistMassLS->Scale((1/fLsNormalization)*fHistMassLS->GetEntries());
343 fHistCtsLS->Scale((1/fLsNormalization)*fHistCtsLS->GetEntries());
344 fHistCtsLSpos->Scale((1/fLsNormalization)*fHistCtsLSpos->GetEntries());
345 fHistCtsLSneg->Scale((1/fLsNormalization)*fHistCtsLSneg->GetEntries());
346 fHistCPtaLS->Scale((1/fLsNormalization)*fHistCPtaLS->GetEntries());
347 fHistd0d0LS->Scale((1/fLsNormalization)*fHistd0d0LS->GetEntries());
348 fHistDCALS->Scale((1/fLsNormalization)*fHistDCALS->GetEntries());
349 }
adef5d4e 350
351 return;
352}