12 #include <arich/modules/arichReconstruction/ARICHReconstructorModule.h>
16 #include <mdst/dataobjects/Track.h>
17 #include <tracking/dataobjects/ExtHit.h>
18 #include <mdst/dataobjects/MCParticle.h>
19 #include <arich/dataobjects/ARICHAeroHit.h>
20 #include <arich/dataobjects/ARICHLikelihood.h>
21 #include <arich/dataobjects/ARICHTrack.h>
22 #include <arich/dataobjects/ARICHHit.h>
25 #include <framework/datastore/DataStore.h>
26 #include <framework/datastore/StoreArray.h>
29 #include <framework/gearbox/Unit.h>
30 #include <framework/gearbox/Const.h>
31 #include <framework/logging/Logger.h>
37 using namespace boost;
59 setDescription(
"This module calculates the ARICHLikelihood values for all particle id. hypotheses, for all tracks that enter ARICH in the event.");
62 setPropertyFlags(c_ParallelProcessingCertified);
65 addParam(
"trackPositionResolution", m_trackPositionResolution,
66 "Resolution of track position on aerogel plane (for additional smearing of MC tracks)", 1.0 * Unit::mm);
67 addParam(
"trackAngleResolution", m_trackAngleResolution,
68 "Resolution of track direction angle on aerogel plane (for additional smearing of MC tracks)", 2.0 * Unit::mrad);
69 addParam(
"inputTrackType", m_inputTrackType,
"Input tracks switch: tracking (0), from AeroHits - MC info (1)", 0);
70 addParam(
"storePhotons", m_storePhot,
"Set to 1 to store reconstructed photon information (Ch. angle,...)", 0);
71 addParam(
"useAlignment", m_align,
"Use ARICH global position alignment constants",
true);
72 addParam(
"useMirrorAlignment", m_alignMirrors,
"Use ARICH mirror alignment constants",
true);
75 ARICHReconstructorModule::~ARICHReconstructorModule()
77 if (m_ana)
delete m_ana;
80 void ARICHReconstructorModule::initialize()
83 if (m_ana)
delete m_ana;
85 m_ana->setTrackPositionResolution(m_trackPositionResolution);
86 m_ana->setTrackAngleResolution(m_trackAngleResolution);
87 m_ana->useMirrorAlignment(m_alignMirrors);
90 arichHits.isRequired();
97 aeroHits.isOptional();
99 if (!aeroHits.isOptional()) {
101 extHits.isRequired();
105 mcParticles.isOptional();
108 likelihoods.registerInDataStore();
111 arichTracks.registerInDataStore();
116 tracks.registerRelationTo(likelihoods);
124 void ARICHReconstructorModule::beginRun()
129 void ARICHReconstructorModule::event()
142 if (m_inputTrackType == 0) {
150 for (
int itrk = 0; itrk < Tracks.
getEntries(); ++itrk) {
152 const Track* track = Tracks[itrk];
153 const TrackFitResult* fitResult = track->getTrackFitResultWithClosestMass(hypothesis);
155 B2ERROR(
"No TrackFitResult for " << hypothesis.
getPDGCode());
162 if (particle) aeroHit = particle->getRelated<
ARICHAeroHit>();
168 const ExtHit* arich2ndHit = NULL;
169 const ExtHit* arichWinHit = NULL;
171 for (
unsigned i = 0; i < extHits.size(); i++) {
172 const ExtHit* extHit = extHits[i];
173 if (abs(extHit->
getPdgCode()) != pdgCode)
continue;
175 if (extHit->
getStatus() != EXT_EXIT)
continue;
177 if (extHit->
getCopyID() == 12345) {
continue;}
178 if (extHit->
getCopyID() == 6789) { arich2ndHit = extHit;
continue;}
179 arichWinHit = extHit;
187 arichTrack = arichTracks.
appendNew(arich2ndHit);
188 if (arichWinHit) arichTrack->setHapdWindowHit(arichWinHit);
192 if (!arichTrack)
continue;
194 m_ana->transformTrackToLocal(*arichTrack, m_align);
198 m_ana->likelihood2(*arichTrack, arichHits, *like);
200 track->addRelationTo(like);
215 for (
int iTrack = 0; iTrack < nTracks; ++iTrack) {
221 m_ana->smearTrack(*arichTrack);
223 m_ana->transformTrackToLocal(*arichTrack, m_align);
227 m_ana->likelihood2(*arichTrack, arichHits, *like);
236 void ARICHReconstructorModule::endRun()
240 void ARICHReconstructorModule::terminate()
244 void ARICHReconstructorModule::printModuleParams()
246 if (m_inputTrackType == 0) { B2DEBUG(100,
"ARICHReconstructorModule: track infromation is taken from mdst Tracks.");}
247 else B2DEBUG(100,
"ARICHReconstructorModule: track information is taken from MC (ARICHAeroHit).");