CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
DynamicTruncation Class Reference

#include <DynamicTruncation.h>

Public Types

typedef
TransientTrackingRecHit::ConstRecHitContainer 
ConstRecHitContainer
 
typedef
TransientTrackingRecHit::ConstRecHitPointer 
ConstRecHitPointer
 

Public Member Functions

 DynamicTruncation (const edm::Event &, const MuonServiceProxy &)
 
TransientTrackingRecHit::ConstRecHitContainer filter (const Trajectory &)
 
reco::DYTInfo getDYTInfo ()
 
void setProd (const edm::Handle< DTRecSegment4DCollection > &DTSegProd, const edm::Handle< CSCSegmentCollection > &CSCSegProd)
 
void setSelector (int)
 
void setThr (const std::vector< int > &)
 
void setUpdateState (bool)
 
void setUseAPE (bool)
 
 ~DynamicTruncation ()
 

Private Member Functions

bool chooseLayers (int &, double const &, DTRecSegment4D const &, TrajectoryStateOnSurface const &, double const &, CSCSegment const &, TrajectoryStateOnSurface const &)
 
void compatibleDets (TrajectoryStateOnSurface &, std::map< int, std::vector< DetId > > &)
 
void correctThrByPtAndEta (double &)
 
void fillDYTInfos (int const &, bool const &, int &, double const &, double const &, DTRecSegment4D const &, CSCSegment const &)
 
void fillSegmentMaps (std::map< int, std::vector< DetId > > &, std::map< int, std::vector< DTRecSegment4D > > &, std::map< int, std::vector< CSCSegment > > &)
 
void filteringAlgo ()
 
void getThresholdFromCFG (double &, DetId const &)
 
void getThresholdFromDB (double &, DetId const &)
 
void preliminaryFit (std::map< int, std::vector< DetId > >, std::map< int, std::vector< DTRecSegment4D > >, std::map< int, std::vector< CSCSegment > >)
 
void sort (ConstRecHitContainer &)
 
int stationfromDet (DetId const &)
 
void testCSCstation (TrajectoryStateOnSurface &, std::vector< CSCSegment > const &, double &, CSCSegment &, TrajectoryStateOnSurface &)
 
void testDTstation (TrajectoryStateOnSurface &, std::vector< DTRecSegment4D > const &, double &, DTRecSegment4D &, TrajectoryStateOnSurface &)
 
void update (TrajectoryStateOnSurface &, ConstRecHitPointer)
 
void updateWithCSChits (TrajectoryStateOnSurface &, CSCSegment const &)
 
void updateWithDThits (TrajectoryStateOnSurface &, DTRecSegment4D const &)
 
void useSegment (DTRecSegment4D const &, TrajectoryStateOnSurface const &)
 
void useSegment (CSCSegment const &, TrajectoryStateOnSurface const &)
 

Private Attributes

std::map< CSCDetId, GlobalErrorcscApeMap
 
edm::ESHandle< CSCGeometrycscGeom
 
TrajectoryStateOnSurface currentState
 
bool doUpdateOfKFStates
 
std::map< DTChamberId,
GlobalError
dtApeMap
 
reco::DYTInfo dytInfo
 
int DYTselector
 
const DYTThrObjectdytThresholds
 
std::map< int, double > estimatorMap
 
ChamberSegmentUtilitygetSegs
 
std::map< int, DetIdidChamberMap
 
edm::ESHandle< MagneticFieldmagfield
 
double muonETAest
 
double muonPTest
 
DirectMuonNavigationnavigation
 
edm::ESHandle
< MuonDetLayerGeometry
navMuon
 
int nStationsUsed
 
ConstRecHitContainer prelFitMeas
 
TrajectoryStateOnSurface prelFitState
 
edm::ESHandle< Propagatorpropagator
 
edm::ESHandle< PropagatorpropagatorCompatibleDet
 
edm::ESHandle< PropagatorpropagatorPF
 
ConstRecHitContainer result
 
edm::ESHandle
< GlobalTrackingGeometry
theG
 
edm::ESHandle
< TransientTrackingRecHitBuilder
theMuonRecHitBuilder
 
ThrParametersthrManager
 
std::vector< int > Thrs
 
edm::ESHandle
< TrajectoryStateUpdator
updatorHandle
 
bool useAPE
 
bool useDBforThr
 
std::map< int, bool > usedStationMap
 

Detailed Description

Class: DynamicTruncation

Description: class for the dynamical stop of the KF according to the compatibility degree between the extrapolated track state and the reconstructed segment in the muon chambers

Authors : D. Pagano & G. Bruno - UCL Louvain

Definition at line 44 of file DynamicTruncation.h.

Member Typedef Documentation

Definition at line 49 of file DynamicTruncation.h.

Definition at line 48 of file DynamicTruncation.h.

Constructor & Destructor Documentation

DynamicTruncation::DynamicTruncation ( const edm::Event event,
const MuonServiceProxy theService 
)

Definition at line 39 of file DynamicTruncation.cc.

References ThrParameters::isValidThdDB(), HLT_ES_cff::magfield, and HLT_25ns14e33_v1_cff::propagator.

