* provided "as is" without express or implied warranty. *
**************************************************************************/
+/* $Id$ */
+
//-----------------------------------------------------------------------
// Class for HF corrections as a function of many variables
// 6 Steps introduced: MC, MC Acc, Reco, Reco Acc, Reco Acc + ITS Cl,
fKeepD0fromBOnly(kFALSE),
fCuts(0),
fUseWeight(kFALSE),
- fWeight(1.)
+ fWeight(1.),
+ fSign(2)
{
//
//Default ctor
fKeepD0fromBOnly(kFALSE),
fCuts(cuts),
fUseWeight(kFALSE),
- fWeight(1.)
+ fWeight(1.),
+ fSign(2)
{
//
// Constructor. Initialization of Inputs and Outputs
fKeepD0fromBOnly(c.fKeepD0fromBOnly),
fCuts(c.fCuts),
fUseWeight(c.fUseWeight),
- fWeight(c.fWeight)
+ fWeight(c.fWeight),
+ fSign(c.fSign)
{
//
// Copy Constructor
if(fDebug > 1) printf("AliCFHeavyFlavourTaskMultiVarMultiStep::Init() \n");
+ fMinITSClusters = fCuts->GetTrackCuts()->GetMinNClustersITS();
AliRDHFCutsD0toKpi* copyfCuts=new AliRDHFCutsD0toKpi(*fCuts);
const char* nameoutput=GetOutputSlot(4)->GetContainer()->GetName();
copyfCuts->SetName(nameoutput);
// fix for temporary bug in ESDfilter
// the AODs with null vertex pointer didn't pass the PhysSel
- if(!aodEvent->GetPrimaryVertex()) return;
+ if(!aodEvent->GetPrimaryVertex() || TMath::Abs(aodEvent->GetMagneticField())<0.001) return;
fEvents++;
for (Int_t iPart=0; iPart<mcArray->GetEntriesFast(); iPart++) {
AliAODMCParticle* mcPart = dynamic_cast<AliAODMCParticle*>(mcArray->At(iPart));
- if (mcPart->GetPdgCode() == 4) cquarks++;
- if (mcPart->GetPdgCode() == -4) cquarks++;
if (!mcPart) {
AliWarning("Particle not found in tree, skipping");
continue;
}
+ if (mcPart->GetPdgCode() == 4) cquarks++;
+ if (mcPart->GetPdgCode() == -4) cquarks++;
// check the MC-level cuts
AliWarning("Could not find associated MC in AOD MC tree");
continue;
}
- if(mcVtxHF->GetPdgCode()==421)isD0D0bar=1;
- else if(mcVtxHF->GetPdgCode()==-421)isD0D0bar=2;
+
+ if (mcVtxHF->GetPdgCode() == 421){ // particle is D0
+ if (fSign == 1){ // I ask for D0bar only
+ AliDebug(2,"particle is D0, I ask for D0bar only");
+ continue;
+ }
+ else{
+ isD0D0bar=1;
+ }
+ }
+ else if (mcVtxHF->GetPdgCode()== -421){ // particle is D0bar
+ if (fSign == 0){ // I ask for D0 only
+ AliDebug(2,"particle is D0bar, I ask for D0 only");
+ continue;
+ }
+ else{
+ isD0D0bar=2;
+ }
+ }
else continue;
+
// check whether the daughters have kTPCrefit and kITSrefit set
AliAODTrack *track0 = (AliAODTrack*)d0tokpi->GetDaughter(0);
AliAODTrack *track1 = (AliAODTrack*)d0tokpi->GetDaughter(1);
corr2->Draw("text");
- TString projection_filename="CFtaskHFprojection";
- if(fKeepD0fromBOnly) projection_filename+="_KeepD0fromBOnly";
- else if(fKeepD0fromB) projection_filename+="_KeepD0fromB";
- projection_filename+=".root";
- TFile* file_projection = new TFile(projection_filename.Data(),"RECREATE");
+ TString projectionFilename="CFtaskHFprojection";
+ if(fKeepD0fromBOnly) projectionFilename+="_KeepD0fromBOnly";
+ else if(fKeepD0fromB) projectionFilename+="_KeepD0fromB";
+ projectionFilename+=".root";
+ TFile* fileProjection = new TFile(projectionFilename.Data(),"RECREATE");
corr1->Write();
corr2->Write();
h104->Write("cosPointingAngle_step2");
h114->Write("phi_step2");
- file_projection->Close();
+ fileProjection->Close();
}
//___________________________________________________________________________
-Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::CosThetaStar(AliAODMCParticle* mcPart, AliAODMCParticle* mcPartDaughter0, AliAODMCParticle* mcPartDaughter1) const {
+Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::CosThetaStar(const AliAODMCParticle* mcPart, const AliAODMCParticle* mcPartDaughter0, const AliAODMCParticle* mcPartDaughter1) const {
//
// to calculate cos(ThetaStar) for generated particle
}
if (pdgprong0 == 211){
AliDebug(2,Form("pdgprong0 = %d, pdgprong1 = %d, switching...",pdgprong0,pdgprong1));
- AliAODMCParticle* mcPartdummy = mcPartDaughter0;
+ const AliAODMCParticle* mcPartdummy = mcPartDaughter0;
mcPartDaughter0 = mcPartDaughter1;
mcPartDaughter1 = mcPartdummy;
pdgprong0 = TMath::Abs(mcPartDaughter0->GetPdgCode());
return cts;
}
//___________________________________________________________________________
-Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::CT(AliAODMCParticle* mcPart, AliAODMCParticle* mcPartDaughter0, AliAODMCParticle* mcPartDaughter1) const {
+Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::CT(const AliAODMCParticle* mcPart, const AliAODMCParticle* mcPartDaughter0, const AliAODMCParticle* mcPartDaughter1) const {
//
// to calculate cT for generated particle
return cT;
}
//________________________________________________________________________________
-Bool_t AliCFHeavyFlavourTaskMultiVarMultiStep::GetGeneratedValuesFromMCParticle(AliAODMCParticle* mcPart, TClonesArray* mcArray, Double_t* vectorMC) const {
+Bool_t AliCFHeavyFlavourTaskMultiVarMultiStep::GetGeneratedValuesFromMCParticle(AliAODMCParticle* mcPart, const TClonesArray* mcArray, Double_t* vectorMC) const {
//
// collecting all the necessary info (pt, y, cosThetaStar, ptPi, ptKa, cT) from MC particle
return isOk;
}
//_________________________________________________________________________________________________
-Int_t AliCFHeavyFlavourTaskMultiVarMultiStep::CheckOrigin(AliAODMCParticle* mcPart, TClonesArray* mcArray)const{
+Int_t AliCFHeavyFlavourTaskMultiVarMultiStep::CheckOrigin(const AliAODMCParticle* mcPart, const TClonesArray* mcArray)const{
//
// checking whether the very mother of the D0 is a charm or a bottom quark
istep++;
AliDebug(2,Form("mother at step %d = %d", istep, mother));
AliAODMCParticle* mcGranma = dynamic_cast<AliAODMCParticle*>(mcArray->At(mother));
+ if(!mcGranma) break;
pdgGranma = mcGranma->GetPdgCode();
AliDebug(2,Form("Pdg mother at step %d = %d", istep, pdgGranma));
Int_t abspdgGranma = TMath::Abs(pdgGranma);
Double_t func1[4] = {0.322643,2.96275,2.30301,2.5};
Double_t func2[4] = {0.36609,1.94635,1.40463,2.5};
- Double_t dndpt_func1 = dNdptFit(pt,func1);
- Double_t dndpt_func2 = dNdptFit(pt,func2);
- AliDebug(2,Form("pt = %f, FONLL = %f, Pythia = %f, ratio = %f",pt,dndpt_func1,dndpt_func2,dndpt_func1/dndpt_func2));
- return dndpt_func1/dndpt_func2;
+ Double_t dndptFunc1 = DodNdptFit(pt,func1);
+ Double_t dndptFunc2 = DodNdptFit(pt,func2);
+ AliDebug(2,Form("pt = %f, FONLL = %f, Pythia = %f, ratio = %f",pt,dndptFunc1,dndptFunc2,dndptFunc1/dndptFunc2));
+ return dndptFunc1/dndptFunc2;
}
//__________________________________________________________________________________________________
-Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::dNdptFit(Float_t pt, Double_t* par){
+Double_t AliCFHeavyFlavourTaskMultiVarMultiStep::DodNdptFit(Float_t pt, const Double_t* par)const{
//
// calculating dNdpt