32 pixlTag_ (iConfig.getParameter<
edm::InputTag>(
"pixlTag")),
33 min_Pt_ (iConfig.getParameter<double>(
"MinPt")),
34 min_trks_ (iConfig.getParameter<unsigned
int>(
"MinTrks")),
35 min_sep_ (iConfig.getParameter<double>(
"MinSep")),
36 min_isol_ (iConfig.getParameter<double>(
"MinIsol"))
42 LogDebug(
"") <<
"Requesting tracks from same vertex eta-phi separation by " <<
min_sep_;
53 desc.
add<
double>(
"MinPt",5.0);
54 desc.
add<
unsigned int>(
"MinTrks",2);
55 desc.
add<
double>(
"MinSep",1.0);
56 desc.
add<
double>(
"MinIsol",0.05);
57 descriptions.
add(
"hltPixlMBForAlignmentFilter",desc);
86 vector<double> etastore;
87 vector<double> phistore;
88 vector<double> ptstore;
91 auto apixl(tracks->begin());
92 auto epixl(tracks->end());
95 double zvtxfit2 = 0.0;
100 for (
auto ipixl=apixl; ipixl!=epixl; ipixl++){
101 const double& ztrk1 = ipixl->vz();
102 const double& etatrk1 = ipixl->momentum().eta();
103 const double& phitrk1 = ipixl->momentum().phi();
104 const double& pttrk1 = ipixl->pt();
105 zvtxfit = zvtxfit + ztrk1;
106 zvtxfit2 = zvtxfit2 + ztrk1 * ztrk1;
110 etastore.push_back(etatrk1);
111 phistore.push_back(phitrk1);
112 ptstore.push_back(pttrk1);
113 itstore.push_back(itrk);
119 zvtxfit = zvtxfit / itrk;
120 zvtxfit2 = zvtxfit2 / itrk;
121 zvtxfit2 =
sqrt(zvtxfit2 - zvtxfit*zvtxfit);
125 if (itstore.size() > 1) {
128 for (
unsigned int i=0;
i<itstore.size();
i++) {
131 for (
auto ipixl=apixl; ipixl!=epixl; ipixl++){
132 double phidist=
std::abs( phistore.at(
i) - ipixl->momentum().phi() );
133 double etadist=
std::abs( etastore.at(
i) - ipixl->momentum().eta() );
134 double trkdist =
sqrt(phidist*phidist + etadist*etadist);
138 if (nincone < 2) locisol.push_back(
i);
143 for (
unsigned int i=0;
i<locisol.size();
i++) {
146 itsep.push_back(locisol.at(
i));
147 for (
unsigned int j=
i+1; j<locisol.size(); j++) {
149 double phidist = phistore.at(locisol.at(
i))-phistore.at(locisol.at(j));
150 double etadist = etastore.at(locisol.at(
i))-etastore.at(locisol.at(j));
151 double dist =
sqrt(phidist*phidist + etadist*etadist);
153 if (itsep.size() == 1) {
154 itsep.push_back(locisol.at(j));
156 bool is_separated =
true;
159 double phisep = phistore.at(
k)-phistore.at(locisol.at(j));
160 double etasep = etastore.at(
k)-etastore.at(locisol.at(j));
161 double sep =
sqrt(phisep*phisep + etasep*etasep);
164 is_separated =
false;
168 if (is_separated) itsep.push_back(locisol.at(j));
184 for (
int ipos : itsep) {
185 int iaddr=itstore.at(ipos);
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::Ref< RecoChargedCandidateCollection > RecoChargedCandidateRef
reference to an object in a collection of RecoChargedCandidate objects
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
#define DEFINE_FWK_MODULE(type)
Abs< T >::type abs(const T &t)
HLTPixlMBForAlignmentFilter(const edm::ParameterSet &)
edm::EDGetTokenT< reco::RecoChargedCandidateCollection > pixlToken_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
~HLTPixlMBForAlignmentFilter() override
void add(std::string const &label, ParameterSetDescription const &psetDescription)
bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) const override