39  {
40  propagator = theService.propagator("SmartPropagatorAny");
41  propagatorPF = theService.propagator("SmartPropagatorAny");
42  propagatorCompatibleDet = theService.propagator("SmartPropagatorAny");
43  theG = theService.trackingGeometry();
44  theService.eventSetup().get<TransientRecHitRecord>().get("MuonRecHitBuilder",theMuonRecHitBuilder);
45  theService.eventSetup().get<TrackingComponentsRecord>().get("KFUpdator",updatorHandle);
46  theService.eventSetup().get<MuonGeometryRecord>().get(cscGeom);
47  theService.eventSetup().get<MuonRecoGeometryRecord>().get(navMuon);
48  theService.eventSetup().get<IdealMagneticFieldRecord>().get(magfield);
49  navigation = new DirectMuonNavigation(theService.detLayerGeometry());
51  thrManager = new ThrParameters(&theService.eventSetup());
53  if (useDBforThr) dytThresholds = thrManager->getInitialThresholds();
54  doUpdateOfKFStates = true;
55 }
DirectMuonNavigation * navigation
edm::ESHandle< Propagator > propagatorPF
edm::ESHandle< Propagator > propagatorCompatibleDet
ThrParameters * thrManager
edm::ESHandle< MuonDetLayerGeometry > navMuon
edm::ESHandle< TrajectoryStateUpdator > updatorHandle
const bool isValidThdDB()
Definition: ThrParameters.h:25
edm::ESHandle< TransientTrackingRecHitBuilder > theMuonRecHitBuilder
ChamberSegmentUtility * getSegs
const DYTThrObject * dytThresholds
edm::ESHandle< Propagator > propagator
const DYTThrObject * getInitialThresholds()
Definition: ThrParameters.h:28
edm::ESHandle< MagneticField > magfield
edm::ESHandle< GlobalTrackingGeometry > theG
edm::ESHandle< CSCGeometry > cscGeom
DynamicTruncation::~DynamicTruncation ( )

Definition at line 57 of file DynamicTruncation.cc.

57  {
58  delete navigation;
59  delete thrManager;
60  delete getSegs;
61 }
DirectMuonNavigation * navigation
ThrParameters * thrManager
ChamberSegmentUtility * getSegs

Member Function Documentation

bool DynamicTruncation::chooseLayers ( int &  incompLayers,
double const &  bestDTEstimator,
DTRecSegment4D const &  bestDTSeg,
TrajectoryStateOnSurface const &  tsosDT,
double const &  bestCSCEstimator,
CSCSegment const &  bestCSCSeg,
TrajectoryStateOnSurface const &  tsosCSC 
)
private

Definition at line 402 of file DynamicTruncation.cc.

References DTRecSegment4D::chamberId(), CSCSegment::cscDetId(), and MAX_THR.

403  {
404  double initThr = MAX_THR;
405  if (bestDTEstimator == MAX_THR && bestCSCEstimator == MAX_THR) return false;
406  if (bestDTEstimator <= bestCSCEstimator) {
407  // Get threshold for the chamber
408  if (useDBforThr) getThresholdFromDB(initThr, DetId(bestDTSeg.chamberId()));
409  else getThresholdFromCFG(initThr, DetId(bestDTSeg.chamberId()));
410  if (DYTselector == 0 || (DYTselector == 1 && bestDTEstimator < initThr) ||
411  (DYTselector == 2 && incompLayers < 2 && bestDTEstimator < initThr)) {
412  useSegment(bestDTSeg, tsosDT);
413  return true;
414  }
415  } else {
416  // Get threshold for the chamber
417  if (useDBforThr) getThresholdFromDB(initThr, DetId(bestCSCSeg.cscDetId()));
418  else getThresholdFromCFG(initThr, DetId(bestCSCSeg.cscDetId()));
419  if (DYTselector == 0 || (DYTselector == 1 && bestCSCEstimator < initThr) ||
420  (DYTselector == 2 && incompLayers < 2 && bestCSCEstimator < initThr)) {
421  useSegment(bestCSCSeg, tsosCSC);
422  return true;
423  }
424  }
425  return false;
426 }
void useSegment(DTRecSegment4D const &, TrajectoryStateOnSurface const &)
void getThresholdFromDB(double &, DetId const &)
#define MAX_THR
Definition: DetId.h:18
void getThresholdFromCFG(double &, DetId const &)
void DynamicTruncation::compatibleDets ( TrajectoryStateOnSurface tsos,
std::map< int, std::vector< DetId > > &  detMap 
)
private

Definition at line 251 of file DynamicTruncation.cc.

References alongMomentum, Chi2MeasurementEstimatorESProducer_cfi::Chi2MeasurementEstimator, GeomDetEnumerators::CSC, GeomDetEnumerators::DT, and edm::first().

251  {
252  MuonPatternRecoDumper dumper;
253  MeasurementEstimator *theEstimator = new Chi2MeasurementEstimator(1000, 1000);
254  vector<const DetLayer *> navLayers;
256  unsigned int ilayerCorrected = 0;
257  for ( unsigned int ilayer=0; ilayer<navLayers.size(); ilayer++ ) {
258  // Skip RPC layers
259  if (navLayers[ilayer]->subDetector() != GeomDetEnumerators::DT &&
260  navLayers[ilayer]->subDetector() != GeomDetEnumerators::CSC) continue;
261  ilayerCorrected++;
262  vector<DetLayer::DetWithState> comps = navLayers[ilayer]->compatibleDets(currentState, *propagatorCompatibleDet, *theEstimator);
263  //cout << comps.size() << " compatible Dets with " << navLayers[ilayer]->subDetector() << " Layer " << ilayer << " "
264  //<< dumper.dumpLayer(navLayers[ilayer]);
265  if (comps.size() > 0) {
266  for ( unsigned int icomp=0; icomp<comps.size(); icomp++ ) {
267  DetId id(comps[icomp].first->geographicalId().rawId());
268  detMap[ilayerCorrected].push_back(id);
269  }
270  }
271  }
272  if (theEstimator) delete theEstimator;
273 }
DirectMuonNavigation * navigation
TrajectoryStateOnSurface currentState
edm::ESHandle< Propagator > propagatorCompatibleDet
std::vector< const DetLayer * > compatibleLayers(const FreeTrajectoryState &fts, PropagationDirection timeDirection) const
FreeTrajectoryState const * freeState(bool withErrors=true) const
Definition: DetId.h:18
void DynamicTruncation::correctThrByPtAndEta ( double &  thr)
private

