12 #include <top/modules/TOPMCTrackMaker/TOPMCTrackMakerModule.h>
15 #include <framework/datastore/StoreArray.h>
18 #include <framework/gearbox/Unit.h>
19 #include <framework/gearbox/Const.h>
20 #include <framework/geometry/BFieldManager.h>
23 #include <mdst/dataobjects/Track.h>
24 #include <mdst/dataobjects/TrackFitResult.h>
25 #include <tracking/dataobjects/ExtHit.h>
26 #include <mdst/dataobjects/MCParticle.h>
27 #include <top/dataobjects/TOPBarHit.h>
51 setDescription(
"Constructs Tracks and ExtHits from MCParticles and TOPBarHits. "
52 "Utility needed for testing and debugging of TOP reconstruction.");
53 setPropertyFlags(c_ParallelProcessingCertified);
59 TOPMCTrackMakerModule::~TOPMCTrackMakerModule()
63 void TOPMCTrackMakerModule::initialize()
69 mcParticles.isRequired();
77 tracks.registerInDataStore();
80 fitResults.registerInDataStore();
83 extHits.registerInDataStore();
85 tracks.registerRelationTo(mcParticles);
86 tracks.registerRelationTo(extHits);
90 void TOPMCTrackMakerModule::beginRun()
94 void TOPMCTrackMakerModule::event()
104 for (
const auto& mcParticle : mcParticles) {
105 if (mcParticle.getStatus(MCParticle::c_PrimaryParticle) == 0)
continue;
106 if (mcParticle.getCharge() == 0)
continue;
107 const auto* barHit = mcParticle.getRelated<
TOPBarHit>();
108 if (!barHit)
continue;
111 fitResults.appendNew(mcParticle.getVertex(),
112 mcParticle.getMomentum(),
114 mcParticle.getCharge(),
117 BFieldManager::getField(0, 0, 0).Z() / Unit::T,
120 auto* track = tracks.appendNew();
121 track->setTrackFitResultIndex(Const::pion, fitResults.getEntries() - 1);
122 track->addRelationTo(&mcParticle);
125 double pmom = barHit->getMomentum().Mag();
126 double mass = chargedStable.
getMass();
127 double beta = pmom / sqrt(pmom * pmom + mass * mass);
128 double tof = barHit->getLength() / beta / Const::speedOfLight;
131 barHit->getModuleID(),
135 barHit->getPosition(),
136 barHit->getMomentum(),
138 track->addRelationTo(extHit);
144 void TOPMCTrackMakerModule::endRun()
148 void TOPMCTrackMakerModule::terminate()