Belle II Software  release-05-01-25
CDCCosmicTrackMergeModule.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2015-2016 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Dong Van Thanh *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <cdc/modules/cdcRecoTrackFilter/CDCCosmicTrackMergeModule.h>
12 #include <tracking/dataobjects/RecoTrack.h>
13 #include <framework/datastore/StoreArray.h>
14 
15 using namespace Belle2;
16 
17 REG_MODULE(CDCCosmicTrackMerger);
18 
20 {
21  setDescription("Select cosmic events containing two tracks (up/down) and merge two tracks"
22  "Old reco tracks store array will be deleted afterwards, if the parameter is set to do so.");
24 
25  addParam("recoTracksStoreArrayName", m_param_recoTracksStoreArrayName,
26  "StoreArray containing the RecoTracks to read from and delete afterwards.",
28  addParam("MergedRecoTracksStoreArrayName", m_param_MergedRecoTracksStoreArrayName,
29  "StoreArray to where to copy the merged RecoTrack.",
31  addParam("deleteOtherRecoTracks", m_param_deleteOtherRecoTracks,
32  "Flag to delete the not Merged RecoTracks from the input StoreArray.",
34  addParam("MinimumNumHitCut", m_MinimumNumHitCut, "Number of hit per track required for each track", m_MinimumNumHitCut);
35 }
36 
38 {
40  recoTracks.isRequired();
41 
43  MergedRecoTracks.registerInDataStore();
44 
45  RecoTrack::registerRequiredRelations(MergedRecoTracks);
46 }
47 
49 {
52 
53  if (recoTrackStoreArray.getEntries() == 2) {
54  if (recoTrackStoreArray[0]->getNumberOfCDCHits() > m_MinimumNumHitCut
55  && recoTrackStoreArray[1]->getNumberOfCDCHits() > m_MinimumNumHitCut) {
56  // if(recoTrackStoreArray[0].getPositionSeed().Y() * recoTrackStoreArray[1].getPositionSeed().Y() >0) continue;
57 
58  std::vector<RecoTrack*> recoTracks;
59  recoTracks.reserve(static_cast<unsigned int>(recoTrackStoreArray.getEntries()));
60 
61  for (RecoTrack& recoTrack : recoTrackStoreArray) {
62  recoTracks.push_back(&recoTrack);
63  }
64 
65  std::function < bool (RecoTrack*, RecoTrack*)> lmdSort = [](RecoTrack * lhs, RecoTrack * rhs) {
66  return (lhs->getPositionSeed().Y() > rhs->getPositionSeed().Y());
67  };
68  std::sort(recoTracks.begin(), recoTracks.end(), lmdSort);
69  RecoTrack* upperTrack = recoTracks[0];
70  RecoTrack* lowerTrack = recoTracks[1];
71  B2DEBUG(99, "upper track posSeed :" << upperTrack->getPositionSeed().Y());
72  B2DEBUG(99, "Lowee track posSeed :" << lowerTrack->getPositionSeed().Y());
73  RecoTrack* MergedRecoTrack = MergedRecoTracks.appendNew(upperTrack->getPositionSeed(),
74  upperTrack->getMomentumSeed(),
75  upperTrack->getChargeSeed());
76  // retain the seed time of the original track. Important for t0 extraction.
77  MergedRecoTrack->setTimeSeed(upperTrack->getTimeSeed());
78  MergedRecoTrack->addHitsFromRecoTrack(upperTrack);
79  MergedRecoTrack->addHitsFromRecoTrack(lowerTrack);
81  // Delete the other RecoTracks, as they were probably found under a wrong T0 assumption.
82  recoTracks.clear();
83  }
84  }
85  }
86 }
Belle2::StoreArray::appendNew
T * appendNew()
Construct a new T object at the end of the array.
Definition: StoreArray.h:256
Belle2::RecoTrack::registerRequiredRelations
static void registerRequiredRelations(StoreArray< RecoTrack > &recoTracks, std::string const &pxdHitsStoreArrayName="", std::string const &svdHitsStoreArrayName="", std::string const &cdcHitsStoreArrayName="", std::string const &bklmHitsStoreArrayName="", std::string const &eklmHitsStoreArrayName="", std::string const &recoHitInformationStoreArrayName="")
Convenience method which registers all relations required to fully use a RecoTrack.
Definition: RecoTrack.cc:42
Belle2::RecoTrack::addHitsFromRecoTrack
size_t addHitsFromRecoTrack(const RecoTrack *recoTrack, unsigned int sortingParameterOffset=0, bool reversed=false, boost::optional< double > optionalMinimalWeight=boost::none)
Add all hits from another RecoTrack to this RecoTrack.
Definition: RecoTrack.cc:230
Belle2::RecoTrack::setTimeSeed
void setTimeSeed(const double timeSeed)
Set the time seed. ATTENTION: This is not the fitted time.
Definition: RecoTrack.h:520
Belle2::CDCCosmicTrackMergerModule::CDCCosmicTrackMergerModule
CDCCosmicTrackMergerModule()
Create a new instance of the module.
Definition: CDCCosmicTrackMergeModule.cc:19
Belle2::Module::setDescription
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:216
REG_MODULE
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:652
Belle2::Module::c_ParallelProcessingCertified
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition: Module.h:82
Belle2::CDCCosmicTrackMergerModule::initialize
void initialize() override
Register the store arrays and store obj pointers.
Definition: CDCCosmicTrackMergeModule.cc:37
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::Module::setPropertyFlags
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition: Module.cc:210
Belle2::RecoTrack::getTimeSeed
double getTimeSeed() const
Return the time seed stored in the reco track. ATTENTION: This is not the fitted time.
Definition: RecoTrack.h:500
Belle2::RecoTrack
This is the Reconstruction Event-Data Model Track.
Definition: RecoTrack.h:78
Belle2::RecoTrack::getPositionSeed
TVector3 getPositionSeed() const
Return the position seed stored in the reco track. ATTENTION: This is not the fitted position.
Definition: RecoTrack.h:477
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::CDCCosmicTrackMergerModule::m_param_MergedRecoTracksStoreArrayName
std::string m_param_MergedRecoTracksStoreArrayName
StoreArray name where the merged reco track is written.
Definition: CDCCosmicTrackMergeModule.h:46
Belle2::RecoTrack::getMomentumSeed
TVector3 getMomentumSeed() const
Return the momentum seed stored in the reco track. ATTENTION: This is not the fitted momentum.
Definition: RecoTrack.h:484
Belle2::Module::addParam
void addParam(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Definition: Module.h:562
Belle2::CDCCosmicTrackMergerModule::event
void event() override
Do the selection.
Definition: CDCCosmicTrackMergeModule.cc:48
Belle2::CDCCosmicTrackMergerModule::m_param_recoTracksStoreArrayName
std::string m_param_recoTracksStoreArrayName
StoreArray name from which to read the reco tracks.
Definition: CDCCosmicTrackMergeModule.h:44
Belle2::CDCCosmicTrackMergerModule::m_param_deleteOtherRecoTracks
bool m_param_deleteOtherRecoTracks
Flag to delete the not RecoTracks from the input StoreArray.
Definition: CDCCosmicTrackMergeModule.h:48
Belle2::CDCCosmicTrackMergerModule::m_MinimumNumHitCut
double m_MinimumNumHitCut
Minium NDF required for each track (up and down).
Definition: CDCCosmicTrackMergeModule.h:50
Belle2::RecoTrack::getChargeSeed
short int getChargeSeed() const
Return the charge seed stored in the reco track. ATTENTION: This is not the fitted charge.
Definition: RecoTrack.h:497
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