Definition at line 444 of file DynamicTruncation.cc.

444  {
445 
447  // This section will be implemented //
448  // after the release of APEs //
450 
451 }
void DynamicTruncation::fillDYTInfos ( int const &  st,
bool const &  chosenLayer,
int &  incompConLay,
double const &  bestDTEstimator,
double const &  bestCSCEstimator,
DTRecSegment4D const &  bestDTSeg,
CSCSegment const &  bestCSCSeg 
)
private

Definition at line 226 of file DynamicTruncation.cc.

References DTRecSegment4D::chamberId(), and CSCSegment::cscDetId().

228  {
229  if (chosenLayer) {
230  nStationsUsed++;
231  incompConLay = 0;
232  if (bestDTEstimator <= bestCSCEstimator) {
233  estimatorMap[st] = bestDTEstimator;
234  DetId id(bestDTSeg.chamberId());
235  idChamberMap[st] = id;
236  } else {
237  DetId id(bestCSCSeg.cscDetId());
238  idChamberMap[st] = id;
239  estimatorMap[st] = bestCSCEstimator;
240  }
241  usedStationMap[st] = true;
242  } else {
243  incompConLay++;
244  estimatorMap[st] = -1;
245  usedStationMap[st] = false;
246  }
247 }
std::map< int, bool > usedStationMap
std::map< int, DetId > idChamberMap
Definition: DetId.h:18
std::map< int, double > estimatorMap
void DynamicTruncation::fillSegmentMaps ( std::map< int, std::vector< DetId > > &  compatibleIds,
std::map< int, std::vector< DTRecSegment4D > > &  dtSegMap,
std::map< int, std::vector< CSCSegment > > &  cscSegMap 
)
private

Definition at line 277 of file DynamicTruncation.cc.

References MuonSubdetId::CSC, MuonSubdetId::DT, j, relval_steps::k, python.multivaluedict::map(), and tmp.

279  {
280  for (map<int, vector<DetId> >::iterator it=compatibleIds.begin(); it!=compatibleIds.end(); ++it) {
281  vector<DetId> ids = compatibleIds[it->first];
282  for (unsigned j = 0; j < ids.size(); j++) {
283  if (ids[j].subdetId() == MuonSubdetId::CSC) {
284  CSCDetId ch(ids[j]);
285  vector<CSCSegment> tmp = getSegs->getCSCSegmentsInChamber(ch);
286  for (unsigned int k = 0; k < tmp.size(); k++) cscSegMap[it->first].push_back(tmp[k]);
287  }
288  if (ids[j].subdetId() == MuonSubdetId::DT) {
289  DTChamberId ch(ids[j]);
290  vector<DTRecSegment4D> tmp = getSegs->getDTSegmentsInChamber(ch);
291  for (unsigned int k = 0; k < tmp.size(); k++) dtSegMap[it->first].push_back(tmp[k]);
292  }
293  }
294  }
295 }
std::vector< DTRecSegment4D > getDTSegmentsInChamber(DTChamberId)
std::vector< CSCSegment > getCSCSegmentsInChamber(CSCDetId)
static const int CSC
Definition: MuonSubdetId.h:13
int j
Definition: DBlmapReader.cc:9
ChamberSegmentUtility * getSegs
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
static const int DT
Definition: MuonSubdetId.h:12
TransientTrackingRecHit::ConstRecHitContainer DynamicTruncation::filter ( const Trajectory traj)

Definition at line 133 of file DynamicTruncation.cc.

References DetId::det(), TrajectoryMeasurement::forwardPredictedState(), TrackingRecHit::geographicalId(), TrajectoryStateOnSurface::globalPosition(), PV3DBase< T, PVType, FrameType >::mag(), Trajectory::measurements(), TrajectoryMeasurement::recHit(), query::result, DetId::Tracker, and update.

Referenced by GlobalMuonRefitter::refit().

133  {
134  result.clear();
135  prelFitMeas.clear();
136 
137  // Get APE maps
140 
141  // Get Last tracker TSOS (updated)
142  vector<TrajectoryMeasurement> muonMeasurements = traj.measurements();
143  TrajectoryMeasurement lastTKm = muonMeasurements.front();
144  for (vector<TrajectoryMeasurement>::const_iterator imT = muonMeasurements.begin(); imT != muonMeasurements.end(); imT++ ) {
145  if ( !(*imT).recHit()->isValid() ) continue;
146  const TransientTrackingRecHit* hit = &(*(*imT).recHit());
147  if (hit->geographicalId().det() == DetId::Tracker) {
148  result.push_back((*imT).recHit());
149  if (!(*imT).forwardPredictedState().isValid()) continue;
150  if ((*imT).forwardPredictedState().globalPosition().mag() >
151  lastTKm.forwardPredictedState().globalPosition().mag()) lastTKm = *imT;
152  }
153  }
155  update(currentState, lastTKm.recHit());
156 
158  update(prelFitState, lastTKm.recHit());
160 
161  // Run the DYT
162  filteringAlgo();
163 
164  return result;
165 }
ConstRecHitPointer const & recHit() const
TrajectoryStateOnSurface currentState
GlobalPoint globalPosition() const
ThrParameters * thrManager
TrajectoryStateOnSurface prelFitState
DataContainer const & measurements() const
Definition: Trajectory.h:203
T mag() const
Definition: PV3DBase.h:67
ConstRecHitContainer result
ConstRecHitContainer prelFitMeas
TrajectoryStateOnSurface const & forwardPredictedState() const
Access to forward predicted state (from fitter or builder)
std::map< DTChamberId, GlobalError > dtApeMap
void update(TrajectoryStateOnSurface &, ConstRecHitPointer)
const std::map< DTChamberId, GlobalError > & GetDTApeMap()
Definition: ThrParameters.h:26
const std::map< CSCDetId, GlobalError > & GetCSCApeMap()
Definition: ThrParameters.h:27
DetId geographicalId() const
Detector det() const
get the detector field from this detid
Definition: DetId.h:35
std::map< CSCDetId, GlobalError > cscApeMap
void DynamicTruncation::filteringAlgo ( )
private

