CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
TSGForOI Class Reference

Create L3MuonTrajectorySeeds from L2 Muons updated at vertex in an outside in manner. More...

#include <TSGForOI.h>

Inheritance diagram for TSGForOI:
edm::stream::EDProducer<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

virtual void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
 TSGForOI (const edm::ParameterSet &iConfig)
 
virtual ~TSGForOI ()
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, std::unordered_multimap< std::string, edm::ProductResolverIndex > const &iIndicies, std::string const &moduleLabel)
 
virtual ~ProducerBase () noexcept(false)
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Member Functions

double calculateSFFromL2 (const reco::TrackRef track)
 Function used to calculate the dynamic error SF by analysing the L2. More...
 
void findSeedsOnLayer (const TrackerTopology *tTopo, const GeometricSearchDet &layer, const TrajectoryStateOnSurface &tsosAtIP, const Propagator &propagatorAlong, const Propagator &propagatorOpposite, const reco::TrackRef l2, std::unique_ptr< std::vector< TrajectorySeed > > &seeds)
 Function to find seeds on a given layer. More...
 
int makeSeedsFromHits (const TrackerTopology *tTopo, const GeometricSearchDet &layer, const TrajectoryStateOnSurface &state, std::vector< TrajectorySeed > &out, const Propagator &propagatorAlong, const MeasurementTrackerEvent &mte, double errorSF)
 Function to find hits on layers and create seeds from updated TSOS. More...
 

Private Attributes

const bool adjustErrorsDynamicallyForHitless_
 
const bool adjustErrorsDynamicallyForHits_
 Whether or not to use an automatically calculated scale-factor value. More...
 
bool analysedL2_
 Counters and flags for the implementation. More...
 
Plane::PlanePointer dummyPlane_
 Surface used to make a TSOS at the PCA to the beamline. More...
 
edm::ESHandle< Chi2MeasurementEstimatorBaseestimator_
 
const std::string estimatorName_
 Estimator used to find dets and TrajectoryMeasurements. More...
 
const double eta1_
 
const double eta2_
 
const double fixedErrorRescalingForHitless_
 
const double fixedErrorRescalingForHits_
 How much to rescale errors from the L2 (fixed error vs pT, eta) More...
 
bool foundHitlessSeed_
 
edm::ESHandle< GlobalTrackingGeometrygeometry_
 
unsigned int layerCount_
 
edm::ESHandle< MagneticFieldmagfield_
 
const double maxEtaForTOB_
 Maximum eta value to activate searching in the TOB. More...
 
edm::Handle< MeasurementTrackerEventmeasurementTracker_
 
const edm::EDGetTokenT< MeasurementTrackerEventmeasurementTrackerTag_
 
const double minEtaForTEC_
 Minimum eta value to activate searching in the TEC. More...
 
const unsigned int numOfHitsToTry_
 How many hits to try per layer. More...
 
const unsigned int numOfLayersToTry_
 How many layers to try. More...
 
unsigned int numOfMaxSeeds_
 Maximum number of seeds for each L2. More...
 
unsigned int numSeedsMade_
 
edm::ESHandle< PropagatorpropagatorAlong_
 
edm::ESHandle< PropagatorpropagatorOpposite_
 
const double pT1_
 pT, eta ranges and scale factor values More...
 
const double pT2_
 
const double pT3_
 
const double SF1_
 
const double SF2_
 
const double SF3_
 
const double SF4_
 
const double SF5_
 
const edm::EDGetTokenT< reco::TrackCollectionsrc_
 Labels for input collections. More...
 
std::string theCategory
 
const double tsosDiff_
 Distance of TSOSs to trigger using hits or not. More...
 
std::unique_ptr< TrajectoryStateUpdatorupdator_
 KFUpdator defined in constructor. More...
 
const bool useHitLessSeeds_
 
const bool useStereoLayersInTEC_
 Switch ON to use Stereo layers instead of using every layer in TEC. More...
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Create L3MuonTrajectorySeeds from L2 Muons updated at vertex in an outside in manner.

Author
Benjamin Radburn-Smith, Santiago Folgueras

Definition at line 33 of file TSGForOI.h.

Constructor & Destructor Documentation

TSGForOI::TSGForOI ( const edm::ParameterSet iConfig)
explicit

Definition at line 15 of file TSGForOI.cc.

References edm::ParameterSet::getParameter(), numOfMaxSeeds_, numSeedsMade_, and theCategory.

