36#include <FairMCPoint.h>
37#include <FairRootManager.h>
41#include <TClonesArray.h>
43#include <boost/exception/exception.hpp>
44#include <boost/type_index/type_index_facade.hpp>
129 std::stringstream msg;
130 msg <<
"\033[1;31mCbmMatchRecoToMC (\"" << fName <<
"\"): the cluster and hit matching routines for MVD, STS, ";
132 <<
"MuCh, TRD, TOF, FSD will be suppressed by a request from CbmMatchRecoToMC::SuppressHitReMatching():\033[0m\n";
133 LOG(warn) << msg.str();
230 LOG(info) <<
"CbmMatchRecoToMC::Exec eventNo=" <<
fEventNumber++;
237 FairRootManager* ioman = FairRootManager::Instance();
238 if (
nullptr == ioman) {
239 LOG(fatal) <<
"CbmMatchRecoToMC::ReadAndCreateDataBranches() NULL FairRootManager.";
244 if (
nullptr == mcManager) {
245 LOG(fatal) <<
"CbmMatchRecoToMC::ReadAndCreateDataBranches() NULL MCDataManager.";
264 fStsClusters =
static_cast<TClonesArray*
>(ioman->GetObject(
"StsCluster"));
270 ioman->Register(
"StsClusterMatch",
"STS",
fStsClusterMatches, IsOutputBranchPersistent(
"StsClusterMatch"));
274 fStsHits =
static_cast<TClonesArray*
>(ioman->GetObject(
"StsHit"));
276 fStsHitMatches =
static_cast<TClonesArray*
>(ioman->GetObject(
"StsHitMatch"));
280 ioman->Register(
"StsHitMatch",
"STS",
fStsHitMatches, IsOutputBranchPersistent(
"StsHitMatch"));
284 fStsTracks =
static_cast<TClonesArray*
>(ioman->GetObject(
"StsTrack"));
286 fStsTrackMatches =
static_cast<TClonesArray*
>(ioman->GetObject(
"StsTrackMatch"));
289 ioman->Register(
"StsTrackMatch",
"STS",
fStsTrackMatches, IsOutputBranchPersistent(
"StsTrackMatch"));
295 fRichHits =
static_cast<TClonesArray*
>(ioman->GetObject(
"RichHit"));
297 fRichRings =
static_cast<TClonesArray*
>(ioman->GetObject(
"RichRing"));
299 fRichTrackMatches =
static_cast<TClonesArray*
>(ioman->GetObject(
"RichRingMatch"));
302 ioman->Register(
"RichRingMatch",
"RICH",
fRichTrackMatches, IsOutputBranchPersistent(
"RichRingMatch"));
308 fTrdClusters =
static_cast<TClonesArray*
>(ioman->GetObject(
"TrdCluster"));
314 ioman->Register(
"TrdClusterMatch",
"TRD",
fTrdClusterMatches, IsOutputBranchPersistent(
"TrdClusterMatch"));
318 fTrdHits =
static_cast<TClonesArray*
>(ioman->GetObject(
"TrdHit"));
320 fTrdHitMatches =
static_cast<TClonesArray*
>(ioman->GetObject(
"TrdHitMatch"));
324 ioman->Register(
"TrdHitMatch",
"TRD",
fTrdHitMatches, IsOutputBranchPersistent(
"TrdHitMatch"));
329 fTrdTracks =
static_cast<TClonesArray*
>(ioman->GetObject(
"TrdTrack"));
331 fTrdTrackMatches =
static_cast<TClonesArray*
>(ioman->GetObject(
"TrdTrackMatch"));
334 ioman->Register(
"TrdTrackMatch",
"TRD",
fTrdTrackMatches, IsOutputBranchPersistent(
"TrdTrackMatch"));
341 fMuchTracks = (TClonesArray*) ioman->GetObject(
"MuchTrack");
342 fMuchClusters =
static_cast<TClonesArray*
>(ioman->GetObject(
"MuchCluster"));
348 ioman->Register(
"MuchClusterMatch",
"MUCH",
fMuchClusterMatches, IsOutputBranchPersistent(
"MuchClusterMatch"));
352 fMuchPixelHits =
static_cast<TClonesArray*
>(ioman->GetObject(
"MuchPixelHit"));
358 ioman->Register(
"MuchPixelHitMatch",
"MUCH",
fMuchPixelHitMatches, IsOutputBranchPersistent(
"MuchPixelHitMatch"));
362 fMuchTracks =
static_cast<TClonesArray*
>(ioman->GetObject(
"MuchTrack"));
364 fMuchTrackMatches =
static_cast<TClonesArray*
>(ioman->GetObject(
"MuchTrackMatch"));
367 ioman->Register(
"MuchTrackMatch",
"MUCH",
fMuchTrackMatches, IsOutputBranchPersistent(
"MuchTrackMatch"));
374 fMvdCluster =
static_cast<TClonesArray*
>(ioman->GetObject(
"MvdCluster"));
380 ioman->Register(
"MvdClusterMatch",
"MVD",
fMvdClusterMatches, IsOutputBranchPersistent(
"MvdClusterMatch"));
384 fMvdHits =
static_cast<TClonesArray*
>(ioman->GetObject(
"MvdHit"));
386 fMvdHitMatches =
static_cast<TClonesArray*
>(ioman->GetObject(
"MvdHitMatch"));
390 ioman->Register(
"MvdHitMatch",
"MVD",
fMvdHitMatches, IsOutputBranchPersistent(
"MvdHitMatch"));
399 LOG(warning) <<
"CbmMatchRecoToMC: MVD hits are missing, MVD will not be "
400 "included to the STS track match";
412 fTofHitDigiMatches =
static_cast<TClonesArray*
>(ioman->GetObject(
"TofHitCalDigiMatch"));
414 LOG(warning) <<
"CbmMatchRecoToMC::ReadAndCreateDataBranches()"
415 <<
" no TOF Hit to Digi array found!";
418 LOG(info) <<
"CbmMatchRecoToMC: Using alternative TOF Hit to Digi match array!";
422 fTofHits =
static_cast<TClonesArray*
>(ioman->GetObject(
"TofHit"));
424 fTofHitMatches =
static_cast<TClonesArray*
>(ioman->GetObject(
"TofHitMatch"));
427 ioman->Register(
"TofHitMatch",
"TOF",
fTofHitMatches, IsOutputBranchPersistent(
"TofHitMatch"));
432 fTofDigis = ioman->InitObjectAs<std::vector<CbmTofDigi>
const*>(
"TofCalDigi");
434 LOG(info) <<
"No calibrated tof digi vector in the input files => trying original vector";
435 fTofDigis = ioman->InitObjectAs<std::vector<CbmTofDigi>
const*>(
"TofDigi");
437 LOG(info) <<
"No original tof digi vector in the input files! Ignore TOF!";
441 LOG(info) <<
"Found calibrated tof digi vector in one of the input files";
444 fTofDigiMatch = ioman->InitObjectAs<std::vector<CbmMatch>
const*>(
"TofCalDigiMatch");
446 LOG(info) <<
"No calibrated tof digi to point match vector in the input files => trying original vector";
447 fTofDigiMatch = ioman->InitObjectAs<std::vector<CbmMatch>
const*>(
"TofDigiMatch");
449 LOG(fatal) <<
"No original tof digi to point match vector in the input files!";
453 LOG(info) <<
"Found calibrated tof digi to point match vector in one of the input files";
459 fFsdHits =
static_cast<TClonesArray*
>(ioman->GetObject(
"FsdHit"));
461 fFsdHitMatches =
static_cast<TClonesArray*
>(ioman->GetObject(
"FsdHitMatch"));
465 ioman->Register(
"FsdHitMatch",
"FSD",
fFsdHitMatches, IsOutputBranchPersistent(
"FsdHitMatch"));
472 TClonesArray* clusterMatches)
474 if (!(digiMatches && clusters && clusterMatches))
return;
475 Int_t nofClusters = clusters->GetEntriesFast();
476 for (Int_t iCluster = 0; iCluster < nofClusters; iCluster++) {
480 for (Int_t iDigi = 0; iDigi < nofDigis; iDigi++) {
490 if (!(clusters && clusterMatches))
return;
491 Int_t nofClusters = clusters->GetEntriesFast();
492 for (Int_t iCluster = 0; iCluster < nofClusters; iCluster++) {
496 for (Int_t iDigi = 0; iDigi < nofDigis; iDigi++) {
497 Int_t digiIndex = cluster->
GetDigi(iDigi);
499 if (
nullptr == digiMatch) {
500 LOG(fatal) <<
"CbmMatchRecoToMC::MatchClusters => no Match found for system " << systemId <<
" digi index "
501 << digiIndex <<
" (digi " << iDigi <<
" from cluster " << iCluster <<
") !";
510 if (!(matches &&
hits && hitMatches))
return;
511 Int_t nofHits =
hits->GetEntriesFast();
512 for (Int_t iHit = 0; iHit < nofHits; iHit++) {
522 if (!(cluMatches &&
hits && hitMatches))
return;
523 Int_t nofHits =
hits->GetEntriesFast();
524 for (Int_t iHit = 0; iHit < nofHits; iHit++) {
530 for (
int iLinkF = 0; iLinkF < frontClusterMatch->
GetNofLinks(); ++iLinkF) {
531 const auto& linkF = frontClusterMatch->
GetLink(iLinkF);
532 for (
int iLinkB = 0; iLinkB < backClusterMatch->
GetNofLinks(); ++iLinkB) {
533 const auto& linkB = backClusterMatch->
GetLink(iLinkB);
534 if (linkB == linkF) {
545 if (!(
hits && hitMatches))
return;
546 Int_t nofHits =
hits->GetEntriesFast();
547 for (Int_t iHit = 0; iHit < nofHits; iHit++) {
557 if (!(
hits && hitMatches))
return;
558 Int_t nofHits =
hits->GetEntriesFast();
559 for (Int_t iHit = 0; iHit < nofHits; iHit++) {
563 for (Int_t iDigi = 0; iDigi < nofDigis; iDigi++) {
575 TClonesArray* hitMatches)
577 if (!(HitDigiMatches &&
hits && hitMatches))
return;
581 if (iNbTofDigis != iNbTofDigiMatches)
582 LOG(fatal) <<
"CbmMatchRecoToMC::MatchHitsTof => Nb digis in vector not matching nb matches in vector: "
583 << iNbTofDigis <<
" VS " << iNbTofDigiMatches;
585 Int_t nofHits =
hits->GetEntriesFast();
589 for (Int_t iHit = 0; iHit < nofHits; iHit++) {
594 for (Int_t iDigi = 0; iDigi < iNbDigisHit; iDigi++) {
599 if (iNbTofDigis <= iDigiIdx) {
600 LOG(error) <<
"CbmMatchRecoToMC::MatchHitsTof => Digi index from Hit #" << iHit <<
"/" << nofHits <<
" Digi "
601 << iDigi <<
"/" << iNbDigisHit <<
" is bigger than nb entries in Digis arrays: " << iDigiIdx
602 <<
" VS " << iNbTofDigis <<
" => ignore it!!!";
604 LOG(error) <<
" Hit position: ( " << pTofHit->
GetX() <<
" , "
605 << pTofHit->
GetY() <<
" , " << pTofHit->
GetZ() <<
" ) ";
612 if (iNbPointsDigi <= 0) {
613 LOG(error) <<
"CbmMatchRecoToMC::MatchHitsTof => No entries in Digi to point match for Hit #" << iHit <<
"/"
614 << nofHits <<
" Digi " << iDigi <<
"/" << iNbDigisHit <<
": " << iNbPointsDigi <<
" (digi index is "
615 << iDigiIdx <<
"/" << iNbTofDigis <<
") => ignore it!!!";
616 LOG(error) <<
" Digi address: 0x" << std::setw(8) << std::hex
621 if (lTruePoint.
IsNoise())
continue;
622 Int_t iTruePointIdx = lTruePoint.
GetIndex();
623 for (Int_t iPoint = 0; iPoint < iNbPointsDigi; iPoint++) {
625 if (lPoint.
IsNoise())
continue;
626 Int_t iPointIdx = lPoint.
GetIndex();
628 if (iPointIdx == iTruePointIdx)
641 if (!(
hits && hitMatches))
return;
642 Int_t nofHits =
hits->GetEntriesFast();
643 for (Int_t iHit = 0; iHit < nofHits; iHit++) {
652 TClonesArray* trackMatches)
654 if (!(hitMatches &&
points &&
tracks && trackMatches))
return;
656 Bool_t editMode = (trackMatches->GetEntriesFast() != 0);
658 Int_t nofTracks =
tracks->GetEntriesFast();
659 for (Int_t iTrack = 0; iTrack < nofTracks; iTrack++) {
664 for (Int_t iHit = 0; iHit < nofHits; iHit++) {
670 for (Int_t iLink = 0; iLink < nofLinks; iLink++) {
671 const FairMCPoint* point =
static_cast<const FairMCPoint*
>(
points->Get(hitMatch->
GetLink(iLink)));
672 if (
nullptr == point)
continue;
675 Int_t mcTrackId = point->GetTrackID();
688 for (Int_t iHit = 0; iHit < nofHits; iHit++) {
694 Bool_t hasTrue =
false;
695 for (Int_t iLink = 0; iLink < nofLinks; iLink++) {
696 const FairMCPoint* point =
static_cast<const FairMCPoint*
>(
points->Get(hitMatch->
GetLink(iLink)));
697 if (
nullptr == point)
continue;
718 TClonesArray* trackMatches)
724 if (!(stsHitMatches && stsPoints &&
tracks && trackMatches)) {
725 LOG(error) <<
"CbmMatchRecoToMC: missing the necessary STS info for the "
731 LOG(error) <<
"CbmMatchRecoToMC: missing the necessary MVD info for the "
739 for (Int_t iTrack = 0; iTrack < trackMatches->GetEntriesFast(); iTrack++) {
742 LOG(error) <<
"CbmMatchRecoToMC: Sts track contains Mvd hits, but "
743 "there is no MVD data available";
749 Bool_t editMode = (trackMatches->GetEntriesFast() != 0);
751 Int_t nofTracks =
tracks->GetEntriesFast();
753 for (Int_t iTrack = 0; iTrack < nofTracks; iTrack++) {
759 for (Int_t iHit = 0; iHit < nofStsHits; iHit++) {
762 for (Int_t iLink = 0; iLink < nofLinks; iLink++) {
765 const FairMCPoint* point =
static_cast<const FairMCPoint*
>(stsPoints->
Get(link));
769 Int_t mcTrackId = point->GetTrackID();
783 for (Int_t iHit = 0; iHit < nofMvdHits; iHit++) {
786 for (Int_t iLink = 0; iLink < nofLinks; iLink++) {
789 const FairMCPoint* point =
static_cast<const FairMCPoint*
>(mvdPoints->
Get(link));
802 for (Int_t iHit = 0; iHit < nofStsHits; iHit++) {
805 Bool_t hasTrue =
false;
806 for (Int_t iLink = 0; iLink < nofLinks; iLink++) {
807 const FairMCPoint* point =
static_cast<const FairMCPoint*
>(stsPoints->
Get(hitMatch->
GetLink(iLink)));
808 if (
nullptr == point) {
825 for (Int_t iHit = 0; iHit < nofMvdHits; iHit++) {
828 Bool_t hasTrue =
false;
829 for (Int_t iLink = 0; iLink < nofLinks; iLink++) {
830 const FairMCPoint* point =
static_cast<const FairMCPoint*
>(mvdPoints->
Get(hitMatch->
GetLink(iLink)));
831 if (
nullptr == point) {
860 Int_t nRings = richRings->GetEntriesFast();
861 for (Int_t iRing = 0; iRing < nRings; iRing++) {
866 for (Int_t iHit = 0; iHit < nHits; iHit++) {
870 for (
const auto& motherId : motherIds) {
877 if (bestTrackLink.
IsNoise())
continue;
878 Int_t trueCounter = 0;
879 Int_t wrongCounter = 0;
880 for (Int_t iHit = 0; iHit < nHits; iHit++) {
884 if (std::find(motherIds.begin(), motherIds.end(), bestTrackLink) != motherIds.end()) {
904 vector<CbmLink> result;
905 if (!hit)
return result;
907 if (digiIndex < 0)
return result;
909 if (!digi)
return result;
911 if (!digiMatch)
return result;
913 vector<CbmLink> links = digiMatch->
GetLinks();
914 for (
const auto& link : links) {
915 if (link.IsNoise())
continue;
917 if (!point)
continue;
918 Int_t mcTrackId = point->GetTrackID();
919 if (mcTrackId < 0)
continue;
921 static_cast<const CbmMCTrack*
>(
mcTracks->Get(link.GetFile(), link.GetEntry(), mcTrackId));
922 if (!mcTrack)
continue;
923 if (mcTrack->
GetPdgCode() != 50000050)
continue;
927 CbmLink val(1., motherId, link.GetEntry(), link.GetFile());
928 if (std::find(result.begin(), result.end(), val) == result.end()) result.push_back(val);
940 vector<pair<Int_t, Int_t>> result;
941 if (
nullptr == hit)
return result;
943 if (digiIndex < 0)
return result;
945 if (
nullptr == digi)
return result;
947 if (digiMatch ==
nullptr)
return result;
949 vector<CbmLink> links = digiMatch->
GetLinks();
950 for (UInt_t i = 0; i < links.size(); i++) {
951 if (links[i].IsNoise())
continue;
952 Int_t pointId = links[i].GetIndex();
953 Int_t eventId = links[i].GetEntry();
956 if (
nullptr == pMCpt)
continue;
957 Int_t mcTrackIndex = pMCpt->GetTrackID();
958 if (mcTrackIndex < 0)
continue;
962 if (
nullptr == mcTrack)
continue;
963 if (mcTrack->
GetPdgCode() != 50000050)
continue;
967 pair<Int_t, Int_t> val = std::make_pair(eventId, motherId);
968 if (std::find(result.begin(), result.end(), val) == result.end()) {
969 result.push_back(val);
977 const TClonesArray* richPoints,
980 vector<Int_t> result;
981 if (
nullptr == hit)
return result;
983 if (digiIndex < 0)
return result;
985 if (
nullptr == digi)
return result;
987 if (digiMatch ==
nullptr)
return result;
989 vector<CbmLink> links = digiMatch->
GetLinks();
990 for (UInt_t i = 0; i < links.size(); i++) {
991 if (links[i].IsNoise())
continue;
992 Int_t pointId = links[i].GetIndex();
994 if (
nullptr == pMCpt)
continue;
995 Int_t mcTrackIndex = pMCpt->GetTrackID();
996 if (mcTrackIndex < 0)
continue;
1000 if (
nullptr == mcTrack)
continue;
1001 if (mcTrack->
GetPdgCode() != 50000050)
continue;
1005 if (std::find(result.begin(), result.end(), motherId) == result.end()) {
1006 result.push_back(motherId);
Base class for cluster objects.
@ kMvd
Micro-Vertex Detector.
@ kTrd
Transition Radiation Detector.
@ kSts
Silicon Tracking System.
@ kMuch
Muon detection system.
@ kFsd
Forward spectator detector.
@ kRich
Ring-Imaging Cherenkov Detector.
ClassImp(CbmMatchRecoToMC)
FairTask for matching RECO data to MC.
Data class for a reconstructed hit in the STS.
Data class for STS tracks.
static vector< vector< QAMCTrack > > mcTracks
static vector< vector< QAHit > > hits
Base class for cluster objects.
int32_t GetDigi(int32_t index) const
Get digi at position index.
int32_t GetNofDigis() const
Number of digis in cluster.
static Int_t GetNofDigis(ECbmModuleId systemId)
static Bool_t IsMatchPresent(ECbmModuleId systemId)
Presence of a digi match branch.
InitStatus Init()
Initialisation.
const Digi * Get(Int_t index) const
Get a digi object.
static CbmDigiManager * Instance()
Static instance.
const CbmMatch * GetMatch(ECbmModuleId systemId, UInt_t index) const
Get a match object.
Data class for FSD digital information.
uint32_t GetAddress() const
Address.
int32_t GetAddress() const
Access to a MC data branch for time-based analysis.
TObject * Get(const CbmLink *lnk)
Task class creating and managing CbmMCDataArray objects.
CbmMCDataObject * GetObject(const char *name)
CbmMCDataArray * InitBranch(const char *name)
int32_t GetMotherId() const
int32_t GetPdgCode() const
int32_t GetNPoints(ECbmModuleId detId) const
const std::vector< CbmTofDigi > * fTofDigis
CbmTofPoint array.
TClonesArray * fMuchPixelHits
Clusters [in].
TClonesArray * fTrdTrackMatches
Hit matches [out].
CbmMCDataArray * fRichMcPoints
Track matches [out].
void MatchRichRings(const TClonesArray *richRings, const TClonesArray *richHits, CbmMCDataArray *richMcPoints, CbmMCDataArray *mcTracks, TClonesArray *ringMatches)
TClonesArray * fMvdCluster
MC points [in].
CbmMCDataArray * fMvdPoints
Interface to digi branches.
TClonesArray * fStsHitMatches
Cluster matches [out].
void MatchHitsTof(const TClonesArray *HitDigiMatches, const TClonesArray *hits, TClonesArray *hitMatches)
CbmMCDataArray * fTrdPoints
Track matches [out].
void MatchHits(const TClonesArray *matches, const TClonesArray *hits, TClonesArray *hitMatches)
CbmMCDataArray * fStsPoints
Hit matches [out].
void MatchHitsToPoints(CbmMCDataArray *points, const TClonesArray *hits, TClonesArray *hitMatches)
CbmMCDataArray * fTofPoints
Track matches [out].
TClonesArray * fTrdClusters
MC points [in].
TClonesArray * fMuchPixelHitMatches
Cluster matches [out].
TClonesArray * fTrdHits
Clusters [in].
TClonesArray * fMuchTracks
Hits [in].
void ReadAndCreateDataBranches()
Read and create data branches.
void MatchHitsSts(const TClonesArray *clusterMmatches, const TClonesArray *hits, TClonesArray *hitMatches)
Match STS hits, using cluster match objects.
void MatchTracks(const TClonesArray *hitMatches, CbmMCDataArray *points, const TClonesArray *tracks, TClonesArray *trackMatches)
TClonesArray * fRichTrackMatches
Rings [in].
void MatchClusters(const TClonesArray *digiMatches, const TClonesArray *clusters, TClonesArray *clusterMatches)
Generic creation of cluster match objects.
TClonesArray * fStsTrackMatches
Hit matches [out].
void MatchHitsFsd(const TClonesArray *hits, TClonesArray *hitMatches)
virtual InitStatus Init()
Derived from FairTask.
TClonesArray * fTofHitMatches
Match Hit -> Digi [out].
TClonesArray * fFsdHitMatches
Hits [in].
TClonesArray * fMvdHits
Clusters [in].
CbmDigiManager * fDigiManager
Monte-Carlo tracks.
TClonesArray * fRichHits
MC points [in].
TClonesArray * fMuchTrackMatches
Hit matches [out].
bool fbSuppressHitReMatching
TClonesArray * fFsdHits
MC points [in].
TClonesArray * fMvdClusterMatches
Hits [in].
TClonesArray * fTrdTracks
Hits [in].
virtual void Exec(Option_t *opt)
Derived from FairTask.
void MatchHitsMvd(const TClonesArray *hits, TClonesArray *hitMatches)
CbmMCDataArray * fMCTracks
const std::vector< CbmMatch > * fTofDigiMatch
TClonesArray * fStsHits
Clusters [in].
static std::vector< CbmLink > GetMcTrackMotherIdsForRichHit(CbmDigiManager *digiMan, const CbmRichHit *hit, CbmMCDataArray *richPoints, CbmMCDataArray *mcTracks)
Get CbmLinks of Mother MC Tracks for RICH hit.
TClonesArray * fStsTracks
Hits [in].
TClonesArray * fTrdHitMatches
Cluster matches [out].
TClonesArray * fTofHitDigiMatches
CbmTofHit array.
TClonesArray * fRichRings
Hits [in].
TClonesArray * fStsClusterMatches
Tracks [in].
TClonesArray * fStsClusters
MC points [in].
void MatchStsTracks(const TClonesArray *mvdHitMatches, const TClonesArray *stsHitMatches, CbmMCDataArray *mvdPoints, CbmMCDataArray *stsPoints, const TClonesArray *tracks, TClonesArray *trackMatches)
virtual void Finish()
Derived from FairTask.
static Int_t fEventNumber
CbmMatchRecoToMC()
Constructor.
TClonesArray * fMuchClusters
MC points [in].
TClonesArray * fTrdClusterMatches
Tracks [in].
TClonesArray * fMuchClusterMatches
Tracks [in].
CbmMCDataArray * fFsdPoints
Match Hit -> MC point [out].
TClonesArray * fMvdHitMatches
Cluster matches [out].
virtual ~CbmMatchRecoToMC()
Destructor.
CbmMCDataArray * fMuchPoints
Match Ring -> MC track [out].
void AddLinks(const CbmMatch &match)
const CbmLink & GetLink(int32_t i) const
int32_t GetNofLinks() const
void AddLink(const CbmLink &newLink)
const CbmLink & GetMatchedLink() const
const std::vector< CbmLink > & GetLinks() const
uint32_t GetHit(int32_t i) const
int32_t GetNofHits() const
data class for a reconstructed 3-d hit in the STS
int32_t GetFrontClusterId() const
int32_t GetBackClusterId() const
int32_t GetNofMvdHits() const
int32_t GetMvdHitIndex(int32_t iHit) const
int32_t GetStsHitIndex(int32_t iHit) const
int32_t GetNofStsHits() const
Data class for expanded digital TOF information.
int32_t GetAddress() const
Inherited from CbmDigi.
double GetTot() const
Alias for GetCharge.
void SetNofWrongHits(int32_t nofWrongHits)
int32_t GetNofWrongHits() const
void SetNofTrueHits(int32_t nofTrueHits)
int32_t GetNofTrueHits() const
virtual int32_t GetNofHits() const
int32_t GetHitIndex(int32_t iHit) const
HitType GetHitType(int32_t iHit) const
ECbmModuleId GetSystemId(int32_t address)
Get system Id (should be ECbmModuleId::kSts)