Definition at line 169 of file DynamicTruncation.cc.

References python.multivaluedict::map(), and MAX_THR.

169  {
170  map<int, vector<DetId> > compatibleIds;
171  map<int, vector<DTRecSegment4D> > dtSegMap;
172  map<int, vector<CSCSegment> > cscSegMap;
173  int incompConLay = 0;
174  nStationsUsed = 0;
175 
176  // Get list of compatible layers
177  compatibleDets(currentState, compatibleIds);
178 
179  // Fill segment maps
180  fillSegmentMaps(compatibleIds, dtSegMap, cscSegMap);
181 
182  // Do a preliminary fit
183  if (useDBforThr) preliminaryFit(compatibleIds, dtSegMap, cscSegMap);
184 
185  // Loop on compatible layers
186  for (map<int, vector<DetId> >::iterator it=compatibleIds.begin(); it!=compatibleIds.end(); ++it) {
187  int stLayer = stationfromDet(it->second.front());
188  DTRecSegment4D bestDTSeg;
189  CSCSegment bestCSCSeg;
190  double bestDTEstimator = MAX_THR;
191  double bestCSCEstimator = MAX_THR;
192  vector<DTRecSegment4D> dtSegs = dtSegMap[it->first];
193  vector<CSCSegment> cscSegs = cscSegMap[it->first];
194 
195  // DT case: find the most compatible segment
196  TrajectoryStateOnSurface tsosDTlayer;
197  testDTstation(currentState, dtSegs, bestDTEstimator, bestDTSeg, tsosDTlayer);
198 
199  // CSC case: find the most compatible segment
200  TrajectoryStateOnSurface tsosCSClayer;
201  testCSCstation(currentState, cscSegs, bestCSCEstimator, bestCSCSeg, tsosCSClayer);
202 
203  // Decide whether to keep the layer or not
204  bool chosenLayer = chooseLayers(incompConLay, bestDTEstimator, bestDTSeg, tsosDTlayer, bestCSCEstimator, bestCSCSeg, tsosCSClayer);
205  fillDYTInfos(stLayer, chosenLayer, incompConLay, bestDTEstimator, bestCSCEstimator, bestDTSeg, bestCSCSeg);
206  }
207  //cout << "Number of used stations = " << nStationsUsed << endl;
208 }
void compatibleDets(TrajectoryStateOnSurface &, std::map< int, std::vector< DetId > > &)
TrajectoryStateOnSurface currentState
void fillSegmentMaps(std::map< int, std::vector< DetId > > &, std::map< int, std::vector< DTRecSegment4D > > &, std::map< int, std::vector< CSCSegment > > &)
void testDTstation(TrajectoryStateOnSurface &, std::vector< DTRecSegment4D > const &, double &, DTRecSegment4D &, TrajectoryStateOnSurface &)
void testCSCstation(TrajectoryStateOnSurface &, std::vector< CSCSegment > const &, double &, CSCSegment &, TrajectoryStateOnSurface &)
#define MAX_THR
void preliminaryFit(std::map< int, std::vector< DetId > >, std::map< int, std::vector< DTRecSegment4D > >, std::map< int, std::vector< CSCSegment > >)
void fillDYTInfos(int const &, bool const &, int &, double const &, double const &, DTRecSegment4D const &, CSCSegment const &)
bool chooseLayers(int &, double const &, DTRecSegment4D const &, TrajectoryStateOnSurface const &, double const &, CSCSegment const &, TrajectoryStateOnSurface const &)
int stationfromDet(DetId const &)
reco::DYTInfo DynamicTruncation::getDYTInfo ( )
inline

Definition at line 69 of file DynamicTruncation.h.

References dytInfo, estimatorMap, idChamberMap, nStationsUsed, reco::DYTInfo::setDYTEstimators(), reco::DYTInfo::setIdChambers(), reco::DYTInfo::setNStUsed(), reco::DYTInfo::setUsedStations(), and usedStationMap.

Referenced by GlobalMuonRefitter::refit().

69  {
74  return dytInfo;
75  }
void setUsedStations(const std::map< int, bool > &ustMap)
Definition: DYTInfo.h:37
std::map< int, bool > usedStationMap
void setDYTEstimators(const std::map< int, double > &dytEstMap)
Definition: DYTInfo.h:26
std::map< int, DetId > idChamberMap
void setNStUsed(int NStUsed)
Definition: DYTInfo.h:22
reco::DYTInfo dytInfo
void setIdChambers(const std::map< int, DetId > &IdChambersMap)
Definition: DYTInfo.h:46
std::map< int, double > estimatorMap
void DynamicTruncation::getThresholdFromCFG ( double &  thr,
DetId const &  id 
)
private

