CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC2_patch1/src/RecoEcal/EgammaClusterProducers/src/PFSuperClusterProducer.cc

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   // parameters for clustering
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   //double threshPFClusterMustacheOutBarrel = iConfig.getParameter<double>("thresh_PFClusterMustacheOutBarrel");
00046   //double threshPFClusterMustacheOutEndcap = iConfig.getParameter<double>("thresh_PFClusterMustacheOutEndcap");
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   //superClusterAlgo_.setThreshPFClusterMustacheOutBarrel( threshPFClusterMustacheOutBarrel );
00068   //superClusterAlgo_.setThreshPFClusterMustacheOutEndcap( threshPFClusterMustacheOutEndcap );
00069 
00070   //Load the ECAL energy calibration
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   //produces<reco::BasicClusterCollection>(PFBasicClusterCollectionPreshower_);
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   //Load the pfcluster collections
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   // do BARREL clustering 
00122 
00123   std::auto_ptr< reco::BasicClusterCollection >outBasicClustersBarrel (new reco::BasicClusterCollection);
00124   superClusterAlgo_.doClustering( pfclustersHandle, outBasicClustersBarrel, thePFEnergyCalibration_ , 0 );
00125   //cout << "doBarrelClustering done"<<endl; 
00126 
00127   const edm::OrphanHandle<reco::BasicClusterCollection> bcRefProdBarrel = iEvent.put(outBasicClustersBarrel,PFBasicClusterCollectionBarrel_);
00128   //cout << "outBasicClusters are put in the event" << endl;
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   //cout << "outSuperClusters are put in the event" << endl;
00135 
00136 
00137   //do ENDCAP clustering
00138 
00139   std::auto_ptr< reco::BasicClusterCollection >outBasicClustersEndcap (new reco::BasicClusterCollection);
00140   superClusterAlgo_.doClustering( pfclustersHandle, outBasicClustersEndcap, thePFEnergyCalibration_ , 1);
00141   //cout << "doBarrelClustering done"<<endl;
00142 
00143   const edm::OrphanHandle<reco::BasicClusterCollection> bcRefProdEndcap = iEvent.put(outBasicClustersEndcap,PFBasicClusterCollectionEndcap_);
00144   //cout << "outBasicClusters are put in the event" << endl;
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   //cout << "outSuperClusters are put in the event" << endl;
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