#include "AliAODPidHF.h"
#include "AliESDtrackCuts.h"
#include "AliESDtrack.h"
+#include "AliESDVertex.h"
#include "AliAODv0.h"
#include "AliAODVertex.h"
#include "AliAODMCParticle.h"
+#include "AliAnalysisManager.h"
+#include "AliInputEventHandler.h"
#include "TString.h"
-
-
+using std::cout;
+using std::endl;
ClassImp(AliHFAssociatedTrackCuts)
AliAnalysisCuts(),
fESDTrackCuts(0),
fPidObj(0),
+ fEffWeights(0),
+
+fTrigEffWeightsvspt(0),
+fTrigEffWeightsvsptB(0),
+fTrigEffWeights(0),
+fTrigEffWeightsB(0),
+fPoolMaxNEvents(0),
+fPoolMinNTracks(0),
+fMinEventsToMix(0),
+fNzVtxBins(0),
+fNzVtxBinsDim(0),
+fZvtxBins(0),
+fNCentBins(0),
+fNCentBinsDim(0),
+fCentBins(0),
+
+fNofMCEventType(0),
+fMCEventType(0),
+
fNTrackCuts(0),
fAODTrackCuts(0),
fTrackCutsNames(0),
fNvZeroCuts(0),
fAODvZeroCuts(0),
-fvZeroCutsNames(0)
+fvZeroCutsNames(0),
+fBit(-1),
+fCharge(0),
+fDescription("")
{
//
AliAnalysisCuts(name,title),
fESDTrackCuts(0),
fPidObj(0),
+fEffWeights(0),
+fTrigEffWeightsvspt(0),
+fTrigEffWeightsvsptB(0),
+fTrigEffWeights(0),
+fTrigEffWeightsB(0),
+fPoolMaxNEvents(0),
+fPoolMinNTracks(0),
+fMinEventsToMix(0),
+fNzVtxBins(0),
+fNzVtxBinsDim(0),
+fZvtxBins(0),
+fNCentBins(0),
+fNCentBinsDim(0),
+fCentBins(0),
+
+fNofMCEventType(0),
+fMCEventType(0),
+
fNTrackCuts(0),
fAODTrackCuts(0),
fTrackCutsNames(0),
fNvZeroCuts(0),
fAODvZeroCuts(0),
-fvZeroCutsNames(0)
+fvZeroCutsNames(0),
+fBit(-1),
+fCharge(0),
+fDescription("")
{
//
AliAnalysisCuts(source),
fESDTrackCuts(source.fESDTrackCuts),
fPidObj(source.fPidObj),
+fEffWeights(source.fEffWeights),
+fTrigEffWeightsvspt(source.fTrigEffWeightsvspt),
+fTrigEffWeightsvsptB(source.fTrigEffWeightsvsptB),
+fTrigEffWeights(source.fTrigEffWeights),
+fTrigEffWeightsB(source.fTrigEffWeightsB),
+
+fPoolMaxNEvents(source.fPoolMaxNEvents),
+fPoolMinNTracks(source.fPoolMinNTracks),
+fMinEventsToMix(source.fMinEventsToMix),
+fNzVtxBins(source.fNzVtxBins),
+fNzVtxBinsDim(source.fNzVtxBinsDim),
+fZvtxBins(source.fZvtxBins),
+fNCentBins(source.fNCentBins),
+fNCentBinsDim(source.fNCentBinsDim),
+fCentBins(source.fCentBins),
+
+fNofMCEventType(source.fNofMCEventType),
+fMCEventType(source.fMCEventType),
+
fNTrackCuts(source.fNTrackCuts),
fAODTrackCuts(source.fAODTrackCuts),
fTrackCutsNames(source.fTrackCutsNames),
fNvZeroCuts(source.fNvZeroCuts),
fAODvZeroCuts(source.fAODvZeroCuts),
-fvZeroCutsNames(source.fvZeroCutsNames)
+fvZeroCutsNames(source.fvZeroCutsNames),
+fBit(source.fBit),
+fCharge(source.fCharge),
+fDescription(source.fDescription)
{
//
// copy constructor
//
- cout << "AliHFAssociatedTrackCuts::Copy constructor " << endl;
+ AliInfo("AliHFAssociatedTrackCuts::Copy constructor ");
if(source.fESDTrackCuts) AddTrackCuts(source.fESDTrackCuts);
if(source.fAODTrackCuts) SetAODTrackCuts(source.fAODTrackCuts);
if(source.fAODvZeroCuts) SetAODvZeroCuts(source.fAODvZeroCuts);
if(source.fPidObj) SetPidHF(source.fPidObj);
+ if(source.fEffWeights) SetEfficiencyWeightMap(source.fEffWeights);
+ if(source.fTrigEffWeightsvspt) SetTriggerEffWeightMapvspt(source.fTrigEffWeightsvspt);
+ if(source.fTrigEffWeightsvsptB) SetTriggerEffWeightMapvsptB(source.fTrigEffWeightsvsptB);
+ if(source.fTrigEffWeights) SetTriggerEffWeightMap(source.fTrigEffWeights);
+ if(source.fTrigEffWeightsB)SetTriggerEffWeightMapB(source.fTrigEffWeightsB);
+
+
}
//--------------------------------------------------------------------------
AliHFAssociatedTrackCuts &AliHFAssociatedTrackCuts::operator=(const AliHFAssociatedTrackCuts &source)
AliAnalysisCuts::operator=(source);
fESDTrackCuts=source.fESDTrackCuts;
fPidObj=source.fPidObj;
+ fEffWeights=source.fEffWeights;
+ fTrigEffWeightsvspt=source.fTrigEffWeightsvspt;
+ fTrigEffWeightsvsptB=source.fTrigEffWeightsvsptB;
+ fTrigEffWeights=source.fTrigEffWeights;
+ fTrigEffWeightsB=source.fTrigEffWeightsB;
fNTrackCuts=source.fNTrackCuts;
fAODTrackCuts=source.fAODTrackCuts;
fTrackCutsNames=source.fTrackCutsNames;
fNvZeroCuts=source.fNvZeroCuts;
fAODvZeroCuts=source.fAODvZeroCuts;
fvZeroCutsNames=source.fvZeroCutsNames;
+ fBit=source.fBit;
+ fCharge=source.fCharge;
return *this;
{
if(fESDTrackCuts) {delete fESDTrackCuts; fESDTrackCuts = 0;}
if(fPidObj) {delete fPidObj; fPidObj = 0;}
+ if(fEffWeights){delete fEffWeights;fEffWeights=0;}
+ if(fTrigEffWeightsvspt){delete fTrigEffWeightsvspt;fTrigEffWeightsvspt=0;}
+ if(fTrigEffWeightsvsptB){delete fTrigEffWeightsvsptB;fTrigEffWeightsvsptB=0;}
+ if(fTrigEffWeights){delete fTrigEffWeights;fTrigEffWeights=0;}
+ if(fTrigEffWeightsB){delete fTrigEffWeightsB;fTrigEffWeightsB=0;}
+ if(fZvtxBins) {delete[] fZvtxBins; fZvtxBins=0;}
+ if(fCentBins) {delete[] fCentBins; fCentBins=0;}
if(fAODTrackCuts) {delete[] fAODTrackCuts; fAODTrackCuts=0;}
if(fTrackCutsNames) {delete[] fTrackCutsNames; fTrackCutsNames=0;}
if(fAODvZeroCuts){delete[] fAODvZeroCuts; fAODvZeroCuts=0;}
if(fvZeroCutsNames) {delete[] fvZeroCutsNames; fvZeroCutsNames=0;}
+
}
//--------------------------------------------------------------------------
return kFALSE;
}
//--------------------------------------------------------------------------
-Bool_t AliHFAssociatedTrackCuts::IsHadronSelected(AliAODTrack * track, AliAODVertex *vtx1, Double_t bz)
+Bool_t AliHFAssociatedTrackCuts::IsHadronSelected(AliAODTrack * track,const AliESDVertex *primary, Double_t magfield)
{
+
+ AliESDtrack esdtrack(track);
+ if(primary){// needed to calculate impact parameters
+ // needed to calculate the impact parameters
+ esdtrack.RelateToVertex(primary,magfield,3.);
+ }
+ // set the TPC cluster info
+ esdtrack.SetTPCClusterMap(track->GetTPCClusterMap());
+ esdtrack.SetTPCSharedMap(track->GetTPCSharedMap());
+ esdtrack.SetTPCPointsF(track->GetTPCNclsF());
+
+ if(!fESDTrackCuts->IsSelected(&esdtrack)) return kFALSE;
+
+ if(fBit>-1 && !track->TestFilterBit(fBit)) return kFALSE; // check the filter bit
+
+ return kTRUE;
+}
+
+//--------------------------------------------------------------------------
+Bool_t AliHFAssociatedTrackCuts::CheckHadronKinematic(Double_t pt, Double_t d0)
+{
- Double_t d0 = -999.;
- Double_t d0err = -998.;
- Double_t VeryBig = 100;
-
- AliESDtrack esdtrack(track);
- Double_t d0z0[2],covd0z0[3];
-
- esdtrack.PropagateToDCA(vtx1,bz,VeryBig,d0z0,covd0z0);
-
- d0 = TMath::Abs(d0z0[0]);
- d0err = TMath::Sqrt(covd0z0[0]);
-
- if(!fESDTrackCuts->IsSelected(&esdtrack)) return kFALSE;
- if(track->Pt() < fAODTrackCuts[0]) return kFALSE;
- if(track->Pt() > fAODTrackCuts[1]) return kFALSE;
- if(d0 < fAODTrackCuts[2]) return kFALSE;
- if(d0 > fAODTrackCuts[3]) return kFALSE;
+ if(pt < fAODTrackCuts[0]) return kFALSE;
+ if(pt > fAODTrackCuts[1]) return kFALSE;
+ if(d0 < fAODTrackCuts[2]) return kFALSE;
+ if(d0 > fAODTrackCuts[3]) return kFALSE;
return kTRUE;
}
//--------------------------------------------------------------------------
-Bool_t AliHFAssociatedTrackCuts::CheckKaonCompatibility(AliAODTrack * track, Bool_t useMc, TClonesArray* mcArray)
+
+Bool_t AliHFAssociatedTrackCuts::Charge(Short_t charge, AliAODTrack* track)
+{// charge is the charge to compare to (for example, a daughter of a D meson)
+
+ if(!fCharge) return kTRUE; // if fCharge is set to 0 (no selection on the charge), returns always true
+ if(track->Charge()!= fCharge*charge) return kFALSE;
+ return kTRUE;
+}
+
+//--------------------------------------------------------------------------
+Bool_t AliHFAssociatedTrackCuts::CheckKaonCompatibility(AliAODTrack * track, Bool_t useMc, TClonesArray* mcArray, Int_t method)
{
Bool_t isKaon = kFALSE;
if(useMc) { // on MC
Int_t hadLabel = track->GetLabel();
if(hadLabel < 0) return kFALSE;
- AliAODMCParticle* hadron = dynamic_cast<AliAODMCParticle*>(mcArray->At(hadLabel));
- Int_t pdg = TMath::Abs(hadron->GetPdgCode());
- if (pdg == 321) isKaon = kTRUE;
+ AliAODMCParticle* hadron = dynamic_cast<AliAODMCParticle*>(mcArray->At(hadLabel));
+ if(hadron){
+ Int_t pdg = TMath::Abs(hadron->GetPdgCode());
+ if (pdg == 321) isKaon = kTRUE;
+ }
}
if(!useMc) { // on DATA
-
+ switch(method) {
+ case(1): {
Bool_t isKTPC=kFALSE;
Bool_t isPiTPC=kFALSE;
Bool_t isPTPC=kFALSE;
if (isPTOF && isPTPC) ProtonHyp = kTRUE;
if(KaonHyp && !PionHyp && !ProtonHyp) isKaon = kTRUE;
+ break;
+ }
+ case(2): {
+ if(fPidObj->MakeRawPid(track,3)>=1) isKaon = kTRUE;
+ break;
+ }
+ }
}
return isKaon;
return kTRUE;
}
//--------------------------------------------------------------------------
-Int_t AliHFAssociatedTrackCuts::IsMCpartFromHF(Int_t label, TClonesArray*mcArray)
+Bool_t *AliHFAssociatedTrackCuts::IsMCpartFromHF(Int_t label, TClonesArray*mcArray){
+ // Check origin in MC
-{
-AliAODMCParticle* MCParticle;
-Int_t generationpdgcode = -1;
-if (label<0) return 0;
-Bool_t isCharmy = kFALSE;
-Bool_t isBeauty = kFALSE;
-Int_t generation = 0;
-while(generationpdgcode!=2212){ // loops back to the collision to check the particle source
- MCParticle = dynamic_cast<AliAODMCParticle*>(mcArray->At(label));
- generationpdgcode = TMath::Abs(MCParticle->GetPdgCode());
- label = MCParticle->GetMother();
- generation++;
- if(generationpdgcode == 4) isCharmy = kTRUE;
- if(generationpdgcode == 5) {isBeauty = kTRUE; isCharmy = kFALSE;}
- if(label<0) break;
+ AliAODMCParticle* mcParticle;
+ Int_t pdgCode = -1;
+ Bool_t isCharmy = kFALSE;
+ Bool_t isBeauty = kFALSE;
+ Bool_t isD = kFALSE;
+ Bool_t isB = kFALSE;
+
+ Bool_t *originvect = new Bool_t[4];
+
+ originvect[0] = kFALSE;
+ originvect[1] = kFALSE;
+ originvect[2] = kFALSE;
+ originvect[3] = kFALSE;
+
+ if (label<0) return originvect;
+
+ while(pdgCode!=2212){ // loops back to the collision to check the particle source
+
+ mcParticle = dynamic_cast<AliAODMCParticle*>(mcArray->At(label));
+ if(!mcParticle) {AliError("NO MC PARTICLE"); break;}
+ pdgCode = TMath::Abs(mcParticle->GetPdgCode());
+
+ label = mcParticle->GetMother();
+
+
+ if((pdgCode>=400 && pdgCode <500) || (pdgCode>=4000 && pdgCode<5000 )) isD = kTRUE;
+ if((pdgCode>=500 && pdgCode <600) || (pdgCode>=5000 && pdgCode<6000 )) {isD = kFALSE; isB = kTRUE;}
+
+
+ if(pdgCode == 4) isCharmy = kTRUE;
+ if(pdgCode == 5) {isBeauty = kTRUE; isCharmy = kFALSE;}
+ if(label<0) break;
+
+ }
+
+
+ originvect[0] = isCharmy;
+ originvect[1] = isBeauty;
+ originvect[2] = isD;
+ originvect[3] = isB;
+
+
+ return originvect;
}
-if (isCharmy) return 4;
-else if (isBeauty) return 5;
-else return 0;
+//--------------------------------------------------------------------------
+Bool_t AliHFAssociatedTrackCuts::InvMassDstarRejection(AliAODRecoDecayHF2Prong* d, AliAODTrack *track, Int_t hypD0) const {
+ //
+ // Calculates invmass of track+D0 and rejects if compatible with D*
+ // (to remove pions from D*)
+ //
+ Double_t nsigma = 3.;
+
+ Double_t mD0, mD0bar;
+ d->InvMassD0(mD0,mD0bar);
+
+ Double_t invmassDstar1 = 0, invmassDstar2 = 0;
+ Double_t e1Pi = d->EProng(0,211), e2K = d->EProng(1,321); //hyp 1 (pi,K) - D0
+ Double_t e1K = d->EProng(0,321), e2Pi = d->EProng(1,211); //hyp 2 (K,pi) - D0bar
+ Double_t psum2 = (d->Px()+track->Px())*(d->Px()+track->Px())
+ +(d->Py()+track->Py())*(d->Py()+track->Py())
+ +(d->Pz()+track->Pz())*(d->Pz()+track->Pz());
+
+ switch(hypD0) {
+ case 1:
+ invmassDstar1 = TMath::Sqrt(pow(e1Pi+e2K+track->E(0.1396),2.)-psum2);
+ if ((TMath::Abs(invmassDstar1-mD0)-0.14543) < nsigma*800.*pow(10.,-6.)) return kFALSE;
+ break;
+ case 2:
+ invmassDstar2 = TMath::Sqrt(pow(e2Pi+e1K+track->E(0.1396),2.)-psum2);
+ if ((TMath::Abs(invmassDstar2-mD0bar)-0.14543) < nsigma*800.*pow(10.,-6.)) return kFALSE;
+ break;
+ case 3:
+ invmassDstar1 = TMath::Sqrt(pow(e1Pi+e2K+track->E(0.1396),2.)-psum2);
+ invmassDstar2 = TMath::Sqrt(pow(e2Pi+e1K+track->E(0.1396),2.)-psum2);
+ if ((TMath::Abs(invmassDstar1-mD0)-0.14543) < nsigma*800.*pow(10.,-6.)) return kFALSE;
+ if ((TMath::Abs(invmassDstar2-mD0bar)-0.14543) < nsigma*800.*pow(10.,-6.)) return kFALSE;
+ break;
+ }
+
+ return kTRUE;
+}
+//________________________________________________________
+void AliHFAssociatedTrackCuts::SetMCEventTypes(Int_t *MCEventTypeArray)
+// set the array of event types you want to process in MonteCarlo (gluon splitting, pair production etc.)
+{
+ if(!fMCEventType) fMCEventType = new Int_t[fNofMCEventType];
+ for(Int_t k=0; k<fNofMCEventType; k++){
+ fMCEventType[k] = MCEventTypeArray[k];
+ }
+ return;
}
+
//________________________________________________________
void AliHFAssociatedTrackCuts::SetAODTrackCuts(Float_t *cutsarray)
{
-
if(!fAODTrackCuts) fAODTrackCuts = new Float_t[fNTrackCuts];
-
for(Int_t i =0; i<fNTrackCuts; i++){
-
fAODTrackCuts[i] = cutsarray[i];
}
SetTrackCutsNames();
}
//--------------------------------------------------------------------------
-void AliHFAssociatedTrackCuts::PrintAll()
+void AliHFAssociatedTrackCuts::SetPidAssociated()
{
- printf("\nCuts for the associated track: \n \n");
-
- printf("ITS Refit........................................: %s\n",fESDTrackCuts->GetRequireITSRefit() ? "Yes" : "No");
- printf("TPC Refit........................................: %s\n",fESDTrackCuts->GetRequireTPCRefit() ? "Yes" : "No");
- printf("ITS SA...........................................: %s\n",fESDTrackCuts->GetRequireITSStandAlone() ? "Yes" : "No");
- printf("TPC SA...........................................: %s\n",fESDTrackCuts->GetRequireTPCStandAlone() ? "Yes" : "No");
- printf("Min number of ITS clusters.......................: %d\n",fESDTrackCuts->GetMinNClustersITS());
- printf("Min number of TPC clusters.......................: %d\n",fESDTrackCuts->GetMinNClusterTPC());
- Int_t spd = fESDTrackCuts->GetClusterRequirementITS(AliESDtrackCuts::kSPD);
- if(spd==0) cout << "SPD..............................................: kOff" << endl;
- if(spd==1) cout << "SPD..............................................: kNone" << endl;
- if(spd==2) cout << "SPD..............................................: kAny" << endl;
- if(spd==3) cout << "SPD..............................................: kFirst" << endl;
- if(spd==4) cout << "SPD..............................................: kOnlyFirst" << endl;
- if(spd==5) cout << "SPD..............................................: kSecond" << endl;
- if(spd==6) cout << "SPD..............................................: kOnlySecond" << endl;
- if(spd==7) cout << "SPD..............................................: kBoth" << endl;
-
- for(Int_t j=0;j<fNTrackCuts;j++){
- cout << fTrackCutsNames[j] << fAODTrackCuts[j] << endl;
+ //setting PidResponse
+ if(fPidObj->GetOldPid()==kFALSE && fPidObj->GetPidResponse()==0x0){
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
+ AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
+ fPidObj->SetPidResponse(pidResp);
+ }
+}
+//--------------------------------------------------------------------------
+
+void AliHFAssociatedTrackCuts::Print(Option_t *option) const
+{
+ /// overloaded from TObject: print info
+ if (strcmp(option, "parameters")==0) {
+ PrintPoolParameters();
+ return;
+ } else if (strcmp(option, "selectedMC")==0) {
+ PrintSelectedMCevents();
+ return;
+ }
+ PrintAll();
+}
+
+//--------------------------------------------------------------------------
+Int_t AliHFAssociatedTrackCuts::GetPoolBin(Double_t multorcent, Double_t zVtx) const
+{
+
+ Int_t poolbin = -1;
+ Int_t centbin = -1;
+ Int_t zvtxbin = -1;
+
+
+ if(multorcent <fCentBins[0]) return poolbin;
+ if(zVtx <fZvtxBins[0]) return poolbin;
+
+
+ for (Int_t i=0;i<fNCentBins;i++){
+ if(multorcent<fCentBins[i+1]) {
+ centbin=i;
+ break;
+ }
+ }
+
+ for (Int_t i=0;i<fNzVtxBins;i++){
+ if(zVtx<fZvtxBins[i+1]) {
+ zvtxbin=i;
+ break;
+ }
+ }
+
+ poolbin = centbin + zvtxbin*fNzVtxBins;
+
+ return poolbin;
+}
+//--------------------------------------------------------------------------
+void AliHFAssociatedTrackCuts::PrintAll() const
+{
+
+ if(fDescription){
+ printf("=================================================");
+ printf("\nAdditional description\n");
+ std::cout << fDescription << std::endl;
+ printf("\n");
+ }
+ printf("\n=================================================");
+ if(fESDTrackCuts){
+ printf("\nCuts for the associated track: \n \n");
+
+ printf("ITS Refit........................................: %s\n",fESDTrackCuts->GetRequireITSRefit() ? "Yes" : "No");
+ printf("TPC Refit........................................: %s\n",fESDTrackCuts->GetRequireTPCRefit() ? "Yes" : "No");
+ printf("ITS SA...........................................: %s\n",fESDTrackCuts->GetRequireITSStandAlone() ? "Yes" : "No");
+ printf("TPC SA...........................................: %s\n",fESDTrackCuts->GetRequireTPCStandAlone() ? "Yes" : "No");
+ printf("Min number of ITS clusters.......................: %d\n",fESDTrackCuts->GetMinNClustersITS());
+ printf("Min number of TPC clusters.......................: %d\n",fESDTrackCuts->GetMinNClusterTPC());
+ Int_t spd = fESDTrackCuts->GetClusterRequirementITS(AliESDtrackCuts::kSPD);
+ if(spd==0) std::cout << "SPD..............................................: kOff" << std::endl;
+ if(spd==1) std::cout << "SPD..............................................: kNone" << std::endl;
+ if(spd==2) std::cout << "SPD..............................................: kAny" << std::endl;
+ if(spd==3) std::cout << "SPD..............................................: kFirst" << std::endl;
+ if(spd==4) std::cout << "SPD..............................................: kOnlyFirst" << std::endl;
+ if(spd==5) std::cout << "SPD..............................................: kSecond" << std::endl;
+ if(spd==6) std::cout << "SPD..............................................: kOnlySecond" << std::endl;
+ if(spd==7) std::cout << "SPD..............................................: kBoth" << std::endl;
+ }
+ else printf("\nNo Cuts for Associated Tracks\n");
+ std::cout << "Filter Bit.......................................: " << fBit << std::endl;
+ std::cout << "Charge...........................................: " << fCharge << std::endl;
+
+ if(fAODTrackCuts){
+ for(Int_t j=0;j<fNTrackCuts;j++){
+ std::cout << fTrackCutsNames[j] << fAODTrackCuts[j] << std::endl;
+ }
}
+
+ if(fAODvZeroCuts){
+ printf("\n");
+ printf("=================================================");
+ printf("\nCuts for the K0 candidates: \n \n");
+ for(Int_t k=0;k<fNvZeroCuts;k++){
+ std::cout << fvZeroCutsNames[k] << fAODvZeroCuts[k] << std::endl;
+ }
+ }
+ else printf("\nNo Cuts for the K0 candidates\n");
+ std::cout << " " << std::endl;
+ PrintPoolParameters();
+ PrintSelectedMCevents();
+
+}
+
+//--------------------------------------------------------------------------
+void AliHFAssociatedTrackCuts::PrintPoolParameters() const
+{
+ printf("=================================================");
+ printf("\nEvent Pool settings: \n \n");
+
+ printf("Number of zVtx Bins: %d\n", fNzVtxBins);
+ printf("\nzVtx Bins:\n");
+ //Double_t zVtxbinLims[fNzVtxBins+1] = fNzVtxBins;
+ for(Int_t k=0; k<fNzVtxBins; k++){
+ printf("Bin %d..............................................: %.1f - %.1f cm\n", k, fZvtxBins[k], fZvtxBins[k+1]);
+ }
+ printf("\n");
+ printf("\nNumber of Centrality(multiplicity) Bins: %d\n", fNCentBins);
+ printf("\nCentrality(multiplicity) Bins:\n");
+ for(Int_t k=0; k<fNCentBins; k++){
+ printf("Bin %d..............................................: %.1f - %.1f\n", k, fCentBins[k], fCentBins[k+1]);
+ }
+
+
- printf("\nCuts for the K0 candidates: \n \n");
- for(Int_t k=0;k<fNvZeroCuts;k++){
- cout << fvZeroCutsNames[k] << fAODvZeroCuts[k] << endl;
+}
+//--------------------------------------------------------------------------
+
+Double_t AliHFAssociatedTrackCuts::GetTrackWeight(Double_t pt, Double_t eta,Double_t zvtx){
+ if(!fEffWeights)return 1.;
+
+ Int_t bin=fEffWeights->FindBin(pt,eta,zvtx);
+ if(fEffWeights->IsBinUnderflow(bin)||fEffWeights->IsBinOverflow(bin))return 1.;
+ return fEffWeights->GetBinContent(bin);
+
+}
+
+
+//--------------------------------------------------------------------------
+Double_t AliHFAssociatedTrackCuts::GetTrigWeight(Double_t pt, Double_t mult){
+
+
+
+ if(fTrigEffWeightsvspt){
+ Int_t bin=fTrigEffWeightsvspt->FindBin(pt);
+ if(fTrigEffWeightsvspt->IsBinUnderflow(bin)||fTrigEffWeightsvspt->IsBinOverflow(bin))return 1.;
+ return fTrigEffWeightsvspt->GetBinContent(bin);
+
+ }
+
+ if(fTrigEffWeights){
+ Int_t bin=fTrigEffWeights->FindBin(pt,mult);
+ if(fTrigEffWeights->IsBinUnderflow(bin)||fTrigEffWeights->IsBinOverflow(bin))return 1.;
+ return fTrigEffWeights->GetBinContent(bin);
+
+ }
+
+ //if(!fTrigEffWeights && !fTrigEffWeightsvspt)return 1.;
+
+ return 1.;
+
+}
+
+//--------------------------------------------------------------------------
+Double_t AliHFAssociatedTrackCuts::GetTrigWeightB(Double_t pt, Double_t mult){
+
+ if(fTrigEffWeightsvsptB){
+ Int_t bin=fTrigEffWeightsvsptB->FindBin(pt);
+ if(fTrigEffWeightsvsptB->IsBinUnderflow(bin)||fTrigEffWeightsvsptB->IsBinOverflow(bin))return 1.;
+ return fTrigEffWeightsvsptB->GetBinContent(bin);
+
+ }
+
+ if(fTrigEffWeightsB){
+ Int_t bin=fTrigEffWeightsB->FindBin(pt,mult);
+ if(fTrigEffWeightsB->IsBinUnderflow(bin)||fTrigEffWeightsB->IsBinOverflow(bin))return 1.;
+ return fTrigEffWeightsB->GetBinContent(bin);
+
+ }
+
+ // if(!fTrigEffWeightsB && !fTrigEffWeightsvsptB)return 1.;
+ return 1;
+}
+//--------------------------------------------------------------------------
+void AliHFAssociatedTrackCuts::PrintSelectedMCevents() const
+{
+ printf("\n=================================================");
+
+ printf("\nSelected MC events: \n \n");
+ printf("Number of selected events: %d\n",fNofMCEventType);
+
+ for(Int_t k=0; k<fNofMCEventType; k++){
+ if(fMCEventType[k]==28) printf("=> Flavour excitation \n");
+ if(fMCEventType[k]==53) printf("=> Pair creation \n");
+ if(fMCEventType[k]==68) printf("=> Gluon splitting \n");
+ }
+
+ printf("\n");
+ for(Int_t k=0; k<fNofMCEventType; k++){
+ printf("MC process code %d \n",fMCEventType[k]);
}
- cout << " " << endl;
+
+ printf("\n");
+
+
+
+
}
+
+