Definition at line 455 of file DynamicTruncation.cc.

References MuonSubdetId::CSC, and MuonSubdetId::DT.

455  {
456  if (id.subdetId() == MuonSubdetId::DT) {
457  thr = Thrs[0];
458  }
459  if (id.subdetId() == MuonSubdetId::CSC) {
460  thr = Thrs[1];
461  }
462 }
static const int CSC
Definition: MuonSubdetId.h:13
std::vector< int > Thrs
static const int DT
Definition: MuonSubdetId.h:12
void DynamicTruncation::getThresholdFromDB ( double &  thr,
DetId const &  id 
)
private

Definition at line 430 of file DynamicTruncation.cc.

References DYTThrObject::DytThrStruct::id, getGTfromDQMFile::obj, and DYTThrObject::DytThrStruct::thr.

430  {
431  vector<DYTThrObject::DytThrStruct> thrvector = dytThresholds->thrsVec;
432  for (vector<DYTThrObject::DytThrStruct>::const_iterator it = thrvector.begin(); it != thrvector.end(); it++) {
434  if (obj.id == id) {
435  thr = obj.thr;
436  break;
437  }
438  }
440 }
void correctThrByPtAndEta(double &)
std::vector< DytThrStruct > thrsVec
Definition: DYTThrObject.h:17
const DYTThrObject * dytThresholds
void DynamicTruncation::preliminaryFit ( std::map< int, std::vector< DetId > >  compatibleIds,
std::map< int, std::vector< DTRecSegment4D > >  dtSegMap,
std::map< int, std::vector< CSCSegment > >  cscSegMap 
)
private

Definition at line 357 of file DynamicTruncation.cc.

