// Now container for TLists
last=5;
//########## NO CUTS TLISTS CONTAINER ##############à
- containername="coutput_nc_sign";
+ containername="clistNCsign";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_nc_sign = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistNCsign = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_nc_sign);
+ mgr->ConnectOutput(hfTask,last,clistNCsign);
last++;
- containername="coutput_nc_back";
+ containername="clistNCback";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_nc_back = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistNCback = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_nc_back);
+ mgr->ConnectOutput(hfTask,last,clistNCback);
last++;
- containername="coutput_nc_fromB";
+ containername="clistNCfromB";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_nc_fromB = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistNCfromB = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_nc_fromB);
+ mgr->ConnectOutput(hfTask,last,clistNCfromB);
last++;
- containername="coutput_nc_fromDstar";
+ containername="clistNCfromDstar";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_nc_fromDstar = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistNCfromDstar = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_nc_fromDstar);
+ mgr->ConnectOutput(hfTask,last,clistNCfromDstar);
last++;
- containername="coutput_nc_other";
+ containername="clistNCother";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_nc_other = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistNCother = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_nc_other);
+ mgr->ConnectOutput(hfTask,last,clistNCother);
last++;
//######### LOOSE CUTS TLISTS CONTAINER #############
- containername="coutput_ls_sign";
+ containername="clistLSCsign";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_ls_sign = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistLSCsign = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_ls_sign);
+ mgr->ConnectOutput(hfTask,last,clistLSCsign);
last++;
- containername="coutput_ls_back";
+ containername="clistLSCback";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_ls_back = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistLSCback = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_ls_back);
+ mgr->ConnectOutput(hfTask,last,clistLSCback);
last++;
- containername="coutput_ls_fromB";
+ containername="clistLSCfromB";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_ls_fromB = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistLSCfromB = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_ls_fromB);
+ mgr->ConnectOutput(hfTask,last,clistLSCfromB);
last++;
- containername="coutput_ls_fromDstar";
+ containername="clistLSCfromDstar";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_ls_fromDstar = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistLSCfromDstar = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_ls_fromDstar);
+ mgr->ConnectOutput(hfTask,last,clistLSCfromDstar);
last++;
- containername="coutput_ls_other";
+ containername="clistLSCother";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_ls_other = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistLSCother = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_ls_other);
+ mgr->ConnectOutput(hfTask,last,clistLSCother);
last++;
//######### TIGHT CUTS TLISTS CONTAINER #############
- containername="coutput_tgh_sign";
+ containername="clistTGHCsign";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_tgh_sign = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistTGHCsign = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_tgh_sign);
+ mgr->ConnectOutput(hfTask,last,clistTGHCsign);
last++;
- containername="coutput_tgh_back";
+ containername="clistTGHCback";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_tgh_back = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistTGHCback = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_tgh_back);
+ mgr->ConnectOutput(hfTask,last,clistTGHCback);
last++;
- containername="coutput_tgh_fromB";
+ containername="clistTGHCfromB";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_tgh_fromB = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistTGHCfromB = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_tgh_fromB);
+ mgr->ConnectOutput(hfTask,last,clistTGHCfromB);
last++;
- containername="coutput_tgh_fromDstar";
+ containername="clistTGHCfromDstar";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_tgh_fromDstar = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistTGHCfromDstar = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_tgh_fromDstar);
+ mgr->ConnectOutput(hfTask,last,clistTGHCfromDstar);
last++;
- containername="coutput_tgh_other";
+ containername="clistTGHCother";
containername.Append(str.Data());
- AliAnalysisDataContainer *coutput_tgh_other = mgr->CreateContainer(containername.Data(),TList::Class(),
+ AliAnalysisDataContainer *clistTGHCother = mgr->CreateContainer(containername.Data(),TList::Class(),
AliAnalysisManager::kOutputContainer,
fileout);
- mgr->ConnectOutput(hfTask,last,coutput_tgh_other);
+ mgr->ConnectOutput(hfTask,last,clistTGHCother);
fmD0PDG(),
fnbins(),
fptbins(0),
- fAcceptanceCuts(0),
+ fAcceptanceCuts(),
fsignalInvMassCut(),
flargeInvMassCut(),
fsidebandInvMassCut(),
fmD0PDG(),
fnbins(),
fptbins(0),
- fAcceptanceCuts(0),
+ fAcceptanceCuts(),
fsignalInvMassCut(),
flargeInvMassCut(),
fsidebandInvMassCut(),
fptbins[2]=3.;
fptbins[3]=5.;
fptbins[4]=1000.;
- fAcceptanceCuts=new Double_t[3];
+ //fAcceptanceCuts=new Double_t[3];
SetAcceptanceCut();
SetStandardMassSelection();
DefineOutput(1, TH1F::Class());
fmD0PDG(),
fnbins(),
fptbins(0),
- fAcceptanceCuts(0),
+ fAcceptanceCuts(),
fsignalInvMassCut(),
flargeInvMassCut(),
fsidebandInvMassCut(),
SetNPtBins(nptbins,ptbins);
SetStandardMassSelection();
- fAcceptanceCuts=new Double_t[3];
+ // fAcceptanceCuts=new Double_t[3];
SetAcceptanceCut();
// Define input and output slots here
delete fptbins;
fptbins =0;
}
- if(fAcceptanceCuts){
+ /* if(fAcceptanceCuts){
delete fAcceptanceCuts;
fAcceptanceCuts=0;
- }
+ }*/
if (fNentries) {
delete fNentries;
fNentries = 0;
{
// Create histograms
// Called once
-
+
+ // ################ NAMING SCHEME ###################################
+ // LISTS NAMING SCHEME
+ // "list" + cut selection string + MC selection string
+ // cut strings: "NC" =nocuts, "LSC"= loose cuts, "TGHC"= tight cuts
+ // MC sel. strings: "sign"= D0 from c quark
+ // "fromDstar" = D0 from Dstar from c quark
+ // "fromB"= D0from B decay (->from b quark) + D0from Dstar from B
+ // "back"= backgroun, generic except the cas "other"
+ // "other"= background case for candidates made of a pion and a kaon coming from the same D0 (in 4 prong) or from D+
+ //
+ // HISTS NAMING SCHEME
+ //
+ // "h" + specific name + cut selection string + MC selection string + (InvMass region string) + (pt string)
+ //
+ // cut selection strings = those for lists
+ // MC selection strings = those for lists
+ // inv mass region strings : "PM" or "SB" for global properties and pt integrated histos
+ // "_PkMss" or "_SBMss" for impact par. pt dependent histos
+ // pt string : "_pt" + integer number of ptbin
+ //
+ //###################################################################
TString namehist;
TString titlehist;
isSideBandD0=kFALSE;
isSideBandD0bar=kFALSE;
isSideBand=kFALSE;
+ isinacceptance=kFALSE;
okd0tight=0;
okd0bartight=0;
okd0loose=0;
//
// ######## CHECK FOR ACCEPTANCE ##########
ptD0=d->Pt();
- isinacceptance = (TMath::Abs(d->EtaProng(0))<fAcceptanceCuts[0]&&TMath::Abs(d->EtaProng(1))<fAcceptanceCuts[0]);
+ isinacceptance = (TMath::Abs(d->EtaProng(0))<fAcceptanceCuts[0]&&TMath::Abs(d->EtaProng(1))<fAcceptanceCuts[0]); //eta acceptance
//######## INVARIANT MASS SELECTION ###############
CheckInvMassD0(d,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar);
- if(isSideBandD0&&isSideBandD0bar)isSideBand=kTRUE;// TEMPORARY, NOT DONE IN THE METHOD CALLED ABOVE ONLY FOR FURTHER SIDE BAND STUDY
+ if((isSideBandD0||isSideBandD0bar)&&!(isPeakD0||isPeakD0bar))isSideBand=kTRUE;// TEMPORARY, NOT DONE IN THE METHOD CALLED ABOVE ONLY FOR FURTHER SIDE BAND STUDY
// INVESTIGATE SIGNAL TYPE : ACCESS TO MC INFORMATION
aodDMC=GetD0toKPiSignalType(d,arrayMC,signallevel,massmumtrue,vtxTrue);
- fSignalType->Fill(signallevel);
if(!isinacceptance)signallevel=9;
+ fSignalType->Fill(signallevel);
+
// END OF BACKGROUND TYPE SELECTION
// NOW APPLY CUTS
if(signallevel==1)FillHistos(d,flistLsCutsSignal,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
else if(signallevel==2)FillHistos(d,flistLsCutsFromDstar,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
else if(signallevel==3||signallevel==4)FillHistos(d,flistLsCutsFromB,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
- else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10||signallevel==9)FillHistos(d,flistLsCutsBack,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
+ else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10)FillHistos(d,flistLsCutsBack,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
else if(signallevel==5||signallevel==6)FillHistos(d,flistLsCutsOther,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
//TIGHT CUTS Case
if(signallevel==1)FillHistos(d,flistTghCutsSignal,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
else if(signallevel==2)FillHistos(d,flistTghCutsFromDstar,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
else if(signallevel==3||signallevel==4)FillHistos(d,flistTghCutsFromB,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
- else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10||signallevel==9)FillHistos(d,flistTghCutsBack,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
+ else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10)FillHistos(d,flistTghCutsBack,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
else if(signallevel==5||signallevel==6)FillHistos(d,flistTghCutsOther,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
if(unsetvtx) d->UnsetOwnPrimaryVtx();
}
-
+
// ####################### POST OUTPUT TLIST DATA #########################
// ####### histo for #AOD entries already posted
//
// the way the cuts are set is for further development
// (to be interfaced with AliAnalsysTaskSETuneCuts)
+ //
+ // Cuts:
+ // 0 = inv. mass half width [GeV]
+ // 1 = dca [cm]
+ // 2 = cosThetaStar
+ // 3 = pTK [GeV/c]
+ // 4 = pTPi [GeV/c]
+ // 5 = d0K [cm] upper limit!
+ // 6 = d0Pi [cm] upper limit!
+ // 7 = d0d0 [cm^2]
+ // 8 = cosThetaPoint
+
Int_t ptbin=-1;
if (pt>0. && pt<=1.) {
ptbin=0;
- fVHFtight->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.0003,0.7);
+ fVHFtight->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.0002,0.5);
fVHFloose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.00025,0.7);
}
if(pt>1. && pt<=3.) {
ptbin=1;
- fVHFtight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.0003,0.9);
+ fVHFtight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.05,0.05,-0.0002,0.6);
fVHFloose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
//printf("I'm in the bin %d\n",ptbin);
}
if(pt>3. && pt<=5.){
ptbin=2;
- fVHFtight->SetD0toKpiCuts(invMassCut,0.015,0.8,0.7,0.7,0.05,0.05,-0.0002,0.9);
+ fVHFtight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.0001,0.8);
fVHFloose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.8);
//printf("I'm in the bin %d\n",ptbin);
}
if(pt>5.){
ptbin=3;
- fVHFtight->SetD0toKpiCuts(invMassCut,0.015,0.8,0.7,0.7,0.05,0.05,-0.0002,0.95);
+ fVHFtight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00005,0.8);
fVHFloose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.9);
}//if(pt>5)
return ptbin;
// THE FOLLOWING SCHEME IS ADOPTED: signaltype is set to
// 1:signal (D0 prompt); 2: signal D0 from Dstar; 3: D0 fromB 4: D0 from Dstar fromB
// then background categories: -1: one or both daughters is a fake track
- // 5: one or both daughters come from a D meson != D0
+ // 5: both daughters come from a D meson != D0
// 6: both daughters come from a D0->4prongs
// 7: both daughetrs are primaries
// 8: generic background (can include one of the previous if desired)
// A particle coming from nothing
signaltype=10;
return aodDMC;
-
+
}
Bool_t isfromDstar=kFALSE;
// matchtoMC=d->MatchToMC(421,arrayMC,2,pdgdaughters);
grandmoth1=(AliAODMCParticle*)arrayMC->At(mum1->GetMother());
if(TMath::Abs(grandmoth1->GetPdgCode())==413||TMath::Abs(grandmoth1->GetPdgCode())==423)isfromDstar=kTRUE;// D0 COMING FROM A D0*
+ /*
+ //CHECK FOR CABIBBO SUPPRESSED DECAY
+ Int_t isCabibSup=0,pdgKaon;
+
+ pdgKaon=b1->GetPdgCode();
+ if(TMath::Abs(pdgKaon)!=321)pdgKaon=b2->GetPdgCode();
+ if(pdgmum>0&&pdgKaon>0)isCabibSup=1;
+ if(pdgmum<0&&pdgKaon<0)isCabibSup=1;
+ if(isCabibSup){
+ signaltype=0;
+ return aodDMC;
+ }
+ */
// if(fcheckMCD0){//THIS CHECK IS NEEDED TO AVOID POSSIBLE FAILURE IN THE SECOND WHILE, FOR DEBUGGING
while(TMath::Abs(grandmoth1->GetPdgCode())!=4&&TMath::Abs(grandmoth1->GetPdgCode())!=5){
if(grandmoth1->GetMother()==-1){
virtual void Terminate(Option_t *option);
void SetNPtBins(Int_t nbins,const Double_t *ptbins);
- void SetSignalInvMassCut(Double_t signalInvMassCut=0.027){fsignalInvMassCut=signalInvMassCut;}
- void SetLargeInvMassCut(Double_t largeInvMassCut=2.){flargeInvMassCut=largeInvMassCut;}
- void SetSideBandInvMassCut(Double_t sidebandInvMassCut=0.054){// default value ~ 2x3 times inv mass resol.: a factor 2 is applied w.r.t. 3sigma, should be safe enough to exclude most of the reflections
+ void SetSignalInvMassCut(const Double_t signalInvMassCut=0.027){fsignalInvMassCut=signalInvMassCut;}
+ void SetLargeInvMassCut(const Double_t largeInvMassCut=2.){flargeInvMassCut=largeInvMassCut;}
+ void SetSideBandInvMassCut(const Double_t sidebandInvMassCut=0.054){// default value ~ 2x3 times inv mass resol.: a factor 2 is applied w.r.t. 3sigma, should be safe enough to exclude most of the reflections
fsidebandInvMassCut=sidebandInvMassCut;
}
- void SetSideBandInvMassWindow(Double_t sidebandInvMassWindow=0.066){//~ 6 times inv. mass resol.
+ void SetSideBandInvMassWindow(const Double_t sidebandInvMassWindow=0.108){//~ 6 times inv. mass resol.
fsidebandInvMassWindow=sidebandInvMassWindow;
}
- void SetAcceptanceCut(Double_t eta=0.9,Double_t nITSpoints=5.,Double_t nSPDpoints=2.){fAcceptanceCuts[0]=eta;fAcceptanceCuts[1]=nITSpoints;fAcceptanceCuts[0]=nSPDpoints;}
+ void SetAcceptanceCut(const Double_t eta=0.9,const Double_t nITSpoints=5.,const Double_t nSPDpoints=2.){fAcceptanceCuts[0]=eta;fAcceptanceCuts[1]=nITSpoints;fAcceptanceCuts[2]=nSPDpoints;}
void SetStandardMassSelection();
Int_t SetStandardCuts(Double_t pt,Double_t invMassCut);
void CheckInvMassD0(AliAODRecoDecayHF2Prong *d,Double_t &invMassD0,Double_t &invMassD0bar,Bool_t &isPeakD0,Bool_t &isPeakD0bar,Bool_t &isSideBandD0,Bool_t &isSideBandD0bar);
Double_t fmD0PDG; // MC D0 mass
Int_t fnbins; // Number of pt bins
Double_t *fptbins; //[fnbins] ptbins
- Double_t *fAcceptanceCuts; //[3] array with acceptance cuts
+ Double_t fAcceptanceCuts[3]; // array with acceptance cuts
Double_t fsignalInvMassCut; // invariant mass cut to define signal region
Double_t flargeInvMassCut; // invariant mass cut to accept all inv mass window
Double_t fsidebandInvMassCut; // invariant mass cut to define side band region lower limit