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 requestTPCTriggers();
229 void requestTOFClusters(bool mc);
230 void requestTRDTracklets(bool mc);
231 void requestMCHClusters(bool mc);
232 void requestMIDClusters(bool mc);
233 void requestHMPClusters(bool mc);
234 void requestHMPMatches(bool mc); // no input available at the moment
235
236 void requestCTPDigits(bool mc);
237
238 void requestPHOSCells(bool mc);
239 void requestEMCALCells(bool mc);
240 void requestCPVClusters(bool mc);
241
242 void requestCoscmicTracks(bool mc);
243
244 void requestPrimaryVertices(bool mc);
245 void requestPrimaryVerticesTMP(bool mc);
246 void requestSecondaryVertices(bool mc);
247 void requestStrangeTracks(bool mc);
248
249 void requestIRFramesITS();
250
251#ifdef ENABLE_UPGRADES
252 void requestIT3Clusters(bool mc);
253#endif
254};
255
256// Helper class to requested data.
257// Most common data have dedicated getters, some need to be called with returned typa as a template.
258// In general on either gets a gsl::span<const Type> via getter like e.g. getITSTracks()
259// of a reference to particular track, i.e. getITSTrack(GlobalTrackID id).
260// Note that random access like getITSTracks()[i] has an overhead, since for every call a span is created.
261// Therefore, for the random access better to use direct getter, i.e. auto& tr = getITSTrack(gid)
262// while for looping over the whole span first create a span then iterate over it.
263
267
277 MCLABELS, // track labels
278 MCLABELSEXTRA, // additonal labels, like TOF clusters matching label (not sure TOF really needs it)
279 VARIA, // misc data, which does not fit to other categories
281 };
282
283 // slots to register primary vertex data
284 enum PVTXSlots { PVTX, // Primary vertices
285 PVTX_TRMTC, // matched track indices
286 PVTX_TRMTCREFS, // PV -> matched tracks referencing object
287 PVTX_CONTID, // contributors indices
288 PVTX_CONTIDREFS, // PV -> contributors indices
289 PVTX_MCTR, // PV MC label
291
292 // slots to register secondary vertex data
293 enum SVTXSlots { V0SIDX, // V0s indices
294 V0S, // V0 objects
295 PVTX_V0REFS, // PV -> V0 references
296 CASCSIDX, // Cascade indices
297 CASCS, // Cascade objects
298 PVTX_CASCREFS, // PV -> Cascade reference
299 DECAY3BODYIDX, // 3-body decay indices
300 DECAY3BODY, // 3-body decay objects
301 PVTX_3BODYREFS, // PV -> 3-body decay references
303
304 // slots to register strangeness tracking data
310
311 // slots for cosmics
315
316 using AccSlots = o2::dataformats::AbstractRefAccessor<int, NCOMMONSLOTS>; // int here is a dummy placeholder
322 using GlobalIDSet = std::array<GTrackID, GTrackID::NSources>;
323
324 static constexpr float PS2MUS = 1e-6;
325
327
328 std::array<AccSlots, GTrackID::NSources> commonPool;
329 PVertexAccessor pvtxPool; // containers for primary vertex related objects
330 SVertexAccessor svtxPool; // containers for secondary vertex related objects
331 STrackAccessor strkPool; // containers for strangeness tracking related objects
332 CosmicsAccessor cosmPool; // containers for cosmics track data
333
334 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcITSClusters;
335 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcTOFClusters;
336 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcHMPClusters;
337 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcCPVClusters;
338 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcMCHClusters;
339 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::phos::MCLabel>> mcPHSCells;
340 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::emcal::MCLabel>> mcEMCCells;
341 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::mid::MCClusterLabel>> mcMIDTrackClusters;
342 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::mid::MCClusterLabel>> mcMIDClusters;
343 std::unique_ptr<const std::vector<o2::MCCompLabel>> mcMIDTracks;
345
346 gsl::span<const unsigned char> clusterShMapTPC;
347 gsl::span<const unsigned int> occupancyMapTPC;
348
349 std::unique_ptr<o2::tpc::internal::getWorkflowTPCInput_ret> inputsTPCclusters; // special struct for TPC clusters access
350 std::unique_ptr<o2::trd::RecoInputContainer> inputsTRD; // special struct for TRD tracklets, trigger records
351
353 void createTracks(std::function<bool(const o2::track::TrackParCov&, GTrackID)> const& creator) const;
354 template <class T>
355 void createTracksVariadic(T creator, GTrackID::mask_t srcSel = GTrackID::getSourcesMask("all")) const;
356 void fillTrackMCLabels(const gsl::span<GTrackID> gids, std::vector<o2::MCCompLabel>& mcinfo) const;
357
363
372
376
379 void addTPCClusters(o2::framework::ProcessingContext& pc, bool mc, bool shmap, bool occmap);
386
390
392
394
398
400
404
406
408
409#ifdef ENABLE_UPGRADES
410 void addIT3Clusters(o2::framework::ProcessingContext& pc, bool mc);
411#endif
412
413 // custom getters
414
415 // get contributors from single detectors: return array with sources set to all contributing GTrackIDs
417
418 // get contributing TPC GTrackID to the source. If source gidx is not contributed by TPC,
419 // returned GTrackID.isSourceSet()==false
421
422 // get contributing ITS GTrackID to the source. If source gidx is not contributed by ITS,
423 // returned GTrackID.isSourceSet()==false
425
426 // check if track source attached
427 bool isTrackSourceLoaded(int src) const;
428
429 // check if match source attached
430 bool isMatchSourceLoaded(int src) const { return commonPool[src].isLoaded(MATCHES); }
431
432 // -------------------------------
433 // generic getter for span
434 template <typename U>
435 gsl::span<const U> getSpan(int src, int slotID) const
436 {
437 return commonPool[src].getSpan<U>(slotID);
438 }
439
440 // generic getter for an object in the attaches span
441 template <typename U>
442 const U& getObject(int src, int index, int slotID) const
443 {
444 return commonPool[src].get_as<U>(slotID, index);
445 }
446 template <typename U>
447 const U& getObject(GTrackID gid, int slotID) const
448 {
449 return getObject<U>(gid.getSource(), gid.getIndex(), slotID);
450 }
451 // <<TODO Make this private
452
453 //-------------------------
454 // in general, U can be a TrackParCov or particular detector track, e.g. o2::its::TrackITS
455 template <typename U>
456 gsl::span<const U> getTracks(int src) const
457 {
458 return getSpan<U>(src, TRACKS);
459 }
460
461 template <typename U>
462 const U& getTrack(int src, int id) const
463 {
464 return getObject<U>(src, id, TRACKS);
465 }
466
467 template <typename U>
468 const U& getTrack(GTrackID gid) const
469 {
470 return getObject<U>(gid, TRACKS);
471 }
472
474 {
475 // RS FIXME: THIS IS TEMPORARY: some labels are still not implemented: in this case return dummy label
476 return commonPool[id.getSource()].getSize(MCLABELS) ? getObject<o2::MCCompLabel>(id, MCLABELS) : o2::MCCompLabel{};
477 // return getObject<o2::MCCompLabel>(id, MCLABELS);
478 }
479
480 //--------------------------------------------
481 // fetch track param
483 // fetch outer param (not all track types might have it)
485
486 //--------------------------------------------
487 // ITS
488 const o2::its::TrackITS& getITSTrack(GTrackID gid) const { return getTrack<o2::its::TrackITS>(gid); }
489 auto getITSTracks() const { return getTracks<o2::its::TrackITS>(GTrackID::ITS); }
490 auto getITSTracksROFRecords() const { return getSpan<o2::itsmft::ROFRecord>(GTrackID::ITS, TRACKREFS); }
491 auto getITSTracksClusterRefs() const { return getSpan<int>(GTrackID::ITS, INDICES); }
492 auto getITSTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITS, MCLABELS); }
493 auto getITSABRefs() const { return getSpan<o2::itsmft::TrkClusRef>(GTrackID::ITSAB, TRACKREFS); }
494 const o2::itsmft::TrkClusRef& getITSABRef(GTrackID gid) const { return getObject<o2::itsmft::TrkClusRef>(gid, TRACKREFS); }
495 auto getITSABClusterRefs() const { return getSpan<int>(GTrackID::ITSAB, INDICES); }
496 auto getITSABMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSAB, MCLABELS); }
497
498 // ITS clusters
499 auto getITSClustersROFRecords() const { return getSpan<o2::itsmft::ROFRecord>(GTrackID::ITS, CLUSREFS); }
500 auto getITSClusters() const { return getSpan<o2::itsmft::CompClusterExt>(GTrackID::ITS, CLUSTERS); }
501 auto getITSClustersPatterns() const { return getSpan<unsigned char>(GTrackID::ITS, PATTERNS); }
502 auto getITSClustersMCLabels() const { return mcITSClusters.get(); }
503
504 // MFT
505 const o2::mft::TrackMFT& getMFTTrack(GTrackID gid) const { return getTrack<o2::mft::TrackMFT>(gid); }
506 auto getMFTTracks() const { return getTracks<o2::mft::TrackMFT>(GTrackID::MFT); }
507 auto getMFTTracksROFRecords() const { return getSpan<o2::itsmft::ROFRecord>(GTrackID::MFT, TRACKREFS); }
508 auto getMFTTracksClusterRefs() const { return getSpan<int>(GTrackID::MFT, INDICES); }
509 auto getMFTTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MFT, MCLABELS); }
510
511 // MFT clusters
512 auto getMFTClustersROFRecords() const { return getSpan<o2::itsmft::ROFRecord>(GTrackID::MFT, CLUSREFS); }
513 auto getMFTClusters() const { return getSpan<o2::itsmft::CompClusterExt>(GTrackID::MFT, CLUSTERS); }
514 auto getMFTClustersPatterns() const { return getSpan<unsigned char>(GTrackID::MFT, PATTERNS); }
515
516 // MCH
517 const o2::mch::TrackMCH& getMCHTrack(GTrackID gid) const { return getTrack<o2::mch::TrackMCH>(gid); }
518 auto getMCHTracks() const { return getTracks<o2::mch::TrackMCH>(GTrackID::MCH); }
519 auto getMCHTracksROFRecords() const { return getSpan<o2::mch::ROFRecord>(GTrackID::MCH, TRACKREFS); }
520 auto getMCHTrackClusters() const { return getSpan<o2::mch::Cluster>(GTrackID::MCH, INDICES); }
521 auto getMCHTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MCH, MCLABELS); }
522
523 // MCH clusters
524 auto getMCHClusterROFRecords() const { return getSpan<o2::mch::ROFRecord>(GTrackID::MCH, CLUSREFS); }
525 auto getMCHClusters() const { return getSpan<o2::mch::Cluster>(GTrackID::MCH, CLUSTERS); }
526 auto getMCHClustersMCLabels() const { return mcMCHClusters.get(); }
527
528 // MID
529 const o2::mid::Track& getMIDTrack(GTrackID gid) const { return getTrack<o2::mid::Track>(gid); }
530 auto getMIDTracks() const { return getTracks<o2::mid::Track>(GTrackID::MID); }
531 auto getMIDTracksROFRecords() const { return getSpan<o2::mid::ROFRecord>(GTrackID::MID, TRACKREFS); }
532 auto getMIDTrackClusters() const { return getSpan<o2::mid::Cluster>(GTrackID::MID, INDICES); }
533 auto getMIDTrackClustersROFRecords() const { return getSpan<o2::mid::ROFRecord>(GTrackID::MID, MATCHES); }
534 auto getMIDTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MID, MCLABELS); }
536
537 // MID clusters
538 auto getMIDClusterROFRecords() const { return getSpan<o2::mid::ROFRecord>(GTrackID::MID, CLUSREFS); }
539 auto getMIDClusters() const { return getSpan<o2::mid::Cluster>(GTrackID::MID, CLUSTERS); }
541
542 // TPC
543 const o2::tpc::TrackTPC& getTPCTrack(GTrackID id) const { return getTrack<o2::tpc::TrackTPC>(id); }
544 auto getTPCTracks() const { return getTracks<o2::tpc::TrackTPC>(GTrackID::TPC); }
545 auto getTPCTracksClusterRefs() const { return getSpan<o2::tpc::TPCClRefElem>(GTrackID::TPC, INDICES); }
546 auto getTPCTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPC, MCLABELS); }
547 auto getTPCTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
550 auto getTPCTriggers() const { return getSpan<o2::tpc::TriggerInfoDLBZS>(GTrackID::TPC, MATCHES); }
551
552 // ITS-TPC
553 const o2::dataformats::TrackTPCITS& getTPCITSTrack(GTrackID gid) const { return getTrack<o2::dataformats::TrackTPCITS>(gid); }
554 auto getTPCITSTracks() const { return getTracks<o2::dataformats::TrackTPCITS>(GTrackID::ITSTPC); }
555 auto getTPCITSTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPC, MCLABELS); }
556 auto getTPCITSTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
557
558 // MFT-MCH
559 const o2::dataformats::GlobalFwdTrack& getGlobalFwdTrack(GTrackID gid) const { return getTrack<o2::dataformats::GlobalFwdTrack>(gid); }
560 auto getGlobalFwdTracks() const { return getTracks<o2::dataformats::GlobalFwdTrack>(GTrackID::MFTMCH); }
561 auto getMFTMCHMatches() const { return getSpan<o2::dataformats::MatchInfoFwd>(GTrackID::MFTMCH, MATCHES); }
562 auto getGlobalFwdTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MFTMCH, MCLABELS); }
563
564 // MCH-MID
565 const o2::dataformats::TrackMCHMID& getMCHMIDMatch(GTrackID gid) const { return getObject<o2::dataformats::TrackMCHMID>(gid, MATCHES); }
566 auto getMCHMIDMatches() const { return getSpan<o2::dataformats::TrackMCHMID>(GTrackID::MCHMID, MATCHES); }
567 auto getMCHMIDMatchesMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MCHMID, MCLABELS); }
568
569 // ITS-TPC-TRD, since the TrackTRD track is just an alias, forward-declaring it does not work, need to keep template
570 template <class U>
572 {
573 return getTrack<U>(id);
574 }
575 template <class U>
577 {
578 return getTracks<U>(GTrackID::ITSTPCTRD);
579 }
581 {
582 return getSpan<o2::trd::TrackTriggerRecord>(GTrackID::ITSTPCTRD, TRACKREFS);
583 }
584 auto getITSTPCTRDTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPCTRD, MCLABELS); }
585 auto getITSTPCTRDTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
586 auto getITSTPCTRDSATracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPCTRD, MCLABELSEXTRA); }
587 auto getITSTPCTRDSATrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELSEXTRA); }
588
589 // TPC-TRD
590 template <class U>
592 {
593 return getTrack<U>(id);
594 }
595 template <class U>
596 auto getTPCTRDTracks() const
597 {
598 return getTracks<U>(GTrackID::TPCTRD);
599 }
600 auto getTPCTRDTriggers() const
601 {
602 return getSpan<o2::trd::TrackTriggerRecord>(GTrackID::TPCTRD, TRACKREFS);
603 }
604 auto getTPCTRDTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPCTRD, MCLABELS); }
605 auto getTPCTRDTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
606 auto getTPCTRDSATracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPCTRD, MCLABELSEXTRA); }
607 auto getTPCTRDSATrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELSEXTRA); }
608 // TRD tracklets
609 gsl::span<const o2::trd::Tracklet64> getTRDTracklets() const;
610 gsl::span<const o2::trd::CalibratedTracklet> getTRDCalibratedTracklets() const;
611 gsl::span<const o2::trd::TriggerRecord> getTRDTriggerRecords() const;
613
614 // TOF
615 const o2::dataformats::MatchInfoTOF& getTOFMatch(GTrackID id) const { return getObject<o2::dataformats::MatchInfoTOF>(id, MATCHES); } // generic match getter
616 // TPC-TOF, made of refitted TPC track and separate matchInfo
617 const o2::dataformats::TrackTPCTOF& getTPCTOFTrack(GTrackID gid) const { return getTrack<o2::dataformats::TrackTPCTOF>(gid); }
618 const o2::dataformats::MatchInfoTOF& getTPCTOFMatch(GTrackID id) const { return getObject<o2::dataformats::MatchInfoTOF>(id, MATCHES); }
619 auto getTPCTOFTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
620 auto getTPCTOFTracks() const { return getTracks<o2::dataformats::TrackTPCTOF>(GTrackID::TPCTOF); }
621 // TPC-TOF matches
622 auto getTPCTOFMatches() const { return getSpan<o2::dataformats::MatchInfoTOF>(GTrackID::TPCTOF, MATCHES); }
623 auto getTPCTOFTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPCTOF, MCLABELS); }
624 // TPC-TRD-TOF matches
625 auto getTPCTRDTOFMatches() const { return getSpan<o2::dataformats::MatchInfoTOF>(GTrackID::TPCTRDTOF, MATCHES); }
626 auto getTPCTRDTOFTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPCTRDTOF, MCLABELS); }
627 // global ITS-TPC-TOF matches
628 const o2::dataformats::TrackTPCITS& getITSTPCTOFTrack(GTrackID id) const; // this is special since global TOF track is just a reference on TPCITS
629 auto getITSTPCTOFMatches() const { return getSpan<o2::dataformats::MatchInfoTOF>(GTrackID::ITSTPCTOF, MATCHES); }
630 auto getITSTPCTOFMatchesMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPCTOF, MCLABELS); }
631 // global ITS-TPC-TRD-TOF matches
632 // const o2::dataformats::TrackTPCITS& getITSTPCTRDTOFTrack(GTrackID id) const; // TODO this is special since global TOF track is just a reference on TPCITS
633 auto getITSTPCTRDTOFMatches() const { return getSpan<o2::dataformats::MatchInfoTOF>(GTrackID::ITSTPCTRDTOF, MATCHES); }
634 auto getITSTPCTRDTOFMatchesMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPCTRDTOF, MCLABELS); }
635
636 // HMPID matches
637 auto getHMPMatches() const { return getSpan<o2::dataformats::MatchInfoHMP>(GTrackID::HMP, MATCHES); }
638 auto getHMPMatchesMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::HMP, MCLABELS); }
639
640 // TOF clusters
641 auto getTOFClusters() const { return getSpan<o2::tof::Cluster>(GTrackID::TOF, CLUSTERS); }
642 auto getTOFClustersMCLabels() const { return mcTOFClusters.get(); }
643
644 // HMPID clusters
645 auto getHMPClusterTriggers() const { return getSpan<o2::hmpid::Trigger>(GTrackID::HMP, CLUSREFS); }
646 auto getHMPClusters() const { return getSpan<o2::hmpid::Cluster>(GTrackID::HMP, CLUSTERS); }
647 auto getHMPClustersMCLabels() const { return mcHMPClusters.get(); }
648
649 // FT0
650 auto getFT0RecPoints() const { return getSpan<o2::ft0::RecPoints>(GTrackID::FT0, TRACKS); }
651 auto getFT0ChannelsData() const { return getSpan<o2::ft0::ChannelDataFloat>(GTrackID::FT0, CLUSTERS); }
652
653 // FV0
654 auto getFV0RecPoints() const { return getSpan<o2::fv0::RecPoints>(GTrackID::FV0, TRACKS); }
655 auto getFV0ChannelsData() const { return getSpan<o2::fv0::ChannelDataFloat>(GTrackID::FV0, CLUSTERS); }
656
657 // FDD
658 auto getFDDRecPoints() const { return getSpan<o2::fdd::RecPoint>(GTrackID::FDD, TRACKS); }
659 auto getFDDChannelsData() const { return getSpan<o2::fdd::ChannelDataFloat>(GTrackID::FDD, CLUSTERS); }
660
661 // ZDC
662 auto getZDCBCRecData() const { return getSpan<o2::zdc::BCRecData>(GTrackID::ZDC, MATCHES); }
663 auto getZDCEnergy() const { return getSpan<o2::zdc::ZDCEnergy>(GTrackID::ZDC, TRACKS); }
664 auto getZDCTDCData() const { return getSpan<o2::zdc::ZDCTDCData>(GTrackID::ZDC, CLUSTERS); }
665 auto getZDCInfo() const { return getSpan<uint16_t>(GTrackID::ZDC, PATTERNS); }
666
667 // CTP
668 auto getCTPDigits() const { return getSpan<const o2::ctp::CTPDigit>(GTrackID::CTP, CLUSTERS); }
669 const o2::ctp::LumiInfo& getCTPLumi() const { return mCTPLumi; }
670
671 // CPV
672 auto getCPVClusters() const { return getSpan<const o2::cpv::Cluster>(GTrackID::CPV, CLUSTERS); }
673 auto getCPVTriggers() const { return getSpan<const o2::cpv::TriggerRecord>(GTrackID::CPV, CLUSREFS); }
674 auto getCPVClustersMCLabels() const { return mcCPVClusters.get(); }
675
676 // PHOS
677 auto getPHOSCells() const { return getSpan<const o2::phos::Cell>(GTrackID::PHS, CLUSTERS); }
678 auto getPHOSTriggers() const { return getSpan<const o2::phos::TriggerRecord>(GTrackID::PHS, CLUSREFS); }
680
681 // EMCAL
682 auto getEMCALCells() const { return getSpan<const o2::emcal::Cell>(GTrackID::EMC, CLUSTERS); }
683 auto getEMCALTriggers() const { return getSpan<const o2::emcal::TriggerRecord>(GTrackID::EMC, CLUSREFS); }
685
686 // Primary vertices
695
696 // Secondary vertices
701
703 auto getV0s() const { return svtxPool.getSpan<o2::dataformats::V0>(V0S); }
705
709
713
714 // Strangeness track
718
719 // Cosmic tracks
724
725 // IRFrames where ITS was reconstructed and tracks were seen (e.g. sync.w-flow mult. selection)
726 auto getIRFramesITS() const { return getSpan<o2::dataformats::IRFrame>(GTrackID::ITS, VARIA); }
727
728 void getTrackTimeITSTPCTRDTOF(GTrackID gid, float& t, float& tErr) const;
729 void getTrackTimeTPCTRDTOF(GTrackID gid, float& t, float& tErr) const;
730 void getTrackTimeITSTPCTOF(GTrackID gid, float& t, float& tErr) const;
731 void getTrackTimeITSTPCTRD(GTrackID gid, float& t, float& tErr) const;
732 void getTrackTimeTPCTRD(GTrackID gid, float& t, float& tErr) const;
733 void getTrackTimeITSTPC(GTrackID gid, float& t, float& tErr) const;
734 void getTrackTimeTPCTOF(GTrackID gid, float& t, float& tErr) const;
735 void getTrackTimeITS(GTrackID gid, float& t, float& tErr) const;
736 void getTrackTimeTPC(GTrackID gid, float& t, float& tErr) const;
737
738 void getTrackTime(GTrackID gid, float& t, float& tErr) const;
739};
740
741} // namespace globaltracking
742} // namespace o2
743
744#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 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.