46 caThetaCut(cfg.getParameter<double>(
"CAThetaCut")),
47 caPhiCut(cfg.getParameter<double>(
"CAPhiCut")),
48 caHardPtCut(cfg.getParameter<double>(
"CAHardPtCut"))
52 if (comparitorName !=
"none")
59 desc.
add<
double>(
"extraHitRPhitolerance", 0.1);
60 desc.
add<
bool>(
"fitFastCircle",
false);
61 desc.
add<
bool>(
"fitFastCircleChi2Cut",
false);
62 desc.
add<
bool>(
"useBendingCorrection",
false);
63 desc.
add<
double>(
"CAThetaCut", 0.00125);
64 desc.
add<
double>(
"CAPhiCut", 10);
65 desc.
add<
double>(
"CAHardPtCut", 0);
66 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.");
68 descMaxChi2.
add<
double>(
"pt1", 0.2);
69 descMaxChi2.
add<
double>(
"pt2", 1.5);
70 descMaxChi2.
add<
double>(
"value1", 500);
71 descMaxChi2.
add<
double>(
"value2", 50);
72 descMaxChi2.
add<
bool>(
"enabled",
true);
77 descComparitor.setAllowAnything();
86 for (
unsigned int i = 0;
i < layers.
size();
i++)
88 for (
unsigned int j = 0; j < 4; ++j)
123 for (
auto &
v : g.
theLayers[
i].isOuterHitOfCell)
v.clear();
128 CAGraph& g, std::vector<const HitDoublets *>& hitDoublets) {
129 for (
unsigned int i = 0;
i < layers.
size();
i++)
131 for (
unsigned int j = 0; j < 4; ++j)
135 layers[
i][j].name());
159 return pair.innerLayerIndex() == layers[
i][j - 1].index() && pair.outerLayerIndex() == layers[
i][j].index();
161 if(
found != regionLayerPairs.
end()) {
162 hitDoublets.emplace_back(&(
found->doublets()));
166 innerVertex->theOuterLayers.push_back(
vertexIndex);
169 innerVertex->theOuterLayerPairs.push_back(
183 std::vector<OrderedHitSeeds>&
result,
188 std::vector<const HitDoublets *> hitDoublets;
190 const int numberOfHitsInNtuplet = 4;
191 std::vector<CACell::CAntuplet> foundQuadruplets;
196 for(
const auto& regionLayerPairs: regionDoublets) {
200 foundQuadruplets.clear();
202 createGraphStructure(layers, g);
205 clearGraphStructure(layers, g);
208 fillGraph(layers, regionLayerPairs, g, hitDoublets);
215 ca.
evolve(numberOfHitsInNtuplet);
217 ca.
findNtuplets(foundQuadruplets, numberOfHitsInNtuplet);
224 std::array<float, 4> bc_r;
225 std::array<float, 4> bc_z;
226 std::array<float, 4> bc_errZ2;
227 std::array<GlobalPoint, 4> gps;
228 std::array<GlobalError, 4> ges;
229 std::array<bool, 4> barrels;
231 unsigned int numberOfFoundQuadruplets = foundQuadruplets.size();
234 for (
unsigned int quadId = 0; quadId < numberOfFoundQuadruplets; ++quadId)
241 for(
unsigned int i = 0;
i< 3; ++
i)
243 auto const& ahit = allCells[foundQuadruplets[quadId][
i]].getInnerHit();
244 gps[
i] = ahit->globalPosition();
245 ges[
i] = ahit->globalPositionError();
246 barrels[
i] =
isBarrel(ahit->geographicalId().subdetId());
249 auto const& ahit = allCells[foundQuadruplets[quadId][2]].getOuterHit();
250 gps[3] = ahit->globalPosition();
251 ges[3] = ahit->globalPositionError();
252 barrels[3] =
isBarrel(ahit->geographicalId().subdetId());
259 const float abscurv =
std::abs(curvature);
260 const float thisMaxChi2 = maxChi2Eval.
value(abscurv);
263 SeedingHitSet tmpTriplet(allCells[foundQuadruplets[quadId][0]].getInnerHit(),
264 allCells[foundQuadruplets[quadId][2]].getInnerHit(),
265 allCells[foundQuadruplets[quadId][2]].getOuterHit());
274 float chi2 = std::numeric_limits<float>::quiet_NaN();
279 const float simpleCot = ( gps.back().z() - gps.front().z() ) / (gps.back().perp() - gps.front().perp() );
281 for (
int i=0;
i < 4; ++
i)
287 bc_z[
i] = point.
z() - region.
origin().
z();
288 bc_errZ2[
i] = (barrels[
i]) ? error.
czz() : error.
rerr(point)*
sqr(simpleCot);
291 chi2 = rzLine.
chi2();
295 RZLine rzLine(gps, ges, barrels);
296 chi2 = rzLine.
chi2();
311 result[
index].emplace_back(allCells[foundQuadruplets[quadId][0]].getInnerHit(),
312 allCells[foundQuadruplets[quadId][1]].getInnerHit(),
313 allCells[foundQuadruplets[quadId][2]].getInnerHit(),
314 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
def create(alignables, pedeDump, additionalData, outputFile, config)
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)