1 #include <unordered_map> 40 caThetaCut( cfg.getParameter<double>(
"CAThetaCut")),
41 caPhiCut(cfg.getParameter<double>(
"CAPhiCut")),
42 caHardPtCut(cfg.getParameter<double>(
"CAHardPtCut"))
46 if (comparitorName !=
"none")
55 desc.
add<
double>(
"extraHitRPhitolerance", 0.06);
56 desc.
add<
bool>(
"useBendingCorrection",
false);
57 desc.
add<
double>(
"CAThetaCut", 0.00125);
58 desc.
add<
double>(
"CAPhiCut", 0.1);
59 desc.
add<
double>(
"CAHardPtCut", 0);
62 descMaxChi2.
add<
double>(
"pt1", 0.8);
63 descMaxChi2.add<
double>(
"pt2", 2);
64 descMaxChi2.add<
double>(
"value1", 50);
65 descMaxChi2.add<
double>(
"value2", 8);
66 descMaxChi2.add<
bool>(
"enabled",
true);
71 descComparitor.setAllowAnything();
81 for (
unsigned int i = 0;
i < layers.
size();
i++)
83 for (
unsigned int j = 0; j < 3; ++j)
120 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 < 3; ++j)
133 layers[
i][j].name());
158 return pair.innerLayerIndex() == layers[
i][j - 1].index() && pair.outerLayerIndex() == layers[
i][j].index();
160 if(
found != regionLayerPairs.
end()) {
161 hitDoublets.emplace_back(&(
found->doublets()));
165 innerVertex->theOuterLayers.push_back(
vertexIndex);
168 innerVertex->theOuterLayerPairs.push_back(
181 std::vector<OrderedHitSeeds>&
result,
186 std::vector<const HitDoublets *> hitDoublets;
188 std::vector<CACell::CAntuplet> foundTriplets;
191 for(
const auto& regionLayerPairs: regionDoublets) {
195 foundTriplets.clear();
198 createGraphStructure(layers, g);
201 clearGraphStructure(layers, g);
203 fillGraph(layers, regionLayerPairs, g, hitDoublets);
213 std::array<float, 3> bc_r;
214 std::array<float, 3> bc_z;
215 std::array<float, 3> bc_errZ2;
216 std::array<GlobalPoint, 3> gps;
217 std::array<GlobalError, 3> ges;
218 std::array<bool, 3> barrels;
220 unsigned int numberOfFoundTriplets = foundTriplets.size();
221 for (
unsigned int tripletId = 0; tripletId < numberOfFoundTriplets;
225 OrderedHitTriplet tmpTriplet(allCells[foundTriplets[tripletId][0]].getInnerHit(),
226 allCells[foundTriplets[tripletId][0]].getOuterHit(),
227 allCells[foundTriplets[tripletId][1]].getOuterHit());
233 for (
unsigned int i = 0;
i < 2; ++
i)
235 auto const& ahit = allCells[foundTriplets[tripletId][
i]].getInnerHit();
236 gps[
i] = ahit->globalPosition();
237 ges[
i] = ahit->globalPositionError();
238 barrels[
i] =
isBarrel(ahit->geographicalId().subdetId());
241 auto const& ahit = allCells[foundTriplets[tripletId][1]].getOuterHit();
242 gps[2] = ahit->globalPosition();
243 ges[2] = ahit->globalPositionError();
244 barrels[2] =
isBarrel(ahit->geographicalId().subdetId());
251 const float abscurv =
std::abs(curvature);
252 const float thisMaxChi2 = maxChi2Eval.
value(abscurv);
253 float chi2 = std::numeric_limits<float>::quiet_NaN();
259 const float simpleCot = (gps.back().z() - gps.front().z())
260 / (gps.back().perp() - gps.front().perp());
262 for (
int i = 0;
i < 3; ++
i)
271 bc_z[
i] = point.
z() - region.
origin().
z();
275 error.
rerr(point) *
sqr(simpleCot);
278 chi2 = rzLine.
chi2();
282 RZLine rzLine(gps, ges, barrels);
283 chi2 = rzLine.
chi2();
300 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
def create(alignables, pedeDump, additionalData, outputFile, config)
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