CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
CandOneToOneDeltaRMatcher Class Reference
Inheritance diagram for CandOneToOneDeltaRMatcher:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 CandOneToOneDeltaRMatcher (const edm::ParameterSet &)
 
 ~CandOneToOneDeltaRMatcher () override
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducer () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
std::vector< bool > const & recordProvenanceList () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase &&)=default
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

std::vector< int > AlgoBruteForce (int, int)
 
std::vector< int > AlgoSwitchMethod (int, int)
 
double lenght (const std::vector< int > &)
 
void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

std::string algoMethod_
 
std::vector< std::vector< float > > AllDist
 
edm::EDGetTokenT< reco::CandidateViewmatchedToken_
 
edm::EDGetTokenT< reco::CandidateViewsourceToken_
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > >
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::ProducerBase
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 declare what type of product will make and with which optional label More...
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 

Detailed Description

Definition at line 18 of file CandOneToOneDeltaRMatcher.cc.

Constructor & Destructor Documentation

◆ CandOneToOneDeltaRMatcher()

CandOneToOneDeltaRMatcher::CandOneToOneDeltaRMatcher ( const edm::ParameterSet cfg)

Definition at line 59 of file CandOneToOneDeltaRMatcher.cc.

60  : sourceToken_(consumes<CandidateView>(cfg.getParameter<InputTag>("src"))),
61  matchedToken_(consumes<CandidateView>(cfg.getParameter<InputTag>("matched"))),
62  algoMethod_(cfg.getParameter<string>("algoMethod")) {
63  produces<CandViewMatchMap>("src2mtc");
64  produces<CandViewMatchMap>("mtc2src");
65 }

◆ ~CandOneToOneDeltaRMatcher()

CandOneToOneDeltaRMatcher::~CandOneToOneDeltaRMatcher ( )
override

Definition at line 67 of file CandOneToOneDeltaRMatcher.cc.

67 {}

Member Function Documentation

◆ AlgoBruteForce()

vector< int > CandOneToOneDeltaRMatcher::AlgoBruteForce ( int  nMin,
int  nMax 
)
private

Definition at line 210 of file CandOneToOneDeltaRMatcher.cc.

210  {
211  vector<int> ca;
212  vector<int> cb;
213  vector<int> bestCB;
214  float totalDeltaR = 0;
215  float BestTotalDeltaR = 1000;
216 
217  for (int i1 = 0; i1 < nMax; i1++)
218  ca.push_back(i1);
219  for (int i1 = 0; i1 < nMin; i1++)
220  cb.push_back(i1);
221 
222  do {
223  //do your processing on the new combination here
224  for (int cnt = 0; cnt < TMath::Factorial(nMin); cnt++) {
225  totalDeltaR = lenght(cb);
226  if (totalDeltaR < BestTotalDeltaR) {
227  BestTotalDeltaR = totalDeltaR;
228  bestCB = cb;
229  }
230  next_permutation(cb.begin(), cb.end());
231  }
232  } while (next_combination(ca.begin(), ca.end(), cb.begin(), cb.end()));
233 
234  return bestCB;
235 }

References testProducerWithPsetDescEmpty_cfi::i1, lenght(), stdcomb::next_combination(), metDiagnosticParameterSet_cfi::nMax, and metDiagnosticParameterSet_cfi::nMin.

Referenced by produce().

◆ AlgoSwitchMethod()

vector< int > CandOneToOneDeltaRMatcher::AlgoSwitchMethod ( int  nMin,
int  nMax 
)
private

Definition at line 248 of file CandOneToOneDeltaRMatcher.cc.

