44 caThetaCut(cfg.getParameter<double>(
"CAThetaCut")),
45 caPhiCut(cfg.getParameter<double>(
"CAPhiCut")),
46 caHardPtCut(cfg.getParameter<double>(
"CAHardPtCut"))
50 if (comparitorName !=
"none")
57 desc.
add<
double>(
"extraHitRPhitolerance", 0.1);
58 desc.
add<
bool>(
"fitFastCircle",
false);
59 desc.
add<
bool>(
"fitFastCircleChi2Cut",
false);
60 desc.
add<
bool>(
"useBendingCorrection",
false);
61 desc.
add<
double>(
"CAThetaCut", 0.00125);
62 desc.
add<
double>(
"CAPhiCut", 10);
63 desc.
add<
double>(
"CAHardPtCut", 0);
64 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.");
66 descMaxChi2.
add<
double>(
"pt1", 0.2);
67 descMaxChi2.
add<
double>(
"pt2", 1.5);
68 descMaxChi2.
add<
double>(
"value1", 500);
69 descMaxChi2.
add<
double>(
"value2", 50);
70 descMaxChi2.
add<
bool>(
"enabled",
true);
75 descComparitor.setAllowAnything();
84 for (
unsigned int i = 0;
i < layers.
size();
i++)
86 for (
unsigned int j = 0; j < 4; ++j)
121 for (
auto &
v : g.
theLayers[
i].isOuterHitOfCell)
v.clear();
126 CAGraph& g, std::vector<const HitDoublets *>& hitDoublets) {
127 for (
unsigned int i = 0;
i < layers.
size();
i++)
129 for (
unsigned int j = 0; j < 4; ++j)
133 layers[
i][j].name());
157 return pair.innerLayerIndex() == layers[
i][j - 1].index() && pair.outerLayerIndex() == layers[
i][j].index();
159 if(
found != regionLayerPairs.
end()) {
160 hitDoublets.emplace_back(&(
found->doublets()));
164 innerVertex->theOuterLayers.push_back(
vertexIndex);
167 innerVertex->theOuterLayerPairs.push_back(
181 std::vector<OrderedHitSeeds>&
result,
186 std::vector<const HitDoublets *> hitDoublets;
188 const int numberOfHitsInNtuplet = 4;
189 std::vector<CACell::CAntuplet> foundQuadruplets;
194 for(
const auto& regionLayerPairs: regionDoublets) {
198 foundQuadruplets.clear();
200 createGraphStructure(layers, g);
203 clearGraphStructure(layers, g);
206 fillGraph(layers, regionLayerPairs, g, hitDoublets);
213 ca.
evolve(numberOfHitsInNtuplet);
215 ca.
findNtuplets(foundQuadruplets, numberOfHitsInNtuplet);
222 std::array<float, 4> bc_r;
223 std::array<float, 4> bc_z;
224 std::array<float, 4> bc_errZ2;
225 std::array<GlobalPoint, 4> gps;
226 std::array<GlobalError, 4> ges;
227 std::array<bool, 4> barrels;
229 unsigned int numberOfFoundQuadruplets = foundQuadruplets.size();
232 for (
unsigned int quadId = 0; quadId < numberOfFoundQuadruplets; ++quadId)
239 for(
unsigned int i = 0;
i< 3; ++
i)
241 auto const& ahit = allCells[foundQuadruplets[quadId][
i]].getInnerHit();
242 gps[
i] = ahit->globalPosition();
243 ges[
i] = ahit->globalPositionError();
244 barrels[
i] =
isBarrel(ahit->geographicalId().subdetId());
247 auto const& ahit = allCells[foundQuadruplets[quadId][2]].getOuterHit();
248 gps[3] = ahit->globalPosition();
249 ges[3] = ahit->globalPositionError();
250 barrels[3] =
isBarrel(ahit->geographicalId().subdetId());
257 const float abscurv =
std::abs(curvature);
258 const float thisMaxChi2 = maxChi2Eval.
value(abscurv);
261 SeedingHitSet tmpTriplet(allCells[foundQuadruplets[quadId][0]].getInnerHit(),
262 allCells[foundQuadruplets[quadId][2]].getInnerHit(),
263 allCells[foundQuadruplets[quadId][2]].getOuterHit());
272 float chi2 = std::numeric_limits<float>::quiet_NaN();
277 const float simpleCot = ( gps.back().z() - gps.front().z() ) / (gps.back().perp() - gps.front().perp() );
279 for (
int i=0;
i < 4; ++
i)
285 bc_z[
i] = point.
z() - region.
origin().
z();
286 bc_errZ2[
i] = (barrels[
i]) ? error.
czz() : error.
rerr(point)*
sqr(simpleCot);
289 chi2 = rzLine.
chi2();
293 RZLine rzLine(gps, ges, barrels);
294 chi2 = rzLine.
chi2();
309 result[
index].emplace_back(allCells[foundQuadruplets[quadId][0]].getInnerHit(),
310 allCells[foundQuadruplets[quadId][1]].getInnerHit(),
311 allCells[foundQuadruplets[quadId][2]].getInnerHit(),
312 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)