35 caThetaCut(cfg.getParameter<double>(
"CAThetaCut")),
36 caPhiCut(cfg.getParameter<double>(
"CAPhiCut")),
37 caHardPtCut(cfg.getParameter<double>(
"CAHardPtCut"))
41 if (comparitorName !=
"none")
48 desc.
add<
double>(
"extraHitRPhitolerance", 0.1);
49 desc.
add<
bool>(
"fitFastCircle",
false);
50 desc.
add<
bool>(
"fitFastCircleChi2Cut",
false);
51 desc.
add<
bool>(
"useBendingCorrection",
false);
52 desc.
add<
double>(
"CAThetaCut", 0.00125);
53 desc.
add<
double>(
"CAPhiCut", 10);
54 desc.
add<
double>(
"CAHardPtCut", 0);
55 desc.
addOptional<
bool>(
"CAOnlyOneLastHitPerLayerFilter")->setComment(
"Deprecated and has no effect. To be fully removed later when the parameter is no longer used in HLT configurations.");
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();
75 for (
unsigned int i = 0;
i < layers.
size();
i++)
77 for (
unsigned int j = 0; j < 4; ++j)
112 for (
auto &
v : g.
theLayers[
i].isOuterHitOfCell)
v.clear();
117 CAGraph& g, std::vector<const HitDoublets *>& hitDoublets) {
118 for (
unsigned int i = 0;
i < layers.
size();
i++)
120 for (
unsigned int j = 0; j < 4; ++j)
124 layers[
i][j].name());
148 return pair.innerLayerIndex() == layers[
i][j - 1].index() && pair.outerLayerIndex() == layers[
i][j].index();
150 if(
found != regionLayerPairs.
end()) {
151 hitDoublets.emplace_back(&(
found->doublets()));
155 innerVertex->theOuterLayers.push_back(
vertexIndex);
158 innerVertex->theOuterLayerPairs.push_back(
172 std::vector<OrderedHitSeeds>&
result,
177 std::vector<const HitDoublets *> hitDoublets;
179 const int numberOfHitsInNtuplet = 4;
180 std::vector<CACell::CAntuplet> foundQuadruplets;
185 for(
const auto& regionLayerPairs: regionDoublets) {
189 foundQuadruplets.clear();
191 createGraphStructure(layers, g);
194 clearGraphStructure(layers, g);
197 fillGraph(layers, regionLayerPairs, g, hitDoublets);
204 ca.
evolve(numberOfHitsInNtuplet);
206 ca.
findNtuplets(foundQuadruplets, numberOfHitsInNtuplet);
213 std::array<float, 4> bc_r;
214 std::array<float, 4> bc_z;
215 std::array<float, 4> bc_errZ2;
216 std::array<GlobalPoint, 4> gps;
217 std::array<GlobalError, 4> ges;
218 std::array<bool, 4> barrels;
220 unsigned int numberOfFoundQuadruplets = foundQuadruplets.size();
223 for (
unsigned int quadId = 0; quadId < numberOfFoundQuadruplets; ++quadId)
230 for(
unsigned int i = 0;
i< 3; ++
i)
232 auto const& ahit = allCells[foundQuadruplets[quadId][
i]].getInnerHit();
233 gps[
i] = ahit->globalPosition();
234 ges[
i] = ahit->globalPositionError();
235 barrels[
i] =
isBarrel(ahit->geographicalId().subdetId());
238 auto const& ahit = allCells[foundQuadruplets[quadId][2]].getOuterHit();
239 gps[3] = ahit->globalPosition();
240 ges[3] = ahit->globalPositionError();
241 barrels[3] =
isBarrel(ahit->geographicalId().subdetId());
248 const float abscurv =
std::abs(curvature);
249 const float thisMaxChi2 = maxChi2Eval.
value(abscurv);
252 SeedingHitSet tmpTriplet(allCells[foundQuadruplets[quadId][0]].getInnerHit(),
253 allCells[foundQuadruplets[quadId][2]].getInnerHit(),
254 allCells[foundQuadruplets[quadId][2]].getOuterHit());
263 float chi2 = std::numeric_limits<float>::quiet_NaN();
268 const float simpleCot = ( gps.back().z() - gps.front().z() ) / (gps.back().perp() - gps.front().perp() );
270 for (
int i=0;
i < 4; ++
i)
276 bc_z[
i] = point.
z() - region.
origin().
z();
277 bc_errZ2[
i] = (barrels[
i]) ? error.
czz() : error.
rerr(point)*
sqr(simpleCot);
280 chi2 = rzLine.
chi2();
284 RZLine rzLine(gps, ges, barrels);
285 chi2 = rzLine.
chi2();
300 result[
index].emplace_back(allCells[foundQuadruplets[quadId][0]].getInnerHit(),
301 allCells[foundQuadruplets[quadId][1]].getInnerHit(),
302 allCells[foundQuadruplets[quadId][2]].getInnerHit(),
303 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
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
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)
bool isBarrel(GeomDetEnumerators::SubDetector m)
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.
T get(const Candidate &c)
*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)