248  {
249  vector<int> bestCB;
250  for (int i1 = 0; i1 < nMin; i1++) {
251  int minInd = 0;
252  for (int i2 = 1; i2 < nMax; i2++)
253  if (AllDist[i1][i2] < AllDist[i1][minInd])
254  minInd = i2;
255  bestCB.push_back(minInd);
256  }
257 
258  bool inside = true;
259  while (inside) {
260  inside = false;
261  for (int i1 = 0; i1 < nMin; i1++) {
262  for (int i2 = i1 + 1; i2 < nMin; i2++) {
263  if (bestCB[i1] == bestCB[i2]) {
264  inside = true;
265  if (AllDist[i1][(bestCB[i1])] <= AllDist[i2][(bestCB[i2])]) {
266  AllDist[i2][(bestCB[i2])] = 1000;
267  int minInd = 0;
268  for (int i3 = 1; i3 < nMax; i3++)
269  if (AllDist[i2][i3] < AllDist[i2][minInd])
270  minInd = i3;
271  bestCB[i2] = minInd;
272  } else {
273  AllDist[i1][(bestCB[i1])] = 1000;
274  int minInd = 0;
275  for (int i3 = 1; i3 < nMax; i3++)
276  if (AllDist[i1][i3] < AllDist[i1][minInd])
277  minInd = i3;
278  bestCB[i1] = minInd;
279  }
280  } // End if
281  }
282  }
283  } // End while
284 
285  return bestCB;
286 }

References AllDist, testProducerWithPsetDescEmpty_cfi::i1, testProducerWithPsetDescEmpty_cfi::i2, testProducerWithPsetDescEmpty_cfi::i3, metDiagnosticParameterSet_cfi::nMax, and metDiagnosticParameterSet_cfi::nMin.

Referenced by produce().

◆ lenght()

double CandOneToOneDeltaRMatcher::lenght ( const std::vector< int > &  best)
private

Definition at line 191 of file CandOneToOneDeltaRMatcher.cc.

191  {
192  double myLenght = 0;
193  int row = 0;
194  for (vector<int>::const_iterator it = best.begin(); it != best.end(); it++) {
195  myLenght += AllDist[row][*it];
196  row++;
197  }
198  return myLenght;
199 }

References AllDist.

Referenced by AlgoBruteForce().

◆ produce()

void CandOneToOneDeltaRMatcher::produce ( edm::Event evt,
const edm::EventSetup es 
)
overrideprivatevirtual

Implements edm::EDProducer.

Definition at line 69 of file CandOneToOneDeltaRMatcher.cc.

