CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ReducedESRecHitCollectionProducer.cc
Go to the documentation of this file.
15 
16 using namespace edm;
17 using namespace std;
18 using namespace reco;
19 
21  geometry_p(0),
22  topology_p(0)
23 {
24 
25  scEtThresh_ = ps.getParameter<double>("scEtThreshold");
26 
28  consumes<ESRecHitCollection>(ps.getParameter<edm::InputTag>("EcalRecHitCollectionES"));
30  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("EndcapSuperClusterCollection"));
31 
32  OutputLabelES_ = ps.getParameter<std::string>("OutputLabel_ES");
33 
36  ps.getParameter<std::vector<edm::InputTag>>("interestingDetIds"),
37  [this](edm::InputTag const & tag) {
38  return consumes<DetIdCollection>(tag);
39  }
40  );
41 
42  produces< EcalRecHitCollection > (OutputLabelES_);
43 
44 }
45 
47  if (topology_p) delete topology_p;
48 }
49 
51  ESHandle<CaloGeometry> geoHandle;
52  iSetup.get<CaloGeometryRecord>().get(geoHandle);
53  const CaloSubdetectorGeometry *geometry = geoHandle->getSubdetectorGeometry(DetId::Ecal, EcalPreshower);
54  geometry_p = dynamic_cast<const EcalPreshowerGeometry *>(geometry);
55  if (!geometry_p){
56  edm::LogError("WrongGeometry")<<
57  "could not cast the subdet geometry to preshower geometry";
58  }
59 
60  if (geometry) topology_p = new EcalPreshowerTopology(geoHandle);
61 
62 }
63 
65 
66 
68  e.getByToken(InputRecHitES_, ESRecHits_);
69 
70  std::auto_ptr<EcalRecHitCollection> output(new EcalRecHitCollection);
71 
72  edm::Handle<reco::SuperClusterCollection> pEndcapSuperClusters;
73  e.getByToken(InputSuperClusterEE_, pEndcapSuperClusters);
74  {
75  const reco::SuperClusterCollection* eeSuperClusters = pEndcapSuperClusters.product();
76 
77  for (reco::SuperClusterCollection::const_iterator isc = eeSuperClusters->begin(); isc != eeSuperClusters->end(); ++isc) {
78 
79  if (isc->energy() < scEtThresh_) continue;
80  if (fabs(isc->eta()) < 1.65 || fabs(isc->eta()) > 2.6) continue;
81  //cout<<"SC energy : "<<isc->energy()<<" "<<isc->eta()<<endl;
82 
83  //Int_t nBC = 0;
84  reco::CaloCluster_iterator ibc = isc->clustersBegin();
85  for ( ; ibc != isc->clustersEnd(); ++ibc ) {
86 
87  //cout<<"BC : "<<nBC<<endl;
88 
89  const GlobalPoint point((*ibc)->x(),(*ibc)->y(),(*ibc)->z());
90 
93 
94  collectIds(esId1, esId2, 0);
95  collectIds(esId1, esId2, 1);
96  collectIds(esId1, esId2, -1);
97 
98  //nBC++;
99  }
100 
101  }
102 
103  }
104 
105 
107  for( unsigned int t = 0; t < interestingDetIdCollections_.size(); ++t )
108  {
110  if(!detId.isValid())
111  {
112  Labels labels;
114  edm::LogError("MissingInput")<<"no reason to skip detid from : (" << labels.module << ", "
115  << labels.productInstance << ", "
116  << labels.process << ")" << std::endl;
117  continue;
118  }
119  collectedIds_.insert(detId->begin(),detId->end());
120  }
121 
122 
123  output->reserve( collectedIds_.size());
125  for (it = ESRecHits_->begin(); it != ESRecHits_->end(); ++it) {
126  if (it->recoFlag()==1 || it->recoFlag()==14 || (it->recoFlag()<=10 && it->recoFlag()>=5)) continue;
127  if (collectedIds_.find(it->id())!=collectedIds_.end()){
128  output->push_back(*it);
129  }
130  }
131  collectedIds_.clear();
132 
133  e.put(output, OutputLabelES_);
134 
135 }
136 
137 void ReducedESRecHitCollectionProducer::collectIds(const ESDetId esDetId1, const ESDetId esDetId2, const int & row) {
138 
139  //cout<<row<<endl;
140 
141  map<DetId,const EcalRecHit*>::iterator it;
142  map<DetId, int>::iterator itu;
143  ESDetId next;
144  ESDetId strip1;
145  ESDetId strip2;
146 
147  strip1 = esDetId1;
148  strip2 = esDetId2;
149 
150  EcalPreshowerNavigator theESNav1(strip1, topology_p);
151  theESNav1.setHome(strip1);
152 
153  EcalPreshowerNavigator theESNav2(strip2, topology_p);
154  theESNav2.setHome(strip2);
155 
156  if (row == 1) {
157  if (strip1 != ESDetId(0)) strip1 = theESNav1.north();
158  if (strip2 != ESDetId(0)) strip2 = theESNav2.east();
159  } else if (row == -1) {
160  if (strip1 != ESDetId(0)) strip1 = theESNav1.south();
161  if (strip2 != ESDetId(0)) strip2 = theESNav2.west();
162  }
163 
164  // Plane 1
165  if (strip1 == ESDetId(0)) {
166  } else {
167  collectedIds_.insert(strip1);
168  //cout<<"center : "<<strip1<<endl;
169  // east road
170  for (int i=0; i<15; ++i) {
171  next = theESNav1.east();
172  //cout<<"east : "<<i<<" "<<next<<endl;
173  if (next != ESDetId(0)) {
174  collectedIds_.insert(next);
175  } else {
176  break;
177  }
178  }
179 
180  // west road
181  theESNav1.setHome(strip1);
182  theESNav1.home();
183  for (int i=0; i<15; ++i) {
184  next = theESNav1.west();
185  //cout<<"west : "<<i<<" "<<next<<endl;
186  if (next != ESDetId(0)) {
187  collectedIds_.insert(next);
188  } else {
189  break;
190  }
191  }
192 
193  }
194 
195  if (strip2 == ESDetId(0)) {
196  } else {
197  collectedIds_.insert(strip2);
198  //cout<<"center : "<<strip2<<endl;
199  // north road
200  for (int i=0; i<15; ++i) {
201  next = theESNav2.north();
202  //cout<<"north : "<<i<<" "<<next<<endl;
203  if (next != ESDetId(0)) {
204  collectedIds_.insert(next);
205  } else {
206  break;
207  }
208  }
209 
210  // south road
211  theESNav2.setHome(strip2);
212  theESNav2.home();
213  for (int i=0; i<15; ++i) {
214  next = theESNav2.south();
215  //cout<<"south : "<<i<<" "<<next<<endl;
216  if (next != ESDetId(0)) {
217  collectedIds_.insert(next);
218  } else {
219  break;
220  }
221  }
222  }
223 }
224 
225 
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
virtual void beginRun(edm::Run const &, const edm::EventSetup &) overridefinal
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:446
std::vector< edm::EDGetTokenT< DetIdCollection > > interestingDetIdCollections_
std::vector< EcalRecHit >::const_iterator const_iterator
auto vector_transform(std::vector< InputType > const &input, Function predicate) -> std::vector< typename std::remove_cv< typename std::remove_reference< decltype(predicate(input.front()))>::type >::type >
Definition: transform.h:11
void collectIds(const ESDetId strip1, const ESDetId strip2, const int &row=0)
void setHome(const T &startingPoint)
set the starting position
std::vector< SuperCluster > SuperClusterCollection
collection of SuperCluser objectr
T west() const
move the navigator west
Definition: CaloNavigator.h:59
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:113
virtual DetId getClosestCellInPlane(const GlobalPoint &r, int plane) const
T south() const
move the navigator south
Definition: CaloNavigator.h:45
bool isValid() const
Definition: HandleBase.h:76
T east() const
move the navigator east
Definition: CaloNavigator.h:52
void home() const
move the navigator back to the starting point
T const * product() const
Definition: Handle.h:81
edm::EDGetTokenT< ESRecHitCollection > InputRecHitES_
const T & get() const
Definition: EventSetup.h:55
edm::EDGetTokenT< reco::SuperClusterCollection > InputSuperClusterEE_
void produce(edm::Event &e, const edm::EventSetup &c)
void labelsForToken(EDGetToken iToken, Labels &oLabels) const
ESHandle< TrackerGeometry > geometry
T north() const
move the navigator north
Definition: CaloNavigator.h:38
ReducedESRecHitCollectionProducer(const edm::ParameterSet &pset)
*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
Definition: invegas.h:5
Definition: Run.h:41