CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ValueMapTraslator.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: ValueMapTraslator
4 // Class: ValueMapTraslator
5 //
13 //
14 // Original Author: Shervin Nourbakhsh,32 4-C03,+41227672087,
15 // Created: Sat Jul 13 15:40:56 CEST 2013
16 // $Id$
17 //
18 //
19 
20 // system include files
21 #include <memory>
22 
23 // user include files
27 
30 
32 
35 
36 //#define DEBUG
37 //
38 // class declaration
39 //
40 
42  typedef double value_t;
44 
45 public:
46  explicit ValueMapTraslator(const edm::ParameterSet&);
47  ~ValueMapTraslator() override;
48 
49  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
50 
51 private:
52  void produce(edm::Event&, const edm::EventSetup&) override;
53 
54  // ----------member data ---------------------------
58 
62 };
63 
64 //
65 // constants, enums and typedefs
66 //
67 
68 //
69 // static data member definitions
70 //
71 
72 //
73 // constructors and destructor
74 //
76  : referenceCollectionTAG(iConfig.getParameter<edm::InputTag>("referenceCollection")),
77  oldreferenceCollectionTAG(iConfig.getParameter<edm::InputTag>("oldreferenceCollection")),
78  inputCollectionTAG(iConfig.getParameter<edm::InputTag>("inputCollection")),
79  outputCollectionName(iConfig.getParameter<std::string>("outputCollection")) {
80  //now do what ever other initialization is needed
81  referenceToken_ = consumes<reco::GsfElectronCollection>(referenceCollectionTAG);
82  oldreferenceToken_ = consumes<reco::GsfElectronCollection>(oldreferenceCollectionTAG);
83  inputToken_ = consumes<Map_t>(inputCollectionTAG);
85  produces<Map_t>(outputCollectionName);
86 }
87 
89  // do anything here that needs to be done at desctruction time
90  // (e.g. close files, deallocate resources etc.)
91 }
92 
93 //
94 // member functions
95 //
96 
97 // ------------ method called to produce the data ------------
99  using namespace edm;
100  std::vector<value_t> valueVector;
101  auto valueVectorPtr = std::make_unique<Map_t>();
102 
103  //------------------------------
104  Handle<reco::GsfElectronCollection> referenceHandle;
105  Handle<reco::GsfElectronCollection> oldreferenceHandle;
106  Handle<Map_t> inputHandle;
107 
108  iEvent.getByToken(referenceToken_, referenceHandle);
109  iEvent.getByToken(oldreferenceToken_, oldreferenceHandle);
110  iEvent.getByToken(inputToken_, inputHandle);
111 
112  for (Map_t::const_iterator valueMap_itr = inputHandle->begin(); valueMap_itr != inputHandle->end(); valueMap_itr++) {
113  for (unsigned int i = 0; i < valueMap_itr.size(); i++) {
114 #ifdef DEBUG
115  std::cout << valueMap_itr[i] << std::endl;
116 #endif
117  // valueVector.push_back((valueMap_itr[i])); //valueMap_itr-inputHandle->begin()]));
118  }
119  break;
120  }
121 
122 #ifdef DEBUG
123  std::cout << "Size: " << referenceHandle->size() << "\t" << oldreferenceHandle->size() << "\t" << inputHandle->size()
124  << "\t" << valueVector.size() << std::endl;
125 #endif
126  for (reco::GsfElectronCollection::const_iterator electronNew = referenceHandle->begin();
127  electronNew != referenceHandle->end();
128  electronNew++) {
129  for (reco::GsfElectronCollection::const_iterator electron = oldreferenceHandle->begin();
130  electron != oldreferenceHandle->end();
131  electron++) {
132  //if(electronNew->GsfTrackF
133  if (electron->gsfTrack() != electronNew->gsfTrack())
134  continue;
135  //if(fabs(electronNew->eta() - electron->eta())>0.0001) continue;
136  //if(fabs(electronNew->phi() - electron->phi())>0.0001) continue;
137 
138  reco::GsfElectronRef eleRef(oldreferenceHandle, electron - oldreferenceHandle->begin());
139  reco::GsfElectronRef eleRef2(referenceHandle, electronNew - referenceHandle->begin());
140 
141 #ifdef DEBUG
142  std::cout << eleRef->eta() << "\t" << eleRef2->eta() << "\t" << eleRef->phi() << "\t" << eleRef2->phi() << "\t"
143  << eleRef->energy() << "\t" << eleRef2->energy() << "\t" << (eleRef->gsfTrack() == eleRef2->gsfTrack())
144  << "\t" << (eleRef == eleRef2) << "\t" << (*inputHandle)[eleRef] << std::endl;
145 #endif
146  valueVector.push_back((*inputHandle)[eleRef]); //valueMap_itr-inputHandle->begin()]));
147  }
148  }
149  //#endif
150  Map_t::Filler filler(*valueVectorPtr);
151  filler.insert(referenceHandle, valueVector.begin(), valueVector.end());
152  filler.fill();
153 
154  iEvent.put(std::move(valueVectorPtr));
155 }
156 
157 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
159  //The following says we do not know what parameters are allowed so do no validation
160  // Please change this to state exactly what you do use, even if it is no parameters
162  desc.setUnknown();
163  descriptions.addDefault(desc);
164 }
165 
166 //define this as a plug-in
ValueMapTraslator(const edm::ParameterSet &)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
~ValueMapTraslator() override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
void insert(const H &h, I begin, I end)
Definition: ValueMap.h:53
edm::ValueMap< value_t > Map_t
std::string outputCollectionName
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
int iEvent
Definition: GenABIO.cc:224
void addDefault(ParameterSetDescription const &psetDescription)
void produce(edm::Event &, const edm::EventSetup &) override
def move
Definition: eostools.py:511
edm::InputTag inputCollectionTAG
edm::InputTag oldreferenceCollectionTAG
edm::EDGetTokenT< reco::GsfElectronCollection > referenceToken_
edm::EDGetTokenT< reco::GsfElectronCollection > oldreferenceToken_
container::const_iterator begin() const
Definition: ValueMap.h:174
edm::EDGetTokenT< Map_t > inputToken_
tuple cout
Definition: gather_cfg.py:144
edm::InputTag referenceCollectionTAG