Skip to content

Commit b344b79

Browse files
committed
Update in PID tasks and handlers of PID param
Updates to TOF and TPC tasks Update TPC qa plots - Using log binning for momentum - Using TPC momentum instead of momentum at vertex Extend QA plots for TOF PID - add event wide info - using different tasks for different observables Remove verbosity in TOF PID table filler Add TPC with TOF plots - Add log axes Change TOF task names Add TPC spectra task Remove useless verbosity Add param setter from the index Add possibility to read param from file in TPC param handler
1 parent 9e810d7 commit b344b79

8 files changed

Lines changed: 376 additions & 123 deletions

File tree

Analysis/DataModel/include/PID/BetheBloch.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ namespace o2::pid::tpc
2727
class BetheBloch : public Parametrization
2828
{
2929
public:
30-
BetheBloch() : Parametrization("BetheBloch", 7) { Printf("%s", fName.Data()); };
30+
BetheBloch() : Parametrization("BetheBloch", 7){};
3131
~BetheBloch() override = default;
3232
float operator()(const float* x) const override
3333
{

Analysis/DataModel/include/PID/TOFReso.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ namespace o2::pid::tof
2929
class TOFReso : public Parametrization
3030
{
3131
public:
32-
TOFReso() : Parametrization("TOFReso", 5) { Printf("%s", fName.Data()); };
32+
TOFReso() : Parametrization("TOFReso", 5){};
3333
~TOFReso() override = default;
3434
float operator()(const float* x) const override
3535
{

Analysis/DataModel/include/PID/TPCReso.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ namespace o2::pid::tpc
2626
class TPCReso : public Parametrization
2727
{
2828
public:
29-
TPCReso() : Parametrization("TPCReso", 2) { Printf("%s", fName.Data()); };
29+
TPCReso() : Parametrization("TPCReso", 2){};
3030
~TPCReso() override = default;
3131
float operator()(const float* x) const override
3232
{

Analysis/DataModel/include/PIDBase/ParamBase.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ class Parametrization : public TNamed
108108
/// Printer for parameters
109109
void PrintParametrization() const;
110110

111+
/// Setter for the parameter at position iparam
112+
/// \param iparam index in the array of the parameters
113+
/// \param value value of the parameter at position iparam
114+
void SetParameter(const unsigned int iparam, const pidvar_t value) { mParameters.SetParameter(iparam, value); }
115+
111116
/// Setter for the parameter, using an array
112117
/// \param params array with parameters
113118
void SetParameters(const std::vector<pidvar_t> params) { mParameters.SetParameters(params); }

Analysis/DataModel/src/handleParamTPCBetheBloch.cxx

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,9 @@ bool initOptionsAndParse(bpo::options_description& options, int argc, char* argv
3131
"url,u", bpo::value<std::string>()->default_value("http://ccdb-test.cern.ch:8080"), "URL of the CCDB database")(
3232
"start,s", bpo::value<long>()->default_value(0), "Start timestamp of object validity")(
3333
"stop,S", bpo::value<long>()->default_value(4108971600000), "Stop timestamp of object validity")(
34-
"delete_previous,d", bpo::value<int>()->default_value(0), "Flag to delete previous versions of converter objects in the CCDB before uploading the new one so as to avoid proliferation on CCDB")(
35-
"file,f", bpo::value<std::string>()->default_value(""), "Option to save parametrization to file instead of uploading to ccdb")(
34+
"delete-previous,d", bpo::value<int>()->default_value(0), "Flag to delete previous versions of converter objects in the CCDB before uploading the new one so as to avoid proliferation on CCDB")(
35+
"save-to-file,f", bpo::value<std::string>()->default_value(""), "Option to save parametrization to file instead of uploading to ccdb")(
36+
"read-from-file", bpo::value<std::string>()->default_value(""), "Option to get parametrization from a file")(
3637
"mode,m", bpo::value<unsigned int>()->default_value(0), "Working mode: 0 push 1 pull and test")(
3738
"verbose,v", bpo::value<int>()->default_value(0), "Verbose level 0, 1")(
3839
"help,h", "Produce help message.");
@@ -75,35 +76,52 @@ int main(int argc, char* argv[])
7576
return 1;
7677
}
7778
if (mode == 0) { // Push mode
78-
const std::vector<float> bbparams = {0.0320981, 19.9768, 2.52666e-16, 2.72123, 6.08092, 50.f, 2.3};
79-
const std::vector<float> resoparams = {0.07, 0.0};
80-
BetheBloch tpc;
81-
tpc.SetParameters(bbparams);
82-
TPCReso reso;
83-
reso.SetParameters(resoparams);
84-
const std::string fname = vm["file"].as<std::string>();
79+
BetheBloch* bb = nullptr;
80+
TPCReso* reso = nullptr;
81+
const std::string input_file_name = vm["read-from-file"].as<std::string>();
82+
83+
if (!input_file_name.empty()) {
84+
TFile f(input_file_name.data(), "READ");
85+
if (!f.IsOpen()) {
86+
LOG(WARNING) << "Input file " << input_file_name << " is not reacheable, cannot get param from file";
87+
}
88+
f.GetObject("BetheBloch", bb);
89+
f.GetObject("TPCReso", reso);
90+
f.Close();
91+
}
92+
if (!bb) {
93+
bb = new BetheBloch();
94+
const std::vector<float> bbparams = {0.0320981, 19.9768, 2.52666e-16, 2.72123, 6.08092, 50.f, 2.3};
95+
bb->SetParameters(bbparams);
96+
}
97+
if (!reso) {
98+
reso = new TPCReso();
99+
const std::vector<float> resoparams = {0.07, 0.0};
100+
reso->SetParameters(resoparams);
101+
}
102+
const std::string fname = vm["save-to-file"].as<std::string>();
85103
if (!fname.empty()) { // Saving it to file
86104
TFile f(fname.data(), "RECREATE");
87-
tpc.Write();
88-
reso.Write();
105+
bb->Write();
106+
reso->Write();
89107
f.ls();
90108
f.Close();
91109
} else { // Saving it to CCDB
92110

93111
long start = vm["start"].as<long>();
94112
long stop = vm["stop"].as<long>();
95113

96-
if (vm["delete_previous"].as<int>()) {
114+
if (vm["delete-previous"].as<int>()) {
97115
api.truncate(path);
98116
}
99-
api.storeAsTFileAny(&tpc, path + "/BetheBloch", metadata, start, stop);
100-
api.storeAsTFileAny(&reso, path + "/TPCReso", metadata, start, stop);
117+
api.storeAsTFileAny(bb, path + "/BetheBloch", metadata, start, stop);
118+
api.storeAsTFileAny(reso, path + "/TPCReso", metadata, start, stop);
101119
}
102120
} else { // Pull and test mode
103121
const float x[2] = {1, 1};
104-
BetheBloch* tpc = api.retrieveFromTFileAny<BetheBloch>(path + "/BetheBloch", metadata, -1, headers);
105-
tpc->PrintParametrization();
106-
LOG(INFO) << "BetheBloch " << tpc->operator()(x);
122+
BetheBloch* bb = api.retrieveFromTFileAny<BetheBloch>(path + "/BetheBloch", metadata, -1, headers);
123+
bb->PrintParametrization();
124+
LOG(INFO) << "BetheBloch " << bb->operator()(x);
107125
TPCReso* reso = api.retrieveFromTFileAny<TPCReso>(path + "/TPCReso", metadata, -1, headers);
108126
reso->PrintParametrization();
109127
LOG(INFO) << "TPCReso " << reso->operator()(x);

Analysis/Tasks/pidTOF.cxx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ struct pidTOFTask {
5555

5656
void process(aod::Collision const& collision, soa::Join<aod::Tracks, aod::TracksExtra> const& tracks)
5757
{
58-
LOGF(info, "Tracks for collision: %d", tracks.size());
5958
tof::EventTime evt = tof::EventTime();
6059
evt.SetEvTime(0, collision.collisionTime());
6160
evt.SetEvTimeReso(0, collision.collisionTimeRes());

Analysis/Tasks/spectraTOF.cxx

Lines changed: 120 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -28,80 +28,133 @@ using namespace o2;
2828
using namespace o2::framework;
2929
using namespace o2::framework::expressions;
3030

31-
struct TOFPIDQATask {
31+
#define TRACKSELECTION \
32+
UChar_t clustermap = i.itsClusterMap(); \
33+
bool issel = (i.tpcNClsFindable() > 70) && (i.flags() & 0x4) && (TESTBIT(clustermap, 0) || TESTBIT(clustermap, 1)); \
34+
issel = issel && (i.flags() & 0x2000); \
35+
issel = issel && (i.flags() & 0x80000000); \
36+
if (!issel) \
37+
continue;
38+
39+
// #define TRACKSELECTION 1;
40+
41+
struct TOFQATask {
42+
// Event quantities
43+
DOTH1F(hvtxz, ";Vertex Z position;Events", 300, -15, 15);
44+
DOTH1F(hevtime, ";Event time (ns);Tracks", 100, -2, 2);
3245
// Track quantities
33-
DOTH1F(hp_NoCut, ";#it{p} (GeV/#it{c});Tracks", 100, 0, 20);
34-
DOTH1F(hp_TrkCut, ";#it{p} (GeV/#it{c});Tracks", 100, 0, 20);
35-
DOTH1F(hp_TOFCut, ";#it{p} (GeV/#it{c});Tracks", 100, 0, 20);
36-
// TOF Quantities
37-
DOTH1F(hlength_NoCut, ";Track Length (cm);Tracks", 100, 0, 1000);
38-
DOTH1F(htime_NoCut, ";TOF Time (ns);Tracks", 1000, 0, 600);
39-
DOTH1F(hevtime_NoCut, ";Event time (ns);Tracks", 100, -2, 2);
40-
DOTH2F(hp_pTOFexp_NoCut, ";#it{p} (GeV/#it{c});#it{p}_{Exp TOF} (GeV/#it{c});Tracks", 100, 0, 20, 100, 0, 20);
41-
// T-Texp
42-
DOTH2F(htimediffEl_NoCut, ";#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp e});Tracks", 100, 0, 5, 100, -1000, 1000);
43-
DOTH2F(htimediffMu_NoCut, ";#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp #mu});Tracks", 100, 0, 5, 100, -1000, 1000);
44-
DOTH2F(htimediffPi_NoCut, ";#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp #pi});Tracks", 100, 0, 5, 100, -1000, 1000);
45-
DOTH2F(htimediffKa_NoCut, ";#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp K});Tracks", 100, 0, 5, 100, -1000, 1000);
46-
DOTH2F(htimediffPr_NoCut, ";#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp p});Tracks", 100, 0, 5, 100, -1000, 1000);
47-
// NSigma
48-
DOTH2F(hnsigmaEl_NoCut, ";#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp e})/N_{sigma e};Tracks", 100, 0, 5, 100, -10, 10);
49-
DOTH2F(hnsigmaMu_NoCut, ";#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp #mu})/N_{sigma #mu};Tracks", 100, 0, 5, 100, -10, 10);
50-
DOTH2F(hnsigmaPi_NoCut, ";#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp #pi})/N_{sigma #pi};Tracks", 100, 0, 5, 100, -10, 10);
51-
DOTH2F(hnsigmaKa_NoCut, ";#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp K})/N_{sigma K};Tracks", 100, 0, 5, 100, -10, 10);
52-
DOTH2F(hnsigmaPr_NoCut, ";#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp p})/N_{sigma p};Tracks", 100, 0, 5, 100, -10, 10);
46+
DOTH1F(heta, ";#eta;Tracks", 100, -1, 1);
47+
DOTH1F(hp, ";#it{p} (GeV/#it{c});Tracks", 100, 0, 20);
48+
DOTH1F(hpt, ";#it{p}_{T} (GeV/#it{c});Tracks", 100, 0, 20);
49+
DOTH1F(hlength, ";Track Length (cm);Tracks", 100, 0, 1000);
50+
DOTH1F(htime, ";TOF Time (ns);Tracks", 1000, 0, 600);
5351
// Beta
5452
DOTH2F(hp_beta, ";#it{p} (GeV/#it{c});TOF #beta;Tracks", 100, 0, 20, 100, 0, 2);
5553

5654
void process(aod::Collision const& collision, soa::Join<aod::Tracks, aod::TracksExtra, aod::pidRespTOF, aod::pidRespTOFbeta> const& tracks)
5755
{
56+
hvtxz->Fill(collision.posZ());
5857
for (auto i : tracks) {
59-
hp_NoCut->Fill(i.p());
6058
// Track selection
61-
UChar_t clustermap = i.itsClusterMap();
62-
bool issel = (i.tpcNClsFindable() > 70) && (i.flags() & 0x4) && (TESTBIT(clustermap, 0) || TESTBIT(clustermap, 1));
63-
if (issel)
64-
hp_TrkCut->Fill(i.p());
65-
issel = issel && (i.flags() & 0x2000); //kTOFout
66-
issel = issel && (i.flags() & 0x80000000); //kTIME
67-
if (issel)
68-
hp_TOFCut->Fill(i.p());
69-
hp_pTOFexp_NoCut->Fill(i.p(), i.tofExpMom() / (TMath::C() * 1.0e2f * 1.0e-12f));
70-
//
71-
hlength_NoCut->Fill(i.length());
72-
htime_NoCut->Fill(i.tofSignal() / 1000);
59+
TRACKSELECTION;
7360
//
74-
hevtime_NoCut->Fill(collision.collisionTime() / 1000);
75-
// hevtime_NoCut->Fill(collision.collisionTime0() / 1000);
61+
hevtime->Fill(collision.collisionTime() / 1000);
62+
// hevtime->Fill(collision.collisionTime0() / 1000);
63+
const float psq = sqrt(i.px() * i.px() + i.py() * i.py() + i.pz() * i.pz());
64+
heta->Fill(i.eta());
65+
hp->Fill(i.p());
66+
hpt->Fill(i.pt());
7667
//
77-
htimediffEl_NoCut->Fill(i.p(), i.tofSignal() - collision.collisionTime() - i.tofExpSignalEl());
78-
htimediffMu_NoCut->Fill(i.p(), i.tofSignal() - collision.collisionTime() - i.tofExpSignalMu());
79-
htimediffPi_NoCut->Fill(i.p(), i.tofSignal() - collision.collisionTime() - i.tofExpSignalPi());
80-
htimediffKa_NoCut->Fill(i.p(), i.tofSignal() - collision.collisionTime() - i.tofExpSignalKa());
81-
htimediffPr_NoCut->Fill(i.p(), i.tofSignal() - collision.collisionTime() - i.tofExpSignalPr());
82-
//
83-
hnsigmaEl_NoCut->Fill(i.p(), i.tofNSigmaEl());
84-
hnsigmaMu_NoCut->Fill(i.p(), i.tofNSigmaMu());
85-
hnsigmaPi_NoCut->Fill(i.p(), i.tofNSigmaPi());
86-
hnsigmaKa_NoCut->Fill(i.p(), i.tofNSigmaKa());
87-
hnsigmaPr_NoCut->Fill(i.p(), i.tofNSigmaPr());
68+
hlength->Fill(i.length());
69+
htime->Fill(i.tofSignal() / 1000);
8870
// Beta
8971
hp_beta->Fill(i.p(), i.beta());
9072
}
9173
}
9274
};
9375

94-
struct SpectraTask {
76+
struct TOFExpTimeQATask {
77+
// T-Texp
78+
#define TIT(part) Form(";#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp %s});Tracks", part)
79+
DOTH2F(htimediffEl, TIT("e"), 100, 0, 5, 100, -1000, 1000);
80+
DOTH2F(htimediffMu, TIT("#mu"), 100, 0, 5, 100, -1000, 1000);
81+
DOTH2F(htimediffPi, TIT("#pi"), 100, 0, 5, 100, -1000, 1000);
82+
DOTH2F(htimediffKa, TIT("K"), 100, 0, 5, 100, -1000, 1000);
83+
DOTH2F(htimediffPr, TIT("p"), 100, 0, 5, 100, -1000, 1000);
84+
DOTH2F(htimediffDe, TIT("d"), 100, 0, 5, 100, -1000, 1000);
85+
DOTH2F(htimediffTr, TIT("t"), 100, 0, 5, 100, -1000, 1000);
86+
DOTH2F(htimediffHe, TIT("^{3}He"), 100, 0, 5, 100, -1000, 1000);
87+
DOTH2F(htimediffAl, TIT("#alpha"), 100, 0, 5, 100, -1000, 1000);
88+
#undef TIT
89+
90+
void process(aod::Collision const& collision, soa::Join<aod::Tracks, aod::TracksExtra, aod::pidRespTOF, aod::pidRespTOFbeta> const& tracks)
91+
{
92+
for (auto i : tracks) {
93+
// Track selection
94+
TRACKSELECTION;
95+
//
96+
const float tof = i.tofSignal() - collision.collisionTime();
97+
htimediffEl->Fill(i.p(), tof - i.tofExpSignalEl());
98+
htimediffMu->Fill(i.p(), tof - i.tofExpSignalMu());
99+
htimediffPi->Fill(i.p(), tof - i.tofExpSignalPi());
100+
htimediffKa->Fill(i.p(), tof - i.tofExpSignalKa());
101+
htimediffPr->Fill(i.p(), tof - i.tofExpSignalPr());
102+
htimediffDe->Fill(i.p(), tof - i.tofExpSignalDe());
103+
htimediffTr->Fill(i.p(), tof - i.tofExpSignalTr());
104+
htimediffHe->Fill(i.p(), tof - i.tofExpSignalHe());
105+
htimediffAl->Fill(i.p(), tof - i.tofExpSignalAl());
106+
}
107+
}
108+
};
109+
110+
struct TOFNSigmaQATask {
111+
// NSigma
112+
#define TIT(part) Form(";#it{p} (GeV/#it{c});(t-t_{evt}-t_{exp %s})/N_{sigma %s};Tracks", part, part)
113+
DOTH2F(hnsigmaEl, TIT("e"), 100, 0, 5, 100, -10, 10);
114+
DOTH2F(hnsigmaMu, TIT("#mu"), 100, 0, 5, 100, -10, 10);
115+
DOTH2F(hnsigmaPi, TIT("#pi"), 100, 0, 5, 100, -10, 10);
116+
DOTH2F(hnsigmaKa, TIT("K"), 100, 0, 5, 100, -10, 10);
117+
DOTH2F(hnsigmaPr, TIT("p"), 100, 0, 5, 100, -10, 10);
118+
DOTH2F(hnsigmaDe, TIT("d"), 100, 0, 5, 100, -10, 10);
119+
DOTH2F(hnsigmaTr, TIT("t"), 100, 0, 5, 100, -10, 10);
120+
DOTH2F(hnsigmaHe, TIT("^{3}He"), 100, 0, 5, 100, -10, 10);
121+
DOTH2F(hnsigmaAl, TIT("#alpha"), 100, 0, 5, 100, -10, 10);
122+
#undef TIT
123+
124+
void process(aod::Collision const& collision, soa::Join<aod::Tracks, aod::TracksExtra, aod::pidRespTOF, aod::pidRespTOFbeta> const& tracks)
125+
{
126+
for (auto i : tracks) {
127+
// Track selection
128+
TRACKSELECTION;
129+
//
130+
hnsigmaEl->Fill(i.p(), i.tofNSigmaEl());
131+
hnsigmaMu->Fill(i.p(), i.tofNSigmaMu());
132+
hnsigmaPi->Fill(i.p(), i.tofNSigmaPi());
133+
hnsigmaKa->Fill(i.p(), i.tofNSigmaKa());
134+
hnsigmaPr->Fill(i.p(), i.tofNSigmaPr());
135+
hnsigmaDe->Fill(i.p(), i.tofNSigmaDe());
136+
hnsigmaTr->Fill(i.p(), i.tofNSigmaTr());
137+
hnsigmaHe->Fill(i.p(), i.tofNSigmaHe());
138+
hnsigmaAl->Fill(i.p(), i.tofNSigmaAl());
139+
}
140+
}
141+
};
142+
143+
struct TOFSpectraTask {
95144
// Pt
96-
DOTH1F(hpt_El, ";#it{p}_{T} (GeV/#it{c});Tracks", 100, 0, 20);
97-
DOTH1F(hpt_Pi, ";#it{p}_{T} (GeV/#it{c});Tracks", 100, 0, 20);
98-
DOTH1F(hpt_Ka, ";#it{p}_{T} (GeV/#it{c});Tracks", 100, 0, 20);
99-
DOTH1F(hpt_Pr, ";#it{p}_{T} (GeV/#it{c});Tracks", 100, 0, 20);
145+
#define TIT ";#it{p}_{T} (GeV/#it{c});Tracks"
146+
DOTH1F(hpt_El, TIT, 100, 0, 20);
147+
DOTH1F(hpt_Pi, TIT, 100, 0, 20);
148+
DOTH1F(hpt_Ka, TIT, 100, 0, 20);
149+
DOTH1F(hpt_Pr, TIT, 100, 0, 20);
150+
#undef TIT
100151
// P
101-
DOTH1F(hp_El, ";#it{p} (GeV/#it{c});Tracks", 100, 0, 20);
102-
DOTH1F(hp_Pi, ";#it{p} (GeV/#it{c});Tracks", 100, 0, 20);
103-
DOTH1F(hp_Ka, ";#it{p} (GeV/#it{c});Tracks", 100, 0, 20);
104-
DOTH1F(hp_Pr, ";#it{p} (GeV/#it{c});Tracks", 100, 0, 20);
152+
#define TIT ";#it{p} (GeV/#it{c});Tracks"
153+
DOTH1F(hp_El, TIT, 100, 0, 20);
154+
DOTH1F(hp_Pi, TIT, 100, 0, 20);
155+
DOTH1F(hp_Ka, TIT, 100, 0, 20);
156+
DOTH1F(hp_Pr, TIT, 100, 0, 20);
157+
#undef TIT
105158
//
106159
DOTH1F(hlength_El, ";Track Length (cm);Tracks", 100, 0, 1000);
107160
DOTH1F(htime_El, ";TOF Time (ns);Tracks", 1000, 0, 600);
@@ -115,15 +168,12 @@ struct SpectraTask {
115168
void process(soa::Join<aod::Tracks, aod::TracksExtra, aod::pidRespTOF, aod::pidRespTOFbeta> const& tracks)
116169
{
117170
for (auto i : tracks) {
118-
UChar_t clustermap = i.itsClusterMap();
119-
bool issel = (i.tpcNClsFindable() > 70) && (i.flags() & 0x4) && (TESTBIT(clustermap, 0) || TESTBIT(clustermap, 1));
120-
issel = issel && (i.flags() & 0x2000); //kTOFout
121-
issel = issel && (i.flags() & 0x80000000); //kTIME
122-
if (!issel)
123-
continue;
171+
// Track selection
172+
TRACKSELECTION;
173+
//
124174
if (TMath::Abs(i.tofNSigmaPi()) < 3) {
125-
hp_El->Fill(i.p());
126-
hpt_El->Fill(i.pt());
175+
hp_Pi->Fill(i.p());
176+
hpt_Pi->Fill(i.pt());
127177
} else if (TMath::Abs(i.tofNSigmaKa()) < 3) {
128178
hp_Ka->Fill(i.p());
129179
hpt_Ka->Fill(i.pt());
@@ -148,6 +198,10 @@ struct SpectraTask {
148198
WorkflowSpec defineDataProcessing(ConfigContext const&)
149199
{
150200
return WorkflowSpec{
151-
adaptAnalysisTask<TOFPIDQATask>("tofpidqa-task"),
152-
adaptAnalysisTask<SpectraTask>("filterEl-task")};
201+
adaptAnalysisTask<TOFQATask>("tofqa-task"),
202+
adaptAnalysisTask<TOFExpTimeQATask>("tofexptime-task"),
203+
adaptAnalysisTask<TOFNSigmaQATask>("tofnsigma-task"),
204+
adaptAnalysisTask<TOFSpectraTask>("tofspectra-task")};
153205
}
206+
207+
#undef TRACKSELECTION

0 commit comments

Comments
 (0)