Project
Loading...
Searching...
No Matches
RecoContainer.h
Go to the documentation of this file.
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
15
16#ifndef ALICEO2_RECO_CONTAINER
17#define ALICEO2_RECO_CONTAINER
18
30#include <gsl/span>
31#include <memory>
32
33// We forward declare the internal structures, to reduce header dependencies.
34// Please include headers for TPC Hits or TRD tracklets directly (DataFormatsTPC/WorkflowHelper.h / DataFormatsTRD/RecoInputContainer.h)
35namespace o2::tpc
36{
37class TrackTPC;
38using TPCClRefElem = uint32_t;
40struct TriggerInfoDLBZS;
41namespace internal
42{
44} // namespace internal
45} // namespace o2::tpc
46
47namespace o2::trd
48{
49class Tracklet64;
50class CalibratedTracklet;
51class TriggerRecord;
52class TrackTriggerRecord;
53// class TrackTRD;
54struct RecoInputContainer;
55} // namespace o2::trd
56
57namespace o2::framework
58{
59class ProcessingContext;
60struct InputSpec;
61} // namespace o2::framework
62
63namespace o2::its
64{
65class TrackITS;
66}
67
68namespace o2::mft
69{
70class TrackMFT;
71}
72
73namespace o2::mch
74{
75class TrackMCH;
76class ROFRecord;
77class Cluster;
78} // namespace o2::mch
79
80namespace o2::mid
81{
82class Cluster;
83class ROFRecord;
84class Track;
85class MCClusterLabel;
86class MCLabel;
87} // namespace o2::mid
88
89namespace o2::itsmft
90{
91class ROFRecord;
92class CompClusterExt;
93class TrkClusRef;
94} // namespace o2::itsmft
95
96namespace o2::tof
97{
98class Cluster;
99}
100
101namespace o2::hmpid
102{
103class Cluster;
104class Trigger;
105} // namespace o2::hmpid
106
107namespace o2::ft0
108{
109class RecPoints;
110class ChannelDataFloat;
111} // namespace o2::ft0
112
113namespace o2::fv0
114{
115class RecPoints;
116class ChannelDataFloat;
117} // namespace o2::fv0
118
119namespace o2::zdc
120{
121class BCRecData;
122class ZDCEnergy;
123class ZDCTDCData;
124} // namespace o2::zdc
125
126namespace o2::fdd
127{
128class RecPoint;
129class ChannelDataFloat;
130} // namespace o2::fdd
131
132namespace o2::ctp
133{
134class CTPDigit;
135} // namespace o2::ctp
136
137namespace o2::phos
138{
139class Cell;
140class TriggerRecord;
141class MCLabel;
142} // namespace o2::phos
143
144namespace o2::cpv
145{
146class Cluster;
147class TriggerRecord;
148} // namespace o2::cpv
149
150namespace o2::emcal
151{
152class Cell;
153class TriggerRecord;
154class MCLabel;
155} // namespace o2::emcal
156
157namespace o2::dataformats
158{
159class TrackTPCITS;
160class TrackTPCTOF;
161class MatchInfoTOF;
162class MatchInfoHMP;
163class PrimaryVertex;
164class VtxTrackIndex;
165class VtxTrackRef;
166class V0;
167class V0Index;
168class Cascade;
169class CascadeIndex;
170class Decay3Body;
171class Decay3BodyIndex;
172class StrangeTrack;
173class TrackCosmics;
174class GlobalFwdTrack;
175class MatchInfoFwd;
176class TrackMCHMID;
177class IRFrame;
178} // namespace o2::dataformats
179
180namespace o2
181{
182class MCEventLabel;
183}
184
185namespace o2
186{
187namespace globaltracking
188{
189
190// helper class to request DPL input data from the processor specs definition
192 std::vector<o2::framework::InputSpec> inputs;
193 std::unordered_map<std::string, bool> requestMap;
195
200 uint32_t getMatchingInputSubSpec() const { return getSubSpec(matchingInputType); }
201
202 void addInput(const o2::framework::InputSpec&& isp);
203
204 bool isRequested(const std::string& t) const { return !t.empty() && requestMap.find(t) != requestMap.end(); }
207
208 void requestITSTracks(bool mc);
209 void requestMFTTracks(bool mc);
210 void requestMCHTracks(bool mc);
211 void requestMIDTracks(bool mc);
212 void requestTPCTracks(bool mc);
213 void requestITSTPCTracks(bool mc);
214 void requestGlobalFwdTracks(bool mc);
215 void requestMFTMCHMatches(bool mc);
216 void requestMCHMIDMatches(bool mc);
217 void requestTPCTOFTracks(bool mc);
218 void requestITSTPCTRDTracks(bool mc);
219 void requestTPCTRDTracks(bool mc);
221 void requestFT0RecPoints(bool mc);
222 void requestFV0RecPoints(bool mc);
223 void requestFDDRecPoints(bool mc);
224 void requestZDCRecEvents(bool mc);
225 void requestITSClusters(bool mc);
226 void requestMFTClusters(bool mc);
227 void requestTPCClusters(bool mc);
228 void requestTPCOccMap();
229 void requestTPCTriggers();
230 void requestTOFClusters(bool mc);
231 void requestTRDTracklets(bool mc);
232 void requestMCHClusters(bool mc);
233 void requestMIDClusters(bool mc);
234 void requestHMPClusters(bool mc);
235 void requestHMPMatches(bool mc); // no input available at the moment
236
237 void requestCTPDigits(bool mc);
238
239 void requestPHOSCells(bool mc);
240 void requestEMCALCells(bool mc);
241 void requestCPVClusters(bool mc);
242
243 void requestCoscmicTracks(bool mc);
244
245 void requestPrimaryVertices(bool mc);
246 void requestPrimaryVerticesTMP(bool mc);
247 void requestSecondaryVertices(bool mc);
248 void requestStrangeTracks(bool mc);
249
250 void requestIRFramesITS();
251
252#ifdef ENABLE_UPGRADES
253 void requestIT3Clusters(bool mc);
254#endif
255};
256
257// Helper class to requested data.
258// Most common data have dedicated getters, some need to be called with returned typa as a template.
259// In general on either gets a gsl::span<const Type> via getter like e.g. getITSTracks()
260// of a reference to particular track, i.e. getITSTrack(GlobalTrackID id).
261// Note that random access like getITSTracks()[i] has an overhead, since for every call a span is created.
262// Therefore, for the random access better to use direct getter, i.e. auto& tr = getITSTrack(gid)
263// while for looping over the whole span first create a span then iterate over it.
264
268
278 MCLABELS, // track labels
279 MCLABELSEXTRA, // additonal labels, like TOF clusters matching label (not sure TOF really needs it)
280 VARIA, // misc data, which does not fit to other categories
282 };
283
284 // slots to register primary vertex data
285 enum PVTXSlots { PVTX, // Primary vertices
286 PVTX_TRMTC, // matched track indices
287 PVTX_TRMTCREFS, // PV -> matched tracks referencing object
288 PVTX_CONTID, // contributors indices
289 PVTX_CONTIDREFS, // PV -> contributors indices
290 PVTX_MCTR, // PV MC label
292
293 // slots to register secondary vertex data
294 enum SVTXSlots { V0SIDX, // V0s indices
295 V0S, // V0 objects
296 PVTX_V0REFS, // PV -> V0 references
297 CASCSIDX, // Cascade indices
298 CASCS, // Cascade objects
299 PVTX_CASCREFS, // PV -> Cascade reference
300 DECAY3BODYIDX, // 3-body decay indices
301 DECAY3BODY, // 3-body decay objects
302 PVTX_3BODYREFS, // PV -> 3-body decay references
304
305 // slots to register strangeness tracking data
311
312 // slots for cosmics
316
317 using AccSlots = o2::dataformats::AbstractRefAccessor<int, NCOMMONSLOTS>; // int here is a dummy placeholder
323 using GlobalIDSet = std::array<GTrackID, GTrackID::NSources>;
324
325 static constexpr float PS2MUS = 1e-6;
326
328
329 std::array<AccSlots, GTrackID::NSources> commonPool;
330 PVertexAccessor pvtxPool; // containers for primary vertex related objects
331 SVertexAccessor svtxPool; // containers for secondary vertex related objects
332 STrackAccessor strkPool; // containers for strangeness tracking related objects
333 CosmicsAccessor cosmPool; // containers for cosmics track data
334
335 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcITSClusters;
336 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcTOFClusters;
337 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcHMPClusters;
338 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcCPVClusters;
339 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcMCHClusters;
340 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::phos::MCLabel>> mcPHSCells;
341 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::emcal::MCLabel>> mcEMCCells;
342 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::mid::MCClusterLabel>> mcMIDTrackClusters;
343 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::mid::MCClusterLabel>> mcMIDClusters;
344 std::unique_ptr<const std::vector<o2::MCCompLabel>> mcMIDTracks;
346
347 gsl::span<const unsigned char> clusterShMapTPC;
348 gsl::span<const unsigned int> occupancyMapTPC;
349
350 std::unique_ptr<o2::tpc::internal::getWorkflowTPCInput_ret> inputsTPCclusters; // special struct for TPC clusters access
351 std::unique_ptr<o2::trd::RecoInputContainer> inputsTRD; // special struct for TRD tracklets, trigger records
352
354 void createTracks(std::function<bool(const o2::track::TrackParCov&, GTrackID)> const& creator) const;
355 template <class T>
356 void createTracksVariadic(T creator, GTrackID::mask_t srcSel = GTrackID::getSourcesMask("all")) const;
357 void fillTrackMCLabels(const gsl::span<GTrackID> gids, std::vector<o2::MCCompLabel>& mcinfo) const;
358
364
373
377
380 void addTPCClusters(o2::framework::ProcessingContext& pc, bool mc, bool shmap, bool occmap);
388
392
394
396
400
402
406
408
410
411#ifdef ENABLE_UPGRADES
412 void addIT3Clusters(o2::framework::ProcessingContext& pc, bool mc);
413#endif
414
415 // custom getters
416
417 // get contributors from single detectors: return array with sources set to all contributing GTrackIDs
419
420 // get contributing TPC GTrackID to the source. If source gidx is not contributed by TPC,
421 // returned GTrackID.isSourceSet()==false
423
424 // get contributing ITS GTrackID to the source. If source gidx is not contributed by ITS,
425 // returned GTrackID.isSourceSet()==false
427
428 // check if track source attached
429 bool isTrackSourceLoaded(int src) const;
430
431 // check if match source attached
432 bool isMatchSourceLoaded(int src) const { return commonPool[src].isLoaded(MATCHES); }
433
434 // -------------------------------
435 // generic getter for span
436 template <typename U>
437 gsl::span<const U> getSpan(int src, int slotID) const
438 {
439 return commonPool[src].getSpan<U>(slotID);
440 }
441
442 // generic getter for an object in the attaches span
443 template <typename U>
444 const U& getObject(int src, int index, int slotID) const
445 {
446 return commonPool[src].get_as<U>(slotID, index);
447 }
448 template <typename U>
449 const U& getObject(GTrackID gid, int slotID) const
450 {
451 return getObject<U>(gid.getSource(), gid.getIndex(), slotID);
452 }
453 // <<TODO Make this private
454
455 //-------------------------
456 // in general, U can be a TrackParCov or particular detector track, e.g. o2::its::TrackITS
457 template <typename U>
458 gsl::span<const U> getTracks(int src) const
459 {
460 return getSpan<U>(src, TRACKS);
461 }
462
463 template <typename U>
464 const U& getTrack(int src, int id) const
465 {
466 return getObject<U>(src, id, TRACKS);
467 }
468
469 template <typename U>
470 const U& getTrack(GTrackID gid) const
471 {
472 return getObject<U>(gid, TRACKS);
473 }
474
476 {
477 // RS FIXME: THIS IS TEMPORARY: some labels are still not implemented: in this case return dummy label
478 return commonPool[id.getSource()].getSize(MCLABELS) ? getObject<o2::MCCompLabel>(id, MCLABELS) : o2::MCCompLabel{};
479 // return getObject<o2::MCCompLabel>(id, MCLABELS);
480 }
481
482 //--------------------------------------------
483 // fetch track param
485 // fetch outer param (not all track types might have it)
487
488 //--------------------------------------------
489 // ITS
490 const o2::its::TrackITS& getITSTrack(GTrackID gid) const { return getTrack<o2::its::TrackITS>(gid); }
491 auto getITSTracks() const { return getTracks<o2::its::TrackITS>(GTrackID::ITS); }
492 auto getITSTracksROFRecords() const { return getSpan<o2::itsmft::ROFRecord>(GTrackID::ITS, TRACKREFS); }
493 auto getITSTracksClusterRefs() const { return getSpan<int>(GTrackID::ITS, INDICES); }
494 auto getITSTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITS, MCLABELS); }
495 auto getITSABRefs() const { return getSpan<o2::itsmft::TrkClusRef>(GTrackID::ITSAB, TRACKREFS); }
496 const o2::itsmft::TrkClusRef& getITSABRef(GTrackID gid) const { return getObject<o2::itsmft::TrkClusRef>(gid, TRACKREFS); }
497 auto getITSABClusterRefs() const { return getSpan<int>(GTrackID::ITSAB, INDICES); }
498 auto getITSABMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSAB, MCLABELS); }
499
500 // ITS clusters
501 auto getITSClustersROFRecords() const { return getSpan<o2::itsmft::ROFRecord>(GTrackID::ITS, CLUSREFS); }
502 auto getITSClusters() const { return getSpan<o2::itsmft::CompClusterExt>(GTrackID::ITS, CLUSTERS); }
503 auto getITSClustersPatterns() const { return getSpan<unsigned char>(GTrackID::ITS, PATTERNS); }
504 auto getITSClustersMCLabels() const { return mcITSClusters.get(); }
505
506 // MFT
507 const o2::mft::TrackMFT& getMFTTrack(GTrackID gid) const { return getTrack<o2::mft::TrackMFT>(gid); }
508 auto getMFTTracks() const { return getTracks<o2::mft::TrackMFT>(GTrackID::MFT); }
509 auto getMFTTracksROFRecords() const { return getSpan<o2::itsmft::ROFRecord>(GTrackID::MFT, TRACKREFS); }
510 auto getMFTTracksClusterRefs() const { return getSpan<int>(GTrackID::MFT, INDICES); }
511 auto getMFTTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MFT, MCLABELS); }
512
513 // MFT clusters
514 auto getMFTClustersROFRecords() const { return getSpan<o2::itsmft::ROFRecord>(GTrackID::MFT, CLUSREFS); }
515 auto getMFTClusters() const { return getSpan<o2::itsmft::CompClusterExt>(GTrackID::MFT, CLUSTERS); }
516 auto getMFTClustersPatterns() const { return getSpan<unsigned char>(GTrackID::MFT, PATTERNS); }
517
518 // MCH
519 const o2::mch::TrackMCH& getMCHTrack(GTrackID gid) const { return getTrack<o2::mch::TrackMCH>(gid); }
520 auto getMCHTracks() const { return getTracks<o2::mch::TrackMCH>(GTrackID::MCH); }
521 auto getMCHTracksROFRecords() const { return getSpan<o2::mch::ROFRecord>(GTrackID::MCH, TRACKREFS); }
522 auto getMCHTrackClusters() const { return getSpan<o2::mch::Cluster>(GTrackID::MCH, INDICES); }
523 auto getMCHTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MCH, MCLABELS); }
524
525 // MCH clusters
526 auto getMCHClusterROFRecords() const { return getSpan<o2::mch::ROFRecord>(GTrackID::MCH, CLUSREFS); }
527 auto getMCHClusters() const { return getSpan<o2::mch::Cluster>(GTrackID::MCH, CLUSTERS); }
528 auto getMCHClustersMCLabels() const { return mcMCHClusters.get(); }
529
530 // MID
531 const o2::mid::Track& getMIDTrack(GTrackID gid) const { return getTrack<o2::mid::Track>(gid); }
532 auto getMIDTracks() const { return getTracks<o2::mid::Track>(GTrackID::MID); }
533 auto getMIDTracksROFRecords() const { return getSpan<o2::mid::ROFRecord>(GTrackID::MID, TRACKREFS); }
534 auto getMIDTrackClusters() const { return getSpan<o2::mid::Cluster>(GTrackID::MID, INDICES); }
535 auto getMIDTrackClustersROFRecords() const { return getSpan<o2::mid::ROFRecord>(GTrackID::MID, MATCHES); }
536 auto getMIDTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MID, MCLABELS); }
538
539 // MID clusters
540 auto getMIDClusterROFRecords() const { return getSpan<o2::mid::ROFRecord>(GTrackID::MID, CLUSREFS); }
541 auto getMIDClusters() const { return getSpan<o2::mid::Cluster>(GTrackID::MID, CLUSTERS); }
543
544 // TPC
545 const o2::tpc::TrackTPC& getTPCTrack(GTrackID id) const { return getTrack<o2::tpc::TrackTPC>(id); }
546 auto getTPCTracks() const { return getTracks<o2::tpc::TrackTPC>(GTrackID::TPC); }
547 auto getTPCTracksClusterRefs() const { return getSpan<o2::tpc::TPCClRefElem>(GTrackID::TPC, INDICES); }
548 auto getTPCTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPC, MCLABELS); }
549 auto getTPCTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
552 auto getTPCTriggers() const { return getSpan<o2::tpc::TriggerInfoDLBZS>(GTrackID::TPC, MATCHES); }
553
554 // ITS-TPC
555 const o2::dataformats::TrackTPCITS& getTPCITSTrack(GTrackID gid) const { return getTrack<o2::dataformats::TrackTPCITS>(gid); }
556 auto getTPCITSTracks() const { return getTracks<o2::dataformats::TrackTPCITS>(GTrackID::ITSTPC); }
557 auto getTPCITSTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPC, MCLABELS); }
558 auto getTPCITSTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
559
560 // MFT-MCH
561 const o2::dataformats::GlobalFwdTrack& getGlobalFwdTrack(GTrackID gid) const { return getTrack<o2::dataformats::GlobalFwdTrack>(gid); }
562 auto getGlobalFwdTracks() const { return getTracks<o2::dataformats::GlobalFwdTrack>(GTrackID::MFTMCH); }
563 auto getMFTMCHMatches() const { return getSpan<o2::dataformats::MatchInfoFwd>(GTrackID::MFTMCH, MATCHES); }
564 auto getGlobalFwdTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MFTMCH, MCLABELS); }
565
566 // MCH-MID
567 const o2::dataformats::TrackMCHMID& getMCHMIDMatch(GTrackID gid) const { return getObject<o2::dataformats::TrackMCHMID>(gid, MATCHES); }
568 auto getMCHMIDMatches() const { return getSpan<o2::dataformats::TrackMCHMID>(GTrackID::MCHMID, MATCHES); }
569 auto getMCHMIDMatchesMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MCHMID, MCLABELS); }
570
571 // ITS-TPC-TRD, since the TrackTRD track is just an alias, forward-declaring it does not work, need to keep template
572 template <class U>
574 {
575 return getTrack<U>(id);
576 }
577 template <class U>
579 {
580 return getTracks<U>(GTrackID::ITSTPCTRD);
581 }
583 {
584 return getSpan<o2::trd::TrackTriggerRecord>(GTrackID::ITSTPCTRD, TRACKREFS);
585 }
586 auto getITSTPCTRDTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPCTRD, MCLABELS); }
587 auto getITSTPCTRDTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
588 auto getITSTPCTRDSATracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPCTRD, MCLABELSEXTRA); }
589 auto getITSTPCTRDSATrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELSEXTRA); }
590
591 // TPC-TRD
592 template <class U>
594 {
595 return getTrack<U>(id);
596 }
597 template <class U>
598 auto getTPCTRDTracks() const
599 {
600 return getTracks<U>(GTrackID::TPCTRD);
601 }
602 auto getTPCTRDTriggers() const
603 {
604 return getSpan<o2::trd::TrackTriggerRecord>(GTrackID::TPCTRD, TRACKREFS);
605 }
606 auto getTPCTRDTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPCTRD, MCLABELS); }
607 auto getTPCTRDTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
608 auto getTPCTRDSATracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPCTRD, MCLABELSEXTRA); }
609 auto getTPCTRDSATrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELSEXTRA); }
610 // TRD tracklets
611 gsl::span<const o2::trd::Tracklet64> getTRDTracklets() const;
612 gsl::span<const o2::trd::CalibratedTracklet> getTRDCalibratedTracklets() const;
613 gsl::span<const o2::trd::TriggerRecord> getTRDTriggerRecords() const;
615
616 // TOF
617 const o2::dataformats::MatchInfoTOF& getTOFMatch(GTrackID id) const { return getObject<o2::dataformats::MatchInfoTOF>(id, MATCHES); } // generic match getter
618 // TPC-TOF, made of refitted TPC track and separate matchInfo
619 const o2::dataformats::TrackTPCTOF& getTPCTOFTrack(GTrackID gid) const { return getTrack<o2::dataformats::TrackTPCTOF>(gid); }
620 const o2::dataformats::MatchInfoTOF& getTPCTOFMatch(GTrackID id) const { return getObject<o2::dataformats::MatchInfoTOF>(id, MATCHES); }
621 auto getTPCTOFTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
622 auto getTPCTOFTracks() const { return getTracks<o2::dataformats::TrackTPCTOF>(GTrackID::TPCTOF); }
623 // TPC-TOF matches
624 auto getTPCTOFMatches() const { return getSpan<o2::dataformats::MatchInfoTOF>(GTrackID::TPCTOF, MATCHES); }
625 auto getTPCTOFTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPCTOF, MCLABELS); }
626 // TPC-TRD-TOF matches
627 auto getTPCTRDTOFMatches() const { return getSpan<o2::dataformats::MatchInfoTOF>(GTrackID::TPCTRDTOF, MATCHES); }
628 auto getTPCTRDTOFTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPCTRDTOF, MCLABELS); }
629 // global ITS-TPC-TOF matches
630 const o2::dataformats::TrackTPCITS& getITSTPCTOFTrack(GTrackID id) const; // this is special since global TOF track is just a reference on TPCITS
631 auto getITSTPCTOFMatches() const { return getSpan<o2::dataformats::MatchInfoTOF>(GTrackID::ITSTPCTOF, MATCHES); }
632 auto getITSTPCTOFMatchesMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPCTOF, MCLABELS); }
633 // global ITS-TPC-TRD-TOF matches
634 // const o2::dataformats::TrackTPCITS& getITSTPCTRDTOFTrack(GTrackID id) const; // TODO this is special since global TOF track is just a reference on TPCITS
635 auto getITSTPCTRDTOFMatches() const { return getSpan<o2::dataformats::MatchInfoTOF>(GTrackID::ITSTPCTRDTOF, MATCHES); }
636 auto getITSTPCTRDTOFMatchesMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPCTRDTOF, MCLABELS); }
637
638 // HMPID matches
639 auto getHMPMatches() const { return getSpan<o2::dataformats::MatchInfoHMP>(GTrackID::HMP, MATCHES); }
640 auto getHMPMatchesMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::HMP, MCLABELS); }
641
642 // TOF clusters
643 auto getTOFClusters() const { return getSpan<o2::tof::Cluster>(GTrackID::TOF, CLUSTERS); }
644 auto getTOFClustersMCLabels() const { return mcTOFClusters.get(); }
645
646 // HMPID clusters
647 auto getHMPClusterTriggers() const { return getSpan<o2::hmpid::Trigger>(GTrackID::HMP, CLUSREFS); }
648 auto getHMPClusters() const { return getSpan<o2::hmpid::Cluster>(GTrackID::HMP, CLUSTERS); }
649 auto getHMPClustersMCLabels() const { return mcHMPClusters.get(); }
650
651 // FT0
652 auto getFT0RecPoints() const { return getSpan<o2::ft0::RecPoints>(GTrackID::FT0, TRACKS); }
653 auto getFT0ChannelsData() const { return getSpan<o2::ft0::ChannelDataFloat>(GTrackID::FT0, CLUSTERS); }
654
655 // FV0
656 auto getFV0RecPoints() const { return getSpan<o2::fv0::RecPoints>(GTrackID::FV0, TRACKS); }
657 auto getFV0ChannelsData() const { return getSpan<o2::fv0::ChannelDataFloat>(GTrackID::FV0, CLUSTERS); }
658
659 // FDD
660 auto getFDDRecPoints() const { return getSpan<o2::fdd::RecPoint>(GTrackID::FDD, TRACKS); }
661 auto getFDDChannelsData() const { return getSpan<o2::fdd::ChannelDataFloat>(GTrackID::FDD, CLUSTERS); }
662
663 // ZDC
664 auto getZDCBCRecData() const { return getSpan<o2::zdc::BCRecData>(GTrackID::ZDC, MATCHES); }
665 auto getZDCEnergy() const { return getSpan<o2::zdc::ZDCEnergy>(GTrackID::ZDC, TRACKS); }
666 auto getZDCTDCData() const { return getSpan<o2::zdc::ZDCTDCData>(GTrackID::ZDC, CLUSTERS); }
667 auto getZDCInfo() const { return getSpan<uint16_t>(GTrackID::ZDC, PATTERNS); }
668
669 // CTP
670 auto getCTPDigits() const { return getSpan<const o2::ctp::CTPDigit>(GTrackID::CTP, CLUSTERS); }
671 const o2::ctp::LumiInfo& getCTPLumi() const { return mCTPLumi; }
672
673 // CPV
674 auto getCPVClusters() const { return getSpan<const o2::cpv::Cluster>(GTrackID::CPV, CLUSTERS); }
675 auto getCPVTriggers() const { return getSpan<const o2::cpv::TriggerRecord>(GTrackID::CPV, CLUSREFS); }
676 auto getCPVClustersMCLabels() const { return mcCPVClusters.get(); }
677
678 // PHOS
679 auto getPHOSCells() const { return getSpan<const o2::phos::Cell>(GTrackID::PHS, CLUSTERS); }
680 auto getPHOSTriggers() const { return getSpan<const o2::phos::TriggerRecord>(GTrackID::PHS, CLUSREFS); }
682
683 // EMCAL
684 auto getEMCALCells() const { return getSpan<const o2::emcal::Cell>(GTrackID::EMC, CLUSTERS); }
685 auto getEMCALTriggers() const { return getSpan<const o2::emcal::TriggerRecord>(GTrackID::EMC, CLUSREFS); }
687
688 // Primary vertices
697
698 // Secondary vertices
703
705 auto getV0s() const { return svtxPool.getSpan<o2::dataformats::V0>(V0S); }
707
711
715
716 // Strangeness track
720
721 // Cosmic tracks
726
727 // IRFrames where ITS was reconstructed and tracks were seen (e.g. sync.w-flow mult. selection)
728 auto getIRFramesITS() const { return getSpan<o2::dataformats::IRFrame>(GTrackID::ITS, VARIA); }
729
730 void getTrackTimeITSTPCTRDTOF(GTrackID gid, float& t, float& tErr) const;
731 void getTrackTimeTPCTRDTOF(GTrackID gid, float& t, float& tErr) const;
732 void getTrackTimeITSTPCTOF(GTrackID gid, float& t, float& tErr) const;
733 void getTrackTimeITSTPCTRD(GTrackID gid, float& t, float& tErr) const;
734 void getTrackTimeTPCTRD(GTrackID gid, float& t, float& tErr) const;
735 void getTrackTimeITSTPC(GTrackID gid, float& t, float& tErr) const;
736 void getTrackTimeTPCTOF(GTrackID gid, float& t, float& tErr) const;
737 void getTrackTimeITS(GTrackID gid, float& t, float& tErr) const;
738 void getTrackTimeTPC(GTrackID gid, float& t, float& tErr) const;
739
740 void getTrackTime(GTrackID gid, float& t, float& tErr) const;
741};
742
743} // namespace globaltracking
744} // namespace o2
745
746#endif
Accessor for objects of the same base class located in different containers.
A const (ready only) version of MCTruthContainer.
int32_t i
Accessor for TrackParCov derived objects from multiple containers.
Global index for barrel track: provides provenance (detectors combination), index in respective array...
Definition of a container to keep Monte Carlo truth external to simulation objects.
Defintions for the inter-detector matching type.
Class to refer to the 1st entry and N elements of some group in the continuous container.
auto getSpan(int src) const
access particula source container as a span
const U & get_as(int src, int idx) const
get object as user provided type from explicitly provided source, index
TO BE DONE: extend to generic N body vertex.
Definition Decay3Body.h:26
static mask_t getSourcesMask(const std::string_view srcList)
A container to hold and manage MC truth information/labels.
MUON track external format.
Definition TrackMCHMID.h:33
HMPID cluster implementation.
Definition Cluster.h:27
HMPID Trigger declaration.
Definition Trigger.h:32
MCH track external format.
Definition TrackMCH.h:34
This class defines the MID track.
Definition Track.h:30
GLenum src
Definition glcorearb.h:1767
GLuint index
Definition glcorearb.h:781
GLsizei GLsizei GLchar * source
Definition glcorearb.h:798
Definition of a container to keep/associate and arbitrary number of labels associated to an index wit...
Defining PrimaryVertex explicitly as messageable.
Definition TFIDInfo.h:20
o2::dataformats::StrangeTrack StrangeTrack
Global TPC definitions and constants.
Definition SimTraits.h:167
uint32_t TPCClRefElem
TrackParCovF TrackParCov
Definition Track.h:33
o2::MCCompLabel MCLabel
Definition Digitizer.h:45
o2::dataformats::Decay3BodyIndex Decay3BodyIndex
o2::dataformats::CascadeIndex CascadeIndex
o2::dataformats::V0Index V0Index
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
void addInput(const o2::framework::InputSpec &&isp)
void requestTOFMatches(o2::dataformats::GlobalTrackID::mask_t src, bool mc)
std::unordered_map< std::string, bool > requestMap
void requestTracks(o2::dataformats::GlobalTrackID::mask_t src, bool mc)
void requestClusters(o2::dataformats::GlobalTrackID::mask_t src, bool useMC, o2::detectors::DetID::mask_t skipDetClusters={})
std::vector< o2::framework::InputSpec > inputs
uint32_t getMatchingInputSubSpec() const
bool isRequested(const std::string &t) const
void addFDDRecPoints(o2::framework::ProcessingContext &pc, bool mc)
void addGlobalFwdTracks(o2::framework::ProcessingContext &pc, bool mc)
void addTOFMatchesITSTPCTRD(o2::framework::ProcessingContext &pc, bool mc)
GTrackID getITSContributorGID(GTrackID source) const
const o2::dataformats::MatchInfoTOF & getTPCTOFMatch(GTrackID id) const
void addITSTracks(o2::framework::ProcessingContext &pc, bool mc)
void addHMPMatches(o2::framework::ProcessingContext &pc, bool mc)
const U & getTrack(int src, int id) const
void addTPCTOFTracks(o2::framework::ProcessingContext &pc, bool mc)
GlobalIDSet getSingleDetectorRefs(GTrackID gidx) const
std::unique_ptr< const o2::dataformats::MCTruthContainer< o2::MCCompLabel > > mcTOFClusters
const o2::dataformats::MCTruthContainer< o2::phos::MCLabel > * getPHOSCellsMCLabels() const
const o2::tpc::TrackTPC & getTPCTrack(GTrackID id) const
std::array< AccSlots, GTrackID::NSources > commonPool
void addFT0RecPoints(o2::framework::ProcessingContext &pc, bool mc)
gsl::span< const o2::trd::CalibratedTracklet > getTRDCalibratedTracklets() const
const o2::dataformats::TrackMCHMID & getMCHMIDMatch(GTrackID gid) const
const U & getObject(GTrackID gid, int slotID) const
void addTPCTriggers(o2::framework::ProcessingContext &pc)
const o2::mch::TrackMCH & getMCHTrack(GTrackID gid) const
void addCosmicTracks(o2::framework::ProcessingContext &pc, bool mc)
std::unique_ptr< const std::vector< o2::MCCompLabel > > mcMIDTracks
void addStrangeTracks(o2::framework::ProcessingContext &pc, bool mc)
std::unique_ptr< const o2::dataformats::MCTruthContainer< o2::mid::MCClusterLabel > > mcMIDTrackClusters
bool isMatchSourceLoaded(int src) const
void addMCHClusters(o2::framework::ProcessingContext &pc, bool mc)
void addPVerticesTMP(o2::framework::ProcessingContext &pc, bool mc)
void addITSTPCTracks(o2::framework::ProcessingContext &pc, bool mc)
auto getTPCTRDTrack(GTrackID id) const
auto getTPCTRDTrackMCLabel(GTrackID id) const
auto getTPCITSTrackMCLabel(GTrackID id) const
const o2::tpc::ClusterNativeAccess & getTPCClusters() const
void addMCHTracks(o2::framework::ProcessingContext &pc, bool mc)
void getTrackTimeTPCTRD(GTrackID gid, float &t, float &tErr) const
void createTracksVariadic(T creator, GTrackID::mask_t srcSel=GTrackID::getSourcesMask("all")) const
void addTPCClusters(o2::framework::ProcessingContext &pc, bool mc, bool shmap, bool occmap)
void addEMCALCells(o2::framework::ProcessingContext &pc, bool mc)
void addMIDTracks(o2::framework::ProcessingContext &pc, bool mc)
void addMFTTracks(o2::framework::ProcessingContext &pc, bool mc)
void getTrackTimeITSTPCTRDTOF(GTrackID gid, float &t, float &tErr) const
void getTrackTimeITSTPCTOF(GTrackID gid, float &t, float &tErr) const
void getTrackTimeTPC(GTrackID gid, float &t, float &tErr) const
void addZDCRecEvents(o2::framework::ProcessingContext &pc, bool mc)
const o2::dataformats::V0Index & getV0Idx(int i) const
const o2::itsmft::TrkClusRef & getITSABRef(GTrackID gid) const
void addMCHMIDMatches(o2::framework::ProcessingContext &pc, bool mc)
auto getTPCTOFTrackMCLabel(GTrackID id) const
gsl::span< const o2::trd::TriggerRecord > getTRDTriggerRecords() const
const o2::dataformats::MCTruthContainer< o2::MCCompLabel > * getTRDTrackletsMCLabels() const
void addPVertices(o2::framework::ProcessingContext &pc, bool mc)
void getTrackTimeTPCTRDTOF(GTrackID gid, float &t, float &tErr) const
void addTPCOccMap(o2::framework::ProcessingContext &pc)
void getTrackTimeITS(GTrackID gid, float &t, float &tErr) const
void addTOFMatchesITSTPC(o2::framework::ProcessingContext &pc, bool mc)
void addIRFramesITS(o2::framework::ProcessingContext &pc)
const o2::dataformats::TrackTPCITS & getITSTPCTOFTrack(GTrackID id) const
const o2::dataformats::TrackTPCTOF & getTPCTOFTrack(GTrackID gid) const
auto getTPCTrackMCLabel(GTrackID id) const
const o2::mid::Track & getMIDTrack(GTrackID gid) const
void addTOFClusters(o2::framework::ProcessingContext &pc, bool mc)
const o2::dataformats::CascadeIndex & getCascadeIdx(int i) const
o2::MCCompLabel getTrackMCLabel(GTrackID id) const
GTrackID getTPCContributorGID(GTrackID source) const
std::unique_ptr< o2::trd::RecoInputContainer > inputsTRD
const o2::dataformats::MCTruthContainer< o2::mid::MCClusterLabel > * getMIDClustersMCLabels() const
const o2::track::TrackParCov & getTrackParam(GTrackID gidx) const
std::unique_ptr< const o2::dataformats::MCTruthContainer< o2::MCCompLabel > > mcITSClusters
void getTrackTimeITSTPCTRD(GTrackID gid, float &t, float &tErr) const
void addMFTClusters(o2::framework::ProcessingContext &pc, bool mc)
void addMIDClusters(o2::framework::ProcessingContext &pc, bool mc)
void addTPCTRDTracks(o2::framework::ProcessingContext &pc, bool mc)
const o2::dataformats::ConstMCTruthContainerView< o2::MCCompLabel > * getTPCClustersMCLabels() const
std::unique_ptr< const o2::dataformats::MCTruthContainer< o2::MCCompLabel > > mcMCHClusters
gsl::span< const unsigned char > clusterShMapTPC
externally set TPC clusters sharing map
const o2::MCEventLabel & getPrimaryVertexMCLabel(int i) const
void addTRDTracklets(o2::framework::ProcessingContext &pc, bool mc)
void getTrackTimeITSTPC(GTrackID gid, float &t, float &tErr) const
const o2::dataformats::TrackTPCITS & getTPCITSTrack(GTrackID gid) const
void collectData(o2::framework::ProcessingContext &pc, const DataRequest &request)
void addPHOSCells(o2::framework::ProcessingContext &pc, bool mc)
std::unique_ptr< const o2::dataformats::MCTruthContainer< o2::phos::MCLabel > > mcPHSCells
const o2::mft::TrackMFT & getMFTTrack(GTrackID gid) const
void addCPVClusters(o2::framework::ProcessingContext &pc, bool mc)
void addITSTPCTRDTracks(o2::framework::ProcessingContext &pc, bool mc)
const o2::track::TrackParCov & getTrackParamOut(GTrackID gidx) const
void fillTrackMCLabels(const gsl::span< GTrackID > gids, std::vector< o2::MCCompLabel > &mcinfo) const
const o2::dataformats::Cascade & getCascade(int i) const
void addMFTMCHMatches(o2::framework::ProcessingContext &pc, bool mc)
void getTrackTimeTPCTOF(GTrackID gid, float &t, float &tErr) const
const o2::dataformats::PrimaryVertex & getPrimaryVertex(int i) const
void addTOFMatchesTPCTRD(o2::framework::ProcessingContext &pc, bool mc)
const o2::its::TrackITS & getITSTrack(GTrackID gid) const
const U & getObject(int src, int index, int slotID) const
std::unique_ptr< const o2::dataformats::MCTruthContainer< o2::mid::MCClusterLabel > > mcMIDClusters
std::unique_ptr< const o2::dataformats::MCTruthContainer< o2::emcal::MCLabel > > mcEMCCells
std::unique_ptr< o2::tpc::internal::getWorkflowTPCInput_ret > inputsTPCclusters
void addCTPDigits(o2::framework::ProcessingContext &pc, bool mc)
void addTPCTracks(o2::framework::ProcessingContext &pc, bool mc)
const o2::dataformats::TrackCosmics & getCosmicTrack(int i) const
std::unique_ptr< const o2::dataformats::MCTruthContainer< o2::MCCompLabel > > mcCPVClusters
void addFV0RecPoints(o2::framework::ProcessingContext &pc, bool mc)
gsl::span< const U > getTracks(int src) const
void createTracks(std::function< bool(const o2::track::TrackParCov &, GTrackID)> const &creator) const
void getTrackTime(GTrackID gid, float &t, float &tErr) const
void addSVertices(o2::framework::ProcessingContext &pc, bool)
const U & getTrack(GTrackID gid) const
auto getITSTPCTRDTrack(GTrackID id) const
void addITSClusters(o2::framework::ProcessingContext &pc, bool mc)
auto getITSTPCTRDTrackMCLabel(GTrackID id) const
void addHMPClusters(o2::framework::ProcessingContext &pc, bool mc)
const o2::ctp::LumiInfo & getCTPLumi() const
gsl::span< const unsigned int > occupancyMapTPC
externally set TPC clusters occupancy map
auto getITSTPCTRDSATrackMCLabel(GTrackID id) const
std::unique_ptr< const o2::dataformats::MCTruthContainer< o2::MCCompLabel > > mcHMPClusters
const o2::dataformats::V0 & getV0(int i) const
std::array< GTrackID, GTrackID::NSources > GlobalIDSet
auto getTPCTRDSATrackMCLabel(GTrackID id) const
auto getCosmicTrackMCLabel(int i) const
static constexpr float PS2MUS
const o2::dataformats::StrangeTrack & getStrangeTrack(int i) const
gsl::span< const o2::trd::Tracklet64 > getTRDTracklets() const
const o2::dataformats::MCTruthContainer< o2::emcal::MCLabel > * getEMCALCellsMCLabels() const
const o2::dataformats::MatchInfoTOF & getTOFMatch(GTrackID id) const
gsl::span< const U > getSpan(int src, int slotID) const
const o2::dataformats::MCTruthContainer< o2::mid::MCClusterLabel > * getMIDTracksClusterMCLabels() const
const o2::dataformats::GlobalFwdTrack & getGlobalFwdTrack(GTrackID gid) const
Trigger info including the orbit.