CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/RecoEcal/EgammaClusterProducers/src/PFECALSuperClusterProducer.cc

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   // parameters for clustering
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   //double threshPFClusterMustacheOutBarrel = iConfig.getParameter<double>("thresh_PFClusterMustacheOutBarrel");
00063   //double threshPFClusterMustacheOutEndcap = iConfig.getParameter<double>("thresh_PFClusterMustacheOutEndcap");
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   //superClusterAlgo_.setThreshPFClusterMustacheOutBarrel( threshPFClusterMustacheOutBarrel );
00094   //superClusterAlgo_.setThreshPFClusterMustacheOutEndcap( threshPFClusterMustacheOutEndcap );
00095 
00096   //Load the ECAL energy calibration
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   //Load the pfcluster collections
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   // do clustering
00143   superClusterAlgo_.loadAndSortPFClusters(*pfclustersHandle,
00144                                           *preshowerpfclustersHandle);
00145   superClusterAlgo_.run();
00146 
00147   //store in the event
00148   iEvent.put(superClusterAlgo_.getEBOutputSCCollection(),
00149              PFSuperClusterCollectionBarrel_);
00150   iEvent.put(superClusterAlgo_.getEEOutputSCCollection(), 
00151              PFSuperClusterCollectionEndcapWithPreshower_);
00152 }
00153   
00154 
00155