References DTRecSegment4D::chamberId(), CSCSegment::cscDetId(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::isValid(), python.multivaluedict::map(), MAX_THR, PV3DBase< T, PVType, FrameType >::perp(), and tmp.

358  {
359  for (map<int, vector<DetId> >::iterator it=compatibleIds.begin(); it!=compatibleIds.end(); ++it) {
360  DTRecSegment4D bestDTSeg;
361  CSCSegment bestCSCSeg;
362  double bestDTEstimator = MAX_THR;
363  double bestCSCEstimator = MAX_THR;
364  double initThr = MAX_THR;
365  vector<DTRecSegment4D> dtSegs = dtSegMap[it->first];
366  vector<CSCSegment> cscSegs = cscSegMap[it->first];
367 
368  // DT case: find the most compatible segment
369  TrajectoryStateOnSurface tsosDTlayer;
370  testDTstation(prelFitState, dtSegs, bestDTEstimator, bestDTSeg, tsosDTlayer);
371 
372  // CSC case: find the most compatible segment
373  TrajectoryStateOnSurface tsosCSClayer;
374  testCSCstation(prelFitState, cscSegs, bestCSCEstimator, bestCSCSeg, tsosCSClayer);
375 
376  // Decide whether to keep the layer or not
377  if (bestDTEstimator == MAX_THR && bestCSCEstimator == MAX_THR) continue;
378  if (bestDTEstimator <= bestCSCEstimator) {
379  getThresholdFromCFG(initThr, DetId(bestDTSeg.chamberId()));
380  if (bestDTEstimator >= initThr) continue;
381  prelFitMeas.push_back(theMuonRecHitBuilder->build(&bestDTSeg));
382  prelFitState = updatorHandle->update(tsosDTlayer, *theMuonRecHitBuilder->build(&bestDTSeg));
383  } else {
384  getThresholdFromCFG(initThr, DetId(bestCSCSeg.cscDetId()));
385  if (bestCSCEstimator >= initThr) continue;
386  prelFitMeas.push_back(theMuonRecHitBuilder->build(&bestCSCSeg));
387  prelFitState = updatorHandle->update(tsosCSClayer, *theMuonRecHitBuilder->build(&bestCSCSeg));
388  }
389  }
390  if (!prelFitMeas.empty()) prelFitMeas.pop_back();
391  for (auto imrh = prelFitMeas.rbegin(); imrh != prelFitMeas.rend(); ++imrh) {
392  DetId id = (*imrh)->geographicalId();
393  TrajectoryStateOnSurface tmp = propagatorPF->propagate(prelFitState, theG->idToDet(id)->surface());
394  if (tmp.isValid()) prelFitState = tmp;
395  }
398 }
edm::ESHandle< Propagator > propagatorPF
T perp() const
Definition: PV3DBase.h:72
CSCDetId cscDetId() const
Definition: CSCSegment.h:69
virtual DTChamberId chamberId() const
The (specific) DetId of the chamber on which the segment resides.
void testDTstation(TrajectoryStateOnSurface &, std::vector< DTRecSegment4D > const &, double &, DTRecSegment4D &, TrajectoryStateOnSurface &)
TrajectoryStateOnSurface prelFitState
void testCSCstation(TrajectoryStateOnSurface &, std::vector< CSCSegment > const &, double &, CSCSegment &, TrajectoryStateOnSurface &)
edm::ESHandle< TrajectoryStateUpdator > updatorHandle
ConstRecHitContainer prelFitMeas
edm::ESHandle< TransientTrackingRecHitBuilder > theMuonRecHitBuilder
#define MAX_THR
Definition: DetId.h:18
T eta() const
Definition: PV3DBase.h:76
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
GlobalVector globalMomentum() const
edm::ESHandle< GlobalTrackingGeometry > theG
void getThresholdFromCFG(double &, DetId const &)
void DynamicTruncation::setProd ( const edm::Handle< DTRecSegment4DCollection > &  DTSegProd,
const edm::Handle< CSCSegmentCollection > &  CSCSegProd 
)
inline

Definition at line 55 of file DynamicTruncation.h.

References getSegs, and ChamberSegmentUtility::initCSU().

Referenced by GlobalMuonRefitter::refit().

56  {
57  getSegs->initCSU(DTSegProd, CSCSegProd);
58  }
void initCSU(const edm::Handle< DTRecSegment4DCollection > &, const edm::Handle< CSCSegmentCollection > &)
ChamberSegmentUtility * getSegs
void DynamicTruncation::setSelector ( int  selector)

Definition at line 100 of file DynamicTruncation.cc.

References edm::hlt::Exception.

Referenced by GlobalMuonRefitter::refit().

100  {
101  if (selector < 0 || selector > 2) throw cms::Exception("NotAvailable") << "DYT selector: wrong option!" << endl;
102  //if (selector == 0) cout << "[DYT disabled]\n";
103  //if (selector == 1) cout << "[use all compatible stations]\n";
104  //if (selector == 2) cout << "[stop at second consecutive incompatible station]\n";
105  DYTselector = selector;
106 
107 }
void DynamicTruncation::setThr ( const std::vector< int > &  thr)

Definition at line 117 of file DynamicTruncation.cc.

References edm::hlt::Exception, i, and MAX_THR.

Referenced by GlobalMuonRefitter::refit().

117  {
118  if (thr.size() == 2) {
119  for (unsigned int i = 0; i < thr.size(); i++)
120  if (thr[i] >= 0) Thrs.push_back(thr[i]);
121  else Thrs.push_back(MAX_THR);
122  return;
123  }
124  throw cms::Exception("NotAvailable") << "WARNING: wrong size for the threshold vector!\nExpected size: 2\n Found size: " << thr.size();
125 }
int i
Definition: DBlmapReader.cc:9
#define MAX_THR
std::vector< int > Thrs
void DynamicTruncation::setUpdateState ( bool  upState)

Definition at line 113 of file DynamicTruncation.cc.

Referenced by GlobalMuonRefitter::refit().

113  {
114  doUpdateOfKFStates = upState;
115 }
void DynamicTruncation::setUseAPE ( bool  useAPE_)

Definition at line 109 of file DynamicTruncation.cc.

Referenced by GlobalMuonRefitter::refit().

109  {
110  useAPE = useAPE_;
111 }
void DynamicTruncation::sort ( ConstRecHitContainer recHits)
private

Definition at line 466 of file DynamicTruncation.cc.

References i, j, mag(), gen::n, and edm::swap().

466  {
467  unsigned int i=0;
468  unsigned int j=0;
470  for(i=1; i<n; ++i)
471  for(j=n-1; j>=i; --j)
472  if(recHits[j-1]->globalPosition().mag() > recHits[j]->globalPosition().mag()) swap (recHits[j-1],recHits[j]);
473 }
void swap(ora::Record &rh, ora::Record &lh)
Definition: Record.h:70
int i
Definition: DBlmapReader.cc:9
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
uint16_t size_type
int j
Definition: DBlmapReader.cc:9
int DynamicTruncation::stationfromDet ( DetId const &  det)
private

Definition at line 212 of file DynamicTruncation.cc.

References MuonSubdetId::CSC, MuonSubdetId::DT, DTChamberId::station(), CSCDetId::station(), and DetId::subdetId().

212  {
213  if (det.subdetId() == MuonSubdetId::CSC) {
214  CSCDetId ch(det);
215  return ch.station();
216  }
217  if (det.subdetId() == MuonSubdetId::DT) {
218  DTChamberId ch(det);
219  return ch.station();
220  }
221  return 0;
222 }
static const int CSC
Definition: MuonSubdetId.h:13
static const int DT
Definition: MuonSubdetId.h:12
void DynamicTruncation::testCSCstation ( TrajectoryStateOnSurface startingState,
std::vector< CSCSegment > const &  segments,
double &  bestEstimator,
CSCSegment bestSeg,
TrajectoryStateOnSurface tsoscsc 
)
private

Definition at line 320 of file DynamicTruncation.cc.

References HLT_25ns14e33_v1_cff::estimator, HLT_25ns14e33_v1_cff::propagator, TrajectoryStateOnSurface::surface(), ErrorFrameTransformer::transform(), and StateSegmentMatcher::value().

321  {
322  if (segments.size() == 0) return;
323  for (unsigned int iSeg = 0; iSeg < segments.size(); iSeg++) {
324  CSCDetId chamber(segments[iSeg].cscDetId());
325  if (!propagator->propagate(startingState, theG->idToDet(chamber)->surface()).isValid()) continue;
326  tsoscsc = propagator->propagate(startingState, theG->idToDet(chamber)->surface());
327  //if (!tsoscsc.isValid()) continue;
328  LocalError apeLoc;
329  if (useAPE) apeLoc = ErrorFrameTransformer().transform(cscApeMap.find(chamber)->second, theG->idToDet(chamber)->surface());
330  StateSegmentMatcher estim(tsoscsc, segments[iSeg], apeLoc);
331  double estimator = estim.value();
332  //cout << "estimator CSC = " << estimator << endl;
333  if (estimator >= bestEstimator) continue;
334  bestEstimator = estimator;
335  bestSeg = segments[iSeg];
336  }
337 }
static GlobalError transform(const LocalError &le, const Surface &surf)
edm::ESHandle< Propagator > propagator
std::map< CSCDetId, GlobalError > cscApeMap
edm::ESHandle< GlobalTrackingGeometry > theG
void DynamicTruncation::testDTstation ( TrajectoryStateOnSurface startingState,
std::vector< DTRecSegment4D > const &  segments,
double &  bestEstimator,
DTRecSegment4D bestSeg,
TrajectoryStateOnSurface tsosdt 
)
private

Definition at line 299 of file DynamicTruncation.cc.

References HLT_25ns14e33_v1_cff::estimator, HLT_25ns14e33_v1_cff::propagator, TrajectoryStateOnSurface::surface(), ErrorFrameTransformer::transform(), and StateSegmentMatcher::value().

300  {
301  if (segments.size() == 0) return;
302  for (unsigned int iSeg = 0; iSeg < segments.size(); iSeg++) {
303  DTChamberId chamber(segments[iSeg].chamberId());
304  if (!propagator->propagate(startingState, theG->idToDet(chamber)->surface()).isValid()) continue;
305  tsosdt = propagator->propagate(startingState, theG->idToDet(chamber)->surface());
306  //if (!tsosdt.isValid()) continue;
307  LocalError apeLoc;
308  if (useAPE) apeLoc = ErrorFrameTransformer().transform(dtApeMap.find(chamber)->second, theG->idToDet(chamber)->surface());
309  StateSegmentMatcher estim(tsosdt, segments[iSeg], apeLoc);
310  double estimator = estim.value();
311  //cout << "estimator DT = " << estimator << endl;
312  if (estimator >= bestEstimator) continue;
313  bestEstimator = estimator;
314  bestSeg = segments[iSeg];
315  }
316 }
static GlobalError transform(const LocalError &le, const Surface &surf)
std::map< DTChamberId, GlobalError > dtApeMap
edm::ESHandle< Propagator > propagator
edm::ESHandle< GlobalTrackingGeometry > theG
void DynamicTruncation::update ( TrajectoryStateOnSurface tsos,
ConstRecHitPointer  rechit 
)
private

Definition at line 63 of file DynamicTruncation.cc.

References TrajectoryStateOnSurface::isValid(), groupFilesInBlocks::temp, and TrajectoryStateOnSurface::update().

Referenced by progressbar.ProgressBar::__next__(), relval_steps.Matrix::__setitem__(), relval_steps.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), relval_steps.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

