Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
97 changes: 97 additions & 0 deletions PWGUD/Core/SGTrackSelector.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.
//
// \Single Gap Event Analyzer
// \author Sasha Bylinkin, alexander.bylinkin@gmail.com
// \since April 2023

#ifndef PWGUD_CORE_SGTRACKSELECTOR_H_
#define PWGUD_CORE_SGTRACKSELECTOR_H_

#include <vector>
#include "Framework/runDataProcessing.h"
#include "Framework/AnalysisTask.h"
#include "Framework/AnalysisDataModel.h"
#include "iostream"
#include "PWGUD/DataModel/UDTables.h"
#include "PWGUD/Core/SGSelector.h"
//#include "Common/DataModel/PIDResponse.h"
//#include "PWGUD/Core/RLhelper.h"
#include <TString.h>
#include "TLorentzVector.h"
using namespace std;
using namespace o2;
using namespace o2::aod;
using namespace o2::framework;
using namespace o2::framework::expressions;
#define mpion 0.1396
#define mkaon 0.4937
#define mproton 0.9383
template <typename T>
int trackselector(const T& track, const std::vector<float>& params)
{
// Ensure the params vector contains all the necessary parameters
if (params.size() < 7) {
throw std::runtime_error("Insufficient parameters provided");
}
TLorentzVector a;
a.SetXYZM(track.px(), track.py(), track.pz(), mpion);
if (params[0] == 1 && !track.isPVContributor())
return 0;
if (std::abs(track.dcaZ()) > params[1])
return 0;
if (!params[2]) {
if (std::abs(track.dcaXY()) > .0105 + .035 / pow(a.Pt(), 1.1))
return 0;
} else {
if (std::abs(track.dcaXY()) > params[2])
return 0;
}
if (track.tpcChi2NCl() > params[3])
return 0;
if (track.tpcNClsFindable() < params[4])
return 0;
if (track.itsChi2NCl() > params[5])
return 0;
if (std::abs(a.Eta()) > params[6])
return 0;
return 1;
}
template <typename T>
int trackpid(const T& track, bool use_tof)
{
int pid = 0;
float pi, ka, pr;
float tpi, tka, tpr;
pi = std::abs(track.tpcNSigmaPi());
ka = std::abs(track.tpcNSigmaKa());
pr = std::abs(track.tpcNSigmaPr());
if (pi < 1. && pi < ka && pi < pr)
pid = 1;
else if (ka < 1. && ka < pi && ka < pr)
pid = 2;
else if (pr < 1. && pr < pi && pr < ka)
pid = 3;
if (use_tof && track.tofChi2() > -1) {
tpi = std::abs(track.tofNSigmaPi());
tka = std::abs(track.tofNSigmaKa());
tpr = std::abs(track.tofNSigmaPr());
if (std::sqrt(pi * pi + tpi * tpi) < 2 && std::sqrt(pi * pi + tpi * tpi) < std::sqrt(ka * ka + tka * tka) && std::sqrt(pi * pi + tpi * tpi) < std::sqrt(pr * pr + tpr * tpr))
pid = 1;
else if (std::sqrt(ka * ka + tka * tka) < 2 && std::sqrt(pi * pi + tpi * tpi) > std::sqrt(ka * ka + tka * tka) && std::sqrt(ka * ka + tka * tka) < std::sqrt(pr * pr + tpr * tpr))
pid = 2;
else if (std::sqrt(pr * pr + tpr * tpr) < 2 && std::sqrt(pr * pr + tpr * tpr) < std::sqrt(ka * ka + tka * tka) && std::sqrt(pi * pi + tpi * tpi) > std::sqrt(pr * pr + tpr * tpr))
pid = 3;
}
return pid;
}

