Skip to content

Commit 5af778c

Browse files
noferinishahor02
authored andcommitted
add TOF match checker
1 parent c1e3ddf commit 5af778c

24 files changed

+601
-100
lines changed

DataFormats/Detectors/GlobalTracking/include/DataFormatsGlobalTracking/RecoContainer.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ struct DataRequest {
198198
void requestTPCTOFTracks(bool mc);
199199
void requestITSTPCTRDTracks(bool mc);
200200
void requestTPCTRDTracks(bool mc);
201-
void requestTOFMatches(bool mc);
201+
void requestTOFMatches(o2::dataformats::GlobalTrackID::mask_t src, bool mc);
202202
void requestFT0RecPoints(bool mc);
203203
void requestFV0RecPoints(bool mc);
204204
void requestFDDRecPoints(bool mc);
@@ -315,7 +315,9 @@ struct RecoContainer {
315315
void addITSTPCTracks(o2::framework::ProcessingContext& pc, bool mc);
316316
void addGlobalFwdTracks(o2::framework::ProcessingContext& pc, bool mc);
317317
void addTPCTOFTracks(o2::framework::ProcessingContext& pc, bool mc);
318-
void addTOFMatches(o2::framework::ProcessingContext& pc, bool mc);
318+
void addTOFMatchesITSTPC(o2::framework::ProcessingContext& pc, bool mc);
319+
void addTOFMatchesTPCTRD(o2::framework::ProcessingContext& pc, bool mc);
320+
void addTOFMatchesITSTPCTRD(o2::framework::ProcessingContext& pc, bool mc);
319321

320322
void addITSClusters(o2::framework::ProcessingContext& pc, bool mc);
321323
void addMFTClusters(o2::framework::ProcessingContext& pc, bool mc);

DataFormats/Detectors/GlobalTracking/include/DataFormatsGlobalTracking/RecoContainerCreateTracksVariadic.h

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,23 +96,70 @@ void o2::globaltracking::RecoContainer::createTracksVariadic(T creator) const
9696
const auto matchesTPCTOF = getTPCTOFMatches(); // and corresponding matches
9797
const auto tracksTPCTRD = getTPCTRDTracks<o2::trd::TrackTRD>();
9898
const auto matchesITSTPCTOF = getITSTPCTOFMatches(); // just matches, no refit done
99+
const auto matchesTPCTRDTOF = getTPCTRDTOFMatches(); // just matches, no refit done
100+
const auto matchesITSTPCTRDTOF = getITSTPCTRDTOFMatches(); // just matches, no refit done
99101
const auto tofClusters = getTOFClusters();
100102
const auto tracksITSTPCTRD = getITSTPCTRDTracks<o2::trd::TrackTRD>();
101103

102104
const auto trigTPCTRD = getTPCTRDTriggers();
103105

104-
usedData[GTrackID::ITS].resize(tracksITS.size()); // to flag used ITS tracks
105-
usedData[GTrackID::MCH].resize(tracksMCH.size()); // to flag used MCH tracks
106-
usedData[GTrackID::MFT].resize(tracksMFT.size()); // to flag used MFT tracks
107-
usedData[GTrackID::TPC].resize(tracksTPC.size()); // to flag used TPC tracks
108-
usedData[GTrackID::ITSTPC].resize(tracksTPCITS.size()); // to flag used ITSTPC tracks
109-
usedData[GTrackID::MFTMCH].resize(tracksMFTMCH.size()); // to flag used MFTMCH tracks
110-
usedData[GTrackID::ITSTPCTRD].resize(tracksITSTPCTRD.size()); // to flag used ITSTPCTRD tracks
111-
usedData[GTrackID::TPCTRD].resize(tracksTPCTRD.size()); // to flag used TPCTRD tracks
112-
usedData[GTrackID::ITSTPCTOF].resize(getITSTPCTOFMatches().size()); // to flag used ITSTPC-TOF matches
106+
usedData[GTrackID::ITS].resize(tracksITS.size()); // to flag used ITS tracks
107+
usedData[GTrackID::MCH].resize(tracksMCH.size()); // to flag used MCH tracks
108+
usedData[GTrackID::MFT].resize(tracksMFT.size()); // to flag used MFT tracks
109+
usedData[GTrackID::TPC].resize(tracksTPC.size()); // to flag used TPC tracks
110+
usedData[GTrackID::ITSTPC].resize(tracksTPCITS.size()); // to flag used ITSTPC tracks
111+
usedData[GTrackID::MFTMCH].resize(tracksMFTMCH.size()); // to flag used MFTMCH tracks
112+
usedData[GTrackID::ITSTPCTRD].resize(tracksITSTPCTRD.size()); // to flag used ITSTPCTRD tracks
113+
usedData[GTrackID::TPCTRD].resize(tracksTPCTRD.size()); // to flag used TPCTRD tracks
114+
usedData[GTrackID::ITSTPCTRD].resize(tracksITSTPCTRD.size()); // to flag used TPCTRD tracks
115+
usedData[GTrackID::ITSTPCTOF].resize(getITSTPCTOFMatches().size()); // to flag used ITSTPC-TOF matches
116+
usedData[GTrackID::TPCTRDTOF].resize(getTPCTRDTOFMatches().size()); // to flag used ITSTPC-TOF matches
117+
usedData[GTrackID::ITSTPCTRDTOF].resize(getITSTPCTRDTOFMatches().size()); // to flag used ITSTPC-TOF matches
113118

114119
// ITS-TPC-TRD-TOF
115-
// TODO, will flag used ITS-TPC-TRD
120+
{
121+
122+
if (matchesITSTPCTRDTOF.size() && (!tofClusters.size() || !tracksITSTPCTRD.size())) {
123+
throw std::runtime_error(fmt::format("Global-TOF tracks ({}) require ITS-TPC-TRD tracks ({}) and TOF clusters ({})",
124+
matchesITSTPCTRDTOF.size(), tracksITSTPCTRD.size(), tofClusters.size()));
125+
}
126+
for (unsigned i = 0; i < matchesITSTPCTRDTOF.size(); i++) {
127+
const auto& match = matchesITSTPCTRDTOF[i];
128+
auto gidx = match.getTrackRef(); // this should be corresponding ITS-TPC-TRD track
129+
// no need to check isUsed: by construction this ITS-TPC-TRD was not used elsewhere
130+
const auto& tofCl = tofClusters[match.getTOFClIndex()];
131+
float timeTOFMUS = (tofCl.getTime() - match.getLTIntegralOut().getTOF(o2::track::PID::Pion)) * PS2MUS; // tof time in \mus, FIXME: account for time of flight to R TOF
132+
const float timeErr = 0.010f; // assume 10 ns error FIXME
133+
if (creator(tracksITSTPCTRD[gidx.getIndex()], {i, GTrackID::ITSTPCTRDTOF}, timeTOFMUS, timeErr)) {
134+
//flagUsed2(i, GTrackID::TOF); // flag used TOF match // TODO might be not needed
135+
flagUsed(gidx); // flag used ITS-TPC-TRD tracks
136+
}
137+
}
138+
}
139+
140+
// TPC-TRD-TOF
141+
{
142+
143+
if (matchesTPCTRDTOF.size() && (!tofClusters.size() || !tracksTPCTRD.size())) {
144+
throw std::runtime_error(fmt::format("Global-TOF tracks ({}) require TPC-TRD tracks ({}) and TOF clusters ({})",
145+
matchesTPCTRDTOF.size(), tracksTPCTRD.size(), tofClusters.size()));
146+
}
147+
for (unsigned i = 0; i < matchesTPCTRDTOF.size(); i++) {
148+
const auto& match = matchesTPCTRDTOF[i];
149+
auto gidx = match.getTrackRef(); // this should be corresponding ITS-TPC-TRD track
150+
if (isUsed(gidx)) { // RS FIXME: THIS IS TEMPORARY, until the TOF matching will use ITS-TPC-TRD as an input
151+
continue;
152+
}
153+
// no need to check isUsed: by construction this ITS-TPC-TRD was not used elsewhere
154+
const auto& tofCl = tofClusters[match.getTOFClIndex()];
155+
float timeTOFMUS = (tofCl.getTime() - match.getLTIntegralOut().getTOF(o2::track::PID::Pion)) * PS2MUS; // tof time in \mus, FIXME: account for time of flight to R TOF
156+
const float timeErr = 0.010f; // assume 10 ns error FIXME
157+
if (creator(tracksTPCTRD[gidx.getIndex()], {i, GTrackID::TPCTRDTOF}, timeTOFMUS, timeErr)) {
158+
//flagUsed2(i, GTrackID::TOF); // flag used TOF match // TODO might be not needed
159+
flagUsed(gidx); // flag used ITS-TPC tracks
160+
}
161+
}
162+
}
116163

117164
// ITS-TPC-TRD
118165
{

DataFormats/Detectors/GlobalTracking/src/RecoContainer.cxx

Lines changed: 89 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ void DataRequest::requestTPCTOFTracks(bool mc)
143143
addInput({"matchTPCTOF", "TOF", "MTC_TPC", ss, Lifetime::Timeframe});
144144
addInput({"trackTPCTOF", "TOF", "TOFTRACKS_TPC", ss, Lifetime::Timeframe});
145145
if (mc) {
146-
addInput({"clsTOF_TPC_MCTR", "TOF", "MCMATCHTOF_TPC", ss, Lifetime::Timeframe});
146+
addInput({"clsTOF_TPC_MCTR", "TOF", "MCMTC_TPC", ss, Lifetime::Timeframe});
147147
}
148148
requestMap["trackTPCTOF"] = mc;
149149
}
@@ -171,13 +171,29 @@ void DataRequest::requestTPCTRDTracks(bool mc)
171171
requestMap["trackTPCTRD"] = mc;
172172
}
173173

174-
void DataRequest::requestTOFMatches(bool mc)
174+
void DataRequest::requestTOFMatches(o2::dataformats::GlobalTrackID::mask_t src, bool mc)
175175
{
176-
addInput({"matchITSTPCTOF", "TOF", "MTC_ITSTPC", 0, Lifetime::Timeframe});
177-
if (mc) {
178-
addInput({"clsTOF_GLO_MCTR", "TOF", "MCMATCHTOF", 0, Lifetime::Timeframe});
176+
if (src[GTrackID::ITSTPCTOF]) {
177+
addInput({"matchITSTPCTOF", "TOF", "MTC_ITSTPC", 0, Lifetime::Timeframe});
178+
if (mc) {
179+
addInput({"clsTOF_GLO_MCTR", "TOF", "MCMTC_ITSTPC", 0, Lifetime::Timeframe});
180+
}
181+
requestMap["matchTOF_ITSTPC"] = mc;
182+
}
183+
if (src[GTrackID::TPCTRDTOF]) {
184+
addInput({"matchTPCTRDTOF", "TOF", "MTC_TPCTRD", 0, Lifetime::Timeframe});
185+
if (mc) {
186+
addInput({"clsTOF_GLO2_MCTR", "TOF", "MCMTC_TPCTRD", 0, Lifetime::Timeframe});
187+
}
188+
requestMap["matchTOF_TPCTRD"] = mc;
189+
}
190+
if (src[GTrackID::ITSTPCTRDTOF]) {
191+
addInput({"matchITSTPCTRDTOF", "TOF", "MTC_ITSTPCTRD", 0, Lifetime::Timeframe});
192+
if (mc) {
193+
addInput({"clsTOF_GLO3_MCTR", "TOF", "MCMTC_ITSTPCTRD", 0, Lifetime::Timeframe});
194+
}
195+
requestMap["matchTOF_ITSTPCTRD"] = mc;
179196
}
180-
requestMap["matchTOF"] = mc;
181197
}
182198

183199
void DataRequest::requestITSClusters(bool mc)
@@ -384,18 +400,16 @@ void DataRequest::requestTracks(GTrackID::mask_t src, bool useMC)
384400
if (src[GTrackID::TPCTOF]) {
385401
requestTPCTOFTracks(useMC);
386402
}
387-
if (src[GTrackID::ITSTPCTOF]) {
388-
requestTOFMatches(useMC);
389-
requestTOFClusters(false); // RSTODO Needed just to set the time of ITSTPC track, consider moving to MatchInfoTOF
390-
// NOTE: Getting TOF Clusters is carried over to InputHelper::addInputSpecs. If changed here, please fix there.
403+
if (src[GTrackID::TPCTRD] || src[GTrackID::TPCTRDTOF]) {
404+
requestTPCTRDTracks(useMC);
391405
}
392-
if (src[GTrackID::ITSTPCTRD]) {
406+
if (src[GTrackID::ITSTPCTRD] || src[GTrackID::ITSTPCTRDTOF]) {
393407
requestITSTPCTRDTracks(useMC);
394408
}
395-
if (src[GTrackID::TPCTRD]) {
396-
requestTPCTRDTracks(useMC);
409+
if (src[GTrackID::ITSTPCTRDTOF] || src[GTrackID::ITSTPCTOF] || src[GTrackID::TPCTRDTOF]) {
410+
requestTOFMatches(src, useMC);
411+
requestTOFClusters(false);
397412
}
398-
399413
if (src[GTrackID::FT0]) {
400414
requestFT0RecPoints(false); // RS FIXME: at the moment does not support MC
401415
}
@@ -505,9 +519,19 @@ void RecoContainer::collectData(ProcessingContext& pc, const DataRequest& reques
505519
addTPCTOFTracks(pc, req->second);
506520
}
507521

508-
req = reqMap.find("matchTOF");
522+
req = reqMap.find("matchTOF_ITSTPC");
523+
if (req != reqMap.end()) {
524+
addTOFMatchesITSTPC(pc, req->second);
525+
}
526+
527+
req = reqMap.find("matchTOF_TPCTRD");
528+
if (req != reqMap.end()) {
529+
addTOFMatchesTPCTRD(pc, req->second);
530+
}
531+
532+
req = reqMap.find("matchTOF_ITSTPCTRD");
509533
if (req != reqMap.end()) {
510-
addTOFMatches(pc, req->second);
534+
addTOFMatchesITSTPCTRD(pc, req->second);
511535
}
512536

513537
req = reqMap.find("clusITS");
@@ -770,14 +794,29 @@ void RecoContainer::addTPCTOFTracks(ProcessingContext& pc, bool mc)
770794
}
771795

772796
//__________________________________________________________
773-
void RecoContainer::addTOFMatches(ProcessingContext& pc, bool mc)
797+
void RecoContainer::addTOFMatchesITSTPC(ProcessingContext& pc, bool mc)
774798
{
775799
commonPool[GTrackID::ITSTPCTOF].registerContainer(pc.inputs().get<gsl::span<o2d::MatchInfoTOF>>("matchITSTPCTOF"), MATCHES); //only ITS/TPC : TOF match info, no real tracks
776800
if (mc) {
777801
commonPool[GTrackID::ITSTPCTOF].registerContainer(pc.inputs().get<gsl::span<o2::MCCompLabel>>("clsTOF_GLO_MCTR"), MCLABELS);
778802
}
779803
}
780-
804+
//__________________________________________________________
805+
void RecoContainer::addTOFMatchesTPCTRD(ProcessingContext& pc, bool mc)
806+
{
807+
commonPool[GTrackID::TPCTRDTOF].registerContainer(pc.inputs().get<gsl::span<o2d::MatchInfoTOF>>("matchTPCTRDTOF"), MATCHES); //only ITS/TPC : TOF match info, no real tracks
808+
if (mc) {
809+
commonPool[GTrackID::TPCTRDTOF].registerContainer(pc.inputs().get<gsl::span<o2::MCCompLabel>>("clsTOF_GLO2_MCTR"), MCLABELS);
810+
}
811+
}
812+
//__________________________________________________________
813+
void RecoContainer::addTOFMatchesITSTPCTRD(ProcessingContext& pc, bool mc)
814+
{
815+
commonPool[GTrackID::ITSTPCTRDTOF].registerContainer(pc.inputs().get<gsl::span<o2d::MatchInfoTOF>>("matchITSTPCTRDTOF"), MATCHES); //only ITS/TPC : TOF match info, no real tracks
816+
if (mc) {
817+
commonPool[GTrackID::ITSTPCTRDTOF].registerContainer(pc.inputs().get<gsl::span<o2::MCCompLabel>>("clsTOF_GLO3_MCTR"), MCLABELS);
818+
}
819+
}
781820
//__________________________________________________________
782821
void RecoContainer::addITSClusters(ProcessingContext& pc, bool mc)
783822
{
@@ -965,6 +1004,18 @@ bool RecoContainer::isTrackSourceLoaded(int src) const
9651004
}
9661005
src = GTrackID::ITSTPC;
9671006
}
1007+
if (src == GTrackID::TPCTRDTOF) {
1008+
if (!isMatchSourceLoaded(src)) { // the physical tracks are in ITS-TPC, need to get reference from match info
1009+
return false;
1010+
}
1011+
src = GTrackID::TPCTRD;
1012+
}
1013+
if (src == GTrackID::ITSTPCTRDTOF) {
1014+
if (!isMatchSourceLoaded(src)) { // the physical tracks are in ITS-TPC, need to get reference from match info
1015+
return false;
1016+
}
1017+
src = GTrackID::ITSTPCTRD;
1018+
}
9681019
return commonPool[src].isLoaded(TRACKS);
9691020
}
9701021

@@ -973,7 +1024,7 @@ const o2::track::TrackParCov& RecoContainer::getTrackParam(GTrackID gidx) const
9731024
{
9741025
// get base track
9751026
auto trSrc = gidx.getSource();
976-
if (trSrc == GTrackID::ITSTPCTOF) { // the physical tracks are in ITS-TPC, need to get reference from match info
1027+
if (trSrc == GTrackID::ITSTPCTOF || trSrc == GTrackID::TPCTRDTOF || trSrc == GTrackID::ITSTPCTRDTOF) { // the physical tracks are in ITS-TPC, need to get reference from match info
9771028
gidx = getTOFMatch(gidx).getTrackRef();
9781029
}
9791030
return getObject<o2::track::TrackParCov>(gidx, TRACKS);
@@ -1031,6 +1082,15 @@ RecoContainer::GlobalIDSet RecoContainer::getSingleDetectorRefs(GTrackID gidx) c
10311082
table[GTrackID::TOF] = {unsigned(parent0.getIdxTOFCl()), GTrackID::TOF};
10321083
table[GTrackID::TPC] = parent1.getRefTPC();
10331084
table[parent1.getRefITS().getSource()] = parent1.getRefITS(); // ITS source might be an ITS track or ITSAB tracklet
1085+
} else if (src == GTrackID::ITSTPCTRDTOF) {
1086+
const auto& parent0 = getTOFMatch(gidx); //ITS/TPC : TOF
1087+
const auto& parent1 = getITSTPCTRDTrack<o2::trd::TrackTRD>(parent0.getTrackRef());
1088+
const auto& parent2 = getTPCITSTrack(parent1.getRefGlobalTrackId());
1089+
table[GTrackID::ITSTPCTRD] = parent0.getTrackRef();
1090+
table[GTrackID::ITSTPC] = parent1.getRefGlobalTrackId();
1091+
table[GTrackID::TOF] = {unsigned(parent0.getIdxTOFCl()), GTrackID::TOF};
1092+
table[GTrackID::TPC] = parent2.getRefTPC();
1093+
table[parent2.getRefITS().getSource()] = parent2.getRefITS(); // ITS source might be an ITS track or ITSAB tracklet
10341094
} else if (src == GTrackID::TPCTOF) {
10351095
const auto& parent0 = getTPCTOFMatch(gidx); //TPC : TOF
10361096
table[GTrackID::TOF] = {unsigned(parent0.getIdxTOFCl()), GTrackID::TOF};
@@ -1057,6 +1117,11 @@ GTrackID RecoContainer::getTPCContributorGID(GTrackID gidx) const
10571117
const auto& parent0 = getTOFMatch(gidx); //ITS/TPC : TOF
10581118
const auto& parent1 = getTPCITSTrack(parent0.getTrackRef());
10591119
return parent1.getRefTPC();
1120+
} else if (src == GTrackID::ITSTPCTRDTOF) {
1121+
const auto& parent0 = getTOFMatch(gidx); //ITS/TPC/TRD : TOF
1122+
const auto& parent1 = getITSTPCTRDTrack<o2::trd::TrackTRD>(parent0.getTrackRef());
1123+
const auto& parent2 = getTPCITSTrack(parent1.getRefGlobalTrackId());
1124+
return parent2.getRefTPC();
10601125
} else if (src == GTrackID::TPCTOF) {
10611126
const auto& parent0 = getTPCTOFMatch(gidx); //TPC : TOF
10621127
return parent0.getTrackRef();
@@ -1081,6 +1146,11 @@ GTrackID RecoContainer::getITSContributorGID(GTrackID gidx) const
10811146
const auto& parent0 = getTOFMatch(gidx); //ITS/TPC : TOF
10821147
const auto& parent1 = getTPCITSTrack(parent0.getTrackRef());
10831148
return parent1.getRefITS();
1149+
} else if (src == GTrackID::ITSTPCTRDTOF) {
1150+
const auto& parent0 = getTOFMatch(gidx); //ITS/TPC : TOF
1151+
const auto& parent1 = getITSTPCTRDTrack<o2::trd::TrackTRD>(parent0.getTrackRef());
1152+
const auto& parent2 = getTPCITSTrack(parent1.getRefGlobalTrackId());
1153+
return parent2.getRefITS();
10841154
} else if (src == GTrackID::ITSTPC) {
10851155
const auto& parent0 = getTPCITSTrack(gidx);
10861156
return parent0.getRefITS();

Detectors/GlobalTrackingWorkflow/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ o2_add_library(GlobalTrackingWorkflow
2323
src/CosmicsMatchingSpec.cxx
2424
src/TrackCosmicsWriterSpec.cxx
2525
src/TOFMatcherSpec.cxx
26+
src/TOFMatchChecker.cxx
2627
src/GlobalFwdTrackWriterSpec.cxx
2728
PUBLIC_LINK_LIBRARIES O2::GlobalTracking
2829
O2::GlobalTrackingWorkflowReaders
@@ -73,6 +74,10 @@ o2_add_executable(matcher-workflow
7374
COMPONENT_NAME tof
7475
SOURCES src/tof-matcher-workflow.cxx
7576
PUBLIC_LINK_LIBRARIES O2::GlobalTrackingWorkflow O2::TOFWorkflowIO)
77+
o2_add_executable(match-checker-workflow
78+
COMPONENT_NAME tof
79+
SOURCES src/tof-match-checker-workflow.cxx
80+
PUBLIC_LINK_LIBRARIES O2::GlobalTrackingWorkflow O2::TOFWorkflowIO)
7681

7782
o2_add_executable(matcher-workflow
7883
COMPONENT_NAME globalfwd

Detectors/GlobalTrackingWorkflow/helpers/src/InputHelper.cxx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,19 @@ int InputHelper::addInputSpecs(const ConfigContext& configcontext, WorkflowSpec&
9292
specs.emplace_back(o2::globaltracking::getTrackTPCITSReaderSpec(maskTracksMC[GID::ITSTPC] || maskTracksMC[GID::ITSTPCTOF]));
9393
}
9494
if (maskMatches[GID::ITSTPCTOF] || maskTracks[GID::ITSTPCTOF]) {
95-
specs.emplace_back(o2::tof::getTOFMatchedReaderSpec(maskTracksMC[GID::ITSTPCTOF], false, /*maskTracks[GID::ITSTPCTOF]*/ false)); // ITSTPCTOF does not provide tracks, only matchInfo
95+
specs.emplace_back(o2::tof::getTOFMatchedReaderSpec(maskTracksMC[GID::ITSTPCTOF], 1, /*maskTracks[GID::ITSTPCTOF]*/ false)); // ITSTPCTOF does not provide tracks, only matchInfo
96+
}
97+
if (maskMatches[GID::ITSTPCTRDTOF] || maskTracks[GID::ITSTPCTRDTOF]) {
98+
specs.emplace_back(o2::tof::getTOFMatchedReaderSpec(maskTracksMC[GID::ITSTPCTRDTOF], 3, /*maskTracks[GID::ITSTPCTOF]*/ false)); // ITSTPCTOF does not provide tracks, only matchInfo
99+
}
100+
if (maskMatches[GID::TPCTRDTOF] || maskTracks[GID::TPCTRDTOF]) {
101+
specs.emplace_back(o2::tof::getTOFMatchedReaderSpec(maskTracksMC[GID::TPCTRDTOF], 2, /*maskTracks[GID::ITSTPCTOF]*/ false)); // ITSTPCTOF does not provide tracks, only matchInfo
96102
}
97103
if (maskClusters[GID::TOF] || maskTracks[GID::ITSTPCTOF]) { // Note: maskTracks[GID::ITSTPCTOF] is only here to match the behavior of RecoContainer::requestTracks
98104
specs.emplace_back(o2::tof::getClusterReaderSpec(maskClustersMC[GID::TOF]));
99105
}
100106
if (maskMatches[GID::TPCTOF]) {
101-
specs.emplace_back(o2::tof::getTOFMatchedReaderSpec(maskTracksMC[GID::TPCTOF], true, maskTracks[GID::TPCTOF], subSpecStrict));
107+
specs.emplace_back(o2::tof::getTOFMatchedReaderSpec(maskTracksMC[GID::TPCTOF], 0, maskTracks[GID::TPCTOF], subSpecStrict));
102108
}
103109
if (maskTracks[GID::FT0] || maskClusters[GID::FT0]) {
104110
specs.emplace_back(o2::ft0::getRecPointReaderSpec(maskTracksMC[GID::FT0] || maskClustersMC[GID::FT0]));
@@ -116,10 +122,10 @@ int InputHelper::addInputSpecs(const ConfigContext& configcontext, WorkflowSpec&
116122
if (maskClusters[GID::TRD]) {
117123
specs.emplace_back(o2::trd::getTRDTrackletReaderSpec(maskClustersMC[GID::TRD], true));
118124
}
119-
if (maskTracks[GID::ITSTPCTRD]) {
125+
if (maskTracks[GID::ITSTPCTRD] || maskTracks[GID::ITSTPCTRDTOF]) {
120126
specs.emplace_back(o2::trd::getTRDGlobalTrackReaderSpec(maskTracksMC[GID::ITSTPCTRD]));
121127
}
122-
if (maskTracks[GID::TPCTRD]) {
128+
if (maskTracks[GID::TPCTRD] || maskTracks[GID::TPCTRDTOF]) {
123129
specs.emplace_back(o2::trd::getTRDTPCTrackReaderSpec(maskTracksMC[GID::TPCTRD], subSpecStrict));
124130
}
125131
if (maskTracks[GID::MFTMCH]) {
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
/// @file TOFMatchCheckerSpec.h
13+
14+
#ifndef O2_TOF_MATCHCHECKER_SPEC
15+
#define O2_TOF_MATCHCHECKER_SPEC
16+
17+
#include "Framework/DataProcessorSpec.h"
18+
#include "ReconstructionDataFormats/MatchInfoTOF.h"
19+
20+
using namespace o2::framework;
21+
22+
namespace o2
23+
{
24+
namespace globaltracking
25+
{
26+
27+
/// create a processor spec
28+
framework::DataProcessorSpec getTOFMatchCheckerSpec(o2::dataformats::GlobalTrackID::mask_t src, bool useMC);
29+
30+
} // namespace globaltracking
31+
} // namespace o2
32+
33+
#endif /* O2_TOF_MATCHER_SPEC */

0 commit comments

Comments
 (0)