CMS 3D CMS Logo

GlobalTrackingRegionWithVerticesProducer.h
Go to the documentation of this file.
1 #ifndef RecoTracker_TkTrackingRegions_GlobalTrackingRegionWithVerticesProducer_H
2 #define RecoTracker_TkTrackingRegions_GlobalTrackingRegionWithVerticesProducer_H
3 
17 
19 public:
21  edm::ParameterSet regionPSet = cfg.getParameter<edm::ParameterSet>("RegionPSet");
22 
23  thePtMin = regionPSet.getParameter<double>("ptMin");
24  theOriginRadius = regionPSet.getParameter<double>("originRadius");
25  theNSigmaZ = regionPSet.getParameter<double>("nSigmaZ");
26  token_beamSpot = iC.consumes<reco::BeamSpot>(regionPSet.getParameter<edm::InputTag>("beamSpot"));
27  thePrecise = regionPSet.getParameter<bool>("precise");
28  theUseMS = regionPSet.getParameter<bool>("useMultipleScattering");
29 
30  theSigmaZVertex = regionPSet.getParameter<double>("sigmaZVertex");
31  theFixedError = regionPSet.getParameter<double>("fixedError");
32 
33  theMaxNVertices = regionPSet.getParameter<int>("maxNVertices");
34 
35  theUseFoundVertices = regionPSet.getParameter<bool>("useFoundVertices");
36  theUseFakeVertices = regionPSet.getParameter<bool>("useFakeVertices");
37  theUseFixedError = regionPSet.getParameter<bool>("useFixedError");
38  token_vertex = iC.consumes<reco::VertexCollection>(regionPSet.getParameter<edm::InputTag>("VertexCollection"));
39 
40  //information for Heavy ion region scaling
41  theOriginRScaling = regionPSet.getParameter<bool>("originRScaling4BigEvts");
42  thePtMinScaling = regionPSet.getParameter<bool>("ptMinScaling4BigEvts");
43  theHalfLengthScaling = regionPSet.getParameter<bool>("halfLengthScaling4BigEvts");
44  theMinOriginR = regionPSet.getParameter<double>("minOriginR");
45  theMaxPtMin = regionPSet.getParameter<double>("maxPtMin");
46  theMinHalfLength = regionPSet.getParameter<double>("minHalfLength");
47  theScalingStart = regionPSet.getParameter<double>("scalingStartNPix");
48  theScalingEnd = regionPSet.getParameter<double>("scalingEndNPix");
49  edm::InputTag pixelClustersForScaling = regionPSet.getParameter<edm::InputTag>("pixelClustersForScaling");
52  }
53 
55 
56  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
58 
59  desc.add<bool>("precise", true);
60  desc.add<bool>("useMultipleScattering", false);
61  desc.add<edm::InputTag>("beamSpot", edm::InputTag("offlineBeamSpot"));
62  desc.add<bool>("useFixedError", true);
63  desc.add<double>("originRadius", 0.2);
64  desc.add<double>("sigmaZVertex", 3.0);
65  desc.add<double>("fixedError", 0.2);
66  desc.add<edm::InputTag>("VertexCollection", edm::InputTag("firstStepPrimaryVertices"));
67  desc.add<double>("ptMin", 0.9);
68  desc.add<bool>("useFoundVertices", true);
69  desc.add<bool>("useFakeVertices", false);
70  desc.add<int>("maxNVertices", -1)->setComment("-1 for all vertices");
71  desc.add<double>("nSigmaZ", 4.0);
72  desc.add<edm::InputTag>("pixelClustersForScaling", edm::InputTag("siPixelClusters"));
73  desc.add<bool>("originRScaling4BigEvts", false);
74  desc.add<bool>("ptMinScaling4BigEvts", false);
75  desc.add<bool>("halfLengthScaling4BigEvts", false);
76  desc.add<double>("minOriginR", 0);
77  desc.add<double>("maxPtMin", 1000);
78  desc.add<double>("minHalfLength", 0);
79  desc.add<double>("scalingStartNPix", 0.0);
80  desc.add<double>("scalingEndNPix", 1.0);
81 
82  // Only for backwards-compatibility
84  descRegion.add<edm::ParameterSetDescription>("RegionPSet", desc);
85 
86  descriptions.add("globalTrackingRegionWithVertices", descRegion);
87  }
88 
89  std::vector<std::unique_ptr<TrackingRegion> > regions(const edm::Event& ev, const edm::EventSetup&) const override {
90  std::vector<std::unique_ptr<TrackingRegion> > result;
91 
92  GlobalPoint theOrigin;
94  ev.getByToken(token_beamSpot, bsHandle);
95  double bsSigmaZ;
96  if (bsHandle.isValid()) {
97  const reco::BeamSpot& bs = *bsHandle;
98  bsSigmaZ = theNSigmaZ * bs.sigmaZ();
99  theOrigin = GlobalPoint(bs.x0(), bs.y0(), bs.z0());
100  } else {
101  throw cms::Exception("Seeding") << "ERROR: input beamSpot is not valid in GlobalTrackingRegionWithVertices";
102  }
103 
104  if (theUseFoundVertices) {
106  ev.getByToken(token_vertex, vertexCollection);
107 
110  if (doScaling)
111  ev.getByToken(token_pc, pixelClusterDSV);
112 
113  for (reco::VertexCollection::const_iterator iV = vertexCollection->begin(); iV != vertexCollection->end(); iV++) {
114  if (!iV->isValid())
115  continue;
116  if (iV->isFake() && !(theUseFakeVertices && theUseFixedError))
117  continue;
118  GlobalPoint theOrigin_ = GlobalPoint(iV->x(), iV->y(), iV->z());
119 
120  //scaling origin radius, half length, min pt for high-occupancy HI events to keep timing reasonable
121  if (doScaling) {
122  //Use the unscaled radius unless one of the two conditions below is met
123  double scaledOriginRadius = theOriginRadius;
124  double scaledHalfLength = theFixedError;
125  double scaledPtMin = thePtMin;
126 
127  //calculate nPixels (adapted from TkSeedGenerator/src/ClusterChecker.cc)
128  double nPix = 0;
129 
130  const edmNew::DetSetVector<SiPixelCluster>& input = *pixelClusterDSV;
131  nPix = input.dataSize();
132 
133  //first condition is for high occupancy, second makes sure we won't divide by zero or a negative number
134  if ((nPix > theScalingEnd) || ((theScalingEnd - theScalingStart) <= 0)) {
135  if (theOriginRScaling)
136  scaledOriginRadius = theMinOriginR; // sets parameters to minimum value from PSet
138  scaledHalfLength = theMinHalfLength;
139  if (thePtMinScaling)
140  scaledPtMin = theMaxPtMin;
141  }
142  //second condition - scale radius linearly by Npix in the region from ScalingStart to ScalingEnd
143  else if ((nPix <= theScalingEnd) && (nPix > theScalingStart)) {
144  float slopeFactor = (nPix - theScalingStart) / (theScalingEnd - theScalingStart);
145  if (theOriginRScaling)
146  scaledOriginRadius = theOriginRadius - (theOriginRadius - theMinOriginR) * slopeFactor;
148  scaledHalfLength = theFixedError - (theFixedError - theMinHalfLength) * slopeFactor;
149  if (thePtMinScaling)
150  scaledPtMin = thePtMin - (thePtMin - theMaxPtMin) * slopeFactor;
151  }
152  //if region has 0 size, return 'result' empty, otherwise make a tracking region
153  if (scaledOriginRadius != 0 && scaledHalfLength != 0) {
154  result.push_back(std::make_unique<GlobalTrackingRegion>(
155  scaledPtMin, theOrigin_, scaledOriginRadius, scaledHalfLength, thePrecise, theUseMS));
156  }
157  } //end of region scaling code, pp behavior below
158 
159  else {
160  double theOriginHalfLength_ = (theUseFixedError ? theFixedError : (iV->zError()) * theSigmaZVertex);
161  result.push_back(std::make_unique<GlobalTrackingRegion>(
162  thePtMin, theOrigin_, theOriginRadius, theOriginHalfLength_, thePrecise, theUseMS));
163  if (theMaxNVertices >= 0 && result.size() >= static_cast<unsigned>(theMaxNVertices))
164  break;
165  }
166  }
167 
169  result.push_back(std::make_unique<GlobalTrackingRegion>(
170  thePtMin, theOrigin, theOriginRadius, bsSigmaZ, thePrecise, theUseMS));
171  }
172  } else {
173  result.push_back(
174  std::make_unique<GlobalTrackingRegion>(thePtMin, theOrigin, theOriginRadius, bsSigmaZ, thePrecise, theUseMS));
175  }
176 
177  return result;
178  }
179 
180 private:
181  double thePtMin;
183  double theNSigmaZ;
185 
190  bool theUseMS;
191 
197 
198  //HI-related variables
203  double theMaxPtMin;
208 };
209 
210 #endif
ConfigurationDescriptions.h
GlobalTrackingRegionWithVerticesProducer::theMinOriginR
double theMinOriginR
Definition: GlobalTrackingRegionWithVerticesProducer.h:202
GlobalTrackingRegion.h
GlobalTrackingRegionWithVerticesProducer::theHalfLengthScaling
bool theHalfLengthScaling
Definition: GlobalTrackingRegionWithVerticesProducer.h:201
GlobalTrackingRegionWithVerticesProducer::~GlobalTrackingRegionWithVerticesProducer
~GlobalTrackingRegionWithVerticesProducer() override
Definition: GlobalTrackingRegionWithVerticesProducer.h:54
GlobalTrackingRegionWithVerticesProducer::theUseMS
bool theUseMS
Definition: GlobalTrackingRegionWithVerticesProducer.h:190
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
input
static const std::string input
Definition: EdmProvDump.cc:48
GlobalTrackingRegionWithVerticesProducer::theOriginRadius
double theOriginRadius
Definition: GlobalTrackingRegionWithVerticesProducer.h:182
GlobalTrackingRegionWithVerticesProducer::theSigmaZVertex
double theSigmaZVertex
Definition: GlobalTrackingRegionWithVerticesProducer.h:186
edm::EDGetTokenT< reco::VertexCollection >
GlobalTrackingRegionWithVerticesProducer::theUseFixedError
bool theUseFixedError
Definition: GlobalTrackingRegionWithVerticesProducer.h:194
GlobalTrackingRegionWithVerticesProducer::theMaxNVertices
int theMaxNVertices
Definition: GlobalTrackingRegionWithVerticesProducer.h:188
reco::VertexCollection
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
SiPixelCluster.h
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89287
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
GlobalTrackingRegionWithVerticesProducer::theOriginRScaling
bool theOriginRScaling
Definition: GlobalTrackingRegionWithVerticesProducer.h:199
GlobalTrackingRegionWithVerticesProducer
Definition: GlobalTrackingRegionWithVerticesProducer.h:18
GlobalTrackingRegionWithVerticesProducer::theMaxPtMin
double theMaxPtMin
Definition: GlobalTrackingRegionWithVerticesProducer.h:203
edm::Handle< reco::BeamSpot >
GlobalTrackingRegionWithVerticesProducer::thePtMinScaling
bool thePtMinScaling
Definition: GlobalTrackingRegionWithVerticesProducer.h:200
TrackingRegionProducer.h
cms::cuda::bs
bs
Definition: HistoContainer.h:127
BeamSpot.h
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
GlobalTrackingRegionWithVerticesProducer::theUseFakeVertices
bool theUseFakeVertices
Definition: GlobalTrackingRegionWithVerticesProducer.h:193
reco::BeamSpot
Definition: BeamSpot.h:21
GlobalTrackingRegionWithVerticesProducer::theFixedError
double theFixedError
Definition: GlobalTrackingRegionWithVerticesProducer.h:187
GlobalTrackingRegionWithVerticesProducer::token_beamSpot
edm::EDGetTokenT< reco::BeamSpot > token_beamSpot
Definition: GlobalTrackingRegionWithVerticesProducer.h:196
GlobalPoint
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
Point3DBase< float, GlobalTag >
ParameterSetDescription.h
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
Vertex.h
GlobalTrackingRegionWithVerticesProducer::token_pc
edm::EDGetTokenT< edmNew::DetSetVector< SiPixelCluster > > token_pc
Definition: GlobalTrackingRegionWithVerticesProducer.h:207
edm::ParameterSet
Definition: ParameterSet.h:47
GlobalTrackingRegionWithVerticesProducer::theScalingEnd
double theScalingEnd
Definition: GlobalTrackingRegionWithVerticesProducer.h:206
Event.h
GlobalTrackingRegionWithVerticesProducer::token_vertex
edm::EDGetTokenT< reco::VertexCollection > token_vertex
Definition: GlobalTrackingRegionWithVerticesProducer.h:195
GlobalTrackingRegionWithVerticesProducer::GlobalTrackingRegionWithVerticesProducer
GlobalTrackingRegionWithVerticesProducer(const edm::ParameterSet &cfg, edm::ConsumesCollector &&iC)
Definition: GlobalTrackingRegionWithVerticesProducer.h:20
GlobalTrackingRegionWithVerticesProducer::theBeamSpotTag
edm::InputTag theBeamSpotTag
Definition: GlobalTrackingRegionWithVerticesProducer.h:184
GlobalTrackingRegionWithVerticesProducer::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: GlobalTrackingRegionWithVerticesProducer.h:56
edm::EventSetup
Definition: EventSetup.h:57
InputTag.h
looper.cfg
cfg
Definition: looper.py:297
VertexFwd.h
edmNew::DetSetVector
Definition: DetSetNew.h:13
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
GlobalTrackingRegionWithVerticesProducer::theNSigmaZ
double theNSigmaZ
Definition: GlobalTrackingRegionWithVerticesProducer.h:183
GlobalTrackingRegionWithVerticesProducer::theMinHalfLength
double theMinHalfLength
Definition: GlobalTrackingRegionWithVerticesProducer.h:204
GlobalTrackingRegionWithVerticesProducer::thePrecise
bool thePrecise
Definition: GlobalTrackingRegionWithVerticesProducer.h:189
GlobalTrackingRegionWithVerticesProducer::theUseFoundVertices
bool theUseFoundVertices
Definition: GlobalTrackingRegionWithVerticesProducer.h:192
spclusmultinvestigator_cfi.vertexCollection
vertexCollection
Definition: spclusmultinvestigator_cfi.py:4
ev
bool ev
Definition: Hydjet2Hadronizer.cc:95
Exception
Definition: hltDiff.cc:246
TrackingRegionProducer
Definition: TrackingRegionProducer.h:12
GlobalTrackingRegionWithVerticesProducer::thePtMin
double thePtMin
Definition: GlobalTrackingRegionWithVerticesProducer.h:181
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
GlobalTrackingRegionWithVerticesProducer::regions
std::vector< std::unique_ptr< TrackingRegion > > regions(const edm::Event &ev, const edm::EventSetup &) const override
Definition: GlobalTrackingRegionWithVerticesProducer.h:89
mps_fire.result
result
Definition: mps_fire.py:311
ConsumesCollector.h
ParameterSet.h
HLT_FULL_cff.pixelClustersForScaling
pixelClustersForScaling
Definition: HLT_FULL_cff.py:112914
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
DetSetVectorNew.h
edm::InputTag
Definition: InputTag.h:15
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
GlobalTrackingRegionWithVerticesProducer::theScalingStart
double theScalingStart
Definition: GlobalTrackingRegionWithVerticesProducer.h:205