15  :
16  src_(consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("src"))),
17  numOfLayersToTry_(iConfig.getParameter<int32_t>("layersToTry")),
18  numOfHitsToTry_(iConfig.getParameter<int32_t>("hitsToTry")),
19  fixedErrorRescalingForHits_(iConfig.getParameter<double>("fixedErrorRescaleFactorForHits")),
20  fixedErrorRescalingForHitless_(iConfig.getParameter<double>("fixedErrorRescaleFactorForHitless")),
21  adjustErrorsDynamicallyForHits_(iConfig.getParameter<bool>("adjustErrorsDynamicallyForHits")),
22  adjustErrorsDynamicallyForHitless_(iConfig.getParameter<bool>("adjustErrorsDynamicallyForHitless")),
23  estimatorName_(iConfig.getParameter<std::string>("estimator")),
24  minEtaForTEC_(iConfig.getParameter<double>("minEtaForTEC")),
25  maxEtaForTOB_(iConfig.getParameter<double>("maxEtaForTOB")),
26  useHitLessSeeds_(iConfig.getParameter<bool>("UseHitLessSeeds")),
27  useStereoLayersInTEC_(iConfig.getParameter<bool>("UseStereoLayersInTEC")),
29  updator_(new KFUpdator()),
30  measurementTrackerTag_(consumes<MeasurementTrackerEvent>(iConfig.getParameter<edm::InputTag>("MeasurementTrackerEvent"))),
31  pT1_(iConfig.getParameter<double>("pT1")),
32  pT2_(iConfig.getParameter<double>("pT2")),
33  pT3_(iConfig.getParameter<double>("pT3")),
34  eta1_(iConfig.getParameter<double>("eta1")),
35  eta2_(iConfig.getParameter<double>("eta2")),
36  SF1_(iConfig.getParameter<double>("SF1")),
37  SF2_(iConfig.getParameter<double>("SF2")),
38  SF3_(iConfig.getParameter<double>("SF3")),
39  SF4_(iConfig.getParameter<double>("SF4")),
40  SF5_(iConfig.getParameter<double>("SF5")),
41  tsosDiff_(iConfig.getParameter<double>("tsosDiff"))
42 {
43  numOfMaxSeeds_=iConfig.getParameter<uint32_t>("maxSeeds");
44  produces<std::vector<TrajectorySeed> >();
45  numSeedsMade_=0;
46  theCategory = "Muon|RecoMuon|TSGForOI";
47 }
const std::string estimatorName_
Estimator used to find dets and TrajectoryMeasurements.
Definition: TSGForOI.h:61
T getParameter(std::string const &) const
std::unique_ptr< TrajectoryStateUpdator > updator_
KFUpdator defined in constructor.
Definition: TSGForOI.h:80
const double tsosDiff_
Distance of TSOSs to trigger using hits or not.
Definition: TSGForOI.h:90
const double SF3_
Definition: TSGForOI.h:87
const double maxEtaForTOB_
Maximum eta value to activate searching in the TOB.
Definition: TSGForOI.h:67
unsigned int numSeedsMade_
Definition: TSGForOI.h:95
const double minEtaForTEC_
Minimum eta value to activate searching in the TEC.
Definition: TSGForOI.h:64
const double fixedErrorRescalingForHits_
How much to rescale errors from the L2 (fixed error vs pT, eta)
Definition: TSGForOI.h:53
const double eta2_
Definition: TSGForOI.h:86
static PlanePointer build(Args &&...args)
Definition: Plane.h:33
const bool useHitLessSeeds_
Definition: TSGForOI.h:71
const unsigned int numOfLayersToTry_
How many layers to try.
Definition: TSGForOI.h:47
const double SF1_
Definition: TSGForOI.h:87
const bool useStereoLayersInTEC_
Switch ON to use Stereo layers instead of using every layer in TEC.
Definition: TSGForOI.h:74
const double SF5_
Definition: TSGForOI.h:87
const bool adjustErrorsDynamicallyForHitless_
Definition: TSGForOI.h:58
unsigned int numOfMaxSeeds_
Maximum number of seeds for each L2.
Definition: TSGForOI.h:44
const double pT1_
pT, eta ranges and scale factor values
Definition: TSGForOI.h:85
const double SF4_
Definition: TSGForOI.h:87
const double pT2_
Definition: TSGForOI.h:85
const double eta1_
Definition: TSGForOI.h:86
const double pT3_
Definition: TSGForOI.h:85
std::string theCategory
Definition: TSGForOI.h:98
const edm::EDGetTokenT< reco::TrackCollection > src_
Labels for input collections.
Definition: TSGForOI.h:41
const bool adjustErrorsDynamicallyForHits_
Whether or not to use an automatically calculated scale-factor value.
Definition: TSGForOI.h:57
Plane::PlanePointer dummyPlane_
Surface used to make a TSOS at the PCA to the beamline.
Definition: TSGForOI.h:77
const edm::EDGetTokenT< MeasurementTrackerEvent > measurementTrackerTag_
Definition: TSGForOI.h:82
const double SF2_
Definition: TSGForOI.h:87
const unsigned int numOfHitsToTry_
How many hits to try per layer.
Definition: TSGForOI.h:50
const double fixedErrorRescalingForHitless_
Definition: TSGForOI.h:54
TSGForOI::~TSGForOI ( )
virtual

Definition at line 50 of file TSGForOI.cc.

50  {
51 }

Member Function Documentation

double TSGForOI::calculateSFFromL2 ( const reco::TrackRef  track)
private

Function used to calculate the dynamic error SF by analysing the L2.

Definition at line 221 of file TSGForOI.cc.

References funct::abs(), eta1_, eta2_, LogTrace, pT1_, pT2_, pT3_, SF1_, SF2_, SF3_, SF4_, SF5_, and theCategory.

Referenced by findSeedsOnLayer().

