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);
201 ca.createAndConnectCells(hitDoublets, region,
caThetaCut,
204 ca.evolve(numberOfHitsInNtuplet);
206 ca.findNtuplets(foundQuadruplets, numberOfHitsInNtuplet);
208 auto & allCells = ca.getAllCells();
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());
const bool useBendingCorrection
GlobalPoint const & origin() const
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)
T curvature(T InversePt, const edm::EventSetup &iSetup)
Abs< T >::type abs(const T &t)
const float extraHitRPhitolerance
const bool fitFastCircleChi2Cut
const QuantityDependsPt maxChi2
T rerr(const GlobalPoint &aPoint) const
Square< F >::type sqr(const F &f)
QuantityDependsPtEval evaluator(const edm::EventSetup &es) const
*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