1 /**************************************************************************
2 * Copyright(c) 1998-2010, 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 ////////////////////////////////////////////////////////////////////////
20 // Base class for cuts on Associated tracks for HF Correlation analysis
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"
31 #include "AliAODVertex.h"
32 #include "AliAODMCParticle.h"
33 #include "AliAnalysisManager.h"
34 #include "AliInputEventHandler.h"
40 ClassImp(AliHFAssociatedTrackCuts)
42 //--------------------------------------------------------------------------
43 AliHFAssociatedTrackCuts::AliHFAssociatedTrackCuts():
49 fTrigEffWeightsvspt(0),
50 fTrigEffWeightsvsptB(0),
86 //--------------------------------------------------------------------------
87 AliHFAssociatedTrackCuts::AliHFAssociatedTrackCuts(const char* name, const char* title):
88 AliAnalysisCuts(name,title),
92 fTrigEffWeightsvspt(0),
93 fTrigEffWeightsvsptB(0),
121 //default constructor
125 //--------------------------------------------------------------------------
126 AliHFAssociatedTrackCuts::AliHFAssociatedTrackCuts(const AliHFAssociatedTrackCuts &source) :
127 AliAnalysisCuts(source),
128 fESDTrackCuts(source.fESDTrackCuts),
129 fPidObj(source.fPidObj),
130 fEffWeights(source.fEffWeights),
131 fTrigEffWeightsvspt(source.fTrigEffWeightsvspt),
132 fTrigEffWeightsvsptB(source.fTrigEffWeightsvsptB),
133 fTrigEffWeights(source.fTrigEffWeights),
134 fTrigEffWeightsB(source.fTrigEffWeightsB),
136 fPoolMaxNEvents(source.fPoolMaxNEvents),
137 fPoolMinNTracks(source.fPoolMinNTracks),
138 fMinEventsToMix(source.fMinEventsToMix),
139 fNzVtxBins(source.fNzVtxBins),
140 fNzVtxBinsDim(source.fNzVtxBinsDim),
141 fZvtxBins(source.fZvtxBins),
142 fNCentBins(source.fNCentBins),
143 fNCentBinsDim(source.fNCentBinsDim),
144 fCentBins(source.fCentBins),
146 fNofMCEventType(source.fNofMCEventType),
147 fMCEventType(source.fMCEventType),
149 fNTrackCuts(source.fNTrackCuts),
150 fAODTrackCuts(source.fAODTrackCuts),
151 fTrackCutsNames(source.fTrackCutsNames),
152 fNvZeroCuts(source.fNvZeroCuts),
153 fAODvZeroCuts(source.fAODvZeroCuts),
154 fvZeroCutsNames(source.fvZeroCutsNames),
156 fCharge(source.fCharge),
157 fDescription(source.fDescription)
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);
177 //--------------------------------------------------------------------------
178 AliHFAssociatedTrackCuts &AliHFAssociatedTrackCuts::operator=(const AliHFAssociatedTrackCuts &source)
181 // assignment operator
183 if(&source == this) return *this;
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;
200 fCharge=source.fCharge;
207 //--------------------------------------------------------------------------
208 AliHFAssociatedTrackCuts::~AliHFAssociatedTrackCuts()
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;}
226 //--------------------------------------------------------------------------
227 Bool_t AliHFAssociatedTrackCuts::IsInAcceptance()
229 printf("Careful: method AliHFAssociatedTrackCuts::IsInAcceptance is not implemented yet \n");
232 //--------------------------------------------------------------------------
233 Bool_t AliHFAssociatedTrackCuts::IsHadronSelected(AliAODTrack * track,const AliESDVertex *primary, Double_t magfield)
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.);
241 // set the TPC cluster info
242 esdtrack.SetTPCClusterMap(track->GetTPCClusterMap());
243 esdtrack.SetTPCSharedMap(track->GetTPCSharedMap());
244 esdtrack.SetTPCPointsF(track->GetTPCNclsF());
246 if(!fESDTrackCuts->IsSelected(&esdtrack)) return kFALSE;
248 if(fBit>-1 && !track->TestFilterBit(fBit)) return kFALSE; // check the filter bit
254 //--------------------------------------------------------------------------
255 Bool_t AliHFAssociatedTrackCuts::CheckHadronKinematic(Double_t pt, Double_t d0)
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;
269 //--------------------------------------------------------------------------
271 Bool_t AliHFAssociatedTrackCuts::Charge(Short_t charge, AliAODTrack* track)
272 {// charge is the charge to compare to (for example, a daughter of a D meson)
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;
279 //--------------------------------------------------------------------------
280 Bool_t AliHFAssociatedTrackCuts::CheckKaonCompatibility(AliAODTrack * track, Bool_t useMc, TClonesArray* mcArray, Int_t method)
282 Bool_t isKaon = kFALSE;
285 Int_t hadLabel = track->GetLabel();
286 if(hadLabel < 0) return kFALSE;
287 AliAODMCParticle* hadron = dynamic_cast<AliAODMCParticle*>(mcArray->At(hadLabel));
289 Int_t pdg = TMath::Abs(hadron->GetPdgCode());
290 if (pdg == 321) isKaon = kTRUE;
294 if(!useMc) { // on DATA
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;
304 Bool_t KaonHyp = kFALSE;
305 Bool_t PionHyp = kFALSE;
306 Bool_t ProtonHyp = kFALSE;
308 if(fPidObj->CheckStatus(track,"TOF")) {
309 isKTOF=fPidObj->IsKaonRaw(track,"TOF");
310 isPiTOF=fPidObj->IsPionRaw(track,"TOF");
311 isPTOF=fPidObj->IsProtonRaw(track,"TOF");
313 if(fPidObj->CheckStatus(track,"TPC")){
314 isKTPC=fPidObj->IsKaonRaw(track,"TPC");
315 isPiTPC=fPidObj->IsPionRaw(track,"TPC");
316 isPTPC=fPidObj->IsProtonRaw(track,"TPC");
319 if (isKTOF && isKTPC) KaonHyp = kTRUE;
320 if (isPiTOF && isPiTPC) PionHyp = kTRUE;
321 if (isPTOF && isPTPC) ProtonHyp = kTRUE;
323 if(KaonHyp && !PionHyp && !ProtonHyp) isKaon = kTRUE;
327 if(fPidObj->MakeRawPid(track,3)>=1) isKaon = kTRUE;
336 //--------------------------------------------------------------------------
337 Bool_t AliHFAssociatedTrackCuts::IsKZeroSelected(AliAODv0 *vzero, AliAODVertex *vtx1)
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;
351 //--------------------------------------------------------------------------
352 Bool_t *AliHFAssociatedTrackCuts::IsMCpartFromHF(Int_t label, TClonesArray*mcArray){
353 // Check origin in MC
355 AliAODMCParticle* mcParticle;
358 Bool_t isCharmy = kFALSE;
359 Bool_t isBeauty = kFALSE;
363 Bool_t *originvect = new Bool_t[4];
365 originvect[0] = kFALSE;
366 originvect[1] = kFALSE;
367 originvect[2] = kFALSE;
368 originvect[3] = kFALSE;
370 if (label<0) return originvect;
372 while(pdgCode!=2212){ // loops back to the collision to check the particle source
374 mcParticle = dynamic_cast<AliAODMCParticle*>(mcArray->At(label));
375 if(!mcParticle) {AliError("NO MC PARTICLE"); break;}
376 pdgCode = TMath::Abs(mcParticle->GetPdgCode());
378 label = mcParticle->GetMother();
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;}
385 if(pdgCode == 4) isCharmy = kTRUE;
386 if(pdgCode == 5) {isBeauty = kTRUE; isCharmy = kFALSE;}
392 originvect[0] = isCharmy;
393 originvect[1] = isBeauty;
401 //--------------------------------------------------------------------------
402 Bool_t AliHFAssociatedTrackCuts::InvMassDstarRejection(AliAODRecoDecayHF2Prong* d, AliAODTrack *track, Int_t hypD0) const {
404 // Calculates invmass of track+D0 and rejects if compatible with D*
405 // (to remove pions from D*)
407 Double_t nsigma = 3.;
409 Double_t mD0, mD0bar;
410 d->InvMassD0(mD0,mD0bar);
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());
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;
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;
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;
438 //________________________________________________________
439 void AliHFAssociatedTrackCuts::SetMCEventTypes(Int_t *MCEventTypeArray)
440 // set the array of event types you want to process in MonteCarlo (gluon splitting, pair production etc.)
442 if(!fMCEventType) fMCEventType = new Int_t[fNofMCEventType];
444 for(Int_t k=0; k<fNofMCEventType; k++){
445 fMCEventType[k] = MCEventTypeArray[k];
450 //________________________________________________________
451 void AliHFAssociatedTrackCuts::SetAODTrackCuts(Float_t *cutsarray)
453 if(!fAODTrackCuts) fAODTrackCuts = new Float_t[fNTrackCuts];
454 for(Int_t i =0; i<fNTrackCuts; i++){
455 fAODTrackCuts[i] = cutsarray[i];
460 //________________________________________________________
461 void AliHFAssociatedTrackCuts::SetTrackCutsNames(/*TString *namearray*/){
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]...................: ";
473 //--------------------------------------------------------------------------
474 void AliHFAssociatedTrackCuts::SetAODvZeroCuts(Float_t *cutsarray)
478 if(!fAODvZeroCuts) fAODvZeroCuts = new Float_t[fNvZeroCuts];
479 for(Int_t i =0; i<fNvZeroCuts; i++){
480 fAODvZeroCuts[i] = cutsarray[i];
485 //--------------------------------------------------------------------------
486 void AliHFAssociatedTrackCuts::SetvZeroCutsNames(/*TString *namearray*/){
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 <............................: ";
501 //--------------------------------------------------------------------------
502 void AliHFAssociatedTrackCuts::SetPidAssociated()
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);
512 //--------------------------------------------------------------------------
514 void AliHFAssociatedTrackCuts::Print(Option_t *option) const
516 /// overloaded from TObject: print info
517 if (strcmp(option, "parameters")==0) {
518 PrintPoolParameters();
520 } else if (strcmp(option, "selectedMC")==0) {
521 PrintSelectedMCevents();
527 //--------------------------------------------------------------------------
528 Int_t AliHFAssociatedTrackCuts::GetPoolBin(Double_t multorcent, Double_t zVtx) const
536 if(multorcent <fCentBins[0]) return poolbin;
537 if(zVtx <fZvtxBins[0]) return poolbin;
540 for (Int_t i=0;i<fNCentBins;i++){
541 if(multorcent<fCentBins[i+1]) {
547 for (Int_t i=0;i<fNzVtxBins;i++){
548 if(zVtx<fZvtxBins[i+1]) {
554 poolbin = centbin + zvtxbin*fNzVtxBins;
558 //--------------------------------------------------------------------------
559 void AliHFAssociatedTrackCuts::PrintAll() const
563 printf("=================================================");
564 printf("\nAdditional description\n");
565 std::cout << fDescription << std::endl;
568 printf("\n=================================================");
570 printf("\nCuts for the associated track: \n \n");
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;
588 else printf("\nNo Cuts for Associated Tracks\n");
589 std::cout << "Filter Bit.......................................: " << fBit << std::endl;
590 std::cout << "Charge...........................................: " << fCharge << std::endl;
593 for(Int_t j=0;j<fNTrackCuts;j++){
594 std::cout << fTrackCutsNames[j] << fAODTrackCuts[j] << std::endl;
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;
606 else printf("\nNo Cuts for the K0 candidates\n");
607 std::cout << " " << std::endl;
608 PrintPoolParameters();
609 PrintSelectedMCevents();
613 //--------------------------------------------------------------------------
614 void AliHFAssociatedTrackCuts::PrintPoolParameters() const
616 printf("=================================================");
617 printf("\nEvent Pool settings: \n \n");
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]);
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]);
635 //--------------------------------------------------------------------------
637 Double_t AliHFAssociatedTrackCuts::GetTrackWeight(Double_t pt, Double_t eta,Double_t zvtx){
638 if(!fEffWeights)return 1.;
640 Int_t bin=fEffWeights->FindBin(pt,eta,zvtx);
641 if(fEffWeights->IsBinUnderflow(bin)||fEffWeights->IsBinOverflow(bin))return 1.;
642 return fEffWeights->GetBinContent(bin);
647 //--------------------------------------------------------------------------
648 Double_t AliHFAssociatedTrackCuts::GetTrigWeight(Double_t pt, Double_t mult){
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);
660 Int_t bin=fTrigEffWeights->FindBin(pt,mult);
661 if(fTrigEffWeights->IsBinUnderflow(bin)||fTrigEffWeights->IsBinOverflow(bin))return 1.;
662 return fTrigEffWeights->GetBinContent(bin);
666 //if(!fTrigEffWeights && !fTrigEffWeightsvspt)return 1.;
672 //--------------------------------------------------------------------------
673 Double_t AliHFAssociatedTrackCuts::GetTrigWeightB(Double_t pt, Double_t mult){
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);
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);
689 // if(!fTrigEffWeightsB && !fTrigEffWeightsvsptB)return 1.;
692 //--------------------------------------------------------------------------
693 void AliHFAssociatedTrackCuts::PrintSelectedMCevents() const
695 printf("\n=================================================");
697 printf("\nSelected MC events: \n \n");
698 printf("Number of selected events: %d\n",fNofMCEventType);
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");
707 for(Int_t k=0; k<fNofMCEventType; k++){
708 printf("MC process code %d \n",fMCEventType[k]);