1 #include "trg/cdc/modules/mcmatcher/CDCTriggerRecoHitMatcherModule.h"
3 #include <cdc/dataobjects/CDCHit.h>
5 #include <framework/gearbox/Const.h>
11 struct iter_pair_range : std::pair<Iter, Iter> {
12 iter_pair_range(std::pair<Iter, Iter>
const& x) : std::pair<Iter, Iter>(x) {}
13 Iter begin()
const {
return this->first;}
14 Iter end()
const {
return this->second;}
18 inline iter_pair_range<Iter> as_range(std::pair<Iter, Iter>
const& x)
20 return iter_pair_range<Iter>(x);
26 typedef float Efficiency;
40 setDescription(
"A module to match CDCTriggerTracks to RecoTracks.\n"
41 "First makes relations from RecoTracks to CDCTriggerSegmentHits, "
42 "then makes relations from RecoTracks to CDCTriggerTracks "
45 addParam(
"RecoTrackCollectionName", m_RecoTrackCollectionName,
46 "Name of the RecoTrack StoreArray to be matched.",
47 string(
"RecoTracks"));
48 addParam(
"MCParticleCollectionName", m_MCParticleCollectionName,
49 "Name of the MCParticle StoreArray to be matched.",
50 string(
"MCParticles"));
51 addParam(
"MCTrackableCollectionName", m_MCTrackableCollectionName,
52 "Name of a new StoreArray holding MCParticles considered as trackable.",
54 addParam(
"RecoTrackableCollectionName", m_RecoTrackableCollectionName,
56 "Name of the StoreArray holding primary MCParticle matched to a RecoTrack, but the vertex and momentum is overridden with the RecoTrack values.",
57 string(
"RecoTrackable"));
58 addParam(
"hitCollectionName", m_hitCollectionName,
59 "Name of the StoreArray of CDCTriggerSegmentHits used for the matching.",
61 addParam(
"TrackCollectionName", m_TrackCollectionName,
62 "Name of the Track StoreArray.",
70 m_segmentHits.isRequired(m_hitCollectionName);
71 m_recoTracks.isRequired(m_RecoTrackCollectionName);
72 m_recoTrackable.registerInDataStore(m_RecoTrackableCollectionName);
73 m_mdstTracks.isRequired(m_TrackCollectionName);
75 m_recoTracks.registerRelationTo(m_segmentHits);
76 m_recoTrackable.registerRelationTo(m_segmentHits);
77 m_recoTrackable.registerRelationTo(m_recoTracks);
85 for (
int ireco = 0; ireco < m_recoTracks.getEntries(); ++ireco) {
86 RecoTrack* recoTrack = m_recoTracks[ireco];
89 bool relateReco =
true;
104 TVector3 vtx = fitres->getPosition();
107 MCParticle* recoTrackable = m_recoTrackable.appendNew();
114 for (
unsigned iHit = 0; iHit < cdcHits.size(); ++iHit) {
117 for (
unsigned iTS = 0; iTS < relHits.
size(); ++iTS) {
119 if (relHits.
weight(iTS) > 1) {