CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Public Attributes | Private Member Functions | Private Attributes
MuonSeedCleaner Class Reference

#include <MuonSeedCleaner.h>

Public Types

typedef std::deque< bool > BoolContainer
 
typedef MuonTransientTrackingRecHit::MuonRecHitContainer SegmentContainer
 

Public Member Functions

 MuonSeedCleaner (const edm::ParameterSet &, edm::ConsumesCollector &&)
 Constructor. More...
 
int NRecHitsFromSegment (const TrackingRecHit &rhit)
 
int NRecHitsFromSegment (MuonTransientTrackingRecHit *rhit)
 
std::vector< TrajectorySeedseedCleaner (const edm::EventSetup &eventSetup, std::vector< TrajectorySeed > &seeds)
 Cache pointer to geometry. More...
 
 ~MuonSeedCleaner ()
 Destructor. More...
 

Public Attributes

std::vector< int > badSeedLayer
 

Private Member Functions

TrajectorySeed BiggerCone (std::vector< TrajectorySeed > &seeds)
 select the seed with bigger projection cone to next layer More...
 
TrajectorySeed Chi2LengthSelection (std::vector< TrajectorySeed > &seeds)
 select seed by balance length and chi2 More...
 
std::vector< SeedContainerGroupSeeds (std::vector< TrajectorySeed > &seeds)
 group the seeds More...
 
TrajectorySeed LeanHighMomentum (std::vector< TrajectorySeed > &seeds)
 select the highest momentum pt seed More...
 
SeedContainer LengthFilter (std::vector< TrajectorySeed > &seeds)
 
bool MomentumFilter (std::vector< TrajectorySeed > &seeds)
 filter out the bad pt seeds, if all are bad pt seeds then keep all More...
 
TrajectorySeed MoreRecHits (std::vector< TrajectorySeed > &seeds)
 select the seed with more rechits More...
 
double NChi2OfSegment (const TrackingRecHit &rhit)
 retrieve number of rechits& normalized chi2 of associated segments of a seed More...
 
unsigned int OverlapSegments (const TrajectorySeed &seed1, const TrajectorySeed &seed2)
 check overlapping segment for seeds More...
 
SeedContainer SeedCandidates (std::vector< TrajectorySeed > &seeds, bool good)
 pick the seeds w/ 1st layer information and w/ more than 1 segments More...
 
double SeedChi2 (const TrajectorySeed &seed)
 
int SeedLength (const TrajectorySeed &seed)
 
GlobalVector SeedMomentum (const TrajectorySeed &seed)
 retrieve seed global momentum More...
 
GlobalPoint SeedPosition (const TrajectorySeed &seed)
 retrieve seed global position More...
 

Private Attributes

bool debug
 
std::vector< int > ShoweringLayers
 
SegmentContainer ShoweringSegments
 
MuonServiceProxytheService
 

Detailed Description

Algorith to clean duplicate seeds and select a right one

author: Shih-Chuan Kao - UCR

Definition at line 28 of file MuonSeedCleaner.h.

Member Typedef Documentation

◆ BoolContainer

typedef std::deque<bool> MuonSeedCleaner::BoolContainer

Definition at line 31 of file MuonSeedCleaner.h.

◆ SegmentContainer

Definition at line 30 of file MuonSeedCleaner.h.

Constructor & Destructor Documentation

◆ MuonSeedCleaner()

MuonSeedCleaner::MuonSeedCleaner ( const edm::ParameterSet pset,
edm::ConsumesCollector &&  iC 
)
explicit

Constructor.

Definition at line 49 of file MuonSeedCleaner.cc.

49  {
50  // Local Debug flag
51  debug = pset.getParameter<bool>("DebugMuonSeed");
52 
53  // muon service
54  edm::ParameterSet serviceParameters = pset.getParameter<edm::ParameterSet>("ServiceParameters");
55  theService = new MuonServiceProxy(serviceParameters, std::move(iC));
56 }

References debug, eostools::move(), MuonServiceProxy_cff::MuonServiceProxy, muonDTDigis_cfi::pset, and theService.

◆ ~MuonSeedCleaner()

MuonSeedCleaner::~MuonSeedCleaner ( )

Destructor.

Definition at line 61 of file MuonSeedCleaner.cc.

61  {
62  if (theService)
63  delete theService;
64 }

References theService.

Member Function Documentation

◆ BiggerCone()

TrajectorySeed MuonSeedCleaner::BiggerCone ( std::vector< TrajectorySeed > &  seeds)
private

select the seed with bigger projection cone to next layer

Definition at line 161 of file MuonSeedCleaner.cc.