221  {
222 
223  double theSF=1.0;
224  // L2 direction vs pT blowup - as was previously done:
225  // Split into 4 pT ranges: <pT1_, pT1_<pT2_, pT2_<pT3_, <pT4_: 13,30,70
226  // Split into 2 eta ranges for the middle two pT ranges: 1.0,1.4
227  double abseta = std::abs(track->eta());
228  if (track->pt()<=pT1_) theSF=SF1_;
229  if (track->pt()>pT1_ && track->pt()<=pT2_){
230  if (abseta<=eta1_) theSF=SF3_;
231  if (abseta>eta1_ && abseta<=eta2_) theSF=SF2_;
232  if (abseta>eta2_) theSF=SF3_;
233  }
234  if (track->pt()>pT2_ && track->pt()<=pT3_){
235  if (abseta<=eta1_) theSF=SF5_;
236  if (abseta>eta1_ && abseta<=eta2_) theSF=SF4_;
237  if (abseta>eta2_) theSF=SF5_;
238  }
239  if (track->pt()>pT3_) theSF=SF5_;
240 
241  LogTrace(theCategory) << "TSGForOI::calculateSFFromL2: SF has been calculated as: " << theSF;
242  return theSF;
243 }
const double SF3_
Definition: TSGForOI.h:87
const double eta2_
Definition: TSGForOI.h:86
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const double SF1_
Definition: TSGForOI.h:87
const double SF5_
Definition: TSGForOI.h:87
#define LogTrace(id)
const double pT1_
pT, eta ranges and scale factor values
Definition: TSGForOI.h:85
const double SF4_
Definition: TSGForOI.h:87
const double pT2_
Definition: TSGForOI.h:85
const double eta1_
Definition: TSGForOI.h:86
const double pT3_
Definition: TSGForOI.h:85
std::string theCategory
Definition: TSGForOI.h:98
const double SF2_
Definition: TSGForOI.h:87
void TSGForOI::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 309 of file TSGForOI.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addUntracked(), DEFINE_FWK_MODULE, and AlCaHLTBitMon_QueryRunRegistry::string.