63  {
64  TrajectoryStateOnSurface temp = updatorHandle->update(tsos, *rechit);
65  if (temp.isValid()) tsos = updatorHandle->update(tsos, *rechit);
66 }
edm::ESHandle< TrajectoryStateUpdator > updatorHandle
void DynamicTruncation::updateWithCSChits ( TrajectoryStateOnSurface tsos,
CSCSegment const &  bestCSCSeg 
)
private

Definition at line 82 of file DynamicTruncation.cc.

References TrajectoryStateOnSurface::isValid(), HLT_25ns14e33_v1_cff::propagator, python.multivaluedict::sort(), CSCSegment::specificRecHits(), GeomDet::surface(), groupFilesInBlocks::temp, and TrajectoryStateOnSurface::update().

82  {
83  ConstRecHitContainer tmprecHits;
84  vector<CSCRecHit2D> CSCrh = bestCSCSeg.specificRecHits();
85  for (vector<CSCRecHit2D>::iterator it = CSCrh.begin(); it != CSCrh.end(); ++it) {
86  tmprecHits.push_back(theMuonRecHitBuilder->build(&*it));
87  }
88  sort(tmprecHits);
89  for (ConstRecHitContainer::const_iterator it = tmprecHits.begin(); it != tmprecHits.end(); ++it) {
90  const CSCLayer* cscLayer = cscGeom->layer((*it)->det()->geographicalId());
91  TrajectoryStateOnSurface temp = propagator->propagate(tsos, cscLayer->surface());
92  if (temp.isValid()) tsos = updatorHandle->update(temp, **it);
93  }
94 }
void sort(ConstRecHitContainer &)
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:40
edm::ESHandle< TrajectoryStateUpdator > updatorHandle
edm::ESHandle< TransientTrackingRecHitBuilder > theMuonRecHitBuilder
edm::ESHandle< Propagator > propagator
TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer
edm::ESHandle< CSCGeometry > cscGeom
void DynamicTruncation::updateWithDThits ( TrajectoryStateOnSurface tsos,
DTRecSegment4D const &  bestDTSeg 
)
private

Definition at line 68 of file DynamicTruncation.cc.

References HLT_25ns14e33_v1_cff::propagator, DTRecSegment4D::recHits(), python.multivaluedict::sort(), TrajectoryStateOnSurface::surface(), groupFilesInBlocks::temp, and TrajectoryStateOnSurface::update().

68  {
69  ConstRecHitContainer tmprecHits;
70  vector<const TrackingRecHit*> DTrh = bestDTSeg.recHits();
71  for (vector<const TrackingRecHit*>::iterator it = DTrh.begin(); it != DTrh.end(); it++) {
72  tmprecHits.push_back(theMuonRecHitBuilder->build(*it));
73  }
74  sort(tmprecHits);
75  for (ConstRecHitContainer::const_iterator it = tmprecHits.begin(); it != tmprecHits.end(); ++it) {
76  DTLayerId layid((*it)->det()->geographicalId());
77  TrajectoryStateOnSurface temp = propagator->propagate(tsos, theG->idToDet(layid)->surface());
78  if (temp.isValid()) tsos = updatorHandle->update(temp, **it);
79  }
80 }
void sort(ConstRecHitContainer &)
edm::ESHandle< TrajectoryStateUpdator > updatorHandle
edm::ESHandle< TransientTrackingRecHitBuilder > theMuonRecHitBuilder
edm::ESHandle< Propagator > propagator
TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer
edm::ESHandle< GlobalTrackingGeometry > theG
void DynamicTruncation::useSegment ( DTRecSegment4D const &  bestDTSeg,
TrajectoryStateOnSurface const &  tsosDT 
)
private