162  {
163  if (seeds.size() == 1)
164  return seeds[0];
165 
166  float biggerProjErr = 9999.;
167  int winner = 0;
168  AlgebraicSymMatrix mat(5, 0);
169  for (size_t i = 0; i < seeds.size(); i++) {
170  auto r1 = seeds[i].recHits().begin();
171  mat = r1->parametersError().similarityT(r1->projectionMatrix());
172 
173  int NRecHits = NRecHitsFromSegment(*r1);
174 
175  float ddx = mat[1][1];
176  float ddy = mat[2][2];
177  float dxx = mat[3][3];
178  float dyy = mat[4][4];
179  float projectErr = sqrt((ddx * 10000.) + (ddy * 10000.) + dxx + dyy);
180 
181  if (NRecHits < 5)
182  continue;
183  if (projectErr < biggerProjErr)
184  continue;
185 
186  winner = static_cast<int>(i);
187  biggerProjErr = projectErr;
188  }
189  TrajectorySeed theSeed = seeds[winner];
190  seeds.erase(seeds.begin() + winner);
191  return theSeed;

References mps_fire::i, NRecHitsFromSegment(), diffTwoXMLs::r1, DetachedQuadStep_cff::seeds, and mathSSE::sqrt().

Referenced by seedCleaner().

◆ Chi2LengthSelection()

TrajectorySeed MuonSeedCleaner::Chi2LengthSelection ( std::vector< TrajectorySeed > &  seeds)
private

select seed by balance length and chi2

Definition at line 123 of file MuonSeedCleaner.cc.

124  {
125  if (seeds.size() == 1)
126  return seeds[0];
127 
128  int winner = 0;
129  int moreHits = 0;
130  double bestChi2 = 99999.;
131  for (size_t i = 0; i < seeds.size(); i++) {
132  // 1. fill out the Nchi2 of segments of the seed
133  //GlobalVector mom = SeedMomentum( seeds[i] ); // temporary use for debugging
134  //double pt = sqrt( (mom.x()*mom.x()) + (mom.y()*mom.y()) );
135  //std::cout<<" > SEED"<<i<<" pt:"<<pt<< std::endl;
136 
137  double theChi2 = SeedChi2(seeds[i]);
138  double dChi2 = fabs(1. - (theChi2 / bestChi2));
139  int theHits = seeds[i].nHits();
140  int dHits = theHits - moreHits;
141  //std::cout<<" ----- "<<std::endl;
142 
143  // 2. better chi2
144  if (theChi2 < bestChi2 && dChi2 > 0.05) {
145  winner = static_cast<int>(i);
146  bestChi2 = theChi2;
147  moreHits = theHits;
148  }
149  // 3. if chi2 is not much better, pick more rechits one
150  if (theChi2 >= bestChi2 && dChi2 < 0.05 && dHits > 0) {
151  winner = static_cast<int>(i);
152  bestChi2 = theChi2;
153  moreHits = theHits;
154  }
155  }
156  //std::cout<<" Winner is "<< winner <<std::endl;
157  TrajectorySeed theSeed = seeds[winner];
158  seeds.erase(seeds.begin() + winner);
159  return theSeed;

References mps_fire::i, SeedChi2(), DetachedQuadStep_cff::seeds, and bscTrigger_cfi::theHits.

Referenced by seedCleaner().

◆ GroupSeeds()

std::vector< SeedContainer > MuonSeedCleaner::GroupSeeds ( std::vector< TrajectorySeed > &  seeds)
private

group the seeds

Definition at line 325 of file MuonSeedCleaner.cc.

326  {
327  std::vector<SeedContainer> seedCollection;
328  seedCollection.clear();
329  std::vector<TrajectorySeed> theGroup;
330  std::vector<bool> usedSeed(seeds.size(), false);
331 
332  // categorize seeds by comparing overlapping segments or a certian eta-phi cone
333  for (size_t i = 0; i < seeds.size(); i++) {
334  if (usedSeed[i])
335  continue;
336  theGroup.push_back(seeds[i]);
337  usedSeed[i] = true;
338 
339  GlobalPoint pos1 = SeedPosition(seeds[i]);
340 
341  for (size_t j = i + 1; j < seeds.size(); j++) {
342  // 1.1 seeds with overlaaping segments will be grouped together
343  unsigned int overlapping = OverlapSegments(seeds[i], seeds[j]);
344  if (!usedSeed[j] && overlapping > 0) {
345  // reject the identical seeds
346  if (seeds[i].nHits() == overlapping && seeds[j].nHits() == overlapping) {
347  usedSeed[j] = true;
348  continue;
349  }
350  theGroup.push_back(seeds[j]);
351  usedSeed[j] = true;
352  }
353  if (usedSeed[j])
354  continue;
355 
356  // 1.2 seeds in a certain cone are grouped together
357  GlobalPoint pos2 = SeedPosition(seeds[j]);
358  double dh = pos1.eta() - pos2.eta();
359  double df = pos1.phi() - pos2.phi();
360  double dR = sqrt((dh * dh) + (df * df));
361 
362  if (dR > 0.3 && seeds[j].nHits() == 1)
363  continue;
364  if (dR > 0.2 && seeds[j].nHits() > 1)
365  continue;
366  theGroup.push_back(seeds[j]);
367  usedSeed[j] = true;
368  }
369  sort(theGroup.begin(), theGroup.end(), lengthSorting);
370  seedCollection.push_back(theGroup);
371  //std::cout<<" group "<<seedCollection.size() <<" w/"<< theGroup.size() <<" seeds"<<std::endl;
372  theGroup.clear();
373  }
374  return seedCollection;

References hgcalPerformanceValidation::df, cuy::dh, HGC3DClusterGenMatchSelector_cfi::dR, PV3DBase< T, PVType, FrameType >::eta(), mps_fire::i, dqmiolumiharvest::j, lengthSorting(), nHits, OverlapSegments(), PV3DBase< T, PVType, FrameType >::phi(), ElectronSeedTrackRefFix_cfi::seedCollection, SeedPosition(), DetachedQuadStep_cff::seeds, jetUpdater_cfi::sort, and mathSSE::sqrt().

Referenced by seedCleaner().

◆ LeanHighMomentum()

TrajectorySeed MuonSeedCleaner::LeanHighMomentum ( std::vector< TrajectorySeed > &  seeds)
private

select the highest momentum pt seed

Definition at line 193 of file MuonSeedCleaner.cc.

194  {
195  if (seeds.size() == 1)
196  return seeds[0];
197 
198  double highestPt = 0.;
199  int winner = 0;
200  for (size_t i = 0; i < seeds.size(); i++) {
202  double pt = sqrt((mom.x() * mom.x()) + (mom.y() * mom.y()));
203  if (pt > highestPt) {
204  winner = static_cast<int>(i);
205  highestPt = pt;
206  }
207  }
208  TrajectorySeed theSeed = seeds[winner];
209  seeds.erase(seeds.begin() + winner);
210  return theSeed;

References mps_fire::i, DiDispStaMuonMonitor_cfi::pt, SeedMomentum(), DetachedQuadStep_cff::seeds, mathSSE::sqrt(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by seedCleaner().

◆ LengthFilter()

SeedContainer MuonSeedCleaner::LengthFilter ( std::vector< TrajectorySeed > &  seeds)
private

pick the seed by better parameter error collect long seeds

Definition at line 242 of file MuonSeedCleaner.cc.

243  {
244  SeedContainer longSeeds;
245  int NSegs = 0;
246  for (size_t i = 0; i < seeds.size(); i++) {
247  int theLength = static_cast<int>(seeds[i].nHits());
248  if (theLength > NSegs) {
249  NSegs = theLength;
250  longSeeds.clear();
251  longSeeds.push_back(seeds[i]);
252  } else if (theLength == NSegs) {
253  longSeeds.push_back(seeds[i]);
254  } else {
255  continue;
256  }
257  }
258  //std::cout<<" final Length :"<<NSegs<<std::endl;
259 
260  return longSeeds;

References mps_fire::i, nHits, and DetachedQuadStep_cff::seeds.

◆ MomentumFilter()

bool MuonSeedCleaner::MomentumFilter ( std::vector< TrajectorySeed > &  seeds)
private

filter out the bad pt seeds, if all are bad pt seeds then keep all

Definition at line 262 of file MuonSeedCleaner.cc.

263  {
264  bool findgoodMomentum = false;
265  SeedContainer goodMomentumSeeds = seeds;
266  seeds.clear();
267  for (size_t i = 0; i < goodMomentumSeeds.size(); i++) {
268  GlobalVector mom = SeedMomentum(goodMomentumSeeds[i]);
269  double pt = sqrt((mom.x() * mom.x()) + (mom.y() * mom.y()));
270  if (pt < 6. || pt > 2000.)
271  continue;
272  //if ( pt < 6. ) continue;
273  //std::cout<<" passed momentum :"<< pt <<std::endl;
274  seeds.push_back(goodMomentumSeeds[i]);
275  findgoodMomentum = true;
276  }
277  if (seeds.empty())
278  seeds = goodMomentumSeeds;
279 
280  return findgoodMomentum;

References mps_fire::i, DiDispStaMuonMonitor_cfi::pt, SeedMomentum(), DetachedQuadStep_cff::seeds, mathSSE::sqrt(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by seedCleaner().

◆ MoreRecHits()

TrajectorySeed MuonSeedCleaner::MoreRecHits ( std::vector< TrajectorySeed > &  seeds)
private

select the seed with more rechits

Definition at line 212 of file MuonSeedCleaner.cc.

213  {
214  if (seeds.size() == 1)
215  return seeds[0];
216 
217  int winner = 0;
218  int moreHits = 0;
219  double betterChi2 = 99999.;
220  for (size_t i = 0; i < seeds.size(); i++) {
221  int theHits = 0;
222  for (auto const& r1 : seeds[i].recHits()) {
224  }
225 
226  double theChi2 = SeedChi2(seeds[i]);
227 
228  if (theHits == moreHits && theChi2 < betterChi2) {
229  betterChi2 = theChi2;
230  winner = static_cast<int>(i);
231  }
232  if (theHits > moreHits) {
233  moreHits = theHits;
234  betterChi2 = theChi2;
235  winner = static_cast<int>(i);
236  }
237  }
238  TrajectorySeed theSeed = seeds[winner];
239  seeds.erase(seeds.begin() + winner);
240  return theSeed;

References mps_fire::i, NRecHitsFromSegment(), diffTwoXMLs::r1, FastTrackerRecHitMaskProducer_cfi::recHits, SeedChi2(), DetachedQuadStep_cff::seeds, and bscTrigger_cfi::theHits.

Referenced by seedCleaner().

◆ NChi2OfSegment()

double MuonSeedCleaner::NChi2OfSegment ( const TrackingRecHit rhit)
private

retrieve number of rechits& normalized chi2 of associated segments of a seed

Definition at line 491 of file MuonSeedCleaner.cc.

492  {
493  double NChi2 = 999999.;
494  const GeomDet* gdet = theService->trackingGeometry()->idToDet(rhit.geographicalId());
497 
498  double dof = static_cast<double>(theSeg->degreesOfFreedom());
499  NChi2 = theSeg->chi2() / dof;
500  //std::cout<<" Chi2 = "<< NChi2 <<" |" ;
501 
502  return NChi2;

References TrackingRecHit::clone(), TrackingRecHit::geographicalId(), GlobalTrackingGeometry::idToDet(), MuonTransientTrackingRecHit::specificBuild(), theService, and MuonServiceProxy::trackingGeometry().

Referenced by SeedChi2().

◆ NRecHitsFromSegment() [1/2]

int MuonSeedCleaner::NRecHitsFromSegment ( const TrackingRecHit rhit)

Definition at line 448 of file MuonSeedCleaner.cc.

449  {
450  int NRechits = 0;
451  const GeomDet* gdet = theService->trackingGeometry()->idToDet(rhit.geographicalId());
454 
455  DetId geoId = gdet->geographicalId();
456  if (geoId.subdetId() == MuonSubdetId::DT) {
457  DTChamberId DT_Id(rhit.geographicalId());
458  std::vector<TrackingRecHit*> DThits = theSeg->recHits();
459  int dt1DHits = 0;
460  for (size_t j = 0; j < DThits.size(); j++) {
461  dt1DHits += (DThits[j]->recHits()).size();
462  }
463  NRechits = dt1DHits;
464  }
465 
466  if (geoId.subdetId() == MuonSubdetId::CSC) {
467  NRechits = (theSeg->recHits()).size();
468  }
469  return NRechits;

References TrackingRecHit::clone(), MuonSubdetId::CSC, MuonSubdetId::DT, GeomDet::geographicalId(), TrackingRecHit::geographicalId(), GlobalTrackingGeometry::idToDet(), dqmiolumiharvest::j, findQualityFiles::size, MuonTransientTrackingRecHit::specificBuild(), theService, and MuonServiceProxy::trackingGeometry().

Referenced by BiggerCone(), MuonSeedBuilder::foundMatchingSegment(), MuonSeedBuilder::IdentifyShowering(), MoreRecHits(), and SeedLength().

◆ NRecHitsFromSegment() [2/2]

int MuonSeedCleaner::NRecHitsFromSegment ( MuonTransientTrackingRecHit rhit)

Definition at line 471 of file MuonSeedCleaner.cc.

472  {
473  int NRechits = 0;
474  DetId geoId = rhit->geographicalId();
475  if (geoId.subdetId() == MuonSubdetId::DT) {
476  DTChamberId DT_Id(geoId);
477  std::vector<TrackingRecHit*> DThits = rhit->recHits();
478  int dt1DHits = 0;
479  for (size_t j = 0; j < DThits.size(); j++) {
480  dt1DHits += (DThits[j]->recHits()).size();
481  }
482  NRechits = dt1DHits;
483  //std::cout<<" D_rh("<< dt1DHits <<") " ;
484  }
485  if (geoId.subdetId() == MuonSubdetId::CSC) {
486  NRechits = (rhit->recHits()).size();
487  //std::cout<<" C_rh("<<(rhit->recHits()).size() <<") " ;
488  }
489  return NRechits;

References MuonSubdetId::CSC, MuonSubdetId::DT, TrackingRecHit::geographicalId(), dqmiolumiharvest::j, GenericTransientTrackingRecHit::recHits(), findQualityFiles::size, and DetId::subdetId().

◆ OverlapSegments()

unsigned int MuonSeedCleaner::OverlapSegments ( const TrajectorySeed seed1,
const TrajectorySeed seed2 
)
private

check overlapping segment for seeds

Definition at line 376 of file MuonSeedCleaner.cc.

377  {
378  unsigned int overlapping = 0;
379  for (auto const& r1 : seed1.recHits()) {
380  DetId id1 = r1.geographicalId();
381  const GeomDet* gdet1 = theService->trackingGeometry()->idToDet(id1);
382  GlobalPoint gp1 = gdet1->toGlobal(r1.localPosition());
383 
384  for (auto const& r2 : seed2.recHits()) {
385  DetId id2 = r2.geographicalId();
386  if (id1 != id2)
387  continue;
388 
389  const GeomDet* gdet2 = theService->trackingGeometry()->idToDet(id2);
390  GlobalPoint gp2 = gdet2->toGlobal(r2.localPosition());
391 
392  double dx = gp1.x() - gp2.x();
393  double dy = gp1.y() - gp2.y();
394  double dz = gp1.z() - gp2.z();
395  double dL = sqrt(dx * dx + dy * dy + dz * dz);
396 
397  if (dL < 1.)
398  overlapping++;
399  }
400  }
401  return overlapping;

References PVValHelper::dx, PVValHelper::dy, PVValHelper::dz, globals_cff::id1, globals_cff::id2, GlobalTrackingGeometry::idToDet(), diffTwoXMLs::r1, diffTwoXMLs::r2, TrajectorySeed::recHits(), mathSSE::sqrt(), theService, GeomDet::toGlobal(), MuonServiceProxy::trackingGeometry(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by GroupSeeds().

◆ SeedCandidates()

SeedContainer MuonSeedCleaner::SeedCandidates ( std::vector< TrajectorySeed > &  seeds,
bool  good 
)
private

pick the seeds w/ 1st layer information and w/ more than 1 segments

Definition at line 282 of file MuonSeedCleaner.cc.

283  {
284  SeedContainer theCandidate;
285  theCandidate.clear();
286 
287  bool longSeed = false;
288  bool withFirstLayer = false;
289 
290  //std::cout<<"***** Seed Classification *****"<< seeds.size() <<std::endl;
291  for (size_t i = 0; i < seeds.size(); i++) {
292  if (seeds[i].nHits() > 1)
293  longSeed = true;
294  //std::cout<<" Seed: "<<i<<" w/"<<seeds[i].nHits()<<" segs "<<std::endl;
295  // looking for 1st layer segment
296  int idx = 0;
297  for (auto const& r1 : seeds[i].recHits()) {
298  idx++;
299  const GeomDet* gdet = theService->trackingGeometry()->idToDet(r1.geographicalId());
300  DetId geoId = gdet->geographicalId();
301 
302  if (geoId.subdetId() == MuonSubdetId::DT) {
303  DTChamberId DT_Id(r1.geographicalId());
304  //std::cout<<" ID:"<<DT_Id <<" pos:"<< r1->localPosition() <<std::endl;
305  if (DT_Id.station() != 1)
306  continue;
307  withFirstLayer = true;
308  }
309  if (geoId.subdetId() == MuonSubdetId::CSC) {
310  idx++;
311  CSCDetId CSC_Id = CSCDetId(r1.geographicalId());
312  //std::cout<<" ID:"<<CSC_Id <<" pos:"<< r1->localPosition() <<std::endl;
313  if (CSC_Id.station() != 1)
314  continue;
315  withFirstLayer = true;
316  }
317  }
318  bool goodseed = (longSeed && withFirstLayer) ? true : false;
319 
320  if (goodseed == good)
321  theCandidate.push_back(seeds[i]);
322  }
323  return theCandidate;

References MuonSubdetId::CSC, MuonSubdetId::DT, GeomDet::geographicalId(), good, mps_fire::i, GlobalTrackingGeometry::idToDet(), heavyIonCSV_trainingSettings::idx, nHits, diffTwoXMLs::r1, FastTrackerRecHitMaskProducer_cfi::recHits, DetachedQuadStep_cff::seeds, CSCDetId::station(), DetId::subdetId(), theService, and MuonServiceProxy::trackingGeometry().

Referenced by seedCleaner().

◆ SeedChi2()

double MuonSeedCleaner::SeedChi2 ( const TrajectorySeed seed)
private

Definition at line 403 of file MuonSeedCleaner.cc.

404  {
405  double theChi2 = 0.;
406  for (auto const& r1 : seed.recHits()) {
407  //std::cout<<" segmet : "<<it <<std::endl;
408  theChi2 += NChi2OfSegment(r1);
409  }
410  theChi2 = theChi2 / seed.nHits();
411 
412  //std::cout<<" final Length :"<<NSegs<<std::endl;
413  return theChi2;

References NChi2OfSegment(), diffTwoXMLs::r1, and fileCollector::seed.

Referenced by Chi2LengthSelection(), and MoreRecHits().

◆ seedCleaner()

std::vector< TrajectorySeed > MuonSeedCleaner::seedCleaner ( const edm::EventSetup eventSetup,
std::vector< TrajectorySeed > &  seeds 
)

Cache pointer to geometry.

Cache pointer to Magnetic field cleaning the seeds

Definition at line 71 of file MuonSeedCleaner.cc.

73  {
74  theService->update(eventSetup);
75 
76  std::vector<TrajectorySeed> FinalSeeds;
77 
78  // group the seeds
79  std::vector<SeedContainer> theCollection = GroupSeeds(seeds);
80 
81  // ckeck each group and pick the good one
82  for (size_t i = 0; i < theCollection.size(); i++) {
83  // separate seeds w/ more than 1 segments and w/ 1st layer segment information
84  SeedContainer goodSeeds = SeedCandidates(theCollection[i], true);
85  SeedContainer otherSeeds = SeedCandidates(theCollection[i], false);
86  if (MomentumFilter(goodSeeds)) {
87  //std::cout<<" == type1 "<<std::endl;
88  TrajectorySeed bestSeed = Chi2LengthSelection(goodSeeds);
89  FinalSeeds.push_back(bestSeed);
90 
91  GlobalPoint seedgp = SeedPosition(bestSeed);
92  double eta = fabs(seedgp.eta());
93  if (goodSeeds.size() > 2 && eta > 1.5) {
94  TrajectorySeed anotherSeed = MoreRecHits(goodSeeds);
95  FinalSeeds.push_back(anotherSeed);
96  }
97  } else if (MomentumFilter(otherSeeds)) {
98  //std::cout<<" == type2 "<<std::endl;
99  TrajectorySeed bestSeed = MoreRecHits(otherSeeds);
100  FinalSeeds.push_back(bestSeed);
101 
102  GlobalPoint seedgp = SeedPosition(bestSeed);
103  double eta = fabs(seedgp.eta());
104  if (otherSeeds.size() > 2 && eta > 1.5) {
105  TrajectorySeed anotherSeed = LeanHighMomentum(otherSeeds);
106  FinalSeeds.push_back(anotherSeed);
107  }
108  } else {
109  //std::cout<<" == type3 "<<std::endl;
110  TrajectorySeed bestSeed = LeanHighMomentum(theCollection[i]);
111  FinalSeeds.push_back(bestSeed);
112 
113  GlobalPoint seedgp = SeedPosition(bestSeed);
114  double eta = fabs(seedgp.eta());
115  if (theCollection.size() > 2 && eta > 1.5) {
116  TrajectorySeed anotherSeed = BiggerCone(theCollection[i]);
117  FinalSeeds.push_back(anotherSeed);
118  }
119  }
120  }
121  return FinalSeeds;

References BiggerCone(), Chi2LengthSelection(), PVValHelper::eta, PV3DBase< T, PVType, FrameType >::eta(), GroupSeeds(), mps_fire::i, LeanHighMomentum(), MomentumFilter(), MoreRecHits(), SeedCandidates(), SeedPosition(), DetachedQuadStep_cff::seeds, theService, and MuonServiceProxy::update().

Referenced by MuonSeedBuilder::build().

◆ SeedLength()

int MuonSeedCleaner::SeedLength ( const TrajectorySeed seed)
private

Definition at line 415 of file MuonSeedCleaner.cc.

416  {
417  int theHits = 0;
418  for (auto const& recHit : seed.recHits()) {
419  //std::cout<<" segmet : "<<it <<std::endl;
421  }
422 
423  //std::cout<<" final Length :"<<NSegs<<std::endl;
424  return theHits;

References NRecHitsFromSegment(), rpcPointValidation_cfi::recHit, fileCollector::seed, and bscTrigger_cfi::theHits.

◆ SeedMomentum()

GlobalVector MuonSeedCleaner::SeedMomentum ( const TrajectorySeed seed)
private

retrieve seed global momentum

Definition at line 437 of file MuonSeedCleaner.cc.

438  {
439  PTrajectoryStateOnDet pTSOD = seed.startingState();
440  DetId SeedDetId(pTSOD.detId());
441  const GeomDet* geoDet = theService->trackingGeometry()->idToDet(SeedDetId);
442  TrajectoryStateOnSurface SeedTSOS =
443  trajectoryStateTransform::transientState(pTSOD, &(geoDet->surface()), &*theService->magneticField());
444  GlobalVector mom = SeedTSOS.globalMomentum();
445 
446  return mom;

References PTrajectoryStateOnDet::detId(), TrajectoryStateOnSurface::globalMomentum(), GlobalTrackingGeometry::idToDet(), MuonServiceProxy::magneticField(), fileCollector::seed, theService, MuonServiceProxy::trackingGeometry(), and trajectoryStateTransform::transientState().

Referenced by LeanHighMomentum(), and MomentumFilter().

◆ SeedPosition()

GlobalPoint MuonSeedCleaner::SeedPosition ( const TrajectorySeed seed)
private

retrieve seed global position

Definition at line 426 of file MuonSeedCleaner.cc.

427  {
428  PTrajectoryStateOnDet pTSOD = seed.startingState();
429  DetId SeedDetId(pTSOD.detId());
430  const GeomDet* geoDet = theService->trackingGeometry()->idToDet(SeedDetId);
431  TrajectoryStateOnSurface SeedTSOS =
432  trajectoryStateTransform::transientState(pTSOD, &(geoDet->surface()), &*theService->magneticField());
433  GlobalPoint pos = SeedTSOS.globalPosition();
434 
435  return pos;

References PTrajectoryStateOnDet::detId(), TrajectoryStateOnSurface::globalPosition(), GlobalTrackingGeometry::idToDet(), MuonServiceProxy::magneticField(), fileCollector::seed, theService, MuonServiceProxy::trackingGeometry(), and trajectoryStateTransform::transientState().

Referenced by GroupSeeds(), and seedCleaner().

Member Data Documentation

◆ badSeedLayer

std::vector<int> MuonSeedCleaner::badSeedLayer

Definition at line 54 of file MuonSeedCleaner.h.

◆ debug

bool MuonSeedCleaner::debug
private

◆ ShoweringLayers

std::vector<int> MuonSeedCleaner::ShoweringLayers
private

Definition at line 97 of file MuonSeedCleaner.h.

◆ ShoweringSegments

SegmentContainer MuonSeedCleaner::ShoweringSegments
private

Definition at line 96 of file MuonSeedCleaner.h.

◆ theService

MuonServiceProxy* MuonSeedCleaner::theService
private
Vector3DBase
Definition: Vector3DBase.h:8
good
const auto good
min quality of good
Definition: CAHitNtupletGeneratorKernelsImpl.h:760
MuonSubdetId::CSC
static constexpr int CSC
Definition: MuonSubdetId.h:12
DOFs::dof
dof
Definition: AlignPCLThresholdsWriter.cc:37
mps_fire.i
i
Definition: mps_fire.py:428
MuonTransientTrackingRecHit::specificBuild
static MuonRecHitPointer specificBuild(const GeomDet *geom, const TrackingRecHit *rh)
Definition: MuonTransientTrackingRecHit.h:75
GeomDet
Definition: GeomDet.h:27
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
globals_cff.id1
id1
Definition: globals_cff.py:33
TrajectoryStateOnSurface::globalPosition
GlobalPoint globalPosition() const
Definition: TrajectoryStateOnSurface.h:65
pos
Definition: PixelAliasList.h:18
MuonSeedCleaner::MoreRecHits
TrajectorySeed MoreRecHits(std::vector< TrajectorySeed > &seeds)
select the seed with more rechits
Definition: MuonSeedCleaner.cc:212
TrackingRecHit::geographicalId
DetId geographicalId() const
Definition: TrackingRecHit.h:120
rpcPointValidation_cfi.recHit
recHit
Definition: rpcPointValidation_cfi.py:7
MuonServiceProxy_cff.MuonServiceProxy
MuonServiceProxy
Definition: MuonServiceProxy_cff.py:14
MuonSeedCleaner::SeedChi2
double SeedChi2(const TrajectorySeed &seed)
Definition: MuonSeedCleaner.cc:403
heavyIonCSV_trainingSettings.idx
idx
Definition: heavyIonCSV_trainingSettings.py:5
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
fileCollector.seed
seed
Definition: fileCollector.py:127
DetId
Definition: DetId.h:17
lengthSorting
static bool lengthSorting(const TrajectorySeed &s1, const TrajectorySeed &s2)
Definition: MuonSeedCleaner.cc:44
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
MuonSeedCleaner::SeedPosition
GlobalPoint SeedPosition(const TrajectorySeed &seed)
retrieve seed global position
Definition: MuonSeedCleaner.cc:426
MuonTransientTrackingRecHit::MuonRecHitPointer
std::shared_ptr< MuonTransientTrackingRecHit > MuonRecHitPointer
Definition: MuonTransientTrackingRecHit.h:21
PTrajectoryStateOnDet::detId
unsigned int detId() const
Definition: PTrajectoryStateOnDet.h:65
MuonSeedCleaner::NChi2OfSegment
double NChi2OfSegment(const TrackingRecHit &rhit)
retrieve number of rechits& normalized chi2 of associated segments of a seed
Definition: MuonSeedCleaner.cc:491
nHits
const caConstants::TupleMultiplicity *__restrict__ const HitsOnGPU *__restrict__ double *__restrict__ float *__restrict__ double *__restrict__ uint32_t nHits
Definition: BrokenLineFitOnGPU.h:27
MuonSeedCleaner::MomentumFilter
bool MomentumFilter(std::vector< TrajectorySeed > &seeds)
filter out the bad pt seeds, if all are bad pt seeds then keep all
Definition: MuonSeedCleaner.cc:262
ElectronSeedTrackRefFix_cfi.seedCollection
seedCollection
Definition: ElectronSeedTrackRefFix_cfi.py:9
PVValHelper::eta
Definition: PVValidationHelpers.h:70
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
MuonSeedCleaner::debug
bool debug
Definition: MuonSeedCleaner.h:93
SeedContainer
std::vector< TrajectorySeed > SeedContainer
Definition: MuonSeedBuilder.h:26
MuonSeedCleaner::NRecHitsFromSegment
int NRecHitsFromSegment(const TrackingRecHit &rhit)
Definition: MuonSeedCleaner.cc:448
MuonSubdetId::DT
static constexpr int DT
Definition: MuonSubdetId.h:11
Point3DBase< float, GlobalTag >
DetId::subdetId
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum)
Definition: DetId.h:48
MuonSeedCleaner::OverlapSegments
unsigned int OverlapSegments(const TrajectorySeed &seed1, const TrajectorySeed &seed2)
check overlapping segment for seeds
Definition: MuonSeedCleaner.cc:376
FastTrackerRecHitMaskProducer_cfi.recHits
recHits
Definition: FastTrackerRecHitMaskProducer_cfi.py:8
MuonServiceProxy::update
void update(const edm::EventSetup &setup, bool duringEvent=true)
update the services each event
Definition: MuonServiceProxy.cc:111
MuonSeedCleaner::BiggerCone
TrajectorySeed BiggerCone(std::vector< TrajectorySeed > &seeds)
select the seed with bigger projection cone to next layer
Definition: MuonSeedCleaner.cc:161
GeomDet::geographicalId
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:64
GeomDet::toGlobal
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
edm::ParameterSet
Definition: ParameterSet.h:47
MuonSeedCleaner::theService
MuonServiceProxy * theService
Definition: MuonSeedCleaner.h:100
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
MuonSeedCleaner::LeanHighMomentum
TrajectorySeed LeanHighMomentum(std::vector< TrajectorySeed > &seeds)
select the highest momentum pt seed
Definition: MuonSeedCleaner.cc:193
CSCDetId
Definition: CSCDetId.h:26
diffTwoXMLs.r2
r2
Definition: diffTwoXMLs.py:73
PV3DBase::eta
T eta() const
Definition: PV3DBase.h:73
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
trajectoryStateTransform::transientState
TrajectoryStateOnSurface transientState(const PTrajectoryStateOnDet &ts, const Surface *surface, const MagneticField *field)
Definition: TrajectoryStateTransform.cc:35
MuonSeedCleaner::SeedCandidates
SeedContainer SeedCandidates(std::vector< TrajectorySeed > &seeds, bool good)
pick the seeds w/ 1st layer information and w/ more than 1 segments
Definition: MuonSeedCleaner.cc:282
AlgebraicSymMatrix
CLHEP::HepSymMatrix AlgebraicSymMatrix
Definition: AlgebraicObjects.h:15
MuonSeedCleaner::GroupSeeds
std::vector< SeedContainer > GroupSeeds(std::vector< TrajectorySeed > &seeds)
group the seeds
Definition: MuonSeedCleaner.cc:325
PVValHelper::dy
Definition: PVValidationHelpers.h:50
MuonSeedCleaner::SeedMomentum
GlobalVector SeedMomentum(const TrajectorySeed &seed)
retrieve seed global momentum
Definition: MuonSeedCleaner.cc:437
TrajectorySeed::recHits
RecHitRange recHits() const
Definition: TrajectorySeed.h:52
TrackingRecHit::clone
virtual TrackingRecHit * clone() const =0
TrajectoryStateOnSurface::globalMomentum
GlobalVector globalMomentum() const
Definition: TrajectoryStateOnSurface.h:66
eostools.move
def move(src, dest)
Definition: eostools.py:511
GenericTransientTrackingRecHit::recHits
std::vector< const TrackingRecHit * > recHits() const override
Access to component RecHits (if any)
Definition: GenericTransientTrackingRecHit.h:30
DetachedQuadStep_cff.seeds
seeds
Definition: DetachedQuadStep_cff.py:195
bscTrigger_cfi.theHits
theHits
Definition: bscTrigger_cfi.py:18
hgcalPerformanceValidation.df
df
Definition: hgcalPerformanceValidation.py:733
PVValHelper::dz
Definition: PVValidationHelpers.h:51
diffTwoXMLs.r1
r1
Definition: diffTwoXMLs.py:53
MuonServiceProxy::trackingGeometry
edm::ESHandle< GlobalTrackingGeometry > trackingGeometry() const
get the tracking geometry
Definition: MuonServiceProxy.h:59
GlobalTrackingGeometry::idToDet
const GeomDet * idToDet(DetId) const override
Definition: GlobalTrackingGeometry.cc:44
TrajectorySeed
Definition: TrajectorySeed.h:18
MuonServiceProxy::magneticField
edm::ESHandle< MagneticField > magneticField() const
get the magnetic field
Definition: MuonServiceProxy.h:56
DTChamberId
Definition: DTChamberId.h:14
PTrajectoryStateOnDet
Definition: PTrajectoryStateOnDet.h:10
HGC3DClusterGenMatchSelector_cfi.dR
dR
Definition: HGC3DClusterGenMatchSelector_cfi.py:7
CSCDetId::station
int station() const
Definition: CSCDetId.h:79
globals_cff.id2
id2
Definition: globals_cff.py:34
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
MuonSeedCleaner::Chi2LengthSelection
TrajectorySeed Chi2LengthSelection(std::vector< TrajectorySeed > &seeds)
select seed by balance length and chi2
Definition: MuonSeedCleaner.cc:123
PVValHelper::dx
Definition: PVValidationHelpers.h:49
PV3DBase::phi
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
cuy.dh
dh
Definition: cuy.py:354
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443