39 const std::string ClusterType__Mustache(
"Mustache");
42 const std::string EnergyWeight__CalibratedNoPS(
"CalibratedNoPS");
43 const std::string EnergyWeight__CalibratedTotal(
"CalibratedTotal");
52 superClusterAlgo_.setUseRegression(iConfig.
getParameter<
bool>(
"useRegression"));
54 isOOTCollection_ = iConfig.
getParameter<
bool>(
"isOOTCollection");
55 superClusterAlgo_.setIsOOTCollection(isOOTCollection_);
57 superClusterAlgo_.setTokens(iConfig,consumesCollector());
60 if( _typename == ClusterType__BOX ) {
62 }
else if ( _typename == ClusterType__Mustache ) {
66 <<
"You have not chosen a valid clustering type," 67 <<
" please choose from \"Box\" or \"Mustache\"!";
71 if( _weightname == EnergyWeight__Raw ) {
73 }
else if ( _weightname == EnergyWeight__CalibratedNoPS ) {
75 }
else if ( _weightname == EnergyWeight__CalibratedTotal) {
79 <<
"You have not chosen a valid energy weighting scheme," 80 <<
" please choose from \"Raw\", \"CalibratedNoPS\", or" 81 <<
" \"CalibratedTotal\"!";
88 bool useDynamicDPhi = iConfig.
getParameter<
bool>(
"useDynamicDPhiWindow");
90 double threshPFClusterSeedBarrel = iConfig.
getParameter<
double>(
"thresh_PFClusterSeedBarrel");
91 double threshPFClusterBarrel = iConfig.
getParameter<
double>(
"thresh_PFClusterBarrel");
93 double threshPFClusterSeedEndcap = iConfig.
getParameter<
double>(
"thresh_PFClusterSeedEndcap");
94 double threshPFClusterEndcap = iConfig.
getParameter<
double>(
"thresh_PFClusterEndcap");
96 double phiwidthSuperClusterBarrel = iConfig.
getParameter<
double>(
"phiwidth_SuperClusterBarrel");
97 double etawidthSuperClusterBarrel = iConfig.
getParameter<
double>(
"etawidth_SuperClusterBarrel");
99 double phiwidthSuperClusterEndcap = iConfig.
getParameter<
double>(
"phiwidth_SuperClusterEndcap");
100 double etawidthSuperClusterEndcap = iConfig.
getParameter<
double>(
"etawidth_SuperClusterEndcap");
102 double threshPFClusterES = iConfig.
getParameter<
double>(
"thresh_PFClusterES");
110 iConfig.
getParameter<
double>(
"satelliteClusterSeedThreshold");
112 iConfig.
getParameter<
double>(
"satelliteMajorityFraction");
115 superClusterAlgo_.setVerbosityLevel(verbose_);
116 superClusterAlgo_.setClusteringType(_theclusteringtype);
117 superClusterAlgo_.setEnergyWeighting(_theenergyweight);
118 superClusterAlgo_.setUseETForSeeding(seedThresholdIsET);
119 superClusterAlgo_.setUseDynamicDPhi(useDynamicDPhi);
121 superClusterAlgo_.setThreshSuperClusterEt( iConfig.
getParameter<
double>(
"thresh_SCEt") );
123 superClusterAlgo_.setThreshPFClusterSeedBarrel( threshPFClusterSeedBarrel );
124 superClusterAlgo_.setThreshPFClusterBarrel( threshPFClusterBarrel );
126 superClusterAlgo_.setThreshPFClusterSeedEndcap( threshPFClusterSeedEndcap );
127 superClusterAlgo_.setThreshPFClusterEndcap( threshPFClusterEndcap );
129 superClusterAlgo_.setPhiwidthSuperClusterBarrel( phiwidthSuperClusterBarrel );
130 superClusterAlgo_.setEtawidthSuperClusterBarrel( etawidthSuperClusterBarrel );
132 superClusterAlgo_.setPhiwidthSuperClusterEndcap( phiwidthSuperClusterEndcap );
133 superClusterAlgo_.setEtawidthSuperClusterEndcap( etawidthSuperClusterEndcap );
135 superClusterAlgo_.setThreshPFClusterES( threshPFClusterES );
137 superClusterAlgo_.setSatelliteMerging( doSatelliteClusterMerge );
138 superClusterAlgo_.setSatelliteThreshold( satelliteClusterSeedThreshold );
139 superClusterAlgo_.setMajorityFraction( satelliteMajorityFraction );
140 superClusterAlgo_.setDropUnseedable( dropUnseedable );
145 thePFEnergyCalibration_ =
146 std::make_shared<PFEnergyCalibration>();
147 superClusterAlgo_.setPFClusterCalibration(thePFEnergyCalibration_);
148 superClusterAlgo_.setUsePS(iConfig.
getParameter<
bool>(
"use_preshower"));
150 bool applyCrackCorrections_ = iConfig.
getParameter<
bool>(
"applyCrackCorrections");
151 superClusterAlgo_.setCrackCorrections(applyCrackCorrections_);
153 PFBasicClusterCollectionBarrel_ = iConfig.
getParameter<
string>(
"PFBasicClusterCollectionBarrel");
154 PFSuperClusterCollectionBarrel_ = iConfig.
getParameter<
string>(
"PFSuperClusterCollectionBarrel");
156 PFBasicClusterCollectionEndcap_ = iConfig.
getParameter<
string>(
"PFBasicClusterCollectionEndcap");
157 PFSuperClusterCollectionEndcap_ = iConfig.
getParameter<
string>(
"PFSuperClusterCollectionEndcap");
159 PFBasicClusterCollectionPreshower_ = iConfig.
getParameter<
string>(
"PFBasicClusterCollectionPreshower");
160 PFSuperClusterCollectionEndcapWithPreshower_ = iConfig.
getParameter<
string>(
"PFSuperClusterCollectionEndcapWithPreshower");
162 PFClusterAssociationEBEE_ =
"PFClusterAssociationEBEE";
163 PFClusterAssociationES_ =
"PFClusterAssociationES";
165 produces<reco::SuperClusterCollection>(PFSuperClusterCollectionBarrel_);
166 produces<reco::SuperClusterCollection>(PFSuperClusterCollectionEndcapWithPreshower_);
167 produces<reco::CaloClusterCollection>(PFBasicClusterCollectionBarrel_);
168 produces<reco::CaloClusterCollection>(PFBasicClusterCollectionEndcap_);
169 produces<reco::CaloClusterCollection>(PFBasicClusterCollectionPreshower_);
170 produces<edm::ValueMap<reco::CaloClusterPtr> >(PFClusterAssociationEBEE_);
171 produces<edm::ValueMap<reco::CaloClusterPtr> >(PFClusterAssociationES_);
180 superClusterAlgo_.update(iE);
188 superClusterAlgo_.loadAndSortPFClusters(iEvent);
189 superClusterAlgo_.run();
192 auto caloClustersEB = std::make_unique<reco::CaloClusterCollection>();
193 auto caloClustersEE = std::make_unique<reco::CaloClusterCollection>();
194 auto caloClustersES = std::make_unique<reco::CaloClusterCollection>();
196 std::map<reco::CaloClusterPtr, unsigned int> pfClusterMapEB;
197 std::map<reco::CaloClusterPtr, unsigned int> pfClusterMapEE;
198 std::map<reco::CaloClusterPtr, unsigned int> pfClusterMapES;
201 for(
const auto& ebsc : *(superClusterAlgo_.getEBOutputSCCollection()) ) {
203 if (!pfClusterMapEB.count(*pfclus)) {
205 caloClustersEB->push_back(caloclus);
206 pfClusterMapEB[*pfclus] = caloClustersEB->size() - 1;
210 <<
"Found an EB pfcluster matched to more than one EB supercluster!" 215 for(
const auto& eesc : *(superClusterAlgo_.getEEOutputSCCollection()) ) {
217 if (!pfClusterMapEE.count(*pfclus)) {
219 caloClustersEE->push_back(caloclus);
220 pfClusterMapEE[*pfclus] = caloClustersEE->size() - 1;
224 <<
"Found an EE pfcluster matched to more than one EE supercluster!" 229 if (!pfClusterMapES.count(*pfclus)) {
231 caloClustersES->push_back(caloclus);
232 pfClusterMapES[*pfclus] = caloClustersES->size() - 1;
236 <<
"Found an ES pfcluster matched to more than one EE supercluster!" 243 auto pfClusterAssociationEBEE = std::make_unique<edm::ValueMap<reco::CaloClusterPtr>>();
244 auto pfClusterAssociationES = std::make_unique<edm::ValueMap<reco::CaloClusterPtr>>();
247 std::vector<reco::CaloClusterPtr> clusptrsEB(caloClustersEB->size());
248 std::vector<reco::CaloClusterPtr> clusptrsEE(caloClustersEE->size());
249 std::vector<reco::CaloClusterPtr> clusptrsES(caloClustersES->size());
257 for(
auto& ebsc : *(superClusterAlgo_.getEBOutputSCCollection()) ) {
259 ebsc.setSeed(seedptr);
263 int caloclusidx = pfClusterMapEB[*pfclus];
266 clusptrsEB[caloclusidx] = *pfclus;
268 ebsc.setClusters(clusters);
270 for(
auto& eesc : *(superClusterAlgo_.getEEOutputSCCollection()) ) {
272 eesc.setSeed(seedptr);
276 int caloclusidx = pfClusterMapEE[*pfclus];
279 clusptrsEE[caloclusidx] = *pfclus;
281 eesc.setClusters(clusters);
285 int caloclusidx = pfClusterMapES[*pfclus];
288 clusptrsES[caloclusidx] = *pfclus;
290 eesc.setPreshowerClusters(psclusters);
295 fillerEBEE.
insert(caloClusHandleEB, clusptrsEB.begin(), clusptrsEB.end());
296 fillerEBEE.
insert(caloClusHandleEE, clusptrsEE.begin(), clusptrsEE.end());
300 fillerES.
insert(caloClusHandleES, clusptrsES.begin(), clusptrsES.end());
304 iEvent.
put(
std::move(pfClusterAssociationEBEE),PFClusterAssociationEBEE_);
305 iEvent.
put(
std::move(pfClusterAssociationES),PFClusterAssociationES_);
306 iEvent.
put(
std::move(superClusterAlgo_.getEBOutputSCCollection()),
307 PFSuperClusterCollectionBarrel_);
308 iEvent.
put(
std::move(superClusterAlgo_.getEEOutputSCCollection()),
309 PFSuperClusterCollectionEndcapWithPreshower_);
314 desc.
add<
std::string>(
"PFSuperClusterCollectionEndcap",
"particleFlowSuperClusterECALEndcap");
315 desc.
add<
bool>(
"doSatelliteClusterMerge",
false);
316 desc.
add<
double>(
"thresh_PFClusterBarrel",0.0);
317 desc.
add<
std::string>(
"PFBasicClusterCollectionBarrel",
"particleFlowBasicClusterECALBarrel");
318 desc.
add<
bool>(
"useRegression",
true);
319 desc.
add<
double>(
"satelliteMajorityFraction",0.5);
320 desc.
add<
double>(
"thresh_PFClusterEndcap",0.0);
322 desc.
add<
std::string>(
"PFBasicClusterCollectionPreshower",
"particleFlowBasicClusterECALPreshower");
323 desc.
add<
bool>(
"use_preshower",
true);
325 desc.
add<
double>(
"thresh_SCEt",4.0);
326 desc.
add<
double>(
"etawidth_SuperClusterEndcap",0.04);
327 desc.
add<
double>(
"phiwidth_SuperClusterEndcap",0.6);
328 desc.
add<
bool>(
"useDynamicDPhiWindow",
true);
329 desc.
add<
std::string>(
"PFSuperClusterCollectionBarrel",
"particleFlowSuperClusterECALBarrel");
332 psd0.
add<
bool>(
"isHLT",
false);
335 psd0.
add<
std::string>(
"regressionKeyEB",
"pfscecal_EBCorrection_offline_v1");
336 psd0.
add<
std::string>(
"regressionKeyEE",
"pfscecal_EECorrection_offline_v1");
337 psd0.
add<
std::string>(
"uncertaintyKeyEB",
"pfscecal_EBUncertainty_offline_v1");
338 psd0.
add<
std::string>(
"uncertaintyKeyEE",
"pfscecal_EEUncertainty_offline_v1");
340 psd0.
add<
double>(
"eRecHitThreshold", 1.);
343 desc.
add<
bool>(
"applyCrackCorrections",
false);
344 desc.
add<
double>(
"satelliteClusterSeedThreshold",50.0);
345 desc.
add<
double>(
"etawidth_SuperClusterBarrel",0.04);
346 desc.
add<
std::string>(
"PFBasicClusterCollectionEndcap",
"particleFlowBasicClusterECALEndcap");
348 desc.
add<
double>(
"thresh_PFClusterSeedBarrel",1.0);
352 desc.
add<
double>(
"thresh_PFClusterSeedEndcap",1.0);
353 desc.
add<
double>(
"phiwidth_SuperClusterBarrel",0.6);
354 desc.
add<
double>(
"thresh_PFClusterES",0.0);
355 desc.
add<
bool>(
"seedThresholdIsET",
true);
356 desc.
add<
bool>(
"isOOTCollection",
false);
359 desc.
add<
std::string>(
"PFSuperClusterCollectionEndcapWithPreshower",
"particleFlowSuperClusterECALEndcapWithPreshower");
360 desc.
add<
bool>(
"dropUnseedable",
false);
361 descriptions.
add(
"particleFlowSuperClusterECALMustache",desc);
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
void push_back(Ptr< T > const &iPtr)
satelliteClusterSeedThreshold
void insert(const H &h, I begin, I end)
PFECALSuperClusterProducer(const edm::ParameterSet &)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
~PFECALSuperClusterProducer() override
satelliteMajorityFraction
void produce(edm::Event &, const edm::EventSetup &) override
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) override
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)