309  {
311  desc.add<edm::InputTag>("src",edm::InputTag("hltL2Muons","UpdatedAtVtx"));
312  desc.add<int>("layersToTry",1);
313  desc.add<double>("fixedErrorRescaleFactorForHitless",2.0);
314  desc.add<int>("hitsToTry",1);
315  desc.add<bool>("adjustErrorsDynamicallyForHits",false);
316  desc.add<bool>("adjustErrorsDynamicallyForHitless",false);
317  desc.add<edm::InputTag>("MeasurementTrackerEvent",edm::InputTag("hltSiStripClusters"));
318  desc.add<bool>("UseHitLessSeeds",true);
319  desc.add<bool>("UseStereoLayersInTEC",false);
320  desc.add<std::string>("estimator","hltESPChi2MeasurementEstimator100");
321  desc.add<double>("maxEtaForTOB",1.2);
322  desc.add<double>("minEtaForTEC",0.8);
323  desc.addUntracked<bool>("debug",true);
324  desc.add<double>("fixedErrorRescaleFactorForHits",2.0);
325  desc.add<unsigned int>("maxSeeds",1);
326  desc.add<double>("pT1",13.0);
327  desc.add<double>("pT2",30.0);
328  desc.add<double>("pT3",70.0);
329  desc.add<double>("eta1",1.0);
330  desc.add<double>("eta2",1.4);
331  desc.add<double>("SF1",3.0);
332  desc.add<double>("SF2",4.0);
333  desc.add<double>("SF3",5.0);
334  desc.add<double>("SF4",7.0);
335  desc.add<double>("SF5",10.0);
336  desc.add<double>("tsosDiff",0.03);
337  descriptions.add("TSGForOI",desc);
338 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void TSGForOI::findSeedsOnLayer ( const TrackerTopology tTopo,
const GeometricSearchDet layer,
const TrajectoryStateOnSurface tsosAtIP,
const Propagator propagatorAlong,
const Propagator propagatorOpposite,
const reco::TrackRef  l2,
std::unique_ptr< std::vector< TrajectorySeed > > &  seeds 
)
private

Function to find seeds on a given layer.

Definition at line 166 of file TSGForOI.cc.

References adjustErrorsDynamicallyForHitless_, adjustErrorsDynamicallyForHits_, analysedL2_, calculateSFFromL2(), GeometricSearchDet::compatibleDetsV(), estimator_, fixedErrorRescalingForHitless_, fixedErrorRescalingForHits_, foundHitlessSeed_, layerCount_, LogTrace, makeSeedsFromHits(), measurementTracker_, numOfLayersToTry_, numOfMaxSeeds_, numSeedsMade_, oppositeToMomentum, MillePedeFileConverter_cfg::out, trajectoryStateTransform::persistentState(), theCategory, and useHitLessSeeds_.

Referenced by produce().

173  {
174 
175  if (numSeedsMade_>numOfMaxSeeds_) return;
176  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: numSeedsMade = " << numSeedsMade_ << " , layerCount = " << layerCount_ << endl;
177 
178  double errorSFHits_=1.0;
179  double errorSFHitless_=1.0;
182 
183  // Hitless:
185  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: Start hitless" << endl;
186  std::vector< GeometricSearchDet::DetWithState > dets;
187  layer.compatibleDetsV(tsosAtIP, propagatorAlong, *estimator_, dets);
188  if (dets.size()>0) {
189  auto const& detOnLayer = dets.front().first;
190  auto const& tsosOnLayer = dets.front().second;
191  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: tsosOnLayer " << tsosOnLayer << endl;
192  if (!tsosOnLayer.isValid()){
193  edm::LogInfo(theCategory) << "ERROR!: Hitless TSOS is not valid!";
194  }
195  else{
196  // calculate SF from L2 (only once -- if needed)
198  errorSFHitless_=calculateSFFromL2(l2);
199  analysedL2_=true;
200  }
201 
202  dets.front().second.rescaleError(errorSFHitless_);
203  PTrajectoryStateOnDet const& ptsod = trajectoryStateTransform::persistentState(tsosOnLayer,detOnLayer->geographicalId().rawId());
205  out->push_back(TrajectorySeed(ptsod,rHC,oppositeToMomentum));
206  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: TSOD (Hitless) done " << endl;
207  foundHitlessSeed_=true;
208  }
209  numSeedsMade_=out->size();
210  }
211  }
212  // numSeedsMade_=out->size();
213 
214  // Hits:
215  if (layerCount_>numOfLayersToTry_) return;
216  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: Start Hits" <<endl;
217  if (makeSeedsFromHits(tTopo, layer, tsosAtIP, *out, propagatorAlong, *measurementTracker_, errorSFHits_)) ++layerCount_;
218  numSeedsMade_=out->size();
219 }
double calculateSFFromL2(const reco::TrackRef track)
Function used to calculate the dynamic error SF by analysing the L2.
Definition: TSGForOI.cc:221
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
int makeSeedsFromHits(const TrackerTopology *tTopo, const GeometricSearchDet &layer, const TrajectoryStateOnSurface &state, std::vector< TrajectorySeed > &out, const Propagator &propagatorAlong, const MeasurementTrackerEvent &mte, double errorSF)
Function to find hits on layers and create seeds from updated TSOS.
Definition: TSGForOI.cc:246
unsigned int numSeedsMade_
Definition: TSGForOI.h:95
unsigned int layerCount_
Definition: TSGForOI.h:96
const double fixedErrorRescalingForHits_
How much to rescale errors from the L2 (fixed error vs pT, eta)
Definition: TSGForOI.h:53
bool foundHitlessSeed_
Definition: TSGForOI.h:94
const bool useHitLessSeeds_
Definition: TSGForOI.h:71
const unsigned int numOfLayersToTry_
How many layers to try.
Definition: TSGForOI.h:47
#define LogTrace(id)
const bool adjustErrorsDynamicallyForHitless_
Definition: TSGForOI.h:58
unsigned int numOfMaxSeeds_
Maximum number of seeds for each L2.
Definition: TSGForOI.h:44
std::string theCategory
Definition: TSGForOI.h:98
edm::ESHandle< Chi2MeasurementEstimatorBase > estimator_
Definition: TSGForOI.h:104
bool analysedL2_
Counters and flags for the implementation.
Definition: TSGForOI.h:93
const bool adjustErrorsDynamicallyForHits_
Whether or not to use an automatically calculated scale-factor value.
Definition: TSGForOI.h:57
virtual void compatibleDetsV(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetWithState > &result) const
edm::Handle< MeasurementTrackerEvent > measurementTracker_
Definition: TSGForOI.h:103
const double fixedErrorRescalingForHitless_
Definition: TSGForOI.h:54
int TSGForOI::makeSeedsFromHits ( const TrackerTopology tTopo,
const GeometricSearchDet layer,
const TrajectoryStateOnSurface state,
std::vector< TrajectorySeed > &  out,
const Propagator propagatorAlong,
const MeasurementTrackerEvent mte,
double  errorSF 
)
private

Function to find hits on layers and create seeds from updated TSOS.

Definition at line 246 of file TSGForOI.cc.

References GeometricSearchDet::compatibleDetsV(), estimator_, MeasurementDetWithData::fastMeasurements(), runEdmFileComparison::found, MeasurementDetWithData::isNull(), TrajectoryStateOnSurface::isValid(), LogTrace, eostools::move(), numOfHitsToTry_, oppositeToMomentum, trajectoryStateTransform::persistentState(), edm::OwnVector< T, P >::push_back(), DetId::rawId(), TrajectoryStateOnSurface::rescaleError(), SurveyInfoScenario_cff::seed, edm::OwnVector< T, P >::size(), DetId::subdetId(), StripSubdetector::TEC, TrackerTopology::tecIsStereo(), updator_, and useStereoLayersInTEC_.

Referenced by findSeedsOnLayer().

