]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/correlationHF/AliHFAssociatedTrackCuts.cxx
updated for systematic study
[u/mrichter/AliRoot.git] / PWGHF / correlationHF / AliHFAssociatedTrackCuts.cxx
CommitLineData
c683985a 1/**************************************************************************
2 * Copyright(c) 1998-2010, 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/* $Id$ */
17
18////////////////////////////////////////////////////////////////////////
19//
20// Base class for cuts on Associated tracks for HF Correlation analysis
21//
22// Author: S.Bjelogrlic (Utrecht) sandro.bjelogrlic@cern.ch
23////////////////////////////////////////////////////////////////////////
24#include <Riostream.h>
25#include "AliHFAssociatedTrackCuts.h"
26#include "AliAODPidHF.h"
27#include "AliESDtrackCuts.h"
28#include "AliESDtrack.h"
29#include "AliESDVertex.h"
30#include "AliAODv0.h"
31#include "AliAODVertex.h"
32#include "AliAODMCParticle.h"
33#include "AliAnalysisManager.h"
34#include "AliInputEventHandler.h"
35#include "TString.h"
36
37using std::cout;
38using std::endl;
39
40ClassImp(AliHFAssociatedTrackCuts)
41
42//--------------------------------------------------------------------------
43AliHFAssociatedTrackCuts::AliHFAssociatedTrackCuts():
44AliAnalysisCuts(),
45fESDTrackCuts(0),
46fPidObj(0),
47 fEffWeights(0),
48
49fTrigEffWeightsvspt(0),
50fTrigEffWeightsvsptB(0),
51fTrigEffWeights(0),
52fTrigEffWeightsB(0),
53fPoolMaxNEvents(0),
54fPoolMinNTracks(0),
55fMinEventsToMix(0),
56fNzVtxBins(0),
57fNzVtxBinsDim(0),
58fZvtxBins(0),
59fNCentBins(0),
60fNCentBinsDim(0),
61fCentBins(0),
62
63fNofMCEventType(0),
64fMCEventType(0),
65
66fNTrackCuts(0),
67fAODTrackCuts(0),
68fTrackCutsNames(0),
69fNvZeroCuts(0),
70fAODvZeroCuts(0),
71fvZeroCutsNames(0),
72fBit(-1),
73fCharge(0),
74fDescription("")
75
76{
77 //
78 //default constructor
79 //
80 //
81 //default constructor
82 //
83
84}
85
86//--------------------------------------------------------------------------
87AliHFAssociatedTrackCuts::AliHFAssociatedTrackCuts(const char* name, const char* title):
88AliAnalysisCuts(name,title),
89fESDTrackCuts(0),
90fPidObj(0),
91fEffWeights(0),
92fTrigEffWeightsvspt(0),
93fTrigEffWeightsvsptB(0),
94fTrigEffWeights(0),
95fTrigEffWeightsB(0),
96fPoolMaxNEvents(0),
97fPoolMinNTracks(0),
98fMinEventsToMix(0),
99fNzVtxBins(0),
100fNzVtxBinsDim(0),
101fZvtxBins(0),
102fNCentBins(0),
103fNCentBinsDim(0),
104fCentBins(0),
105
106fNofMCEventType(0),
107fMCEventType(0),
108
109fNTrackCuts(0),
110fAODTrackCuts(0),
111fTrackCutsNames(0),
112fNvZeroCuts(0),
113fAODvZeroCuts(0),
114fvZeroCutsNames(0),
115fBit(-1),
116fCharge(0),
117fDescription("")
118
119{
120 //
121 //default constructor
122 //
123
124}
125//--------------------------------------------------------------------------
126AliHFAssociatedTrackCuts::AliHFAssociatedTrackCuts(const AliHFAssociatedTrackCuts &source) :
127AliAnalysisCuts(source),
128fESDTrackCuts(source.fESDTrackCuts),
129fPidObj(source.fPidObj),
130fEffWeights(source.fEffWeights),
131fTrigEffWeightsvspt(source.fTrigEffWeightsvspt),
132fTrigEffWeightsvsptB(source.fTrigEffWeightsvsptB),
133fTrigEffWeights(source.fTrigEffWeights),
134fTrigEffWeightsB(source.fTrigEffWeightsB),
135
136fPoolMaxNEvents(source.fPoolMaxNEvents),
137fPoolMinNTracks(source.fPoolMinNTracks),
138fMinEventsToMix(source.fMinEventsToMix),
139fNzVtxBins(source.fNzVtxBins),
140fNzVtxBinsDim(source.fNzVtxBinsDim),
141fZvtxBins(source.fZvtxBins),
142fNCentBins(source.fNCentBins),
143fNCentBinsDim(source.fNCentBinsDim),
144fCentBins(source.fCentBins),
145
146fNofMCEventType(source.fNofMCEventType),
147fMCEventType(source.fMCEventType),
148
149fNTrackCuts(source.fNTrackCuts),
150fAODTrackCuts(source.fAODTrackCuts),
151fTrackCutsNames(source.fTrackCutsNames),
152fNvZeroCuts(source.fNvZeroCuts),
153fAODvZeroCuts(source.fAODvZeroCuts),
154fvZeroCutsNames(source.fvZeroCutsNames),
155fBit(source.fBit),
156fCharge(source.fCharge),
157fDescription(source.fDescription)
158{
159 //
160 // copy constructor
161 //
162
163
164 AliInfo("AliHFAssociatedTrackCuts::Copy constructor ");
165 if(source.fESDTrackCuts) AddTrackCuts(source.fESDTrackCuts);
166 if(source.fAODTrackCuts) SetAODTrackCuts(source.fAODTrackCuts);
167 if(source.fAODvZeroCuts) SetAODvZeroCuts(source.fAODvZeroCuts);
168 if(source.fPidObj) SetPidHF(source.fPidObj);
169 if(source.fEffWeights) SetEfficiencyWeightMap(source.fEffWeights);
170 if(source.fTrigEffWeightsvspt) SetTriggerEffWeightMapvspt(source.fTrigEffWeightsvspt);
171 if(source.fTrigEffWeightsvsptB) SetTriggerEffWeightMapvsptB(source.fTrigEffWeightsvsptB);
172 if(source.fTrigEffWeights) SetTriggerEffWeightMap(source.fTrigEffWeights);
173 if(source.fTrigEffWeightsB)SetTriggerEffWeightMapB(source.fTrigEffWeightsB);
174
175
176}
177//--------------------------------------------------------------------------
178AliHFAssociatedTrackCuts &AliHFAssociatedTrackCuts::operator=(const AliHFAssociatedTrackCuts &source)
179{
180 //
181 // assignment operator
182 //
183 if(&source == this) return *this;
184
185 AliAnalysisCuts::operator=(source);
186 fESDTrackCuts=source.fESDTrackCuts;
187 fPidObj=source.fPidObj;
188 fEffWeights=source.fEffWeights;
189 fTrigEffWeightsvspt=source.fTrigEffWeightsvspt;
190 fTrigEffWeightsvsptB=source.fTrigEffWeightsvsptB;
191 fTrigEffWeights=source.fTrigEffWeights;
192 fTrigEffWeightsB=source.fTrigEffWeightsB;
193 fNTrackCuts=source.fNTrackCuts;
194 fAODTrackCuts=source.fAODTrackCuts;
195 fTrackCutsNames=source.fTrackCutsNames;
196 fNvZeroCuts=source.fNvZeroCuts;
197 fAODvZeroCuts=source.fAODvZeroCuts;
198 fvZeroCutsNames=source.fvZeroCutsNames;
199 fBit=source.fBit;
200 fCharge=source.fCharge;
201
202 return *this;
203
204}
205
206
207//--------------------------------------------------------------------------
208AliHFAssociatedTrackCuts::~AliHFAssociatedTrackCuts()
209{
210 if(fESDTrackCuts) {delete fESDTrackCuts; fESDTrackCuts = 0;}
211 if(fPidObj) {delete fPidObj; fPidObj = 0;}
212 if(fEffWeights){delete fEffWeights;fEffWeights=0;}
213 if(fTrigEffWeightsvspt){delete fTrigEffWeightsvspt;fTrigEffWeightsvspt=0;}
214 if(fTrigEffWeightsvsptB){delete fTrigEffWeightsvsptB;fTrigEffWeightsvsptB=0;}
215 if(fTrigEffWeights){delete fTrigEffWeights;fTrigEffWeights=0;}
216 if(fTrigEffWeightsB){delete fTrigEffWeightsB;fTrigEffWeightsB=0;}
217 if(fZvtxBins) {delete[] fZvtxBins; fZvtxBins=0;}
218 if(fCentBins) {delete[] fCentBins; fCentBins=0;}
219 if(fAODTrackCuts) {delete[] fAODTrackCuts; fAODTrackCuts=0;}
220 if(fTrackCutsNames) {delete[] fTrackCutsNames; fTrackCutsNames=0;}
221 if(fAODvZeroCuts){delete[] fAODvZeroCuts; fAODvZeroCuts=0;}
222 if(fvZeroCutsNames) {delete[] fvZeroCutsNames; fvZeroCutsNames=0;}
223
224
225}
226//--------------------------------------------------------------------------
227Bool_t AliHFAssociatedTrackCuts::IsInAcceptance()
228{
229 printf("Careful: method AliHFAssociatedTrackCuts::IsInAcceptance is not implemented yet \n");
230 return kFALSE;
231}
232//--------------------------------------------------------------------------
233Bool_t AliHFAssociatedTrackCuts::IsHadronSelected(AliAODTrack * track,const AliESDVertex *primary, Double_t magfield)
234{
235
236 AliESDtrack esdtrack(track);
237 if(primary){// needed to calculate impact parameters
238 // needed to calculate the impact parameters
239 esdtrack.RelateToVertex(primary,magfield,3.);
240 }
241 // set the TPC cluster info
242 esdtrack.SetTPCClusterMap(track->GetTPCClusterMap());
243 esdtrack.SetTPCSharedMap(track->GetTPCSharedMap());
244 esdtrack.SetTPCPointsF(track->GetTPCNclsF());
245
246 if(!fESDTrackCuts->IsSelected(&esdtrack)) return kFALSE;
247
248 if(fBit>-1 && !track->TestFilterBit(fBit)) return kFALSE; // check the filter bit
249
250 return kTRUE;
251
252}
253
254//--------------------------------------------------------------------------
255Bool_t AliHFAssociatedTrackCuts::CheckHadronKinematic(Double_t pt, Double_t d0)
256{
257
258
259
260 if(pt < fAODTrackCuts[0]) return kFALSE;
261 if(pt > fAODTrackCuts[1]) return kFALSE;
262 if(d0 < fAODTrackCuts[2]) return kFALSE;
263 if(d0 > fAODTrackCuts[3]) return kFALSE;
264
265 return kTRUE;
266
267
268}
269//--------------------------------------------------------------------------
270
271Bool_t AliHFAssociatedTrackCuts::Charge(Short_t charge, AliAODTrack* track)
272{// charge is the charge to compare to (for example, a daughter of a D meson)
273
274 if(!fCharge) return kTRUE; // if fCharge is set to 0 (no selection on the charge), returns always true
275 if(track->Charge()!= fCharge*charge) return kFALSE;
276 return kTRUE;
277}
278
279//--------------------------------------------------------------------------
280Bool_t AliHFAssociatedTrackCuts::CheckKaonCompatibility(AliAODTrack * track, Bool_t useMc, TClonesArray* mcArray, Int_t method)
281{
282 Bool_t isKaon = kFALSE;
283
284 if(useMc) { // on MC
285 Int_t hadLabel = track->GetLabel();
286 if(hadLabel < 0) return kFALSE;
287 AliAODMCParticle* hadron = dynamic_cast<AliAODMCParticle*>(mcArray->At(hadLabel));
288 if(hadron){
289 Int_t pdg = TMath::Abs(hadron->GetPdgCode());
290 if (pdg == 321) isKaon = kTRUE;
291 }
292 }
293
294 if(!useMc) { // on DATA
295 switch(method) {
296 case(1): {
297 Bool_t isKTPC=kFALSE;
298 Bool_t isPiTPC=kFALSE;
299 Bool_t isPTPC=kFALSE;
300 Bool_t isKTOF=kFALSE;
301 Bool_t isPiTOF=kFALSE;
302 Bool_t isPTOF=kFALSE;
303
304 Bool_t KaonHyp = kFALSE;
305 Bool_t PionHyp = kFALSE;
306 Bool_t ProtonHyp = kFALSE;
307
308 if(fPidObj->CheckStatus(track,"TOF")) {
309 isKTOF=fPidObj->IsKaonRaw(track,"TOF");
310 isPiTOF=fPidObj->IsPionRaw(track,"TOF");
311 isPTOF=fPidObj->IsProtonRaw(track,"TOF");
312 }
313 if(fPidObj->CheckStatus(track,"TPC")){
314 isKTPC=fPidObj->IsKaonRaw(track,"TPC");
315 isPiTPC=fPidObj->IsPionRaw(track,"TPC");
316 isPTPC=fPidObj->IsProtonRaw(track,"TPC");
317 }
318
319 if (isKTOF && isKTPC) KaonHyp = kTRUE;
320 if (isPiTOF && isPiTPC) PionHyp = kTRUE;
321 if (isPTOF && isPTPC) ProtonHyp = kTRUE;
322
323 if(KaonHyp && !PionHyp && !ProtonHyp) isKaon = kTRUE;
324 break;
325 }
326 case(2): {
327 if(fPidObj->MakeRawPid(track,3)>=1) isKaon = kTRUE;
328 break;
329 }
330 }
331 }
332
333 return isKaon;
334
335}
336//--------------------------------------------------------------------------
337Bool_t AliHFAssociatedTrackCuts::IsKZeroSelected(AliAODv0 *vzero, AliAODVertex *vtx1)
338{
339
340 if(vzero->DcaV0Daughters()>fAODvZeroCuts[0]) return kFALSE;
341 if(vzero->Chi2V0()>fAODvZeroCuts[1]) return kFALSE;
342 if(vzero->DecayLength(vtx1) < fAODvZeroCuts[2]) return kFALSE;
343 if(vzero->DecayLength(vtx1) > fAODvZeroCuts[3]) return kFALSE;
344 if(vzero->OpenAngleV0() > fAODvZeroCuts[4]) return kFALSE;
345 if(vzero->Pt() < fAODvZeroCuts[5]) return kFALSE;
346 if(TMath::Abs(vzero->Eta()) > fAODvZeroCuts[6]) return kFALSE;
347
348
349 return kTRUE;
350}
351//--------------------------------------------------------------------------
352Bool_t *AliHFAssociatedTrackCuts::IsMCpartFromHF(Int_t label, TClonesArray*mcArray){
353 // Check origin in MC
354
355 AliAODMCParticle* mcParticle;
356 Int_t pdgCode = -1;
357
358 Bool_t isCharmy = kFALSE;
359 Bool_t isBeauty = kFALSE;
360 Bool_t isD = kFALSE;
361 Bool_t isB = kFALSE;
362
363 Bool_t *originvect = new Bool_t[4];
364
365 originvect[0] = kFALSE;
366 originvect[1] = kFALSE;
367 originvect[2] = kFALSE;
368 originvect[3] = kFALSE;
369
370 if (label<0) return originvect;
371
372 while(pdgCode!=2212){ // loops back to the collision to check the particle source
373
374 mcParticle = dynamic_cast<AliAODMCParticle*>(mcArray->At(label));
375 if(!mcParticle) {AliError("NO MC PARTICLE"); break;}
376 pdgCode = TMath::Abs(mcParticle->GetPdgCode());
377
378 label = mcParticle->GetMother();
379
380
381 if((pdgCode>=400 && pdgCode <500) || (pdgCode>=4000 && pdgCode<5000 )) isD = kTRUE;
382 if((pdgCode>=500 && pdgCode <600) || (pdgCode>=5000 && pdgCode<6000 )) {isD = kFALSE; isB = kTRUE;}
383
384
385 if(pdgCode == 4) isCharmy = kTRUE;
386 if(pdgCode == 5) {isBeauty = kTRUE; isCharmy = kFALSE;}
387 if(label<0) break;
388
389 }
390
391
392 originvect[0] = isCharmy;
393 originvect[1] = isBeauty;
394 originvect[2] = isD;
395 originvect[3] = isB;
396
397
398 return originvect;
399}
400
401//--------------------------------------------------------------------------
402Bool_t AliHFAssociatedTrackCuts::InvMassDstarRejection(AliAODRecoDecayHF2Prong* d, AliAODTrack *track, Int_t hypD0) const {
403 //
404 // Calculates invmass of track+D0 and rejects if compatible with D*
405 // (to remove pions from D*)
406 //
407 Double_t nsigma = 3.;
408
409 Double_t mD0, mD0bar;
410 d->InvMassD0(mD0,mD0bar);
411
412 Double_t invmassDstar1 = 0, invmassDstar2 = 0;
413 Double_t e1Pi = d->EProng(0,211), e2K = d->EProng(1,321); //hyp 1 (pi,K) - D0
414 Double_t e1K = d->EProng(0,321), e2Pi = d->EProng(1,211); //hyp 2 (K,pi) - D0bar
415 Double_t psum2 = (d->Px()+track->Px())*(d->Px()+track->Px())
416 +(d->Py()+track->Py())*(d->Py()+track->Py())
417 +(d->Pz()+track->Pz())*(d->Pz()+track->Pz());
418
419 switch(hypD0) {
420 case 1:
421 invmassDstar1 = TMath::Sqrt(pow(e1Pi+e2K+track->E(0.1396),2.)-psum2);
422 if ((TMath::Abs(invmassDstar1-mD0)-0.14543) < nsigma*800.*pow(10.,-6.)) return kFALSE;
423 break;
424 case 2:
425 invmassDstar2 = TMath::Sqrt(pow(e2Pi+e1K+track->E(0.1396),2.)-psum2);
426 if ((TMath::Abs(invmassDstar2-mD0bar)-0.14543) < nsigma*800.*pow(10.,-6.)) return kFALSE;
427 break;
428 case 3:
429 invmassDstar1 = TMath::Sqrt(pow(e1Pi+e2K+track->E(0.1396),2.)-psum2);
430 invmassDstar2 = TMath::Sqrt(pow(e2Pi+e1K+track->E(0.1396),2.)-psum2);
431 if ((TMath::Abs(invmassDstar1-mD0)-0.14543) < nsigma*800.*pow(10.,-6.)) return kFALSE;
432 if ((TMath::Abs(invmassDstar2-mD0bar)-0.14543) < nsigma*800.*pow(10.,-6.)) return kFALSE;
433 break;
434 }
435
436 return kTRUE;
437}
438//________________________________________________________
439void AliHFAssociatedTrackCuts::SetMCEventTypes(Int_t *MCEventTypeArray)
440// set the array of event types you want to process in MonteCarlo (gluon splitting, pair production etc.)
441{
442 if(!fMCEventType) fMCEventType = new Int_t[fNofMCEventType];
443
444 for(Int_t k=0; k<fNofMCEventType; k++){
445 fMCEventType[k] = MCEventTypeArray[k];
446 }
447 return;
448}
449
450//________________________________________________________
451void AliHFAssociatedTrackCuts::SetAODTrackCuts(Float_t *cutsarray)
452{
453 if(!fAODTrackCuts) fAODTrackCuts = new Float_t[fNTrackCuts];
454 for(Int_t i =0; i<fNTrackCuts; i++){
455 fAODTrackCuts[i] = cutsarray[i];
456 }
457 SetTrackCutsNames();
458 return;
459}
460//________________________________________________________
461void AliHFAssociatedTrackCuts::SetTrackCutsNames(/*TString *namearray*/){
462
463 fTrackCutsNames = new TString[4];
464 fTrackCutsNames[0]= "associated track:: pt min [GeV/c]................: ";
465 fTrackCutsNames[1]= "associated track:: pt max [GeV/c]................: ";
466 fTrackCutsNames[2]= "associated track:: d0 min [cm]...................: ";
467 fTrackCutsNames[3]= "associated track:: d0 max [cm]...................: ";
468
469
470
471 return;
472}
473//--------------------------------------------------------------------------
474void AliHFAssociatedTrackCuts::SetAODvZeroCuts(Float_t *cutsarray)
475{
476
477
478 if(!fAODvZeroCuts) fAODvZeroCuts = new Float_t[fNvZeroCuts];
479 for(Int_t i =0; i<fNvZeroCuts; i++){
480 fAODvZeroCuts[i] = cutsarray[i];
481 }
482 SetvZeroCutsNames();
483 return;
484}
485//--------------------------------------------------------------------------
486void AliHFAssociatedTrackCuts::SetvZeroCutsNames(/*TString *namearray*/){
487
488 fvZeroCutsNames = new TString[7];
489 fvZeroCutsNames[0] = "vZero:: max DCA between two daughters [cm].......: ";
490 fvZeroCutsNames[1] = "vZero:: max fit Chi Square between two daughters.: ";
491 fvZeroCutsNames[2] = "vZero:: min decay length [cm]....................: ";
492 fvZeroCutsNames[3] = "vZero:: max decay length [cm]....................: ";
493 fvZeroCutsNames[4] = "vZero:: max opening angle between daughters [rad]: ";
494 fvZeroCutsNames[5] = "vZero:: pt min [Gev/c]...........................: ";
495 fvZeroCutsNames[6] = "vZero:: |Eta| range <............................: ";
496
497
498 return;
499}
500
501//--------------------------------------------------------------------------
502void AliHFAssociatedTrackCuts::SetPidAssociated()
503{
504 //setting PidResponse
505 if(fPidObj->GetOldPid()==kFALSE && fPidObj->GetPidResponse()==0x0){
506 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
507 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
508 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
509 fPidObj->SetPidResponse(pidResp);
510 }
511}
512//--------------------------------------------------------------------------
513
514void AliHFAssociatedTrackCuts::Print(Option_t *option) const
515{
516 /// overloaded from TObject: print info
517 if (strcmp(option, "parameters")==0) {
518 PrintPoolParameters();
519 return;
520 } else if (strcmp(option, "selectedMC")==0) {
521 PrintSelectedMCevents();
522 return;
523 }
524 PrintAll();
525}
526
527//--------------------------------------------------------------------------
528Int_t AliHFAssociatedTrackCuts::GetPoolBin(Double_t multorcent, Double_t zVtx) const
529{
530
531 Int_t poolbin = -1;
532 Int_t centbin = -1;
533 Int_t zvtxbin = -1;
534
535
536 if(multorcent <fCentBins[0]) return poolbin;
537 if(zVtx <fZvtxBins[0]) return poolbin;
538
539
540 for (Int_t i=0;i<fNCentBins;i++){
541 if(multorcent<fCentBins[i+1]) {
542 centbin=i;
543 break;
544 }
545 }
546
547 for (Int_t i=0;i<fNzVtxBins;i++){
548 if(zVtx<fZvtxBins[i+1]) {
549 zvtxbin=i;
550 break;
551 }
552 }
553
554 poolbin = centbin + zvtxbin*fNzVtxBins;
555
556 return poolbin;
557}
558//--------------------------------------------------------------------------
559void AliHFAssociatedTrackCuts::PrintAll() const
560{
561
562 if(fDescription){
563 printf("=================================================");
564 printf("\nAdditional description\n");
565 std::cout << fDescription << std::endl;
566 printf("\n");
567 }
568 printf("\n=================================================");
569 if(fESDTrackCuts){
570 printf("\nCuts for the associated track: \n \n");
571
572 printf("ITS Refit........................................: %s\n",fESDTrackCuts->GetRequireITSRefit() ? "Yes" : "No");
573 printf("TPC Refit........................................: %s\n",fESDTrackCuts->GetRequireTPCRefit() ? "Yes" : "No");
574 printf("ITS SA...........................................: %s\n",fESDTrackCuts->GetRequireITSStandAlone() ? "Yes" : "No");
575 printf("TPC SA...........................................: %s\n",fESDTrackCuts->GetRequireTPCStandAlone() ? "Yes" : "No");
576 printf("Min number of ITS clusters.......................: %d\n",fESDTrackCuts->GetMinNClustersITS());
577 printf("Min number of TPC clusters.......................: %d\n",fESDTrackCuts->GetMinNClusterTPC());
578 Int_t spd = fESDTrackCuts->GetClusterRequirementITS(AliESDtrackCuts::kSPD);
579 if(spd==0) std::cout << "SPD..............................................: kOff" << std::endl;
580 if(spd==1) std::cout << "SPD..............................................: kNone" << std::endl;
581 if(spd==2) std::cout << "SPD..............................................: kAny" << std::endl;
582 if(spd==3) std::cout << "SPD..............................................: kFirst" << std::endl;
583 if(spd==4) std::cout << "SPD..............................................: kOnlyFirst" << std::endl;
584 if(spd==5) std::cout << "SPD..............................................: kSecond" << std::endl;
585 if(spd==6) std::cout << "SPD..............................................: kOnlySecond" << std::endl;
586 if(spd==7) std::cout << "SPD..............................................: kBoth" << std::endl;
587 }
588 else printf("\nNo Cuts for Associated Tracks\n");
589 std::cout << "Filter Bit.......................................: " << fBit << std::endl;
590 std::cout << "Charge...........................................: " << fCharge << std::endl;
591
592 if(fAODTrackCuts){
593 for(Int_t j=0;j<fNTrackCuts;j++){
594 std::cout << fTrackCutsNames[j] << fAODTrackCuts[j] << std::endl;
595 }
596 }
597
598 if(fAODvZeroCuts){
599 printf("\n");
600 printf("=================================================");
601 printf("\nCuts for the K0 candidates: \n \n");
602 for(Int_t k=0;k<fNvZeroCuts;k++){
603 std::cout << fvZeroCutsNames[k] << fAODvZeroCuts[k] << std::endl;
604 }
605 }
606 else printf("\nNo Cuts for the K0 candidates\n");
607 std::cout << " " << std::endl;
608 PrintPoolParameters();
609 PrintSelectedMCevents();
610
611}
612
613//--------------------------------------------------------------------------
614void AliHFAssociatedTrackCuts::PrintPoolParameters() const
615{
616 printf("=================================================");
617 printf("\nEvent Pool settings: \n \n");
618
619 printf("Number of zVtx Bins: %d\n", fNzVtxBins);
620 printf("\nzVtx Bins:\n");
621 //Double_t zVtxbinLims[fNzVtxBins+1] = fNzVtxBins;
622 for(Int_t k=0; k<fNzVtxBins; k++){
623 printf("Bin %d..............................................: %.1f - %.1f cm\n", k, fZvtxBins[k], fZvtxBins[k+1]);
624 }
625 printf("\n");
626 printf("\nNumber of Centrality(multiplicity) Bins: %d\n", fNCentBins);
627 printf("\nCentrality(multiplicity) Bins:\n");
628 for(Int_t k=0; k<fNCentBins; k++){
629 printf("Bin %d..............................................: %.1f - %.1f\n", k, fCentBins[k], fCentBins[k+1]);
630 }
631
632
633
634}
635//--------------------------------------------------------------------------
636
637Double_t AliHFAssociatedTrackCuts::GetTrackWeight(Double_t pt, Double_t eta,Double_t zvtx){
638 if(!fEffWeights)return 1.;
639
640 Int_t bin=fEffWeights->FindBin(pt,eta,zvtx);
641 if(fEffWeights->IsBinUnderflow(bin)||fEffWeights->IsBinOverflow(bin))return 1.;
642 return fEffWeights->GetBinContent(bin);
643
644}
645
646
647//--------------------------------------------------------------------------
648Double_t AliHFAssociatedTrackCuts::GetTrigWeight(Double_t pt, Double_t mult){
649
650
651
652 if(fTrigEffWeightsvspt){
653 Int_t bin=fTrigEffWeightsvspt->FindBin(pt);
654 if(fTrigEffWeightsvspt->IsBinUnderflow(bin)||fTrigEffWeightsvspt->IsBinOverflow(bin))return 1.;
655 return fTrigEffWeightsvspt->GetBinContent(bin);
656
657 }
658
659 if(fTrigEffWeights){
660 Int_t bin=fTrigEffWeights->FindBin(pt,mult);
661 if(fTrigEffWeights->IsBinUnderflow(bin)||fTrigEffWeights->IsBinOverflow(bin))return 1.;
662 return fTrigEffWeights->GetBinContent(bin);
663
664 }
665
666 //if(!fTrigEffWeights && !fTrigEffWeightsvspt)return 1.;
667
668 return 1.;
669
670}
671
672//--------------------------------------------------------------------------
673Double_t AliHFAssociatedTrackCuts::GetTrigWeightB(Double_t pt, Double_t mult){
674
675 if(fTrigEffWeightsvsptB){
676 Int_t bin=fTrigEffWeightsvsptB->FindBin(pt);
677 if(fTrigEffWeightsvsptB->IsBinUnderflow(bin)||fTrigEffWeightsvsptB->IsBinOverflow(bin))return 1.;
678 return fTrigEffWeightsvsptB->GetBinContent(bin);
679
680 }
681
682 if(fTrigEffWeightsB){
683 Int_t bin=fTrigEffWeightsB->FindBin(pt,mult);
684 if(fTrigEffWeightsB->IsBinUnderflow(bin)||fTrigEffWeightsB->IsBinOverflow(bin))return 1.;
685 return fTrigEffWeightsB->GetBinContent(bin);
686
687 }
688
689 // if(!fTrigEffWeightsB && !fTrigEffWeightsvsptB)return 1.;
690 return 1;
691}
692//--------------------------------------------------------------------------
693void AliHFAssociatedTrackCuts::PrintSelectedMCevents() const
694{
695 printf("\n=================================================");
696
697 printf("\nSelected MC events: \n \n");
698 printf("Number of selected events: %d\n",fNofMCEventType);
699
700 for(Int_t k=0; k<fNofMCEventType; k++){
701 if(fMCEventType[k]==28) printf("=> Flavour excitation \n");
702 if(fMCEventType[k]==53) printf("=> Pair creation \n");
703 if(fMCEventType[k]==68) printf("=> Gluon splitting \n");
704 }
705
706 printf("\n");
707 for(Int_t k=0; k<fNofMCEventType; k++){
708 printf("MC process code %d \n",fMCEventType[k]);
709 }
710
711 printf("\n");
712
713
714
715
716}
717
718