File indexing completed on 2023-10-25 10:01:24
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "RecoMuon/MuonSeedGenerator/src/MuonSeedFinder.h"
0010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0011
0012 using namespace std;
0013
0014 typedef MuonTransientTrackingRecHit::MuonRecHitPointer MuonRecHitPointer;
0015 typedef MuonTransientTrackingRecHit::ConstMuonRecHitPointer ConstMuonRecHitPointer;
0016 typedef MuonTransientTrackingRecHit::MuonRecHitContainer MuonRecHitContainer;
0017
0018 MuonSeedFinder::MuonSeedFinder(const edm::ParameterSet& pset) : theBarrel(), theOverlap(), theEndcap() {
0019
0020
0021 theMinMomentum = 3.0;
0022 thePtExtractor = new MuonSeedPtExtractor(pset);
0023 theBarrel.setPtExtractor(thePtExtractor);
0024 theOverlap.setPtExtractor(thePtExtractor);
0025 theEndcap.setPtExtractor(thePtExtractor);
0026 }
0027
0028 void MuonSeedFinder::setBField(const MagneticField* field) {
0029 theField = field;
0030 theBarrel.setBField(field);
0031 theOverlap.setBField(field);
0032 theEndcap.setBField(field);
0033 }
0034
0035 void MuonSeedFinder::seeds(const MuonTransientTrackingRecHit::MuonRecHitContainer& hits,
0036 std::vector<TrajectorySeed>& result) {
0037 const std::string metname = "Muon|RecoMuon|MuonSeedFinder";
0038
0039
0040
0041 unsigned int num_bar = 0;
0042 for (MuonRecHitContainer::const_iterator iter = hits.begin(); iter != hits.end(); iter++) {
0043 if ((*iter)->isDT()) {
0044 theBarrel.add(*iter);
0045 theOverlap.add(*iter);
0046 num_bar++;
0047 }
0048 }
0049
0050 unsigned int num_endcap = 0;
0051 for (MuonRecHitContainer::const_iterator iter = hits.begin(); iter != hits.end(); iter++) {
0052 if ((*iter)->isCSC() || (*iter)->isME0()) {
0053 theEndcap.add(*iter);
0054 theOverlap.add(*iter);
0055 ++num_endcap;
0056 }
0057 }
0058
0059
0060 if (num_bar > 1 || (num_bar == 1 && (num_endcap == 0 || theBarrel.firstRecHit()->dimension() == 4))) {
0061 LogDebug(metname) << "Barrel Seeds " << num_bar << endl;
0062 result.push_back(theBarrel.seed());
0063 }
0064
0065 if (num_endcap > 1 || (num_endcap == 1 && num_bar == 0)) {
0066 LogDebug(metname) << "Endcap Seeds " << num_endcap << endl;
0067 result.push_back(theEndcap.seed());
0068 }
0069
0070 if (num_bar > 0 && num_endcap > 0) {
0071 LogTrace(metname) << "Overlap Seed" << endl;
0072 std::vector<TrajectorySeed> overlapSeeds = theOverlap.seeds();
0073 result.insert(result.end(), overlapSeeds.begin(), overlapSeeds.end());
0074 }
0075
0076 theBarrel.clear();
0077 theOverlap.clear();
0078 theEndcap.clear();
0079 }