253  {
254 
255  // Error Rescaling:
256  TrajectoryStateOnSurface onLayer(tsosAtIP);
257  onLayer.rescaleError(errorSF);
258 
259  std::vector< GeometricSearchDet::DetWithState > dets;
260  layer.compatibleDetsV(onLayer, propagatorAlong, *estimator_, dets);
261 
262  // Find Measurements on each DetWithState:
263  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: find measurements on each detWithState " << dets.size() << endl;
264  std::vector<TrajectoryMeasurement> meas;
265  for (std::vector<GeometricSearchDet::DetWithState>::iterator it=dets.begin(); it!=dets.end(); ++it) {
266  MeasurementDetWithData det = measurementTracker.idToDet(it->first->geographicalId());
267  if (det.isNull()) {
268  continue;
269  }
270  if (!it->second.isValid()) continue; //Skip if TSOS is not valid
271 
272  std::vector < TrajectoryMeasurement > mymeas = det.fastMeasurements(it->second, onLayer, propagatorAlong, *estimator_); //Second TSOS is not used
273  for (std::vector<TrajectoryMeasurement>::const_iterator it2 = mymeas.begin(), ed2 = mymeas.end(); it2 != ed2; ++it2) {
274  if (it2->recHit()->isValid()) meas.push_back(*it2); //Only save those which are valid
275  }
276  }
277 
278 
279  // Update TSOS using TMs after sorting, then create Trajectory Seed and put into vector:
280  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: Update TSOS using TMs after sorting, then create Trajectory Seed, number of TM = " << meas.size() << endl;
281  unsigned int found = 0;
282  std::sort(meas.begin(), meas.end(), TrajMeasLessEstim());
283  for (std::vector<TrajectoryMeasurement>::const_iterator it=meas.begin(); it!=meas.end(); ++it) {
284  TrajectoryStateOnSurface updatedTSOS = updator_->update(it->forwardPredictedState(), *it->recHit());
285  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: TSOS for TM " << found << endl;
286  if (not updatedTSOS.isValid()) continue;
287 
288  // CHECK if is StereoLayer:
289  if (useStereoLayersInTEC_) {
290  DetId detid = ((*it).recHit()->hit())->geographicalId();
291  if (detid.subdetId() == StripSubdetector::TEC) {
292  if (!tTopo->tecIsStereo(detid.rawId())) break; // try another layer
293  }
294  }
295 
297  seedHits.push_back(*it->recHit()->hit());
298  PTrajectoryStateOnDet const& pstate = trajectoryStateTransform::persistentState(updatedTSOS, it->recHit()->geographicalId().rawId());
299  TrajectorySeed seed(pstate, std::move(seedHits), oppositeToMomentum);
300  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: number of seedHits: " << seedHits.size() << endl;
301  out.push_back(seed);
302  found++;
303  if (found == numOfHitsToTry_) break;
304  }
305  return found;
306 }
std::unique_ptr< TrajectoryStateUpdator > updator_
KFUpdator defined in constructor.
Definition: TSGForOI.h:80
size_type size() const
Definition: OwnVector.h:264
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
bool tecIsStereo(const DetId &id) const
void push_back(D *&d)
Definition: OwnVector.h:290
std::vector< TrajectoryMeasurement > fastMeasurements(const TrajectoryStateOnSurface &stateOnThisDet, const TrajectoryStateOnSurface &tsos2, const Propagator &prop, const MeasurementEstimator &est) const
const bool useStereoLayersInTEC_
Switch ON to use Stereo layers instead of using every layer in TEC.
Definition: TSGForOI.h:74
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
#define LogTrace(id)
Definition: DetId.h:18
edm::ESHandle< Chi2MeasurementEstimatorBase > estimator_
Definition: TSGForOI.h:104
virtual void compatibleDetsV(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetWithState > &result) const
def move(src, dest)
Definition: eostools.py:510
const unsigned int numOfHitsToTry_
How many hits to try per layer.
Definition: TSGForOI.h:50
void TSGForOI::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overridevirtual

Definition at line 54 of file TSGForOI.cc.

References funct::abs(), alongMomentum, analysedL2_, dummyPlane_, estimator_, estimatorName_, PV3DBase< T, PVType, FrameType >::eta(), findSeedsOnLayer(), foundHitlessSeed_, geometry_, edm::EventSetup::get(), edm::Event::getByToken(), TrajectoryStateOnSurface::globalPosition(), trajectoryStateTransform::initialFreeState(), trajectoryStateTransform::innerStateOnSurface(), TrajectoryStateOnSurface::isValid(), layerCount_, LogTrace, magfield_, maxEtaForTOB_, measurementTracker_, measurementTrackerTag_, minEtaForTEC_, eostools::move(), numOfMaxSeeds_, numSeedsMade_, oppositeToMomentum, MillePedeFileConverter_cfg::out, PV3DBase< T, PVType, FrameType >::phi(), FreeTrajectoryState::position(), edm::ESHandle< T >::product(), gsfElectronCkfTrackCandidateMaker_cff::propagatorAlong, propagatorAlong_, gsfElectronCkfTrackCandidateMaker_cff::propagatorOpposite, propagatorOpposite_, edm::Event::put(), mps_fire::result, SetPropagationDirection(), mathSSE::sqrt(), src_, theCategory, tsosDiff_, and useHitLessSeeds_.

