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")
50 desc.
add<
double>(
"extraHitRPhitolerance", 0.06);
51 desc.
add<
bool>(
"useBendingCorrection",
false);
52 desc.
add<
double>(
"CAThetaCut", 0.00125);
53 desc.
add<
double>(
"CAPhiCut", 0.1);
54 desc.
add<
double>(
"CAHardPtCut", 0);
57 descMaxChi2.
add<
double>(
"pt1", 0.8);
58 descMaxChi2.add<
double>(
"pt2", 2);
59 descMaxChi2.add<
double>(
"value1", 50);
60 descMaxChi2.add<
double>(
"value2", 8);
61 descMaxChi2.add<
bool>(
"enabled",
true);
66 descComparitor.setAllowAnything();
76 for (
unsigned int i = 0;
i < layers.
size();
i++)
78 for (
unsigned int j = 0; j < 3; ++j)
115 for (
auto &
v : g.
theLayers[
i].isOuterHitOfCell)
v.clear();
121 CAGraph& g, std::vector<const HitDoublets *>& hitDoublets) {
122 for (
unsigned int i = 0;
i < layers.
size();
i++)
124 for (
unsigned int j = 0; j < 3; ++j)
128 layers[
i][j].name());
153 return pair.innerLayerIndex() == layers[
i][j - 1].index() && pair.outerLayerIndex() == layers[
i][j].index();
155 if(
found != regionLayerPairs.
end()) {
156 hitDoublets.emplace_back(&(
found->doublets()));
160 innerVertex->theOuterLayers.push_back(
vertexIndex);
163 innerVertex->theOuterLayerPairs.push_back(
176 std::vector<OrderedHitSeeds>&
result,
181 std::vector<const HitDoublets *> hitDoublets;
183 std::vector<CACell::CAntuplet> foundTriplets;
186 for(
const auto& regionLayerPairs: regionDoublets) {
190 foundTriplets.clear();
193 createGraphStructure(layers, g);
196 clearGraphStructure(layers, g);
198 fillGraph(layers, regionLayerPairs, g, hitDoublets);
208 std::array<float, 3> bc_r;
209 std::array<float, 3> bc_z;
210 std::array<float, 3> bc_errZ2;
211 std::array<GlobalPoint, 3> gps;
212 std::array<GlobalError, 3> ges;
213 std::array<bool, 3> barrels;
215 unsigned int numberOfFoundTriplets = foundTriplets.size();
216 for (
unsigned int tripletId = 0; tripletId < numberOfFoundTriplets;
220 OrderedHitTriplet tmpTriplet(allCells[foundTriplets[tripletId][0]].getInnerHit(),
221 allCells[foundTriplets[tripletId][0]].getOuterHit(),
222 allCells[foundTriplets[tripletId][1]].getOuterHit());
228 for (
unsigned int i = 0;
i < 2; ++
i)
230 auto const& ahit = allCells[foundTriplets[tripletId][
i]].getInnerHit();
231 gps[
i] = ahit->globalPosition();
232 ges[
i] = ahit->globalPositionError();
233 barrels[
i] =
isBarrel(ahit->geographicalId().subdetId());
236 auto const& ahit = allCells[foundTriplets[tripletId][1]].getOuterHit();
237 gps[2] = ahit->globalPosition();
238 ges[2] = ahit->globalPositionError();
239 barrels[2] =
isBarrel(ahit->geographicalId().subdetId());
246 const float abscurv =
std::abs(curvature);
247 const float thisMaxChi2 = maxChi2Eval.
value(abscurv);
248 float chi2 = std::numeric_limits<float>::quiet_NaN();
254 const float simpleCot = (gps.back().z() - gps.front().z())
255 / (gps.back().perp() - gps.front().perp());
257 for (
int i = 0;
i < 3; ++
i)
266 bc_z[
i] = point.
z() - region.
origin().
z();
270 error.
rerr(point) *
sqr(simpleCot);
273 chi2 = rzLine.
chi2();
277 RZLine rzLine(gps, ges, barrels);
278 chi2 = rzLine.
chi2();
295 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