diff --git a/Calibration/EcalAlCaRecoProducers/BuildFile.xml b/Calibration/EcalAlCaRecoProducers/BuildFile.xml
index 6df0babbf5d97..eecb65879fbd9 100644
--- a/Calibration/EcalAlCaRecoProducers/BuildFile.xml
+++ b/Calibration/EcalAlCaRecoProducers/BuildFile.xml
@@ -2,26 +2,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/Calibration/EcalAlCaRecoProducers/doc/EcalAlCaRecoProducers.doc b/Calibration/EcalAlCaRecoProducers/doc/EcalAlCaRecoProducers.doc
index 4a434aca0e9ad..a2b8514cd4869 100644
--- a/Calibration/EcalAlCaRecoProducers/doc/EcalAlCaRecoProducers.doc
+++ b/Calibration/EcalAlCaRecoProducers/doc/EcalAlCaRecoProducers.doc
@@ -13,10 +13,75 @@
\section desc Description
-
+This module contains all the plugins and classes used to produce ECAL alcarecos.
+
+\section streamList AlCaRecoStream list
+ - AlCaCalElectron
+ - AlCaUncalElectron
+ - AlCaESAlign
+
+\subsection AlCaESAlign AlCaESAlign
+The aim of this alcareco is to have a reduced dataset with all the information used for ES Alignment.
+
+The event content is defined in ALCARECOEcalESAlign_Output_cff.py
+
+The generalTrack collection (and trackExtras) are reduced by the EcalESAlignTrackReducer plugin in order to save tracks in the ES acceptance
+
+In order to test this alcareco:
+\code
+ cmsDriver.py testES -s ALCA:EcalESAlign --conditions=MCRUN2_74_V1 --filein=root://eoscms//eos/cms/store/relval/CMSSW_7_4_0_pre6/RelValZEE_13/GEN-SIM-RECO/PU25ns_MCRUN2_74_V1-v3/00000/04445CDB-7AAB-E411-8E6E-0025905A605E.root -n 100
+\endcode
+
+\subsection
(THE PACKAGE ADMINISTATOR SHOULD REPLACE THIS SENTENCE WITH HAND-WRITTEN DOCUMENTATION SAYING WHAT THE PACKAGE DOES.)
+\section testInstructions EcalCalElectron and EcalUncalElectron test instructions
+
+\subsection rawToRecoInstructions RAW to RECO production
+\verbatim
+mkdir {Single,Double}Electron-Run2012D/
+SingleElectronRAWFile=/store/data/Run2012D/SingleElectron/RAW/v1/000/208/307/0085A34B-BD3A-E211-B6E9-003048D2BC4C.root
+DoubleElectronRAWFile=/store/data/Run2012D/DoubleElectron/RAW/v1/000/208/686/4A4E42F9-3F3F-E211-A942-003048F118AA.root
+cmsDriver.py reco -s RAW2DIGI,RECO -n 100 --filein=${SingleElectronRAWFile} --data --conditions=auto:run2_data --nThreads=4 --dirout=SingleElectron-Run2012D/
+cmsDriver.py reco -s RAW2DIGI,RECO -n 100 --filein=${DoubleElectronRAWFile} --data --conditions=auto:run2_data --nThreads=4 --dirout=DoubleElectron-Run2012D/
+\endverbatim
+
+\subsection EcalUncalWElectron EcalUncalWElectron production from RAW and RECO files
+\verbatim
+SingleElectronRECOFile=files://$PWD/SingleElectron-Run2012D/reco_RAW2DIGI_RECO.root
+cmsDriver.py reco -s ALCA:EcalUncalWElectron -n 100 --data --conditions=auto:run2_data --nThreads=4 --filein=${SingleElectronRECOFile} --secondfilein=${SingleElectronRAWFile} --dirout=SingleElectron-Run2012D/ --customise_commands="process.options = cms.untracked.PSet(wantSummary = cms.untracked.bool(True))"
+\endverbatim
+
+\subsection EcalUncalZElectron EcalUncalZElectron production from RAW and RECO files
+\verbatim
+DoubleElectronRECOFile=files://$PWD/DoubleElectron-Run2012D/reco_RAW2DIGI_RECO.root
+cmsDriver.py reco -s ALCA:EcalUncalZElectron -n 100 --data --conditions=auto:run2_data --nThreads=4 --filein=${DoubleElectronRECOFile} --secondfilein=${DoubleElectronRAWFile} --dirout=DoubleElectron-Run2012D/ --customise_commands="process.options = cms.untracked.PSet(wantSummary = cms.untracked.bool(True))"
+\endverbatim
+
+
+\subsection EcalCalWElectron EcalCalWElectron production from RAW and RECO files
+\verbatim
+SingleElectronRECOFile=files://$PWD/SingleElectron-Run2012D/reco_RAW2DIGI_RECO.root
+cmsDriver.py reco -s ALCA:EcalCalWElectron -n 100 --data --conditions=auto:run2_data --nThreads=4 --filein=${SingleElectronRECOFile} --secondfilein=${SingleElectronRAWFile} --dirout=SingleElectron-Run2012D/ --customise_commands="process.options = cms.untracked.PSet(wantSummary = cms.untracked.bool(True))"
+\endverbatim
+
+\subsection EcalCalZElectron EcalCalZElectron production from RAW and RECO files
+\verbatim
+DoubleElectronRECOFile=files://$PWD/DoubleElectron-Run2012D/reco_RAW2DIGI_RECO.root
+cmsDriver.py reco -s ALCA:EcalCalZElectron -n 100 --data --conditions=auto:run2_data --nThreads=4 --filein=${DoubleElectronRECOFile} --secondfilein=${DoubleElectronRAWFile} --dirout=DoubleElectron-Run2012D/ --customise_commands="process.options = cms.untracked.PSet(wantSummary = cms.untracked.bool(True))"
+\endverbatim
+
+\subsection rereco ECALELF rereco: EcalRecalElectron production from EcalUncalElectron files
+\verbatim
+EcalUncalWElectronFile=files://$PWD/SingleElectron-Run2012D/EcalUncalWElectron.root
+cmsDriver.py reco -s ALCA:EcalRecalElectron -n 100 --data --conditions=auto:run2_data --nThreads=4 --filein=${EcalUncalWElectronFile} --dirout=SingleElectron-Run2012D/ --customise_commands="process.options = cms.untracked.PSet(wantSummary = cms.untracked.bool(True))" --process=RERECO --customise Calibration/EcalAlCaRecoProducers/customRereco.EcalRecal
+
+EcalUncalZElectronFile=files://$PWD/SingleElectron-Run2012D/EcalUncalZElectron.root
+cmsDriver.py reco -s ALCA:EcalRecalElectron -n 100 --data --conditions=auto:run2_data --nThreads=4 --filein=${EcalUncalWElectronFile --dirout=DoubleElectron-Run2012D/ --customise_commands="process.options = cms.untracked.PSet(wantSummary = cms.untracked.bool(True))" --process=RERECO --customise Calibration/EcalAlCaRecoProducers/customRereco.EcalRecal
+
+\endverbatim
+
\subsection interface Public interface
@@ -29,6 +94,7 @@
+
\subsection modules Modules
diff --git a/Calibration/EcalAlCaRecoProducers/interface/AlCaECALRecHitReducer.h b/Calibration/EcalAlCaRecoProducers/interface/AlCaECALRecHitReducer.h
deleted file mode 100644
index d7b84ceee6a72..0000000000000
--- a/Calibration/EcalAlCaRecoProducers/interface/AlCaECALRecHitReducer.h
+++ /dev/null
@@ -1,99 +0,0 @@
-#ifndef _ALCAECALRECHITREDUCER_H
-#define _ALCAECALRECHITREDUCER_H
-
-// -*- C++ -*-
-//
-// Package: AlCaECALRecHitReducer
-// Class: AlCaECALRecHitReducer
-//
-/**\class AlCaECALRecHitReducer AlCaECALRecHitReducer.cc Calibration/EcalAlCaRecoProducers/src/AlCaECALRecHitReducer.cc
-
- Description: Example of a producer of AlCa electrons
-
- Implementation:
-
-
-*/
-//
-// Original Author: Lorenzo AGOSTINO
-// Created: Mon Jul 17 18:07:01 CEST 2006
-//
-//
-
-
-// system include files
-#include
-
-// user include files
-#include "FWCore/Framework/interface/Frameworkfwd.h"
-#include "FWCore/Framework/interface/EDProducer.h"
-
-#include "FWCore/Framework/interface/Event.h"
-#include "FWCore/Framework/interface/MakerMacros.h"
-#include "FWCore/Utilities/interface/InputTag.h"
-#include "FWCore/ParameterSet/interface/ParameterSet.h"
-
-//PG #include "TH2.h"
-//PG #include "TFile.h"
-//PG #include "TCanvas.h"
-
-//!
-//! class declaration
-//!
-
-class AlCaECALRecHitReducer : public edm::EDProducer {
- public:
- //! ctor
- explicit AlCaECALRecHitReducer(const edm::ParameterSet&);
- ~AlCaECALRecHitReducer();
-
-
-//PG void beginJob (const edm::EventSetup&)
-//PG {
-//PG std::cerr << "saveTest beginJob" << std::endl ;
-//PG m_failMap = new TH2F ("failMap","failMap",100,0,100,100,0,100) ;
-//PG std::cerr << "saveTest beginJob " << m_failMap->GetEntries () << std::endl ;
-//PG }
- //! producer
- virtual void produce(edm::Event &, const edm::EventSetup&);
-//PG void endJob ()
-//PG {
-//PG std::cerr << "saveTest endJob" << std::endl ;
-//PG TCanvas c1 ;
-//PG c1.cd () ;
-//PG m_failMap->Draw ("BOX") ;
-//PG c1.Print ("fail.eps","eps") ;
-//PG TDirectory * curr = gDirectory ;
-//PG TFile * saveTest = new TFile ("fail.root","recreate") ;
-//PG saveTest->cd () ;
-//PG m_failMap->Write () ;
-//PG curr->cd () ;
-//PG saveTest->Close () ;
-//PG }
-
- private:
- // ----------member data ---------------------------
-
-
- edm::InputTag ebRecHitsLabel_;
- edm::InputTag eeRecHitsLabel_;
- edm::InputTag esRecHitsLabel_;
- edm::InputTag electronLabel_;
- std::string alcaBarrelHitsCollection_;
- std::string alcaEndcapHitsCollection_;
- std::string alcaPreshowerHitsCollection_;
- int etaSize_;
- int phiSize_;
- float weight_;
- int esNstrips_;
- int esNcolumns_;
-
- bool selectByEleNum_;
- int minEleNumber_;
- double minElePt_;
-
-//PG TH2F * m_failMap ;
-
-};
-
-#endif
diff --git a/Calibration/EcalAlCaRecoProducers/plugins/AlCaECALRecHitReducer.cc b/Calibration/EcalAlCaRecoProducers/plugins/AlCaECALRecHitReducer.cc
new file mode 100644
index 0000000000000..8a116b32ae17d
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/plugins/AlCaECALRecHitReducer.cc
@@ -0,0 +1,239 @@
+#include "Calibration/EcalAlCaRecoProducers/plugins/AlCaECALRecHitReducer.h"
+//#include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
+#include "DataFormats/EgammaCandidates/interface/Photon.h"
+#include "FWCore/MessageLogger/interface/MessageLogger.h"
+
+#include "DataFormats/EgammaReco/interface/BasicCluster.h"
+#include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
+#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h"
+#include "FWCore/Framework/interface/ESHandle.h"
+
+//#define ALLrecHits
+//#define DEBUG
+
+//#define QUICK -> if commented loop over the recHits of the SC and add them to the list of recHits to be saved
+// comment it if you want a faster module but be sure the window is large enough
+
+/** This module reduces the recHitCollections and the caloCalusterCollections in input
+ * keeping only those associated to the given electrons/photons
+ */
+
+/// \todo make sure that the new caloClusterCollection has no duplicates
+
+AlCaECALRecHitReducer::AlCaECALRecHitReducer(const edm::ParameterSet& iConfig)
+{
+
+ ebRecHitsToken_ = consumes(iConfig.getParameter< edm::InputTag > ("ebRecHitsLabel"));
+ eeRecHitsToken_ = consumes(iConfig.getParameter< edm::InputTag > ("eeRecHitsLabel"));
+ // esRecHitsLabel_ = iConfig.getParameter< edm::InputTag > ("esRecHitsLabel");
+
+ std::vector srcLabels = iConfig.getParameter< std::vector >("srcLabels");
+ for ( auto inputTag = srcLabels.begin(); inputTag != srcLabels.end(); ++inputTag){
+ eleViewTokens_.push_back(consumes >(*inputTag));
+ }
+
+ //eleViewToken_ = consumes > (iConfig.getParameter< edm::InputTag > ("electronLabel"));
+ photonToken_ = consumes(iConfig.getParameter< edm::InputTag > ("photonLabel"));
+ EESuperClusterToken_ = consumes(iConfig.getParameter< edm::InputTag>("EESuperClusterCollection"));
+
+ minEta_highEtaSC_ = iConfig.getParameter< double >("minEta_highEtaSC");
+
+ alcaBarrelHitsCollection_ = iConfig.getParameter("alcaBarrelHitCollection");
+ alcaEndcapHitsCollection_ = iConfig.getParameter("alcaEndcapHitCollection");
+ alcaCaloClusterCollection_ = iConfig.getParameter("alcaCaloClusterCollection");
+
+ // alcaPreshowerHitsCollection_ = iConfig.getParameter("alcaPreshowerHitCollection");
+
+ etaSize_ = iConfig.getParameter ("etaSize");
+ phiSize_ = iConfig.getParameter ("phiSize");
+ // FIXME: minimum size of etaSize_ and phiSize_
+ if ( phiSize_ % 2 == 0 || etaSize_ % 2 == 0)
+ edm::LogError("AlCaECALRecHitReducerError") << "Size of eta/phi should be odd numbers";
+
+ // esNstrips_ = iConfig.getParameter ("esNstrips");
+ // esNcolumns_ = iConfig.getParameter ("esNcolumns");
+
+ //register your products
+ produces< EBRecHitCollection > (alcaBarrelHitsCollection_) ;
+ produces< EERecHitCollection > (alcaEndcapHitsCollection_) ;
+ produces< reco::CaloClusterCollection > (alcaCaloClusterCollection_) ;
+ // produces< ESRecHitCollection > (alcaPreshowerHitsCollection_) ;
+}
+
+
+AlCaECALRecHitReducer::~AlCaECALRecHitReducer()
+{}
+
+
+// ------------ method called to produce the data ------------
+void
+AlCaECALRecHitReducer::produce (edm::Event& iEvent,
+ const edm::EventSetup& iSetup)
+{
+ using namespace edm;
+ //using namespace std;
+
+ EcalRecHitCollection::const_iterator recHit_itr;
+
+ edm::ESHandle theCaloTopology;
+ iSetup.get().get(theCaloTopology);
+ const CaloTopology *caloTopology = theCaloTopology.product();
+
+
+ // Get Photons
+ Handle phoHandle;
+ iEvent.getByToken(photonToken_, phoHandle);
+
+ // get RecHits
+ Handle barrelRecHitsHandle;
+ iEvent.getByToken(ebRecHitsToken_,barrelRecHitsHandle);
+ const EBRecHitCollection *barrelHitsCollection = barrelRecHitsHandle.product () ;
+
+ // get RecHits
+ Handle endcapRecHitsHandle;
+ iEvent.getByToken(eeRecHitsToken_,endcapRecHitsHandle);
+ const EERecHitCollection *endcapHitsCollection = endcapRecHitsHandle.product () ;
+
+ // // get ES RecHits
+ // Handle preshowerRecHitsHandle;
+ // iEvent.getByToken(esRecHitsToken_,preshowerRecHitsHandle);
+
+ // const ESRecHitCollection * preshowerHitsCollection = 0 ;
+ // if (preshowerIsFull)
+ // preshowerHitsCollection = preshowerRecHitsHandle.product () ;
+
+ // // make a vector to store the used ES rechits:
+ // set used_strips;
+ // used_strips.clear();
+
+ // for Z->ele+SC
+ Handle EESCHandle;
+ iEvent.getByToken(EESuperClusterToken_, EESCHandle);
+
+ //Create empty output collections
+ std::auto_ptr< EBRecHitCollection > miniEBRecHitCollection (new EBRecHitCollection) ;
+ std::auto_ptr< EERecHitCollection > miniEERecHitCollection (new EERecHitCollection) ;
+ // std::auto_ptr< ESRecHitCollection > miniESRecHitCollection (new ESRecHitCollection) ;
+
+ std::set reducedRecHit_EBmap;
+ std::set reducedRecHit_EEmap;
+
+ // std::set< edm::Ref > reducedCaloClusters_map;
+
+ std::auto_ptr< reco::CaloClusterCollection > reducedCaloClusterCollection (new reco::CaloClusterCollection);
+
+ //Photons:
+#ifdef shervin
+ for (reco::PhotonCollection::const_iterator phoIt=phoHandle->begin(); phoIt!=phoHandle->end(); phoIt++) {
+ const reco::SuperCluster& sc = *(phoIt->superCluster()) ;
+
+ if (phoIt->isEB()) {
+ AddMiniRecHitCollection(sc, reducedRecHit_EBmap, caloTopology);
+ } else { // endcap
+ AddMiniRecHitCollection(sc, reducedRecHit_EEmap, caloTopology);
+ } // end of endcap
+
+ /// \todo check if this works when you ask sc->seed(), I suspect that the references have to be updated
+ reco::CaloCluster_iterator it = sc.clustersBegin();
+ reco::CaloCluster_iterator itend = sc.clustersEnd();
+ for ( ; it !=itend; ++it) {
+ reco::CaloCluster caloClus(**it);
+ reducedCaloClusterCollection->push_back(caloClus);
+ }
+ }
+#endif
+
+ Handle > eleViewHandle;
+ for(auto iToken=eleViewTokens_.begin(); iToken!=eleViewTokens_.end(); iToken++){
+ iEvent.getByToken(*iToken, eleViewHandle);
+
+ //Electrons:
+ for (auto eleIt=eleViewHandle->begin(); eleIt!=eleViewHandle->end(); eleIt++) {
+ const reco::SuperCluster& sc = *(eleIt->superCluster()) ;
+
+ if (fabs(sc.eta())<1.479) {
+ AddMiniRecHitCollection(sc, reducedRecHit_EBmap, caloTopology);
+ } else { // endcap
+ AddMiniRecHitCollection(sc, reducedRecHit_EEmap, caloTopology);
+ } // end of endcap
+
+ reco::CaloCluster_iterator it = sc.clustersBegin();
+ reco::CaloCluster_iterator itend = sc.clustersEnd();
+ for ( ; it !=itend; ++it) {
+ reco::CaloCluster caloClus(**it);
+ reducedCaloClusterCollection->push_back(caloClus);
+ }
+ }
+ }
+
+
+
+ //saving recHits for highEta SCs for highEta studies
+ for(reco::SuperClusterCollection::const_iterator SC_iter = EESCHandle->begin();
+ SC_iter!=EESCHandle->end();
+ SC_iter++){
+ if(fabs(SC_iter->eta()) < minEta_highEtaSC_) continue;
+ AddMiniRecHitCollection(*SC_iter, reducedRecHit_EEmap, caloTopology);
+
+ const reco::SuperCluster& sc = *(SC_iter);
+ reco::CaloCluster_iterator it = sc.clustersBegin();
+ reco::CaloCluster_iterator itend = sc.clustersEnd();
+ for ( ; it !=itend; ++it) {
+ reco::CaloCluster caloClus(**it);
+ reducedCaloClusterCollection->push_back(caloClus);
+ }
+ }
+
+
+ //------------------------------ fill the alcareco reduced recHit collection
+ for(std::set::const_iterator itr = reducedRecHit_EBmap.begin();
+ itr != reducedRecHit_EBmap.end(); itr++){
+ if (barrelHitsCollection->find(*itr) != barrelHitsCollection->end())
+ miniEBRecHitCollection->push_back(*(barrelHitsCollection->find(*itr)));
+ }
+
+ for(std::set::const_iterator itr = reducedRecHit_EEmap.begin();
+ itr != reducedRecHit_EEmap.end(); itr++){
+ if (endcapHitsCollection->find(*itr) != endcapHitsCollection->end())
+ miniEERecHitCollection->push_back(*(endcapHitsCollection->find(*itr)));
+ }
+
+
+ //--------------------------------------- Put selected information in the event
+ iEvent.put( miniEBRecHitCollection,alcaBarrelHitsCollection_ );
+ iEvent.put( miniEERecHitCollection,alcaEndcapHitsCollection_ );
+ // iEvent.put( miniESRecHitCollection,alcaPreshowerHitsCollection_ );
+ iEvent.put( reducedCaloClusterCollection, alcaCaloClusterCollection_);
+}
+
+void AlCaECALRecHitReducer::AddMiniRecHitCollection(const reco::SuperCluster& sc,
+ std::set& reducedRecHitMap,
+ const CaloTopology *caloTopology
+ ){
+ DetId seed=(sc.seed()->seed());
+ int phiSize=phiSize_, etaSize=etaSize_;
+ if(seed.subdetId()!=EcalBarrel){ // if not EB, take a square window
+ etaSize= std::max(phiSize_,etaSize_);
+ phiSize=etaSize;
+ }
+
+ std::vector recHit_window = caloTopology->getWindow(seed, phiSize, etaSize);
+ for(unsigned int i =0; i < recHit_window.size(); i++){
+ reducedRecHitMap.insert(recHit_window[i]);
+ }
+
+ const std::vector< std::pair > & scHits = sc.hitsAndFractions();
+ for(std::vector< std::pair >::const_iterator scHit_itr = scHits.begin();
+ scHit_itr != scHits.end(); scHit_itr++){
+ // the map fills just one time (avoiding double insert of recHits)
+ reducedRecHitMap.insert(scHit_itr->first);
+ }
+
+
+ return;
+}
+
+
+DEFINE_FWK_MODULE(AlCaECALRecHitReducer);
+
+
diff --git a/Calibration/EcalAlCaRecoProducers/plugins/AlCaECALRecHitReducer.h b/Calibration/EcalAlCaRecoProducers/plugins/AlCaECALRecHitReducer.h
new file mode 100644
index 0000000000000..db05dfded8270
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/plugins/AlCaECALRecHitReducer.h
@@ -0,0 +1,94 @@
+#ifndef _ALCAECALRECHITREDUCER_H
+#define _ALCAECALRECHITREDUCER_H
+
+// -*- C++ -*-
+//
+// Package: AlCaECALRecHitReducer
+// Class: AlCaECALRecHitReducer
+//
+/**\class AlCaECALRecHitReducer AlCaECALRecHitReducer.cc Calibration/EcalAlCaRecoProducers/src/AlCaECALRecHitReducer.cc
+
+ Description: Example of a producer of AlCa electrons
+
+ Implementation:
+
+
+*/
+//
+// Original Author: Lorenzo AGOSTINO
+// Created: Mon Jul 17 18:07:01 CEST 2006
+// $Id: AlCaECALRecHitReducer.h,v 1.13 2010/02/11 00:10:34 wmtan Exp $
+//
+//
+
+
+// system include files
+#include
+
+// user include files
+#include "FWCore/Framework/interface/Frameworkfwd.h"
+#include "FWCore/Framework/interface/EDProducer.h"
+
+#include "FWCore/Framework/interface/Event.h"
+#include "FWCore/Framework/interface/MakerMacros.h"
+#include "FWCore/Utilities/interface/InputTag.h"
+#include "FWCore/ParameterSet/interface/ParameterSet.h"
+
+#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
+#include "DataFormats/DetId/interface/DetId.h"
+#include "Geometry/CaloTopology/interface/CaloTopology.h"
+
+#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
+#include "DataFormats/EgammaCandidates/interface/PhotonFwd.h"
+#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
+//!
+//! class declaration
+//!
+
+class AlCaECALRecHitReducer : public edm::EDProducer {
+ public:
+ //! ctor
+ explicit AlCaECALRecHitReducer(const edm::ParameterSet&);
+ ~AlCaECALRecHitReducer();
+
+
+ //! producer
+ virtual void produce(edm::Event &, const edm::EventSetup&);
+
+ private:
+ // ----------member data ---------------------------
+
+
+
+ edm::EDGetTokenT ebRecHitsToken_;
+ edm::EDGetTokenT eeRecHitsToken_;
+ edm::EDGetTokenT esRecHitsToken_;
+ edm::EDGetTokenT electronToken_;
+ std::vector< edm::EDGetTokenT > > eleViewTokens_;
+
+ edm::EDGetTokenT photonToken_;
+ edm::EDGetTokenT EESuperClusterToken_;
+ std::string alcaBarrelHitsCollection_;
+ std::string alcaEndcapHitsCollection_;
+ std::string alcaPreshowerHitsCollection_;
+ int etaSize_;
+ int phiSize_;
+ //float weight_;
+ // int esNstrips_;
+ //int esNcolumns_;
+
+ // bool selectByEleNum_;
+ // int minEleNumber_;
+ // double minElePt_;
+ double minEta_highEtaSC_;
+ std::string alcaCaloClusterCollection_;
+
+ void AddMiniRecHitCollection(const reco::SuperCluster& sc,
+ std::set& reducedRecHitMap,
+ const CaloTopology *caloTopology
+ );
+
+
+};
+
+#endif
diff --git a/Calibration/EcalAlCaRecoProducers/plugins/AlCaElectronTracksReducer.cc b/Calibration/EcalAlCaRecoProducers/plugins/AlCaElectronTracksReducer.cc
new file mode 100644
index 0000000000000..250e08e367897
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/plugins/AlCaElectronTracksReducer.cc
@@ -0,0 +1,74 @@
+#include "Calibration/EcalAlCaRecoProducers/plugins/AlCaElectronTracksReducer.h"
+#include "DataFormats/TrackReco/interface/Track.h"
+#include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
+
+AlCaElectronTracksReducer::AlCaElectronTracksReducer(const edm::ParameterSet& iConfig)
+{
+ generalTracksToken_ = consumes(iConfig.getParameter< edm::InputTag > ("generalTracksLabel"));
+ generalTracksExtraToken_ = consumes(iConfig.getParameter< edm::InputTag > ("generalTracksExtraLabel"));
+ electronToken_ = consumes(iConfig.getParameter< edm::InputTag > ("electronLabel"));
+
+ // name of the output collection
+ alcaTrackExtraCollection_ = iConfig.getParameter("alcaTrackExtraCollection");
+
+ //register your products
+ produces< reco::TrackCollection > (alcaTrackCollection_) ;
+ produces< reco::TrackExtraCollection > (alcaTrackExtraCollection_) ;
+
+}
+
+
+AlCaElectronTracksReducer::~AlCaElectronTracksReducer()
+{}
+
+
+// ------------ method called to produce the data ------------
+void AlCaElectronTracksReducer::produce (edm::Event& iEvent,
+ const edm::EventSetup& iSetup)
+{
+ using namespace edm;
+ using namespace std;
+ using namespace reco;
+
+
+ // Get GSFElectrons
+ Handle pElectrons;
+ iEvent.getByToken(electronToken_, pElectrons);
+
+ const reco::GsfElectronCollection * electronCollection = pElectrons.product();
+
+ Handle generalTracksHandle;
+ iEvent.getByToken(generalTracksToken_,generalTracksHandle);
+
+ Handle generalTracksExtraHandle;
+ iEvent.getByToken(generalTracksExtraToken_,generalTracksExtraHandle);
+
+ //Create empty output collections
+ std::auto_ptr< TrackCollection > redGeneralTracksCollection (new TrackCollection) ;
+ std::auto_ptr< TrackExtraCollection > redGeneralTracksExtraCollection (new TrackExtraCollection) ;
+
+ reco::GsfElectronCollection::const_iterator eleIt;
+
+ for (eleIt=electronCollection->begin(); eleIt!=electronCollection->end(); eleIt++) {
+ // barrel
+#ifndef CMSSW42X
+ TrackRef track = (eleIt-> closestTrack() ) ;
+#else
+ TrackRef track = (eleIt-> closestCtfTrackRef());
+#endif
+ if(track.isNull()){
+ // edm::LogError("track") << "Track Ref not found " << eleIt->energy() << "\t" << eleIt->eta();
+ continue;
+ }
+ redGeneralTracksCollection->push_back(*track);
+ if(generalTracksExtraHandle.isValid()) redGeneralTracksExtraCollection->push_back(*(track->extra()));
+ }
+
+ //Put selected information in the event
+ iEvent.put( redGeneralTracksCollection, alcaTrackCollection_ );
+ iEvent.put( redGeneralTracksExtraCollection, alcaTrackExtraCollection_ );
+}
+
+
+DEFINE_FWK_MODULE(AlCaElectronTracksReducer);
+
diff --git a/Calibration/EcalAlCaRecoProducers/plugins/AlCaElectronTracksReducer.h b/Calibration/EcalAlCaRecoProducers/plugins/AlCaElectronTracksReducer.h
new file mode 100644
index 0000000000000..54e71a215b8fc
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/plugins/AlCaElectronTracksReducer.h
@@ -0,0 +1,59 @@
+#ifndef _ALCAELECTRONTRACKSREDUCER_H
+#define _ALCAELECTRONTRACKSREDUCER_H
+
+// -*- C++ -*-
+//
+// Package: AlCaElectronTracksReducer
+// Class: AlCaElectronTracksReducer
+//
+/**\class AlCaECALRecHitReducer AlCaECALRecHitReducer.cc Calibration/EcalAlCaRecoProducers/src/AlCaECALRecHitReducer.cc
+
+ Description: This plugin saves tracks and trackExtras that are associated to an electron creating two new track and track extra collections
+
+*/
+//
+// Original Author: Shervin Nourbakhsh
+// Created: Sat Feb 23 10:07:01 CEST 2013
+// $Id: AlCaElectronTracksReducer.h,v 1.00 2013/02/23 10:10:34 shervin Exp $
+//
+
+
+// system include files
+#include
+
+// user include files
+#include "FWCore/Framework/interface/Frameworkfwd.h"
+#include "FWCore/Framework/interface/EDProducer.h"
+
+#include "FWCore/Framework/interface/Event.h"
+#include "FWCore/Framework/interface/MakerMacros.h"
+#include "FWCore/Utilities/interface/InputTag.h"
+#include "FWCore/ParameterSet/interface/ParameterSet.h"
+
+// input collections
+#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
+#include "DataFormats/TrackReco/interface/TrackFwd.h"
+#include "DataFormats/TrackReco/interface/TrackExtraFwd.h"
+
+class AlCaElectronTracksReducer : public edm::EDProducer {
+ public:
+
+ explicit AlCaElectronTracksReducer(const edm::ParameterSet&);
+ ~AlCaElectronTracksReducer();
+
+ virtual void produce(edm::Event &, const edm::EventSetup&);
+
+private:
+ // ----------member data ---------------------------
+ // input collections
+ edm::EDGetTokenT electronToken_;
+ edm::EDGetTokenT generalTracksToken_;
+ edm::EDGetTokenT generalTracksExtraToken_;
+
+ // output collection' names
+ std::string alcaTrackCollection_;
+ std::string alcaTrackExtraCollection_;
+
+};
+
+#endif
diff --git a/Calibration/EcalAlCaRecoProducers/plugins/BuildFile.xml b/Calibration/EcalAlCaRecoProducers/plugins/BuildFile.xml
new file mode 100644
index 0000000000000..7908c4f1484a8
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/plugins/BuildFile.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+# for FED list selector
+
+
+
+
+
+
+
+
+
diff --git a/Calibration/EcalAlCaRecoProducers/plugins/PUDumper.cc b/Calibration/EcalAlCaRecoProducers/plugins/PUDumper.cc
new file mode 100644
index 0000000000000..43bad4bce78d7
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/plugins/PUDumper.cc
@@ -0,0 +1,74 @@
+#include "Calibration/EcalAlCaRecoProducers/plugins/PUDumper.h"
+
+
+//! ctor
+PUDumper::PUDumper(const edm::ParameterSet& iConfig)
+{
+ // MCPileupTag_ = iConfig.getParameter("MCPileupTag");
+ pileupSummaryToken_ = consumes >(iConfig.getParameter("pileupSummary"));
+
+ // create TTree
+ edm::Service fs;
+ PUTree_ = fs -> make("pileup","pileup");
+
+ PUTree_ -> Branch("runNumber", &runNumber, "runNumber/I");
+ PUTree_ -> Branch("eventNumber", &eventNumber, "eventNumber/l");
+ PUTree_ -> Branch("lumiBlock", &lumiBlock, "lumiBlock/I");
+
+ PUTree_ -> Branch("nBX", &nBX, "nBX/I");
+ PUTree_ -> Branch("BX", BX_, "BX[nBX]/I");
+ PUTree_ -> Branch("nPUtrue", &nPUtrue_, "nPUtrue/I");
+ PUTree_ -> Branch("nPUobs", nPUobs_, "nPUobs[nBX]/I");
+}
+
+// ----------------------------------------------------------------
+
+
+
+//! dtor
+PUDumper::~PUDumper()
+{}
+
+// ----------------------------------------------------------------
+
+
+
+//! loop over the reco particles and count leptons
+void PUDumper::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
+{
+ // get the PU collection
+ edm::Handle > PupInfo;
+ if( !iEvent.isRealData() ){
+ iEvent.getByToken(pileupSummaryToken_, PupInfo);
+ } else return;
+
+
+ runNumber = iEvent.id().run();
+ eventNumber = iEvent.id().event();
+ if( iEvent.isRealData() ) {
+ lumiBlock = iEvent.luminosityBlock();
+ } else {
+ lumiBlock = -1;
+ }
+
+ // loop on BX
+ nBX=0;
+ std::vector::const_iterator PVI;
+ nPUtrue_ = PupInfo -> begin()->getTrueNumInteractions();
+
+ for(PVI = PupInfo->begin(); PVI != PupInfo->end(); ++PVI){
+ BX_[nBX] = PVI -> getBunchCrossing();
+ nPUobs_[nBX] = PVI -> getPU_NumInteractions();
+#ifdef DEBUG
+ std::cout << "PUDumper::runNumber: " << runNumber_
+ << " BX[1]: " << BX_[1]
+ << " nPUtrue: " << nPUtrue_
+ << " nPUobs[1]: " << nPUobs_[1]
+ << std::endl;
+#endif
+ nBX++;
+ }
+ PUTree_ -> Fill();
+}
+
+DEFINE_FWK_MODULE(PUDumper);
diff --git a/Calibration/EcalAlCaRecoProducers/plugins/PUDumper.h b/Calibration/EcalAlCaRecoProducers/plugins/PUDumper.h
new file mode 100644
index 0000000000000..72f7160a23754
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/plugins/PUDumper.h
@@ -0,0 +1,58 @@
+#ifndef PUDumper_h
+#define PUDumper_h
+
+#include "FWCore/Framework/interface/Frameworkfwd.h"
+#include "FWCore/Framework/interface/EDAnalyzer.h"
+
+#include "FWCore/Framework/interface/Event.h"
+#include "FWCore/Framework/interface/MakerMacros.h"
+#include "FWCore/Utilities/interface/InputTag.h"
+#include "FWCore/ParameterSet/interface/ParameterSet.h"
+
+#include "FWCore/ServiceRegistry/interface/Service.h"
+#include "CommonTools/UtilAlgos/interface/TFileService.h"
+
+#include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h"
+
+#include "TTree.h"
+
+
+class PUDumper : public edm::EDAnalyzer
+{
+ public:
+
+ //! ctor
+ explicit PUDumper(const edm::ParameterSet&);
+
+ //! dtor
+ ~PUDumper();
+
+
+
+ private:
+
+ //! the actual analyze method
+ virtual void analyze(const edm::Event&, const edm::EventSetup&);
+
+
+
+ private:
+
+ edm::EDGetTokenT< std::vector > pileupSummaryToken_;
+
+ //edm::InputTag MCPileupTag_;
+
+ TTree* PUTree_;
+
+ Int_t runNumber; ///<
+ Long64_t eventNumber; ///<
+ Int_t lumiBlock; ///< lumi section
+ //UInt_t runTime; ///< unix time
+
+ Int_t nBX;
+ Int_t BX_[100];
+ Int_t nPUtrue_;
+ Int_t nPUobs_[100];
+};
+
+#endif
diff --git a/Calibration/EcalAlCaRecoProducers/plugins/SelectedElectronFEDListProducer.cc b/Calibration/EcalAlCaRecoProducers/plugins/SelectedElectronFEDListProducer.cc
new file mode 100644
index 0000000000000..0c1c133580455
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/plugins/SelectedElectronFEDListProducer.cc
@@ -0,0 +1,671 @@
+#include "Calibration/EcalAlCaRecoProducers/plugins/SelectedElectronFEDListProducer.h"
+
+#include
+#include "HLTrigger/HLTcore/interface/defaultModuleLabel.h"
+
+#include "FWCore/Framework/interface/ESTransientHandle.h"
+
+// common
+//#include "DataFormats/Common/interface/Handle.h"
+
+#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
+#include "FWCore/Utilities/interface/InputTag.h"
+// raw data
+#include "DataFormats/FEDRawData/interface/FEDRawData.h"
+//#include "DataFormats/FEDRawData/interface/FEDNumbering.h"
+
+// Geometry
+#include "Geometry/CaloGeometry/interface/CaloGeometry.h"
+#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h"
+// strip geometry
+#include "CalibFormats/SiStripObjects/interface/SiStripRegionCabling.h"
+#include "CalibTracker/Records/interface/SiStripRegionCablingRcd.h"
+
+// egamma objects
+#include "DataFormats/EgammaReco/interface/SuperCluster.h"
+#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
+#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h"
+#include "DataFormats/RecoCandidate/interface/RecoEcalCandidateFwd.h"
+#include "DataFormats/EgammaCandidates/interface/Electron.h"
+#include "DataFormats/EgammaCandidates/interface/ElectronFwd.h"
+
+// Hcal objects
+#include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h"
+
+// Strip and pixel
+#include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h"
+#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h"
+
+// detector id
+#include "DataFormats/HcalDetId/interface/HcalDetId.h"
+#include "DataFormats/HcalDetId/interface/HcalElectronicsId.h"
+// Hcal rec hit
+#include "DataFormats/CaloRecHit/interface/CaloRecHit.h"
+#include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h"
+// Geometry
+#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h"
+#include "Geometry/EcalMapping/interface/EcalMappingRcd.h"
+#include "Geometry/EcalAlgo/interface/EcalPreshowerGeometry.h"
+#include "Geometry/Records/interface/CaloGeometryRecord.h"
+#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
+#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
+// strip geometry
+#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h"
+#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h"
+// Message logger
+#include "FWCore/MessageLogger/interface/MessageLogger.h"
+// Strip and pixel
+#include "CondFormats/SiStripObjects/interface/FedChannelConnection.h"
+#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h"
+#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingTree.h"
+
+// Hcal objects
+#include "CalibFormats/HcalObjects/interface/HcalDbService.h"
+#include "CalibFormats/HcalObjects/interface/HcalDbRecord.h"
+
+
+using namespace std;
+
+/// Producer constructor
+template< typename TEle, typename TCand>
+SelectedElectronFEDListProducer::SelectedElectronFEDListProducer(const edm::ParameterSet & iConfig){
+
+ // input electron collection Tag
+ if(iConfig.existsAs >("electronTags")){
+ electronTags_ = iConfig.getParameter>("electronTags");
+ if(electronTags_.empty())
+ throw cms::Exception("Configuration")<<"[SelectedElectronFEDListProducer] empty electron collection is given --> at least one \n";
+ }
+ else throw cms::Exception("Configuration")<<"[SelectedElectronFEDListProducer] no electron collection are given --> need at least one \n";
+
+ // Consumes for the electron collection
+ LogDebug("SelectedElectronFEDListProducer")<<" Electron Collections"<::const_iterator itEleTag = electronTags_.begin(); itEleTag != electronTags_.end(); ++itEleTag){
+ electronToken_.push_back(consumes(*itEleTag));
+ LogDebug("SelectedElectronFEDListProducer")<<" Ele collection: "<<*(itEleTag)< >("recoEcalCandidateTags")){
+ recoEcalCandidateTags_ = iConfig.getParameter>("recoEcalCandidateTags");
+ if(recoEcalCandidateTags_.empty())
+ throw cms::Exception("Configuration")<<"[SelectedElectronFEDListProducer] empty ecal candidate collections collection is given --> at least one \n";
+ }
+ else throw cms::Exception("Configuration")<<"[SelectedElectronFEDListProducer] no electron reco ecal candidate collection are given --> need at least one \n";
+
+ // Consumes for the recoEcal candidate collection
+ for( std::vector::const_iterator itEcalCandTag = recoEcalCandidateTags_.begin(); itEcalCandTag != recoEcalCandidateTags_.end(); ++itEcalCandTag){
+ recoEcalCandidateToken_.push_back(consumes(*itEcalCandTag));
+ LogDebug("SelectedElectronFEDListProducer")<<" Reco ecal candidate collection: "<<*(itEcalCandTag)<>("isGsfElectronCollection")){
+ isGsfElectronCollection_ = iConfig.getParameter>("isGsfElectronCollection");
+ if(isGsfElectronCollection_.empty())
+ throw cms::Exception("Configuration")<<"[SelectedElectronFEDListProducer] empty electron flag collection --> at least one \n";
+ }
+ else throw cms::Exception("Configuration")<<"[SelectedElectronFEDListProducer] no electron flag are given --> need at least one \n";
+
+ if(isGsfElectronCollection_.size() != electronTags_.size() or isGsfElectronCollection_.size() != recoEcalCandidateTags_.size())
+ throw cms::Exception("Configuration")<<"[SelectedElectronFEDListProducer] electron flag , electron collection and reco ecal cand collection must have the same size ! \n";
+
+ // take the beam spot Tag
+ if(iConfig.existsAs("beamSpot"))
+ beamSpotTag_ = iConfig.getParameter("beamSpot");
+ else beamSpotTag_ = edm::InputTag("hltOnlineBeamSpot");
+
+ if(!(beamSpotTag_ == edm::InputTag(""))) beamSpotToken_ = consumes(beamSpotTag_);
+
+ LogDebug("SelectedElectronFEDListProducer")<<" Beam Spot Tag "<("HBHERecHitTag"))
+ HBHERecHitTag_ = iConfig.getParameter("HBHERecHitTag");
+ else HBHERecHitTag_ = edm::InputTag("hltHbhereco");
+
+ if(!(HBHERecHitTag_ == edm::InputTag(""))) hbheRecHitToken_ = consumes(HBHERecHitTag_);
+
+ // raw data collector label
+ if(iConfig.existsAs("rawDataTag"))
+ rawDataTag_ = iConfig.getParameter("rawDataTag");
+ else rawDataTag_ = edm::InputTag("rawDataCollector") ;
+
+ if(!(rawDataTag_ == edm::InputTag(""))) rawDataToken_ = consumes(rawDataTag_);
+
+ LogDebug("SelectedElectronFEDListProducer")<<" RawDataInput "<>("addThisSelectedFEDs")){
+ addThisSelectedFEDs_ = iConfig.getParameter>("addThisSelectedFEDs");
+ if(addThisSelectedFEDs_.empty())
+ addThisSelectedFEDs_.push_back(-1);
+ }
+ else addThisSelectedFEDs_.push_back(-1);
+
+ std::vector::const_iterator AddFed = addThisSelectedFEDs_.begin();
+ for( ; AddFed !=addThisSelectedFEDs_.end() ; ++AddFed)
+ LogDebug("SelectedElectronFEDListProducer")<<" Additional FED: "<<*(AddFed)<("ESLookupTable"))
+ ESLookupTable_ = iConfig.getParameter("ESLookupTable");
+ else ESLookupTable_ = edm::FileInPath("EventFilter/ESDigiToRaw/data/ES_lookup_table.dat");
+
+ // output model label
+ if(iConfig.existsAs("outputLabelModule"))
+ outputLabelModule_ = iConfig.getParameter("outputLabelModule");
+ else outputLabelModule_ = "streamElectronRawData" ;
+
+ LogDebug("SelectedElectronFEDListProducer")<<" Output Label "<("dRStripRegion"))
+ dRStripRegion_ = iConfig.getParameter("dRStripRegion");
+ else dRStripRegion_ = 0.5 ;
+
+ LogDebug("SelectedElectronFEDListProducer")<<" dRStripRegion "<("dRHcalRegion"))
+ dRHcalRegion_ = iConfig.getParameter("dRHcalRegion");
+ else dRHcalRegion_ = 0.5 ;
+
+ // dPhi, dEta and maxZ for pixel dump
+ if(iConfig.existsAs("dPhiPixelRegion"))
+ dPhiPixelRegion_ = iConfig.getParameter("dPhiPixelRegion");
+ else dPhiPixelRegion_ = 0.5 ;
+
+ if(iConfig.existsAs("dEtaPixelRegion"))
+ dEtaPixelRegion_ = iConfig.getParameter("dEtaPixelRegion");
+ else dEtaPixelRegion_ = 0.5 ;
+
+ if(iConfig.existsAs("maxZPixelRegion"))
+ maxZPixelRegion_ = iConfig.getParameter("maxZPixelRegion");
+ else maxZPixelRegion_ = 24. ;
+
+ LogDebug("SelectedElectronFEDListProducer")<<" dPhiPixelRegion "<("dumpSelectedEcalFed"))
+ dumpSelectedEcalFed_ = iConfig.getParameter< bool >("dumpSelectedEcalFed");
+ else dumpSelectedEcalFed_ = true ;
+
+ if(iConfig.existsAs("dumpSelectedSiStripFed"))
+ dumpSelectedSiStripFed_ = iConfig.getParameter("dumpSelectedSiStripFed");
+ else dumpSelectedSiStripFed_ = true ;
+
+ if(iConfig.existsAs("dumpSelectedSiPixelFed"))
+ dumpSelectedSiPixelFed_ = iConfig.getParameter("dumpSelectedSiPixelFed");
+ else dumpSelectedSiPixelFed_ = true ;
+
+ if(iConfig.existsAs("dumpSelectedHCALFed"))
+ dumpSelectedHCALFed_ = iConfig.getParameter("dumpSelectedHCALFed");
+ else dumpSelectedHCALFed_ = true ;
+
+ LogDebug("SelectedElectronFEDListProducer")<<" DumpEcalFedList set to "<("dumpAllEcalFed"))
+ dumpAllEcalFed_ = iConfig.getParameter("dumpAllEcalFed");
+ else dumpAllEcalFed_ = false ;
+
+ if(iConfig.existsAs("dumpAllTrackerFed"))
+ dumpAllTrackerFed_ = iConfig.getParameter("dumpAllTrackerFed");
+ else dumpAllTrackerFed_ = false ;
+
+ if(iConfig.existsAs("dumpAllHCALFed"))
+ dumpAllHCALFed_ = iConfig.getParameter("dumpAllHCALFed");
+ else dumpAllHCALFed_ = false ;
+
+ LogDebug("SelectedElectronFEDListProducer")<<" DumpAllEcalFed "< look up table
+ for (int i=0; i<2; ++i) for (int j=0; j<2; ++j) for (int k=0 ;k<40; ++k) for (int m=0; m<40; m++) ES_fedId_[i][j][k][m] = -1;
+
+ // read in look-up table
+ int nLines, iz, ip, ix, iy, fed, kchip, pace, bundle, fiber, optorx;
+ std::ifstream ES_file;
+ ES_file.open(ESLookupTable_.fullPath().c_str());
+ LogDebug("SelectedElectronFEDListProducer")<<" Look Up table for ES "<> nLines;
+ for (int i=0; i> iz >> ip >> ix >> iy >> fed >> kchip >> pace >> bundle >> fiber >> optorx ;
+ ES_fedId_[(3-iz)/2-1][ip-1][ix-1][iy-1] = fed;
+ }
+ }
+ else LogDebug("SelectedElectronFEDListProducer")<<" Look up table file can not be found in "<(outputLabelModule_); // produce exit collection
+
+}
+
+template< typename TEle, typename TCand>
+SelectedElectronFEDListProducer::~SelectedElectronFEDListProducer(){
+
+ if(!electronTags_.empty()) electronTags_.clear() ;
+ if(!recoEcalCandidateTags_.empty()) recoEcalCandidateTags_.clear() ;
+ if(!recoEcalCandidateToken_.empty()) recoEcalCandidateToken_.clear();
+ if(!electronToken_.empty()) electronToken_.clear();
+ if(!fedList_.empty()) fedList_.clear() ;
+ if(!RawDataCollection_) delete RawDataCollection_ ;
+}
+
+template< typename TEle, typename TCand>
+void SelectedElectronFEDListProducer::beginJob(){
+ eventCounter_ = 0 ;
+ LogDebug("SelectedElectronFEDListProducer")<<" Begin of the Job : event counter set to"<
+void SelectedElectronFEDListProducer::produce(edm::Event & iEvent, const edm::EventSetup & iSetup){
+
+ if(!fedList_.empty()) fedList_.clear();
+ if(!RawDataCollection_) delete RawDataCollection_ ;
+
+ // Build FED strip map --> just one time
+ // Retrieve FED ids from cabling map and iterate through
+ SiStripRegionCabling::Cabling cabling_ ;
+
+ if(eventCounter_ ==0 ){
+
+ // get the hcal electronics map
+ edm::ESHandle pSetup;
+ iSetup.get().get(pSetup);
+ hcalReadoutMap_ = pSetup->getHcalMapping();
+
+
+ // get the ecal electronics map
+ edm::ESHandle ecalmapping;
+ iSetup.get().get(ecalmapping);
+ TheMapping_ = ecalmapping.product();
+
+ // get the calo geometry
+ edm::ESHandle caloGeometry;
+ iSetup.get().get(caloGeometry);
+ geometry_ = caloGeometry.product();
+
+ //ES geometry
+ geometryES_ = caloGeometry->getSubdetectorGeometry(DetId::Ecal,EcalPreshower);
+
+ // pixel tracker cabling map
+ edm::ESTransientHandle pixelCablingMap;
+ iSetup.get().get(pixelCablingMap);
+
+ PixelCabling_.reset();
+ PixelCabling_ = pixelCablingMap->cablingTree();
+
+ edm::ESHandle trackerGeometry;
+ iSetup.get().get( trackerGeometry );
+
+ if(!pixelModuleVector_.empty()) pixelModuleVector_.clear();
+
+ // build the tracker pixel module map
+ std::vector::const_iterator itTracker = trackerGeometry->dets().begin();
+ for( ; itTracker !=trackerGeometry->dets().end() ; ++itTracker){
+ int subdet = (*itTracker)->geographicalId().subdetId();
+ if(! (subdet == PixelSubdetector::PixelBarrel || subdet == PixelSubdetector::PixelEndcap) ) continue;
+ PixelModule module ;
+ module.x = (*itTracker)->position().x();
+ module.y = (*itTracker)->position().y();
+ module.z = (*itTracker)->position().z();
+ module.Phi = normalizedPhi((*itTracker)->position().phi()) ;
+ module.Eta = (*itTracker)->position().eta() ;
+ module.DetId = (*itTracker)->geographicalId().rawId();
+ const std::vector path2det = PixelCabling_->pathToDetUnit(module.DetId);
+ module.Fed = path2det[0].fed;
+ assert(module.Fed<40);
+ pixelModuleVector_.push_back(module);
+ }
+ std::sort(pixelModuleVector_.begin(),pixelModuleVector_.end());
+
+ edm::ESHandle SiStripCabling ;
+ iSetup.get().get(SiStripCabling);
+ StripRegionCabling_ = SiStripCabling.product();
+
+ cabling_ = StripRegionCabling_->getRegionCabling();
+ regionDimension_ = StripRegionCabling_->regionDimensions();
+ }
+
+ // event by event analysis
+
+ // Get event raw data
+ edm::Handle rawdata;
+ if(!(rawDataTag_ == edm::InputTag(""))) iEvent.getByToken(rawDataToken_,rawdata);
+
+ // take the beam spot position
+ edm::Handle beamSpot;
+ if(!(beamSpotTag_ == edm::InputTag(""))) iEvent.getByToken(beamSpotToken_, beamSpot);
+ if(!beamSpot.failedToGet()) beamSpotPosition_ = beamSpot->position();
+ else beamSpotPosition_.SetXYZ(0,0,0);
+
+ // take the calo tower collection
+ edm::Handle hbheRecHitHandle;
+ if(!(HBHERecHitTag_ == edm::InputTag(""))) iEvent.getByToken(hbheRecHitToken_,hbheRecHitHandle);
+ const HBHERecHitCollection* hcalRecHitCollection = NULL;
+ if(!hbheRecHitHandle.failedToGet()) hcalRecHitCollection = hbheRecHitHandle.product();
+
+ double radTodeg = 180. / Geom::pi();
+
+ if(dumpAllEcalFed_){
+ for(uint32_t iEcalFed = FEDNumbering::MINECALFEDID ; iEcalFed <= FEDNumbering::MAXECALFEDID ; iEcalFed++)
+ fedList_.push_back(iEcalFed);
+ for(uint32_t iESFed = FEDNumbering::MINPreShowerFEDID ; iESFed <= FEDNumbering::MAXPreShowerFEDID ; iESFed++)
+ fedList_.push_back(iESFed);
+ }
+
+ if(dumpAllTrackerFed_){
+ for(uint32_t iPixelFed = FEDNumbering::MINSiPixelFEDID; iPixelFed <= FEDNumbering::MAXSiPixelFEDID ; iPixelFed++)
+ fedList_.push_back(iPixelFed);
+ for(uint32_t iStripFed = FEDNumbering::MINSiStripFEDID; iStripFed <= FEDNumbering::MAXSiStripFEDID ; iStripFed++)
+ fedList_.push_back(iStripFed);
+ }
+
+ if(dumpAllHCALFed_){
+ for(uint32_t iHcalFed = FEDNumbering::MINHCALFEDID ; iHcalFed <= FEDNumbering::MAXHCALFEDID; iHcalFed++)
+ fedList_.push_back(iHcalFed);
+ }
+
+
+ // loop on the input electron collection vector
+ TEle electron ;
+ edm::Ref recoEcalCand ;
+ edm::Handle electrons;
+ edm::Handle triggerRecoEcalCandidateCollection;
+ std::vector> recoEcalCandColl;
+
+ // iterator to electron and ecal candidate collections
+ typename std::vector >::const_iterator itElectronColl = electronToken_.begin();
+ std::vector::const_iterator itElectronCollFlag = isGsfElectronCollection_.begin();
+ std::vector >::const_iterator itRecoEcalCandColl = recoEcalCandidateToken_.begin();
+
+ // if you want to dump just FED related to the triggering electron/s
+ if( !dumpAllTrackerFed_ || !dumpAllEcalFed_ ){
+
+ // loop on the same time on ecal candidate and elctron collection and boolean for Gsf ones
+ for( ; itRecoEcalCandColl != recoEcalCandidateToken_.end() and itElectronColl != electronToken_.end() and itElectronCollFlag != isGsfElectronCollection_.end();
+ ++itElectronColl , ++itElectronCollFlag, ++itRecoEcalCandColl){
+
+ // get ecal candidate collection
+ iEvent.getByToken(*itRecoEcalCandColl,triggerRecoEcalCandidateCollection);
+ if(triggerRecoEcalCandidateCollection.failedToGet()) continue ;
+
+ // get gsf electron collection
+ iEvent.getByToken(*itElectronColl,electrons);
+ if(electrons.failedToGet()) continue ;
+
+
+ triggerRecoEcalCandidateCollection->getObjects(trigger::TriggerCluster, recoEcalCandColl);
+ if(recoEcalCandColl.empty()) triggerRecoEcalCandidateCollection->getObjects(trigger::TriggerPhoton, recoEcalCandColl);
+ if(recoEcalCandColl.empty()) triggerRecoEcalCandidateCollection->getObjects(trigger::TriggerElectron, recoEcalCandColl);
+
+ typename std::vector>::const_iterator itRecoEcalCand = recoEcalCandColl.begin(); // loop on recoEcalCandidate objects
+
+ // loop on the recoEcalCandidates
+ for( ; itRecoEcalCand != recoEcalCandColl.end() ; ++itRecoEcalCand){
+ recoEcalCand = (*itRecoEcalCand);
+ reco::SuperClusterRef scRefRecoEcalCand = recoEcalCand->superCluster(); // take the supercluster in order to match with electron objects
+
+ typename TEleColl::const_iterator itEle = electrons->begin();
+ for( ; itEle!=electrons->end() ; ++itEle){ // loop on all the electrons inside a collection
+ // get electron supercluster and the associated hit -> detID
+ electron = (*itEle);
+ reco::SuperClusterRef scRef = electron.superCluster();
+ if ( scRefRecoEcalCand != scRef ) continue ; // mathching
+
+ const std::vector >& hits = scRef->hitsAndFractions();
+ // start in dump the ecal FED associated to the electron
+ std::vector >::const_iterator itSChits = hits.begin();
+ if(!dumpAllEcalFed_){
+ for( ; itSChits!=hits.end() ; ++itSChits){
+ if((*itSChits).first.subdetId()== EcalBarrel){ // barrel part
+ EBDetId idEBRaw ((*itSChits).first);
+ GlobalPoint point = geometry_->getPosition(idEBRaw);
+ int hitFED = FEDNumbering::MINECALFEDID + TheMapping_->GetFED(double(point.eta()),double(point.phi())*radTodeg);
+ if( hitFED < FEDNumbering::MINECALFEDID || hitFED > FEDNumbering::MAXECALFEDID ) continue;
+
+ LogDebug("SelectedElectronFEDListProducer")<<" electron hit detID Barrel "<<(*itSChits).first.rawId()<<" eta "<getPosition(idEERaw);
+ int hitFED = FEDNumbering::MINECALFEDID + TheMapping_->GetFED(double(point.eta()),double(point.phi())*radTodeg);
+ if( hitFED < FEDNumbering::MINECALFEDID || hitFED > FEDNumbering::MAXECALFEDID ) continue;
+
+ LogDebug("SelectedElectronFEDListProducer")<<" electron hit detID Endcap "<<(*itSChits).first.rawId()<<" eta "<(geometryES_))->getClosestCellInPlane(point,1);
+ ESDetId stripX = (tmpX == DetId(0)) ? ESDetId(0) : ESDetId(tmpX);
+ int hitFED = ES_fedId_[(3-stripX.zside())/2-1][stripX.plane()-1][stripX.six()-1][stripX.siy()-1];
+ LogDebug("SelectedElectronFEDListProducer")<<" ES hit plane X (deiID) "< FEDNumbering::MAXPreShowerFEDID) continue;
+ if(hitFED < 0) continue;
+ if(!fedList_.empty()){
+ if(std::find(fedList_.begin(),fedList_.end(),hitFED)==fedList_.end()) fedList_.push_back(hitFED);
+ }
+ else fedList_.push_back(hitFED);
+
+ DetId tmpY = (dynamic_cast(geometryES_))->getClosestCellInPlane(point,2);
+ ESDetId stripY = (tmpY == DetId(0)) ? ESDetId(0) : ESDetId(tmpY);
+ hitFED = ES_fedId_[(3-stripY.zside())/2-1][stripY.plane()-1][stripY.six()-1][stripY.siy()-1];
+ if(hitFED < FEDNumbering::MINPreShowerFEDID || hitFED > FEDNumbering::MAXPreShowerFEDID) continue;
+ LogDebug("SelectedElectronFEDListProducer")<<" ES hit plane Y (deiID) "<begin();
+ for( ; itHcalRecHit != hcalRecHitCollection->end() ; ++itHcalRecHit) {
+ HcalDetId recHitId(itHcalRecHit->id());
+ const CaloCellGeometry* cellGeometry = geometry_->getSubdetectorGeometry(recHitId)->getGeometry(recHitId);
+ float dR = reco::deltaR(scRef->eta(),scRef->phi(),cellGeometry->getPosition().eta(),cellGeometry->getPosition().phi());
+ if(dR <= dRHcalRegion_) {
+ const HcalElectronicsId electronicId = hcalReadoutMap_->lookup(recHitId);
+ int hitFED = electronicId.dccid() + FEDNumbering::MINHCALFEDID;
+ LogDebug("SelectedElectronFEDListProducer")<< " matched hcal recHit : HcalDetId "< FEDNumbering::MAXHCALFEDID)
+ continue; //first eighteen feds are for HBHE
+ if(hitFED < 0)
+ continue;
+ if(!fedList_.empty()) {
+ if(std::find(fedList_.begin(), fedList_.end(), hitFED) == fedList_.end())
+ fedList_.push_back(hitFED);
+ }
+ else
+ fedList_.push_back(hitFED);
+ }
+ }
+ } // End Hcal
+ }// End Ecal
+
+ // get the electron track
+ if( !dumpAllTrackerFed_ ){
+ //loop on the region
+ if(dumpSelectedSiStripFed_){
+ double eta ;
+ double phi ;
+ if(*itElectronCollFlag){
+ eta = electron.gsfTrack()->eta();
+ phi = electron.gsfTrack()->phi();
+ }
+ else{
+ eta = electron.track()->eta();
+ phi = electron.track()->phi();
+ }
+ for(uint32_t iCabling = 0; iCabling < cabling_.size(); iCabling++){
+ SiStripRegionCabling::Position pos = StripRegionCabling_->position(iCabling);
+ double dphi=fabs(pos.second-phi);
+ if (dphi>acos(-1)) dphi=2*acos(-1)-dphi;
+ double R = sqrt(pow(pos.first-eta,2)+dphi*dphi);
+ if (R-sqrt(pow(regionDimension_.first/2,2)+pow(regionDimension_.second/2,2))>dRStripRegion_) continue;
+ //get vector of subdets within region
+ const SiStripRegionCabling::RegionCabling regSubdets = cabling_[iCabling];
+ //cycle on subdets
+ for (uint32_t idet=0; idetsecond).size(); op++){
+ int hitFED = (itFedMap->second)[op].fedId();
+ if(hitFED < FEDNumbering::MINSiStripFEDID || hitFED > FEDNumbering::MAXSiStripFEDID) continue;
+ LogDebug("SelectedElectronFEDListProducer")<<" SiStrip (FedID) "<momentum();
+ else momentum = electron.track()->momentum();
+ PixelRegion region (momentum,dPhiPixelRegion_,dEtaPixelRegion_,maxZPixelRegion_);
+
+ PixelModule lowerBound (normalizedPhi(region.vector.phi())-region.dPhi, region.vector.eta()-region.dEta);
+ PixelModule upperBound (normalizedPhi(region.vector.phi())+region.dPhi, region.vector.eta()+region.dEta);
+
+ std::vector::const_iterator itUp, itDn ;
+ if(lowerBound.Phi >= -M_PI && upperBound.Phi <= M_PI ){
+ itDn = std::lower_bound(pixelModuleVector_.begin(),pixelModuleVector_.end(),lowerBound);
+ itUp = std::upper_bound(pixelModuleVector_.begin(),pixelModuleVector_.end(),upperBound);
+ pixelFedDump(itDn,itUp,region);
+ }
+ else{
+ if(lowerBound.Phi < -M_PI) lowerBound.Phi = lowerBound.Phi+2*M_PI;
+ PixelModule phi_p(M_PI,region.vector.eta()-region.dEta);
+ itDn = std::lower_bound(pixelModuleVector_.begin(),pixelModuleVector_.end(),lowerBound);
+ itUp = std::upper_bound(pixelModuleVector_.begin(),pixelModuleVector_.end(),phi_p);
+ pixelFedDump(itDn,itUp,region);
+
+ if(upperBound.Phi < -M_PI) upperBound.Phi = upperBound.Phi-2*M_PI;
+ PixelModule phi_m(-M_PI,region.vector.eta()-region.dEta);
+ itDn = std::lower_bound(pixelModuleVector_.begin(),pixelModuleVector_.end(),phi_m);
+ itUp = std::upper_bound(pixelModuleVector_.begin(),pixelModuleVector_.end(),upperBound);
+ pixelFedDump(itDn,itUp,region);
+ }
+ }
+ }// end tracker analysis
+ }// end loop on the electron candidate
+ } // end loop on the electron collection collection
+ } // end loop on the recoEcal candidate
+ } // end loop on the recoEcal candidate collection
+
+ // add a set of chosen FED
+ for( unsigned int iFed = 0 ; iFed < addThisSelectedFEDs_.size() ; iFed++){
+ if(addThisSelectedFEDs_.at(iFed) == -1 ) continue ;
+ fedList_.push_back(addThisSelectedFEDs_.at(iFed));
+ }
+
+ // make the final raw data collection
+ RawDataCollection_ = new FEDRawDataCollection();
+ std::sort(fedList_.begin(),fedList_.end());
+ std::vector::const_iterator itfedList = fedList_.begin();
+ for( ; itfedList!=fedList_.end() ; ++itfedList){
+ LogDebug("SelectedElectronFEDListProducer")<<" fed point "<<*itfedList<<" ";
+ const FEDRawData& data = rawdata->FEDData(*itfedList);
+ if(data.size()>0){
+ FEDRawData& fedData = RawDataCollection_->FEDData(*itfedList);
+ fedData.resize(data.size());
+ memcpy(fedData.data(),data.data(),data.size());
+ }
+ }
+
+ std::auto_ptr streamFEDRawProduct(RawDataCollection_);
+ iEvent.put(streamFEDRawProduct,outputLabelModule_);
+ eventCounter_ ++ ;
+}
+
+
+template< typename TEle, typename TCand>
+void SelectedElectronFEDListProducer::endJob(){
+ LogDebug("SelectedElectronFEDListProducer")<<" End of the Job : Counted Events "<
+void SelectedElectronFEDListProducer::pixelFedDump( std::vector::const_iterator & itDn,
+ std::vector::const_iterator & itUp,
+ const PixelRegion & region){
+
+ for( ; itDn != itUp ; ++itDn){
+ float zmodule = itDn->z-((itDn->x-beamSpotPosition_.x())*region.cosphi+(itDn->y-beamSpotPosition_.y())*region.sinphi)*region.atantheta;
+ if ( std::abs(zmodule) > region.maxZ ) continue;
+ int hitFED = itDn->Fed;
+ if(hitFED < FEDNumbering::MINSiPixelFEDID || hitFED > FEDNumbering::MAXSiPixelFEDID) continue;
+ LogDebug("SelectedElectronFEDListProducer")<<" electron pixel hit "<DetId<<" hitFED "<
+void SelectedElectronFEDListProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
+ edm::ParameterSetDescription desc;
+ desc.add>("electronTags",{edm::InputTag("hltEgammaGsfElectrons")});
+ desc.add>("recoEcalCandidateTags",{edm::InputTag("hltL1EG25Ele27WP85GsfTrackIsoFilter")});
+ desc.add("ESLookupTable",edm::FileInPath("EventFilter/ESDigiToRaw/data/ES_lookup_table.dat"));
+ desc.add("HBHERecHitTag",edm::InputTag("hltHbhereco"));
+ desc.add("beamSpotTag",edm::InputTag("hltOnlineBeamSpot"));
+ desc.add("rawDataTag",edm::InputTag("rawDataCollector"));
+ desc.add>("addThisSelectedFEDs",{812,813});
+ desc.add>("isGsfElectronCollection",{true});
+ desc.add("outputLabelModule","StreamElectronRawFed");
+ desc.add("dumpSelectedSiPixelFed",true);
+ desc.add("dumpSelectedSiStripFed",true);
+ desc.add("dumpSelectedEcalFed",true);
+ desc.add("dumpSelectedHCALFed",true);
+ desc.add("dPhiPixelRegion",0.3);
+ desc.add("dEtaPixelRegion",0.3);
+ desc.add("dRStripRegion",0.3);
+ desc.add("dRHcalRegion",0.3);
+ desc.add("maxZPixelRegion",24);
+ desc.add("dumpAllTrackerFed",false);
+ desc.add("dumpAllEcalFed",false);
+ desc.add("dumpAllHcalFed",false);
+
+ descriptions.add(defaultModuleLabel>(),desc);
+}
+
+
+#include "FWCore/PluginManager/interface/ModuleDef.h"
+#include "FWCore/Framework/interface/MakerMacros.h"
+typedef SelectedElectronFEDListProducer SelectedElectronFEDListProducerGsf ;
+DEFINE_FWK_MODULE(SelectedElectronFEDListProducerGsf);
+
diff --git a/Calibration/EcalAlCaRecoProducers/interface/SelectedElectronFEDListProducer.h b/Calibration/EcalAlCaRecoProducers/plugins/SelectedElectronFEDListProducer.h
similarity index 50%
rename from Calibration/EcalAlCaRecoProducers/interface/SelectedElectronFEDListProducer.h
rename to Calibration/EcalAlCaRecoProducers/plugins/SelectedElectronFEDListProducer.h
index 66f422ddc573f..8ae4a223f1e27 100644
--- a/Calibration/EcalAlCaRecoProducers/interface/SelectedElectronFEDListProducer.h
+++ b/Calibration/EcalAlCaRecoProducers/plugins/SelectedElectronFEDListProducer.h
@@ -1,98 +1,37 @@
#ifndef SelectedElectronFEDListProducer_h
#define SelectedFEDListProducer_h
-#include
-#include
-#include
-#include
-#include
-#include "TLorentzVector.h"
-#include "TVector3.h"
-#include
-#include
-#include
-
-// common
-#include "DataFormats/Common/interface/Handle.h"
+#include "DataFormats/BeamSpot/interface/BeamSpot.h"
// egamma objects
-#include "DataFormats/EgammaReco/interface/SuperCluster.h"
-#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
-#include "DataFormats/EgammaReco/interface/PreshowerCluster.h"
-#include "DataFormats/EgammaReco/interface/PreshowerClusterFwd.h"
-#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h"
-#include "DataFormats/RecoCandidate/interface/RecoEcalCandidateFwd.h"
-#include "DataFormats/EgammaCandidates/interface/Electron.h"
-#include "DataFormats/EgammaCandidates/interface/ElectronFwd.h"
-#include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
-#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
-// raw data
-#include "DataFormats/FEDRawData/interface/FEDRawData.h"
-#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
-#include "DataFormats/FEDRawData/interface/FEDNumbering.h"
-// detector id
-#include "DataFormats/HcalDetId/interface/HcalDetId.h"
-#include "DataFormats/HcalDetId/interface/HcalElectronicsId.h"
-#include "DataFormats/SiStripDetId/interface/SiStripDetId.h"
+
+
// Math
#include "DataFormats/Math/interface/normalizedPhi.h"
-// Hcal rec hit
-#include "DataFormats/ParticleFlowReco/interface/PFRecHit.h"
-#include "DataFormats/ParticleFlowReco/interface/PFRecHitFwd.h"
-#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
-#include "DataFormats/CaloRecHit/interface/CaloRecHit.h"
-#include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h"
-// Geometry
-#include "Geometry/CaloGeometry/interface/CaloGeometry.h"
-#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
-#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h"
-#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h"
-#include "Geometry/EcalMapping/interface/EcalMappingRcd.h"
-#include "Geometry/EcalAlgo/interface/EcalPreshowerGeometry.h"
-#include "Geometry/Records/interface/IdealGeometryRecord.h"
-#include "Geometry/Records/interface/CaloGeometryRecord.h"
-#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
-#include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
-#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
-// strip geometry
-#include "CalibFormats/SiStripObjects/interface/SiStripRegionCabling.h"
-#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h"
-#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h"
-#include "CalibTracker/Records/interface/SiStripRegionCablingRcd.h"
-// FW core
-#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
-#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
-#include "FWCore/Utilities/interface/InputTag.h"
-#include "FWCore/Framework/interface/Event.h"
+
#include "FWCore/Framework/interface/EDProducer.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/ESHandle.h"
-#include "FWCore/Framework/interface/ESTransientHandle.h"
// Message logger
-#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
-// Strip and pixel
-#include "CondFormats/SiStripObjects/interface/SiStripFedCabling.h"
-#include "CondFormats/SiStripObjects/interface/FedChannelConnection.h"
-#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingMap.h"
-#include "CondFormats/SiPixelObjects/interface/SiPixelFedCabling.h"
-#include "CondFormats/SiPixelObjects/interface/CablingPathToDetUnit.h"
-#include "CondFormats/SiPixelObjects/interface/SiPixelFrameConverter.h"
-#include "CondFormats/SiPixelObjects/interface/GlobalPixel.h"
-#include "CondFormats/SiPixelObjects/interface/LocalPixel.h"
-#include "CondFormats/SiPixelObjects/interface/ElectronicIndex.h"
-#include "CondFormats/SiPixelObjects/interface/DetectorIndex.h"
-#include "CondFormats/DataRecord/interface/SiPixelFedCablingMapRcd.h"
-#include "CondFormats/SiPixelObjects/interface/SiPixelFedCablingTree.h"
-
-// Hcal objects
-#include "CondFormats/HcalObjects/interface/HcalChannelQuality.h"
-#include "CondFormats/DataRecord/interface/HcalChannelQualityRcd.h"
-#include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h"
-#include "CalibFormats/HcalObjects/interface/HcalDbService.h"
-#include "CalibFormats/HcalObjects/interface/HcalDbRecord.h"
-
-using namespace std;
+
+class InputTag;
+
+class FEDRawDataCollection;
+
+class SiPixelFedCablingMap;
+class SiPixelFedCablingTree;
+class SiStripFedCabling;
+class SiStripRegionCabling;
+
+class CaloGeometry;
+class CaloSubdetectorGeometry;
+class EcalElectronicsMapping;
+class HcalElectronicsMap;
+
+// Hcal rec hit: this is a Fwd file defining typedefs
+#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
+
// Pixel region class
class PixelRegion {
@@ -224,7 +163,6 @@ class SelectedElectronFEDListProducer : public edm::EDProducer {
// get strip geometry and electronic map
const SiStripRegionCabling* StripRegionCabling_;
- SiStripRegionCabling::Cabling cabling_ ;
std::pair regionDimension_ ;
// get hcal geometry and electronic map
diff --git a/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalCalIsolElectron_Output_cff.py b/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalCalIsolElectron_Output_cff.py
index 998fb50c9ac3a..098c0ed007377 100644
--- a/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalCalIsolElectron_Output_cff.py
+++ b/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalCalIsolElectron_Output_cff.py
@@ -2,23 +2,36 @@
# output block for alcastream Electron
OutALCARECOEcalCalElectron_specific = cms.untracked.vstring(
+ 'drop reco*Clusters_hfEMClusters_*_*',
+ 'drop reco*Clusters_pfPhotonTranslator_*_*',
'drop *EcalRecHit*_ecalRecHit_*_*',
'drop *EcalrecHit*_*ecalPreshowerRecHit*_*EcalRecHitsES*_*',
'drop *EcalRecHit*_reducedEcalRecHitsE*_*_*',
- 'keep *EcalRecHit*_alCaIsolatedElectrons_*_*',
- 'keep *EcalRecHit*_reducedEcalRecHitsES_alCaRecHitsES_*'
+ 'drop *_*Cleaned_*_*',
+ 'drop *_*cleaned*_*_*',
+ 'drop *_*Unclean*_*_*',
+ 'drop *_*unclean*_*_*',
+ 'drop *_*_*Unclean*_*',
+ 'drop *_*_*unclean*_*',
+ 'keep recoSuperClusters_*_uncleanOnly_*', # kept for safety
+ 'drop *_*_multi5x5Barrel*Clusters_*',
+ 'drop *CaloCluster*_*particleFlowEGamma*_*EBEEClusters*_*',
+ 'drop *CaloCluster*_*particleFlowEGamma*_*ESClusters*_*',
+ 'drop *_dqmL1ExtraParticles_*_*',
+ 'drop recoSuperClusters_mergedSuperClusters_*_*',
+ 'keep *CaloCluster*_*alCaIsolatedElectrons*_*alcaCaloCluster*_*'
)
OutALCARECOEcalCalElectron_noDrop = cms.PSet(
# put this if you have a filter
SelectEvents = cms.untracked.PSet(
- SelectEvents = cms.vstring('pathALCARECOEcalCalZElectron', 'pathALCARECOEcalCalWElectron')
+ SelectEvents = cms.vstring('pathALCARECOEcalCalZElectron', 'pathALCARECOEcalCalWElectron', 'pathALCARECOEcalCalZSCElectron')
),
outputCommands = cms.untracked.vstring(
- 'keep *_pfMet_*_*',
- 'keep *_kt6PFJetsForRhoCorrection_rho_*',
- 'keep *_kt6PFJets_rho_*',
- 'keep *_offlinePrimaryVerticesWithBS_*_*',
+ 'keep *_pfMet_*_*', # met for Wenu selection
+ 'keep *_kt6PFJetsForRhoCorrection_rho_*', #rho for effective area subtraction
+ 'keep *_kt6PFJets_rho_*', #rho for effective area subtraction
+ 'keep recoVertexs_offlinePrimaryVertices*_*_*',
'keep *BeamSpot_offlineBeamSpot_*_*',
'keep *_allConversions_*_*',
'keep *_conversions_*_*',
@@ -26,24 +39,39 @@
'keep *_generator_*_*',
'keep *_addPileupInfo_*_*',
'keep *_genParticles_*_*',
- 'keep recoGsfElectron*_gsfElectron*_*_*',
+ 'keep recoGsfElectron*_gsfElectrons*_*_*',
+ 'keep recoGsfElectron*_gedGsfElectrons_*_*',
+ 'keep recoPhoton*_gedPhotons_*_*',
'keep recoCaloClusters_*_*_*',
'keep recoSuperClusters_*_*_*',
'keep recoPreshowerCluster*_*_*_*',
- 'drop reco*Clusters_hfEMClusters_*_*',
- 'drop reco*Clusters_pfPhotonTranslator_*_*',
- 'drop *_*Unclean*_*_*',
- 'drop *_*unclean*_*_*',
- 'drop *_*_*Unclean*_*',
- 'drop *_*_*unclean*_*',
- 'keep *_*_*_HLT',
- 'keep recoTracks_generalTracks_*_*'
+ 'keep *_pfElectronTranslator_*_*',
+ #'keep *_*_*_HLT',
+ #'keep *_generalTracks_*_*',
+ #'keep reco*Track*Extra*_generalTracks_*_*',
+ 'keep *_alcaElectronTracksReducer_*_*',
+ # for the trigger matching
+ #'keep *_l1extraParticles_*_*',
+ 'keep l1extraL1EmParticles_*_*_*',
+ 'keep L1GlobalTriggerReadoutRecord_gtDigis_*_*',
+ 'keep *_l1L1GtObjectMap_*_*',
+ 'keep edmConditionsInEventBlock_conditionsInEdm_*_*',
+ 'keep edmConditionsInLumiBlock_conditionsInEdm_*_*',
+ 'keep edmConditionsInRunBlock_conditionsInEdm_*_*',
+ 'keep *_TriggerResults_*_*',
+ 'keep *_hltTriggerSummaryAOD_*_HLT',
+ # pfisolation CMSSW_5_3_X
+ 'keep *_elPFIsoValueCharged03PFId*_*_*',
+ 'keep *_elPFIsoValueGamma03PFId*_*_*',
+ 'keep *_elPFIsoValueNeutral03PFId*_*_*',
+ 'keep *EcalRecHit*_alCaIsolatedElectrons_*_*',
+ 'keep *EcalRecHit*_reducedEcalRecHitsES_alCaRecHitsES_*',
)
)
-OutALCARECOEcalCalElectron_noDrop.outputCommands+=OutALCARECOEcalCalElectron_specific
-
-
import copy
OutALCARECOEcalCalElectron=copy.deepcopy(OutALCARECOEcalCalElectron_noDrop)
OutALCARECOEcalCalElectron.outputCommands.insert(0, "drop *")
+OutALCARECOEcalCalElectron.outputCommands+=OutALCARECOEcalCalElectron_specific
+
+
diff --git a/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalCalIsolElectron_cff.py b/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalCalIsolElectron_cff.py
index aaaeb05a9907e..162164fc2e166 100644
--- a/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalCalIsolElectron_cff.py
+++ b/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalCalIsolElectron_cff.py
@@ -1,13 +1,5 @@
import FWCore.ParameterSet.Config as cms
-#==================================================== FILTER EVENTS WITH WZSkims
-#from DPGAnalysis.Skims.WElectronSkim_cff import * # already imported by ZElectronSkim_cff
-from DPGAnalysis.Skims.ZElectronSkim_cff import *
-# tagGsfSeq for Zee
-#
-WSkimSeq = cms.Sequence( WEnuHltFilter * ele_sequence * elecMetFilter )
-
-#from calibration.SANDBOX.ZElectronSkimSandbox_cff import *
#===================================================== removing events with trackerDrivenOnly electrons
# if you want to filter events with trackerDrivenOnly electrons
@@ -32,24 +24,49 @@
#trackerDrivenRemoverSeq = cms.Sequence( trackerDrivenOnlyElectrons)
-# already imported by the WElectronSkim
-#from RecoJets.Configuration.RecoPFJets_cff import *
-#kt6PFJetsForRhoCorrection = kt6PFJets.clone(doRhoFastjet = True)
-#kt6PFJetsForRhoCorrection.Rho_EtaMax = cms.double(2.5)
+from Calibration.EcalAlCaRecoProducers.alCaIsolatedElectrons_cfi import *
+from Calibration.EcalAlCaRecoProducers.AlCaElectronTracksReducer_cfi import *
+from Calibration.EcalAlCaRecoProducers.eleIsoSequence_cff import *
+from Calibration.EcalAlCaRecoProducers.WZElectronSkims_cff import *
+from RecoJets.Configuration.RecoPFJets_cff import kt6PFJets
+kt6PFJetsForRhoCorrection = kt6PFJets.clone(doRhoFastjet = True)
+kt6PFJetsForRhoCorrection.Rho_EtaMax = cms.double(2.5)
+#list of SCs to be used for the recHit reduction
+#GsfMatchedPhotonCands = cms.EDProducer("ElectronMatchedCandidateProducer",
+# src = cms.InputTag("goodPhotons"),
+# ReferenceElectronCollection = cms.untracked.InputTag("goodElectrons"),
+# deltaR = cms.untracked.double(0.3)
+#)
-from Calibration.EcalAlCaRecoProducers.alCaIsolatedElectrons_cfi import *
+alcarecoEcalRecHitReducerSeq = cms.Sequence(alCaIsolatedElectrons)
+alcarecoElectronTracksReducerSeq = cms.Sequence(alcaElectronTracksReducer)
+
+# sequence that reduces the RECO format (only ECAL part) into ALCARECO
+ALCARECOEcalCalElectronECALSeq = cms.Sequence( alCaIsolatedElectrons)
+
+# sequence that reduces the RECO format (not ECAL part) into ALCARECO
+ALCARECOEcalCalElectronNonECALSeq = cms.Sequence( kt6PFJetsForRhoCorrection +
+ alcaElectronTracksReducer
+# + pfisoALCARECO
+ )
+ALCARECOEcalCalElectronSeq = cms.Sequence( ALCARECOEcalCalElectronNonECALSeq+
+ ALCARECOEcalCalElectronECALSeq
+ )
+############################################### FINAL SEQUENCES
+# sequences used in AlCaRecoStreams_cff.py
+seqALCARECOEcalCalZElectron = cms.Sequence(ZeeSkimFilterSeq * ALCARECOEcalCalElectronSeq)
+seqALCARECOEcalCalZSCElectron = cms.Sequence(ZSCSkimFilterSeq * ALCARECOEcalCalElectronSeq)
+seqALCARECOEcalCalWElectron = cms.Sequence(WenuSkimFilterSeq * ALCARECOEcalCalElectronSeq)
-seqALCARECOEcalCalElectronRECO = cms.Sequence( alCaIsolatedElectrons)
+seqALCARECOEcalCalPhoton = cms.Sequence( alCaIsolatedElectrons +
+ kt6PFJetsForRhoCorrection
+ # + pfisoALCARECO
+ )
-seqALCARECOEcalCalElectron = cms.Sequence( kt6PFJetsForRhoCorrection +
- seqALCARECOEcalCalElectronRECO
- )
-seqALCARECOEcalCalZElectron = cms.Sequence( tagGsfSeq * seqALCARECOEcalCalElectron)
-seqALCARECOEcalCalWElectron = cms.Sequence( WSkimSeq * seqALCARECOEcalCalElectron)
diff --git a/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalRecalIsolElectron_Output_cff.py b/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalRecalIsolElectron_Output_cff.py
new file mode 100644
index 0000000000000..996e833d2f624
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalRecalIsolElectron_Output_cff.py
@@ -0,0 +1,24 @@
+import FWCore.ParameterSet.Config as cms
+from Calibration.EcalAlCaRecoProducers.ALCARECOEcalCalIsolElectron_Output_cff import *
+import copy
+
+OutALCARECOEcalRecalElectron_noDrop=copy.deepcopy(OutALCARECOEcalCalElectron_noDrop)
+OutALCARECOEcalRecalElectron_noDrop.outputCommands+=cms.untracked.vstring(
+ 'keep *_electronRecalibSCAssociator_*_*'
+ )
+
+OutALCARECOEcalRecalElectron=copy.deepcopy(OutALCARECOEcalRecalElectron_noDrop)
+OutALCARECOEcalRecalElectron.outputCommands.insert(0, "drop *")
+OutALCARECOEcalRecalElectron.outputCommands += cms.untracked.vstring(
+ 'drop *_gedGsfElectron*_*_*',
+ 'drop *_*Unclean*_*_*',
+ 'drop *_*unclean*_*_*',
+ 'drop *_*_*Unclean*_*',
+ 'drop *_*_*unclean*_*',
+ )
+
+OutALCARECOEcalRecalElectron.SelectEvents = cms.untracked.PSet(
+ SelectEvents = cms.vstring('pathALCARECOEcalRecalZElectron', 'pathALCARECOEcalRecalZSCElectron', 'pathALCARECOEcalRecalWElectron')
+ #SelectEvents = cms.vstring('pathALCARECOEcalRecalZElectron', 'pathALCARECOEcalRecalWElectron')
+ )
+
diff --git a/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalRecalIsolElectron_cff.py b/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalRecalIsolElectron_cff.py
new file mode 100644
index 0000000000000..b57163f580a0d
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalRecalIsolElectron_cff.py
@@ -0,0 +1,27 @@
+import FWCore.ParameterSet.Config as cms
+
+from Configuration.StandardSequences.Reconstruction_Data_cff import ecalLocalRecoSequence, pfClusteringPS, pfClusteringECAL, ecalClusters
+from Calibration.EcalAlCaRecoProducers.ALCARECOEcalCalIsolElectron_cff import *
+
+#ecal rechits
+from RecoLocalCalo.Configuration.RecoLocalCalo_cff import ecalLocalRecoSequence
+recoECALSeq = cms.Sequence( ecalLocalRecoSequence)
+
+from RecoParticleFlow.PFClusterProducer.particleFlowCluster_cff import *
+rerecoPFClusteringSeq = cms.Sequence(pfClusteringPS + pfClusteringECAL)
+
+from RecoEcal.Configuration.RecoEcal_cff import *
+from Calibration.EcalCalibAlgos.electronRecalibSCAssociator_cfi import *
+ecalClusteringSeq = cms.Sequence(ecalClusters * electronRecalibSCAssociator)
+
+
+#sandboxRerecoSeq = cms.Sequence(electronRecoSeq * ecalClusteringSeq)
+#sandboxPFRerecoSeq = cms.Sequence(electronRecoSeq * rerecoPFClusteringSeq * ecalClusteringSeq)
+rerecoECALSeq = cms.Sequence(recoECALSeq * rerecoPFClusteringSeq * ecalClusteringSeq)
+
+############################################### FINAL SEQUENCES
+# sequences used in AlCaRecoStreams_cff.py
+#redo the preselection of electrons with selectorProducerSeq for recHit reducers: they use the selected objects as input
+seqALCARECOEcalRecalElectron = cms.Sequence( rerecoECALSeq * selectorProducerSeq * ALCARECOEcalCalElectronECALSeq)
+
+
diff --git a/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalUncalIsolElectron_Output_cff.py b/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalUncalIsolElectron_Output_cff.py
new file mode 100644
index 0000000000000..6fb60cd9cef6a
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalUncalIsolElectron_Output_cff.py
@@ -0,0 +1,28 @@
+import FWCore.ParameterSet.Config as cms
+from Calibration.EcalAlCaRecoProducers.ALCARECOEcalCalIsolElectron_Output_cff import *
+import copy
+
+OutALCARECOEcalUncalElectron_noDrop=copy.deepcopy(OutALCARECOEcalCalElectron_noDrop)
+OutALCARECOEcalUncalElectron_noDrop.outputCommands+=cms.untracked.vstring(
+ 'keep *_ecalDigis_*_*',
+ 'keep *EcalTriggerPrimitiveDigi*_ecalDigis_*_*',
+ 'keep *_ecalPreshowerDigis_*_*',
+ 'keep *_ecalDetIdToBeRecovered_*_*',
+ 'keep reco*Clusters_pfElectronTranslator_*_*'
+ )
+
+OutALCARECOEcalUncalElectron=copy.deepcopy(OutALCARECOEcalUncalElectron_noDrop)
+OutALCARECOEcalUncalElectron.outputCommands.insert(0, "drop *")
+OutALCARECOEcalUncalElectron.outputCommands += cms.untracked.vstring(
+ 'drop recoCaloClusters_*_*_*',
+ 'drop recoSuperClusters_*_*_*',
+ 'drop recoPreshowerCluster*_*_*_*',
+ 'drop *EcalRecHit*_reducedEcalRecHitsES*_*_*',
+ 'drop *EcalRecHit*_*_*_*',
+ 'keep reco*Clusters_pfElectronTranslator_*_*'
+ )
+
+OutALCARECOEcalUncalElectron.SelectEvents = cms.untracked.PSet(
+ SelectEvents = cms.vstring('pathALCARECOEcalUncalZElectron', 'pathALCARECOEcalUncalZSCElectron', 'pathALCARECOEcalUncalWElectron')
+ )
+
diff --git a/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalUncalIsolElectron_cff.py b/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalUncalIsolElectron_cff.py
new file mode 100644
index 0000000000000..b172eb206b274
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/ALCARECOEcalUncalIsolElectron_cff.py
@@ -0,0 +1,20 @@
+import FWCore.ParameterSet.Config as cms
+
+#restarting from ECAL RAW to reconstruct amplitudes and energies
+# create uncalib recHit collections
+from Calibration.EcalAlCaRecoProducers.ALCARECOEcalCalIsolElectron_cff import *
+from Configuration.StandardSequences.RawToDigi_Data_cff import *
+from RecoLocalCalo.Configuration.ecalLocalRecoSequence_cff import *
+
+from RecoLocalCalo.EcalRecProducers.ecalGlobalUncalibRecHit_cfi import *
+ecalUncalibRecHitSequence53X = cms.Sequence(ecalGlobalUncalibRecHit * ecalDetIdToBeRecovered)
+
+uncalibRecHitSeq = cms.Sequence( (ecalDigis + ecalPreshowerDigis) * ecalUncalibRecHitSequence)
+
+ALCARECOEcalUncalElectronECALSeq = cms.Sequence( uncalibRecHitSeq )
+
+############################################### FINAL SEQUENCES
+# sequences used in AlCaRecoStreams_cff.py
+seqALCARECOEcalUncalZElectron = cms.Sequence(ZeeSkimFilterSeq * ALCARECOEcalCalElectronNonECALSeq * ALCARECOEcalUncalElectronECALSeq)
+seqALCARECOEcalUncalZSCElectron = cms.Sequence(ZSCSkimFilterSeq * ALCARECOEcalCalElectronNonECALSeq * ALCARECOEcalUncalElectronECALSeq)
+seqALCARECOEcalUncalWElectron = cms.Sequence(WenuSkimFilterSeq * ALCARECOEcalCalElectronNonECALSeq * ALCARECOEcalUncalElectronECALSeq)
diff --git a/Calibration/EcalAlCaRecoProducers/python/AlCaElectronTracksReducer_cfi.py b/Calibration/EcalAlCaRecoProducers/python/AlCaElectronTracksReducer_cfi.py
new file mode 100644
index 0000000000000..420fb1310efb9
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/AlCaElectronTracksReducer_cfi.py
@@ -0,0 +1,12 @@
+import FWCore.ParameterSet.Config as cms
+
+alcaElectronTracksReducer = cms.EDProducer("AlCaElectronTracksReducer",
+ electronLabel = cms.InputTag("gedGsfElectrons"),
+ alcaTrackCollection = cms.string('alCaElectronTracks'),
+ generalTracksLabel = cms.InputTag("generalTracks"),
+ alcaTrackExtraCollection = cms.string('alCaElectronTracksExtra'),
+ generalTracksExtraLabel = cms.InputTag("generalTracksExtra"),
+
+ )
+
+
diff --git a/Calibration/EcalAlCaRecoProducers/python/PUDumper_cfi.py b/Calibration/EcalAlCaRecoProducers/python/PUDumper_cfi.py
new file mode 100644
index 0000000000000..ef98f57dc80ca
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/PUDumper_cfi.py
@@ -0,0 +1,7 @@
+import FWCore.ParameterSet.Config as cms
+
+PUDumper = cms.EDAnalyzer('PUDumper',
+ pileupSummary = cms.InputTag("addPileupInfo"),
+# vertexCollection = cms.InputTag('offlinePrimaryVertices'),
+# foutName = cms.string("ZShervinNtuple.root"),
+ )
diff --git a/Calibration/EcalAlCaRecoProducers/python/WZElectronSkims53X_cff.py b/Calibration/EcalAlCaRecoProducers/python/WZElectronSkims53X_cff.py
new file mode 100644
index 0000000000000..efa61d3bdb74b
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/WZElectronSkims53X_cff.py
@@ -0,0 +1,275 @@
+import FWCore.ParameterSet.Config as cms
+
+HLTPath = "HLT_Ele*"
+HLTProcessName = "HLT"
+
+## ____ __ _____ _ _
+## / ___|___ / _| ____| | ___ ___| |_ _ __ ___ _ __
+## | | _/ __| |_| _| | |/ _ \/ __| __| '__/ _ \| '_ \
+## | |_| \__ \ _| |___| | __/ (__| |_| | | (_) | | | |
+## \____|___/_| |_____|_|\___|\___|\__|_| \___/|_| |_|
+##
+# GsfElectron ################
+
+GsfMatchedPhotonCands = cms.EDProducer("ElectronMatchedCandidateProducer",
+ src = cms.InputTag("goodPhotons"),
+ ReferenceElectronCollection = cms.untracked.InputTag("goodElectrons"),
+ deltaR = cms.untracked.double(0.3)
+)
+
+## _____ _ _ ___ _
+## | ____| | ___ ___| |_ _ __ ___ _ __ |_ _|__| |
+## | _| | |/ _ \/ __| __| '__/ _ \| '_ \ | |/ _` |
+## | |___| | __/ (__| |_| | | (_) | | | | | | (_| |
+## |_____|_|\___|\___|\__|_| \___/|_| |_| |___\__,_|
+##
+# Electron ID ######
+
+
+
+## _____ _ __ __ _ _ _
+## |_ _| __(_) __ _ __ _ ___ _ __ | \/ | __ _| |_ ___| |__ (_)_ __ __ _
+## | || '__| |/ _` |/ _` |/ _ \ '__| | |\/| |/ _` | __/ __| '_ \| | '_ \ / _` |
+## | || | | | (_| | (_| | __/ | | | | | (_| | || (__| | | | | | | | (_| |
+## |_||_| |_|\__, |\__, |\___|_| |_| |_|\__,_|\__\___|_| |_|_|_| |_|\__, |
+## |___/ |___/ |___/
+##
+# Trigger ##################
+PassingHLT = cms.EDProducer("trgMatchGsfElectronProducer",
+ InputProducer = cms.InputTag( 'gedGsfElectrons' ),
+ hltTags = cms.untracked.string( HLTPath ),
+ triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLTProcessName),
+ triggerResultsTag = cms.untracked.InputTag("TriggerResults","",HLTProcessName)
+)
+
+# WElecTagHLT = PassingHLT.clone(
+# InputProducer = cms.InputTag( "PassingWP80" )
+# )
+
+# ele_sequence = cms.Sequence(
+# goodElectrons +
+# PassingWP80 +
+# WElecTagHLT
+# )
+
+
+import HLTrigger.HLTfilters.hltHighLevel_cfi
+ZSCHltFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone(
+ throw = cms.bool(False),
+ HLTPaths = ['HLT_Ele27_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele15_CaloIdT_CaloIsoVL_trackless_v*']
+ )
+
+# elecMetSeq = cms.Sequence( WEnuHltFilter * ele_sequence * elecMetFilter )
+
+
+selectedElectrons = cms.EDFilter("GsfElectronRefSelector",
+ src = cms.InputTag( 'gedGsfElectrons' ),
+ cut = cms.string(
+# "(abs(superCluster.eta)<2.5) && (energy*sin(superClusterPosition.theta)> 15)")
+ "(abs(superCluster.eta)<3) && (energy*sin(superClusterPosition.theta)> 15)")
+ )
+
+selectedMuons = cms.EDFilter("MuonRefSelector",
+ src = cms.InputTag( 'muons' ),
+ cut = cms.string("")
+ )
+
+selectedPhotons = cms.EDFilter("PhotonRefSelector",
+ src = cms.InputTag( 'gedPhotons' ),
+ cut = cms.string(
+ "(abs(superCluster.eta)<3) && (pt> 10)")
+ )
+
+# This are the cuts at trigger level except ecalIso
+PassingVeryLooseId = selectedElectrons.clone(
+ cut = cms.string(
+ selectedElectrons.cut.value() +
+ " && (gsfTrack.trackerExpectedHitsInner.numberOfHits<=1)" #wrt std WP90 allowing 1 numberOfMissingExpectedHits
+ " && ((isEB"
+ " && ( dr03TkSumPt/p4.Pt <0.2 "#&& dr03EcalRecHitSumEt/p4.Pt < 0.3
+ " && dr03HcalTowerSumEt/p4.Pt < 0.2 )"
+ " && (sigmaIetaIeta<0.01)"
+ " && ( -0.15=1.479 && sigmaIetaIeta<0.04 && hadronicOverEm<0.06 ) )"
+ )
+ )
+
+MuFilter = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("PassingMuonVeryLooseId"),
+ minNumber = cms.uint32(2)
+ )
+PhoFilter = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("PassingPhotonVeryLooseId"),
+ minNumber = cms.uint32(1)
+ )
+
+#------------------------------ electronID producer
+from Calibration.EleSelectionProducers.eleselectionproducers_cfi import *
+# process.EleSelectionProducers
+
+SCselector = cms.EDFilter("SuperClusterSelector",
+ src = cms.InputTag('correctedMulti5x5SuperClustersWithPreshower'),
+ cut = cms.string('(eta>2.4 || eta<-2.4) && (energy*sin(position.theta)> 15)')
+ )
+
+### Build candidates from all the merged superclusters
+eleSC = cms.EDProducer('ConcreteEcalCandidateProducer',
+ src = cms.InputTag('SCselector'),
+ particleType = cms.string('gamma')
+ )
+
+selectedCands = cms.EDFilter("AssociatedVariableMaxCutCandRefSelector",
+ src = cms.InputTag("eleSelectionProducers:loose"),
+ max = cms.double("0.5")
+ )
+
+eleSelSeq = cms.Sequence( selectedElectrons + PassingVeryLooseId + PassingTightId +
+ (SCselector*eleSC)
+ )
+
+muSelSeq = cms.Sequence( selectedMuons + PassingMuonVeryLooseId + PassingPhotonVeryLooseId + MuFilter + PhoFilter +
+ (SCselector*eleSC)
+ )
+
+############################################################
+# Selectors
+##############################
+ZeeSelector = cms.EDProducer("CandViewShallowCloneCombiner",
+ decay = cms.string("PassingVeryLooseId PassingVeryLooseId"),
+ checkCharge = cms.bool(False),
+ cut = cms.string("mass > 40 && mass < 140")
+ )
+
+
+#met, mt cuts for W selection
+MT="sqrt(2*daughter(0).pt*daughter(1).pt*(1 - cos(daughter(0).phi - daughter(1).phi)))"
+MET_CUT_MIN = 25.
+W_ELECTRON_ET_CUT_MIN = 30.0
+MT_CUT_MIN = 50.
+
+WenuSelector = cms.EDProducer("CandViewShallowCloneCombiner",
+ decay = cms.string("pfMet PassingTightId"), # charge coniugate states are implied
+ checkCharge = cms.bool(False),
+ cut = cms.string(("daughter(0).pt > %f && daughter(1).pt > %f && "+MT+" > %f") % (MET_CUT_MIN, W_ELECTRON_ET_CUT_MIN, MT_CUT_MIN))
+)
+
+
+EleSCSelector = cms.EDProducer("CandViewShallowCloneCombiner",
+ decay = cms.string("PassingVeryLooseId eleSC"),
+# decay = cms.string("selectedElectrons eleSC"),
+# decay = cms.string("PassingVeryLooseId photons"),
+ checkCharge = cms.bool(False),
+# cut = cms.string("40 27")
+ cut = cms.string("40 < mass < 140 ")
+ )
+WZSelector = cms.EDProducer("CandViewMerger",
+ src = cms.VInputTag("WenuSelector", "ZeeSelector", "EleSCSelector")
+ )
+
+
+
+############################################################
+# Filters
+##############################
+WenuFilter = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("WenuSelector"),
+ minNumber = cms.uint32(1)
+ )
+# filter events with at least one Zee candidate as identified by the ZeeSelector
+ZeeFilter = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("ZeeSelector"),
+ minNumber = cms.uint32(1)
+ )
+
+MinZSCNumberFilter = cms.EDFilter("CandViewCountFilter",
+ #src = cms.InputTag('SCselector'),
+ src = cms.InputTag('eleSC'),
+ minNumber = cms.uint32(1)
+ )
+ZSCFilter = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("EleSCSelector"),
+ minNumber = cms.uint32(1)
+ )
+
+WZFilter = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("WZSelector"),
+ minNumber = cms.uint32(1)
+ )
+
+FilterSeq = cms.Sequence(eleSelSeq * (ZeeSelector + WenuSelector + EleSCSelector) * WZSelector)
+ZSCSingleEleFilterSeq = cms.Sequence(~ZSCHltFilter * eleSelSeq * EleSCSelector * ZSCFilter)
+FilterMuSeq = cms.Sequence(muSelSeq * (ZeeSelector + WenuSelector + EleSCSelector) * WZSelector)
diff --git a/Calibration/EcalAlCaRecoProducers/python/WZElectronSkims_cff.py b/Calibration/EcalAlCaRecoProducers/python/WZElectronSkims_cff.py
new file mode 100644
index 0000000000000..73535109e662f
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/WZElectronSkims_cff.py
@@ -0,0 +1,277 @@
+import FWCore.ParameterSet.Config as cms
+
+#HLTPath = "HLT_Ele*"
+#HLTProcessName = "HLT"
+myEleCollection = cms.InputTag("gedGsfElectrons")
+
+MinEleNumberFilter = cms.EDFilter("CandViewCountFilter",
+ src = myEleCollection,
+ minNumber = cms.uint32(1)
+ )
+
+## ____ __ _____ _ _
+## / ___|___ / _| ____| | ___ ___| |_ _ __ ___ _ __
+## | | _/ __| |_| _| | |/ _ \/ __| __| '__/ _ \| '_ \
+## | |_| \__ \ _| |___| | __/ (__| |_| | | (_) | | | |
+## \____|___/_| |_____|_|\___|\___|\__|_| \___/|_| |_|
+##
+# GsfElectron ################
+
+GsfMatchedPhotonCands = cms.EDProducer("ElectronMatchedCandidateProducer",
+ src = cms.InputTag("goodPhotons"),
+ ReferenceElectronCollection = cms.untracked.InputTag("goodElectrons"),
+ deltaR = cms.untracked.double(0.3)
+)
+
+
+
+
+## _____ _ __ __ _ _ _
+## |_ _| __(_) __ _ __ _ ___ _ __ | \/ | __ _| |_ ___| |__ (_)_ __ __ _
+## | || '__| |/ _` |/ _` |/ _ \ '__| | |\/| |/ _` | __/ __| '_ \| | '_ \ / _` |
+## | || | | | (_| | (_| | __/ | | | | | (_| | || (__| | | | | | | | (_| |
+## |_||_| |_|\__, |\__, |\___|_| |_| |_|\__,_|\__\___|_| |_|_|_| |_|\__, |
+## |___/ |___/ |___/
+##
+# Trigger ##################
+#PassingHLT = cms.EDProducer("trgMatchGsfElectronProducer",
+# InputProducer = myEleCollection,
+# hltTags = cms.untracked.string( HLTPath ),
+# triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLTProcessName),
+# triggerResultsTag = cms.untracked.InputTag("TriggerResults","",HLTProcessName)
+#)
+
+
+
+import HLTrigger.HLTfilters.hltHighLevel_cfi
+ZSCHltFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone(
+ throw = cms.bool(False),
+ HLTPaths = ['HLT_Ele27_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele15_CaloIdT_CaloIsoVL_trackless_v*']
+ )
+
+# elecMetSeq = cms.Sequence( WEnuHltFilter * ele_sequence * elecMetFilter )
+
+###MC check efficiency
+genEleFromZ = cms.EDFilter("CandViewSelector",
+ src = cms.InputTag("genParticles"),
+ cut = cms.string("(pdgId == 11 || pdgId == -11) && eta <2.5 && eta>-2.5 && pt > 15 && mother(0).pdgId == 23"),
+ )
+
+genEleFromW = cms.EDFilter("CandViewSelector",
+ src = cms.InputTag("genParticles"),
+ cut = cms.string("(pdgId == 11 || pdgId == -11) && eta <2.5 && eta>-2.5 && pt > 25 && (mother(0).pdgId == 24 || mother(0).pdgId == -24)"),
+ )
+
+genNuFromW = cms.EDFilter("CandViewSelector",
+ src = cms.InputTag("genParticles"),
+ cut = cms.string("(pdgId == 12 || pdgId == -12) && (mother(0).pdgId == 24 || mother(0).pdgId == -24)"),
+ )
+
+combZ = cms.EDProducer("CandViewShallowCloneCombiner",
+ decay = cms.string("genEleFromZ genEleFromZ"),
+ checkCharge = cms.bool(False),
+ cut = cms.string("40 < mass < 140"),
+ )
+
+combW = cms.EDProducer("CandViewShallowCloneCombiner",
+ decay = cms.string("genEleFromW genNuFromW"),
+ checkCharge = cms.bool(False),
+ cut = cms.string(""),
+ )
+
+ZFilterMC = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("combZ"),
+ minNumber = cms.uint32(1)
+ )
+
+WFilterMC = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("combW"),
+ minNumber = cms.uint32(1)
+ )
+
+
+## _____ _ _ ___ _
+## | ____| | ___ ___| |_ _ __ ___ _ __ |_ _|__| |
+## | _| | |/ _ \/ __| __| '__/ _ \| '_ \ | |/ _` |
+## | |___| | __/ (__| |_| | | (_) | | | | | | (_| |
+## |_____|_|\___|\___|\__|_| \___/|_| |_| |___\__,_|
+##
+# Electron ID ######
+
+selectedECALElectrons = cms.EDFilter("GsfElectronRefSelector",
+ src = myEleCollection,
+ cut = cms.string(
+ "(abs(superCluster.eta)<3) && (energy*sin(superClusterPosition.theta)> 15)")
+ )
+
+selectedECALMuons = cms.EDFilter("MuonRefSelector",
+ src = cms.InputTag( 'muons' ),
+ cut = cms.string("")
+ )
+
+selectedECALPhotons = cms.EDFilter("PhotonRefSelector",
+ src = cms.InputTag( 'gedPhotons' ),
+ cut = cms.string(
+ "(abs(superCluster.eta)<3) && (pt > 10)")
+ )
+
+
+# This are the cuts at trigger level except ecalIso
+PassingVetoId = selectedECALElectrons.clone(
+ cut = cms.string(
+ selectedECALElectrons.cut.value() +
+ " && (gsfTrack.hitPattern().numberOfHits(\'MISSING_INNER_HITS\')<=2)"
+ " && ((isEB"
+ " && ( ((pfIsolationVariables().sumChargedHadronPt + max(0.0,pfIsolationVariables().sumNeutralHadronEt + pfIsolationVariables().sumPhotonEt - 0.5 * pfIsolationVariables().sumPUPt))/p4.pt)<0.164369)"
+ " && (full5x5_sigmaIetaIeta<0.011100)"
+ " && ( - 0.252044=1.479 && sigmaIetaIeta<0.04 && hadronicOverEm<0.06 ) )"
+ )
+ )
+
+MuFilter = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("PassingMuonVeryLooseId"),
+ minNumber = cms.uint32(2)
+ )
+PhoFilter = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("PassingPhotonVeryLooseId"),
+ minNumber = cms.uint32(1)
+ )
+
+
+#------------------------------ electronID producer
+SCselector = cms.EDFilter("SuperClusterSelector",
+ src = cms.InputTag('correctedMulti5x5SuperClustersWithPreshower'),
+ cut = cms.string('(eta>2.4 || eta<-2.4) && (energy*sin(position.theta)> 15)')
+ )
+
+### Build candidates from all the merged superclusters
+eleSC = cms.EDProducer('ConcreteEcalCandidateProducer',
+ src = cms.InputTag('SCselector'),
+ particleType = cms.string('gamma')
+ )
+
+# selectedCands = cms.EDFilter("AssociatedVariableMaxCutCandRefSelector",
+# src = cms.InputTag("eleSelectionProducers:loose"),
+# max = cms.double("0.5")
+# )
+
+#ecalCandidateMerged = cms.EDProducer("CandViewMerger",
+# src = cms.VInputTag("PassingVetoId", "eleSC")
+# )
+
+eleSelSeq = cms.Sequence( selectedECALElectrons + PassingVetoId +
+ (SCselector*eleSC)
+ )
+
+muSelSeq = cms.Sequence( selectedECALMuons + selectedECALPhotons + PassingMuonVeryLooseId + PassingPhotonVeryLooseId + MuFilter + PhoFilter +
+ (SCselector*eleSC)
+ )
+
+
+############################################################
+# Selectors
+##############################
+ZeeSelector = cms.EDProducer("CandViewShallowCloneCombiner",
+ decay = cms.string("PassingVetoId PassingVetoId"),
+ checkCharge = cms.bool(False),
+ cut = cms.string("40 < mass < 140")
+ )
+
+
+#met, mt cuts for W selection
+MT="sqrt(2*daughter(0).pt*daughter(1).pt*(1 - cos(daughter(0).phi - daughter(1).phi)))"
+MET_CUT_MIN = 25.
+W_ELECTRON_ET_CUT_MIN = 30.0
+MT_CUT_MIN = 50.
+
+WenuSelector = cms.EDProducer("CandViewShallowCloneCombiner",
+ decay = cms.string("pfMet PassingVetoId"), # charge coniugate states are implied
+ checkCharge = cms.bool(False),
+ cut = cms.string(("daughter(0).pt > %f && daughter(1).pt > %f && "+MT+" > %f") % (MET_CUT_MIN, W_ELECTRON_ET_CUT_MIN, MT_CUT_MIN))
+)
+
+
+EleSCSelector = cms.EDProducer("CandViewShallowCloneCombiner",
+ decay = cms.string("PassingVetoId eleSC"),
+ checkCharge = cms.bool(False),
+ cut = cms.string("40 < mass < 140")
+ )
+
+# for filtering events passing at least one of the filters
+WZSelector = cms.EDProducer("CandViewMerger",
+ src = cms.VInputTag("WenuSelector", "ZeeSelector", "EleSCSelector")
+ )
+
+############################################################
+# Filters
+##############################
+WenuFilter = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("WenuSelector"),
+ minNumber = cms.uint32(1)
+ )
+# filter events with at least one Zee candidate as identified by the ZeeSelector
+ZeeFilter = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("ZeeSelector"),
+ minNumber = cms.uint32(1)
+ )
+
+ZSCFilter = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("EleSCSelector"),
+ minNumber = cms.uint32(1)
+ )
+
+# filter for events passing at least one of the other filters
+WZFilter = cms.EDFilter("CandViewCountFilter",
+ src = cms.InputTag("WZSelector"),
+ minNumber = cms.uint32(1)
+ )
+
+
+
+############################################################
+# Sequences
+##############################
+
+preFilterSeq = cms.Sequence(MinEleNumberFilter)
+
+selectorProducerSeq = cms.Sequence(eleSelSeq * (ZeeSelector + WenuSelector + EleSCSelector) * WZSelector)
+
+ZeeSkimFilterSeq = cms.Sequence(preFilterSeq * selectorProducerSeq *
+ ZeeFilter)
+ZSCSkimFilterSeq = cms.Sequence(preFilterSeq * selectorProducerSeq *
+ ~ZeeFilter * ZSCFilter)
+WenuSkimFilterSeq = cms.Sequence(preFilterSeq * selectorProducerSeq *
+ ~ZeeFilter * ~ZSCFilter * WenuFilter)
+
+
+checkMCZSeq = cms.Sequence(genEleFromZ * combZ * ZFilterMC) #sequence to check Zskim efficiency respect to the MC
+checkMCWSeq = cms.Sequence(genEleFromW * genNuFromW * combW * WFilterMC) #sequence to check Wskim efficiency respect to the MC
+
+#FilterMuSeq = cms.Sequence(muSelSeq * (ZeeSelector + WenuSelector + EleSCSelector) * WZSelector)
diff --git a/Calibration/EcalAlCaRecoProducers/python/alCaIsolatedElectrons_cfi.py b/Calibration/EcalAlCaRecoProducers/python/alCaIsolatedElectrons_cfi.py
index 2244fde2b69f5..57cd695041e06 100644
--- a/Calibration/EcalAlCaRecoProducers/python/alCaIsolatedElectrons_cfi.py
+++ b/Calibration/EcalAlCaRecoProducers/python/alCaIsolatedElectrons_cfi.py
@@ -1,18 +1,30 @@
import FWCore.ParameterSet.Config as cms
alCaIsolatedElectrons = cms.EDProducer("AlCaECALRecHitReducer",
- electronLabel = cms.InputTag("gedGsfElectrons"),
- alcaEndcapHitCollection = cms.string('alcaEndcapHits'),
- phiSize = cms.int32(11),
- etaSize = cms.int32(5),
- ebRecHitsLabel = cms.InputTag("ecalRecHit","EcalRecHitsEB"),
- alcaBarrelHitCollection = cms.string('alcaBarrelHits'),
- eventWeight = cms.double(1.0),
- eeRecHitsLabel = cms.InputTag("ecalRecHit","EcalRecHitsEE"),
- esRecHitsLabel = cms.InputTag("ecalPreshowerRecHit","EcalRecHitsES"),
- alcaPreshowerHitCollection = cms.string('alcaPreshowerHits'),
- esNstrips = cms.int32(20),
- esNcolumns = cms.int32(1)
-)
+ srcLabels = cms.VInputTag( "gedGsfElectrons"),
+ photonLabel = cms.InputTag("gedPhotons"),
+ electronLabel = cms.InputTag("gedGsfElectrons"),
+ EESuperClusterCollection = cms.InputTag("correctedMulti5x5SuperClustersWithPreshower"),
+ minEta_highEtaSC = cms.double(2.4),
+# ebRecHitsLabel = cms.InputTag("reducedEcalRecHitsEB"),
+# eeRecHitsLabel = cms.InputTag("reducedEcalRecHitsEE"),
+ ebRecHitsLabel = cms.InputTag("ecalRecHit", "EcalRecHitsEB"),
+ eeRecHitsLabel = cms.InputTag("ecalRecHit", "EcalRecHitsEE"),
+ alcaCaloClusterCollection = cms.string('alcaCaloCluster'),
+# isUncalib = cms.bool(False),
+ phiSize = cms.int32(61),
+ etaSize = cms.int32(15),
+ alcaBarrelHitCollection = cms.string('alcaBarrelHits'),
+ alcaEndcapHitCollection = cms.string('alcaEndcapHits'),
+# alcaEndcapHitCollection = cms.string('alCaRecHitsEE'),
+# in sandboxRereco
+# ebRecHitsLabel = cms.InputTag("ecalRecHit","EcalRecHitsEB")
+# eeRecHitsLabel = cms.InputTag("ecalRecHit","EcalRecHitsEE")
+
+# esRecHitsLabel = cms.InputTag("ecalPreshowerRecHit","EcalRecHitsES"),
+# alcaPreshowerHitCollection = cms.string('alcaPreshowerHits'),
+# esNstrips = cms.int32(20),
+# esNcolumns = cms.int32(1)
+ )
diff --git a/Calibration/EcalAlCaRecoProducers/python/customRereco.py b/Calibration/EcalAlCaRecoProducers/python/customRereco.py
new file mode 100644
index 0000000000000..208c1634e47ca
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/customRereco.py
@@ -0,0 +1,14 @@
+import FWCore.ParameterSet.Config as cms
+
+def EcalRecal(process):
+ recalibElectronSrc = cms.InputTag("electronRecalibSCAssociator")
+ process.alCaIsolatedElectrons.srcLabels = cms.VInputTag( "electronRecalibSCAssociator")
+ process.alCaIsolatedElectrons.electronLabel = "electronRecalibSCAssociator"
+ process.alCaIsolatedElectrons.ebRecHitsLabel = cms.InputTag("ecalRecHit","EcalRecHitsEB")
+ process.alCaIsolatedElectrons.eeRecHitsLabel = cms.InputTag("ecalRecHit","EcalRecHitsEE")
+ process.alCaIsolatedElectrons.EESuperClusterCollection = process.reducedEcalRecHitsES.EndcapSuperClusterCollection
+
+ process.selectedElectrons.src = cms.InputTag("electronRecalibSCAssociator")
+ process.PassingVetoId.src = recalibElectronSrc
+# process.myEleCollection = cms.InputTag('electronRecalibSCAssociator')
+ return process
diff --git a/Calibration/EcalAlCaRecoProducers/python/eleIsoSequence_cff.py b/Calibration/EcalAlCaRecoProducers/python/eleIsoSequence_cff.py
new file mode 100644
index 0000000000000..51c28d10f57d5
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/eleIsoSequence_cff.py
@@ -0,0 +1,127 @@
+#from RecoParticleFlow.PFProducer.electronPFIsolationValues_cff import *
+#from CommonTools.ParticleFlow.PFBRECO_cff import *
+from CommonTools.ParticleFlow.Isolation.tools_cfi import *
+import FWCore.ParameterSet.Config as cms
+#Now prepare the iso deposits
+elPFIsoDepositChargedGsf=isoDepositReplace('gedGsfElectrons','pfAllChargedHadrons')
+elPFIsoDepositChargedAllGsf=isoDepositReplace('gedGsfElectrons','pfAllChargedParticles')
+elPFIsoDepositNeutralGsf=isoDepositReplace('gedGsfElectrons','pfAllNeutralHadrons')
+elPFIsoDepositPUGsf=isoDepositReplace('gedGsfElectrons','pfPileUpAllChargedParticles')
+#elPFIsoDepositGamma=isoDepositReplace('pfSelectedElectrons','pfAllPhotons')
+elPFIsoDepositGammaGsf= cms.EDProducer("CandIsoDepositProducer",
+ src = cms.InputTag("gedGsfElectrons"),
+ MultipleDepositsFlag = cms.bool(False),
+ trackType = cms.string('candidate'),
+ ExtractorPSet = cms.PSet(
+ Diff_z = cms.double(99999.99),
+ ComponentName = cms.string('PFCandWithSuperClusterExtractor'),
+ DR_Max = cms.double(1.0),
+ Diff_r = cms.double(99999.99),
+ inputCandView = cms.InputTag("pfAllPhotons"),
+ DR_Veto = cms.double(0),
+ SCMatch_Veto = cms.bool(False),
+ MissHitSCMatch_Veto = cms.bool(True),
+ DepositLabel = cms.untracked.string('')
+ )
+ )
+
+# elPFIsoDepositChargedGsf= elPFIsoDepositCharged.clone()
+# elPFIsoDepositChargedGsf.src = 'gedGsfElectrons'
+# elPFIsoDepositChargedAllGsf = elPFIsoDepositChargedAll.clone()
+# elPFIsoDepositChargedAllGsf.src = 'gedGsfElectrons'
+# elPFIsoDepositNeutralGsf = elPFIsoDepositNeutral.clone()
+# elPFIsoDepositNeutralGsf.src = 'gedGsfElectrons'
+# elPFIsoDepositGammaGsf = elPFIsoDepositGamma.clone()
+# elPFIsoDepositGammaGsf.src = 'gedGsfElectrons'
+# elPFIsoDepositPUGsf = elPFIsoDepositPU.clone()
+# elPFIsoDepositPUGsf.src = 'gedGsfElectrons'
+
+elPFIsoValueCharged03PFIdGsf = cms.EDProducer("PFCandIsolatorFromDeposits",
+ deposits = cms.VPSet(
+ cms.PSet(
+ src = cms.InputTag("elPFIsoDepositChargedGsf"),
+ deltaR = cms.double(0.3),
+ weight = cms.string('1'),
+ vetos = cms.vstring('EcalEndcaps:ConeVeto(0.015)'),
+ skipDefaultVeto = cms.bool(True),
+ mode = cms.string('sum'),
+ PivotCoordinatesForEBEE = cms.bool(True)
+ )
+ )
+ )
+elPFIsoValueChargedAll03PFIdGsf = cms.EDProducer("PFCandIsolatorFromDeposits",
+ deposits = cms.VPSet(
+ cms.PSet(
+ src = cms.InputTag("elPFIsoDepositChargedAllGsf"),
+ deltaR = cms.double(0.3),
+ weight = cms.string('1'),
+ vetos = cms.vstring('EcalEndcaps:ConeVeto(0.015)'),
+ skipDefaultVeto = cms.bool(True),
+ mode = cms.string('sum'),
+ PivotCoordinatesForEBEE = cms.bool(True)
+ )
+ )
+ )
+
+elPFIsoValueGamma03PFIdGsf = cms.EDProducer("PFCandIsolatorFromDeposits",
+ deposits = cms.VPSet(
+ cms.PSet(
+ src = cms.InputTag("elPFIsoDepositGammaGsf"),
+ deltaR = cms.double(0.3),
+ weight = cms.string('1'),
+ vetos = cms.vstring('EcalEndcaps:ConeVeto(0.08)'),
+ skipDefaultVeto = cms.bool(True),
+ mode = cms.string('sum'),
+ PivotCoordinatesForEBEE = cms.bool(True)
+ )
+ )
+)
+
+elPFIsoValueNeutral03PFIdGsf = cms.EDProducer("PFCandIsolatorFromDeposits",
+ deposits = cms.VPSet(
+ cms.PSet(
+ src = cms.InputTag("elPFIsoDepositNeutralGsf"),
+ deltaR = cms.double(0.3),
+ weight = cms.string('1'),
+ vetos = cms.vstring(),
+ skipDefaultVeto = cms.bool(True),
+ mode = cms.string('sum'),
+ PivotCoordinatesForEBEE = cms.bool(True)
+ )
+ )
+ )
+
+elPFIsoValuePU03PFIdGsf = cms.EDProducer("PFCandIsolatorFromDeposits",
+ deposits = cms.VPSet(
+ cms.PSet(
+ src = cms.InputTag("elPFIsoDepositPUGsf"),
+ deltaR = cms.double(0.3),
+ weight = cms.string('1'),
+ vetos = cms.vstring('EcalEndcaps:ConeVeto(0.015)'),
+ skipDefaultVeto = cms.bool(True),
+ mode = cms.string('sum'),
+ PivotCoordinatesForEBEE = cms.bool(True)
+ )
+ )
+ )
+
+
+# elPFIsoValueCharged03PFIdGsf = elPFIsoValueCharged03PFId.clone()
+# #elPFIsoValueCharged03PFIdGsf.deposits[0].src = cms.InputTag(elPFIsoDepositChargedGsf)
+
+# elPFIsoValueChargedAll03PFIdGsf = elPFIsoValueChargedAll03PFId.clone()
+# #elPFIsoValueChargedAll03PFIdGsf.deposits[0].src = cms.InputTag(elPFIsoDepositChargedAllGsf)
+
+# elPFIsoValueGamma03PFIdGsf = elPFIsoValueGamma03PFId.clone()
+# #elPFIsoValueGamma03PFIdGsf.deposits[0].src = cms.InputTag(elPFIsoDepositGammaGsf)
+
+
+# elPFIsoValueNeutral03PFIdGsf = elPFIsoValueNeutral03PFId.clone()
+# #elPFIsoValueNeutral03PFIdGsf.deposits[0].src = cms.InputTag(elPFIsoDepositNeutralGsf)
+
+# elPFIsoValuePU03PFIdGsf = elPFIsoValuePU03PFId.clone()
+# #elPFIsoValuePU03PFIdGsf.deposits[0].src = cms.InputTag(elPFIsoDepositPUGsf)
+
+eleIsoSequence = cms.Sequence((elPFIsoDepositChargedGsf + elPFIsoDepositChargedAllGsf + elPFIsoDepositNeutralGsf + elPFIsoDepositGammaGsf + elPFIsoDepositPUGsf))
+eleIsoSequence *= cms.Sequence(elPFIsoValueCharged03PFIdGsf+elPFIsoValueChargedAll03PFIdGsf+elPFIsoValueGamma03PFIdGsf+elPFIsoValueNeutral03PFIdGsf+elPFIsoValuePU03PFIdGsf )
+pfisoALCARECO = cms.Sequence(eleIsoSequence) #pfParticleSelectionSequence + eleIsoSequence)
diff --git a/Calibration/EcalAlCaRecoProducers/python/pdfSystematics_cff.py b/Calibration/EcalAlCaRecoProducers/python/pdfSystematics_cff.py
new file mode 100644
index 0000000000000..bcc853de799f3
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/pdfSystematics_cff.py
@@ -0,0 +1,31 @@
+import FWCore.ParameterSet.Config as cms
+
+# Produce PDF weights (maximum is 3)
+pdfWeights = cms.EDProducer("PdfWeightProducer",
+ # Fix POWHEG if buggy (this PDF set will also appear on output,
+ # so only two more PDF sets can be added in PdfSetNames if not "")
+ #FixPOWHEG = cms.untracked.string("cteq66.LHgrid"),
+ #GenTag = cms.untracked.InputTag("genParticles"),
+ PdfInfoTag = cms.untracked.InputTag("generator"),
+ PdfSetNames = cms.untracked.vstring(
+ "cteq66.LHgrid"
+ , "MRST2006nnlo.LHgrid"
+ , "NNPDF10_100.LHgrid"
+ )
+ )
+
+# Produce event weights to estimate missing O(alpha) terms + NLO QED terms
+fsrWeight = cms.EDProducer("FSRWeightProducer",
+ GenTag = cms.untracked.InputTag("genParticles"),
+ )
+
+
+# Produce event weights to estimate missing weak terms (=> include missing rho factor for Z diagrams)
+weakWeight = cms.EDProducer("WeakEffectsWeightProducer",
+ GenParticlesTag = cms.untracked.InputTag("genParticles"),
+ RhoParameter = cms.untracked.double(1.004)
+ )
+
+
+
+
diff --git a/Calibration/EcalAlCaRecoProducers/python/sandboxRerecoOutput_cff.py b/Calibration/EcalAlCaRecoProducers/python/sandboxRerecoOutput_cff.py
new file mode 100644
index 0000000000000..b5f3737e75e3f
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/sandboxRerecoOutput_cff.py
@@ -0,0 +1,8 @@
+import FWCore.ParameterSet.Config as cms
+
+
+sandboxRerecoOutputCommands = cms.untracked.vstring( [
+ 'drop recoGsfElectron*_gsfElectron*_*_*',
+ 'keep recoGsfElectron*_electronRecalibSCAssociator*_*_*'
+ ]
+ )
diff --git a/Calibration/EcalAlCaRecoProducers/python/trackerDrivenFinder_cff.py b/Calibration/EcalAlCaRecoProducers/python/trackerDrivenFinder_cff.py
new file mode 100644
index 0000000000000..8194c4e75d210
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/trackerDrivenFinder_cff.py
@@ -0,0 +1,24 @@
+import FWCore.ParameterSet.Config as cms
+
+#===================================================== removing events with trackerDrivenOnly electrons
+# if you want to filter events with trackerDrivenOnly electrons
+# you should produce a collection containing the Ref to the
+# trackerDrivenOnly electrons and then you should filter these events
+# the lines to produce the Ref collection are the following
+# you should not need to uncomment those, because I've already
+# produced them in the ALCARECO step
+trackerDrivenOnlyElectrons = cms.EDFilter("GsfElectronRefSelector",
+ src = cms.InputTag( 'gedGsfElectrons' ),
+ cut = cms.string( "(ecalDrivenSeed==0)" )
+ )
+
+# these lines active a filter that counts if there are more than 0
+# trackerDrivenOnly electrons
+trackerDrivenRemover = cms.EDFilter("PATCandViewCountFilter",
+ minNumber = cms.uint32(0),
+ maxNumber = cms.uint32(0),
+ src = cms.InputTag("trackerDrivenOnlyElectrons")
+ )
+#trackerDrivenRemoverSeq = cms.Sequence( trackerDrivenOnlyElectrons * trackerDrivenRemover )
+#trackerDrivenRemoverSeq = cms.Sequence( trackerDrivenOnlyElectrons)
+
diff --git a/Calibration/EcalAlCaRecoProducers/python/valuemaptraslator_cfi.py b/Calibration/EcalAlCaRecoProducers/python/valuemaptraslator_cfi.py
new file mode 100644
index 0000000000000..1b80433727937
--- /dev/null
+++ b/Calibration/EcalAlCaRecoProducers/python/valuemaptraslator_cfi.py
@@ -0,0 +1,22 @@
+import FWCore.ParameterSet.Config as cms
+
+elPFIsoValueCharged03PFIdRecalib = cms.EDProducer('ValueMapTraslator',
+ inputCollection = cms.InputTag('elPFIsoValueCharged03PFIdPFIso'),
+ outputCollection = cms.string(''),
+ referenceCollection = cms.InputTag('electronRecalibSCAssociator'),
+ oldreferenceCollection = cms.InputTag('gedGsfElectrons')
+ )
+
+elPFIsoValueGamma03PFIdRecalib = cms.EDProducer('ValueMapTraslator',
+ inputCollection = cms.InputTag('elPFIsoValueGamma03PFIdPFIso'),
+ outputCollection = cms.string(''),
+ referenceCollection = cms.InputTag('electronRecalibSCAssociator'),
+ oldreferenceCollection = cms.InputTag('gedGsfElectrons')
+ )
+
+elPFIsoValueNeutral03PFIdRecalib = cms.EDProducer('ValueMapTraslator',
+ inputCollection = cms.InputTag('elPFIsoValueNeutral03PFIdPFIso'),
+ outputCollection = cms.string(''),
+ referenceCollection = cms.InputTag('electronRecalibSCAssociator'),
+ oldreferenceCollection = cms.InputTag('gedGsfElectrons')
+ )
diff --git a/Calibration/EcalAlCaRecoProducers/src/AlCaECALRecHitReducer.cc b/Calibration/EcalAlCaRecoProducers/src/AlCaECALRecHitReducer.cc
deleted file mode 100644
index d7f571b215ac4..0000000000000
--- a/Calibration/EcalAlCaRecoProducers/src/AlCaECALRecHitReducer.cc
+++ /dev/null
@@ -1,319 +0,0 @@
-#include "Calibration/EcalAlCaRecoProducers/interface/AlCaECALRecHitReducer.h"
-#include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
-#include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
-#include "DataFormats/EgammaCandidates/interface/SiStripElectron.h"
-#include "DataFormats/EgammaCandidates/interface/Electron.h"
-#include "DataFormats/EgammaCandidates/interface/ElectronFwd.h"
-#include "FWCore/MessageLogger/interface/MessageLogger.h"
-#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
-#include "DataFormats/EgammaReco/interface/SuperCluster.h"
-#include "DataFormats/EcalDetId/interface/EBDetId.h"
-#include "DataFormats/EcalDetId/interface/EEDetId.h"
-#include "DataFormats/EcalDetId/interface/ESDetId.h"
-#include "DataFormats/EgammaReco/interface/BasicCluster.h"
-#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
-#include "Geometry/CaloGeometry/interface/CaloGeometry.h"
-#include "Geometry/CaloGeometry/interface/CaloCellGeometry.h"
-#include "Geometry/EcalAlgo/interface/EcalPreshowerGeometry.h"
-#include "Geometry/CaloTopology/interface/EcalPreshowerTopology.h"
-#include "Geometry/Records/interface/CaloGeometryRecord.h"
-#include "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h"
-#include "FWCore/Framework/interface/ESHandle.h"
-#include "Geometry/CaloTopology/interface/CaloTopology.h"
-#include "Geometry/CaloTopology/interface/EcalBarrelTopology.h"
-
-//#define ALLrecHits
-//#define DEBUG
-
-//#define QUICK -> if commented loop over the recHits of the SC and add them to the list of recHits to be saved
-// comment it if you want a faster module but be sure the window is large enough
-
-AlCaECALRecHitReducer::AlCaECALRecHitReducer(const edm::ParameterSet& iConfig)
-{
-
- ebRecHitsLabel_ = iConfig.getParameter< edm::InputTag > ("ebRecHitsLabel");
- eeRecHitsLabel_ = iConfig.getParameter< edm::InputTag > ("eeRecHitsLabel");
- // esRecHitsLabel_ = iConfig.getParameter< edm::InputTag > ("esRecHitsLabel");
- electronLabel_ = iConfig.getParameter< edm::InputTag > ("electronLabel");
-
- alcaBarrelHitsCollection_ = iConfig.getParameter("alcaBarrelHitCollection");
- alcaEndcapHitsCollection_ = iConfig.getParameter("alcaEndcapHitCollection");
- // alcaPreshowerHitsCollection_ = iConfig.getParameter("alcaPreshowerHitCollection");
-
- etaSize_ = iConfig.getParameter ("etaSize");
- phiSize_ = iConfig.getParameter ("phiSize");
- // FIXME: minimum size of etaSize_ and phiSize_
- if ( phiSize_ % 2 == 0 || etaSize_ % 2 == 0)
- edm::LogError("AlCaECALRecHitReducerError") << "Size of eta/phi should be odd numbers";
-
- weight_= iConfig.getParameter ("eventWeight");
-
- // esNstrips_ = iConfig.getParameter ("esNstrips");
- // esNcolumns_ = iConfig.getParameter ("esNcolumns");
-
- //register your products
- produces< EBRecHitCollection > (alcaBarrelHitsCollection_) ;
- produces< EERecHitCollection > (alcaEndcapHitsCollection_) ;
- // produces< ESRecHitCollection > (alcaPreshowerHitsCollection_) ;
- produces< double > ("weight") ;
-}
-
-
-AlCaECALRecHitReducer::~AlCaECALRecHitReducer()
-{}
-
-
-// ------------ method called to produce the data ------------
-void
-AlCaECALRecHitReducer::produce (edm::Event& iEvent,
- const edm::EventSetup& iSetup)
-{
- using namespace edm;
- using namespace std;
-
- EcalRecHitCollection::const_iterator recHit_itr;
-
- // get the ECAL geometry:
- ESHandle geoHandle;
- iSetup.get().get(geoHandle);
-
- edm::ESHandle theCaloTopology;
- iSetup.get().get(theCaloTopology);
- const CaloTopology *caloTopology = theCaloTopology.product();
-
- // Get GSFElectrons
- Handle pElectrons;
- iEvent.getByLabel(electronLabel_, pElectrons);
- if (!pElectrons.isValid()) {
- edm::LogError ("reading") << electronLabel_ << " not found" ;
- // std::cerr << "[AlCaECALRecHitReducer]" << electronLabel_ << " not found" ;
- return ;
- }
-
- const reco::GsfElectronCollection * electronCollection =
- pElectrons.product();
-
- // get RecHits
- Handle barrelRecHitsHandle;
- bool barrelIsFull = true ;
-
- iEvent.getByLabel(ebRecHitsLabel_,barrelRecHitsHandle);
- if (!barrelRecHitsHandle.isValid()) {
- edm::LogError ("reading") << ebRecHitsLabel_ << " not found" ;
- barrelIsFull = false ;
- }
-
- const EBRecHitCollection * barrelHitsCollection = 0 ;
- if (barrelIsFull)
- barrelHitsCollection = barrelRecHitsHandle.product () ;
-
- // get RecHits
- Handle endcapRecHitsHandle;
- bool endcapIsFull = true ;
-
- iEvent.getByLabel(eeRecHitsLabel_,endcapRecHitsHandle);
- if (!endcapRecHitsHandle.isValid()) {
- edm::LogError ("reading") << eeRecHitsLabel_ << " not found" ;
- endcapIsFull = false ;
- }
-
- const EERecHitCollection * endcapHitsCollection = 0 ;
- if (endcapIsFull)
- endcapHitsCollection = endcapRecHitsHandle.product () ;
- // const EERecHitCollection * endcapHitsCollection = endcapRecHitsHandle.product();
-
- // // get ES RecHits
- // Handle preshowerRecHitsHandle;
- // bool preshowerIsFull = true ;
-
- // iEvent.getByLabel(esRecHitsLabel_,preshowerRecHitsHandle);
- // if (!preshowerRecHitsHandle.isValid()) {
- // edm::LogError ("reading") << esRecHitsLabel_ << " not found" ;
- // preshowerIsFull = false ;
- // }
-
- // const ESRecHitCollection * preshowerHitsCollection = 0 ;
- // if (preshowerIsFull)
- // preshowerHitsCollection = preshowerRecHitsHandle.product () ;
-
- // // make a vector to store the used ES rechits:
- // set used_strips;
- // used_strips.clear();
-
- //Create empty output collections
- std::auto_ptr< EBRecHitCollection > miniEBRecHitCollection (new EBRecHitCollection) ;
- std::auto_ptr< EERecHitCollection > miniEERecHitCollection (new EERecHitCollection) ;
- // std::auto_ptr< ESRecHitCollection > miniESRecHitCollection (new ESRecHitCollection) ;
- std::auto_ptr< double > weight (new double(1));
- (*weight) = weight_;
-
- // loop on SiStrip Electrons
-
- reco::GsfElectronCollection::const_iterator eleIt;
- int nEle_EB=0;
- int nEle_EE=0;
-
- std::set reducedRecHit_EBmap;
- std::set reducedRecHit_EEmap;
-
- for (eleIt=electronCollection->begin(); eleIt!=electronCollection->end(); eleIt++) {
- // barrel
- const reco::SuperCluster& sc = *(eleIt->superCluster()) ;
-
- if (eleIt->isEB()) {
- nEle_EB++;
-
- // find the seed
- EBDetId seed=(sc.seed()->seed());
-
- std::vector recHit_window = caloTopology->getWindow(seed, phiSize_, etaSize_);
- for(unsigned int i =0; i < recHit_window.size(); i++){
-#ifdef DEBUG2
- std::cout << i << "/" << recHit_window.size() << "\t" << recHit_window[i]() << std::endl;
-#endif
- reducedRecHit_EBmap.insert(recHit_window[i]);
-#ifdef DEBUG2
- EBDetId ebrechit(recHit_window[i]);
- std::cout << ebrechit.ieta() << "\t" << ebrechit.iphi() << std::endl;
-#endif
- }
-
-#ifdef DEBUG
- // find the most energetic crystal
- float energy_recHit_max=-999;
-
- if(reducedRecHit_EBmap.size() < sc.size())
- std::cerr << "[WARNING] number of recHit in selected window < RECO SC recHits!" << std::endl;
-#endif
-
-#ifndef QUICK
- const std::vector< std::pair > & scHits = sc.hitsAndFractions();
-
-#ifdef DEBUG
- std::vector< std::pair >::const_iterator scHit_max_itr = scHits.end();
-#endif
- for(std::vector< std::pair >::const_iterator scHit_itr = scHits.begin();
- scHit_itr != scHits.end(); scHit_itr++){
- // the map fills just one time (avoiding double insert of recHits)
- reducedRecHit_EBmap.insert(scHit_itr->first);
-
-#ifdef DEBUG2
- const EcalRecHit ecalRecHit = *(barrelHitsCollection->find( (*scHit_itr).first ));
- if(energy_recHit_max < ecalRecHit.energy()){
- scHit_max_itr = scHit_itr;
- energy_recHit_max=ecalRecHit.energy();
- }
-#endif
- }
-#endif
-
-#ifdef DEBUG2
- // cross check, the seed should be the highest energetic crystal in the SC
- if(EBDetId(scHit_max_itr->first) != seed)
- std::cerr << "[ERROR] highest energetic crystal is not the seed of the SC" << std::endl;
-
- else{
-
- std::cout << "[DEBUG] highest energetic crystal = " << EBDetId(scHit_max_itr->first) << std::endl;
- std::cout << "[DEBUG] seed of the SC = " << seed << std::endl;
- }
-#endif
- // (id, phi, eta)
-
- if(reducedRecHit_EBmap.size() < sc.size()){
- if(eleIt->ecalDrivenSeed())
- edm::LogError("AlCaSavedRecHitsEB") << "[ERROR] ecalDrivenSeed: number of saved recHits < RECO SC recHits!: " << reducedRecHit_EBmap.size() << " < " << sc.size() << std::endl;
- else
- edm::LogWarning("AlCaSavedRecHitsEB") << "[WARNING] trackerDrivenSeed: number of saved recHits < RECO SC recHits!: " << reducedRecHit_EBmap.size() << " < " << sc.size() << std::endl;
-
- }
-
- } else { // endcap
- nEle_EE++;
-
- // find the seed
- EEDetId seed=(sc.seed()->seed());
-
- // get detId for a window around the seed of the SC
- int sideSize = std::max(phiSize_,etaSize_);
- std::vector recHit_window = caloTopology->getWindow(seed, sideSize, sideSize);
-
- // fill the recHit map with the DetId of the window
- for(std::vector::const_iterator window_itr = recHit_window.begin();
- window_itr != recHit_window.end(); window_itr++){
- reducedRecHit_EEmap.insert(*window_itr);
- }
-#ifdef DEBUG
- if(reducedRecHit_EEmap.size() < sc.size())
- std::cerr << "[WARNING] number of recHit in selected window < RECO SC recHits!" << std::endl;
-#endif
-
- const std::vector< std::pair > & scHits = sc.hitsAndFractions();
-
-#ifndef QUICK
- // fill the recHit map with the DetId of the SC recHits
-
- for(std::vector< std::pair >::const_iterator scHit_itr = scHits.begin();
- scHit_itr != scHits.end(); scHit_itr++){
- // the map fills just one time (avoiding double insert of recHits)
- reducedRecHit_EEmap.insert(scHit_itr->first);
-
- }
-#endif
-
- if(reducedRecHit_EEmap.size() < sc.size()){
- if(eleIt->ecalDrivenSeed())
- edm::LogError("AlCaSavedRecHitsEE") << "[ERROR] ecalDrivenSeed: number of saved recHits < RECO SC recHits!: " << reducedRecHit_EEmap.size() << " < " << sc.size() << std::endl;
- else
- edm::LogWarning("AlCaSavedRecHitsEE") << "[WARNING] trackerDrivenSeed: number of saved recHits < RECO SC recHits!: " << reducedRecHit_EEmap.size() << " < " << sc.size() << std::endl;
-
- }
-
- } // end of endcap
- }
-
-#ifndef ALLrecHits
- for(std::set::const_iterator itr = reducedRecHit_EBmap.begin();
- itr != reducedRecHit_EBmap.end(); itr++){
- if (barrelHitsCollection->find(*itr) != barrelHitsCollection->end())
- miniEBRecHitCollection->push_back(*(barrelHitsCollection->find(*itr)));
- }
-#else
- for(EcalRecHitCollection::const_iterator recHits_itr = barrelHitsCollection->begin();
- recHits_itr != barrelHitsCollection->end();
- recHits_itr++){
- miniEBRecHitCollection->push_back(*recHits_itr);
- }
-#endif
-
- // fill the alcareco reduced recHit collection
- for(std::set::const_iterator itr = reducedRecHit_EEmap.begin();
- itr != reducedRecHit_EEmap.end(); itr++){
- if (endcapHitsCollection->find(*itr) != endcapHitsCollection->end())
- miniEERecHitCollection->push_back(*(endcapHitsCollection->find(*itr)));
- }
-
-
-
-#ifdef DEBUG
- std::cout << "nEle_EB= " << nEle_EB << "\tnEle_EE = " << nEle_EE << std::endl;
- if(nEle_EB > 0 && miniEBRecHitCollection->size() < (unsigned int) phiSize_*etaSize_)
- edm::LogError("AlCaECALRecHitReducerError") << "Size EBRecHitCollection < " << phiSize_*etaSize_ << ": " << miniEBRecHitCollection->size() ;
-
- int side = phiSize_ ;
- if (phiSize_ < etaSize_) side = etaSize_ ;
-
- if(nEle_EE > 0 && miniEERecHitCollection->size() < (unsigned int )side*side)
- edm::LogError("AlCaECALRecHitReducerError") << "Size EERecHitCollection < " << side*side << ": " << miniEERecHitCollection->size() ;
-#endif
-
- //Put selected information in the event
- iEvent.put( miniEBRecHitCollection,alcaBarrelHitsCollection_ );
- iEvent.put( miniEERecHitCollection,alcaEndcapHitsCollection_ );
- // iEvent.put( miniESRecHitCollection,alcaPreshowerHitsCollection_ );
- iEvent.put( weight, "weight");
-}
-
-
-DEFINE_FWK_MODULE(AlCaECALRecHitReducer);
-
diff --git a/Calibration/EcalAlCaRecoProducers/src/AlCaElectronsTest.h b/Calibration/EcalAlCaRecoProducers/src/AlCaElectronsTest.h
index 6895ad31dbbfa..370036ca70b93 100644
--- a/Calibration/EcalAlCaRecoProducers/src/AlCaElectronsTest.h
+++ b/Calibration/EcalAlCaRecoProducers/src/AlCaElectronsTest.h
@@ -11,6 +11,7 @@
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
+#include "FWCore/Utilities/interface/EDGetToken.h"
//#include "Calibration/EcalAlCaRecoProducers/interface/AlCaElectronsProducer.h"
#include "DataFormats/EgammaCandidates/interface/SiStripElectron.h"
#include "DataFormats/EgammaCandidates/interface/ElectronFwd.h"
@@ -47,8 +48,8 @@ class AlCaElectronsTest : public edm::EDAnalyzer {
private:
- edm::InputTag m_barrelAlCa ;
- edm::InputTag m_endcapAlCa ;
+ edm::EDGetTokenT m_barrelAlCa ;
+ edm::EDGetTokenT m_endcapAlCa ;
std::string m_outputFileName ;
//! ECAL map
@@ -78,8 +79,8 @@ class AlCaElectronsTest : public edm::EDAnalyzer {
AlCaElectronsTest::AlCaElectronsTest (const edm::ParameterSet& iConfig) :
- m_barrelAlCa (iConfig.getParameter ("alcaBarrelHitCollection")) ,
- m_endcapAlCa (iConfig.getParameter ("alcaEndcapHitCollection")) ,
+ m_barrelAlCa (consumes(iConfig.getParameter ("alcaBarrelHitCollection"))) ,
+ m_endcapAlCa (consumes(iConfig.getParameter ("alcaEndcapHitCollection"))) ,
m_outputFileName (iConfig.getUntrackedParameter
("HistOutFile",std::string ("AlCaElectronsTest.root")))
{}
@@ -142,10 +143,12 @@ AlCaElectronsTest::analyze (const edm::Event& iEvent,
//PG get the collections
// get Barrel RecHits
edm::Handle barrelRecHitsHandle ;
- iEvent.getByLabel (m_barrelAlCa, barrelRecHitsHandle) ;
+ iEvent.getByToken (m_barrelAlCa, barrelRecHitsHandle) ;
if (!barrelRecHitsHandle.isValid()) {
+ edm::EDConsumerBase::Labels labels;
+ labelsForToken(m_barrelAlCa, labels);
std::cerr << "[AlCaElectronsTest] caught std::exception "
- << " in rertieving " << m_barrelAlCa
+ << " in rertieving " << labels.module
<< std::endl ;
return ;
} else {
@@ -171,10 +174,12 @@ AlCaElectronsTest::analyze (const edm::Event& iEvent,
// get Endcap RecHits
edm::Handle endcapRecHitsHandle ;
- iEvent.getByLabel (m_endcapAlCa,endcapRecHitsHandle) ;
+ iEvent.getByToken (m_endcapAlCa,endcapRecHitsHandle) ;
if (!endcapRecHitsHandle.isValid()) {
+ edm::EDConsumerBase::Labels labels;
+ labelsForToken(m_endcapAlCa, labels);
std::cerr << "[AlCaElectronsTest] caught std::exception "
- << " in rertieving " << m_endcapAlCa
+ << " in rertieving " << labels.module
<< std::endl ;
return ;
} else {
diff --git a/Calibration/EcalAlCaRecoProducers/src/SealModule.cc b/Calibration/EcalAlCaRecoProducers/src/SealModule.cc
deleted file mode 100644
index 529c940af8328..0000000000000
--- a/Calibration/EcalAlCaRecoProducers/src/SealModule.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "FWCore/PluginManager/interface/ModuleDef.h"
-#include "FWCore/Framework/interface/MakerMacros.h"
-//#include "Calibration/EcalAlCaRecoProducers/interface/AlCaElectronsProducer.h"
-#include "Calibration/EcalAlCaRecoProducers/src/AlCaElectronsTest.h"
-
-
-
-//DEFINE_FWK_MODULE(AlCaElectronsProducer);
-DEFINE_FWK_MODULE(AlCaElectronsTest);
-
diff --git a/Calibration/EcalAlCaRecoProducers/src/SelectedElectronFEDListProducer.cc b/Calibration/EcalAlCaRecoProducers/src/SelectedElectronFEDListProducer.cc
deleted file mode 100644
index a168a05fd3199..0000000000000
--- a/Calibration/EcalAlCaRecoProducers/src/SelectedElectronFEDListProducer.cc
+++ /dev/null
@@ -1,605 +0,0 @@
-#include "Calibration/EcalAlCaRecoProducers/interface/SelectedElectronFEDListProducer.h"
-#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
-#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
-#include "HLTrigger/HLTcore/interface/defaultModuleLabel.h"
-
-/// Producer constructor
-template< typename TEle, typename TCand>
-SelectedElectronFEDListProducer::SelectedElectronFEDListProducer(const edm::ParameterSet & iConfig){
-
- // input electron collection Tag
- if(iConfig.existsAs >("electronTags")){
- electronTags_ = iConfig.getParameter>("electronTags");
- if(electronTags_.empty())
- throw cms::Exception("Configuration")<<"[SelectedElectronFEDListProducer] empty electron collection is given --> at least one \n";
- }
- else throw cms::Exception("Configuration")<<"[SelectedElectronFEDListProducer] no electron collection are given --> need at least one \n";
-
- // Consumes for the electron collection
- LogDebug("SelectedElectronFEDListProducer")<<" Electron Collections"<::const_iterator itEleTag = electronTags_.begin(); itEleTag != electronTags_.end(); ++itEleTag){
- electronToken_.push_back(consumes(*itEleTag));
- LogDebug("SelectedElectronFEDListProducer")<<" Ele collection: "<<*(itEleTag)< >("recoEcalCandidateTags")){
- recoEcalCandidateTags_ = iConfig.getParameter>("recoEcalCandidateTags");
- if(recoEcalCandidateTags_.empty())
- throw cms::Exception("Configuration")<<"[SelectedElectronFEDListProducer] empty ecal candidate collections collection is given --> at least one \n";
- }
- else throw cms::Exception("Configuration")<<"[SelectedElectronFEDListProducer] no electron reco ecal candidate collection are given --> need at least one \n";
-
- // Consumes for the recoEcal candidate collection
- for( std::vector::const_iterator itEcalCandTag = recoEcalCandidateTags_.begin(); itEcalCandTag != recoEcalCandidateTags_.end(); ++itEcalCandTag){
- recoEcalCandidateToken_.push_back(consumes(*itEcalCandTag));
- LogDebug("SelectedElectronFEDListProducer")<<" Reco ecal candidate collection: "<<*(itEcalCandTag)<