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
31#include <gsl/span>
32#include <memory>
33
34// We forward declare the internal structures, to reduce header dependencies.
35// Please include headers for TPC Hits or TRD tracklets directly (DataFormatsTPC/WorkflowHelper.h / DataFormatsTRD/RecoInputContainer.h)
36namespace o2::tpc
37{
38class TrackTPC;
39using TPCClRefElem = uint32_t;
41struct TriggerInfoDLBZS;
42namespace internal
43{
45} // namespace internal
46} // namespace o2::tpc
47
48namespace o2::trd
49{
50class Tracklet64;
51class CalibratedTracklet;
52class TriggerRecord;
53class TrackTriggerRecord;
54// class TrackTRD;
55struct RecoInputContainer;
56} // namespace o2::trd
57
58namespace o2::framework
59{
60class ProcessingContext;
61struct InputSpec;
62} // namespace o2::framework
63
64namespace o2::its
65{
66class TrackITS;
67}
68
69namespace o2::mft
70{
71class TrackMFT;
72}
73
74namespace o2::mch
75{
76class TrackMCH;
77class ROFRecord;
78class Cluster;
79} // namespace o2::mch
80
81namespace o2::mid
82{
83class Cluster;
84class ROFRecord;
85class Track;
86class MCClusterLabel;
87class MCLabel;
88} // namespace o2::mid
89
90namespace o2::itsmft
91{
92class ROFRecord;
93class CompClusterExt;
94class TrkClusRef;
95} // namespace o2::itsmft
96
97namespace o2::tof
98{
99class Cluster;
100}
101
102namespace o2::hmpid
103{
104class Cluster;
105class Trigger;
106} // namespace o2::hmpid
107
108namespace o2::ft0
109{
110class RecPoints;
111class ChannelDataFloat;
112} // namespace o2::ft0
113
114namespace o2::fv0
115{
116class RecPoints;
117class ChannelDataFloat;
118} // namespace o2::fv0
119
120namespace o2::zdc
121{
122class BCRecData;
123class ZDCEnergy;
124class ZDCTDCData;
125} // namespace o2::zdc
126
127namespace o2::fdd
128{
129class RecPoint;
130class ChannelDataFloat;
131} // namespace o2::fdd
132
133namespace o2::ctp
134{
135class CTPDigit;
136} // namespace o2::ctp
137
138namespace o2::phos
139{
140class Cell;
141class TriggerRecord;
142class MCLabel;
143} // namespace o2::phos
144
145namespace o2::cpv
146{
147class Cluster;
148class TriggerRecord;
149} // namespace o2::cpv
150
151namespace o2::emcal
152{
153class Cell;
154class TriggerRecord;
155class MCLabel;
156} // namespace o2::emcal
157
158namespace o2::dataformats
159{
160class TrackTPCITS;
161class TrackTPCTOF;
162class MatchInfoTOF;
163class MatchInfoHMP;
164class PrimaryVertex;
165class VtxTrackIndex;
166class VtxTrackRef;
167class V0;
168class V0Index;
169class Cascade;
170class CascadeIndex;
171class Decay3Body;
172class Decay3BodyIndex;
173class StrangeTrack;
174class TrackCosmics;
175struct TrackCosmicsExtended;
176struct CosmicsTFInfo;
177class GlobalFwdTrack;
178class MatchInfoFwd;
179class TrackMCHMID;
180class IRFrame;
181} // namespace o2::dataformats
182
183namespace o2
184{
185class MCEventLabel;
186}
187
188namespace o2
189{
190namespace globaltracking
191{
192
193// max number of layers for which the ITS/MFT clusters, ROF records and patterns can be provided separately
196
197// helper class to request DPL input data from the processor specs definition
199 std::vector<o2::framework::InputSpec> inputs;
200 std::unordered_map<std::string, bool> requestMap;
202 bool ITSPerLayer = false; // ITS clusters, ROFs and patterns are provided per layer
203 bool MFTPerLayer = false; // MFT clusters, ROFs and patterns are provided per layer
204
205 auto getITSPerLayer() const { return ITSPerLayer; }
206 auto getMFTPerLayer() const { return MFTPerLayer; }
207 void setITSPerLayer(bool v = true);
208 void setMFTPerLayer(bool v = true);
209
214 uint32_t getMatchingInputSubSpec() const { return getSubSpec(matchingInputType); }
215
216 void addInput(const o2::framework::InputSpec&& isp);
217
218 bool isRequested(const std::string& t) const { return !t.empty() && requestMap.find(t) != requestMap.end(); }
221
222 void requestITSTracks(bool mc);
223 void requestMFTTracks(bool mc);
224 void requestMCHTracks(bool mc);
225 void requestMIDTracks(bool mc);
226 void requestTPCTracks(bool mc);
227 void requestITSTPCTracks(bool mc);
228 void requestGlobalFwdTracks(bool mc);
229 void requestMFTMCHMatches(bool mc);
230 void requestMCHMIDMatches(bool mc);
231 void requestTPCTOFTracks(bool mc);
232 void requestITSTPCTRDTracks(bool mc);
233 void requestTPCTRDTracks(bool mc);
235 void requestFT0RecPoints(bool mc);
236 void requestFV0RecPoints(bool mc);
237 void requestFDDRecPoints(bool mc);
238 void requestZDCRecEvents(bool mc);
239 void requestITSClusters(bool mc);
240 void requestMFTClusters(bool mc);
241 void requestTPCClusters(bool mc);
242 void requestTPCOccMap();
243 void requestTPCTriggers();
244 void requestTOFClusters(bool mc);
245 void requestTRDTracklets(bool mc);
246 void requestMCHClusters(bool mc);
247 void requestMIDClusters(bool mc);
248 void requestHMPClusters(bool mc);
249 void requestHMPMatches(bool mc); // no input available at the moment
250
251 void requestCTPDigits(bool mc);
252
253 void requestPHOSCells(bool mc);
254 void requestEMCALCells(bool mc);
255 void requestCPVClusters(bool mc);
256
257 void requestCoscmicTracks(bool mc);
258 void requestCosmicExtTracks(bool mc); // MC is not supported, argument is for uniformity
259
260 void requestPrimaryVertices(bool mc);
261 void requestPrimaryVerticesTMP(bool mc);
262 void requestSecondaryVertices(bool mc);
263 void requestStrangeTracks(bool mc);
264
265 void requestIRFramesITS();
266
267#ifdef ENABLE_UPGRADES
268 void requestIT3Clusters(bool mc);
269#endif
270};
271
272// Helper class to requested data.
273// Most common data have dedicated getters, some need to be called with returned typa as a template.
274// In general on either gets a gsl::span<const Type> via getter like e.g. getITSTracks()
275// of a reference to particular track, i.e. getITSTrack(GlobalTrackID id).
276// Note that random access like getITSTracks()[i] has an overhead, since for every call a span is created.
277// Therefore, for the random access better to use direct getter, i.e. auto& tr = getITSTrack(gid)
278// while for looping over the whole span first create a span then iterate over it.
279
283
293 MCLABELS, // track labels
294 MCLABELSEXTRA, // additonal labels, like TOF clusters matching label (not sure TOF really needs it)
295 VARIA, // misc data, which does not fit to other categories
297 };
298
299 // slots to register primary vertex data
300 enum PVTXSlots { PVTX, // Primary vertices
301 PVTX_TRMTC, // matched track indices
302 PVTX_TRMTCREFS, // PV -> matched tracks referencing object
303 PVTX_CONTID, // contributors indices
304 PVTX_CONTIDREFS, // PV -> contributors indices
305 PVTX_MCTR, // PV MC label
307
308 // slots to register secondary vertex data
309 enum SVTXSlots { V0SIDX, // V0s indices
310 V0S, // V0 objects
311 PVTX_V0REFS, // PV -> V0 references
312 CASCSIDX, // Cascade indices
313 CASCS, // Cascade objects
314 PVTX_CASCREFS, // PV -> Cascade reference
315 DECAY3BODYIDX, // 3-body decay indices
316 DECAY3BODY, // 3-body decay objects
317 PVTX_3BODYREFS, // PV -> 3-body decay references
319
320 // slots to register strangeness tracking data
326
327 // slots for cosmics
330 COSMEXT_TRACKS, // extended cosmics (with clusters), no MC
331 COSMEXT_TFINFO, // per-TF info of the extended cosmics
333
334 // slots to register ITS/MFT clusters data (per layer, or all layers together in the slot 0)
335 enum ITSMFTClusSlots { ITSMFT_ROF, // ROF records
336 ITSMFT_CLS, // compact clusters
337 ITSMFT_PAT, // cluster patterns
339
340 using AccSlots = o2::dataformats::AbstractRefAccessor<int, NCOMMONSLOTS>; // int here is a dummy placeholder
348 using GlobalIDSet = std::array<GTrackID, GTrackID::NSources>;
349
350 static constexpr float PS2MUS = 1e-6;
351
353
354 std::array<AccSlots, GTrackID::NSources> commonPool;
355 PVertexAccessor pvtxPool; // containers for primary vertex related objects
356 SVertexAccessor svtxPool; // containers for secondary vertex related objects
357 STrackAccessor strkPool; // containers for strangeness tracking related objects
358 CosmicsAccessor cosmPool; // containers for cosmics track data
359
360 bool ITSPerLayer = false; // ITS clusters, ROFs and patterns are provided per layer
361 bool MFTPerLayer = false; // MFT clusters, ROFs and patterns are provided per layer
362
363 std::array<ITSClusAccessor, NITSMFTCLUSSLOTS> ITSClustersData; // [ROF/Clus/Patt][MaxITSLayers slots, non-staggered == 0]
364 std::array<MFTClusAccessor, NITSMFTCLUSSLOTS> MFTClustersData; // [ROF/Clus/Patt][MaxMFTLayers slots, non-staggered == 0]
365
366 std::array<std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>>, MaxITSLayers> mcITSClusters;
367 std::array<std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>>, MaxMFTLayers> mcMFTClusters;
368 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcTOFClusters;
369 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcHMPClusters;
370 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcCPVClusters;
371 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::MCCompLabel>> mcMCHClusters;
372 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::phos::MCLabel>> mcPHSCells;
373 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::emcal::MCLabel>> mcEMCCells;
374 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::mid::MCClusterLabel>> mcMIDTrackClusters;
375 std::unique_ptr<const o2::dataformats::MCTruthContainer<o2::mid::MCClusterLabel>> mcMIDClusters;
376 std::unique_ptr<const std::vector<o2::MCCompLabel>> mcMIDTracks;
378
379 std::shared_ptr<const void> cosmExtHolder[2]; // owners of the extended cosmics and TF info objects deserialized from the messages
380 gsl::span<const unsigned char> clusterShMapTPC;
381 gsl::span<const unsigned int> occupancyMapTPC;
382
383 std::unique_ptr<o2::tpc::internal::getWorkflowTPCInput_ret> inputsTPCclusters; // special struct for TPC clusters access
384 std::unique_ptr<o2::trd::RecoInputContainer> inputsTRD; // special struct for TRD tracklets, trigger records
385
386 auto getITSPerLayer() const { return ITSPerLayer; }
387 auto getMFTPerLayer() const { return MFTPerLayer; }
388
390 void createTracks(std::function<bool(const o2::track::TrackParCov&, GTrackID)> const& creator) const;
391 template <class T>
392 void createTracksVariadic(T creator, GTrackID::mask_t srcSel = GTrackID::getSourcesMask("all")) const;
393 void fillTrackMCLabels(const gsl::span<GTrackID> gids, std::vector<o2::MCCompLabel>& mcinfo) const;
394
400
409
413
416 void addTPCClusters(o2::framework::ProcessingContext& pc, bool mc, bool shmap, bool occmap);
424
428
430
432
436
439
443
445
447
448#ifdef ENABLE_UPGRADES
449 void addIT3Clusters(o2::framework::ProcessingContext& pc, bool mc);
450#endif
451
452 // custom getters
453
454 // get contributors from single detectors: return array with sources set to all contributing GTrackIDs
456
457 // get contributing TPC GTrackID to the source. If source gidx is not contributed by TPC,
458 // returned GTrackID.isSourceSet()==false
460
461 // get contributing ITS GTrackID to the source. If source gidx is not contributed by ITS,
462 // returned GTrackID.isSourceSet()==false
464
465 // check if track source attached
466 bool isTrackSourceLoaded(int src) const;
467
468 // check if match source attached
469 bool isMatchSourceLoaded(int src) const { return commonPool[src].isLoaded(MATCHES); }
470
471 // -------------------------------
472 // generic getter for span
473 template <typename U>
474 gsl::span<const U> getSpan(int src, int slotID) const
475 {
476 return commonPool[src].getSpan<U>(slotID);
477 }
478
479 // generic getter for an object in the attaches span
480 template <typename U>
481 const U& getObject(int src, int index, int slotID) const
482 {
483 return commonPool[src].get_as<U>(slotID, index);
484 }
485 template <typename U>
486 const U& getObject(GTrackID gid, int slotID) const
487 {
488 return getObject<U>(gid.getSource(), gid.getIndex(), slotID);
489 }
490 // <<TODO Make this private
491
492 //-------------------------
493 // in general, U can be a TrackParCov or particular detector track, e.g. o2::its::TrackITS
494 template <typename U>
495 gsl::span<const U> getTracks(int src) const
496 {
497 return getSpan<U>(src, TRACKS);
498 }
499
500 template <typename U>
501 const U& getTrack(int src, int id) const
502 {
503 return getObject<U>(src, id, TRACKS);
504 }
505
506 template <typename U>
507 const U& getTrack(GTrackID gid) const
508 {
509 return getObject<U>(gid, TRACKS);
510 }
511
513 {
514 // RS FIXME: THIS IS TEMPORARY: some labels are still not implemented: in this case return dummy label
515 return commonPool[id.getSource()].getSize(MCLABELS) ? getObject<o2::MCCompLabel>(id, MCLABELS) : o2::MCCompLabel{};
516 // return getObject<o2::MCCompLabel>(id, MCLABELS);
517 }
518
519 //--------------------------------------------
520 // fetch track param
522 // fetch outer param (not all track types might have it)
524
525 //--------------------------------------------
526 // ITS
527 const o2::its::TrackITS& getITSTrack(GTrackID gid) const { return getTrack<o2::its::TrackITS>(gid); }
528 auto getITSTracks() const { return getTracks<o2::its::TrackITS>(GTrackID::ITS); }
529 auto getITSTracksROFRecords() const { return getSpan<o2::itsmft::ROFRecord>(GTrackID::ITS, TRACKREFS); }
530 auto getITSTracksClusterRefs() const { return getSpan<int>(GTrackID::ITS, INDICES); }
531 auto getITSTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITS, MCLABELS); }
532 auto getITSABRefs() const { return getSpan<o2::itsmft::TrkClusRef>(GTrackID::ITSAB, TRACKREFS); }
533 const o2::itsmft::TrkClusRef& getITSABRef(GTrackID gid) const { return getObject<o2::itsmft::TrkClusRef>(gid, TRACKREFS); }
534 auto getITSABClusterRefs() const { return getSpan<int>(GTrackID::ITSAB, INDICES); }
535 auto getITSABMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSAB, MCLABELS); }
536
537 // ITS clusters (layer is ignored unless the data was provided per layer)
540 auto getITSClustersPatterns(int layer = 0) const { return ITSClustersData[ITSMFT_PAT].getSpan<unsigned char>(layer); }
541 auto getITSClustersMCLabels(int layer = 0) const { return mcITSClusters[layer].get(); }
542
543 // MFT
544 const o2::mft::TrackMFT& getMFTTrack(GTrackID gid) const { return getTrack<o2::mft::TrackMFT>(gid); }
545 auto getMFTTracks() const { return getTracks<o2::mft::TrackMFT>(GTrackID::MFT); }
546 auto getMFTTracksROFRecords() const { return getSpan<o2::itsmft::ROFRecord>(GTrackID::MFT, TRACKREFS); }
547 auto getMFTTracksClusterRefs() const { return getSpan<int>(GTrackID::MFT, INDICES); }
548 auto getMFTTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MFT, MCLABELS); }
549
550 // MFT clusters (layer is ignored unless the data was provided per layer)
553 auto getMFTClustersPatterns(int layer = 0) const { return MFTClustersData[ITSMFT_PAT].getSpan<unsigned char>(layer); }
554 auto getMFTClustersMCLabels(int layer = 0) const { return mcMFTClusters[layer].get(); }
555
556 // MCH
557 const o2::mch::TrackMCH& getMCHTrack(GTrackID gid) const { return getTrack<o2::mch::TrackMCH>(gid); }
558 auto getMCHTracks() const { return getTracks<o2::mch::TrackMCH>(GTrackID::MCH); }
559 auto getMCHTracksROFRecords() const { return getSpan<o2::mch::ROFRecord>(GTrackID::MCH, TRACKREFS); }
560 auto getMCHTrackClusters() const { return getSpan<o2::mch::Cluster>(GTrackID::MCH, INDICES); }
561 auto getMCHTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MCH, MCLABELS); }
562
563 // MCH clusters
564 auto getMCHClusterROFRecords() const { return getSpan<o2::mch::ROFRecord>(GTrackID::MCH, CLUSREFS); }
565 auto getMCHClusters() const { return getSpan<o2::mch::Cluster>(GTrackID::MCH, CLUSTERS); }
566 auto getMCHClustersMCLabels() const { return mcMCHClusters.get(); }
567
568 // MID
569 const o2::mid::Track& getMIDTrack(GTrackID gid) const { return getTrack<o2::mid::Track>(gid); }
570 auto getMIDTracks() const { return getTracks<o2::mid::Track>(GTrackID::MID); }
571 auto getMIDTracksROFRecords() const { return getSpan<o2::mid::ROFRecord>(GTrackID::MID, TRACKREFS); }
572 auto getMIDTrackClusters() const { return getSpan<o2::mid::Cluster>(GTrackID::MID, INDICES); }
573 auto getMIDTrackClustersROFRecords() const { return getSpan<o2::mid::ROFRecord>(GTrackID::MID, MATCHES); }
574 auto getMIDTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MID, MCLABELS); }
576
577 // MID clusters
578 auto getMIDClusterROFRecords() const { return getSpan<o2::mid::ROFRecord>(GTrackID::MID, CLUSREFS); }
579 auto getMIDClusters() const { return getSpan<o2::mid::Cluster>(GTrackID::MID, CLUSTERS); }
581
582 // TPC
583 const o2::tpc::TrackTPC& getTPCTrack(GTrackID id) const { return getTrack<o2::tpc::TrackTPC>(id); }
584 auto getTPCTracks() const { return getTracks<o2::tpc::TrackTPC>(GTrackID::TPC); }
585 auto getTPCTracksClusterRefs() const { return getSpan<o2::tpc::TPCClRefElem>(GTrackID::TPC, INDICES); }
586 auto getTPCTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPC, MCLABELS); }
587 auto getTPCTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
590 auto getTPCTriggers() const { return getSpan<o2::tpc::TriggerInfoDLBZS>(GTrackID::TPC, MATCHES); }
591
592 // ITS-TPC
593 const o2::dataformats::TrackTPCITS& getTPCITSTrack(GTrackID gid) const { return getTrack<o2::dataformats::TrackTPCITS>(gid); }
594 auto getTPCITSTracks() const { return getTracks<o2::dataformats::TrackTPCITS>(GTrackID::ITSTPC); }
595 auto getTPCITSTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPC, MCLABELS); }
596 auto getTPCITSTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
597
598 // MFT-MCH
599 const o2::dataformats::GlobalFwdTrack& getGlobalFwdTrack(GTrackID gid) const { return getTrack<o2::dataformats::GlobalFwdTrack>(gid); }
600 auto getGlobalFwdTracks() const { return getTracks<o2::dataformats::GlobalFwdTrack>(GTrackID::MFTMCH); }
601 auto getMFTMCHMatches() const { return getSpan<o2::dataformats::MatchInfoFwd>(GTrackID::MFTMCH, MATCHES); }
602 auto getGlobalFwdTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MFTMCH, MCLABELS); }
603
604 // MCH-MID
605 const o2::dataformats::TrackMCHMID& getMCHMIDMatch(GTrackID gid) const { return getObject<o2::dataformats::TrackMCHMID>(gid, MATCHES); }
606 auto getMCHMIDMatches() const { return getSpan<o2::dataformats::TrackMCHMID>(GTrackID::MCHMID, MATCHES); }
607 auto getMCHMIDMatchesMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::MCHMID, MCLABELS); }
608
609 // ITS-TPC-TRD, since the TrackTRD track is just an alias, forward-declaring it does not work, need to keep template
610 template <class U>
612 {
613 return getTrack<U>(id);
614 }
615 template <class U>
617 {
618 return getTracks<U>(GTrackID::ITSTPCTRD);
619 }
621 {
622 return getSpan<o2::trd::TrackTriggerRecord>(GTrackID::ITSTPCTRD, TRACKREFS);
623 }
624 auto getITSTPCTRDTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPCTRD, MCLABELS); }
625 auto getITSTPCTRDTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
626 auto getITSTPCTRDSATracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPCTRD, MCLABELSEXTRA); }
627 auto getITSTPCTRDSATrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELSEXTRA); }
628
629 // TPC-TRD
630 template <class U>
632 {
633 return getTrack<U>(id);
634 }
635 template <class U>
636 auto getTPCTRDTracks() const
637 {
638 return getTracks<U>(GTrackID::TPCTRD);
639 }
640 auto getTPCTRDTriggers() const
641 {
642 return getSpan<o2::trd::TrackTriggerRecord>(GTrackID::TPCTRD, TRACKREFS);
643 }
644 auto getTPCTRDTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPCTRD, MCLABELS); }
645 auto getTPCTRDTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
646 auto getTPCTRDSATracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPCTRD, MCLABELSEXTRA); }
647 auto getTPCTRDSATrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELSEXTRA); }
648 // TRD tracklets
649 gsl::span<const o2::trd::Tracklet64> getTRDTracklets() const;
650 gsl::span<const o2::trd::CalibratedTracklet> getTRDCalibratedTracklets() const;
651 gsl::span<const o2::trd::TriggerRecord> getTRDTriggerRecords() const;
653
654 // TOF
655 const o2::dataformats::MatchInfoTOF& getTOFMatch(GTrackID id) const { return getObject<o2::dataformats::MatchInfoTOF>(id, MATCHES); } // generic match getter
656 // TPC-TOF, made of refitted TPC track and separate matchInfo
657 const o2::dataformats::TrackTPCTOF& getTPCTOFTrack(GTrackID gid) const { return getTrack<o2::dataformats::TrackTPCTOF>(gid); }
658 const o2::dataformats::MatchInfoTOF& getTPCTOFMatch(GTrackID id) const { return getObject<o2::dataformats::MatchInfoTOF>(id, MATCHES); }
659 auto getTPCTOFTrackMCLabel(GTrackID id) const { return getObject<o2::MCCompLabel>(id, MCLABELS); }
660 auto getTPCTOFTracks() const { return getTracks<o2::dataformats::TrackTPCTOF>(GTrackID::TPCTOF); }
661 // TPC-TOF matches
662 auto getTPCTOFMatches() const { return getSpan<o2::dataformats::MatchInfoTOF>(GTrackID::TPCTOF, MATCHES); }
663 auto getTPCTOFTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPCTOF, MCLABELS); }
664 // TPC-TRD-TOF matches
665 auto getTPCTRDTOFMatches() const { return getSpan<o2::dataformats::MatchInfoTOF>(GTrackID::TPCTRDTOF, MATCHES); }
666 auto getTPCTRDTOFTracksMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::TPCTRDTOF, MCLABELS); }
667 // global ITS-TPC-TOF matches
668 const o2::dataformats::TrackTPCITS& getITSTPCTOFTrack(GTrackID id) const; // this is special since global TOF track is just a reference on TPCITS
669 auto getITSTPCTOFMatches() const { return getSpan<o2::dataformats::MatchInfoTOF>(GTrackID::ITSTPCTOF, MATCHES); }
670 auto getITSTPCTOFMatchesMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPCTOF, MCLABELS); }
671 // global ITS-TPC-TRD-TOF matches
672 // const o2::dataformats::TrackTPCITS& getITSTPCTRDTOFTrack(GTrackID id) const; // TODO this is special since global TOF track is just a reference on TPCITS
673 auto getITSTPCTRDTOFMatches() const { return getSpan<o2::dataformats::MatchInfoTOF>(GTrackID::ITSTPCTRDTOF, MATCHES); }
674 auto getITSTPCTRDTOFMatchesMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::ITSTPCTRDTOF, MCLABELS); }
675
676 // HMPID matches
677 auto getHMPMatches() const { return getSpan<o2::dataformats::MatchInfoHMP>(GTrackID::HMP, MATCHES); }
678 auto getHMPMatchesMCLabels() const { return getSpan<o2::MCCompLabel>(GTrackID::HMP, MCLABELS); }
679
680 // TOF clusters
681 auto getTOFClusters() const { return getSpan<o2::tof::Cluster>(GTrackID::TOF, CLUSTERS); }
682 auto getTOFClustersMCLabels() const { return mcTOFClusters.get(); }
683
684 // HMPID clusters
685 auto getHMPClusterTriggers() const { return getSpan<o2::hmpid::Trigger>(GTrackID::HMP, CLUSREFS); }
686 auto getHMPClusters() const { return getSpan<o2::hmpid::Cluster>(GTrackID::HMP, CLUSTERS); }
687 auto getHMPClustersMCLabels() const { return mcHMPClusters.get(); }
688
689 // FT0
690 auto getFT0RecPoints() const { return getSpan<o2::ft0::RecPoints>(GTrackID::FT0, TRACKS); }
691 auto getFT0ChannelsData() const { return getSpan<o2::ft0::ChannelDataFloat>(GTrackID::FT0, CLUSTERS); }
692
693 // FV0
694 auto getFV0RecPoints() const { return getSpan<o2::fv0::RecPoints>(GTrackID::FV0, TRACKS); }
695 auto getFV0ChannelsData() const { return getSpan<o2::fv0::ChannelDataFloat>(GTrackID::FV0, CLUSTERS); }
696
697 // FDD
698 auto getFDDRecPoints() const { return getSpan<o2::fdd::RecPoint>(GTrackID::FDD, TRACKS); }
699 auto getFDDChannelsData() const { return getSpan<o2::fdd::ChannelDataFloat>(GTrackID::FDD, CLUSTERS); }
700
701 // ZDC
702 auto getZDCBCRecData() const { return getSpan<o2::zdc::BCRecData>(GTrackID::ZDC, MATCHES); }
703 auto getZDCEnergy() const { return getSpan<o2::zdc::ZDCEnergy>(GTrackID::ZDC, TRACKS); }
704 auto getZDCTDCData() const { return getSpan<o2::zdc::ZDCTDCData>(GTrackID::ZDC, CLUSTERS); }
705 auto getZDCInfo() const { return getSpan<uint16_t>(GTrackID::ZDC, PATTERNS); }
706
707 // CTP
708 auto getCTPDigits() const { return getSpan<const o2::ctp::CTPDigit>(GTrackID::CTP, CLUSTERS); }
709 const o2::ctp::LumiInfo& getCTPLumi() const { return mCTPLumi; }
710
711 // CPV
712 auto getCPVClusters() const { return getSpan<const o2::cpv::Cluster>(GTrackID::CPV, CLUSTERS); }
713 auto getCPVTriggers() const { return getSpan<const o2::cpv::TriggerRecord>(GTrackID::CPV, CLUSREFS); }
714 auto getCPVClustersMCLabels() const { return mcCPVClusters.get(); }
715
716 // PHOS
717 auto getPHOSCells() const { return getSpan<const o2::phos::Cell>(GTrackID::PHS, CLUSTERS); }
718 auto getPHOSTriggers() const { return getSpan<const o2::phos::TriggerRecord>(GTrackID::PHS, CLUSREFS); }
720
721 // EMCAL
722 auto getEMCALCells() const { return getSpan<const o2::emcal::Cell>(GTrackID::EMC, CLUSTERS); }
723 auto getEMCALTriggers() const { return getSpan<const o2::emcal::TriggerRecord>(GTrackID::EMC, CLUSREFS); }
725
726 // Primary vertices
735
736 // Secondary vertices
741
743 auto getV0s() const { return svtxPool.getSpan<o2::dataformats::V0>(V0S); }
745
749
753
754 // Strangeness track
758
759 // Cosmic tracks
764
765 // Extended cosmic tracks (with clusters); the user must include DataFormatsGlobalTracking/TrackCosmicsExtended.h
769
770 // IRFrames where ITS was reconstructed and tracks were seen (e.g. sync.w-flow mult. selection)
771 auto getIRFramesITS() const { return getSpan<o2::dataformats::IRFrame>(GTrackID::ITS, VARIA); }
772
773 void getTrackTimeITSTPCTRDTOF(GTrackID gid, float& t, float& tErr) const;
774 void getTrackTimeTPCTRDTOF(GTrackID gid, float& t, float& tErr) const;
775 void getTrackTimeITSTPCTOF(GTrackID gid, float& t, float& tErr) const;
776 void getTrackTimeITSTPCTRD(GTrackID gid, float& t, float& tErr) const;
777 void getTrackTimeTPCTRD(GTrackID gid, float& t, float& tErr) const;
778 void getTrackTimeITSTPC(GTrackID gid, float& t, float& tErr) const;
779 void getTrackTimeTPCTOF(GTrackID gid, float& t, float& tErr) const;
780 void getTrackTimeITS(GTrackID gid, float& t, float& tErr) const;
781 void getTrackTimeTPC(GTrackID gid, float& t, float& tErr) const;
782
783 void getTrackTime(GTrackID gid, float& t, float& tErr) const;
784};
785
786} // namespace globaltracking
787} // namespace o2
788
789#endif
Accessor for objects of the same base class located in different containers.
Composition/decomposition of the ITS/MFT cluster IDs referring to per-layer cluster arrays.
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
const GLdouble * v
Definition glcorearb.h:832
GLuint index
Definition glcorearb.h:781
GLsizei GLsizei GLchar * source
Definition glcorearb.h:798
GLenum GLuint GLint GLint layer
Definition glcorearb.h:1310
Definition of a container to keep/associate and arbitrary number of labels associated to an index wit...
Defining ITS Vertex explicitly as messageable.
Definition Cartesian.h:288
constexpr int MaxMFTLayers
constexpr int MaxITSLayers
constexpr int MaxITSClusLayers
Definition ClusterID.h:23
constexpr int MaxMFTClusLayers
Definition ClusterID.h:24
o2::dataformats::StrangeTrack StrangeTrack
Global TPC definitions and constants.
uint32_t TPCClRefElem
TrackParCovF TrackParCov
Definition Track.h:33
o2::MCCompLabel MCLabel
Definition Digitizer.h:48
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 ...
per-TF quantities: the TPC transformation used in the reconstruction and the TPC occupancy
matched cosmic with everything needed for an offline refit
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)
std::shared_ptr< const void > cosmExtHolder[2]
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
auto getMFTClustersPatterns(int layer=0) const
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)
std::array< std::unique_ptr< const o2::dataformats::MCTruthContainer< o2::MCCompLabel > >, MaxMFTLayers > mcMFTClusters
void getTrackTimeTPCTRD(GTrackID gid, float &t, float &tErr) const
auto getITSClustersROFRecords(int layer=0) 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::TrackCosmicsExtended & getCosmicExtTrack(int i) const
auto getITSClustersPatterns(int layer=0) 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::array< std::unique_ptr< const o2::dataformats::MCTruthContainer< o2::MCCompLabel > >, MaxITSLayers > mcITSClusters
std::unique_ptr< o2::trd::RecoInputContainer > inputsTRD
const o2::dataformats::MCTruthContainer< o2::mid::MCClusterLabel > * getMIDClustersMCLabels() const
const o2::track::TrackParCov & getTrackParam(GTrackID gidx) const
void getTrackTimeITSTPCTRD(GTrackID gid, float &t, float &tErr) const
void addCosmicExtTracks(o2::framework::ProcessingContext &pc, bool mc)
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)
auto getMFTClustersROFRecords(int layer=0) const
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
std::array< ITSClusAccessor, NITSMFTCLUSSLOTS > ITSClustersData
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::array< MFTClusAccessor, NITSMFTCLUSSLOTS > MFTClustersData
auto getMFTClusters(int layer=0) const
auto getITSClusters(int layer=0) const
auto getMFTClustersMCLabels(int layer=0) 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::CosmicsTFInfo & getCosmicExtTFInfo() const
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
auto getITSClustersMCLabels(int layer=0) const
const o2::dataformats::GlobalFwdTrack & getGlobalFwdTrack(GTrackID gid) const
Trigger info including the orbit.