Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
smaller updates and adding efficiency task
  • Loading branch information
akalweit committed Jul 15, 2021
commit 9e2d31efa5089c06959694ce57b84e8d8a894bfa
5 changes: 5 additions & 0 deletions Analysis/Tasks/PWGLF/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ o2_add_dpl_workflow(nuclei-spectra
PUBLIC_LINK_LIBRARIES O2::Framework O2::DetectorsBase O2::AnalysisDataModel O2::AnalysisCore
COMPONENT_NAME Analysis)

o2_add_dpl_workflow(nuclei-efficiency
SOURCES NucleiSpectraEfficiency.cxx
PUBLIC_LINK_LIBRARIES O2::Framework O2::DetectorsBase O2::AnalysisDataModel O2::AnalysisCore
COMPONENT_NAME Analysis)

o2_add_dpl_workflow(lambdakzerobuilder
SOURCES lambdakzerobuilder.cxx
PUBLIC_LINK_LIBRARIES O2::Framework O2::DetectorsBase O2::AnalysisDataModel O2::AnalysisCore O2::DetectorsVertexing O2::AnalysisTasksUtils
Expand Down
63 changes: 52 additions & 11 deletions Analysis/Tasks/PWGLF/NucleiSpectraTask.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,16 @@
#include "Framework/HistogramRegistry.h"

#include <TLorentzVector.h>
#include <TMath.h>
#include <TObjArray.h>

#include <cmath>

using namespace o2;
using namespace o2::framework;
using namespace o2::framework::expressions;

struct NucleiSpecraTask {
struct NucleiSpectraTask {

HistogramRegistry spectra{"spectra", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};

Expand All @@ -45,22 +47,26 @@ struct NucleiSpecraTask {

spectra.add("fCollZpos", "collision z position", HistType::kTH1F, {{600, -20., +20., "z position (cm)"}});
spectra.add("fKeepEvent", "skimming histogram", HistType::kTH1F, {{2, -0.5, +1.5, "true: keep event, false: reject event"}});
spectra.add("fTPCsignal", "Specific energy loss", HistType::kTH2F, {{600, -3., 3, "#it{p} (GeV/#it{c})"}, {1400, 0, 1400, "d#it{E} / d#it{X} (a. u.)"}});
spectra.add("fTPCsignal", "Specific energy loss", HistType::kTH2F, {{600, -6., 6., "#it{p} (GeV/#it{c})"}, {1400, 0, 1400, "d#it{E} / d#it{X} (a. u.)"}});
spectra.add("fTOFsignal", "TOF signal", HistType::kTH2F, {{600, -6., 6., "#it{p} (GeV/#it{c})"}, {500, 0.0, 1.0, "#beta (TOF)"}});
spectra.add("fTPCcounts", "n-sigma TPC", HistType::kTH2F, {ptAxis, {200, -100., +100., "n#sigma_{He} (a. u.)"}});
spectra.add("fDcaVsPt", "dca vs Pt", HistType::kTH2F, {ptAxis, {400, -0.2, 0.2, "dca"}});
spectra.add("fInvMass", "Invariant mass", HistType::kTH1F, {{600, 5.0, +15., "inv. mass GeV/c^{2}"}});
}

Configurable<float> yMin{"yMin", -0.8, "Maximum rapidity"};
Configurable<float> yMax{"yMax", 0.8, "Minimum rapidity"};

Configurable<float> cfgCutVertex{"cfgCutVertex", 10.0f, "Accepted z-vertex range"};
Configurable<float> cfgCutEta{"cfgCutEta", 0.8f, "Eta range for tracks"};
Configurable<float> nsigmacutLow{"nsigmacutLow", -30.0, "Value of the Nsigma cut"};
Configurable<float> nsigmacutHigh{"nsigmacutHigh", +3., "Value of the Nsigma cut"};
Configurable<float> nsigmacutLow{"nsigmacutLow", -10.0, "Value of the Nsigma cut"};
Configurable<float> nsigmacutHigh{"nsigmacutHigh", +10.0, "Value of the Nsigma cut"};

Filter collisionFilter = nabs(aod::collision::posZ) < cfgCutVertex;
Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::isGlobalTrack == (uint8_t) true);


using TrackCandidates = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::pidTPCFullHe, aod::pidTOFFullHe, aod::TrackSelection>>;
using TrackCandidates = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksExtended, aod::pidTPCFullHe, aod::pidTOFFullHe, aod::TrackSelection>>;

void process(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels>>::iterator const& collision, TrackCandidates const& tracks)
{
Expand All @@ -71,35 +77,70 @@ struct NucleiSpecraTask {
//
spectra.fill(HIST("fCollZpos"), collision.posZ());
//
std::vector<TLorentzVector> posTracks;
std::vector<TLorentzVector> negTracks;
//
for (auto track : tracks) { // start loop over tracks

TLorentzVector cutVector{};
cutVector.SetPtEtaPhiM(track.pt() * 2.0, track.eta(), track.phi(), constants::physics::MassHelium3);
if (cutVector.Rapidity() < yMin || cutVector.Rapidity() > yMax) {
TLorentzVector lorentzVector{};
lorentzVector.SetPtEtaPhiM(track.pt() * 2.0, track.eta(), track.phi(), constants::physics::MassHelium3);
if (lorentzVector.Rapidity() < yMin || lorentzVector.Rapidity() > yMax) {
continue;
}
//
// fill QA histograms
//
float nSigmaHe3 = track.tpcNSigmaHe();
nSigmaHe3 += 94.222101 * TMath::Exp(-0.905203 * track.tpcInnerParam()); // HERE I STOP: re-centre the dE/dx
// here i stop: re-center the dE/dx signal as we did all our life
//
spectra.fill(HIST("fTPCsignal"), track.tpcInnerParam() * track.sign(), track.tpcSignal());
spectra.fill(HIST("fTPCcounts"), track.tpcInnerParam(), track.tpcNSigmaHe());
spectra.fill(HIST("fTPCcounts"), track.tpcInnerParam(), nSigmaHe3);
//
// check offline-trigger (skimming) condidition
//
if (track.tpcNSigmaHe() > nsigmacutLow && track.tpcNSigmaHe() < nsigmacutHigh) {
if (nSigmaHe3 > nsigmacutLow && nSigmaHe3 < nsigmacutHigh) {
keepEvent = kTRUE;
if (track.sign() < 0) spectra.fill(HIST("fDcaVsPt"), track.pt(), track.dcaXY());
//
// store tracks for invariant mass calculation
//
if (track.sign() < 0)
negTracks.push_back(lorentzVector);
if (track.sign() > 0)
posTracks.push_back(lorentzVector);
//
// calculate beta
//
if (!track.hasTOF())
continue;
Float_t tofTime = track.tofSignal();
Float_t tofLength = track.length();
Float_t beta = tofLength / (TMath::C() * 1e-10 * tofTime);
spectra.fill(HIST("fTOFsignal"), track.tpcInnerParam() * track.sign(), beta);
}

} // end loop over tracks
//
// fill trigger (skimming) results
//
spectra.fill(HIST("fKeepEvent"), keepEvent);
//
// calculate invariant mass
//
for (Int_t iPos = 0; iPos < posTracks.size(); iPos++) {
TLorentzVector& vecPos = posTracks[iPos];
for (Int_t jNeg = 0; jNeg < negTracks.size(); jNeg++) {
TLorentzVector& vecNeg = negTracks[jNeg];
TLorentzVector vecMother = vecPos + vecNeg;
spectra.fill(HIST("fInvMass"), vecMother.M());
}
}
}
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
return WorkflowSpec{
adaptAnalysisTask<NucleiSpecraTask>(cfgc, TaskName{"nuclei-spectra"})};
adaptAnalysisTask<NucleiSpectraTask>(cfgc, TaskName{"nuclei-spectra"})};
}