1 #include <unordered_map> 35 caThetaCut( cfg.getParameter<double>(
"CAThetaCut")),
36 caPhiCut(cfg.getParameter<double>(
"CAPhiCut")),
37 caHardPtCut(cfg.getParameter<double>(
"CAHardPtCut"))
41 if (comparitorName !=
"none")
49 desc.
add<
double>(
"extraHitRPhitolerance", 0.06);
50 desc.
add<
bool>(
"useBendingCorrection",
false);
51 desc.
add<
double>(
"CAThetaCut", 0.00125);
52 desc.
add<
double>(
"CAPhiCut", 0.1);
53 desc.
add<
double>(
"CAHardPtCut", 0);
56 descMaxChi2.
add<
double>(
"pt1", 0.8);
57 descMaxChi2.add<
double>(
"pt2", 2);
58 descMaxChi2.add<
double>(
"value1", 50);
59 descMaxChi2.add<
double>(
"value2", 8);
60 descMaxChi2.add<
bool>(
"enabled",
true);
65 descComparitor.setAllowAnything();
75 for (
unsigned int i = 0;
i < layers.
size();
i++)
77 for (
unsigned int j = 0; j < 3; ++j)
114 for (
auto &
v : g.
theLayers[
i].isOuterHitOfCell)
v.clear();
120 CAGraph& g, std::vector<const HitDoublets *>& hitDoublets) {
121 for (
unsigned int i = 0;
i < layers.
size();
i++)
123 for (
unsigned int j = 0; j < 3; ++j)
127 layers[
i][j].name());
152 return pair.innerLayerIndex() == layers[
i][j - 1].index() && pair.outerLayerIndex() == layers[
i][j].index();
154 if(
found != regionLayerPairs.
end()) {
155 hitDoublets.emplace_back(&(
found->doublets()));
159 innerVertex->theOuterLayers.push_back(
vertexIndex);
162 innerVertex->theOuterLayerPairs.push_back(
175 std::vector<OrderedHitSeeds>&
result,
180 std::vector<const HitDoublets *> hitDoublets;
182 std::vector<CACell::CAntuplet> foundTriplets;
185 for(
const auto& regionLayerPairs: regionDoublets) {
189 foundTriplets.clear();
192 createGraphStructure(layers, g);
195 clearGraphStructure(layers, g);
197 fillGraph(layers, regionLayerPairs, g, hitDoublets);
207 std::array<float, 3> bc_r;
208 std::array<float, 3> bc_z;
209 std::array<float, 3> bc_errZ2;
210 std::array<GlobalPoint, 3> gps;
211 std::array<GlobalError, 3> ges;
212 std::array<bool, 3> barrels;
214 unsigned int numberOfFoundTriplets = foundTriplets.size();
215 for (
unsigned int tripletId = 0; tripletId < numberOfFoundTriplets;
219 OrderedHitTriplet tmpTriplet(allCells[foundTriplets[tripletId][0]].getInnerHit(),
220 allCells[foundTriplets[tripletId][0]].getOuterHit(),
221 allCells[foundTriplets[tripletId][1]].getOuterHit());
227 for (
unsigned int i = 0;
i < 2; ++
i)
229 auto const& ahit = allCells[foundTriplets[tripletId][
i]].getInnerHit();
230 gps[
i] = ahit->globalPosition();
231 ges[
i] = ahit->globalPositionError();
232 barrels[
i] =
isBarrel(ahit->geographicalId().subdetId());
235 auto const& ahit = allCells[foundTriplets[tripletId][1]].getOuterHit();
236 gps[2] = ahit->globalPosition();
237 ges[2] = ahit->globalPositionError();
238 barrels[2] =
isBarrel(ahit->geographicalId().subdetId());
245 const float abscurv =
std::abs(curvature);
246 const float thisMaxChi2 = maxChi2Eval.
value(abscurv);
247 float chi2 = std::numeric_limits<float>::quiet_NaN();
253 const float simpleCot = (gps.back().z() - gps.front().z())
254 / (gps.back().perp() - gps.front().perp());
256 for (
int i = 0;
i < 3; ++
i)
265 bc_z[
i] = point.
z() - region.
origin().
z();
269 error.
rerr(point) *
sqr(simpleCot);
272 chi2 = rzLine.
chi2();
276 RZLine rzLine(gps, ges, barrels);
277 chi2 = rzLine.
chi2();
294 result[
index].emplace_back(tmpTriplet);
T getParameter(std::string const &) const
const QuantityDependsPt maxChi2
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
const_iterator begin() const
GlobalPoint const & origin() const
constexpr bool isNotFinite(T x)
bool isBarrel(GeomDetEnumerators::SubDetector m)
const_iterator end() const
std::vector< CACell > & getAllCells()
void hitNtuplets(const IntermediateHitDoublets ®ionDoublets, std::vector< OrderedHitSeeds > &result, const edm::EventSetup &es, const SeedingLayerSetsHits &layers)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
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
const bool useBendingCorrection
CAHitTripletGenerator(const edm::ParameterSet &cfg, edm::ConsumesCollector &&iC)
Range curvature(double transverseIP) const
T inversePt(T curvature, const edm::EventSetup &iSetup)
QuantityDependsPtEval evaluator(const edm::EventSetup &es) const
T curvature(T InversePt, const edm::EventSetup &iSetup)
std::vector< CALayer > theLayers
Abs< T >::type abs(const T &t)
void initEvent(const edm::Event &ev, const edm::EventSetup &es)
float value(float curvature) const
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::vector< CALayerPair > theLayerPairs
T rerr(const GlobalPoint &aPoint) const
Square< F >::type sqr(const F &f)
std::vector< int > theRootLayers
static void fillDescriptions(edm::ParameterSetDescription &desc)
const float extraHitRPhitolerance
void findTriplets(const std::vector< const HitDoublets * > &hitDoublets, std::vector< CACell::CAntuplet > &foundTriplets, const TrackingRegion ®ion, const float thetaCut, const float phiCut, const float hardPtCut)
std::unique_ptr< SeedComparitor > theComparitor
unsigned short size() const
Get the number of SeedingLayerSets.
static unsigned int minLayers
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