Definition at line 341 of file DynamicTruncation.cc.

References query::result.

341  {
342  result.push_back(theMuonRecHitBuilder->build(&bestDTSeg));
344  else currentState = tsosDT;
345 }
TrajectoryStateOnSurface currentState
ConstRecHitContainer result
edm::ESHandle< TransientTrackingRecHitBuilder > theMuonRecHitBuilder
void updateWithDThits(TrajectoryStateOnSurface &, DTRecSegment4D const &)
void DynamicTruncation::useSegment ( CSCSegment const &  bestCSCSeg,
TrajectoryStateOnSurface const &  tsosCSC 
)
private

Definition at line 349 of file DynamicTruncation.cc.

References query::result.

349  {
350  result.push_back(theMuonRecHitBuilder->build(&bestCSCSeg));
352  else currentState = tsosCSC;
353 }
TrajectoryStateOnSurface currentState
void updateWithCSChits(TrajectoryStateOnSurface &, CSCSegment const &)
ConstRecHitContainer result
edm::ESHandle< TransientTrackingRecHitBuilder > theMuonRecHitBuilder

Member Data Documentation

std::map<CSCDetId, GlobalError> DynamicTruncation::cscApeMap
private

Definition at line 120 of file DynamicTruncation.h.

edm::ESHandle<CSCGeometry> DynamicTruncation::cscGeom
private

Definition at line 107 of file DynamicTruncation.h.

TrajectoryStateOnSurface DynamicTruncation::currentState
private

Definition at line 116 of file DynamicTruncation.h.

bool DynamicTruncation::doUpdateOfKFStates
private

Definition at line 126 of file DynamicTruncation.h.

std::map<DTChamberId, GlobalError> DynamicTruncation::dtApeMap
private

Definition at line 119 of file DynamicTruncation.h.

reco::DYTInfo DynamicTruncation::dytInfo
private

Definition at line 118 of file DynamicTruncation.h.

Referenced by getDYTInfo().

int DynamicTruncation::DYTselector
private

Definition at line 102 of file DynamicTruncation.h.

const DYTThrObject* DynamicTruncation::dytThresholds
private

Definition at line 122 of file DynamicTruncation.h.

std::map<int, double> DynamicTruncation::estimatorMap
private

Definition at line 113 of file DynamicTruncation.h.

Referenced by getDYTInfo().

ChamberSegmentUtility* DynamicTruncation::getSegs
private

Definition at line 123 of file DynamicTruncation.h.

Referenced by setProd().

std::map<int, DetId> DynamicTruncation::idChamberMap
private

Definition at line 115 of file DynamicTruncation.h.

Referenced by getDYTInfo().

edm::ESHandle<MagneticField> DynamicTruncation::magfield
private

Definition at line 112 of file DynamicTruncation.h.

double DynamicTruncation::muonETAest
private

Definition at line 121 of file DynamicTruncation.h.

double DynamicTruncation::muonPTest
private

Definition at line 121 of file DynamicTruncation.h.

DirectMuonNavigation* DynamicTruncation::navigation
private

Definition at line 111 of file DynamicTruncation.h.

edm::ESHandle<MuonDetLayerGeometry> DynamicTruncation::navMuon
private

Definition at line 110 of file DynamicTruncation.h.

int DynamicTruncation::nStationsUsed
private

Definition at line 101 of file DynamicTruncation.h.

Referenced by getDYTInfo().

ConstRecHitContainer DynamicTruncation::prelFitMeas
private

Definition at line 98 of file DynamicTruncation.h.

TrajectoryStateOnSurface DynamicTruncation::prelFitState
private

Definition at line 117 of file DynamicTruncation.h.

edm::ESHandle<Propagator> DynamicTruncation::propagator
private

Definition at line 103 of file DynamicTruncation.h.

edm::ESHandle<Propagator> DynamicTruncation::propagatorCompatibleDet
private

Definition at line 105 of file DynamicTruncation.h.

edm::ESHandle<Propagator> DynamicTruncation::propagatorPF
private

Definition at line 104 of file DynamicTruncation.h.

ConstRecHitContainer DynamicTruncation::result
private

Definition at line 98 of file DynamicTruncation.h.

edm::ESHandle<GlobalTrackingGeometry> DynamicTruncation::theG
private

Definition at line 106 of file DynamicTruncation.h.

edm::ESHandle<TransientTrackingRecHitBuilder> DynamicTruncation::theMuonRecHitBuilder
private

Definition at line 108 of file DynamicTruncation.h.

ThrParameters* DynamicTruncation::thrManager
private

Definition at line 124 of file DynamicTruncation.h.

std::vector<int> DynamicTruncation::Thrs
private

Definition at line 100 of file DynamicTruncation.h.

edm::ESHandle<TrajectoryStateUpdator> DynamicTruncation::updatorHandle
private

Definition at line 109 of file DynamicTruncation.h.

bool DynamicTruncation::useAPE
private

Definition at line 99 of file DynamicTruncation.h.

bool DynamicTruncation::useDBforThr
private

Definition at line 125 of file DynamicTruncation.h.

std::map<int, bool> DynamicTruncation::usedStationMap
private

Definition at line 114 of file DynamicTruncation.h.

Referenced by getDYTInfo().