54  {
55  iSetup.get<IdealMagneticFieldRecord>().get(magfield_);
56  iSetup.get<TrackingComponentsRecord>().get("PropagatorWithMaterial", propagatorOpposite_);
57  iSetup.get<TrackingComponentsRecord>().get("PropagatorWithMaterial", propagatorAlong_);
62  iEvent.getByToken(src_, l2TrackCol);
63 
64  // The product:
65  std::unique_ptr<std::vector<TrajectorySeed> > result(new std::vector<TrajectorySeed>());
66 
67  // Get vector of Detector layers once:
68  std::vector<BarrelDetLayer const*> const& tob = measurementTracker_->geometricSearchTracker()->tobLayers();
69  std::vector<ForwardDetLayer const*> const& tecPositive = measurementTracker_->geometricSearchTracker()->posTecLayers();
70  std::vector<ForwardDetLayer const*> const& tecNegative = measurementTracker_->geometricSearchTracker()->negTecLayers();
71  edm::ESHandle<TrackerTopology> tTopo_handle;
72  iSetup.get<TrackerTopologyRcd>().get(tTopo_handle);
73  const TrackerTopology* tTopo = tTopo_handle.product();
74 
75  // Get the suitable propagators:
78 
79  edm::ESHandle<Propagator> SmartOpposite;
80  edm::ESHandle<Propagator> SHPOpposite;
81  iSetup.get<TrackingComponentsRecord>().get("hltESPSmartPropagatorAnyOpposite", SmartOpposite);
82  iSetup.get<TrackingComponentsRecord>().get("hltESPSteppingHelixPropagatorOpposite", SHPOpposite);
83 
84  // Loop over the L2's and make seeds for all of them:
85  LogTrace(theCategory) << "TSGForOI::produce: Number of L2's: " << l2TrackCol->size();
86  for (unsigned int l2TrackColIndex(0);l2TrackColIndex!=l2TrackCol->size();++l2TrackColIndex){
87  const reco::TrackRef l2(l2TrackCol, l2TrackColIndex);
88  std::unique_ptr<std::vector<TrajectorySeed> > out(new std::vector<TrajectorySeed>());
89  LogTrace("TSGForOI") << "TSGForOI::produce: L2 muon pT, eta, phi --> " << l2->pt() << " , " << l2->eta() << " , " << l2->phi() << endl;
90 
92  dummyPlane_->move(fts.position() - dummyPlane_->position());
94  LogTrace("TSGForOI") << "TSGForOI::produce: Created TSOSatIP: " << tsosAtIP << std::endl;
95 
96  // get the TSOS on the innermost layer of the L2.
98  LogTrace("TSGForOI") << "TSGForOI::produce: Created TSOSatMuonSystem: " << tsosAtMuonSystem <<endl;
99 
100  if (useHitLessSeeds_){ //
101  LogTrace("TSGForOI") << "TSGForOI::produce: Check the error of the L2 parameter and use hit seeds if big errors" << endl;
102  StateOnTrackerBound fromInside(propagatorAlong.get());
103  TrajectoryStateOnSurface outerTkStateInside = fromInside(fts);
104 
105  StateOnTrackerBound fromOutside(&*SmartOpposite);
106  TrajectoryStateOnSurface outerTkStateOutside = fromOutside(tsosAtMuonSystem);
107 
108  // for now only checking if the two positions (using updated and not-updated) agree withing certain extent,
109  // will probably have to design something fancier for the future.
110  auto dist=0.0;
111  if (outerTkStateInside.isValid() && outerTkStateOutside.isValid()){
112  float deta = outerTkStateInside.globalPosition().eta() - outerTkStateOutside.globalPosition().eta();
113  float dphi = outerTkStateInside.globalPosition().phi() - outerTkStateOutside.globalPosition().phi();
114  dist = sqrt(deta*deta+dphi*dphi);
115  }
116  if (dist>tsosDiff_){
117  ++numOfMaxSeeds_; // add a hit-based seed
118  }
119  }
120 
121  numSeedsMade_=0;
122  analysedL2_ = false;
123  foundHitlessSeed_ = false;
124 
125  // BARREL
126  if (std::abs(l2->eta()) < maxEtaForTOB_) {
127  layerCount_ = 0;
128  for (auto it=tob.rbegin(); it!=tob.rend(); ++it) { //This goes from outermost to innermost layer
129  LogTrace("TSGForOI") << "TSGForOI::produce: looping in TOB layer " << layerCount_ << endl;
130  findSeedsOnLayer(tTopo, **it, tsosAtIP, *(propagatorAlong.get()), *(propagatorOpposite.get()), l2, out);
131  }
132  }
133 
134  // Reset Number of seeds if in overlap region:
135  if (std::abs(l2->eta())>minEtaForTEC_ && std::abs(l2->eta())<maxEtaForTOB_){
136  numSeedsMade_=0;
137  }
138 
139  // ENDCAP+
140  if (l2->eta() > minEtaForTEC_) {
141  layerCount_ = 0;
142  for (auto it=tecPositive.rbegin(); it!=tecPositive.rend(); ++it) {
143  LogTrace("TSGForOI") << "TSGForOI::produce: looping in TEC+ layer " << layerCount_ << endl;
144  findSeedsOnLayer(tTopo, **it, tsosAtIP, *(propagatorAlong.get()), *(propagatorOpposite.get()), l2, out);
145  }
146  }
147 
148  // ENDCAP-
149  if (l2->eta() < -minEtaForTEC_) {
150  layerCount_ = 0;
151  for (auto it=tecNegative.rbegin(); it!=tecNegative.rend(); ++it) {
152  LogTrace("TSGForOI") << "TSGForOI::produce: looping in TEC- layer " << layerCount_ << endl;
153  findSeedsOnLayer(tTopo, **it, tsosAtIP, *(propagatorAlong.get()), *(propagatorOpposite.get()), l2, out);
154  }
155  }
156 
157  for (std::vector<TrajectorySeed>::iterator it=out->begin(); it!=out->end(); ++it){
158  result->push_back(*it);
159  }
160  } //L2Collection
161  edm::LogInfo(theCategory) << "TSGForOI::produce: number of seeds made: " << result->size();
162 
163  iEvent.put(std::move(result));
164 }
const std::string estimatorName_
Estimator used to find dets and TrajectoryMeasurements.
Definition: TSGForOI.h:61
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:122
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:460
edm::ESHandle< Propagator > propagatorAlong_
Definition: TSGForOI.h:100
const double tsosDiff_
Distance of TSOSs to trigger using hits or not.
Definition: TSGForOI.h:90
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
GlobalPoint globalPosition() const
edm::ESHandle< MagneticField > magfield_
Definition: TSGForOI.h:99
const double maxEtaForTOB_
Maximum eta value to activate searching in the TOB.
Definition: TSGForOI.h:67
std::unique_ptr< Propagator > SetPropagationDirection(Propagator const &iprop, PropagationDirection dir)
unsigned int numSeedsMade_
Definition: TSGForOI.h:95
const double minEtaForTEC_
Minimum eta value to activate searching in the TEC.
Definition: TSGForOI.h:64
unsigned int layerCount_
Definition: TSGForOI.h:96
void findSeedsOnLayer(const TrackerTopology *tTopo, const GeometricSearchDet &layer, const TrajectoryStateOnSurface &tsosAtIP, const Propagator &propagatorAlong, const Propagator &propagatorOpposite, const reco::TrackRef l2, std::unique_ptr< std::vector< TrajectorySeed > > &seeds)
Function to find seeds on a given layer.
Definition: TSGForOI.cc:166
bool foundHitlessSeed_
Definition: TSGForOI.h:94
T sqrt(T t)
Definition: SSEVec.h:18
const bool useHitLessSeeds_
Definition: TSGForOI.h:71
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define LogTrace(id)
unsigned int numOfMaxSeeds_
Maximum number of seeds for each L2.
Definition: TSGForOI.h:44
GlobalPoint position() const
const T & get() const
Definition: EventSetup.h:56
std::string theCategory
Definition: TSGForOI.h:98
const edm::EDGetTokenT< reco::TrackCollection > src_
Labels for input collections.
Definition: TSGForOI.h:41
edm::ESHandle< Chi2MeasurementEstimatorBase > estimator_
Definition: TSGForOI.h:104
bool analysedL2_
Counters and flags for the implementation.
Definition: TSGForOI.h:93
T eta() const
Definition: PV3DBase.h:76
Plane::PlanePointer dummyPlane_
Surface used to make a TSOS at the PCA to the beamline.
Definition: TSGForOI.h:77
edm::ESHandle< Propagator > propagatorOpposite_
Definition: TSGForOI.h:101
const edm::EDGetTokenT< MeasurementTrackerEvent > measurementTrackerTag_
Definition: TSGForOI.h:82
edm::ESHandle< GlobalTrackingGeometry > geometry_
Definition: TSGForOI.h:102
FreeTrajectoryState initialFreeState(const reco::Track &tk, const MagneticField *field, bool withErr=true)
T const * product() const
Definition: ESHandle.h:86
def move(src, dest)
Definition: eostools.py:510
edm::Handle< MeasurementTrackerEvent > measurementTracker_
Definition: TSGForOI.h:103
TrajectoryStateOnSurface innerStateOnSurface(const reco::Track &tk, const TrackingGeometry &geom, const MagneticField *field, bool withErr=true)

