Go to the documentation of this file.00001 #include "RecoEcal/EgammaClusterProducers/interface/PFECALSuperClusterProducer.h"
00002
00003 #include <memory>
00004
00005 #include "RecoEcal/EgammaClusterAlgos/interface/PFECALSuperClusterAlgo.h"
00006
00007 #include "DataFormats/ParticleFlowReco/interface/PFRecHit.h"
00008 #include "DataFormats/ParticleFlowReco/interface/PFCluster.h"
00009 #include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h"
00010
00011 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00012 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
00013
00014 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00015 #include "FWCore/Framework/interface/ESHandle.h"
00016 #include "FWCore/Framework/interface/EventSetup.h"
00017
00018 using namespace std;
00019 using namespace edm;
00020
00021 namespace {
00022 const std::string ClusterType__BOX("Box");
00023 const std::string ClusterType__Mustache("Mustache");
00024 }
00025
00026 PFECALSuperClusterProducer::PFECALSuperClusterProducer(const edm::ParameterSet& iConfig)
00027 {
00028
00029 verbose_ =
00030 iConfig.getUntrackedParameter<bool>("verbose",false);
00031
00032 std::string _typename = iConfig.getParameter<std::string>("ClusteringType");
00033 if( _typename == ClusterType__BOX ) {
00034 _theclusteringtype = PFECALSuperClusterAlgo::kBOX;
00035 } else if ( _typename == ClusterType__Mustache ) {
00036 _theclusteringtype = PFECALSuperClusterAlgo::kMustache;
00037 } else {
00038 throw cms::Exception("InvalidClusteringType")
00039 << "You have not chosen a valid clustering type,"
00040 << " please choose from \"Box\" or \"Mustache\"!";
00041 }
00042
00043
00044
00045
00046 bool useDynamicDPhi = iConfig.getParameter<bool>("useDynamicDPhiWindow");
00047
00048 double threshPFClusterSeedBarrel = iConfig.getParameter<double>("thresh_PFClusterSeedBarrel");
00049 double threshPFClusterBarrel = iConfig.getParameter<double>("thresh_PFClusterBarrel");
00050
00051 double threshPFClusterSeedEndcap = iConfig.getParameter<double>("thresh_PFClusterSeedEndcap");
00052 double threshPFClusterEndcap = iConfig.getParameter<double>("thresh_PFClusterEndcap");
00053
00054 double phiwidthSuperClusterBarrel = iConfig.getParameter<double>("phiwidth_SuperClusterBarrel");
00055 double etawidthSuperClusterBarrel = iConfig.getParameter<double>("etawidth_SuperClusterBarrel");
00056
00057 double phiwidthSuperClusterEndcap = iConfig.getParameter<double>("phiwidth_SuperClusterEndcap");
00058 double etawidthSuperClusterEndcap = iConfig.getParameter<double>("etawidth_SuperClusterEndcap");
00059
00060 double threshPFClusterES = iConfig.getParameter<double>("thresh_PFClusterES");
00061
00062
00063
00064
00065 double doSatelliteClusterMerge =
00066 iConfig.getParameter<bool>("doSatelliteClusterMerge");
00067 double satelliteClusterSeedThreshold =
00068 iConfig.getParameter<double>("satelliteClusterSeedThreshold");
00069 double satelliteMajorityFraction =
00070 iConfig.getParameter<double>("satelliteMajorityFraction");
00071
00072 superClusterAlgo_.setVerbosityLevel(verbose_);
00073 superClusterAlgo_.setClusteringType(_theclusteringtype);
00074 superClusterAlgo_.setUseDynamicDPhi(useDynamicDPhi);
00075
00076 superClusterAlgo_.setThreshPFClusterSeedBarrel( threshPFClusterSeedBarrel );
00077 superClusterAlgo_.setThreshPFClusterBarrel( threshPFClusterBarrel );
00078
00079 superClusterAlgo_.setThreshPFClusterSeedEndcap( threshPFClusterSeedEndcap );
00080 superClusterAlgo_.setThreshPFClusterEndcap( threshPFClusterEndcap );
00081
00082 superClusterAlgo_.setPhiwidthSuperClusterBarrel( phiwidthSuperClusterBarrel );
00083 superClusterAlgo_.setEtawidthSuperClusterBarrel( etawidthSuperClusterBarrel );
00084
00085 superClusterAlgo_.setPhiwidthSuperClusterEndcap( phiwidthSuperClusterEndcap );
00086 superClusterAlgo_.setEtawidthSuperClusterEndcap( etawidthSuperClusterEndcap );
00087
00088 superClusterAlgo_.setThreshPFClusterES( threshPFClusterES );
00089
00090 superClusterAlgo_.setSatelliteMerging( doSatelliteClusterMerge );
00091 superClusterAlgo_.setSatelliteThreshold( satelliteClusterSeedThreshold );
00092 superClusterAlgo_.setMajorityFraction( satelliteMajorityFraction );
00093
00094
00095
00096
00097 thePFEnergyCalibration_ =
00098 std::shared_ptr<PFEnergyCalibration>(new PFEnergyCalibration());
00099 superClusterAlgo_.setPFClusterCalibration(thePFEnergyCalibration_);
00100 superClusterAlgo_.setUsePS(iConfig.getParameter<bool>("use_preshower"));
00101
00102 bool applyCrackCorrections_ = iConfig.getParameter<bool>("applyCrackCorrections");
00103 superClusterAlgo_.setCrackCorrections(applyCrackCorrections_);
00104
00105
00106
00107 inputTagPFClusters_ = iConfig.getParameter<InputTag>("PFClusters");
00108 inputTagPFClustersES_ = iConfig.getParameter<InputTag>("PFClustersES");
00109
00110 PFBasicClusterCollectionBarrel_ = iConfig.getParameter<string>("PFBasicClusterCollectionBarrel");
00111 PFSuperClusterCollectionBarrel_ = iConfig.getParameter<string>("PFSuperClusterCollectionBarrel");
00112
00113 PFBasicClusterCollectionEndcap_ = iConfig.getParameter<string>("PFBasicClusterCollectionEndcap");
00114 PFSuperClusterCollectionEndcap_ = iConfig.getParameter<string>("PFSuperClusterCollectionEndcap");
00115
00116 PFBasicClusterCollectionPreshower_ = iConfig.getParameter<string>("PFBasicClusterCollectionPreshower");
00117 PFSuperClusterCollectionEndcapWithPreshower_ = iConfig.getParameter<string>("PFSuperClusterCollectionEndcapWithPreshower");
00118
00119 produces<reco::SuperClusterCollection>(PFSuperClusterCollectionBarrel_);
00120 produces<reco::SuperClusterCollection>(PFSuperClusterCollectionEndcapWithPreshower_);
00121 }
00122
00123
00124
00125 PFECALSuperClusterProducer::~PFECALSuperClusterProducer() {}
00126
00127
00128
00129
00130 void PFECALSuperClusterProducer::produce(edm::Event& iEvent,
00131 const edm::EventSetup& iSetup) {
00132
00133
00134
00135 edm::Handle<edm::View<reco::PFCluster> > pfclustersHandle;
00136 iEvent.getByLabel( inputTagPFClusters_, pfclustersHandle );
00137
00138 edm::Handle<edm::View<reco::PFCluster> > preshowerpfclustersHandle;
00139 iEvent.getByLabel( inputTagPFClustersES_, preshowerpfclustersHandle);
00140
00141
00142
00143 superClusterAlgo_.loadAndSortPFClusters(*pfclustersHandle,
00144 *preshowerpfclustersHandle);
00145 superClusterAlgo_.run();
00146
00147
00148 iEvent.put(superClusterAlgo_.getEBOutputSCCollection(),
00149 PFSuperClusterCollectionBarrel_);
00150 iEvent.put(superClusterAlgo_.getEEOutputSCCollection(),
00151 PFSuperClusterCollectionEndcapWithPreshower_);
00152 }
00153
00154
00155