CMS 3D CMS Logo

CosmicClusterProducer.cc
Go to the documentation of this file.
30 
31 #include <ctime>
32 #include <iostream>
33 #include <memory>
34 #include <vector>
35 
37 public:
39 
40  ~CosmicClusterProducer() override;
41 
42  void produce(edm::Event&, const edm::EventSetup&) override;
43 
44 private:
45  int nMaxPrintout_; // max # of printouts
46  int nEvt_; // internal counter of events
47 
49 
52 
56 
59 
62 
63  //BasicClusterShape AssociationMap
66 
67  PositionCalc posCalculator_; // position calculation algorithm
68  ClusterShapeAlgo shapeAlgo_; // cluster shape algorithm
70 
71  bool counterExceeded() const { return ((nEvt_ > nMaxPrintout_) || (nMaxPrintout_ < 0)); }
72 
74  const edm::EventSetup& es,
77  const std::string& clusterCollection,
78  const std::string& clusterShapeAssociation,
79  const CosmicClusterAlgo::EcalPart& ecalPart);
80 
81  void outputValidationInfo(reco::CaloClusterPtrVector& clusterPtrVector);
82 };
83 
86 
88  // The verbosity level
89  std::string verbosityString = ps.getParameter<std::string>("VerbosityLevel");
90  if (verbosityString == "DEBUG")
92  else if (verbosityString == "WARNING")
94  else if (verbosityString == "INFO")
96  else
98 
99  // Parameters to identify the hit collections
100  ebHitsToken_ = consumes<EcalRecHitCollection>(ps.getParameter<edm::InputTag>("barrelHits"));
101  eeHitsToken_ = consumes<EcalRecHitCollection>(ps.getParameter<edm::InputTag>("endcapHits"));
102 
103  ebUHitsToken_ = consumes<EcalUncalibratedRecHitCollection>(ps.getParameter<edm::InputTag>("barrelUncalibHits"));
104  eeUHitsToken_ = consumes<EcalUncalibratedRecHitCollection>(ps.getParameter<edm::InputTag>("endcapUncalibHits"));
105 
106  caloGeometryToken_ = esConsumes<CaloGeometry, CaloGeometryRecord>();
107 
108  // The names of the produced cluster collections
109  barrelClusterCollection_ = ps.getParameter<std::string>("barrelClusterCollection");
110  endcapClusterCollection_ = ps.getParameter<std::string>("endcapClusterCollection");
111 
112  // Island algorithm parameters
113  double barrelSeedThreshold = ps.getParameter<double>("BarrelSeedThr");
114  double barrelSingleThreshold = ps.getParameter<double>("BarrelSingleThr");
115  double barrelSecondThreshold = ps.getParameter<double>("BarrelSecondThr");
116  double barrelSupThreshold = ps.getParameter<double>("BarrelSupThr");
117  double endcapSeedThreshold = ps.getParameter<double>("EndcapSeedThr");
118  double endcapSingleThreshold = ps.getParameter<double>("EndcapSingleThr");
119  double endcapSecondThreshold = ps.getParameter<double>("EndcapSecondThr");
120  double endcapSupThreshold = ps.getParameter<double>("EndcapSupThr");
121 
122  // Parameters for the position calculation:
124 
127 
128  clustershapecollectionEB_ = ps.getParameter<std::string>("clustershapecollectionEB");
129  clustershapecollectionEE_ = ps.getParameter<std::string>("clustershapecollectionEE");
130 
131  //AssociationMap
132  barrelClusterShapeAssociation_ = ps.getParameter<std::string>("barrelShapeAssociation");
133  endcapClusterShapeAssociation_ = ps.getParameter<std::string>("endcapShapeAssociation");
134 
135  // Produces a collection of barrel and a collection of endcap clusters
136 
137  produces<reco::ClusterShapeCollection>(clustershapecollectionEE_);
138  produces<reco::BasicClusterCollection>(endcapClusterCollection_);
139  produces<reco::ClusterShapeCollection>(clustershapecollectionEB_);
140  produces<reco::BasicClusterCollection>(barrelClusterCollection_);
141  produces<reco::BasicClusterShapeAssociationCollection>(barrelClusterShapeAssociation_);
142  produces<reco::BasicClusterShapeAssociationCollection>(endcapClusterShapeAssociation_);
143 
144  island_p = new CosmicClusterAlgo(barrelSeedThreshold,
145  barrelSingleThreshold,
146  barrelSecondThreshold,
147  barrelSupThreshold,
148  endcapSeedThreshold,
149  endcapSingleThreshold,
150  endcapSecondThreshold,
151  endcapSupThreshold,
153  verbosity);
154 
155  nEvt_ = 0;
156 }
157 
159 
161  clusterizeECALPart(evt,
162  es,
163  eeHitsToken_,
168  clusterizeECALPart(evt,
169  es,
170  eeHitsToken_,
175  nEvt_++;
176 }
177 
179  const edm::EventSetup& es,
182  const std::string& clusterCollection,
183  const std::string& clusterShapeAssociation,
184  const CosmicClusterAlgo::EcalPart& ecalPart) {
185  // get the hit collection from the event:
186 
189 
190  evt.getByToken(hitsToken, hits_h);
191  evt.getByToken(uhitsToken, uhits_h);
192 
193  const EcalRecHitCollection* hitCollection_p = hits_h.product();
194  const EcalUncalibratedRecHitCollection* uhitCollection_p = uhits_h.product();
195 
196  // get the geometry and topology from the event setup:
198 
199  const CaloSubdetectorGeometry* geometry_p;
200  std::unique_ptr<CaloSubdetectorTopology> topology_p;
201 
202  std::string clustershapetag;
203  if (ecalPart == CosmicClusterAlgo::barrel) {
204  geometry_p = geoHandle->getSubdetectorGeometry(DetId::Ecal, EcalBarrel);
205  topology_p = std::make_unique<EcalBarrelTopology>(*geoHandle);
206  } else {
207  geometry_p = geoHandle->getSubdetectorGeometry(DetId::Ecal, EcalEndcap);
208  topology_p = std::make_unique<EcalEndcapTopology>(*geoHandle);
209  }
210 
211  const CaloSubdetectorGeometry* geometryES_p;
212  geometryES_p = geoHandle->getSubdetectorGeometry(DetId::Ecal, EcalPreshower);
213 
214  // Run the clusterization algorithm:
216  clusters =
217  island_p->makeClusters(hitCollection_p, uhitCollection_p, geometry_p, topology_p.get(), geometryES_p, ecalPart);
218 
219  //Create associated ClusterShape objects.
220  std::vector<reco::ClusterShape> ClusVec;
221 
222  for (int erg = 0; erg < int(clusters.size()); ++erg) {
223  reco::ClusterShape TestShape = shapeAlgo_.Calculate(clusters[erg], hitCollection_p, geometry_p, topology_p.get());
224  ClusVec.push_back(TestShape);
225  }
226 
227  //Put clustershapes in event, but retain a Handle on them.
228  auto clustersshapes_p = std::make_unique<reco::ClusterShapeCollection>();
229  clustersshapes_p->assign(ClusVec.begin(), ClusVec.end());
231  if (ecalPart == CosmicClusterAlgo::barrel)
232  clusHandle = evt.put(std::move(clustersshapes_p), clustershapecollectionEB_);
233  else
234  clusHandle = evt.put(std::move(clustersshapes_p), clustershapecollectionEE_);
235 
236  // create a unique_ptr to a BasicClusterCollection, copy the barrel clusters into it and put in the Event:
237  auto clusters_p = std::make_unique<reco::BasicClusterCollection>();
238  clusters_p->assign(clusters.begin(), clusters.end());
240 
241  if (ecalPart == CosmicClusterAlgo::barrel)
242  bccHandle = evt.put(std::move(clusters_p), barrelClusterCollection_);
243  else
244  bccHandle = evt.put(std::move(clusters_p), endcapClusterCollection_);
245 
246  // BasicClusterShapeAssociationMap
247  auto shapeAssocs_p = std::make_unique<reco::BasicClusterShapeAssociationCollection>(bccHandle, clusHandle);
248 
249  for (unsigned int i = 0; i < clusHandle->size(); i++) {
250  shapeAssocs_p->insert(edm::Ref<reco::BasicClusterCollection>(bccHandle, i),
252  }
253  evt.put(std::move(shapeAssocs_p), clusterShapeAssociation);
254 }
CosmicClusterAlgo::VerbosityLevel
VerbosityLevel
Definition: CosmicClusterAlgo.h:30
CosmicClusterProducer::~CosmicClusterProducer
~CosmicClusterProducer() override
Definition: CosmicClusterProducer.cc:158
Handle.h
CosmicClusterProducer::counterExceeded
bool counterExceeded() const
Definition: CosmicClusterProducer.cc:71
mps_fire.i
i
Definition: mps_fire.py:428
PositionCalc.h
CosmicClusterProducer::barrelClusterCollection_
std::string barrelClusterCollection_
Definition: CosmicClusterProducer.cc:57
MessageLogger.h
edm::Handle::product
T const * product() const
Definition: Handle.h:70
CosmicClusterAlgo.h
CosmicClusterProducer::ebUHitsToken_
edm::EDGetTokenT< EcalUncalibratedRecHitCollection > ebUHitsToken_
Definition: CosmicClusterProducer.cc:53
ESHandle.h
BasicCluster.h
edm::EDGetTokenT
Definition: EDGetToken.h:33
CosmicClusterProducer::island_p
CosmicClusterAlgo * island_p
Definition: CosmicClusterProducer.cc:69
EBDetId.h
EcalBarrelTopology.h
CaloGeometry::getSubdetectorGeometry
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:34
CosmicClusterAlgo::endcap
Definition: CosmicClusterAlgo.h:29
EDProducer.h
edm::SortedCollection< EcalRecHit >
CosmicClusterProducer::CosmicClusterProducer
CosmicClusterProducer(const edm::ParameterSet &ps)
Definition: CosmicClusterProducer.cc:87
CosmicClusterProducer::nEvt_
int nEvt_
Definition: CosmicClusterProducer.cc:46
MonitorAlCaEcalPi0_cfi.posCalcParameters
posCalcParameters
Definition: MonitorAlCaEcalPi0_cfi.py:72
ClusterShapeAlgo.h
edm::Handle
Definition: AssociativeIterator.h:50
ESGetToken.h
EcalBarrel
Definition: EcalSubdetector.h:10
EcalRecHitCollections.h
BasicClusterFwd.h
edm::Ref
Definition: AssociativeIterator.h:58
CosmicClusterAlgo::EcalPart
EcalPart
Definition: CosmicClusterAlgo.h:29
CosmicClusterAlgo::makeClusters
std::vector< reco::BasicCluster > makeClusters(const EcalRecHitCollection *hits, const EcalUncalibratedRecHitCollection *uncalibhits, const CaloSubdetectorGeometry *geometry, const CaloSubdetectorTopology *topology_p, const CaloSubdetectorGeometry *geometryES_p, EcalPart ecalPart, bool regional=false, const std::vector< RectangularEtaPhiRegion > &regions=std::vector< RectangularEtaPhiRegion >())
Definition: CosmicClusterAlgo.cc:16
CosmicClusterProducer
Definition: CosmicClusterProducer.cc:36
MakerMacros.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
ClusterShapeFwd.h
edm::PtrVector< CaloCluster >
CosmicClusterProducer::caloGeometryToken_
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeometryToken_
Definition: CosmicClusterProducer.cc:55
reco::ClusterShape
Definition: ClusterShape.h:21
edm::ESHandle< CaloGeometry >
CaloClusterFwd.h
CosmicClusterProducer::endcapClusterShapeAssociation_
std::string endcapClusterShapeAssociation_
Definition: CosmicClusterProducer.cc:65
EcalRecHit.h
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
ClusterShapeAlgo
Definition: ClusterShapeAlgo.h:35
reco::BasicClusterCollection
std::vector< BasicCluster > BasicClusterCollection
collection of BasicCluster objects
Definition: BasicClusterFwd.h:16
CaloGeometryRecord.h
EcalEndcap
Definition: EcalSubdetector.h:10
bsc_activity_cfg.clusters
clusters
Definition: bsc_activity_cfg.py:36
ClusterShape.h
CosmicClusterProducer::shapeAlgo_
ClusterShapeAlgo shapeAlgo_
Definition: CosmicClusterProducer.cc:68
CaloSubdetectorGeometry.h
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
CosmicClusterProducer::barrelClusterShapeAssociation_
std::string barrelClusterShapeAssociation_
Definition: CosmicClusterProducer.cc:64
CosmicClusterProducer::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: CosmicClusterProducer.cc:160
EcalEndcapTopology.h
CosmicClusterProducer::endcapClusterCollection_
std::string endcapClusterCollection_
Definition: CosmicClusterProducer.cc:58
CosmicClusterAlgo
Definition: CosmicClusterAlgo.h:27
PositionCalc
Definition: PositionCalc.h:29
createfilelist.int
int
Definition: createfilelist.py:10
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:155
edm::stream::EDProducer
Definition: EDProducer.h:36
edm::EventSetup
Definition: EventSetup.h:58
DetId::Ecal
Definition: DetId.h:27
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::ESGetToken< CaloGeometry, CaloGeometryRecord >
CosmicClusterAlgo::pERROR
Definition: CosmicClusterAlgo.h:30
CosmicClusterProducer::outputValidationInfo
void outputValidationInfo(reco::CaloClusterPtrVector &clusterPtrVector)
EcalPreshower
Definition: EcalSubdetector.h:10
CaloSubdetectorTopology.h
CaloCellGeometry.h
ClusterShapeAlgo::Calculate
reco::ClusterShape Calculate(const reco::BasicCluster &passedCluster, const EcalRecHitCollection *hits, const CaloSubdetectorGeometry *geometry, const CaloSubdetectorTopology *topology)
Definition: ClusterShapeAlgo.cc:21
eostools.move
def move(src, dest)
Definition: eostools.py:511
edm::OrphanHandle
Definition: EDProductfwd.h:39
CosmicClusterAlgo::pWARNING
Definition: CosmicClusterAlgo.h:30
CaloGeometry.h
CosmicClusterProducer::nMaxPrintout_
int nMaxPrintout_
Definition: CosmicClusterProducer.cc:45
EventSetup.h
CaloSubdetectorGeometry
Definition: CaloSubdetectorGeometry.h:22
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
Exception.h
CosmicClusterProducer::ebHitsToken_
edm::EDGetTokenT< EcalRecHitCollection > ebHitsToken_
Definition: CosmicClusterProducer.cc:50
ParameterSet.h
CosmicClusterProducer::verbosity
CosmicClusterAlgo::VerbosityLevel verbosity
Definition: CosmicClusterProducer.cc:48
CosmicClusterProducer::clustershapecollectionEB_
std::string clustershapecollectionEB_
Definition: CosmicClusterProducer.cc:60
CosmicClusterAlgo::pDEBUG
Definition: CosmicClusterAlgo.h:30
edm::Event
Definition: Event.h:73
CosmicClusterAlgo::barrel
Definition: CosmicClusterAlgo.h:29
CosmicClusterProducer::clustershapecollectionEE_
std::string clustershapecollectionEE_
Definition: CosmicClusterProducer.cc:61
edm::InputTag
Definition: InputTag.h:15
BasicClusterShapeAssociation.h
CosmicClusterAlgo::pINFO
Definition: CosmicClusterAlgo.h:30
CosmicClusterProducer::eeUHitsToken_
edm::EDGetTokenT< EcalUncalibratedRecHitCollection > eeUHitsToken_
Definition: CosmicClusterProducer.cc:54
CosmicClusterProducer::eeHitsToken_
edm::EDGetTokenT< EcalRecHitCollection > eeHitsToken_
Definition: CosmicClusterProducer.cc:51
CosmicClusterProducer::posCalculator_
PositionCalc posCalculator_
Definition: CosmicClusterProducer.cc:67
CosmicClusterProducer::clusterizeECALPart
void clusterizeECALPart(edm::Event &evt, const edm::EventSetup &es, const edm::EDGetTokenT< EcalRecHitCollection > &hitsToken, const edm::EDGetTokenT< EcalUncalibratedRecHitCollection > &uhitsToken, const std::string &clusterCollection, const std::string &clusterShapeAssociation, const CosmicClusterAlgo::EcalPart &ecalPart)
Definition: CosmicClusterProducer.cc:178