Member Data Documentation

const bool TSGForOI::adjustErrorsDynamicallyForHitless_
private

Definition at line 58 of file TSGForOI.h.

Referenced by findSeedsOnLayer().

const bool TSGForOI::adjustErrorsDynamicallyForHits_
private

Whether or not to use an automatically calculated scale-factor value.

Definition at line 57 of file TSGForOI.h.

Referenced by findSeedsOnLayer().

bool TSGForOI::analysedL2_
private

Counters and flags for the implementation.

Definition at line 93 of file TSGForOI.h.

Referenced by findSeedsOnLayer(), and produce().

Plane::PlanePointer TSGForOI::dummyPlane_
private

Surface used to make a TSOS at the PCA to the beamline.

Definition at line 77 of file TSGForOI.h.

Referenced by produce().

edm::ESHandle<Chi2MeasurementEstimatorBase> TSGForOI::estimator_
private

Definition at line 104 of file TSGForOI.h.

Referenced by findSeedsOnLayer(), makeSeedsFromHits(), and produce().

const std::string TSGForOI::estimatorName_
private

Estimator used to find dets and TrajectoryMeasurements.

Definition at line 61 of file TSGForOI.h.

Referenced by produce().

const double TSGForOI::eta1_
private

Definition at line 86 of file TSGForOI.h.

Referenced by calculateSFFromL2().

const double TSGForOI::eta2_
private

Definition at line 86 of file TSGForOI.h.

Referenced by calculateSFFromL2().

const double TSGForOI::fixedErrorRescalingForHitless_
private

Definition at line 54 of file TSGForOI.h.

