fOutList->Add(listTmp);
}
+ TH1I *hUsed = new TH1I("hRsnUsed", "skipped and used events in this analysis", 2, 0, 2);
+ fOutList->Add(hUsed);
+
fBuffer = new AliRsnEventBuffer(fBufferSize);
}
if (fEntry++ % 100 == 0) cout << "[" << GetName() << "] : processing entry " << fEntry-1 << endl;
- AliRsnEvent *curEvent = GetRsnEventFromInputType();
- if (!curEvent) return;
- curEvent->SetUniqueID(eventID++);
+ TH1I *h = (TH1I*)fOutList->FindObject("hRsnUsed");
- ProcessEventAnalysis(curEvent);
- PostEventProcess();
+ AliRsnEvent *curEvent = GetRsnEventFromInputType();
+ if (curEvent) {
+ curEvent->SetUniqueID(eventID++);
+ ProcessEventAnalysis(curEvent);
+ PostEventProcess();
+ h->Fill(1);
+ }
+ else {
+ h->Fill(0);
+ }
PostData(1, fOutList);
}
fTPCOnly(kFALSE),
fUseESDTrackCuts(kFALSE),
fUseRsnTrackCuts(kFALSE),
+ fCheckVertexStatus(kFALSE),
+ fMinNContributors(0),
fPIDDef(),
fITSClusters(0),
fTPCClusters(0),
// This is known from the "Status" parameter of the vertex itself.
const AliESDVertex *v = esd->GetPrimaryVertex();
if (!v->GetStatus()) v = esd->GetPrimaryVertexSPD();
+ if (fCheckVertexStatus && v->GetStatus() == kFALSE) return kFALSE;
+ if (fMinNContributors > 0 && v->GetNContributors() < fMinNContributors) return kFALSE;
// get primary vertex
vertex[0] = (Double_t)v->GetXv();
}
else {
const AliESDVertex *v = esd->GetPrimaryVertexTPC();
+ if (fCheckVertexStatus && v->GetStatus() == kFALSE) return kFALSE;
+ if (fMinNContributors > 0 && v->GetNContributors() < fMinNContributors) return kFALSE;
// get primary vertex
vertex[0] = (Double_t)v->GetXv();
// compute total multiplicity
rsn->MakeComputations();
if (rsn->GetMultiplicity() <= 0) {
- AliDebug(1, "Zero Multiplicity in this event");
- return kFALSE;
+ AliDebug(1, "Zero Multiplicity in this event");
+ return kFALSE;
}
// sort tracks w.r. to Pt (from largest to smallest)
// AliRsnEvent object will be set to 'kAOD'.
//
- // retrieve stack (if possible)
- AliStack *stack = 0x0;
- if (mc) stack = mc->Stack();
+ // retrieve stack (if possible)
+ AliStack *stack = 0x0;
+ if (mc) stack = mc->Stack();
- // get number of tracks
- Int_t ntracks = aod->GetNTracks();
- if (!ntracks) return kFALSE;
+ // get number of tracks
+ Int_t ntracks = aod->GetNTracks();
+ if (!ntracks) return kFALSE;
- // get primary vertex
- Double_t vertex[3];
- vertex[0] = aod->GetPrimaryVertex()->GetX();
- vertex[1] = aod->GetPrimaryVertex()->GetY();
- vertex[2] = aod->GetPrimaryVertex()->GetZ();
- rsn->SetPrimaryVertex(vertex[0], vertex[1], vertex[2]);
-
- // set MC primary vertex if present
- TArrayF fvertex(3);
- Double_t mcvx = 0., mcvy = 0., mcvz = 0.;
- if (mc) {
- mc->GenEventHeader()->PrimaryVertex(fvertex);
- mcvx = (Double_t)fvertex[0];
- mcvy = (Double_t)fvertex[1];
- mcvz = (Double_t)fvertex[2];
- rsn->SetPrimaryVertexMC(mcvx, mcvy, mcvz);
- }
+ // get primary vertex
+ Double_t vertex[3];
+ vertex[0] = aod->GetPrimaryVertex()->GetX();
+ vertex[1] = aod->GetPrimaryVertex()->GetY();
+ vertex[2] = aod->GetPrimaryVertex()->GetZ();
+ rsn->SetPrimaryVertex(vertex[0], vertex[1], vertex[2]);
- // store tracks from ESD
- Int_t index, label, labmum;
- Bool_t check;
- AliAODTrack *aodTrack = 0;
- AliRsnDaughter temp;
- TObjArrayIter iter(aod->GetTracks());
- while ((aodTrack = (AliAODTrack*)iter.Next()))
- {
- // retrieve index
- index = aod->GetTracks()->IndexOf(aodTrack);
- label = aodTrack->GetLabel();
- if (fRejectFakes && (label < 0)) continue;
- // copy ESD track data into RsnDaughter
- // if unsuccessful, this track is skipped
- check = ConvertTrack(&temp, aodTrack);
- if (!check) continue;
- // if stack is present, copy MC info
- if (stack)
- {
- TParticle *part = stack->Particle(TMath::Abs(label));
- if (part)
- {
- temp.InitMCInfo(part);
- labmum = part->GetFirstMother();
- if (labmum >= 0)
- {
- TParticle *mum = stack->Particle(labmum);
- temp.GetMCInfo()->SetMotherPDG(mum->GetPdgCode());
- }
- }
- }
- // set index and label and add this object to the output container
- temp.SetIndex(index);
- temp.SetLabel(label);
+ // set MC primary vertex if present
+ TArrayF fvertex(3);
+ Double_t mcvx = 0., mcvy = 0., mcvz = 0.;
+ if (mc) {
+ mc->GenEventHeader()->PrimaryVertex(fvertex);
+ mcvx = (Double_t)fvertex[0];
+ mcvy = (Double_t)fvertex[1];
+ mcvz = (Double_t)fvertex[2];
+ rsn->SetPrimaryVertexMC(mcvx, mcvy, mcvz);
+ }
- // check this object against the Rsn cuts (if required)
- if (fUseRsnTrackCuts) {
- if (!fRsnTrackCuts.IsSelected(AliRsnCut::kParticle, &temp)) continue;
- }
+ // store tracks from ESD
+ Int_t index, label, labmum;
+ Bool_t check;
+ AliAODTrack *aodTrack = 0;
+ AliRsnDaughter temp;
+ TObjArrayIter iter(aod->GetTracks());
+ while ((aodTrack = (AliAODTrack*)iter.Next()))
+ {
+ // retrieve index
+ index = aod->GetTracks()->IndexOf(aodTrack);
+ label = aodTrack->GetLabel();
+ if (fRejectFakes && (label < 0)) continue;
+ // copy ESD track data into RsnDaughter
+ // if unsuccessful, this track is skipped
+ check = ConvertTrack(&temp, aodTrack);
+ if (!check) continue;
+ // if stack is present, copy MC info
+ if (stack)
+ {
+ TParticle *part = stack->Particle(TMath::Abs(label));
+ if (part)
+ {
+ temp.InitMCInfo(part);
+ labmum = part->GetFirstMother();
+ if (labmum >= 0)
+ {
+ TParticle *mum = stack->Particle(labmum);
+ temp.GetMCInfo()->SetMotherPDG(mum->GetPdgCode());
+ }
+ }
+ }
+ // set index and label and add this object to the output container
+ temp.SetIndex(index);
+ temp.SetLabel(label);
- AliRsnDaughter *ptr = rsn->AddTrack(temp);
- // if problems occurred while storin, that pointer is NULL
- if (!ptr) AliWarning(Form("Failed storing track#%d"));
- }
+ // check this object against the Rsn cuts (if required)
+ if (fUseRsnTrackCuts) {
+ if (!fRsnTrackCuts.IsSelected(AliRsnCut::kParticle, &temp)) continue;
+ }
- // compute total multiplicity
- rsn->MakeComputations();
- if (rsn->GetMultiplicity() <= 0)
- {
- AliDebug(1, "Zero multiplicity in this event");
- return kFALSE;
- }
+ AliRsnDaughter *ptr = rsn->AddTrack(temp);
+ // if problems occurred while storin, that pointer is NULL
+ if (!ptr) AliWarning(Form("Failed storing track#%d"));
+ }
- // correct tracks for primary vertex
- rsn->CorrectTracks();
+ // compute total multiplicity
+ rsn->MakeComputations();
+ if (rsn->GetMultiplicity() <= 0)
+ {
+ AliDebug(1, "Zero multiplicity in this event");
+ return kFALSE;
+ }
- return kTRUE;
+ // correct tracks for primary vertex
+ rsn->CorrectTracks();
+
+ return kTRUE;
}
//_____________________________________________________________________________
void SetTPCOnly(Bool_t doit = kTRUE);
Bool_t DoesTPCOnly() {return fTPCOnly;}
+ void SetCheckVertexStatus(Bool_t doit = kTRUE);
+ Bool_t DoesCheckVertexStatus() {return fCheckVertexStatus;}
+ void SetMinNContributors(Int_t n) {fMinNContributors = n;}
+
void SetUseESDTrackCuts(Bool_t doit = kTRUE) {fUseESDTrackCuts = doit;}
Bool_t DoesESDTrackCuts() {return fUseESDTrackCuts;}
AliESDtrackCuts* GetESDTrackCuts() {return &fESDTrackCuts;}
// dummy copy methods
AliRsnReader(const AliRsnReader ©) :
- TObject(copy),fCheckSplit(0),fRejectFakes(0),fTPCOnly(0),fUseESDTrackCuts(0),fUseRsnTrackCuts(0),
- fPIDDef(copy.fPIDDef),fITSClusters(0),fTPCClusters(0),fTRDClusters(0),
+ TObject(copy),fCheckSplit(0),fRejectFakes(0),fTPCOnly(0),
+ fUseESDTrackCuts(0),fUseRsnTrackCuts(0),fCheckVertexStatus(kFALSE),
+ fMinNContributors(0),fPIDDef(copy.fPIDDef),fITSClusters(0),fTPCClusters(0),fTRDClusters(0),
fTrackRefs(0),fTrackRefsITS(0),fTrackRefsTPC(0),fESDTrackCuts(),fRsnTrackCuts("") { /*nothing*/ }
AliRsnReader& operator=(const AliRsnReader&) {return (*this);}
- Bool_t fCheckSplit; // flag to check and remove split tracks
- Bool_t fRejectFakes; // flag to reject fake tracks (negative label)
- Bool_t fTPCOnly; // flag to use only the TPC for reading data
- Bool_t fUseESDTrackCuts; // flag to use ESD track cuts
- Bool_t fUseRsnTrackCuts; // flag to use ESD track cuts
+ Bool_t fCheckSplit; // flag to check and remove split tracks
+ Bool_t fRejectFakes; // flag to reject fake tracks (negative label)
+ Bool_t fTPCOnly; // flag to use only the TPC for reading data
+ Bool_t fUseESDTrackCuts; // flag to use ESD track cuts
+ Bool_t fUseRsnTrackCuts; // flag to use ESD track cuts
+
+ Bool_t fCheckVertexStatus; // reject events with vertex status = kFALSE
+ Int_t fMinNContributors; // reject events whose primary vertex has too few contributors
- AliRsnPIDDefESD fPIDDef; // manager for alternative PID weights (ESD only)
+ AliRsnPIDDefESD fPIDDef; // manager for alternative PID weights (ESD only)
- Int_t fITSClusters; // minimum number of ITS clusters to accept a track
- Int_t fTPCClusters; // minimum number of TPC clusters to accept a track
- Int_t fTRDClusters; // minimum number of TRD clusters to accept a track
+ Int_t fITSClusters; // minimum number of ITS clusters to accept a track
+ Int_t fTPCClusters; // minimum number of TPC clusters to accept a track
+ Int_t fTRDClusters; // minimum number of TRD clusters to accept a track
- Int_t fTrackRefs; // minimum required track references for MC reading
- Int_t fTrackRefsITS; // minimum required track references for MC reading (ITS)
- Int_t fTrackRefsTPC; // minimum required track references for MC reading (TPC)
+ Int_t fTrackRefs; // minimum required track references for MC reading
+ Int_t fTrackRefsITS; // minimum required track references for MC reading (ITS)
+ Int_t fTrackRefsTPC; // minimum required track references for MC reading (TPC)
- AliESDtrackCuts fESDTrackCuts; // object for ESD track cuts
- AliRsnCutSet fRsnTrackCuts; // other local cuts used in preliminary track selection
+ AliESDtrackCuts fESDTrackCuts; // object for ESD track cuts
+ AliRsnCutSet fRsnTrackCuts; // other local cuts used in preliminary track selection
ClassDef(AliRsnReader, 1);
};
-static AliRsnAnalysisTaskSEBase::EInputType inputType = AliRsnAnalysisTaskSEBase::kESDMC;
-
-static Bool_t useAutoHandler = kTRUE;
-static Int_t bufferSize = 3000;
-static Int_t pidArraySize = 2000;
-
-static const char* outputFileName = "rsn.root";
-
-static Bool_t useRsnTrackCuts = kFALSE;
-static Double_t etaRange = 10.0;
-static Double_t rsnImpactParam = 3.0;
-static Double_t ptMin = 0.0;
-
-static Bool_t useESDTrackCuts = kFALSE;
-static Double_t cov11 = 2;
-static Double_t cov22 = 2;
-static Double_t cov33 = 0.5;
-static Double_t cov44 = 0.5;
-static Double_t cov55 = 2;
-static Double_t nSigmaToVertex = 4;
-static Double_t dcaToVertex = 3.0;
-static Double_t maxChi2PerClusterTPC = 3.5;
-static Bool_t requireTPCRefit = kTRUE;
-static Bool_t requireSigmaToVertex = kTRUE;
-static Bool_t acceptKinkDaughters = kFALSE;
-static Int_t minNClustersTPC = 50;
-
-static Int_t nMixedEvents = 5;
+static AliRsnAnalysisTaskSEBase::EInputType inputType = AliRsnAnalysisTaskSEBase::kESDMC;
+static const char* outputFileName = "rsn.root";
+
+static Bool_t useAutoHandler = kTRUE;
+static Int_t bufferSize = 3000;
+static Int_t pidArraySize = 2000;
+static Int_t nMixedEvents = 5;
+
+static Bool_t useRsnTrackCuts = kFALSE;
+static Double_t etaRange = 10.0;
+static Double_t rsnImpactParam = 3.0;
+static Double_t ptMin = 0.0;
+
+static Bool_t useESDTrackCuts = kFALSE;
+static Double_t cov11 = 2;
+static Double_t cov22 = 2;
+static Double_t cov33 = 0.5;
+static Double_t cov44 = 0.5;
+static Double_t cov55 = 2;
+static Double_t nSigmaToVertex = 4;
+static Double_t dcaToVertex = 3.0;
+static Double_t maxChi2PerClusterTPC = 3.5;
+static Bool_t requireTPCRefit = kTRUE;
+static Bool_t requireSigmaToVertex = kTRUE;
+static Bool_t acceptKinkDaughters = kFALSE;
+static Int_t minNClustersTPC = 50;
Int_t AddRsnAnalysisTask(AliAnalysisManager *mgr)
{
reader->SetUseRsnTrackCuts(useRsnTrackCuts);
// add configs for all impact parameters
- task->AddPairMgrFromMacro("CreatePairsPhi.C");
+ task->AddPairMgrFromConfig("CreatePairsPhi.C");
// initialize containers
AliAnalysisDataContainer *input = mgr->CreateContainer("in", TChain::Class(), AliAnalysisManager::kInputContainer);
//=============================================================================
#include <TProof.h>
+#include <TGrid.h>
enum Rsn_DataSource
{
kDataset // CAF dataset
};
-static Bool_t cleanPars = kTRUE;
+static Bool_t cleanPars = kFALSE;
static Bool_t cleanPWG2resonances = kFALSE;
static const char* listPar = "STEERBase:ESD:AOD:ANALYSIS:ANALYSISalice:PWG2resonances";
static const char* proofConnection = "pulvir@alicecaf.cern.ch";
+static Bool_t isAlien = kTRUE;
static Bool_t isProof = kFALSE;
-static Rsn_DataSource listType = kTextFile;
-static const char* inputSource = "local.txt";
-static Int_t nReadFiles = 2;
+// Uncomment these two lines for an example run with a local list of local files
+//static Rsn_DataSource listType = kTextFile;
+//static const char* inputSource = "local.txt";
+
+// Uncomment these two lines for an example run with PROOF
+//static const char* inputSource = "/COMMON/COMMON/LHC08c11_10TeV_0.5T";
+//static Rsn_DataSource listType = kDataset;
+
+// Uncomment these two lines for an example run with AliEn XML collection
+static const char* inputSource = "wn.xml";
+static Rsn_DataSource listType = kXMLCollection;
+
+static Int_t nReadFiles = 0;
static Int_t nSkippedFiles = 0;
static TString treeName = "esdTree";
}
//_________________________________________________________________________________________________
-TChain* CreateChainFromXML
-(const char *fileName, Int_t nread = 0, Int_t nskip = 0, const char *treeName = "esdTree")
+TChain* CreateChainFromXML()
{
//
// Create a TChain of files to be analyzed from a XML file.
// Last argument specifies the TTree name.
//
+ if (!gGrid) {
+ Error("CreateChainFromXML", "gGrid object not instantiated");
+ return 0;
+ }
+
TChain *chain = new TChain(treeName.Data());
TAlienCollection *myCollection = TAlienCollection::Open(inputSource);
if (!myCollection)
if (!gProof) {
Error("CreateChainFromDataset", "gProof object not initialized");
- return kFALSE;
+ return 0;
}
TFileCollection *fc = gProof->GetDataSet(inputSource)->GetStagedSubset();
// connect to PROOF if required
if (isProof) TProof::Open(proofConnection);
+ else if (isAlien) TGrid::Connect("alien://");
//
// *** SETUP PAR LIBRARIES **********************************************************************
AliRsnPairMgr* CreatePairsPhi(const char *name = "PHI")
{
AliRsnPairMgr *pairMgr = new AliRsnPairMgr(name);
-
+
// ========== USER CUSTOMIZATION VARIABLES ==========
-
+
Int_t iResPDG = 333;
Int_t nMixEvents = 10;
Bool_t boolUseNoPID = kTRUE;
Bool_t boolUseRealisticPID = kTRUE;
Bool_t boolUsePerfectPID = kTRUE;
-
+
// ======= END USER CUSTOMIZATION VARIABLES =========
// =========== DEFINE PAIRS ==============
-
- // decay tree definitions
+
+ // decay tree definitions
// for a PHI resonance (PDG = 333) decaying into K+ K-
// and for related like-sign pairs
AliRsnPairDef *defUnlike = new AliRsnPairDef(AliRsnPID::kKaon, '+', AliRsnPID::kKaon, '-', iResPDG);
// No PID
AliRsnPair *pairUnlike_NoPID_Signal = new AliRsnPair(AliRsnPair::kNoPID, defUnlike);
AliRsnPair *pairUnlike_NoPID_True = new AliRsnPair(AliRsnPair::kNoPID, defUnlike);
- AliRsnPair *pairUnlike_NoPID_Mix = new AliRsnPair(AliRsnPair::kNoPIDMix, defUnlike, nMixEvents);
+ AliRsnPair *pairUnlike_NoPID_Mix = new AliRsnPair(AliRsnPair::kNoPIDMix, defUnlike);
AliRsnPair *pairLikePP_NoPID = new AliRsnPair(AliRsnPair::kNoPID, defLikePP);
AliRsnPair *pairLikeMM_NoPID = new AliRsnPair(AliRsnPair::kNoPID, defLikeMM);
// end No PID
// Perfect PID
AliRsnPair *pairUnlike_PerfectPID_Signal = new AliRsnPair(AliRsnPair::kPerfectPID, defUnlike);
AliRsnPair *pairUnlike_PerfectPID_True = new AliRsnPair(AliRsnPair::kPerfectPID, defUnlike);
- AliRsnPair *pairUnlike_PerfectPID_Mix = new AliRsnPair(AliRsnPair::kPerfectPIDMix, defUnlike, nMixEvents);
+ AliRsnPair *pairUnlike_PerfectPID_Mix = new AliRsnPair(AliRsnPair::kPerfectPIDMix, defUnlike);
AliRsnPair *pairLikePP_PerfectPID = new AliRsnPair(AliRsnPair::kPerfectPID, defLikePP);
AliRsnPair *pairLikeMM_PerfectPID = new AliRsnPair(AliRsnPair::kPerfectPID, defLikeMM);
// end Perfect PID
-
+
// Perfect PID
AliRsnPair *pairUnlike_RealisticPID_Signal = new AliRsnPair(AliRsnPair::kRealisticPID, defUnlike);
AliRsnPair *pairUnlike_RealisticPID_True = new AliRsnPair(AliRsnPair::kRealisticPID, defUnlike);
- AliRsnPair *pairUnlike_RealisticPID_Mix = new AliRsnPair(AliRsnPair::kRealisticPIDMix, defUnlike, nMixEvents);
+ AliRsnPair *pairUnlike_RealisticPID_Mix = new AliRsnPair(AliRsnPair::kRealisticPIDMix, defUnlike);
AliRsnPair *pairLikePP_RealisticPID = new AliRsnPair(AliRsnPair::kRealisticPID, defLikePP);
AliRsnPair *pairLikeMM_RealisticPID = new AliRsnPair(AliRsnPair::kRealisticPID, defLikeMM);
// end Realistic PID
-
+
// =========== END DEFINE PAIRS ==============
// =========== CUTS ==============
-
- // cuts on single tracks:
- // - pt between 0.2 and 10000.0 GeV/c
- // - eta between -0.9 and 0.9 (ALICE acceptance)
- // - impact parameter
- AliRsnCut *cutDr = new AliRsnCut("cutDr", "", AliRsnCut::kRadialImpactParam, 0.0, 1.0);
- AliRsnCut *cutPtMCPart = new AliRsnCut("cutPtMCPart", "cutPtMCPart", AliRsnCut::kTransMomentumMC, 0.2, 10000.0);
- AliRsnCut *cutEtaMCPart = new AliRsnCut("cutMcEta", "cutMcEta", AliRsnCut::kEtaMC, -0.9, 0.9);
-
+
+ // cuts on tracks:
+ // - defined in 'AddRsnAnalysisTask.C' for single-step analysis
+
// cuts on pairs:
// - true daughters of a phi resonance (only for true pairs histogram)
AliRsnCut *cutTruePair = new AliRsnCut("cutTrue", "cutTrue", AliRsnCut::kIsTruePair, iResPDG);
-
- // cut set definition for single particles
- AliRsnCutSet *cutSetParticle = new AliRsnCutSet("partCut");
- cutSetParticle->AddCut(cutPtMCPart);
- cutSetParticle->AddCut(cutEtaMCPart);
- cutSetParticle->AddCut(cutDr);
- cutSetParticle->SetCutScheme("cutPtMCPart&cutMcEta&cutDr");
-
+
// cut set definition for true pairs
AliRsnCutSet *cutSetPairTrue = new AliRsnCutSet("truePairs");
cutSetPairTrue->AddCut(cutTruePair);
cutSetPairTrue->SetCutScheme("cutTrue");
-
- // define cut manager for all histos but true pairs
- AliRsnCutMgr *cutMgr = new AliRsnCutMgr("standard", "Standard cuts");
- cutMgr->SetCutSet(AliRsnCut::kParticle, cutSetParticle);
-
+
// define cut manager for true pairs
AliRsnCutMgr *cutMgrTrue = new AliRsnCutMgr("true", "True pairs");
- cutMgrTrue->SetCutSet(AliRsnCut::kParticle, cutSetParticle);
cutMgrTrue->SetCutSet(AliRsnCut::kPair, cutSetPairTrue);
-
- // define cut for mixing
- AliRsnCut *cutMult = new AliRsnCut("cutM", "", AliRsnCut::kMultiplicityDifference, 0, 10);
- AliRsnCut *cutVz = new AliRsnCut("cutV", "", AliRsnCut::kVzDifference, 0.0, 3.0);
- AliRsnCutSet *cutMixing = new AliRsnCutSet("");
- cutMixing->AddCut(cutMult);
- cutMixing->AddCut(cutVz);
- cutMixing->SetCutScheme("cutM&cutV");
-
+
// add cuts to pair analysis
- pairUnlike_NoPID_Signal->SetCutMgr(cutMgr);
pairUnlike_NoPID_True->SetCutMgr(cutMgrTrue);
- pairUnlike_NoPID_Mix->SetCutMgr(cutMgr);
- pairLikePP_NoPID->SetCutMgr(cutMgr);
- pairLikeMM_NoPID->SetCutMgr(cutMgr);
-
- pairUnlike_PerfectPID_Signal->SetCutMgr(cutMgr);
pairUnlike_PerfectPID_True->SetCutMgr(cutMgrTrue);
- pairUnlike_PerfectPID_Mix->SetCutMgr(cutMgr);
- pairLikePP_PerfectPID->SetCutMgr(cutMgr);
- pairLikeMM_PerfectPID->SetCutMgr(cutMgr);
-
- pairUnlike_RealisticPID_Signal->SetCutMgr(cutMgr);
pairUnlike_RealisticPID_True->SetCutMgr(cutMgrTrue);
- pairUnlike_RealisticPID_Mix->SetCutMgr(cutMgr);
- pairLikePP_RealisticPID->SetCutMgr(cutMgr);
- pairLikeMM_RealisticPID->SetCutMgr(cutMgr);
-
- pairUnlike_NoPID_Mix->SetMixingCut(cutMixing);
- pairUnlike_PerfectPID_Mix->SetMixingCut(cutMixing);
- pairUnlike_RealisticPID_Mix->SetMixingCut(cutMixing);
-
+
// =========== END CUTS ==============
// =========== FUNCTIONS ==============
// define histogram templates
AliRsnHistoDef *hdIM = new AliRsnHistoDef(800, 0.0, 2.0); // invmass
AliRsnHistoDef *hdRES = new AliRsnHistoDef(200, -10.0, 10.0); // resolution
- AliRsnHistoDef *hdPt = new AliRsnHistoDef(10, 0.0, 10.0); // pt distribution
-
+
// functions
AliRsnFunction *fcnIM = new AliRsnFunction(AliRsnFunction::kInvMass, hdIM); // invmass
AliRsnFunction *fcnRES = new AliRsnFunction(AliRsnFunction::kResolution, hdRES); // IM resolution
- AliRsnFunction *fcnPt = new AliRsnFunction(AliRsnFunction::kPtSpectrum, hdPt); // pt spectrum
-
+
// uncomment these lines when doing analysis in momentum bins
// in this case, take care of the dimension and values in the template array
Double_t mom[7] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0};
fcnIM->SetBinningCut(AliRsnCut::kTransMomentum, 7, mom);
fcnRES->SetBinningCut(AliRsnCut::kTransMomentum, 7, mom);
-
+
pairUnlike_NoPID_Signal->AddFunction(fcnIM);
pairUnlike_NoPID_True->AddFunction(fcnIM);
pairUnlike_NoPID_Mix->AddFunction(fcnIM);
pairLikePP_NoPID->AddFunction(fcnIM);
pairLikeMM_NoPID->AddFunction(fcnIM);
-
+
pairUnlike_PerfectPID_Signal->AddFunction(fcnIM);
pairUnlike_PerfectPID_True->AddFunction(fcnIM);
pairUnlike_PerfectPID_Mix->AddFunction(fcnIM);
pairLikePP_PerfectPID->AddFunction(fcnIM);
pairLikeMM_PerfectPID->AddFunction(fcnIM);
-
+
pairUnlike_RealisticPID_Signal->AddFunction(fcnIM);
pairUnlike_RealisticPID_True->AddFunction(fcnIM);
pairUnlike_RealisticPID_Mix->AddFunction(fcnIM);
pairLikePP_RealisticPID->AddFunction(fcnIM);
pairLikeMM_RealisticPID->AddFunction(fcnIM);
-
+
pairUnlike_NoPID_Signal->AddFunction(fcnRES);
pairUnlike_PerfectPID_Signal->AddFunction(fcnRES);
pairUnlike_RealisticPID_Signal->AddFunction(fcnRES);
-
- pairUnlike_NoPID_True->AddFunction(fcnPt);
- pairUnlike_PerfectPID_True->AddFunction(fcnPt);
- pairUnlike_RealisticPID_True->AddFunction(fcnPt);
-
+
// =========== END FUNCTIONS =============
if (boolUseNoPID) {
pairMgr->AddPair(pairLikePP_NoPID);
pairMgr->AddPair(pairLikeMM_NoPID);
}
-
+
if (boolUsePerfectPID) {
pairMgr->AddPair(pairUnlike_PerfectPID_Signal);
pairMgr->AddPair(pairUnlike_PerfectPID_True);
pairMgr->AddPair(pairLikePP_PerfectPID);
pairMgr->AddPair(pairLikeMM_PerfectPID);
}
-
+
if (boolUseRealisticPID) {
pairMgr->AddPair(pairUnlike_RealisticPID_Signal);
pairMgr->AddPair(pairUnlike_RealisticPID_True);