Belle II Software  release-05-02-19
RecoTrackCreatorModule.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2015 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Nils Braun *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #include <tracking/modules/fitter/RecoTrackCreatorModule.h>
11 #include <tracking/dataobjects/RecoTrack.h>
12 #include <tracking/dataobjects/RecoHitInformation.h>
13 #include <mdst/dataobjects/MCParticle.h>
14 
15 using namespace std;
16 using namespace Belle2;
17 
18 REG_MODULE(RecoTrackCreator)
19 
21  Module()
22 {
23  setDescription("Converts the given genfit::TrackCands in the StoreArray to RecoTracks for further use in the fitter.");
24  setPropertyFlags(c_ParallelProcessingCertified);
25 
26  addParam("trackCandidatesStoreArrayName", m_param_trackCandidatesStoreArrayName, "StoreArray name of the input track candidates.",
27  m_param_trackCandidatesStoreArrayName);
28  addParam("recoTracksStoreArrayName", m_param_recoTracksStoreArrayName, "StoreArray name of the output reco tracks.",
29  m_param_recoTracksStoreArrayName);
30  addParam("recoHitInformationStoreArrayName", m_param_recoHitInformationStoreArrayName,
31  "StoreArray name of the output reco hit information.", m_param_recoHitInformationStoreArrayName);
32 
33  addParam("recreateSortingParameters", m_param_recreateSortingParameters,
34  "Flag to recreate the sorting parameters of the hit out of the stored order.", m_param_recreateSortingParameters);
35 
36  addParam("pxdHitsStoreArrayName", m_param_pxdHitsStoreArrayName, "StoreArray name of the input PXD hits.",
37  m_param_pxdHitsStoreArrayName);
38  addParam("svdHitsStoreArrayName", m_param_svdHitsStoreArrayName, "StoreArray name of the input SVD hits.",
39  m_param_svdHitsStoreArrayName);
40  addParam("cdcHitsStoreArrayName", m_param_cdcHitsStoreArrayName, "StoreArray name of the input CDC hits.",
41  m_param_cdcHitsStoreArrayName);
42  addParam("bklmHitsStoreArrayName", m_param_bklmHitsStoreArrayName, "StoreArray name of the input BKLM hits.",
43  m_param_bklmHitsStoreArrayName);
44  addParam("eklmHitsStoreArrayName", m_param_eklmHitsStoreArrayName, "StoreArray name of the input EKLM hits.",
45  m_param_eklmHitsStoreArrayName);
46 }
47 
48 void RecoTrackCreatorModule::initialize()
49 {
50  // Read in genfit::TrackCands
51  // Write our RecoTracks
52  StoreArray<genfit::TrackCand> trackCandidates(m_param_trackCandidatesStoreArrayName);
53  trackCandidates.isRequired();
54 
55  StoreArray<RecoTrack> recoTracks(m_param_recoTracksStoreArrayName);
56  recoTracks.registerInDataStore();
57  recoTracks.registerRelationTo(trackCandidates);
58  trackCandidates.registerRelationTo(recoTracks);
59 
60  StoreArray<MCParticle> mcParticles;
61  if (mcParticles.isOptional()) {
62  recoTracks.registerRelationTo(mcParticles);
63  }
64 
65  RecoTrack::registerRequiredRelations(recoTracks,
66  m_param_pxdHitsStoreArrayName,
67  m_param_svdHitsStoreArrayName,
68  m_param_cdcHitsStoreArrayName,
69  m_param_bklmHitsStoreArrayName,
70  m_param_eklmHitsStoreArrayName,
71  m_param_recoHitInformationStoreArrayName);
72 }
73 
74 void RecoTrackCreatorModule::event()
75 {
76  StoreArray<genfit::TrackCand> trackCandidates(m_param_trackCandidatesStoreArrayName);
77 
78  StoreArray<RecoTrack> recoTracks(m_param_recoTracksStoreArrayName);
79 
80  StoreArray<RecoHitInformation> recoHitInformations(m_param_recoHitInformationStoreArrayName);
81 
82  StoreArray<MCParticle> mcParticles;
83 
84  // ugly..
85 
86  for (const genfit::TrackCand& trackCandidate : trackCandidates) {
87 
88  if (trackCandidate.getNHits() < 3) {
89  B2WARNING("Number of hits of track candidate is smaller than 3. Not creating track out of it.");
90  continue;
91  }
92 
93  RecoTrack* newRecoTrack = RecoTrack::createFromTrackCand(trackCandidate, m_param_recoTracksStoreArrayName,
94  m_param_cdcHitsStoreArrayName, m_param_svdHitsStoreArrayName, m_param_pxdHitsStoreArrayName,
95  m_param_recoHitInformationStoreArrayName,
96  "", "", m_param_recreateSortingParameters);
97 
98 
99  newRecoTrack->addRelationTo(&trackCandidate);
100 
101  // Add also the MC information
102  const int mcParticleID = trackCandidate.getMcTrackId();
103  if (mcParticleID >= 0 and mcParticles.isOptional() and mcParticles.getEntries() > 0) {
104  MCParticle* relatedMCParticle = mcParticles[mcParticleID];
105  if (relatedMCParticle) {
106  newRecoTrack->addRelationTo(relatedMCParticle);
107  } else {
108  B2WARNING("Related MCParticle is invalid. Can not make a relation.");
109  }
110  }
111  }
112 }
Belle2::StoreArray::registerRelationTo
bool registerRelationTo(const StoreArray< TO > &toArray, DataStore::EDurability durability=DataStore::c_Event, DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut, const std::string &namedRelation="") const
Register a relation to the given StoreArray.
Definition: StoreArray.h:150
genfit::TrackCand
Track candidate – seed values and indices.
Definition: TrackCand.h:69
REG_MODULE
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:652
Belle2::RelationsInterface::addRelationTo
void addRelationTo(const RelationsInterface< BASE > *object, float weight=1.0, const std::string &namedRelation="") const
Add a relation from this object to another object (with caching).
Definition: RelationsObject.h:144
Belle2::RecoTrackCreatorModule
Module turning trackCands to reco tracks (will be unneeded once we create reco tracks from the beginn...
Definition: RecoTrackCreatorModule.h:33
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::RecoTrack
This is the Reconstruction Event-Data Model Track.
Definition: RecoTrack.h:78
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::MCParticle
A Class to store the Monte Carlo particle information.
Definition: MCParticle.h:43
Belle2::StoreArray
Accessor to arrays stored in the data store.
Definition: ECLMatchingPerformanceExpertModule.h:33
Belle2::StoreArray::getEntries
int getEntries() const
Get the number of objects in the array.
Definition: StoreArray.h:226