Referenced by findSeedsOnLayer().

const double TSGForOI::fixedErrorRescalingForHits_
private

How much to rescale errors from the L2 (fixed error vs pT, eta)

Definition at line 53 of file TSGForOI.h.

Referenced by findSeedsOnLayer().

bool TSGForOI::foundHitlessSeed_
private

Definition at line 94 of file TSGForOI.h.

Referenced by findSeedsOnLayer(), and produce().

edm::ESHandle<GlobalTrackingGeometry> TSGForOI::geometry_
private

Definition at line 102 of file TSGForOI.h.

Referenced by produce().

unsigned int TSGForOI::layerCount_
private

Definition at line 96 of file TSGForOI.h.

Referenced by findSeedsOnLayer(), and produce().

edm::ESHandle<MagneticField> TSGForOI::magfield_
private

Definition at line 99 of file TSGForOI.h.

Referenced by produce().

const double TSGForOI::maxEtaForTOB_
private

Maximum eta value to activate searching in the TOB.

Definition at line 67 of file TSGForOI.h.

Referenced by produce().

edm::Handle<MeasurementTrackerEvent> TSGForOI::measurementTracker_
private

Definition at line 103 of file TSGForOI.h.

Referenced by findSeedsOnLayer(), and produce().

const edm::EDGetTokenT<MeasurementTrackerEvent> TSGForOI::measurementTrackerTag_
private

Definition at line 82 of file TSGForOI.h.

Referenced by produce().

const double TSGForOI::minEtaForTEC_
private

Minimum eta value to activate searching in the TEC.

Definition at line 64 of file TSGForOI.h.

Referenced by produce().

const unsigned int TSGForOI::numOfHitsToTry_
private

How many hits to try per layer.

Definition at line 50 of file TSGForOI.h.

Referenced by makeSeedsFromHits().

const unsigned int TSGForOI::numOfLayersToTry_
private

How many layers to try.

Definition at line 47 of file TSGForOI.h.

Referenced by findSeedsOnLayer().

unsigned int TSGForOI::numOfMaxSeeds_
private

Maximum number of seeds for each L2.

Definition at line 44 of file TSGForOI.h.

Referenced by findSeedsOnLayer(), produce(), and TSGForOI().

unsigned int TSGForOI::numSeedsMade_
private

Definition at line 95 of file TSGForOI.h.

Referenced by findSeedsOnLayer(), produce(), and TSGForOI().

edm::ESHandle<Propagator> TSGForOI::propagatorAlong_
private

Definition at line 100 of file TSGForOI.h.

Referenced by produce().

edm::ESHandle<Propagator> TSGForOI::propagatorOpposite_
private

Definition at line 101 of file TSGForOI.h.

Referenced by produce().

const double TSGForOI::pT1_
private

pT, eta ranges and scale factor values

Definition at line 85 of file TSGForOI.h.

Referenced by calculateSFFromL2().

const double TSGForOI::pT2_
private

Definition at line 85 of file TSGForOI.h.

Referenced by calculateSFFromL2().

const double TSGForOI::pT3_
private

Definition at line 85 of file TSGForOI.h.

Referenced by calculateSFFromL2().

const double TSGForOI::SF1_
private

Definition at line 87 of file TSGForOI.h.

Referenced by calculateSFFromL2().

const double TSGForOI::SF2_
private

Definition at line 87 of file TSGForOI.h.

Referenced by calculateSFFromL2().

const double TSGForOI::SF3_
private

Definition at line 87 of file TSGForOI.h.

Referenced by calculateSFFromL2().

const double TSGForOI::SF4_
private

Definition at line 87 of file TSGForOI.h.

Referenced by calculateSFFromL2().

const double TSGForOI::SF5_
private

Definition at line 87 of file TSGForOI.h.

Referenced by calculateSFFromL2().

const edm::EDGetTokenT<reco::TrackCollection> TSGForOI::src_
private

Labels for input collections.

Definition at line 41 of file TSGForOI.h.

Referenced by produce().

std::string TSGForOI::theCategory
private

Definition at line 98 of file TSGForOI.h.

Referenced by calculateSFFromL2(), findSeedsOnLayer(), produce(), and TSGForOI().

const double TSGForOI::tsosDiff_
private

Distance of TSOSs to trigger using hits or not.

Definition at line 90 of file TSGForOI.h.

Referenced by produce().

std::unique_ptr<TrajectoryStateUpdator> TSGForOI::updator_
private

KFUpdator defined in constructor.

Definition at line 80 of file TSGForOI.h.

Referenced by makeSeedsFromHits().

const bool TSGForOI::useHitLessSeeds_
private

Switch ON (True) : use additional hits for seeds depending on the L2 properties (ignores numOfMaxSeeds_) Switch OFF (False): the numOfMaxSeeds_ defines if we will use hitless (numOfMaxSeeds_==1) or hitless+hits (numOfMaxSeeds_>1)

Definition at line 71 of file TSGForOI.h.

Referenced by findSeedsOnLayer(), and produce().

const bool TSGForOI::useStereoLayersInTEC_
private

Switch ON to use Stereo layers instead of using every layer in TEC.

Definition at line 74 of file TSGForOI.h.

Referenced by makeSeedsFromHits().