69  {
74 
75  edm::LogVerbatim("CandOneToOneDeltaRMatcher") << "======== Source Collection =======";
76  for (CandidateView::const_iterator c = source->begin(); c != source->end(); ++c) {
77  edm::LogVerbatim("CandOneToOneDeltaRMatcher")
78  << " pt source " << c->pt() << " " << c->eta() << " " << c->phi() << endl;
79  }
80  edm::LogVerbatim("CandOneToOneDeltaRMatcher") << "======== Matched Collection =======";
81  for (CandidateView::const_iterator c = matched->begin(); c != matched->end(); ++c) {
82  edm::LogVerbatim("CandOneToOneDeltaRMatcher")
83  << " pt source " << c->pt() << " " << c->eta() << " " << c->phi() << endl;
84  }
85 
86  const int nSrc = source->size();
87  const int nMtc = matched->size();
88 
89  const int nMin = min(source->size(), matched->size());
90  const int nMax = max(source->size(), matched->size());
91  if (nMin < 1)
92  return;
93 
94  if (nSrc <= nMtc) {
95  for (CandidateView::const_iterator iSr = source->begin(); iSr != source->end(); iSr++) {
96  vector<float> tempAllDist;
97  for (CandidateView::const_iterator iMt = matched->begin(); iMt != matched->end(); iMt++) {
98  tempAllDist.push_back(DeltaR(iSr->p4(), iMt->p4()));
99  }
100  AllDist.push_back(tempAllDist);
101  tempAllDist.clear();
102  }
103  } else {
104  for (CandidateView::const_iterator iMt = matched->begin(); iMt != matched->end(); iMt++) {
105  vector<float> tempAllDist;
106  for (CandidateView::const_iterator iSr = source->begin(); iSr != source->end(); iSr++) {
107  tempAllDist.push_back(DeltaR(iSr->p4(), iMt->p4()));
108  }
109  AllDist.push_back(tempAllDist);
110  tempAllDist.clear();
111  }
112  }
113 
114  /*
115  edm::LogVerbatim("CandOneToOneDeltaRMatcher") << "======== The DeltaR Matrix =======";
116  for(int m0=0; m0<nMin; m0++) {
117  // for(int m1=0; m1<nMax; m1++) {
118  edm::LogVerbatim("CandOneToOneDeltaRMatcher") << setprecision(2) << fixed << (m1 AllDist[m0][m1] ;
119  //}
120  edm::LogVerbatim("CandOneToOneDeltaRMatcher") << "\n";
121  }
122  */
123 
124  // Loop size if Brute Force
125  int nLoopToDo = (int)(TMath::Factorial(nMax) / TMath::Factorial(nMax - nMin));
126  edm::LogVerbatim("CandOneToOneDeltaRMatcher") << "nLoop:" << nLoopToDo << endl;
127  edm::LogVerbatim("CandOneToOneDeltaRMatcher") << "Choosen Algo is:" << algoMethod_;
128  vector<int> bestCB;
129 
130  // Algo is Brute Force
131  if (algoMethod_ == "BruteForce") {
132  bestCB = AlgoBruteForce(nMin, nMax);
133 
134  // Algo is Switch Method
135  } else if (algoMethod_ == "SwitchMode") {
136  bestCB = AlgoSwitchMethod(nMin, nMax);
137 
138  // Algo is Brute Force if nLoop < 10000
139  } else if (algoMethod_ == "MixMode") {
140  if (nLoopToDo < 10000) {
141  bestCB = AlgoBruteForce(nMin, nMax);
142  } else {
143  bestCB = AlgoSwitchMethod(nMin, nMax);
144  }
145 
146  } else {
147  throw cms::Exception("OneToOne Constructor") << "wrong matching method in ParameterSet";
148  }
149 
150  for (int i1 = 0; i1 < nMin; i1++)
151  edm::LogVerbatim("CandOneToOneDeltaRMatcher")
152  << "min: " << i1 << " " << bestCB[i1] << " " << AllDist[i1][bestCB[i1]];
153 
154  /*
155  auto matchMapSrMt = std::make_unique<CandViewMatchMap>(CandViewMatchMap::ref_type( CandidateRefProd( source ),
156  CandidateRefProd( matched ) ) );
157  auto matchMapMtSr = std::make_unique<CandViewMatchMap>(CandViewMatchMap::ref_type( CandidateRefProd( matched ),
158  CandidateRefProd( source ) ) );
159 */
160 
161  auto matchMapSrMt = std::make_unique<CandViewMatchMap>();
162  auto matchMapMtSr = std::make_unique<CandViewMatchMap>();
163 
164  for (int c = 0; c != nMin; c++) {
165  if (source->size() <= matched->size()) {
166  matchMapSrMt->insert(source->refAt(c), matched->refAt(bestCB[c]));
167  matchMapMtSr->insert(matched->refAt(bestCB[c]), source->refAt(c));
168  } else {
169  matchMapSrMt->insert(source->refAt(bestCB[c]), matched->refAt(c));
170  matchMapMtSr->insert(matched->refAt(c), source->refAt(bestCB[c]));
171  }
172  }
173 
174  /*
175  for( int c = 0; c != nMin; c ++ ) {
176  if( source->size() <= matched->size() ) {
177  matchMapSrMt->insert( CandidateRef( source, c ), CandidateRef( matched, bestCB[c] ) );
178  matchMapMtSr->insert( CandidateRef( matched, bestCB[c] ), CandidateRef( source, c ) );
179  } else {
180  matchMapSrMt->insert( CandidateRef( source, bestCB[c] ), CandidateRef( matched, c ) );
181  matchMapMtSr->insert( CandidateRef( matched, c ), CandidateRef( source, bestCB[c] ) );
182  }
183  }
184 */
185  evt.put(std::move(matchMapSrMt), "src2mtc");
186  evt.put(std::move(matchMapMtSr), "mtc2src");
187 
188  AllDist.clear();
189 }

References AlgoBruteForce(), algoMethod_, AlgoSwitchMethod(), AllDist, HltBtagPostValidation_cff::c, electronAnalyzer_cfi::DeltaR, Exception, edm::Event::getByToken(), testProducerWithPsetDescEmpty_cfi::i1, createfilelist::int, muonTagProbeFilters_cff::matched, matchedToken_, SiStripPI::max, min(), eostools::move(), metDiagnosticParameterSet_cfi::nMax, metDiagnosticParameterSet_cfi::nMin, edm::Event::put(), source, and sourceToken_.

