10 #include <tracking/modules/fitter/GenfitTrackCandidatesCreatorModule.h>
11 #include <tracking/dataobjects/RecoTrack.h>
12 #include <framework/datastore/RelationArray.h>
14 #include <mdst/dataobjects/MCParticle.h>
24 setDescription(
"Module turning reco tracks to genfit tracks (will be unneeded once we use reco tracks everywhere).");
25 setPropertyFlags(c_ParallelProcessingCertified);
27 addParam(
"genfitTrackCandsStoreArrayName", m_param_genfitTrackCandsStoreArrayName,
28 "StoreArray name of the related track candidates.",
29 m_param_genfitTrackCandsStoreArrayName);
30 addParam(
"recoTracksStoreArrayName", m_param_recoTracksStoreArrayName,
"StoreArray name of the input reco tracks.",
31 m_param_recoTracksStoreArrayName);
32 addParam(
"mcGenfitTrackCandsStoreArrayName", m_param_mcGenfitTrackCandsStoreArrayName,
33 "StoreArray name of the related track MC candidates (or empty if there are none).",
34 m_param_mcGenfitTrackCandsStoreArrayName);
35 addParam(
"mcRecoTracksStoreArrayName", m_param_mcRecoTracksStoreArrayName,
36 "StoreArray name of the input reco MC tracks (or empty of there are none).",
37 m_param_mcRecoTracksStoreArrayName);
38 addParam(
"outputMCTrackCandidates", m_param_outputMCTrackCandidates,
39 "Flag to turn on combined conversion of PR and MCTrackCands. Can only be used if the MCMatcher was used before.",
40 m_param_outputMCTrackCandidates);
43 void GenfitTrackCandidatesCreatorModule::initialize()
45 B2WARNING(
"This module is depricated as it uses genfit::Track(Cand)s instead of RecoTracks. It will be removed in the future. If you need information on the transition, please contact Nils Braun (nils.braun@kit.edu).");
47 recoTracks.isRequired();
50 genfitTrackCands.registerInDataStore();
59 if (m_param_outputMCTrackCandidates) {
61 mcRecoTracks.isRequired();
64 mcGenfitTrackCands.registerInDataStore();
71 mcParticles.isRequired();
86 RelationArray relationsFromMCTrackCandsToMCRecoTracks(mcGenfitTrackCands, mcRecoTracks);
87 RelationArray relationsFromMCTrackCandsToMCParticle(mcGenfitTrackCands, mcParticles);
89 for (
const RecoTrack& prRecoTrack : prRecoTracks) {
90 const int trackCounter = prRecoTrack.getArrayIndex();
93 relationsFromPRTrackCandsToPRRecoTracks.
add(trackCounter, trackCounter);
97 if (matchingStatus == RecoTrack::MatchingStatus::c_ghost) {
99 }
else if (matchingStatus == RecoTrack::MatchingStatus::c_background) {
101 }
else if (matchingStatus == RecoTrack::MatchingStatus::c_clone) {
103 }
else if (matchingStatus == RecoTrack::MatchingStatus::c_matched) {
105 if (relatedMCParticle) {
106 const int mcParticleArrayIndex = relatedMCParticle->
getArrayIndex();
107 relationsFromPRTrackCandsToMCParticle.
add(trackCounter, mcParticleArrayIndex);
110 B2WARNING(
"PRRecoTrack marked as 'matched', but no related MCParticle found. Something is going wrong here.");
115 for (
const RecoTrack& mcRecoTrack : mcRecoTracks) {
116 const int trackCounter = mcRecoTrack.getArrayIndex();
119 relationsFromMCTrackCandsToMCRecoTracks.
add(trackCounter, trackCounter);
122 if (relatedMCParticle) {
123 const int mcParticleArrayIndex = relatedMCParticle->
getArrayIndex();
124 relationsFromMCTrackCandsToMCParticle.
add(trackCounter, mcParticleArrayIndex);
127 B2WARNING(
"MCRecoTrack without related MCParticle? Something is going wrong here.");
132 RelationArray relationsFromMCTrackCandsToPRTrackCands(mcGenfitTrackCands, prGenfitTrackCands);
133 RelationArray relationsFromPRTrackCandsToMCTrackCands(prGenfitTrackCands, mcGenfitTrackCands);
135 for (
const RecoTrack& prRecoTrack : prRecoTracks) {
136 const auto& relatedMCRecoTrackWithWeight = prRecoTrack.getRelatedToWithWeight<
RecoTrack>(m_param_mcRecoTracksStoreArrayName);
137 RecoTrack* relatedMCRecoTrack = relatedMCRecoTrackWithWeight.first;
138 const double weight = relatedMCRecoTrackWithWeight.second;
139 if (relatedMCRecoTrack) {
140 relationsFromPRTrackCandsToMCTrackCands.
add(prRecoTrack.getArrayIndex(), relatedMCRecoTrack->getArrayIndex(), weight);
144 for (
const RecoTrack& mcRecoTrack : mcRecoTracks) {
145 const auto& relatedPRRecoTrackWithWeight = mcRecoTrack.getRelatedToWithWeight<
RecoTrack>(m_param_recoTracksStoreArrayName);
146 RecoTrack* relatedPRRecoTrack = relatedPRRecoTrackWithWeight.first;
147 const double weight = relatedPRRecoTrackWithWeight.second;
148 if (relatedPRRecoTrack) {
149 relationsFromMCTrackCandsToPRTrackCands.
add(mcRecoTrack.getArrayIndex(), relatedPRRecoTrack->getArrayIndex(), weight);
159 for (
const RecoTrack& recoTrack : recoTracks) {
160 const int trackCounter = recoTrack.getArrayIndex();
163 relationsFromTrackCandsToRecoTracks.
add(trackCounter, trackCounter);
166 if (relatedMCParticle) {
167 const int mcParticleArrayIndex = relatedMCParticle->
getArrayIndex();
168 relationsFromTrackCandsToMCParticle.
add(trackCounter, mcParticleArrayIndex);
174 void GenfitTrackCandidatesCreatorModule::event()
182 RelationArray relationsFromTrackCandsToRecoTracks(genfitTrackCands, recoTracks);
183 RelationArray relationsFromTrackCandsToMCParticle(genfitTrackCands, mcParticles);
185 if (m_param_outputMCTrackCandidates) {
186 outputPRAndMCTrackCands(recoTracks, genfitTrackCands, mcParticles, relationsFromTrackCandsToRecoTracks,
187 relationsFromTrackCandsToMCParticle);
189 outputPRTrackCands(recoTracks, genfitTrackCands, mcParticles, relationsFromTrackCandsToRecoTracks,
190 relationsFromTrackCandsToMCParticle);