#endif // PWGUD_CORE_SGTRACKSELECTOR_H_
60 changes: 58 additions & 2 deletions PWGUD/Tasks/sgD0Analyzer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#include "PWGUD/DataModel/UDTables.h"
#include "PWGUD/Core/SGSelector.h"
#include "Common/DataModel/PIDResponse.h"
#include "PWGUD/Tasks/SGTrackSelector.h"
#include "PWGUD/Core/SGTrackSelector.h"
#include <TString.h>
#include "TLorentzVector.h"
using namespace std;
Expand Down Expand Up @@ -82,7 +82,20 @@ struct SGD0Analyzer {
{"ss_KPi_invm_2", "K#pi Mass (GeV/c^2); Entries", {HistType::kTH1F, {{5000, 0, 10}}}},
{"os_Ntr_KPi_invm_0", "N tracks vs K#pi Mass", {HistType::kTH2F, {{48, 1.5, 49.5}, {750, .7, 2.2}}}},
{"os_Ntr_KPi_invm_1", "N tracks vs K#pi Mass", {HistType::kTH2F, {{48, 1.5, 49.5}, {750, .7, 2.2}}}},
{"os_Ntr_KPi_invm_2", "N tracks vs K#pi Mass", {HistType::kTH2F, {{48, 1.5, 49.5}, {750, .7, 2.2}}}}}};
{"os_Ntr_KPi_invm_2", "N tracks vs K#pi Mass", {HistType::kTH2F, {{48, 1.5, 49.5}, {750, .7, 2.2}}}},
{"D0_FT0A", "FIT Amplitude", {HistType::kTH1F, {{500, 0, 1000}}}},
{"D0_FT0C", "FIT Amplitude", {HistType::kTH1F, {{500, 0, 1000}}}},
{"D0_FV0A", "FIT Amplitude", {HistType::kTH1F, {{500, 0, 1000}}}},
{"D0_FDDA", "FIT Amplitude", {HistType::kTH1F, {{500, 0, 1000}}}},
{"D0_FDDC", "FIT Amplitude", {HistType::kTH1F, {{500, 0, 1000}}}},
{"D0_ZNA", "ZDC Energy", {HistType::kTH1F, {{500, 0, 200}}}},
{"D0_ZNC", "ZDC Energy", {HistType::kTH1F, {{500, 0, 200}}}},
{"D0_Ntr_0", "Tracks", {HistType::kTH1F, {{100, 0.5, 100.5}}}},
{"D0_Ntr_1", "Tracks", {HistType::kTH1F, {{100, 0.5, 100.5}}}},
{"D0_Ntr_2", "Tracks", {HistType::kTH1F, {{100, 0.5, 100.5}}}},
{"D0_NtrPV_0", "Tracks", {HistType::kTH1F, {{50, 0.5, 50.5}}}},
{"D0_NtrPV_1", "Tracks", {HistType::kTH1F, {{50, 0.5, 50.5}}}},
{"D0_NtrPV_2", "Tracks", {HistType::kTH1F, {{50, 0.5, 50.5}}}}}};
using udtracks = soa::Join<aod::UDTracks, aod::UDTracksExtra, aod::UDTracksPID>;
using udtracksfull = soa::Join<aod::UDTracks, aod::UDTracksPID, aod::UDTracksExtra, aod::UDTracksFlags, aod::UDTracksDCA>;
using UDCollisionsFull = soa::Join<aod::UDCollisions, aod::SGCollisions, aod::UDCollisionsSels, aod::UDZdcsReduced>; //
Expand All @@ -107,6 +120,11 @@ struct SGD0Analyzer {
registry.fill(HIST("GapSide"), gapSide);
registry.fill(HIST("TrueGapSide"), truegapSide);
gapSide = truegapSide;
int pvtracks = 0;
for (auto& t0 : tracks) {
if (trackselector(t0, parameters) && t0.isPVContributor())
pvtracks++;
}
// Look for D0 and D0bar
if (tracks.size() < Ntr_min || tracks.size() > Ntr_max)
return;
Expand All @@ -129,18 +147,37 @@ struct SGD0Analyzer {
registry.fill(HIST("os_KPi_eTa_0"), v01.Eta());
registry.fill(HIST("os_KPi_invm_0"), v01.M());
registry.fill(HIST("os_Ntr_KPi_invm_0"), tracks.size(), v01.M());
if (v01.M() > 1.8 && v01.M() < 1.9) {
registry.fill(HIST("D0_Ntr_0"), tracks.size());
registry.fill(HIST("D0_NtrPV_0"), pvtracks);
}
}
if (gapSide == 1) {
registry.fill(HIST("os_KPi_pT_1"), v01.Pt());
registry.fill(HIST("os_KPi_eTa_1"), v01.Eta());
registry.fill(HIST("os_KPi_invm_1"), v01.M());
registry.fill(HIST("os_Ntr_KPi_invm_1"), tracks.size(), v01.M());
if (v01.M() > 1.8 && v01.M() < 1.9) {
registry.fill(HIST("D0_Ntr_1"), tracks.size());
registry.fill(HIST("D0_NtrPV_1"), pvtracks);
}
}
if (gapSide == 2) {
registry.fill(HIST("os_KPi_pT_2"), v01.Pt());
registry.fill(HIST("os_KPi_eTa_2"), v01.Eta());
registry.fill(HIST("os_KPi_invm_2"), v01.M());
registry.fill(HIST("os_Ntr_KPi_invm_2"), tracks.size(), v01.M());
if (v01.M() > 1.8 && v01.M() < 1.9) {
registry.fill(HIST("D0_Ntr_2"), tracks.size());
registry.fill(HIST("D0_NtrPV_2"), pvtracks);
registry.fill(HIST("D0_FT0A"), collision.totalFT0AmplitudeA());
registry.fill(HIST("D0_FT0C"), collision.totalFT0AmplitudeC());
registry.fill(HIST("D0_FV0A"), collision.totalFV0AmplitudeA());
registry.fill(HIST("D0_FDDA"), collision.totalFDDAmplitudeA());
registry.fill(HIST("D0_FDDC"), collision.totalFDDAmplitudeC());
registry.fill(HIST("D0_ZNA"), collision.energyCommonZNA());
registry.fill(HIST("D0_ZNC"), collision.energyCommonZNC());
}
}
} else if (t0.sign() == t1.sign()) {
registry.fill(HIST("ss_KPi_pT"), v01.Pt());
Expand Down Expand Up @@ -177,18 +214,37 @@ struct SGD0Analyzer {
registry.fill(HIST("os_KPi_eTa_0"), v01.Eta());
registry.fill(HIST("os_KPi_invm_0"), v01.M());
registry.fill(HIST("os_Ntr_KPi_invm_0"), tracks.size(), v01.M());
if (v01.M() > 1.8 && v01.M() < 1.9) {
registry.fill(HIST("D0_Ntr_0"), tracks.size());
registry.fill(HIST("D0_NtrPV_0"), pvtracks);
}
}
if (gapSide == 1) {
registry.fill(HIST("os_KPi_pT_1"), v01.Pt());
registry.fill(HIST("os_KPi_eTa_1"), v01.Eta());
registry.fill(HIST("os_KPi_invm_1"), v01.M());
registry.fill(HIST("os_Ntr_KPi_invm_1"), tracks.size(), v01.M());
if (v01.M() > 1.8 && v01.M() < 1.9) {
registry.fill(HIST("D0_Ntr_1"), tracks.size());
registry.fill(HIST("D0_NtrPV_1"), pvtracks);
}
}
if (gapSide == 2) {
registry.fill(HIST("os_KPi_pT_2"), v01.Pt());
registry.fill(HIST("os_KPi_eTa_2"), v01.Eta());
registry.fill(HIST("os_KPi_invm_2"), v01.M());
registry.fill(HIST("os_Ntr_KPi_invm_2"), tracks.size(), v01.M());
if (v01.M() > 1.8 && v01.M() < 1.9) {
registry.fill(HIST("D0_Ntr_2"), tracks.size());
registry.fill(HIST("D0_NtrPV_2"), pvtracks);
registry.fill(HIST("D0_FT0A"), collision.totalFT0AmplitudeA());
registry.fill(HIST("D0_FT0C"), collision.totalFT0AmplitudeC());
registry.fill(HIST("D0_FV0A"), collision.totalFV0AmplitudeA());
registry.fill(HIST("D0_FDDA"), collision.totalFDDAmplitudeA());
registry.fill(HIST("D0_FDDC"), collision.totalFDDAmplitudeC());
registry.fill(HIST("D0_ZNA"), collision.energyCommonZNA());
registry.fill(HIST("D0_ZNC"), collision.energyCommonZNC());
}
}
} else if (t0.sign() == t1.sign()) {
registry.fill(HIST("ss_KPi_pT"), v01.Pt());
Expand Down
2 changes: 1 addition & 1 deletion PWGUD/Tasks/sgFITAnalyzer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#include "PWGUD/DataModel/UDTables.h"
#include "PWGUD/Core/UDHelpers.h"
#include "PWGUD/Core/SGSelector.h"
#include "PWGUD/Tasks/SGTrackSelector.h"
#include "PWGUD/Core/SGTrackSelector.h"
#define mpion 0.1396
#define mmuon 0.1057
#define mkaon 0.4937
Expand Down
2 changes: 1 addition & 1 deletion PWGUD/Tasks/sgFourPiAnalyzer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#include "iostream"
#include "PWGUD/DataModel/UDTables.h"
#include "PWGUD/Core/SGSelector.h"
#include "PWGUD/Tasks/SGTrackSelector.h"
#include "PWGUD/Core/SGTrackSelector.h"
#include "Common/DataModel/PIDResponse.h"
#include "Framework/ASoA.h"
#include "Framework/DataTypes.h"
Expand Down
6 changes: 3 additions & 3 deletions PWGUD/Tasks/sgSpectraAnalyzer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#include "iostream"
#include "PWGUD/DataModel/UDTables.h"
#include "PWGUD/Core/SGSelector.h"
#include "PWGUD/Tasks/SGTrackSelector.h"
#include "PWGUD/Core/SGTrackSelector.h"
//#include "Common/DataModel/PIDResponse.h"
//#include "PWGUD/Core/RLhelper.h"
#include <TString.h>
Expand All @@ -40,7 +40,6 @@ struct SGSpectraAnalyzer {
Configurable<float> FDDA_cut{"FDDA", 10000., "FDDA threshold"};
Configurable<float> FDDC_cut{"FDDC", 10000., "FDDC threshold"};
Configurable<float> ZDC_cut{"ZDC", 10., "ZDC threshold"};
Configurable<float> eta_cut{"Eta", 0.9, "Eta cut"};
Configurable<bool> use_tof{"Use_TOF", true, "TOF PID"};
// Track Selections
Configurable<float> PV_cut{"PV_cut", 1.0, "Use Only PV tracks"};
Expand All @@ -49,6 +48,7 @@ struct SGSpectraAnalyzer {
Configurable<float> tpcChi2_cut{"tpcChi2_cut", 4, "Max tpcChi2NCl"};
Configurable<float> tpcNClsFindable_cut{"tpcNClsFindable_cut", 70, "Min tpcNClsFindable"};
Configurable<float> itsChi2_cut{"itsChi2_cut", 36, "Max itsChi2NCl"};
Configurable<float> eta_cut{"Eta", 0.9, "Eta cut"};
HistogramRegistry registry{
"registry",
{// Pion histograms for each eta bin and gapSide
Expand Down Expand Up @@ -199,7 +199,7 @@ struct SGSpectraAnalyzer {
sum.SetXYZM(0, 0, 0, 0);
int gapSide = collision.gapSide();
float FIT_cut[5] = {FV0_cut, FT0A_cut, FT0C_cut, FDDA_cut, FDDC_cut};
std::vector<float> parameters = {PV_cut, dcaZ_cut, dcaXY_cut, tpcChi2_cut, tpcNClsFindable_cut, itsChi2_cut};
std::vector<float> parameters = {PV_cut, dcaZ_cut, dcaXY_cut, tpcChi2_cut, tpcNClsFindable_cut, itsChi2_cut, eta_cut};
int truegapSide = sgSelector.trueGap(collision, FIT_cut[0], FIT_cut[1], FIT_cut[3], ZDC_cut);
gapSide = truegapSide;
if (gapSide < 0 || gapSide > 2)
Expand Down
2 changes: 1 addition & 1 deletion PWGUD/Tasks/sgTwoPiAnalyzer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#include "iostream"
#include "PWGUD/DataModel/UDTables.h"
#include "PWGUD/Core/SGSelector.h"
#include "PWGUD/Tasks/SGTrackSelector.h"
#include "PWGUD/Core/SGTrackSelector.h"
#include "Common/DataModel/PIDResponse.h"
#include "Framework/ASoA.h"
#include "Framework/DataTypes.h"
Expand Down