60 typedef vector<T> TCollection;
71 std::vector<edm::Ref<reco::RecoEcalCandidateCollection>> clusCands;
74 std::vector<edm::Ref<reco::ElectronCollection>> eleCands;
81 std::vector<TVector3> ElePs;
83 if (!clusCands.empty()) {
84 for (
auto& clusCand : clusCands) {
85 TVector3 positionVector(clusCand->superCluster()->position().x(),
86 clusCand->superCluster()->position().y(),
87 clusCand->superCluster()->position().z());
88 ElePs.push_back(positionVector);
90 }
else if (!eleCands.empty()) {
91 for (
auto& eleCand : eleCands) {
92 TVector3 positionVector(eleCand->superCluster()->position().x(),
93 eleCand->superCluster()->position().y(),
94 eleCand->superCluster()->position().z());
95 ElePs.push_back(positionVector);
97 }
else if (!photonCands.empty()) {
98 for (
auto& photonCand : photonCands) {
99 TVector3 positionVector(photonCand->superCluster()->position().x(),
100 photonCand->superCluster()->position().y(),
101 photonCand->superCluster()->position().z());
102 ElePs.push_back(positionVector);
109 const TCollection& theJetCollection = *theJetCollectionHandle;
111 std::unique_ptr<TCollection> theFilteredJetCollection(
new TCollection);
113 std::unique_ptr<TCollectionVector> allSelections(
new TCollectionVector());
115 bool foundSolution(
false);
117 for (
auto const& EleP : ElePs) {
118 bool VBFJetPair =
false;
119 std::vector<int> store_jet;
120 TRefVector refVector;
122 for (
unsigned int j = 0;
j < theJetCollection.size();
j++) {
123 TVector3 JetP(theJetCollection[
j].
px(), theJetCollection[
j].
py(), theJetCollection[
j].pz());
125 double const Deta = EleP.Eta() - JetP.Eta();
126 double const Dphi = EleP.DeltaPhi(JetP);
127 double const DR2 = Deta * Deta + Dphi * Dphi;
130 store_jet.push_back(
j);
133 for (
unsigned int k =
j + 1;
k < theJetCollection.size();
k++) {
134 TVector3 SoftJetP(theJetCollection[
k].
px(), theJetCollection[
k].
py(), theJetCollection[
k].pz());
140 double const softDeta = EleP.Eta() - SoftJetP.Eta();
141 double const softDphi = EleP.DeltaPhi(SoftJetP);
142 double const softDR2 = softDeta * softDeta + softDphi * softDphi;
145 store_jet.push_back(
k);
154 std::sort(store_jet.begin(), store_jet.end());
155 store_jet.erase(
unique(store_jet.begin(), store_jet.end()), store_jet.end());
158 for (
int& ijet : store_jet) {
160 refVector.push_back(TRef(theJetCollectionHandle, ijet));
163 theFilteredJetCollection->push_back(theJetCollection[ijet]);
166 allSelections->push_back(refVector);
169 foundSolution =
true;
171 foundSolution =
true;
172 else if (!foundSolution)
173 theFilteredJetCollection->clear();
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
edm::EDGetTokenT< trigger::TriggerFilterObjectWithRefs > m_theElectronToken
edm::EDGetTokenT< std::vector< T > > m_theJetToken
def unique(seq, keepstr=True)
Abs< T >::type abs(const T &t)
std::vector< reco::RecoEcalCandidateRef > VRphoton