Member Data Documentation

◆ algoMethod_

std::string CandOneToOneDeltaRMatcher::algoMethod_
private

Definition at line 32 of file CandOneToOneDeltaRMatcher.cc.

Referenced by produce().

◆ AllDist

std::vector<std::vector<float> > CandOneToOneDeltaRMatcher::AllDist
private

Definition at line 31 of file CandOneToOneDeltaRMatcher.cc.

Referenced by AlgoSwitchMethod(), lenght(), and produce().

◆ matchedToken_

edm::EDGetTokenT<reco::CandidateView> CandOneToOneDeltaRMatcher::matchedToken_
private

Definition at line 30 of file CandOneToOneDeltaRMatcher.cc.

Referenced by produce().

◆ sourceToken_

edm::EDGetTokenT<reco::CandidateView> CandOneToOneDeltaRMatcher::sourceToken_
private

Definition at line 29 of file CandOneToOneDeltaRMatcher.cc.

Referenced by produce().

muonTagProbeFilters_cff.matched
matched
Definition: muonTagProbeFilters_cff.py:62
CandOneToOneDeltaRMatcher::sourceToken_
edm::EDGetTokenT< reco::CandidateView > sourceToken_
Definition: CandOneToOneDeltaRMatcher.cc:29
testProducerWithPsetDescEmpty_cfi.i2
i2
Definition: testProducerWithPsetDescEmpty_cfi.py:46
testProducerWithPsetDescEmpty_cfi.i3
i3
Definition: testProducerWithPsetDescEmpty_cfi.py:47
metDiagnosticParameterSet_cfi.nMin
nMin
Definition: metDiagnosticParameterSet_cfi.py:10
CandOneToOneDeltaRMatcher::AlgoSwitchMethod
std::vector< int > AlgoSwitchMethod(int, int)
Definition: CandOneToOneDeltaRMatcher.cc:248
min
T min(T a, T b)
Definition: MathUtil.h:58
testProducerWithPsetDescEmpty_cfi.i1
i1
Definition: testProducerWithPsetDescEmpty_cfi.py:45
CandOneToOneDeltaRMatcher::AllDist
std::vector< std::vector< float > > AllDist
Definition: CandOneToOneDeltaRMatcher.cc:31
edm::Handle
Definition: AssociativeIterator.h:50
CandOneToOneDeltaRMatcher::matchedToken_
edm::EDGetTokenT< reco::CandidateView > matchedToken_
Definition: CandOneToOneDeltaRMatcher.cc:30
source
static const std::string source
Definition: EdmProvDump.cc:47
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:528
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
createfilelist.int
int
Definition: createfilelist.py:10
CandOneToOneDeltaRMatcher::algoMethod_
std::string algoMethod_
Definition: CandOneToOneDeltaRMatcher.cc:32
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:132
edm::LogVerbatim
Definition: MessageLogger.h:297
electronAnalyzer_cfi.DeltaR
DeltaR
Definition: electronAnalyzer_cfi.py:33
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
looper.cfg
cfg
Definition: looper.py:297
eostools.move
def move(src, dest)
Definition: eostools.py:511
stdcomb::next_combination
bool next_combination(BidIt n_begin, BidIt n_end, BidIt r_begin, BidIt r_end)
Definition: combination.h:19
CandOneToOneDeltaRMatcher::lenght
double lenght(const std::vector< int > &)
Definition: CandOneToOneDeltaRMatcher.cc:191
CandOneToOneDeltaRMatcher::AlgoBruteForce
std::vector< int > AlgoBruteForce(int, int)
Definition: CandOneToOneDeltaRMatcher.cc:210
Exception
Definition: hltDiff.cc:246
edm::View::const_iterator
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
edm::InputTag
Definition: InputTag.h:15
metDiagnosticParameterSet_cfi.nMax
nMax
Definition: metDiagnosticParameterSet_cfi.py:11