29 "extraHitRPhitolerance")),
34 caThetaCut(cfg.getParameter<double>(
"CAThetaCut")),
35 caPhiCut(cfg.getParameter<double>(
"CAPhiCut")),
36 caHardPtCut(cfg.getParameter<double>(
"CAHardPtCut")) {
39 if (comparitorName !=
"none") {
45 desc.
add<
double>(
"extraHitRPhitolerance", 0.1);
46 desc.
add<
bool>(
"fitFastCircle",
false);
47 desc.
add<
bool>(
"fitFastCircleChi2Cut",
false);
48 desc.
add<
bool>(
"useBendingCorrection",
false);
49 desc.
add<
double>(
"CAThetaCut", 0.00125);
50 desc.
add<
double>(
"CAPhiCut", 10);
51 desc.
add<
double>(
"CAHardPtCut", 0);
52 desc.
addOptional<
bool>(
"CAOnlyOneLastHitPerLayerFilter")
54 "Deprecated and has no effect. To be fully removed later when the parameter is no longer used in HLT " 57 descMaxChi2.
add<
double>(
"pt1", 0.2);
58 descMaxChi2.
add<
double>(
"pt2", 1.5);
59 descMaxChi2.
add<
double>(
"value1", 500);
60 descMaxChi2.
add<
double>(
"value2", 50);
61 descMaxChi2.
add<
bool>(
"enabled",
true);
66 descComparitor.setAllowAnything();
76 for (
unsigned int i = 0;
i < layers.
size();
i++) {
77 for (
unsigned int j = 0;
j < 4; ++
j) {
108 std::vector<const HitDoublets*>& hitDoublets) {
109 for (
unsigned int i = 0;
i < layers.
size();
i++) {
110 for (
unsigned int j = 0;
j < 4; ++
j) {
125 auto found = std::find_if(regionLayerPairs.
begin(),
126 regionLayerPairs.
end(),
128 return pair.innerLayerIndex() == layers[
i][
j - 1].index() &&
129 pair.outerLayerIndex() == layers[
i][
j].index();
131 if (
found != regionLayerPairs.
end()) {
132 hitDoublets.emplace_back(&(
found->doublets()));
135 innerVertex->theOuterLayers.push_back(
vertexIndex);
137 innerVertex->theOuterLayerPairs.push_back(g.
theLayerPairs.size() - 1);
147 std::vector<OrderedHitSeeds>&
result,
152 std::vector<const HitDoublets*> hitDoublets;
154 const int numberOfHitsInNtuplet = 4;
155 std::vector<CACell::CAntuplet> foundQuadruplets;
158 for (
const auto& regionLayerPairs : regionDoublets) {
161 foundQuadruplets.clear();
163 createGraphStructure(layers, g);
165 clearGraphStructure(layers, g);
168 fillGraph(layers, regionLayerPairs, g, hitDoublets);
174 ca.
evolve(numberOfHitsInNtuplet);
176 ca.
findNtuplets(foundQuadruplets, numberOfHitsInNtuplet);
183 std::array<float, 4> bc_r;
184 std::array<float, 4> bc_z;
185 std::array<float, 4> bc_errZ2;
186 std::array<GlobalPoint, 4> gps;
187 std::array<GlobalError, 4> ges;
188 std::array<bool, 4> barrels;
190 unsigned int numberOfFoundQuadruplets = foundQuadruplets.size();
193 for (
unsigned int quadId = 0; quadId < numberOfFoundQuadruplets; ++quadId) {
195 for (
unsigned int i = 0;
i < 3; ++
i) {
196 auto const& ahit = allCells[foundQuadruplets[quadId][
i]].getInnerHit();
197 gps[
i] = ahit->globalPosition();
198 ges[
i] = ahit->globalPositionError();
199 barrels[
i] =
isBarrel(ahit->geographicalId().subdetId());
202 auto const& ahit = allCells[foundQuadruplets[quadId][2]].getOuterHit();
203 gps[3] = ahit->globalPosition();
204 ges[3] = ahit->globalPositionError();
205 barrels[3] =
isBarrel(ahit->geographicalId().subdetId());
212 const float abscurv =
std::abs(curvature);
213 const float thisMaxChi2 = maxChi2Eval.
value(abscurv);
215 SeedingHitSet tmpTriplet(allCells[foundQuadruplets[quadId][0]].getInnerHit(),
216 allCells[foundQuadruplets[quadId][2]].getInnerHit(),
217 allCells[foundQuadruplets[quadId][2]].getOuterHit());
224 float chi2 = std::numeric_limits<float>::quiet_NaN();
228 const float simpleCot = (gps.back().z() - gps.front().z()) / (gps.back().perp() - gps.front().perp());
230 for (
int i = 0;
i < 4; ++
i) {
235 bc_z[
i] = point.
z() - region.
origin().
z();
236 bc_errZ2[
i] = (barrels[
i]) ? error.
czz() : error.
rerr(point) *
sqr(simpleCot);
239 chi2 = rzLine.
chi2();
241 RZLine rzLine(gps, ges, barrels);
242 chi2 = rzLine.
chi2();
257 result[
index].emplace_back(allCells[foundQuadruplets[quadId][0]].getInnerHit(),
258 allCells[foundQuadruplets[quadId][1]].getInnerHit(),
259 allCells[foundQuadruplets[quadId][2]].getInnerHit(),
260 allCells[foundQuadruplets[quadId][2]].getOuterHit());
T getParameter(std::string const &) const
void findNtuplets(std::vector< CACell::CAntuplet > &, const unsigned int)
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
float value(float curvature) const
const bool useBendingCorrection
const_iterator begin() const
void createAndConnectCells(const std::vector< const HitDoublets * > &, const TrackingRegion &, const float, const float, const float)
GlobalPoint const & origin() const
constexpr bool isNotFinite(T x)
const_iterator end() const
std::vector< CACell > & getAllCells()
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
std::unique_ptr< SeedComparitor > theComparitor
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
T inversePt(T curvature, const edm::EventSetup &iSetup)
static unsigned int minLayers
T curvature(T InversePt, const edm::EventSetup &iSetup)
std::vector< CALayer > theLayers
void initEvent(const edm::Event &ev, const edm::EventSetup &es)
Abs< T >::type abs(const T &t)
const float extraHitRPhitolerance
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::vector< CALayerPair > theLayerPairs
const bool fitFastCircleChi2Cut
CAHitQuadrupletGenerator(const edm::ParameterSet &cfg, edm::ConsumesCollector &&iC)
const QuantityDependsPt maxChi2
T rerr(const GlobalPoint &aPoint) const
Square< F >::type sqr(const F &f)
std::vector< int > theRootLayers
void hitNtuplets(const IntermediateHitDoublets ®ionDoublets, std::vector< OrderedHitSeeds > &result, const edm::EventSetup &es, const SeedingLayerSetsHits &layers)
static void fillDescriptions(edm::ParameterSetDescription &desc)
QuantityDependsPtEval evaluator(const edm::EventSetup &es) const
unsigned short size() const
Get the number of SeedingLayerSets.
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
void evolve(const unsigned int)