fAnalysisType ("ESD"),
fCollidingSystem ("PbPb"),
fPIDResponse (0),
- fkSDDSelectionOn (kTRUE),
fkQualityCutZprimVtxPos (kTRUE),
fkQualityCutNoTPConlyPrimVtx(kTRUE),
fkQualityCutTPCrefit (kTRUE),
fkQualityCutnTPCcls (kTRUE),
fkQualityCutPileup (kTRUE),
- fwithSDD (kTRUE),
fMinnTPCcls (0),
fCentrLowLim (0),
fCentrUpLim (0),
fMinPtCutOnDaughterTracks (0),
fEtaCutOnDaughterTracks (0),
+
+ fListHistMultistrangeQA(0),
+ fHistEventSel(0),
+ fHistMassXiMinus(0), fHistMassXiPlus(0), fHistMassOmegaMinus(0), fHistMassOmegaPlus(0),
fCFContCascadeCuts(0),
fCFContCascadeMCgen(0)
fAnalysisType ("ESD"),
fCollidingSystem ("PbPb"),
fPIDResponse (0),
- fkSDDSelectionOn (kTRUE),
fkQualityCutZprimVtxPos (kTRUE),
fkQualityCutNoTPConlyPrimVtx(kTRUE),
fkQualityCutTPCrefit (kTRUE),
fkQualityCutnTPCcls (kTRUE),
fkQualityCutPileup (kTRUE),
- fwithSDD (kTRUE),
fMinnTPCcls (0),
fCentrLowLim (0),
fCentrUpLim (0),
fMinPtCutOnDaughterTracks (0),
fEtaCutOnDaughterTracks (0),
+
+ fListHistMultistrangeQA(0),
+ fHistEventSel(0),
+ fHistMassXiMinus(0), fHistMassXiPlus(0), fHistMassOmegaMinus(0), fHistMassOmegaPlus(0),
fCFContCascadeCuts(0),
fCFContCascadeMCgen(0)
{
// Constructor
// Output slot #0 writes into a TList container (Cascade)
- DefineOutput(1, AliCFContainer::Class());
+ DefineOutput(1, TList::Class());
DefineOutput(2, AliCFContainer::Class());
+ DefineOutput(3, AliCFContainer::Class());
AliLog::SetClassDebugLevel("AliAnalysisTaskQAMultistrange",1);
}
// For all TH1, 2, 3 HnSparse and CFContainer are in the fListCascade TList.
// They will be deleted when fListCascade is deleted by the TSelector dtor
// Because of TList::SetOwner() ...
- if (fCFContCascadeCuts && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { delete fCFContCascadeCuts; fCFContCascadeCuts = 0x0; }
- if (fCFContCascadeMCgen && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { delete fCFContCascadeMCgen; fCFContCascadeMCgen = 0x0; }
+ if (fListHistMultistrangeQA && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { delete fListHistMultistrangeQA; fListHistMultistrangeQA = 0x0; }
+ if (fCFContCascadeCuts && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { delete fCFContCascadeCuts; fCFContCascadeCuts = 0x0; }
+ if (fCFContCascadeMCgen && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { delete fCFContCascadeMCgen; fCFContCascadeMCgen = 0x0; }
}
AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
fPIDResponse = inputHandler->GetPIDResponse();
+ //-----------------
+ // Define the TList
+ //-----------------
+ fListHistMultistrangeQA = new TList();
+ fListHistMultistrangeQA->SetOwner();
+
+ //------------------
+ // Define the Histos
+ //------------------
+ if(! fHistEventSel) {
+ fHistEventSel = new TH1F("fHistEventSel", "Event selection;Evt. Sel. Step;Count",6, 0, 6);
+ fHistEventSel->GetXaxis()->SetBinLabel(1, "Processed");
+ fHistEventSel->GetXaxis()->SetBinLabel(2, "PhysEvSel");
+ fHistEventSel->GetXaxis()->SetBinLabel(3, "Multiplicity");
+ fHistEventSel->GetXaxis()->SetBinLabel(4, "GoodPrVtx");
+ fHistEventSel->GetXaxis()->SetBinLabel(5, "PrVtxPosition");
+ fHistEventSel->GetXaxis()->SetBinLabel(6, "PileUpSel");
+ fListHistMultistrangeQA->Add(fHistEventSel);
+ }
+ if(! fHistMassXiMinus) {
+ fHistMassXiMinus = new TH1F("fHistMassXiMinus", "#Xi^{-} candidates;M(#Lambda,#pi^{-}) (GeV/c^{2}); Counts", 150, 1.25, 1.40);
+ fListHistMultistrangeQA->Add(fHistMassXiMinus);
+ }
+ if(! fHistMassXiPlus) {
+ fHistMassXiPlus = new TH1F("fHistMassXiPlus", "#Xi^{+} candidates; M(#bar{#Lambda}^{0},#pi^{+}) (GeV/c^{2}); Counts", 150, 1.25, 1.40);
+ fListHistMultistrangeQA->Add(fHistMassXiPlus);
+ }
+ if(! fHistMassOmegaMinus) {
+ fHistMassOmegaMinus = new TH1F("fHistMassOmegaMinus", "#Omega^{-} candidates; M(#Lambda,K^{-}) (GeV/c^{2}); Counts", 120, 1.62, 1.74);
+ fListHistMultistrangeQA->Add(fHistMassOmegaMinus);
+ }
+ if(! fHistMassOmegaPlus) {
+ fHistMassOmegaPlus = new TH1F("fHistMassOmegaPlus", "#Omega^{+} candidates;M(#bar{#Lambda}^{0},K^{+}) (GeV/c^{2}); Counts", 120, 1.62, 1.74);
+ fListHistMultistrangeQA->Add(fHistMassOmegaPlus);
+ }
+
+
//---------------------------------------------------
// Define the container for the topological variables
//---------------------------------------------------
fCFContCascadeMCgen->SetVarTitle(6, "MC gen Centrality");
}
+ PostData(1, fListHistMultistrangeQA);
+ PostData(2, fCFContCascadeCuts);
+ PostData(3, fCFContCascadeMCgen);
- PostData(1, fCFContCascadeCuts);
- PostData(2, fCFContCascadeMCgen);
}// end UserCreateOutputObjects
return;
}
+ fHistEventSel->Fill(0.5);
//+++++++++++++++++
// Event Selections
//+++++++++++++++++
+ //------------------
+ // Physics selection
+ //------------------
+ UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
+ Bool_t isSelected = 0;
+ if (fCollidingSystem == "pp" || fCollidingSystem == "PbPb") isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
+ else if (fCollidingSystem == "pPb") isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
+ if (!isSelected){
+ PostData(1, fListHistMultistrangeQA);
+ PostData(2, fCFContCascadeCuts);
+ PostData(3, fCFContCascadeMCgen);
+ return;
+ }
+
+ fHistEventSel->Fill(1.5);
+
//----------------------------------------------------------
// Centrality/Multiplicity selection for PbPb/pPb collisions
//----------------------------------------------------------
if (fAnalysisType == "ESD" && (fCollidingSystem == "PbPb" || fCollidingSystem == "pPb")) centrality = lESDevent->GetCentrality();
else if (fAnalysisType == "AOD" && (fCollidingSystem == "PbPb" || fCollidingSystem == "pPb")) centrality = lAODevent->GetCentrality();
Float_t lcentrality = 0.;
- if (fCollidingSystem == "PbPb" || fCollidingSystem == "pPb") {
+ if (fCollidingSystem == "PbPb" || fCollidingSystem == "pPb") {
if (fkUseCleaning) lcentrality = centrality->GetCentralityPercentile(fCentrEstimator.Data());
else {
lcentrality = centrality->GetCentralityPercentileUnchecked(fCentrEstimator.Data());
if (centrality->GetQuality()>1) {
- PostData(1, fCFContCascadeCuts);
+ PostData(1, fListHistMultistrangeQA);
+ PostData(2, fCFContCascadeCuts);
+ PostData(3, fCFContCascadeMCgen);
return;
}
}
//}
} else if (fCollidingSystem == "pp") lcentrality = 0.;
- //---------------------
- // SDD status selection
- //---------------------
- if (fkSDDSelectionOn && fAnalysisType == "ESD") {
- TString trcl = lESDevent->GetFiredTriggerClasses();
- if (fwithSDD) { if(!(trcl.Contains("ALLNOTRD"))) { PostData(1, fCFContCascadeCuts); return; } }
- else if (!fwithSDD){ if((trcl.Contains("ALLNOTRD"))) { PostData(1, fCFContCascadeCuts); return; } }
- } else if (fkSDDSelectionOn && fAnalysisType == "AOD") {
- TString trcl = lAODevent->GetFiredTriggerClasses();
- if (fwithSDD) { if(!(trcl.Contains("ALLNOTRD"))) { PostData(1, fCFContCascadeCuts); return; } }
- else if (!fwithSDD) { if((trcl.Contains("ALLNOTRD"))) { PostData(1, fCFContCascadeCuts); return; } }
- }
-
- //------------------
- // Physics selection
- //------------------
- UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
- Bool_t isSelected = 0;
- if (fCollidingSystem == "pp" || fCollidingSystem == "PbPb") isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
- else if (fCollidingSystem == "pPb") isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
- if (!isSelected){ PostData(1, fCFContCascadeCuts); return; }
+ fHistEventSel->Fill(2.5);
//------------------------------
// Well-established PV selection
const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtx->GetStatus() ){
AliWarning(" No SPD prim. vertex nor prim. Tracking vertex ... return !");
- PostData(1, fCFContCascadeCuts);
+ PostData(1, fListHistMultistrangeQA);
+ PostData(2, fCFContCascadeCuts);
+ PostData(3, fCFContCascadeMCgen);
return;
}
}
const AliAODVertex *lPrimaryBestAODVtx = lAODevent->GetPrimaryVertex();
if (!lPrimaryBestAODVtx){
AliWarning("No prim. vertex in AOD... return!");
- PostData(1, fCFContCascadeCuts);
+ PostData(1, fListHistMultistrangeQA);
+ PostData(2, fCFContCascadeCuts);
+ PostData(3, fCFContCascadeMCgen);
return;
}
lPrimaryBestAODVtx->GetXYZ( lBestPrimaryVtxPos );
else fHasVertex = kTRUE;
if (fHasVertex == kFALSE) { //Is First event in chunk rejection: Still present!
AliWarning("Pb / | PV does not satisfy selection criteria!");
- PostData(1, fCFContCascadeCuts);
+ PostData(1, fListHistMultistrangeQA);
+ PostData(2, fCFContCascadeCuts);
+ PostData(3, fCFContCascadeMCgen);
return;
}
vertex->GetXYZ( lBestPrimaryVtxPos );
else fHasVertex = kTRUE;
if (fHasVertex == kFALSE) { //Is First event in chunk rejection: Still present!
AliWarning("Pb / | PV does not satisfy selection criteria!");
- PostData(1, fCFContCascadeCuts);
+ PostData(1, fListHistMultistrangeQA);
+ PostData(2, fCFContCascadeCuts);
+ PostData(3, fCFContCascadeMCgen);
return;
}
vertex->GetXYZ( lBestPrimaryVtxPos );
if (fAnalysisType == "ESD") lMagneticField = lESDevent->GetMagneticField();
else if (fAnalysisType == "AOD") lMagneticField = lAODevent->GetMagneticField();
+ fHistEventSel->Fill(3.5);
+
//----------------------------
// Vertex Z position selection
//----------------------------
if (fkQualityCutZprimVtxPos) {
if (TMath::Abs(lBestPrimaryVtxPos[2]) > fVtxRange ) {
- PostData(1, fCFContCascadeCuts);
+ PostData(1, fListHistMultistrangeQA);
+ PostData(2, fCFContCascadeCuts);
+ PostData(3, fCFContCascadeMCgen);
return;
}
}
+ fHistEventSel->Fill(4.5);
+
//-----------------------
// Pilup selection for pp
//-----------------------
if (fCollidingSystem == "pp") {
if (fAnalysisType == "ESD") {
- if (fkQualityCutPileup) { if(lESDevent->IsPileupFromSPD()){ PostData(1, fCFContCascadeCuts); return; } }
+ if (fkQualityCutPileup) { if(lESDevent->IsPileupFromSPD()){
+ PostData(1, fListHistMultistrangeQA);
+ PostData(2, fCFContCascadeCuts);
+ PostData(3, fCFContCascadeMCgen);
+ return;
+ }
+ }
} else if (fAnalysisType == "AOD") {
- if (fkQualityCutPileup) { if(lAODevent->IsPileupFromSPD()){ PostData(1, fCFContCascadeCuts); return; } }
+ if (fkQualityCutPileup) { if(lAODevent->IsPileupFromSPD()){
+ PostData(1, fListHistMultistrangeQA);
+ PostData(2, fCFContCascadeCuts);
+ PostData(3, fCFContCascadeMCgen);
+ return;
+ }
+ }
}
}
+ fHistEventSel->Fill(5.5);
////////////////////////////
// MC GENERATED CASCADE PART
// ---------------------------------------------------------------------------------------------------
// - Around effective masses. Change mass hypotheses to cover all the possibilities: Xi-/+, Omega -/+
- if ( lChargeXi < 0 ) lInvMassXiMinus = xi->MassXi();
- if ( lChargeXi > 0 ) lInvMassXiPlus = xi->MassXi();
- if ( lChargeXi < 0 ) lInvMassOmegaMinus = xi->MassOmega();
- if ( lChargeXi > 0 ) lInvMassOmegaPlus = xi->MassOmega();
+ if ( lChargeXi < 0 ) lInvMassXiMinus = xi->MassXi();
+ if ( lChargeXi > 0 ) lInvMassXiPlus = xi->MassXi();
+ if ( lChargeXi < 0 ) lInvMassOmegaMinus = xi->MassOmega();
+ if ( lChargeXi > 0 ) lInvMassOmegaPlus = xi->MassOmega();
// ----------------------------------------------
// - TPC PID : 3-sigma bands on Bethe-Bloch curve
Float_t lctauV0 = -1.;
if (lV0TotMom!=0) lctauV0 = distV0Xi*lambdaMass/lV0TotMom;
-
+ // Fill the TH1F without PID info
+ if ( lChargeXi < 0 ) {
+ fHistMassXiMinus->Fill( lInvMassXiMinus );
+ fHistMassOmegaMinus->Fill( lInvMassOmegaMinus );
+ } else if ( lChargeXi > 0 ) {
+ fHistMassXiPlus->Fill( lInvMassXiPlus );
+ fHistMassOmegaPlus->Fill( lInvMassOmegaPlus );
+ }
+
+
// Fill the AliCFContainer (optimisation of topological selections)
Double_t lContainerCutVars[21] = {0.0};
lContainerCutVars[0] = lDcaXiDaughters;
// Post output data.
- PostData(1, fCFContCascadeCuts);
- PostData(2, fCFContCascadeMCgen);
+ PostData(1, fListHistMultistrangeQA);
+ PostData(2, fCFContCascadeCuts);
+ PostData(3, fCFContCascadeMCgen);
+
}
//________________________________________________________________________
void SetIsMC (Bool_t isMC = kFALSE) { fisMC = isMC; }
void SetAnalysisType (const char* analysisType = "ESD" ) { fAnalysisType = analysisType; }
void SetCollidingSystem (const char* collidingSystem = "PbPb") { fCollidingSystem = collidingSystem; }
- void SetSDDselection (Bool_t SDDSelection = kFALSE) { fkSDDSelectionOn = SDDSelection; }
void SetQualityCutZprimVtxPos (Bool_t qualityCutZprimVtxPos = kTRUE ) { fkQualityCutZprimVtxPos = qualityCutZprimVtxPos; }
void SetQualityCutNoTPConlyPrimVtx (Bool_t qualityCutNoTPConlyPrimVtx = kTRUE ) { fkQualityCutNoTPConlyPrimVtx = qualityCutNoTPConlyPrimVtx; }
void SetQualityCutTPCrefit (Bool_t qualityCutTPCrefit = kTRUE ) { fkQualityCutTPCrefit = qualityCutTPCrefit; }
void SetQualityCutnTPCcls (Bool_t qualityCutnTPCcls = kTRUE ) { fkQualityCutnTPCcls = qualityCutnTPCcls; }
void SetQualityCutMinnTPCcls (Int_t minnTPCcls = 70 ) { fMinnTPCcls = minnTPCcls; }
void SetQualityCutPileup (Bool_t qualitycutPileup = kFALSE) { fkQualityCutPileup = qualitycutPileup; }
- void SetwithSDD (Bool_t withSDD = kTRUE ) { fwithSDD = withSDD; }
void SetCentralityLowLim (Float_t centrlowlim = 0. ) { fCentrLowLim = centrlowlim; }
void SetCentralityUpLim (Float_t centruplim = 100. ) { fCentrUpLim = centruplim; }
void SetCentralityEst (TString centrest = "V0M" ) { fCentrEstimator = centrest; }
Bool_t fisMC; // Boolean : kTRUE = is a MC production
TString fAnalysisType; // "ESD" or "AOD" analysis type
TString fCollidingSystem; // "PbPb", "pPb" or "pp" colliding system
- AliPIDResponse *fPIDResponse; //! PID response object
- Bool_t fkSDDSelectionOn; // Boolean : kTRUE = apply the selection on SDD status
+ AliPIDResponse *fPIDResponse; // PID response object
Bool_t fkQualityCutZprimVtxPos; // Boolean : kTRUE = cut on the prim.vtx z-position
Bool_t fkQualityCutNoTPConlyPrimVtx; // Boolean : kTRUE = prim vtx should be SPD or Tracking vertex
Bool_t fkQualityCutTPCrefit; // Boolean : kTRUE = ask for TPCrefit for the 3 daughter tracks
Bool_t fkQualityCutnTPCcls; // Boolean : kTRUE = ask for at least n TPC clusters for each daughter track
Bool_t fkQualityCutPileup; // Boolean : kTRUE = ask for no pileup events
- Bool_t fwithSDD; // Boolean : kTRUE = Select the events that has and use the info from the SDD
Int_t fMinnTPCcls; // minimum number of TPC cluster for daughter tracks
Float_t fCentrLowLim; // Lower limit for centrality percentile selection
Float_t fCentrUpLim; // Upper limit for centrality percentile selection
Float_t fMinPtCutOnDaughterTracks; // minimum pt cut on daughter tracks
Float_t fEtaCutOnDaughterTracks; // pseudorapidity cut on daughter tracks
-
- AliCFContainer *fCFContCascadeCuts; //! Container meant to store all the relevant distributions corresponding to the cut variables
- AliCFContainer *fCFContCascadeMCgen; //! Container meant to store general variables for MC generated particles
+ TList *fListHistMultistrangeQA; //! List of Cascade histograms
+ TH1F *fHistEventSel; // Gives the number of the events after each event selection
+ TH1F *fHistMassXiMinus; // Gives the invariant mass distr. for the Xi minus without PID info on daughter tracks
+ TH1F *fHistMassXiPlus; // Gives the invariant mass distr. for the Xi plus without PID info on daughter tracks
+ TH1F *fHistMassOmegaMinus; // Gives the invariant mass distr. for the Omega minus without PID info on daughter tracks
+ TH1F *fHistMassOmegaPlus; // Gives the invariant mass distr. for the Omega plus without PID info on daughter tracks
+ AliCFContainer *fCFContCascadeCuts; // Container meant to store all the relevant distributions corresponding to the cut variables
+ AliCFContainer *fCFContCascadeMCgen; // Container meant to store general variables for MC generated particles
AliAnalysisTaskQAMultistrange(const AliAnalysisTaskQAMultistrange&); // not implemented
Bool_t kusecleaning = kTRUE,
Float_t vtxlim = 10.,
TString collidingSystem = "PbPb",
- Bool_t SDDSelection = kFALSE,
- Bool_t withSDD = kFALSE,
Float_t minptondaughtertracks = 0.,
Float_t etacutondaughtertracks = 0.8) {
taskcheckcascade->SetIsMC (isMC);
taskcheckcascade->SetAnalysisType (type);
taskcheckcascade->SetCollidingSystem (collidingSystem);
- taskcheckcascade->SetSDDselection (SDDSelection);
taskcheckcascade->SetQualityCutZprimVtxPos (kTRUE); // selects vertices in +-10cm
taskcheckcascade->SetQualityCutNoTPConlyPrimVtx (kTRUE); // retains only events with tracking + SPD vertex
taskcheckcascade->SetQualityCutTPCrefit (kTRUE); // requires TPC refit flag to be true to select a track
taskcheckcascade->SetQualityCutnTPCcls (kTRUE); // rejects tracks that have less than n clusters in the TPC
taskcheckcascade->SetQualityCutMinnTPCcls (minnTPCcls); // minimum number of TPC clusters to accept daughter tracks
taskcheckcascade->SetQualityCutPileup (kFALSE);
- taskcheckcascade->SetwithSDD (withSDD);
taskcheckcascade->SetCentralityLowLim (centrlowlim); // setting centrality selection vriables
taskcheckcascade->SetCentralityUpLim (centruplim);
taskcheckcascade->SetCentralityEst (centrest);
//==============================================================================
// User file name (if need be)
-
TString outputFileName = AliAnalysisManager::GetCommonFileName();
outputFileName += ":PWGLFStrangeness.outputCheckCascade";
- AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("cfcontCuts",
+ AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("fListHistMultistrangeQA",
+ TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ outputFileName );
+ AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("cfcontCuts",
AliCFContainer::Class(),
AliAnalysisManager::kOutputContainer,
outputFileName );
- AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("cfcontMCgen",
+ AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("cfcontMCgen",
AliCFContainer::Class(),
AliAnalysisManager::kOutputContainer,
outputFileName );
mgr->ConnectInput( taskcheckcascade, 0, mgr->GetCommonInputContainer());
mgr->ConnectOutput(taskcheckcascade, 1, coutput1);
mgr->ConnectOutput(taskcheckcascade, 2, coutput2);
+ mgr->ConnectOutput(taskcheckcascade, 3, coutput3);
return taskcheckcascade;
}
//////////////////////////////////////////////////
//
// This macro was written by Domenico Colella (domenico.colella@cern.ch).
-// 12 November 2013
+// -- first version [12 November 2013]
+// -- modified version [3 November 2013]: added inv. mass distr. without PID info
//
// ------------------------
// ------ Arguments -------
// Rapidity, Cascade proper length,
// V0 proper length.
// -- [Page 4] Check on the invariant mass distribution fit.
-// -- [Page 5] Only in case of PbPb or pPb collisions, the event centrality
+// -- [Page 5] Check on the invariant mass distribution, without the PID info, fit.
+// -- [Page 6] Only in case of PbPb or pPb collisions, the event centrality
// distribution.
-// -- [Page 6] Only in case of MC production, distributions for the MC generated
+// -- [Page 7] Only in case of MC production, distributions for the MC generated
// particles, of the variables:
// Total momentum, Transverse momentum,
// Rapidity, Pseudo-rapidity,
// Theta angle, Phi angle,
//
+//
//////////////////////////////////////////////////////
//SOURCE THE FILE AND THE CONTAINER
TFile *f1 = new TFile(Form("%s/%s",fileDir,filein));
AliCFContainer *cf = (AliCFContainer*) (f1->Get("PWGLFStrangeness.outputCheckCascade/fCFContCascadeCuts"));
+ TList *hlist = (TList*) f1->Get("PWGLFStrangeness.outputCheckCascade/fListHistMultistrangeQA");
//____________
//DEEFINE TEXT
else if (icasType == 1) tcasc = new TLatex(0.8,0.7,"#color[1]{#Xi^{+}}");
else if (icasType == 2) tcasc = new TLatex(0.8,0.7,"#color[1]{#Omega^{-}}");
else if (icasType == 3) tcasc = new TLatex(0.8,0.7,"#color[1]{#Omega^{+}}");
- tcasc->SetTextSize(0.2);
+ tcasc->SetTextSize(0.15);
tcasc->SetNDC();
tcasc->SetTextColor(2);
TLatex* tpdgmass;
tpdgmass->SetNDC();
tpdgmass->SetTextColor(2);
+
//________________________________
//DEFINE 1st CANVAS AND DRAW PLOTS
TCanvas *c1 = new TCanvas("c1","",1200,800);
Double_t max6 = hvar6->GetBinContent(hvar6->GetMaximumBin());
hvar6->GetYaxis()->SetRangeUser(0.01,max6*1.5);
hvar6->Draw("histo");
+ tcasc->Draw();
//Pad 2: Min V0 Radius Fid. Vol.
c2->cd(2);
gPad->SetLogy();
//________________________________
//DEFINE 3rd CANVAS AND DRAW PLOTS
TCanvas *c3 = new TCanvas("c3","",1200,800);
- c3->Divide(2,3);
- //Pad 1: InvMass
+ c3->Divide(2,2);
+ //Pad 1: Transverse momentum
c3->cd(1);
- TH1D *hvar12 = cf->ShowProjection(11+icasType/2,icasType);
- hvar12->Draw("histo");
- tpdgmass->Draw();
- TLine *linemass;
- if (icasType == 0) linemass = new TLine(1.32171,0.,1.32171,0.5*hvar12->GetBinContent(hvar12->GetMaximumBin()));
- else if (icasType == 1) linemass = new TLine(1.32171,0.,1.32171,0.5*hvar12->GetBinContent(hvar12->GetMaximumBin()));
- else if (icasType == 2) linemass = new TLine(1.67245,0.,1.67245,0.5*hvar12->GetBinContent(hvar12->GetMaximumBin()));
- else if (icasType == 3) linemass = new TLine(1.67245,0.,1.67245,0.5*hvar12->GetBinContent(hvar12->GetMaximumBin()));
- linemass->SetLineColor(kRed);
- linemass->SetLineStyle(1);
- linemass->SetLineWidth(2.0);
- linemass->Draw("same");
- //Pad 2: Transverse momentum
- c3->cd(2);
TH1D *hvar13 = cf->ShowProjection(13,icasType);
hvar13->Draw("histo");
- //Pad 3: Y
- c3->cd(3);
+ tcasc->Draw();
+ //Pad 2: Y
+ c3->cd(2);
TH1D *hvar14 = cf->ShowProjection(14+icasType/2,icasType);
hvar14->Draw("histo");
- //Pad 4: Cascade proper length
- c3->cd(4);
+ //Pad 3: Cascade proper length
+ c3->cd(3);
TH1D *hvar18;
hvar18 = cf->ShowProjection(16,icasType);
hvar18->GetXaxis()->SetRangeUser(0.,90.);
hvar18->Draw("histo");
- //Pad 5: V0 proper length
- c3->cd(5);
+ //Pad 4: V0 proper length
+ c3->cd(4);
TH1D *hvar19;
hvar19 = cf->ShowProjection(17,icasType);
hvar19->GetXaxis()->SetRangeUser(0.,90.);
//________________________________
//DEFINE 4th CANVAS AND DRAW PLOTS
- TCanvas *c4 = new TCanvas("c4","",600,400);
- c4->Divide(2,1);
+ TCanvas *c4 = new TCanvas("c4","",1200,800);
+ c4->Divide(2,2);
//Pad1: invariant mass fit
c4->cd(1);
- TH1D *hvar18 = cf->ShowProjection(11+icasType/2,icasType);
- hvar18->Draw("histo");
+ TH1D *hvar23 = cf->ShowProjection(11+icasType/2,icasType);
+ hvar23->Draw("histo");
+ tcasc->Draw();
// - SOME PARAMETER VALUE
Bool_t kfitgauss = kFALSE;
Bool_t kfitleft = kFALSE;
Bool_t kfitright = kFALSE;
- Int_t ptbinNarrowY = 0;
- if (icasType < 2) ptbinNarrowY = 10; // 6;
- else ptbinNarrowY = 3; // 2;
// - SOME DEFINITIONS
Float_t lowlimmass;
Float_t uplimmass;
fitinvmass->SetParLimits(1, 1.664,1.68);
fitinvmass->SetParLimits(2,0.0008,0.006);
}
- hvar18->Fit("fitinvmass","rimeN");
+ hvar23->Fit("fitinvmass","rimeN");
fitinvmass->SetLineColor(kRed);
fitinvmass->Draw("same");
Float_t meanGauss = fitinvmass->GetParameter(1);
c4->cd(2);
Float_t refwidth = 0.002;
if (icasType > 1) refwidth = 0.0025;
- TPaveText *pave1 = new TPaveText(0.05,0.3,0.95,0.5);
+ TPaveText *pave1 = new TPaveText(0.05,0.3,0.95,0.7);
pave1->SetFillColor(0);
pave1->SetTextSize(0.04);
pave1->SetTextAlign(12);
+ pave1->AddText("Invariant mass distribution #color[4]{WITH} PID on dauther tracks");
if (icasType < 2) pave1->AddText("PDG mass: 1.32171 GeV/c^{2}");
else pave1->AddText("PDG mass: 1.67245 GeV/c^{2}");
- pave1->AddText(Form("#color[1]{Mass form Fit: %.5f #pm %.5f GeV/c^{2}}",meanGauss,sigmaGauss));
+ pave1->AddText(Form("#color[1]{Mass from Fit: %.5f #pm %.5f GeV/c^{2}}",meanGauss,sigmaGauss));
if (sigmaGauss > refwidth - 0.0003 && sigmaGauss < refwidth + 0.0003) pave1->AddText("#color[3]{OK!! The width is compatible with standard.}");
else pave1->AddText("#color[2]{NOT OK!! Problem.}");
pave1->Draw();
cout<<" "<<refwidth - 0.0003<<"<"<<sigmaGauss<<"<"<<refwidth + 0.0003<<endl;
- c4->SaveAs("fig_lf_Multistrange.pdf");
+ //Pad3: invariant mass fit
+ c4->cd(3);
+ TH1D *hvar24;
+ if (icasType == 0) hvar24 = (TH1D*) hlist->FindObject(Form("fHistMassXiMinus"));
+ else if (icasType == 1) hvar24 = (TH1D*) hlist->FindObject(Form("fHistMassXiPlus"));
+ else if (icasType == 2) hvar24 = (TH1D*) hlist->FindObject(Form("fHistMassOmegaMinus"));
+ else if (icasType == 3) hvar24 = (TH1D*) hlist->FindObject(Form("fHistMassOmegaPlus"));
+ hvar24->Draw("histo");
+ TF1* fitinvmassnoPID = new TF1("fitinvmassnoPID","gaus(0)+pol2(3)",lowlimmass,uplimmass);
+ fitinvmassnoPID->SetParName(0, "cnstntG");
+ fitinvmassnoPID->SetParName(1, "meanG");
+ fitinvmassnoPID->SetParName(2, "sigmaG");
+ fitinvmassnoPID->SetParLimits(0,0.,500000.);
+ if (icasType==0||icasType==1) {
+ fitinvmassnoPID->SetParameter(1, 1.32171);
+ fitinvmassnoPID->SetParLimits(1, 1.31,1.33);
+ fitinvmassnoPID->SetParLimits(2,0.001,0.005);
+ } else {
+ fitinvmassnoPID->SetParameter(1, 1.67245);
+ fitinvmassnoPID->SetParLimits(1, 1.664,1.68);
+ fitinvmassnoPID->SetParLimits(2,0.0008,0.006);
+ }
+ hvar24->Fit("fitinvmassnoPID","rimeN");
+ fitinvmassnoPID->SetLineColor(kRed);
+ fitinvmassnoPID->Draw("same");
+ Float_t meanGaussnoPID = fitinvmassnoPID->GetParameter(1);
+ Float_t sigmaGaussnoPID = fitinvmassnoPID->GetParameter(2);
+ cout<<"Mean: "<<meanGaussnoPID<<endl;
+ cout<<"Sigma: "<<sigmaGaussnoPID<<endl;
+ //Pad4: Text
+ c4->cd(4);
+ Float_t refwidth = 0.002;
+ if (icasType > 1) refwidth = 0.0025;
+ TPaveText *pave2 = new TPaveText(0.05,0.3,0.95,0.7);
+ pave2->SetFillColor(0);
+ pave2->SetTextSize(0.04);
+ pave2->SetTextAlign(12);
+ pave2->AddText("Invariant mass distribution #color[4]{WITHOUT} PID on dauther tracks");
+ if (icasType < 2) pave2->AddText("PDG mass: 1.32171 GeV/c^{2}");
+ else pave2->AddText("PDG mass: 1.67245 GeV/c^{2}");
+ pave2->AddText(Form("#color[1]{Mass from Fit: %.5f #pm %.5f GeV/c^{2}}",meanGaussnoPID,sigmaGaussnoPID));
+ if (sigmaGaussnoPID > refwidth - 0.0003 && sigmaGaussnoPID < refwidth + 0.0003) pave2->AddText("#color[3]{OK!! The width is compatible with standard.}");
+ else pave2->AddText("#color[2]{NOT OK!! Problem.}");
+ pave2->Draw();
+ cout<<" "<<refwidth - 0.0003<<"<"<<sigmaGaussnoPID<<"<"<<refwidth + 0.0003<<endl;
+ c4->SaveAs("fig_lf_Multistrange.pdf");
+
//________________________________
- //DEFINE 5th CANVAS AND DRAW PLOTS
- if (collidingsystem == 0 || collidingsystem == 2) {
- TCanvas *c5 = new TCanvas("c5","",600,720);//1200,270);
- c5->cd(1);
- TH1D *hvar16 = cf->ShowProjection(19,icasType);
- hvar16->Draw("histo");
- if (!isMC) c5->SaveAs("fig_lf_Multistrange.pdf)");
- else if (isMC) c5->SaveAs("fig_lf_Multistrange.pdf");
- }
-
+ //DEFINE 6th CANVAS AND DRAW PLOTS
+ TCanvas *c6 = new TCanvas("c6","",1200,400);//1200,270);
+ c6->Divide(2,1);
+ //Pad 1: Event Selection
+ c6->cd(1);
+ TH1D* hvar26 = hlist->FindObject(Form("fHistEventSel"));
+ hvar26->Draw("histo");
+ //Pad 2: Centrality/Multiplicity distribution
+ c6->cd(2);
+ TH1D *hvar16 = cf->ShowProjection(19,icasType);
+ hvar16->Draw("histo");
+ if (!isMC) c6->SaveAs("fig_lf_Multistrange.pdf)");
+ else if (isMC) c6->SaveAs("fig_lf_Multistrange.pdf");
//_______________________________
AliCFContainer *cfMC = (AliCFContainer*) (f1->Get("PWGLFStrangeness.outputCheckCascade/fCFContCascadeMCgen"));
//DEFINE 6th CANVAS AND DRAW PLOTS
- TCanvas *c6 = new TCanvas("c6","",1200,800);
- c6->Divide(2,3);
+ TCanvas *c7 = new TCanvas("c7","",1200,800);
+ c7->Divide(2,3);
//Pad 1: Total Momentum
- c6->cd(1);
+ c7->cd(1);
TH1D *hvar17 = cfMC->ShowProjection(0,icasType);
hvar17->Draw("histo");
tcasc->Draw();
//Pad 2: Transverse Momentum
- c6->cd(2);
+ c7->cd(2);
TH1D *hvar18 = cfMC->ShowProjection(1,icasType);
hvar18->Draw("histo");
//Pad 3: Rapidity (y)
- c6->cd(3);
+ c7->cd(3);
TH1D *hvar19 = cfMC->ShowProjection(2,icasType);
hvar19->Draw("histo");
//Pad 4: Pseudo-rapidity (eta)
- c6->cd(4);
+ c7->cd(4);
TH1D *hvar20 = cfMC->ShowProjection(3,icasType);
hvar20->Draw("histo");
//Pad 5: Theta
- c6->cd(5);
+ c7->cd(5);
TH1D *hvar21 = cfMC->ShowProjection(4,icasType);
hvar21->Draw("histo");
//Pad 6: Phi
- c6->cd(6);
+ c7->cd(6);
TH1D *hvar22 = cfMC->ShowProjection(5,icasType);
hvar22->Draw("histo");
- c6->SaveAs("fig_lf_Multistrange.pdf)");
+ c7->SaveAs("fig_lf_Multistrange.pdf)");
}