Go to the documentation of this file.00001 #include "RecoEcal/EgammaClusterProducers/interface/PFSuperClusterProducer.h"
00002
00003 #include <memory>
00004
00005 #include "RecoEcal/EgammaClusterAlgos/interface/PFSuperClusterAlgo.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 PFSuperClusterProducer::PFSuperClusterProducer(const edm::ParameterSet& iConfig)
00022 {
00023
00024 verbose_ =
00025 iConfig.getUntrackedParameter<bool>("verbose",false);
00026
00027
00028
00029
00030
00031 double threshPFClusterSeedBarrel = iConfig.getParameter<double>("thresh_PFClusterSeedBarrel");
00032 double threshPFClusterBarrel = iConfig.getParameter<double>("thresh_PFClusterBarrel");
00033
00034 double threshPFClusterSeedEndcap = iConfig.getParameter<double>("thresh_PFClusterSeedEndcap");
00035 double threshPFClusterEndcap = iConfig.getParameter<double>("thresh_PFClusterEndcap");
00036
00037 double phiwidthSuperClusterBarrel = iConfig.getParameter<double>("phiwidth_SuperClusterBarrel");
00038 double etawidthSuperClusterBarrel = iConfig.getParameter<double>("etawidth_SuperClusterBarrel");
00039
00040 double phiwidthSuperClusterEndcap = iConfig.getParameter<double>("phiwidth_SuperClusterEndcap");
00041 double etawidthSuperClusterEndcap = iConfig.getParameter<double>("etawidth_SuperClusterEndcap");
00042
00043 double threshPFClusterES = iConfig.getParameter<double>("thresh_PFClusterES");
00044
00045
00046
00047
00048 double doMustacheCut = iConfig.getParameter<bool>("doMustachePUcleaning");
00049
00050 superClusterAlgo_.setVerbosityLevel(verbose_);
00051
00052 superClusterAlgo_.setThreshPFClusterSeedBarrel( threshPFClusterSeedBarrel );
00053 superClusterAlgo_.setThreshPFClusterBarrel( threshPFClusterBarrel );
00054
00055 superClusterAlgo_.setThreshPFClusterSeedEndcap( threshPFClusterSeedEndcap );
00056 superClusterAlgo_.setThreshPFClusterEndcap( threshPFClusterEndcap );
00057
00058 superClusterAlgo_.setPhiwidthSuperClusterBarrel( phiwidthSuperClusterBarrel );
00059 superClusterAlgo_.setEtawidthSuperClusterBarrel( etawidthSuperClusterBarrel );
00060
00061 superClusterAlgo_.setPhiwidthSuperClusterEndcap( phiwidthSuperClusterEndcap );
00062 superClusterAlgo_.setEtawidthSuperClusterEndcap( etawidthSuperClusterEndcap );
00063
00064 superClusterAlgo_.setThreshPFClusterES( threshPFClusterES );
00065
00066 superClusterAlgo_.setMustacheCut( doMustacheCut );
00067
00068
00069
00070
00071 thePFEnergyCalibration_ = boost::shared_ptr<PFEnergyCalibration>(new PFEnergyCalibration());
00072
00073
00074
00075 bool applyCrackCorrections_ = iConfig.getParameter<bool>("applyCrackCorrections");
00076 superClusterAlgo_.setCrackCorrections(applyCrackCorrections_);
00077
00078
00079
00080 inputTagPFClusters_ = iConfig.getParameter<InputTag>("PFClusters");
00081 inputTagPFClustersES_ = iConfig.getParameter<InputTag>("PFClustersES");
00082
00083 PFBasicClusterCollectionBarrel_ = iConfig.getParameter<string>("PFBasicClusterCollectionBarrel");
00084 PFSuperClusterCollectionBarrel_ = iConfig.getParameter<string>("PFSuperClusterCollectionBarrel");
00085
00086 PFBasicClusterCollectionEndcap_ = iConfig.getParameter<string>("PFBasicClusterCollectionEndcap");
00087 PFSuperClusterCollectionEndcap_ = iConfig.getParameter<string>("PFSuperClusterCollectionEndcap");
00088
00089 PFBasicClusterCollectionPreshower_ = iConfig.getParameter<string>("PFBasicClusterCollectionPreshower");
00090 PFSuperClusterCollectionEndcapWithPreshower_ = iConfig.getParameter<string>("PFSuperClusterCollectionEndcapWithPreshower");
00091
00092 produces<reco::BasicClusterCollection>(PFBasicClusterCollectionBarrel_);
00093 produces<reco::SuperClusterCollection>(PFSuperClusterCollectionBarrel_);
00094 produces<reco::BasicClusterCollection>(PFBasicClusterCollectionEndcap_);
00095 produces<reco::SuperClusterCollection>(PFSuperClusterCollectionEndcap_);
00096
00097 produces<reco::SuperClusterCollection>(PFSuperClusterCollectionEndcapWithPreshower_);
00098
00099
00100 }
00101
00102
00103
00104 PFSuperClusterProducer::~PFSuperClusterProducer() {}
00105
00106
00107
00108
00109 void PFSuperClusterProducer::produce(edm::Event& iEvent,
00110 const edm::EventSetup& iSetup) {
00111
00112
00113
00114 edm::Handle<reco::PFClusterCollection> pfclustersHandle;
00115 iEvent.getByLabel( inputTagPFClusters_, pfclustersHandle );
00116
00117 edm::Handle<reco::PFClusterCollection> preshowerpfclustersHandle;
00118 iEvent.getByLabel( inputTagPFClustersES_, preshowerpfclustersHandle);
00119
00120
00121
00122
00123 std::auto_ptr< reco::BasicClusterCollection >outBasicClustersBarrel (new reco::BasicClusterCollection);
00124 superClusterAlgo_.doClustering( pfclustersHandle, outBasicClustersBarrel, thePFEnergyCalibration_ , 0 );
00125
00126
00127 const edm::OrphanHandle<reco::BasicClusterCollection> bcRefProdBarrel = iEvent.put(outBasicClustersBarrel,PFBasicClusterCollectionBarrel_);
00128
00129
00130 auto_ptr< reco::SuperClusterCollection > outSuperClustersBarrel(new reco::SuperClusterCollection);
00131 superClusterAlgo_.storeSuperClusters( bcRefProdBarrel, outSuperClustersBarrel );
00132
00133 const edm::OrphanHandle<reco::SuperClusterCollection> scRefProdBarrel = iEvent.put(outSuperClustersBarrel, PFSuperClusterCollectionBarrel_);
00134
00135
00136
00137
00138
00139 std::auto_ptr< reco::BasicClusterCollection >outBasicClustersEndcap (new reco::BasicClusterCollection);
00140 superClusterAlgo_.doClustering( pfclustersHandle, outBasicClustersEndcap, thePFEnergyCalibration_ , 1);
00141
00142
00143 const edm::OrphanHandle<reco::BasicClusterCollection> bcRefProdEndcap = iEvent.put(outBasicClustersEndcap,PFBasicClusterCollectionEndcap_);
00144
00145
00146 auto_ptr< reco::SuperClusterCollection > outSuperClustersEndcap(new reco::SuperClusterCollection);
00147 superClusterAlgo_.storeSuperClusters( bcRefProdEndcap, outSuperClustersEndcap );
00148
00149 const edm::OrphanHandle<reco::SuperClusterCollection> scRefProdEndcap = iEvent.put(outSuperClustersEndcap, PFSuperClusterCollectionEndcap_);
00150
00151
00152
00153 auto_ptr< reco::SuperClusterCollection > outSuperClustersEndcapWithPreshower(new reco::SuperClusterCollection);
00154 superClusterAlgo_.matchSCtoESclusters(preshowerpfclustersHandle, outSuperClustersEndcapWithPreshower, thePFEnergyCalibration_, 1);
00155
00156 const edm::OrphanHandle<reco::SuperClusterCollection> scRefProdEndcapWithPreshower = iEvent.put(outSuperClustersEndcapWithPreshower, PFSuperClusterCollectionEndcapWithPreshower_);
00157
00158
00159 }
00160
00161
00162