* documentation strictly for non-commercial purposes is hereby granted *
* without fee, provided that the above copyright notice appears in all *
* copies and that both the copyright notice and this permission notice *
- * appear in the supporting documentation. The authors make no claims *
+ * appeuear in the supporting documentation. The authors make no claims *
* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
//
//
// The D* spectra study is done in pt bins:
-// [0,1] [1,2] [2,3] [3,5] [5,8] [8,14]
+// [0.7,1] [1,2] [2,3] [3,5] [5,8] [8,12],[12,18]
//
// Optimized cuts used and TPC PID is on request (flag in che .C)
// Cuts option of analysis: 0 Heidelberg ; 1 Utrecht
#include <TH1I.h>
#include "TROOT.h"
+
+#include <AliAnalysisDataSlot.h>
+#include <AliAnalysisDataContainer.h>
+#include "AliRDHFCutsDStartoKpipi.h"
#include "AliPID.h"
#include "AliTPCPIDResponse.h"
//#include "AliAODPidHF.h"
#include "AliAODHandler.h"
#include "AliLog.h"
#include "AliAODVertex.h"
-#include "AliAODJet.h"
+//#include "AliAODJet.h"
#include "AliAODRecoDecay.h"
#include "AliAODRecoDecayHF.h"
#include "AliAODRecoCascadeHF.h"
#include "AliAODRecoDecayHF2Prong.h"
#include "AliAnalysisVertexingHF.h"
#include "AliESDtrack.h"
+//#include "AliVertexerTracks.h"
#include "AliAODMCParticle.h"
+#include "AliAnalysisTaskSE.h"
#include "AliAnalysisTaskSEDStarSpectra.h"
ClassImp(AliAnalysisTaskSEDStarSpectra)
AliAnalysisTaskSE(),
fEvents(0),
fAnalysis(0),
- fVHF(0),
- fVHFloose(0),
fD0Window(0),
fPeakWindow(0),
- fMinITSClusters(0),
- fMinITSClustersSoft(0),
- fUseMCInfo(kTRUE),
+ fUseMCInfo(kFALSE),
fOutput(0),
fOutputSpectrum(0),
fOutputAll(0),
fOutputPID1(0),
fNSigma(3),
fPID(kTRUE),
- fAODTrack(0),
+ fCuts(0),
fCEvents(0),
fTrueDiff2(0)
{
//
}
//___________________________________________________________________________
-AliAnalysisTaskSEDStarSpectra::AliAnalysisTaskSEDStarSpectra(const Char_t* name) :
+AliAnalysisTaskSEDStarSpectra::AliAnalysisTaskSEDStarSpectra(const Char_t* name, AliRDHFCutsDStartoKpipi* cuts) :
AliAnalysisTaskSE(name),
fEvents(0),
fAnalysis(0),
- fVHF(0),
- fVHFloose(0),
fD0Window(0),
fPeakWindow(0),
- fMinITSClusters(0),
- fMinITSClustersSoft(0),
- fUseMCInfo(kTRUE),
+ fUseMCInfo(kFALSE),
fOutput(0),
fOutputSpectrum(0),
fOutputAll(0),
fOutputPID1(0),
fNSigma(3),
fPID(kTRUE),
- fAODTrack(0),
+ fCuts(0),
fCEvents(0),
fTrueDiff2(0)
{
// Constructor. Initialization of Inputs and Outputs
//
Info("AliAnalysisTaskSEDStarSpectra","Calling Constructor");
-
- DefineOutput(1,TList::Class());
- DefineOutput(2,TList::Class()); //Spectrum output
- DefineOutput(3,TList::Class()); //3sigma PID output
- DefineOutput(4,TList::Class()); //2sigma PID output
- DefineOutput(5,TList::Class()); //1sigma PID output
- DefineOutput(6,TList::Class()); //All Entries output
-}
-//___________________________________________________________________________
-AliAnalysisTaskSEDStarSpectra& AliAnalysisTaskSEDStarSpectra::operator=(const AliAnalysisTaskSEDStarSpectra& c)
-{
- //
- // Assignment operator
- //
- if (this!=&c) {
- AliAnalysisTaskSE::operator=(c) ;
- }
- return *this;
-}
+ fCuts=cuts;
+
+ DefineOutput(1,TList::Class()); //conters
+ DefineOutput(2,TList::Class()); //Spectrum output
+ DefineOutput(3,TList::Class()); //All Entries output
+ DefineOutput(4,TList::Class()); //3sigma PID output
+ DefineOutput(5,TList::Class()); //2sigma PID output
+ DefineOutput(6,TList::Class()); //1sigma PID output
+ DefineOutput(7,AliRDHFCutsDStartoKpipi::Class()); //My private output
-//___________________________________________________________________________
-AliAnalysisTaskSEDStarSpectra::AliAnalysisTaskSEDStarSpectra(const AliAnalysisTaskSEDStarSpectra& c) :
- AliAnalysisTaskSE(c),
- fEvents(c.fEvents),
- fAnalysis(c.fAnalysis),
- fVHF(c.fVHF),
- fVHFloose(c.fVHFloose),
- fD0Window(c.fD0Window),
- fPeakWindow(c.fPeakWindow),
- fMinITSClusters(c.fMinITSClusters),
- fMinITSClustersSoft(c.fMinITSClustersSoft),
- fUseMCInfo(c.fUseMCInfo),
- fOutput(c.fOutput),
- fOutputSpectrum(c.fOutputSpectrum),
- fOutputAll(c.fOutputAll),
- fOutputPID3(c.fOutputPID3),
- fOutputPID2(c.fOutputPID2),
- fOutputPID1(c.fOutputPID1),
- fNSigma(c.fNSigma),
- fPID(c.fPID),
- fAODTrack(c.fAODTrack),
- fCEvents(c.fCEvents),
- fTrueDiff2(c.fTrueDiff2)
-{
- //
- // Copy Constructor
- //
}
//___________________________________________________________________________
delete fOutputPID1;
fOutputPID1 = 0;
}
- if (fVHF) {
- delete fVHF;
- fVHF = 0;
- }
- if (fVHFloose) {
- delete fVHFloose;
- fVHFloose = 0;
+ if (fCuts) {
+ delete fCuts;
+ fCuts = 0;
+ }
+ if(fCEvents){
+ delete fCEvents;
+ fCEvents =0;
}
-
}
//_________________________________________________
void AliAnalysisTaskSEDStarSpectra::Init(){
//
if(fDebug > 1) printf("AnalysisTaskSEDStarSpectra::Init() \n");
-
- //gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/ConfigVertexingHF.C");
- gROOT->LoadMacro("ConfigVertexingHF.C");
-
- fVHF = (AliAnalysisVertexingHF*)gROOT->ProcessLine("ConfigVertexingHF()");
- fVHFloose = (AliAnalysisVertexingHF*)gROOT->ProcessLine("ConfigVertexingHF()");
- fVHFloose->SetD0fromDstarCuts(0.3,999999.,1.1,0.,0.,999999.,999999.,999999.,0.);
- fVHFloose->SetDstarCuts(0.3, 0.1, 0.05, 100000000000.0, 0.5);
- //fVHF->PrintStatus();
+ AliRDHFCutsDStartoKpipi* copyfCuts=new AliRDHFCutsDStartoKpipi(*fCuts);
+ // Post the data
+ PostData(7,copyfCuts);
return;
}
if (fEvents%10000 ==0) AliInfo(Form("Event %d",fEvents));
AliAODEvent* aodEvent = dynamic_cast<AliAODEvent*>(fInputEvent);
TClonesArray *arrayDStartoD0pi=0;
- // Init();
+
if(!aodEvent && AODEvent() && IsStandardAOD()) {
// In case there is an AOD handler writing a standard AOD, use the AOD
// event in memory rather than the input (ESD) event.
arrayDStartoD0pi=(TClonesArray*)aodEvent->GetList()->FindObject("Dstar");
}
- // AOD primary vertex
- AliAODVertex *vtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
-
// counters for efficiencies
Int_t icountReco = 0;
//D* and D0 prongs needed to MatchToMC method
Int_t pdgDgDStartoD0pi[2]={421,211};
Int_t pdgDgD0toKpi[2]={321,211};
-
+
+ // AOD primary vertex
+ AliAODVertex *vtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
+ if(!vtx1) return;
+ if(vtx1->GetNContributors()<1) return;
+
if (!arrayDStartoD0pi){
AliInfo("Could not find array of HF vertices, skipping the event");
return;
}else AliDebug(2, Form("Found %d vertices",arrayDStartoD0pi->GetEntriesFast()));
-
+
// loop over the tracks to search for candidates soft pion
for (Int_t iDStartoD0pi = 0; iDStartoD0pi<arrayDStartoD0pi->GetEntriesFast(); iDStartoD0pi++) {
-
- // D* candidates
+
+ // D* candidates and D0 from D*
AliAODRecoCascadeHF* dstarD0pi = (AliAODRecoCascadeHF*)arrayDStartoD0pi->At(iDStartoD0pi);
-
- // D0 from the reco cascade
AliAODRecoDecayHF2Prong* theD0particle = (AliAODRecoDecayHF2Prong*)dstarD0pi->Get2Prong();
- Bool_t unsetvtx=kFALSE;
-
- // needed for pointing angle
- if(!theD0particle->GetOwnPrimaryVtx()) {
- theD0particle->SetOwnPrimaryVtx(vtx1);
- unsetvtx=kTRUE;
- }
-
+ if (!theD0particle) continue;
+
Int_t isDStar = 0;
-
// mc analysis
if(fUseMCInfo){
//MC array need for maching
if(mcLabel>=0) isDStar = 1;
}
- // soft pion
+ // soft pion candidate
AliAODTrack *track2 = (AliAODTrack*)dstarD0pi->GetBachelor();
-
- //D0tokpi
- AliAODTrack *track0 = (AliAODTrack*)theD0particle->GetDaughter(0);
- AliAODTrack *track1 = (AliAODTrack*)theD0particle->GetDaughter(1);
Double_t pt = dstarD0pi->Pt();
-
-
- // cut in acceptance for the soft pion and for the D0 daughters
+ Int_t isTkSelected = fCuts->IsSelected(dstarD0pi,AliRDHFCuts::kTracks); // quality cuts on tracks
+ if(!isTkSelected) continue;
- Bool_t okTracks = SingleTrackSelections(theD0particle, track0, track1, track2);
+ // cut in acceptance for the soft pion and for the D0 daughters - TO BE REMOVED ONCE WILL BE IN THE CUTTING CLASS
+ Bool_t okTracks = SingleTrackSelections(theD0particle, track2);
if (!okTracks) continue;
-
- // D0 pt needed for the cuts
- Int_t ptbin =0;
- if (pt>0. && pt<=1.) ptbin =0;
- if (pt>1. && pt<=2.) ptbin =1;
- if (pt>2. && pt<=3.) ptbin =2;
- if (pt>3. && pt<=5.) ptbin =3;
- if (pt>5. && pt<=8.) ptbin =4;
- if (pt>8.) ptbin =5;
-
- SetSelections(pt);
- FillSpectrum(ptbin,dstarD0pi,isDStar,1,3,fVHF,fOutputPID3);
- FillSpectrum(ptbin,dstarD0pi,isDStar,1,2,fVHF,fOutputPID2);
- FillSpectrum(ptbin,dstarD0pi,isDStar,1,1,fVHF,fOutputPID1);
- FillSpectrum(ptbin,dstarD0pi,isDStar,fPID,fNSigma,fVHF,fOutputSpectrum);
- FillSpectrum(ptbin,dstarD0pi,isDStar,0,0,fVHFloose,fOutputAll);
-
- SideBandBackground(ptbin,dstarD0pi,1,3,fVHF,fOutputPID3);
- SideBandBackground(ptbin,dstarD0pi,1,2,fVHF,fOutputPID2);
- SideBandBackground(ptbin,dstarD0pi,1,1,fVHF,fOutputPID1);
- SideBandBackground(ptbin,dstarD0pi,fPID,fNSigma,fVHF,fOutputSpectrum);
- SideBandBackground(ptbin,dstarD0pi,0,0,fVHFloose,fOutputAll);
-
- WrongSignForDStar(ptbin,dstarD0pi,1,3,fVHF,fOutputPID3);
- WrongSignForDStar(ptbin,dstarD0pi,1,2,fVHF,fOutputPID2);
- WrongSignForDStar(ptbin,dstarD0pi,1,1,fVHF,fOutputPID1);
- WrongSignForDStar(ptbin,dstarD0pi,fPID,fNSigma,fVHF,fOutputSpectrum);
- WrongSignForDStar(ptbin,dstarD0pi,0,0,fVHFloose,fOutputAll);
+
+ Int_t ptbin=fCuts->PtBin(dstarD0pi->Pt());
+
+ // set the D0 search window bin by bin
+ if (ptbin==0){
+ if(fAnalysis==1){
+ fD0Window=0.015;
+ fPeakWindow=0.0018;
+ }else{
+ fD0Window=0.020;
+ fPeakWindow=0.0018;
+ }
+ }
+ if (ptbin==1){
+ if(fAnalysis==1){
+ fD0Window=0.015;
+ fPeakWindow=0.0018;
+ }else{
+ fD0Window=0.020;
+ fPeakWindow=0.0018;
+ }
+ }
+ if (ptbin==2){
+ if(fAnalysis==1){
+ fD0Window=0.018;
+ fPeakWindow=0.0018;
+ }else{
+ fD0Window=0.020;
+ fPeakWindow=0.0018;
+ }
+ }
+ if (ptbin==3){
+ if(fAnalysis==1){
+ fD0Window=0.036;
+ fPeakWindow=0.0018;
+ }else{
+ fD0Window=0.022;
+ fPeakWindow=0.0016;
+ }
+ }
+ if (ptbin==4){
+ if(fAnalysis==1){
+ fD0Window=0.036;
+ fPeakWindow=0.0016;
+ }else{
+ fD0Window=0.026;
+ fPeakWindow=0.0014;
+ }
+ }
+ if (ptbin>=5){
+ if(fAnalysis==1){
+ fD0Window=0.062;
+ fPeakWindow=0.0014;
+ }else{
+ fD0Window=0.026;
+ fPeakWindow=0.0014;
+ }
+ }
+
+ FillSpectrum(dstarD0pi,isDStar,1,3,fCuts,fOutputPID3);
+ FillSpectrum(dstarD0pi,isDStar,1,2,fCuts,fOutputPID2);
+ FillSpectrum(dstarD0pi,isDStar,1,1,fCuts,fOutputPID1);
+ FillSpectrum(dstarD0pi,isDStar,fPID,fNSigma,fCuts,fOutputSpectrum);
+ //FillSpectrum(dstarD0pi,isDStar,0,0,fCuts,fOutputAll);
+
+ SideBandBackground(dstarD0pi,1,3,fCuts,fOutputPID3);
+ SideBandBackground(dstarD0pi,1,2,fCuts,fOutputPID2);
+ SideBandBackground(dstarD0pi,1,1,fCuts,fOutputPID1);
+ SideBandBackground(dstarD0pi,fPID,fNSigma,fCuts,fOutputSpectrum);
+ //SideBandBackground(dstarD0pi,0,0,fCuts,fOutputAll);
+
+ WrongSignForDStar(dstarD0pi,1,3,fCuts,fOutputPID3);
+ WrongSignForDStar(dstarD0pi,1,2,fCuts,fOutputPID2);
+ WrongSignForDStar(dstarD0pi,1,1,fCuts,fOutputPID1);
+ WrongSignForDStar(dstarD0pi,fPID,fNSigma,fCuts,fOutputSpectrum);
+ //WrongSignForDStar(dstarD0pi,0,0,fCuts,fOutputAll);
if(isDStar == 1) {
fTrueDiff2->Fill(pt,dstarD0pi->DeltaInvMass());
// a query. It always runs on the client, it can be used to present
// the results graphically or save the results to file.
+ Info("Terminate","");
AliAnalysisTaskSE::Terminate();
fOutput = dynamic_cast<TList*> (GetOutputData(1));
return;
}
+ return;
}
//___________________________________________________________________________
void AliAnalysisTaskSEDStarSpectra::UserCreateOutputObjects() {
Info("UserCreateOutputObjects","CreateOutputObjects of task %s\n", GetName());
//slot #1
- OpenFile(1);
+ //OpenFile(1);
fOutput = new TList();
fOutput->SetOwner();
+ fOutput->SetName("chist0");
+
fOutputSpectrum = new TList();
fOutputSpectrum->SetOwner();
// define histograms
DefineHistograms();
+
+ PostData(1,fOutput);
+ PostData(2,fOutputSpectrum);
+ PostData(3,fOutputAll);
+ PostData(4,fOutputPID3);
+ PostData(5,fOutputPID2);
+ PostData(6,fOutputPID1);
+
return;
}
//___________________________________ hiostograms _______________________________________
fTrueDiff2 = new TH2F("DiffDstar_pt","True Reco diff vs pt",200,0,15,900,0,0.3);
fOutput->Add(fTrueDiff2);
- const Int_t nhist=5;
+ const Int_t nhist=6;
TString nameMass=" ", nameSgn=" ", nameBkg=" ";
- for(Int_t i=-1;i<nhist;i++){
+ for(Int_t i=-2;i<nhist;i++){
nameMass="histDeltaMass_";
nameMass+=i+1;
nameSgn="histDeltaSgn_";
nameSgn+=i+1;
nameBkg="histDeltaBkg_";
nameBkg+=i+1;
-
- if (i==-1) {
+
+ if (i==-2) {
nameMass="histDeltaMass";
nameSgn="histDeltaSgn";
nameBkg="histDeltaBkg";
TH1F* spectrumMass = new TH1F(nameMass.Data(),"D^{*}-D^{0} invariant mass; #DeltaM [GeV/c^{2}]; Entries",200,0.1,0.2);
TH1F* spectrumSgn = new TH1F(nameSgn.Data(), "D^{*}-D^{0} Signal invariant mass - MC; #DeltaM [GeV/c^{2}]; Entries",200,0.1,0.2);
TH1F* spectrumBkg = new TH1F(nameBkg.Data(), "D^{*}-D^{0} Background invariant mass - MC; #DeltaM [GeV/c^{2}]; Entries",200,0.1,0.2);
-
+
nameMass="histD0Mass_";
nameMass+=i+1;
nameSgn="histD0Sgn_";
nameSgn+=i+1;
nameBkg="histD0Bkg_";
nameBkg+=i+1;
-
- if (i==-1) {
+
+ if (i==-2) {
nameMass="histD0Mass";
nameSgn="histD0Sgn";
nameBkg="histD0Bkg";
nameBkg="histDstarBkg_";
nameBkg+=i+1;
- if (i==-1) {
+ if (i==-2) {
nameMass="histDstarMass";
nameSgn="histDstarSgn";
nameBkg="histDstarBkg";
nameMass="histSideBandMass_";
nameMass+=i+1;
- if (i==-1) {
+ if (i==-2) {
nameMass="histSideBandMass";
}
nameMass="histWrongSignMass_";
nameMass+=i+1;
- if (i==-1) {
+ if (i==-2) {
nameMass="histWrongSignMass";
}
fOutputPID3->Add(pid3WrongSignMass);
fOutputPID2->Add(pid2WrongSignMass);
fOutputPID1->Add(pid1WrongSignMass);
-
+
}
-
- // pt spectra
- nameMass="ptMass";
- nameSgn="ptSgn";
- nameBkg="ptBkg";
-
- TH1F* ptspectrumMass = new TH1F(nameMass.Data(),"D^{*} p_{T}; p_{T} [GeV]; Entries",200,0,10);
- TH1F* ptspectrumSgn = new TH1F(nameSgn.Data(), "D^{*} Signal p_{T} - MC; p_{T} [GeV]; Entries",200,0,10);
- TH1F* ptspectrumBkg = new TH1F(nameBkg.Data(), "D^{*} Background p_{T} - MC; p_{T} [GeV]; Entries",200,0,10);
-
- ptspectrumMass->Sumw2();
- ptspectrumSgn->Sumw2();
- ptspectrumBkg->Sumw2();
-
- ptspectrumMass->SetLineColor(6);
- ptspectrumSgn->SetLineColor(2);
- ptspectrumBkg->SetLineColor(4);
-
- ptspectrumMass->SetMarkerStyle(20);
- ptspectrumSgn->SetMarkerStyle(20);
- ptspectrumBkg->SetMarkerStyle(20);
- ptspectrumMass->SetMarkerSize(0.6);
- ptspectrumSgn->SetMarkerSize(0.6);
- ptspectrumBkg->SetMarkerSize(0.6);
- ptspectrumMass->SetMarkerColor(6);
- ptspectrumSgn->SetMarkerColor(2);
- ptspectrumBkg->SetMarkerColor(4);
-
- TH1F* ptallMass = (TH1F*)ptspectrumMass->Clone();
- TH1F* ptallSgn = (TH1F*)ptspectrumSgn->Clone();
- TH1F* ptallBkg = (TH1F*)ptspectrumBkg->Clone();
-
- TH1F* ptpid3Mass = (TH1F*)ptspectrumMass->Clone();
- TH1F* ptpid3Sgn = (TH1F*)ptspectrumSgn->Clone();
- TH1F* ptpid3Bkg = (TH1F*)ptspectrumBkg->Clone();
-
- TH1F* ptpid2Mass = (TH1F*)ptspectrumMass->Clone();
- TH1F* ptpid2Sgn = (TH1F*)ptspectrumSgn->Clone();
- TH1F* ptpid2Bkg = (TH1F*)ptspectrumBkg->Clone();
-
- TH1F* ptpid1Mass = (TH1F*)ptspectrumMass->Clone();
- TH1F* ptpid1Sgn = (TH1F*)ptspectrumSgn->Clone();
- TH1F* ptpid1Bkg = (TH1F*)ptspectrumBkg->Clone();
-
- fOutputSpectrum->Add(ptspectrumMass);
- fOutputSpectrum->Add(ptspectrumSgn);
- fOutputSpectrum->Add(ptspectrumBkg);
-
- fOutputAll->Add(ptallMass);
- fOutputAll->Add(ptallSgn);
- fOutputAll->Add(ptallBkg);
-
- fOutputPID3->Add(ptpid3Mass);
- fOutputPID3->Add(ptpid3Sgn);
- fOutputPID3->Add(ptpid3Bkg);
-
- fOutputPID2->Add(ptpid2Mass);
- fOutputPID2->Add(ptpid2Sgn);
- fOutputPID2->Add(ptpid2Bkg);
-
- fOutputPID1->Add(ptpid1Mass);
- fOutputPID1->Add(ptpid1Sgn);
- fOutputPID1->Add(ptpid1Bkg);
-
- // eta spectra
- nameMass="etaMass";
- nameSgn="etaSgn";
- nameBkg="etaBkg";
-
- TH1F* etaspectrumMass = new TH1F(nameMass.Data(),"D^{*} #eta; #eta; Entries",200,-1,1);
- TH1F* etaspectrumSgn = new TH1F(nameSgn.Data(), "D^{*} Signal #eta - MC; #eta; Entries",200,-1,1);
- TH1F* etaspectrumBkg = new TH1F(nameBkg.Data(), "D^{*} Background #eta - MC; #eta; Entries",200,-1,1);
-
- etaspectrumMass->Sumw2();
- etaspectrumSgn->Sumw2();
- etaspectrumBkg->Sumw2();
-
- etaspectrumMass->SetLineColor(6);
- etaspectrumSgn->SetLineColor(2);
- etaspectrumBkg->SetLineColor(4);
-
- etaspectrumMass->SetMarkerStyle(20);
- etaspectrumSgn->SetMarkerStyle(20);
- etaspectrumBkg->SetMarkerStyle(20);
- etaspectrumMass->SetMarkerSize(0.6);
- etaspectrumSgn->SetMarkerSize(0.6);
- etaspectrumBkg->SetMarkerSize(0.6);
- etaspectrumMass->SetMarkerColor(6);
- etaspectrumSgn->SetMarkerColor(2);
- etaspectrumBkg->SetMarkerColor(4);
-
- TH1F* etaallMass = (TH1F*)etaspectrumMass->Clone();
- TH1F* etaallSgn = (TH1F*)etaspectrumSgn->Clone();
- TH1F* etaallBkg = (TH1F*)etaspectrumBkg->Clone();
-
- TH1F* etapid3Mass = (TH1F*)etaspectrumMass->Clone();
- TH1F* etapid3Sgn = (TH1F*)etaspectrumSgn->Clone();
- TH1F* etapid3Bkg = (TH1F*)etaspectrumBkg->Clone();
-
- TH1F* etapid2Mass = (TH1F*)etaspectrumMass->Clone();
- TH1F* etapid2Sgn = (TH1F*)etaspectrumSgn->Clone();
- TH1F* etapid2Bkg = (TH1F*)etaspectrumBkg->Clone();
-
- TH1F* etapid1Mass = (TH1F*)etaspectrumMass->Clone();
- TH1F* etapid1Sgn = (TH1F*)etaspectrumSgn->Clone();
- TH1F* etapid1Bkg = (TH1F*)etaspectrumBkg->Clone();
-
- fOutputSpectrum->Add(etaspectrumMass);
- fOutputSpectrum->Add(etaspectrumSgn);
- fOutputSpectrum->Add(etaspectrumBkg);
-
- fOutputAll->Add(etaallMass);
- fOutputAll->Add(etaallSgn);
- fOutputAll->Add(etaallBkg);
-
- fOutputPID3->Add(etapid3Mass);
- fOutputPID3->Add(etapid3Sgn);
- fOutputPID3->Add(etapid3Bkg);
-
- fOutputPID2->Add(etapid2Mass);
- fOutputPID2->Add(etapid2Sgn);
- fOutputPID2->Add(etapid2Bkg);
-
- fOutputPID1->Add(etapid1Mass);
- fOutputPID1->Add(etapid1Sgn);
- fOutputPID1->Add(etapid1Bkg);
-
+
+ // pt spectra
+ nameMass="ptMass";
+ nameSgn="ptSgn";
+ nameBkg="ptBkg";
+
+ TH1F* ptspectrumMass = new TH1F(nameMass.Data(),"D^{*} p_{T}; p_{T} [GeV]; Entries",200,0,10);
+ TH1F* ptspectrumSgn = new TH1F(nameSgn.Data(), "D^{*} Signal p_{T} - MC; p_{T} [GeV]; Entries",200,0,10);
+ TH1F* ptspectrumBkg = new TH1F(nameBkg.Data(), "D^{*} Background p_{T} - MC; p_{T} [GeV]; Entries",200,0,10);
+
+ ptspectrumMass->Sumw2();
+ ptspectrumSgn->Sumw2();
+ ptspectrumBkg->Sumw2();
+
+ ptspectrumMass->SetLineColor(6);
+ ptspectrumSgn->SetLineColor(2);
+ ptspectrumBkg->SetLineColor(4);
+
+ ptspectrumMass->SetMarkerStyle(20);
+ ptspectrumSgn->SetMarkerStyle(20);
+ ptspectrumBkg->SetMarkerStyle(20);
+ ptspectrumMass->SetMarkerSize(0.6);
+ ptspectrumSgn->SetMarkerSize(0.6);
+ ptspectrumBkg->SetMarkerSize(0.6);
+ ptspectrumMass->SetMarkerColor(6);
+ ptspectrumSgn->SetMarkerColor(2);
+ ptspectrumBkg->SetMarkerColor(4);
+
+ TH1F* ptallMass = (TH1F*)ptspectrumMass->Clone();
+ TH1F* ptallSgn = (TH1F*)ptspectrumSgn->Clone();
+ TH1F* ptallBkg = (TH1F*)ptspectrumBkg->Clone();
+
+ TH1F* ptpid3Mass = (TH1F*)ptspectrumMass->Clone();
+ TH1F* ptpid3Sgn = (TH1F*)ptspectrumSgn->Clone();
+ TH1F* ptpid3Bkg = (TH1F*)ptspectrumBkg->Clone();
+
+ TH1F* ptpid2Mass = (TH1F*)ptspectrumMass->Clone();
+ TH1F* ptpid2Sgn = (TH1F*)ptspectrumSgn->Clone();
+ TH1F* ptpid2Bkg = (TH1F*)ptspectrumBkg->Clone();
+
+ TH1F* ptpid1Mass = (TH1F*)ptspectrumMass->Clone();
+ TH1F* ptpid1Sgn = (TH1F*)ptspectrumSgn->Clone();
+ TH1F* ptpid1Bkg = (TH1F*)ptspectrumBkg->Clone();
+
+ fOutputSpectrum->Add(ptspectrumMass);
+ fOutputSpectrum->Add(ptspectrumSgn);
+ fOutputSpectrum->Add(ptspectrumBkg);
+
+ fOutputAll->Add(ptallMass);
+ fOutputAll->Add(ptallSgn);
+ fOutputAll->Add(ptallBkg);
+
+ fOutputPID3->Add(ptpid3Mass);
+ fOutputPID3->Add(ptpid3Sgn);
+ fOutputPID3->Add(ptpid3Bkg);
+
+ fOutputPID2->Add(ptpid2Mass);
+ fOutputPID2->Add(ptpid2Sgn);
+ fOutputPID2->Add(ptpid2Bkg);
+
+ fOutputPID1->Add(ptpid1Mass);
+ fOutputPID1->Add(ptpid1Sgn);
+ fOutputPID1->Add(ptpid1Bkg);
+
+ // eta spectra
+ nameMass="etaMass";
+ nameSgn="etaSgn";
+ nameBkg="etaBkg";
+
+ TH1F* etaspectrumMass = new TH1F(nameMass.Data(),"D^{*} #eta; #eta; Entries",200,-1,1);
+ TH1F* etaspectrumSgn = new TH1F(nameSgn.Data(), "D^{*} Signal #eta - MC; #eta; Entries",200,-1,1);
+ TH1F* etaspectrumBkg = new TH1F(nameBkg.Data(), "D^{*} Background #eta - MC; #eta; Entries",200,-1,1);
+
+ etaspectrumMass->Sumw2();
+ etaspectrumSgn->Sumw2();
+ etaspectrumBkg->Sumw2();
+
+ etaspectrumMass->SetLineColor(6);
+ etaspectrumSgn->SetLineColor(2);
+ etaspectrumBkg->SetLineColor(4);
+
+ etaspectrumMass->SetMarkerStyle(20);
+ etaspectrumSgn->SetMarkerStyle(20);
+ etaspectrumBkg->SetMarkerStyle(20);
+ etaspectrumMass->SetMarkerSize(0.6);
+ etaspectrumSgn->SetMarkerSize(0.6);
+ etaspectrumBkg->SetMarkerSize(0.6);
+ etaspectrumMass->SetMarkerColor(6);
+ etaspectrumSgn->SetMarkerColor(2);
+ etaspectrumBkg->SetMarkerColor(4);
+
+ TH1F* etaallMass = (TH1F*)etaspectrumMass->Clone();
+ TH1F* etaallSgn = (TH1F*)etaspectrumSgn->Clone();
+ TH1F* etaallBkg = (TH1F*)etaspectrumBkg->Clone();
+
+ TH1F* etapid3Mass = (TH1F*)etaspectrumMass->Clone();
+ TH1F* etapid3Sgn = (TH1F*)etaspectrumSgn->Clone();
+ TH1F* etapid3Bkg = (TH1F*)etaspectrumBkg->Clone();
+
+ TH1F* etapid2Mass = (TH1F*)etaspectrumMass->Clone();
+ TH1F* etapid2Sgn = (TH1F*)etaspectrumSgn->Clone();
+ TH1F* etapid2Bkg = (TH1F*)etaspectrumBkg->Clone();
+
+ TH1F* etapid1Mass = (TH1F*)etaspectrumMass->Clone();
+ TH1F* etapid1Sgn = (TH1F*)etaspectrumSgn->Clone();
+ TH1F* etapid1Bkg = (TH1F*)etaspectrumBkg->Clone();
+
+ fOutputSpectrum->Add(etaspectrumMass);
+ fOutputSpectrum->Add(etaspectrumSgn);
+ fOutputSpectrum->Add(etaspectrumBkg);
+
+ fOutputAll->Add(etaallMass);
+ fOutputAll->Add(etaallSgn);
+ fOutputAll->Add(etaallBkg);
+
+ fOutputPID3->Add(etapid3Mass);
+ fOutputPID3->Add(etapid3Sgn);
+ fOutputPID3->Add(etapid3Bkg);
+
+ fOutputPID2->Add(etapid2Mass);
+ fOutputPID2->Add(etapid2Sgn);
+ fOutputPID2->Add(etapid2Bkg);
+
+ fOutputPID1->Add(etapid1Mass);
+ fOutputPID1->Add(etapid1Sgn);
+ fOutputPID1->Add(etapid1Bkg);
+
return;
}
//________________________________________________________________________
-void AliAnalysisTaskSEDStarSpectra::FillSpectrum(Int_t ptbin, AliAODRecoCascadeHF *part, Int_t isDStar, Bool_t PIDon, Int_t nSigma, AliAnalysisVertexingHF *vhf, TList *listout){
+void AliAnalysisTaskSEDStarSpectra::FillSpectrum(AliAODRecoCascadeHF *part, Int_t isDStar, Bool_t PIDon, Int_t nSigma, AliRDHFCutsDStartoKpipi *cuts, TList *listout){
//
// Fill histos for D* spectrum
//
- if (ptbin==0) return;
+ Int_t ptbin=cuts->PtBin(part->Pt());
- Double_t invmassDelta = part->DeltaInvMass();
- Double_t invmassD0 = part->InvMassD0();
- Double_t invmassDstar = part->InvMassDstarKpipi();
- if(part->SelectDstar(fVHFloose->GetDstarCuts(),vhf->GetD0toKpiCuts(),kTRUE)) {//selected
- if (TMath::Abs(invmassD0-1.865)>fD0Window) return;
-
- Double_t pt = part->Pt();
- Double_t eta = part->Eta();
- //TVector3 p3Trk0(part->PxProng(0),part->PyProng(0),part->PzProng(0)); // pi_s
- //TVector3 p3Trk1(part->PxProng(1),part->PyProng(1),part->PzProng(1)); // D0
- //Double_t CosOpenAngle = p3Trk0.Dot(p3Trk1)/(p3Trk0.Mag()*p3Trk1.Mag());
-
- //PID of D0 daughters
- AliAODTrack *pos = (AliAODTrack*)part->Get2Prong()->GetDaughter(0);
- AliAODTrack *neg = (AliAODTrack*)part->Get2Prong()->GetDaughter(1);
-
- if (PIDon) {
- if(fDebug > 1) printf("AnalysisTaskSEDStar::TPCPIDon \n");
- if(fDebug > 1) printf("AnalysisTaskSEDStar::NSigmaTPC: %d\n", nSigma);
-
- if (part->Charge()>0){
- if(!SelectPID(pos, AliPID::kPion, nSigma)) return;//pion+
- if(!SelectPID(neg, AliPID::kKaon, nSigma)) return;//kaon-
- }else{
- if(!SelectPID(pos, AliPID::kKaon, nSigma)) return;//kaon+
- if(!SelectPID(neg, AliPID::kPion, nSigma)) return;//pion-
- }
- }
+ Int_t isSelected=cuts->IsSelected(part,AliRDHFCuts::kCandidate); //selected
+ if (!isSelected){
+ return;
+ }
+
+ Double_t invmassD0 = part->InvMassD0();
+ if (TMath::Abs(invmassD0-1.865)>fD0Window) return;
+
+ Double_t pt = part->Pt();
+ Double_t eta = part->Eta();
+
+ AliAODTrack *softPi = (AliAODTrack*)part->GetBachelor();
+
+ //PID of D0 daughters
+ AliAODTrack *pos = (AliAODTrack*)part->Get2Prong()->GetDaughter(0);
+ AliAODTrack *neg = (AliAODTrack*)part->Get2Prong()->GetDaughter(1);
+
+ Bool_t isPID = kTRUE;
+
+ // Double_t cutsN = -1;
- TString fillthis="";
- Bool_t massInRange=kFALSE;
- if (TMath::Abs(invmassDelta-0.14557)<fPeakWindow) massInRange=kTRUE;
+ //if(part->Charge()<0){
+ // cutsN = (pos->Pt()-neg->Pt())/(part->Get2Prong()->Pt());
+ // }
+ //if(part->Charge()>0){
+ // cutsN = (neg->Pt()-pos->Pt())/(part->Get2Prong()->Pt());
+ // }
+
+ // if(ptbin==1 || ptbin==2){
+ // if(cutsN>0.7) return;
+ // }
+ //if(ptbin==3){
+ // if(cutsN>0.8) return;
+ // }
+
+
+ if(fAnalysis==1 && ptbin==1){
+ if(part->Get2Prong()->DecayLength()>0.1 || part->Get2Prong()->DecayLength()<0.015)return; //(0.05)
+ }
+ if(fAnalysis==1 && ptbin==2){
+ if(part->Get2Prong()->DecayLength()>0.1 || part->Get2Prong()->DecayLength()<0.015)return;
+ }
+
+ if (PIDon) {
+ if(fDebug > 1) printf("AnalysisTaskSEDStar::TPCPIDon \n");
+ if(fDebug > 1) printf("AnalysisTaskSEDStar::NSigmaTPC: %d\n", nSigma);
- if(fUseMCInfo) {
- if(isDStar==1) {
- //AliAODMCParticle *partDstar = (AliAODMCParticle*)mcArray->At(labDstar);
- //AliAODMCParticle *partPis = (AliAODMCParticle*)mcArray->At(partDstar->GetDaughter(1));
- //AliAODMCParticle *partD0 = (AliAODMCParticle*)mcArray->At(partDstar->GetDaughter(0));
- //AliAODMCParticle *partD0daughter = (AliAODMCParticle*)mcArray->At(partD0->GetDaughter(0));
- fillthis="histD0Sgn_";
- fillthis+=ptbin;
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
- fillthis="histD0Sgn";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
- fillthis="histDstarSgn_";
- fillthis+=ptbin;
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
- fillthis="histDstarSgn";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
- fillthis="histDeltaSgn_";
- fillthis+=ptbin;
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
- fillthis="histDeltaSgn";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
- if (massInRange) {
- fillthis="ptSgn";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(pt);
- fillthis="etaSgn";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(eta);
- }
- }
- else {//background
- fillthis="histD0Bkg_";
- fillthis+=ptbin;
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
- fillthis="histD0Bkg";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
- fillthis="histDstarBkg_";
- fillthis+=ptbin;
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
- fillthis="histDstarBkg";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
- fillthis="histDeltaBkg_";
- fillthis+=ptbin;
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
- fillthis="histDeltaBkg";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
- if (massInRange) {
- fillthis="ptBkg";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(pt);
- fillthis="etaBkg";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(eta);
- }
+ if (part->Charge()>0){
+ if(!SelectPID(pos, AliPID::kPion, nSigma)) return;//pion+
+ if(!SelectPID(neg, AliPID::kKaon, nSigma)) return;//kaon-
+ }else{
+ if(!SelectPID(pos, AliPID::kKaon, nSigma)) return;//kaon+
+ if(!SelectPID(neg, AliPID::kPion, nSigma)) return;//pion-
+ }
+ if (ptbin>1){
+ isPID =SelectTOFPID(part->Get2Prong(), softPi);
+ if(!isPID) return;
+ }
+ }
+
+ Double_t invmassDelta = part->DeltaInvMass();
+ Double_t invmassDstar = part->InvMassDstarKpipi();
+
+ TString fillthis="";
+ Bool_t massInRange=kFALSE;
+ if (TMath::Abs(invmassDelta-0.14557)<fPeakWindow) massInRange=kTRUE;
+
+
+ if(fUseMCInfo) {
+ if(isDStar==1) {
+ fillthis="histD0Sgn_";
+ fillthis+=ptbin;
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
+ fillthis="histD0Sgn";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
+ fillthis="histDstarSgn_";
+ fillthis+=ptbin;
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
+ fillthis="histDstarSgn";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
+ fillthis="histDeltaSgn_";
+ fillthis+=ptbin;
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
+ fillthis="histDeltaSgn";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
+ //if (massInRange) {
+ if(ptbin<=1){
+ fillthis="ptSgn";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(pt);
+ fillthis="etaSgn";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(eta);
}
}
- //no MC info, just cut selection
- fillthis="histD0Mass_";
- fillthis+=ptbin;
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
- fillthis="histD0Mass";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
- fillthis="histDstarMass_";
- fillthis+=ptbin;
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
- fillthis="histDstarMass";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
- fillthis="histDeltaMass_";
- fillthis+=ptbin;
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
- fillthis="histDeltaMass";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
- if (massInRange) {
- fillthis="ptMass";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(pt);
- fillthis="etaMass";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(eta);
+ else {//background
+ fillthis="histD0Bkg_";
+ fillthis+=ptbin;
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
+ fillthis="histD0Bkg";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
+ fillthis="histDstarBkg_";
+ fillthis+=ptbin;
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
+ fillthis="histDstarBkg";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
+ fillthis="histDeltaBkg_";
+ fillthis+=ptbin;
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
+ fillthis="histDeltaBkg";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
+ //if (massInRange) {
+ if(ptbin<=1){
+ fillthis="ptBkg";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(pt);
+ fillthis="etaBkg";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(eta);
+ }
}
-
- } //else cout<<"NOT SELECTED"<<endl;
+ }
+ //no MC info, just cut selection
+ fillthis="histD0Mass_";
+ fillthis+=ptbin;
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
+ fillthis="histD0Mass";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassD0);
+ fillthis="histDstarMass_";
+ fillthis+=ptbin;
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
+ fillthis="histDstarMass";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDstar);
+ fillthis="histDeltaMass_";
+ fillthis+=ptbin;
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
+ fillthis="histDeltaMass";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
+ if (massInRange) {
+ fillthis="ptMass";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(pt);
+ fillthis="etaMass";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(eta);
+ }
+
return;
}
//______________________________ side band background for D*___________________________________
-void AliAnalysisTaskSEDStarSpectra::SideBandBackground(Int_t ptbin, AliAODRecoCascadeHF *part, Bool_t PIDon, Int_t nSigma, AliAnalysisVertexingHF *vhf, TList *listout){
+void AliAnalysisTaskSEDStarSpectra::SideBandBackground(AliAODRecoCascadeHF *part, Bool_t PIDon, Int_t nSigma, AliRDHFCutsDStartoKpipi *cuts, TList *listout){
// D* side band background method. Two side bands, in M(Kpi) are taken at ~6 sigmas
// (expected detector resolution) on the left and right frm the D0 mass. Each band
// has a width of ~5 sigmas. Two band needed for opening angle considerations
- if (ptbin==0) return;
+ Int_t ptbin=cuts->PtBin(part->Pt());
+
+ Bool_t massInRange=kFALSE;
- Double_t invmassDelta = part->DeltaInvMass();
- Double_t invmassD0 = part->InvMassD0();
+ Int_t isSelected=cuts->IsSelected(part,AliRDHFCuts::kCandidate); //selected
+ if (!isSelected){
+ return;
+ }
+ // Double_t pt = part->Pt();
- if(part->SelectDstar(fVHFloose->GetDstarCuts(),vhf->GetD0toKpiCuts(),kTRUE)) {//selected
- if(TMath::Abs(invmassD0-1.865)>2*fD0Window && TMath::Abs(invmassD0-1.865)<4*fD0Window){
-
- //PID of D0 daughters
- AliAODTrack *pos = (AliAODTrack*)part->Get2Prong()->GetDaughter(0);
- AliAODTrack *neg = (AliAODTrack*)part->Get2Prong()->GetDaughter(1);
-
- if (PIDon) {
- if(fDebug > 1) printf("AnalysisTaskSEDStar::TPCPIDon \n");
- if(fDebug > 1) printf("AnalysisTaskSEDStar::NSigmaTPC: %d\n", nSigma);
-
- if (part->Charge()>0){
- if(!SelectPID(pos, AliPID::kPion, nSigma)) return;//pion+
- if(!SelectPID(neg, AliPID::kKaon, nSigma)) return;//kaon-
- }else{
- if(!SelectPID(pos, AliPID::kKaon, nSigma)) return;//kaon+
- if(!SelectPID(neg, AliPID::kPion, nSigma)) return;//pion-
- }
- }
-
- TString fillthis="";
- fillthis="histSideBandMass_";
- fillthis+=ptbin;
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
- fillthis="histSideBandMass";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
+ AliAODTrack *softPi = (AliAODTrack*)part->GetBachelor();
+
+ // select the side bands intervall
+ Double_t invmassD0 = part->InvMassD0();
+ if(TMath::Abs(invmassD0-1.865)>4*fD0Window && TMath::Abs(invmassD0-1.865)<8*fD0Window){
+
+ // for pt and eta
+ Double_t invmassDelta = part->DeltaInvMass();
+ if (TMath::Abs(invmassDelta-0.14557)<fPeakWindow) massInRange=kTRUE;
+
+ //PID of D0 daughters
+ AliAODTrack *pos = (AliAODTrack*)part->Get2Prong()->GetDaughter(0);
+ AliAODTrack *neg = (AliAODTrack*)part->Get2Prong()->GetDaughter(1);
+
+ //Double_t cutsN = -1;
+
+
+ /* if(part->Charge()<0){
+ cutsN = (pos->Pt()-neg->Pt())/(part->Get2Prong()->Pt());
+ }
+ if(part->Charge()>0){
+ cutsN = (neg->Pt()-pos->Pt())/(part->Get2Prong()->Pt());
+ }
+
+ if(ptbin==1 || ptbin==2){
+ if(cutsN>0.5) return;
+ }
+ if(ptbin==3){
+ if(cutsN>0.7) return;
+ }
+ */
+ if(fAnalysis==1 && ptbin==1){
+ if(part->Get2Prong()->DecayLength()>0.08 || part->Get2Prong()->DecayLength()<0.022)return; //(0.05)
+ }
+ if(fAnalysis==1 && ptbin==2){
+ if(part->Get2Prong()->DecayLength()>0.08 || part->Get2Prong()->DecayLength()<0.017)return;
+ }
+
+ Bool_t isPID = kTRUE;
+
+ if (PIDon) {
+ if(fDebug > 1) printf("AnalysisTaskSEDStar::TPCPIDon \n");
+ if(fDebug > 1) printf("AnalysisTaskSEDStar::NSigmaTPC: %d\n", nSigma);
+ if (part->Charge()>0){
+ if(!SelectPID(pos, AliPID::kPion, nSigma)) return;//pion+
+ if(!SelectPID(neg, AliPID::kKaon, nSigma)) return;//kaon-
+ }else{
+ if(!SelectPID(pos, AliPID::kKaon, nSigma)) return;//kaon+
+ if(!SelectPID(neg, AliPID::kPion, nSigma)) return;//pion-
+ }
+ if (ptbin>2){
+ isPID =SelectTOFPID(part->Get2Prong(), softPi);
+ if(!isPID) return;
+ }
}
+
+ TString fillthis="";
+ fillthis="histSideBandMass_";
+ fillthis+=ptbin;
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
+ fillthis="histSideBandMass";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(invmassDelta);
+
}
}
-
//________________________________________________________________________________________________________________
-void AliAnalysisTaskSEDStarSpectra::WrongSignForDStar(Int_t ptbin, AliAODRecoCascadeHF *part, Bool_t PIDon, Int_t nSigma, AliAnalysisVertexingHF *vhf, TList *listout){
+void AliAnalysisTaskSEDStarSpectra::WrongSignForDStar(AliAODRecoCascadeHF *part, Bool_t PIDon, Int_t nSigma, AliRDHFCutsDStartoKpipi *cuts, TList *listout){
//
// assign the wrong charge to the soft pion to create background
//
-
- if (ptbin==0) return;
+ Int_t ptbin=cuts->PtBin(part->Pt());
AliAODRecoDecayHF2Prong* theD0particle = (AliAODRecoDecayHF2Prong*)part->Get2Prong();
+ AliAODTrack *theSoftPi = (AliAODTrack*)part->GetBachelor();
+
Int_t okD0WrongSign,okD0barWrongSign;
- Double_t wrongMassD0=0.,wrongMassDstar=0.;
- theD0particle->SelectD0(vhf->GetD0toKpiCuts(),okD0WrongSign,okD0barWrongSign);
+ Double_t wrongMassD0=0.;
+
+ Int_t isSelected=cuts->IsSelected(part,AliRDHFCuts::kCandidate); //selected
+ if (!isSelected){
+ return;
+ }
+
+ okD0WrongSign = 1;
+ okD0barWrongSign = 1;
- if(part->Charge()>0) {
+ //if is D*+ than assume D0bar
+ if(part->Charge()>0 && (isSelected ==1)) {
okD0WrongSign = 0;
- } else {
+ }
+ if(part->Charge()<0 && (isSelected ==2)){
+ okD0barWrongSign = 0;
+ }
+
+ // assign the wrong mass in case the cuts return both D0 and D0bar
+ if(part->Charge()>0 && (isSelected ==3)) {
+ okD0WrongSign = 0;
+ } else if(part->Charge()<0 && (isSelected ==3)){
okD0barWrongSign = 0;
}
+
//wrong D0 inv mass
- if(okD0WrongSign==1){
+ if(okD0WrongSign!=0){
wrongMassD0 = theD0particle->InvMassD0();
}else if(okD0WrongSign==0){
wrongMassD0 = theD0particle->InvMassD0bar();
}
- if(part->SelectDstar(fVHFloose->GetDstarCuts(),vhf->GetD0toKpiCuts(),kTRUE)) {//selected
- if(TMath::Abs(wrongMassD0-1.865)<0.036){
-
- //PID of D0 daughters
- AliAODTrack *pos = (AliAODTrack*)part->Get2Prong()->GetDaughter(0);
- AliAODTrack *neg = (AliAODTrack*)part->Get2Prong()->GetDaughter(1);
-
- if (PIDon) {
- if(fDebug > 1) printf("AnalysisTaskSEDStar::TPCPIDon \n");
- if(fDebug > 1) printf("AnalysisTaskSEDStar::NSigmaTPC: %d\n", nSigma);
-
- if (part->Charge()>0){
- if(!SelectPID(pos, AliPID::kPion, nSigma)) return;//pion+
- if(!SelectPID(neg, AliPID::kKaon, nSigma)) return;//kaon-
- }else{
- if(!SelectPID(pos, AliPID::kKaon, nSigma)) return;//kaon+
- if(!SelectPID(neg, AliPID::kPion, nSigma)) return;//pion-
- }
- }
-
- // wrong D* inv mass
- Double_t px[3],py[3],pz[3];
- UInt_t pdg[3]={321,211,211};
- pdg[0] = (part->Charge()>0 ? 321 : 211); // positive daughter of D0
- px[0] = theD0particle->PxProng(0);
- py[0] = theD0particle->PyProng(0);
- pz[0] = theD0particle->PzProng(0);
- pdg[1] = (part->Charge()>0 ? 211 : 321); // negative daughter of D0
- px[1] = theD0particle->PxProng(1);
- py[1] = theD0particle->PyProng(1);
- pz[1] = theD0particle->PzProng(1);
- pdg[2] = 211; // soft pion
- px[2] = part->PxProng(0);
- py[2] = part->PyProng(0);
- pz[2] = part->PzProng(0);
-
- Short_t dummycharge=0;
- Double_t dummyd0[3]={0,0,0};
- AliAODRecoDecay *rd = new AliAODRecoDecay(0x0,3,dummycharge,px,py,pz,dummyd0);
-
- wrongMassDstar = rd->InvMass(3,pdg);
-
- delete rd; rd=NULL;
-
- TString fillthis="";
- fillthis="histWrongSignMass_";
- fillthis+=ptbin;
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(wrongMassDstar-wrongMassD0);
- fillthis="histWrongSignMass";
- ((TH1F*)(listout->FindObject(fillthis)))->Fill(wrongMassDstar-wrongMassD0);
+ if(TMath::Abs(wrongMassD0-1.865)<fD0Window){
+
+ //PID of D0 daughters
+ AliAODTrack *pos = (AliAODTrack*)part->Get2Prong()->GetDaughter(0);
+ AliAODTrack *neg = (AliAODTrack*)part->Get2Prong()->GetDaughter(1);
+
+ Bool_t isPID = kTRUE;
+
+
+ if(fAnalysis==1 && ptbin==1){
+ if(part->Get2Prong()->DecayLength()>0.08 || part->Get2Prong()->DecayLength()<0.022)return; //(0.05)
+ }
+ if(fAnalysis==1 && ptbin==2){
+ if(part->Get2Prong()->DecayLength()>0.08 || part->Get2Prong()->DecayLength()<0.017)return;
+ }
+
+ if (PIDon) {
+ if(fDebug > 1) printf("AnalysisTaskSEDStar::TPCPIDon \n");
+ if(fDebug > 1) printf("AnalysisTaskSEDStar::NSigmaTPC: %d\n", nSigma);
+ if (part->Charge()>0){
+ if(!SelectPID(pos, AliPID::kPion, nSigma)) return;//pion+
+ if(!SelectPID(neg, AliPID::kKaon, nSigma)) return;//kaon-
+ }else{
+ if(!SelectPID(pos, AliPID::kKaon, nSigma)) return;//kaon+
+ if(!SelectPID(neg, AliPID::kPion, nSigma)) return;//pion-
+ }
+ if (ptbin>2){
+ isPID =SelectTOFPID(theD0particle, theSoftPi);
+ if(!isPID) return;
+ }
}
+
+ // wrong D* inv mass
+ Double_t e[3];
+ if (part->Charge()>0){
+ e[0]=theD0particle->EProng(0,321);
+ e[1]=theD0particle->EProng(1,211);
+ }else{
+ e[0]=theD0particle->EProng(0,211);
+ e[1]=theD0particle->EProng(1,321);
+ }
+ e[2]=part->EProng(0,211);
+
+ Double_t esum = e[0]+e[1]+e[2];
+ Double_t pds = part->P();
+
+ Double_t wrongMassDstar = TMath::Sqrt(esum*esum-pds*pds);
+
+ TString fillthis="";
+ fillthis="histWrongSignMass_";
+ fillthis+=ptbin;
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(wrongMassDstar-wrongMassD0);
+ fillthis="histWrongSignMass";
+ ((TH1F*)(listout->FindObject(fillthis)))->Fill(wrongMassDstar-wrongMassD0);
+
}
}
+
//_____________________________________________SINGLE TRACK PRE-SELECTION___________________________________________
-Bool_t AliAnalysisTaskSEDStarSpectra::SingleTrackSelections(AliAODRecoDecayHF2Prong* theD0particle, AliAODTrack *track0, AliAODTrack *track1, AliAODTrack *track2){
+Bool_t AliAnalysisTaskSEDStarSpectra::SingleTrackSelections(const AliAODRecoDecayHF2Prong* theD0particle, const AliAODTrack *track2){
// Preselection on D0 daughters and the soft pion
-
- // reft in ITS for soft pion
- //if((!(track2->GetStatus()&AliESDtrack::kITSrefit))) continue;
// cut in acceptance for the soft pion and for the D0 daughters
- Bool_t acceptanceProng0 = (TMath::Abs(theD0particle->EtaProng(0))<= 0.9 && theD0particle->PtProng(0) >= 0.1);
- Bool_t acceptanceProng1 = (TMath::Abs(theD0particle->EtaProng(1))<= 0.9 && theD0particle->PtProng(1) >= 0.1);
+ Bool_t acceptanceProng0 = (TMath::Abs(theD0particle->EtaProng(0))<= 0.9);
+ Bool_t acceptanceProng1 = (TMath::Abs(theD0particle->EtaProng(1))<= 0.9);
// soft pion acceptance ... is it fine 0.9?????
- Bool_t acceptanceProng2 = (TMath::Abs(track2->Eta())<= 1.0 && track2->Pt() >= 0.05);
+ Bool_t acceptanceProng2 = (TMath::Abs(track2->Eta())<= 1.0);
if (!(acceptanceProng0 && acceptanceProng1 && acceptanceProng2)) return kFALSE;
AliDebug(2,"D* reco daughters in acceptance");
- // cut on the min n. of clusters in ITS for the D0 and soft pion
- Int_t ncls0=0,ncls1=0,ncls2=0;
- for(Int_t l=0;l<6;l++) {
- if(TESTBIT(track0->GetITSClusterMap(),l)) ncls0++;
- if(TESTBIT(track1->GetITSClusterMap(),l)) ncls1++;
- if(TESTBIT(track2->GetITSClusterMap(),l)) ncls2++;
- }
- // see AddTask for soft pion and D0 prongs ITS clusters request
- if (!(ncls0 >= fMinITSClusters && ncls1 >= fMinITSClusters && ncls2>=fMinITSClustersSoft)) return kFALSE;
-
- return kTRUE;
-}
-
-//_____________________________________________________________________________________________
-Bool_t AliAnalysisTaskSEDStarSpectra::SetSelections(Double_t pt){
-
- //cuts[0] = inv. mass half width [GeV]
- //cuts[1] = dca [cm]
- //cuts[2] = cosThetaStar
- //cuts[3] = pTK [GeV/c]
- //cuts[4] = pTPi [GeV/c]
- //cuts[5] = d0K [cm] upper limit!
- //cuts[6] = d0Pi [cm] upper limit!
- //cuts[7] = d0d0 [cm^2]
- //cuts[8] = cosThetaPoint
-
- if (fAnalysis==0){
- if(pt<=1.){
- fVHF->SetD0toKpiCuts(0.450,0.02,0.7,0.8,0.8,0.1,0.1,0.000002,0.9);
- fD0Window=0.018;
- fPeakWindow=0.0018;
- }
- else if(pt >1. && pt <=2.){
- fVHF->SetD0toKpiCuts(0.450,0.03,0.7,0.8,0.8,0.1,0.1,-0.00002,0.9);
- fD0Window=0.020;
- fPeakWindow=0.0018;
- //fVHF->SetDstarCuts(0.3, 0.0018, 0.05, 100000000000.0, 0.5);
- }
- else if(pt >2. && pt <=3.){
- fVHF->SetD0toKpiCuts(0.450,0.03,0.7,0.8,0.8,0.1,0.1,-0.00002,0.9);
- fD0Window=0.020;
- fPeakWindow=0.0018;
- //fVHF->SetDstarCuts(0.3, 0.0018, 0.05, 100000000000.0, 0.5);
- }
- else if(pt >3. && pt <=5.){
- fVHF->SetD0toKpiCuts(0.450,0.03,0.7,0.9,0.9,0.1,0.1,0.000002,0.8);
- fD0Window=0.022;
- fPeakWindow=0.0016;
- //fVHF->SetDstarCuts(0.3, 0.0016, 0.05, 100000000000.0, 0.5);
- }
- else if(pt >5.){
- fVHF->SetD0toKpiCuts(0.450,0.03,0.7,1.0,1.0,0.1,0.1,0.000002,0.8);
- fD0Window=0.026;
- fPeakWindow=0.0014;
- //fVHF->SetDstarCuts(0.3, 0.0014, 0.05, 100000000000.0, 0.5);
- }
- }
-
- if(fAnalysis==1){
- if(pt<=1.){
- fVHF->SetD0toKpiCuts(0.450,0.04,0.8,0.21,0.21,0.021,0.021,-0.0002,0.9);
- fD0Window=0.024;
- fPeakWindow=0.0018;
- }
- else if(pt >1. && pt <=2.){
- fVHF->SetD0toKpiCuts(0.450,0.02,0.7,0.8,0.8,0.021,0.021,-0.0002,0.9);
- fD0Window=0.024;
- fPeakWindow=0.0018;
- }
- else if(pt >2. && pt <=3.){
- fVHF->SetD0toKpiCuts(0.450,0.04,0.8,0.8,0.8,0.035,0.042,-0.000085,0.9);
- fD0Window=0.024;
- fPeakWindow=0.0018;
- }
- else if(pt >3. && pt <=5.){
- fVHF->SetD0toKpiCuts(0.450,0.016,0.8,1.2,1.2,0.042,0.056,-0.000085,0.9);
- fD0Window=0.024;
- fPeakWindow=0.0016;
- }
- else if(pt >5.){
- fVHF->SetD0toKpiCuts(0.450,0.08,1.0,1.2,1.2,0.07,0.07,0.0001,0.9);
- fD0Window=0.024;
- fPeakWindow=0.0014;
- }
- }
return kTRUE;
}
//_____________________________ pid _______________________________________-
-Bool_t AliAnalysisTaskSEDStarSpectra::SelectPID(AliAODTrack *track, AliPID::EParticleType type, Double_t nsig){//type(0-4): {e,mu,pi,K,p}
+Bool_t AliAnalysisTaskSEDStarSpectra::SelectPID(const AliAODTrack *track, AliPID::EParticleType type, Double_t nsig){//type(0-4): {e,mu,pi,K,p}
//
// Method to extract the PID for the pion/kaon. The particle type for PID can be set by user
// At the moment only TPC PID.
static AliTPCPIDResponse theTPCpid;
Double_t nsigma = theTPCpid.GetNumberOfSigmas(track->P(),pid->GetTPCsignal(),track->GetTPCClusterMap().CountBits(), type);
if (TMath::Abs(nsigma)>nsig) isParticle=kFALSE;
-/* //using new AliAODPidHF class
- if ((track->GetStatus()&AliESDtrack::kTPCpid )==0) return kTRUE;
- AliAODPidHF *pidHF = new AliAODPidHF();
- pidHF->SetSigma(nsig);
- if (type == AliPID::kPion) return pidHF->IsPionRaw(track,"TPC");
- if (type == AliPID::kKaon) return pidHF->IsKaonRaw(track,"TPC");
- return kFALSE;
-*/
- //ITS
- //
- //
- //
- //TOF
- //
- //
+
return isParticle;
}
-
+//-------------------------------------------------
+Bool_t AliAnalysisTaskSEDStarSpectra::SelectTOFPID(const AliAODRecoDecayHF2Prong* d, const AliAODTrack *tracksoft){
+
+
+ // ######### SPECIAL PID CUTS #################################
+ Int_t isKaon[2]={0,0};
+ Bool_t isD0D0barPID[2]={kTRUE,kTRUE};
+ for(Int_t daught=0;daught<2;daught++){
+
+
+ AliAODTrack *aodtrack=(AliAODTrack*)d->GetDaughter(daught);
+ // AliESDtrack *esdtrack=new
+ AliESDtrack((AliVTrack*)d->GetDaughter(daught));
+ if(!(aodtrack->GetStatus()&AliESDtrack::kTOFpid)){
+ isKaon[daught]=0;
+ //delete esdtrack;
+ return kTRUE;
+ }
+ if(!(aodtrack->GetStatus()&AliESDtrack::kTOFout)){
+ isKaon[daught]=0;
+ // delete esdtrack;
+ return kTRUE;
+ }
+ if(!(aodtrack->GetStatus()&AliESDtrack::kTIME)){
+ isKaon[daught]=0;
+ //delete esdtrack;
+ return kTRUE;
+ }
+ if(!(aodtrack->GetStatus()&AliESDtrack::kTPCrefit)){
+ isKaon[daught]=0;
+ // delete esdtrack;
+ return kTRUE;
+ }
+ if(!(aodtrack->GetStatus()&AliESDtrack::kITSrefit)){
+ isKaon[daught]=0;
+ // delete esdtrack;
+ return kTRUE;
+ }
+
+ AliAODPid *pid=aodtrack->GetDetPid();
+ if(!pid) {
+ isKaon[daught]=0;
+ //delete esdtrack;
+ return kTRUE;
+ }
+ Double_t tofSig=pid->GetTOFsignal();
+
+ Double_t times[5];
+ // esdtrack->GetIntegratedTimes(times);
+ pid->GetIntegratedTimes(times);
+ //fHistCheck->Fill(esdtrack->P(),esdtrack->GetTOFsignal()-times[3]); //
+ //3 is the kaon
+
+ // printf("Test momentum VS time %f, %f \n",aodtrack->P(),tofSig-times[3]);
+ if(TMath::Abs(tofSig-times[3])>3.*160.){
+ isKaon[daught]=2;
+ if(aodtrack->Charge()==-1){
+ isD0D0barPID[0]=kFALSE;
+ }
+ else isD0D0barPID[1]=kFALSE;
+ }
+ else {
+ isKaon[daught]=1;
+
+ if(aodtrack->P()<1.5){
+ if(aodtrack->Charge()==-1){
+ isD0D0barPID[1]=kFALSE;
+ }
+ else isD0D0barPID[0]=kFALSE;
+
+ }
+ //delete esdtrack;
+ }
+ }
+
+ Double_t psCharge = tracksoft->Charge();
+
+ if(psCharge>0 && !isD0D0barPID[0]) return kFALSE;
+ if(psCharge<0 && !isD0D0barPID[1]) return kFALSE;
+
+ return kTRUE;
+}
-//DEFINITION OF A FEW CONSTANTS
-const Int_t minITSClusters = 5;
-const Int_t minITSClustersSoft = 4;
-const Int_t numberOfSigmasPID = 3;
-// ANALYSIS TYPE
-const Bool_t anaType = 0;//0 HD; 1 UU;
-const Bool_t usePID = kFALSE;
-const Bool_t theMCon=kFALSE;
-//----------------------------------------------------
-
-AliAnalysisTaskSEDStarSpectra *AddTaskDStarSpectra()
-{
-
- AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
- if (!mgr) {
- ::Error("AddTaskDStarSpectra", "No analysis manager to connect to.");
- return NULL;
- }
-
- //CREATE THE TASK
- printf("CREATE TASK\n");
- // create the task
- AliAnalysisTaskSEDStarSpectra *task = new AliAnalysisTaskSEDStarSpectra("AliAnalysisTaskSEDStarSpectra");
- task->SetAnalysisType(anaType);
- task->SetMinITSClusters(minITSClusters);
- task->SetMinITSClustersSoft(minITSClustersSoft);
- task->SetNSigmasPID(numberOfSigmasPID);
- task->SetMC(theMCon);
- task->SetPID(usePID);
- task->SetDebugLevel(0);
-
- mgr->AddTask(task);
-
- // Create and connect containers for input/output
-
- TString outputfile = AliAnalysisManager::GetCommonFileName();
- if (anaType == 0) outputfile += ":PWG3_D2H_DStarSpectraHD";
- if (anaType == 1) outputfile += ":PWG3_D2H_DStarSpectraUU";
-
- // ------ input data ------
- AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer();
-
- // ----- output data -----
-
- // output TH1I for event counting
- AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("chist0", TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
- AliAnalysisDataContainer *coutputDStar1 = mgr->CreateContainer("DStarSpectrum",TList::Class(),
- AliAnalysisManager::kOutputContainer,
- outputfile.Data());
- AliAnalysisDataContainer *coutputDStar2 = mgr->CreateContainer("DStarAll",TList::Class(),
- AliAnalysisManager::kOutputContainer,
- outputfile.Data());
- AliAnalysisDataContainer *coutputDStar3 = mgr->CreateContainer("DStarPID3",TList::Class(),
- AliAnalysisManager::kOutputContainer,
- outputfile.Data());
- AliAnalysisDataContainer *coutputDStar4 = mgr->CreateContainer("DStarPID2",TList::Class(),
- AliAnalysisManager::kOutputContainer,
- outputfile.Data());
- AliAnalysisDataContainer *coutputDStar5 = mgr->CreateContainer("DStarPID1",TList::Class(),
- AliAnalysisManager::kOutputContainer,
- outputfile.Data());
-
- mgr->ConnectInput(task,0,mgr->GetCommonInputContainer());
- mgr->ConnectOutput(task,1,coutput1);
- mgr->ConnectOutput(task,2,coutputDStar1);
- mgr->ConnectOutput(task,3,coutputDStar2);
- mgr->ConnectOutput(task,4,coutputDStar3);
- mgr->ConnectOutput(task,5,coutputDStar4);
- mgr->ConnectOutput(task,6,coutputDStar5);
-
-
- return task ;
-}
-
+//DEFINITION OF A FEW CONSTANTS\r
+const Int_t numberOfSigmasPID = 3;\r
+// ANALYSIS TYPE \r
+const Bool_t anaType = 1;//0 HD; 1 UU;\r
+const Bool_t usePID = kTRUE;\r
+//----------------------------------------------------\r
+\r
+AliAnalysisTaskSEDStarSpectra *AddTaskDStarSpectra(Bool_t theMCon=kFALSE)\r
+{\r
+ \r
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
+ if (!mgr) {\r
+ ::Error("AddTaskDStarSpectra", "No analysis manager to connect to.");\r
+ return NULL;\r
+ } \r
+ \r
+ TString cutobjname="Dstar";\r
+ \r
+ // D0 daughters pre-selections\r
+ //\r
+ AliRDHFCutsDStartoKpipi* RDHFDStartoKpipi=new AliRDHFCutsDStartoKpipi(); \r
+ RDHFDStartoKpipi->SetName("DstartoKpipi");\r
+ RDHFDStartoKpipi->SetTitle("cuts for D* analysis");\r
+\r
+ AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();\r
+ esdTrackCuts->SetRequireSigmaToVertex(kFALSE);\r
+ //default\r
+ esdTrackCuts->SetRequireTPCRefit(kTRUE);\r
+ esdTrackCuts->SetRequireITSRefit(kTRUE);\r
+ esdTrackCuts->SetMinNClustersITS(4); // default is 5\r
+ esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,\r
+ AliESDtrackCuts::kAny); //test d0 asimmetry\r
+ // default is kBoth, otherwise kAny\r
+ esdTrackCuts->SetMinDCAToVertexXY(0.);\r
+ esdTrackCuts->SetPtRange(0.1,1.e10);\r
+ \r
+ //\r
+ // soft pion pre-selections \r
+ // \r
+ AliESDtrackCuts* esdSoftPicuts=new AliESDtrackCuts();\r
+ esdSoftPicuts->SetRequireSigmaToVertex(kFALSE);\r
+ //default\r
+ esdSoftPicuts->SetRequireTPCRefit(kFALSE);\r
+ esdSoftPicuts->SetRequireITSRefit(kFALSE);\r
+ esdSoftPicuts->SetMinNClustersITS(4); // default is 4\r
+ esdSoftPicuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,\r
+ AliESDtrackCuts::kAny); //test d0 asimmetry\r
+ esdSoftPicuts->SetPtRange(0.0,1.e10);\r
+\r
+ // set pre selections\r
+ RDHFDStartoKpipi->AddTrackCuts(esdTrackCuts);\r
+ RDHFDStartoKpipi->AddTrackCutsSoftPi(esdSoftPicuts);\r
+ \r
+ const Int_t nvars=14;\r
+ \r
+ const Int_t nptbins=7;\r
+ Float_t* ptbins;\r
+ ptbins=new Float_t[nptbins+1];\r
+ ptbins[0]=0.7;\r
+ ptbins[1]=1.;\r
+ ptbins[2]=2.;\r
+ ptbins[3]=3.;\r
+ ptbins[4]=5.;\r
+ ptbins[5]=8.; \r
+ ptbins[6]=12.;\r
+ ptbins[7]=18.;\r
+ \r
+ RDHFDStartoKpipi->SetPtBins(nptbins+1,ptbins);\r
+ \r
+\r
+ Float_t** rdcutsvalmine;\r
+ rdcutsvalmine=new Float_t*[nvars];\r
+ for(Int_t iv=0;iv<nvars;iv++){\r
+ rdcutsvalmine[iv]=new Float_t[nptbins];\r
+ }\r
+\r
+ if(anaType==1){ // UU cuts\r
+\r
+ rdcutsvalmine[0][0]=0.7;\r
+ rdcutsvalmine[1][0]=0.022;\r
+ rdcutsvalmine[2][0]=0.7;\r
+ rdcutsvalmine[3][0]=0.21;\r
+ rdcutsvalmine[4][0]=0.21;\r
+ rdcutsvalmine[5][0]=0.05;\r
+ rdcutsvalmine[6][0]=0.05;\r
+ rdcutsvalmine[7][0]=-0.00005;\r
+ rdcutsvalmine[8][0]=0.85;\r
+ rdcutsvalmine[9][0]=0.3.;\r
+ rdcutsvalmine[10][0]=0.1;\r
+ rdcutsvalmine[11][0]=0.05;\r
+ rdcutsvalmine[12][0]=100.;\r
+ rdcutsvalmine[13][0]=0.5;\r
+\r
+ rdcutsvalmine[0][1]=0.7;\r
+ rdcutsvalmine[1][1]=0.03;\r
+ rdcutsvalmine[2][1]=0.8;\r
+ rdcutsvalmine[3][1]=0.45;\r
+ rdcutsvalmine[4][1]=0.45;\r
+ rdcutsvalmine[5][1]=0.09;\r
+ rdcutsvalmine[6][1]=0.09;\r
+ rdcutsvalmine[7][1]=-0.00029;\r
+ rdcutsvalmine[8][1]=0.8;\r
+ rdcutsvalmine[9][1]=0.3;\r
+ rdcutsvalmine[10][1]=0.1;\r
+ rdcutsvalmine[11][1]=0.05;\r
+ rdcutsvalmine[12][1]=100.;\r
+ rdcutsvalmine[13][1]=1.0;\r
+ \r
+ rdcutsvalmine[0][2]=0.7;\r
+ rdcutsvalmine[1][2]=0.02;\r
+ rdcutsvalmine[2][2]=0.8;\r
+ rdcutsvalmine[3][2]=0.7;\r
+ rdcutsvalmine[4][2]=0.7;\r
+ rdcutsvalmine[5][2]=0.08;\r
+ rdcutsvalmine[6][2]=0.08;\r
+ rdcutsvalmine[7][2]=-0.00018;\r
+ rdcutsvalmine[8][2]=0.90;\r
+ rdcutsvalmine[9][2]=0.3;\r
+ rdcutsvalmine[10][2]=0.1;\r
+ rdcutsvalmine[11][2]=0.05;\r
+ rdcutsvalmine[12][2]=100.;\r
+ rdcutsvalmine[13][2]=0.5;\r
+ \r
+ rdcutsvalmine[0][3]=0.7;\r
+ rdcutsvalmine[1][3]=0.05;\r
+ rdcutsvalmine[2][3]=0.8;\r
+ rdcutsvalmine[3][3]=1.;\r
+ rdcutsvalmine[4][3]=1.;\r
+ rdcutsvalmine[5][3]=0.042;\r
+ rdcutsvalmine[6][3]=0.056;\r
+ rdcutsvalmine[7][3]=-0.000065;\r
+ rdcutsvalmine[8][3]=0.9;\r
+ rdcutsvalmine[9][3]=0.3;\r
+ rdcutsvalmine[10][3]=0.1;\r
+ rdcutsvalmine[11][3]=0.05;\r
+ rdcutsvalmine[12][3]=100.;\r
+ rdcutsvalmine[13][3]=0.5;\r
+ \r
+ rdcutsvalmine[0][4]=0.7;\r
+ rdcutsvalmine[1][4]=0.08;\r
+ rdcutsvalmine[2][4]=0.9;\r
+ rdcutsvalmine[3][4]=1.2;\r
+ rdcutsvalmine[4][4]=1.2;\r
+ rdcutsvalmine[5][4]=0.07;\r
+ rdcutsvalmine[6][4]=0.07;\r
+ rdcutsvalmine[7][4]=0.0001;\r
+ rdcutsvalmine[8][4]=0.9;\r
+ rdcutsvalmine[9][4]=0.3;\r
+ rdcutsvalmine[10][4]=0.1;\r
+ rdcutsvalmine[11][4]=0.05;\r
+ rdcutsvalmine[12][4]=100.;\r
+ rdcutsvalmine[13][4]=0.5;\r
+ \r
+\r
+ rdcutsvalmine[0][5]=0.7;\r
+ rdcutsvalmine[1][5]=0.1;\r
+ rdcutsvalmine[2][5]=1.0;\r
+ rdcutsvalmine[3][5]=1.;\r
+ rdcutsvalmine[4][5]=1.;\r
+ rdcutsvalmine[5][5]=0.08;\r
+ rdcutsvalmine[6][5]=0.08;\r
+ rdcutsvalmine[7][5]=0.0004;\r
+ rdcutsvalmine[8][5]=0.9;\r
+ rdcutsvalmine[9][5]=0.3;\r
+ rdcutsvalmine[10][5]=0.1;\r
+ rdcutsvalmine[11][5]=0.05;\r
+ rdcutsvalmine[12][5]=100000.;\r
+ rdcutsvalmine[13][5]=0.5;\r
+\r
+ rdcutsvalmine[0][6]=0.7;\r
+ rdcutsvalmine[1][6]=0.1;\r
+ rdcutsvalmine[2][6]=1.0;\r
+ rdcutsvalmine[3][6]=1.;\r
+ rdcutsvalmine[4][6]=1.;\r
+ rdcutsvalmine[5][6]=0.1;\r
+ rdcutsvalmine[6][6]=0.1;\r
+ rdcutsvalmine[7][6]=0.0005;\r
+ rdcutsvalmine[8][6]=0.9;\r
+ rdcutsvalmine[9][6]=0.3;\r
+ rdcutsvalmine[10][6]=0.1;\r
+ rdcutsvalmine[11][6]=0.05;\r
+ rdcutsvalmine[12][6]=100.;\r
+ rdcutsvalmine[13][6]=0.5;\r
+\r
+ rdcutsvalmine[0][7]=0.7;\r
+ rdcutsvalmine[1][7]=0.1;\r
+ rdcutsvalmine[2][7]=1.0;\r
+ rdcutsvalmine[3][7]=1.;\r
+ rdcutsvalmine[4][7]=1.;\r
+ rdcutsvalmine[5][7]=0.1;\r
+ rdcutsvalmine[6][7]=0.1;\r
+ rdcutsvalmine[7][7]=0.001;\r
+ rdcutsvalmine[8][7]=0.9;\r
+ rdcutsvalmine[9][7]=0.3;\r
+ rdcutsvalmine[10][7]=0.1;\r
+ rdcutsvalmine[11][7]=0.05;\r
+ rdcutsvalmine[12][7]=100.;\r
+ rdcutsvalmine[13][7]=0.5;\r
+\r
+ \r
+ }else{ // HD cuts - To be setted\r
+ \r
+ rdcutsvalmine[0][0]=0.450;\r
+ rdcutsvalmine[1][0]=0.02;\r
+ rdcutsvalmine[2][0]=0.7;\r
+ rdcutsvalmine[3][0]=0.8;\r
+ rdcutsvalmine[4][0]=0.8;\r
+ rdcutsvalmine[5][0]=0.1;\r
+ rdcutsvalmine[6][0]=0.1;\r
+ rdcutsvalmine[7][0]=0.000002;\r
+ rdcutsvalmine[8][0]=0.9;\r
+ rdcutsvalmine[9][0]=200.;\r
+ rdcutsvalmine[10][0]=200.;\r
+ rdcutsvalmine[11][0]=0.021;\r
+ rdcutsvalmine[12][0]=100.;\r
+ rdcutsvalmine[13][0]=0.5;\r
+\r
+ rdcutsvalmine[0][1]=0.45;\r
+ rdcutsvalmine[1][1]=0.03;\r
+ rdcutsvalmine[2][1]=0.7;\r
+ rdcutsvalmine[3][1]=0.8;\r
+ rdcutsvalmine[4][1]=0.8;\r
+ rdcutsvalmine[5][1]=0.1;\r
+ rdcutsvalmine[6][1]=0.1;\r
+ rdcutsvalmine[7][1]=-0.00002;\r
+ rdcutsvalmine[8][1]=0.9;\r
+ rdcutsvalmine[9][1]=200.;\r
+ rdcutsvalmine[10][1]=200.;\r
+ rdcutsvalmine[11][1]=0.021;\r
+ rdcutsvalmine[12][1]=100.;\r
+ rdcutsvalmine[13][1]=0.5;\r
+ \r
+ rdcutsvalmine[0][2]=0.450;\r
+ rdcutsvalmine[1][2]=0.03;\r
+ rdcutsvalmine[2][2]=0.7;\r
+ rdcutsvalmine[3][2]=0.8;\r
+ rdcutsvalmine[4][2]=0.8;\r
+ rdcutsvalmine[5][2]=0.1;\r
+ rdcutsvalmine[6][2]=0.1;\r
+ rdcutsvalmine[7][2]=-0.00002;\r
+ rdcutsvalmine[8][2]=0.9;\r
+ rdcutsvalmine[9][2]=200.;\r
+ rdcutsvalmine[10][2]=200.;\r
+ rdcutsvalmine[11][2]=0.021;\r
+ rdcutsvalmine[12][2]=100.;\r
+ rdcutsvalmine[13][2]=0.5;\r
+ \r
+ rdcutsvalmine[0][3]=0.45;\r
+ rdcutsvalmine[1][3]=0.03;\r
+ rdcutsvalmine[2][3]=0.7;\r
+ rdcutsvalmine[3][3]=0.9;\r
+ rdcutsvalmine[4][3]=0.9;\r
+ rdcutsvalmine[5][3]=0.1;\r
+ rdcutsvalmine[6][3]=0.1;\r
+ rdcutsvalmine[7][3]=0.000002;\r
+ rdcutsvalmine[8][3]=0.8;\r
+ rdcutsvalmine[9][3]=200.;\r
+ rdcutsvalmine[10][3]=200.;\r
+ rdcutsvalmine[11][3]=0.021;\r
+ rdcutsvalmine[12][3]=100.;\r
+ rdcutsvalmine[13][3]=0.5;\r
+ \r
+ rdcutsvalmine[0][4]=0.45;\r
+ rdcutsvalmine[1][4]=0.03;\r
+ rdcutsvalmine[2][4]=0.7;\r
+ rdcutsvalmine[3][4]=1.;\r
+ rdcutsvalmine[4][4]=1.;\r
+ rdcutsvalmine[5][4]=0.1;\r
+ rdcutsvalmine[6][4]=0.1;\r
+ rdcutsvalmine[7][4]=0.000002;\r
+ rdcutsvalmine[8][4]=0.8;\r
+ rdcutsvalmine[9][4]=200.;\r
+ rdcutsvalmine[10][4]=200.;\r
+ rdcutsvalmine[11][4]=0.021;\r
+ rdcutsvalmine[12][4]=100.;\r
+ rdcutsvalmine[13][4]=0.5;\r
+ \r
+ rdcutsvalmine[0][5]=0.45;\r
+ rdcutsvalmine[1][5]=0.03;\r
+ rdcutsvalmine[2][5]=0.7;\r
+ rdcutsvalmine[3][5]=1.;\r
+ rdcutsvalmine[4][5]=1.;\r
+ rdcutsvalmine[5][5]=0.1;\r
+ rdcutsvalmine[6][5]=0.1;\r
+ rdcutsvalmine[7][5]=0.000002;\r
+ rdcutsvalmine[8][5]=0.8;\r
+ rdcutsvalmine[9][5]=200.;\r
+ rdcutsvalmine[10][5]=200.;\r
+ rdcutsvalmine[11][5]=0.021;\r
+ rdcutsvalmine[12][5]=100.;\r
+ rdcutsvalmine[13][5]=0.5;\r
+ \r
+ rdcutsvalmine[0][6]=0.45;\r
+ rdcutsvalmine[1][6]=0.03;\r
+ rdcutsvalmine[2][6]=0.7;\r
+ rdcutsvalmine[3][6]=1.;\r
+ rdcutsvalmine[4][6]=1.;\r
+ rdcutsvalmine[5][6]=0.1;\r
+ rdcutsvalmine[6][6]=0.1;\r
+ rdcutsvalmine[7][6]=0.000002;\r
+ rdcutsvalmine[8][6]=0.8;\r
+ rdcutsvalmine[9][6]=200.;\r
+ rdcutsvalmine[10][6]=200.;\r
+ rdcutsvalmine[11][6]=0.021;\r
+ rdcutsvalmine[12][6]=100.;\r
+ rdcutsvalmine[13][6]=0.5;\r
+ \r
+ rdcutsvalmine[0][7]=0.45;\r
+ rdcutsvalmine[1][7]=0.03;\r
+ rdcutsvalmine[2][7]=0.7;\r
+ rdcutsvalmine[3][7]=1.;\r
+ rdcutsvalmine[4][7]=1.;\r
+ rdcutsvalmine[5][7]=0.1;\r
+ rdcutsvalmine[6][7]=0.1;\r
+ rdcutsvalmine[7][7]=0.000002;\r
+ rdcutsvalmine[8][7]=0.8;\r
+ rdcutsvalmine[9][7]=200.;\r
+ rdcutsvalmine[10][7]=200.;\r
+ rdcutsvalmine[11][7]=0.021;\r
+ rdcutsvalmine[12][7]=100.;\r
+ rdcutsvalmine[13][7]=0.5;\r
+\r
+ }\r
+ \r
+ RDHFDStartoKpipi->SetCuts(nvars,nptbins,rdcutsvalmine);\r
+ RDHFDStartoKpipi->PrintAll();\r
+ \r
+ \r
+ //CREATE THE TASK\r
+ printf("CREATE TASK\n");\r
+ // create the task\r
+ AliAnalysisTaskSEDStarSpectra *task = new AliAnalysisTaskSEDStarSpectra("AliAnalysisTaskSEDStarSpectra",RDHFDStartoKpipi);\r
+ task->SetAnalysisType(anaType);\r
+ task->SetNSigmasPID(numberOfSigmasPID);\r
+ task->SetMC(theMCon);\r
+ task->SetPID(usePID);\r
+ task->SetDebugLevel(0);\r
+\r
+ mgr->AddTask(task);\r
+\r
+ // Create and connect containers for input/output\r
+ \r
+ TString outputfile = AliAnalysisManager::GetCommonFileName();\r
+ if (anaType == 0) outputfile += ":PWG3_D2H_DStarSpectraHD";\r
+ if (anaType == 1) outputfile += ":PWG3_D2H_DStarSpectraUU";\r
+ \r
+ // ------ input data ------\r
+\r
+ //AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer();\r
+ AliAnalysisDataContainer *cinput0 = mgr->CreateContainer("indstar",TChain::Class(), \r
+ AliAnalysisManager::kInputContainer);\r
+ // ----- output data -----\r
+ \r
+ AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("chist1",TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());\r
+ AliAnalysisDataContainer *coutputDStar1 = mgr->CreateContainer("DStarSpectrum",TList::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data());\r
+ AliAnalysisDataContainer *coutputDStar2 = mgr->CreateContainer("DStarAll",TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());\r
+ AliAnalysisDataContainer *coutputDStar3 = mgr->CreateContainer("DStarPID3",TList::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data());\r
+ AliAnalysisDataContainer *coutputDStar4 = mgr->CreateContainer("DStarPID2",TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());\r
+ AliAnalysisDataContainer *coutputDStar5 = mgr->CreateContainer("DStarPID1",TList::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data());\r
+ AliAnalysisDataContainer *coutputDStar6 = mgr->CreateContainer("cuts",AliRDHFCutsDStartoKpipi::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data()); //cuts\r
+\r
+ mgr->ConnectInput(task,0,mgr->GetCommonInputContainer());\r
+\r
+ mgr->ConnectOutput(task,1,coutput1);\r
+ mgr->ConnectOutput(task,2,coutputDStar1);\r
+ mgr->ConnectOutput(task,3,coutputDStar2);\r
+ mgr->ConnectOutput(task,4,coutputDStar3);\r
+ mgr->ConnectOutput(task,5,coutputDStar4);\r
+ mgr->ConnectOutput(task,6,coutputDStar5);\r
+ mgr->ConnectOutput(task,7,coutputDStar6);\r
+ \r
+ return task;\r
+}\r
+\r