CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Types | Public Member Functions | Private Attributes
PreshowerClusterShapeProducer Class Reference
Inheritance diagram for PreshowerClusterShapeProducer:
edm::stream::EDProducer<>

Public Types

typedef math::XYZPoint Point
 
- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Public Member Functions

 PreshowerClusterShapeProducer (const edm::ParameterSet &ps)
 
More...
 
void produce (edm::Event &evt, const edm::EventSetup &es) override
 
 ~PreshowerClusterShapeProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Attributes

edm::ESGetToken< CaloGeometry,
CaloGeometryRecord
caloGeometryToken_
 
edm::EDGetTokenT
< reco::SuperClusterCollection
endcapSClusterToken_
 
int nEvt_
 
EndcapPiZeroDiscriminatorAlgopresh_pi0_algo
 
edm::EDGetTokenT
< EcalRecHitCollection
preshHitToken_
 
std::string PreshowerClusterShapeCollectionX_
 
std::string PreshowerClusterShapeCollectionY_
 

Detailed Description

Definition at line 33 of file PreshowerClusterShapeProducer.cc.

Member Typedef Documentation

Definition at line 35 of file PreshowerClusterShapeProducer.cc.

Constructor & Destructor Documentation

PreshowerClusterShapeProducer::PreshowerClusterShapeProducer ( const edm::ParameterSet ps)
explicit


Definition at line 68 of file PreshowerClusterShapeProducer.cc.

References edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), and LogTrace.

68  {
69  // use configuration file to setup input/output collection names
70  // Parameters to identify the hit collections
71  preshHitToken_ = consumes<EcalRecHitCollection>(ps.getParameter<edm::InputTag>("preshRecHitProducer"));
73  consumes<reco::SuperClusterCollection>(ps.getParameter<edm::InputTag>("endcapSClusterProducer"));
74  caloGeometryToken_ = esConsumes<CaloGeometry, CaloGeometryRecord>();
75 
76  PreshowerClusterShapeCollectionX_ = ps.getParameter<string>("PreshowerClusterShapeCollectionX");
77  PreshowerClusterShapeCollectionY_ = ps.getParameter<string>("PreshowerClusterShapeCollectionY");
78 
79  produces<reco::PreshowerClusterShapeCollection>(PreshowerClusterShapeCollectionX_);
80  produces<reco::PreshowerClusterShapeCollection>(PreshowerClusterShapeCollectionY_);
81 
82  float preshStripECut = ps.getParameter<double>("preshStripEnergyCut");
83  int preshNst = ps.getParameter<int>("preshPi0Nstrip");
84 
85  string debugString = ps.getParameter<string>("debugLevel");
86 
87  string tmpPath = ps.getUntrackedParameter<string>("pathToWeightFiles", "RecoEcal/EgammaClusterProducers/data/");
88 
89  presh_pi0_algo = new EndcapPiZeroDiscriminatorAlgo(preshStripECut, preshNst, tmpPath);
90 
91  LogTrace("EcalClusters") << "PreshowerClusterShapeProducer:presh_pi0_algo class instantiated ";
92 
93  nEvt_ = 0;
94 }
T getUntrackedParameter(std::string const &, T const &) const
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeometryToken_
#define LogTrace(id)
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::EDGetTokenT< reco::SuperClusterCollection > endcapSClusterToken_
EndcapPiZeroDiscriminatorAlgo * presh_pi0_algo
edm::EDGetTokenT< EcalRecHitCollection > preshHitToken_
PreshowerClusterShapeProducer::~PreshowerClusterShapeProducer ( )
override

Definition at line 96 of file PreshowerClusterShapeProducer.cc.

96 { delete presh_pi0_algo; }
EndcapPiZeroDiscriminatorAlgo * presh_pi0_algo

Member Function Documentation

void PreshowerClusterShapeProducer::produce ( edm::Event evt,
const edm::EventSetup es 
)
override

Definition at line 98 of file PreshowerClusterShapeProducer.cc.

References edm::SortedCollection< T, SORT >::begin(), DetId::Ecal, EcalPreshower, edm::SortedCollection< T, SORT >::end(), funct::exp(), relativeConstraints::geometry, edm::Event::getByToken(), edm::EventSetup::getHandle(), edm::EventBase::id(), LogDebug, LogTrace, eostools::move(), edm::Handle< T >::product(), edm::Event::put(), HI_PhotonSkim_cff::rechits, reco::PreshowerClusterShape::setSCRef(), funct::sin(), and edm::SortedCollection< T, SORT >::size().

98  {
99  ostringstream ostr; // use this stream for all messages in produce
100 
101  LogTrace("EcalClusters") << "\n ....... Event " << evt.id() << " with Number = " << nEvt_ + 1
102  << " is analyzing ....... ";
103 
105  Handle<SuperClusterCollection> pSuperClusters;
106 
107  // get the ECAL -> Preshower geometry and topology:
109  const CaloSubdetectorGeometry* geometry = geoHandle->getSubdetectorGeometry(DetId::Ecal, EcalPreshower);
110  const CaloSubdetectorGeometry*& geometry_p = geometry;
111 
112  // create a unique_ptr to a PreshowerClusterShapeCollection
113  auto ps_cl_for_pi0_disc_x = std::make_unique<reco::PreshowerClusterShapeCollection>();
114  auto ps_cl_for_pi0_disc_y = std::make_unique<reco::PreshowerClusterShapeCollection>();
115 
116  std::unique_ptr<CaloSubdetectorTopology> topology_p;
117  if (geometry)
118  topology_p = std::make_unique<EcalPreshowerTopology>();
119 
120  // fetch the Preshower product (RecHits)
121  evt.getByToken(preshHitToken_, pRecHits);
122  // pointer to the object in the product
123  const EcalRecHitCollection* rechits = pRecHits.product();
124 
125  LogTrace("EcalClusters") << "PreshowerClusterShapeProducer: ### Total # of preshower RecHits: " << rechits->size();
126 
127  // if ( rechits->size() <= 0 ) return;
128 
129  // make the map of Preshower rechits:
130  map<DetId, EcalRecHit> rechits_map;
132  for (it = rechits->begin(); it != rechits->end(); it++) {
133  rechits_map.insert(make_pair(it->id(), *it));
134  }
135 
136  LogTrace("EcalClusters") << "PreshowerClusterShapeProducer: ### Preshower RecHits_map of size " << rechits_map.size()
137  << " was created!";
138 
139  reco::PreshowerClusterShapeCollection ps_cl_x, ps_cl_y;
140 
141  //make cycle over Photon Collection
142  int SC_index = 0;
143  // Handle<PhotonCollection> correctedPhotonHandle;
144  // evt.getByLabel(photonCorrCollectionProducer_, correctedPhotonCollection_ , correctedPhotonHandle);
145  // const PhotonCollection corrPhoCollection = *(correctedPhotonHandle.product());
146  // cout << " Photon Collection size : " << corrPhoCollection.size() << endl;
147 
148  evt.getByToken(endcapSClusterToken_, pSuperClusters);
149  const reco::SuperClusterCollection* SClusts = pSuperClusters.product();
150  LogTrace("EcalClusters") << "### Total # Endcap Superclusters: " << SClusts->size();
151 
152  SuperClusterCollection::const_iterator it_s;
153  for (it_s = SClusts->begin(); it_s != SClusts->end(); it_s++) {
154  SuperClusterRef it_super(reco::SuperClusterRef(pSuperClusters, SC_index));
155 
156  float SC_eta = it_super->eta();
157 
158  LogTrace("EcalClusters") << "PreshowerClusterShapeProducer: superCl_E = " << it_super->energy()
159  << " superCl_Et = " << it_super->energy() * sin(2 * atan(exp(-it_super->eta())))
160  << " superCl_Eta = " << SC_eta << " superCl_Phi = " << it_super->phi();
161 
162  if (fabs(SC_eta) >= 1.65 && fabs(SC_eta) <= 2.5) { // Use Preshower region only
163  if (geometry) {
164  const GlobalPoint pointSC(it_super->x(), it_super->y(), it_super->z()); // get the centroid of the SC
165  LogTrace("EcalClusters") << "SC centroind = " << pointSC;
166 
167  // Get the Preshower 2-planes RecHit vectors associated with the given SC
168 
169  DetId tmp_stripX = (dynamic_cast<const EcalPreshowerGeometry*>(geometry_p))->getClosestCellInPlane(pointSC, 1);
170  DetId tmp_stripY = (dynamic_cast<const EcalPreshowerGeometry*>(geometry_p))->getClosestCellInPlane(pointSC, 2);
171  ESDetId stripX = (tmp_stripX == DetId(0)) ? ESDetId(0) : ESDetId(tmp_stripX);
172  ESDetId stripY = (tmp_stripY == DetId(0)) ? ESDetId(0) : ESDetId(tmp_stripY);
173 
174  vector<float> vout_stripE1 = presh_pi0_algo->findPreshVector(stripX, &rechits_map, topology_p.get());
175  vector<float> vout_stripE2 = presh_pi0_algo->findPreshVector(stripY, &rechits_map, topology_p.get());
176 
177  LogTrace("EcalClusters") << "PreshowerClusterShapeProducer : ES Energy vector associated to the given SC = ";
178  for (int k1 = 0; k1 < 11; k1++) {
179  LogTrace("EcalClusters") << vout_stripE1[k1] << " ";
180  }
181 
182  for (int k1 = 0; k1 < 11; k1++) {
183  LogTrace("EcalClusters") << vout_stripE2[k1] << " ";
184  }
185 
187  ps1.setSCRef(it_super);
188  ps_cl_x.push_back(ps1);
189 
191  ps2.setSCRef(it_super);
192  ps_cl_y.push_back(ps2);
193  }
194  SC_index++;
195  } // end of cycle over Endcap SC
196  }
197  // put collection of PreshowerClusterShape in the Event:
198  ps_cl_for_pi0_disc_x->assign(ps_cl_x.begin(), ps_cl_x.end());
199  ps_cl_for_pi0_disc_y->assign(ps_cl_y.begin(), ps_cl_y.end());
200 
201  evt.put(std::move(ps_cl_for_pi0_disc_x), PreshowerClusterShapeCollectionX_);
202  evt.put(std::move(ps_cl_for_pi0_disc_y), PreshowerClusterShapeCollectionY_);
203  LogTrace("EcalClusters") << "PreshowerClusterShapeCollection added to the event";
204 
205  nEvt_++;
206 
207  LogDebug("PiZeroDiscriminatorDebug") << ostr.str();
208 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
void setSCRef(const SuperClusterRef &r)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
std::vector< EcalRecHit >::const_iterator const_iterator
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeometryToken_
Exp< T >::type exp(const T &t)
Definition: Exp.h:22
#define LogTrace(id)
std::vector< float > findPreshVector(ESDetId strip, RecHitsMap *rechits_map, CaloSubdetectorTopology *topology_p)
std::vector< SuperCluster > SuperClusterCollection
collection of SuperCluser objectr
def move
Definition: eostools.py:511
std::vector< PreshowerClusterShape > PreshowerClusterShapeCollection
collection of PreshowerClusterShape objects
const_iterator end() const
Definition: DetId.h:17
T const * product() const
Definition: Handle.h:70
edm::EDGetTokenT< reco::SuperClusterCollection > endcapSClusterToken_
edm::EventID id() const
Definition: EventBase.h:59
EndcapPiZeroDiscriminatorAlgo * presh_pi0_algo
size_type size() const
edm::EDGetTokenT< EcalRecHitCollection > preshHitToken_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:157
const_iterator begin() const
#define LogDebug(id)

Member Data Documentation

edm::ESGetToken<CaloGeometry, CaloGeometryRecord> PreshowerClusterShapeProducer::caloGeometryToken_
private

Definition at line 52 of file PreshowerClusterShapeProducer.cc.

edm::EDGetTokenT<reco::SuperClusterCollection> PreshowerClusterShapeProducer::endcapSClusterToken_
private

Definition at line 50 of file PreshowerClusterShapeProducer.cc.

int PreshowerClusterShapeProducer::nEvt_
private

Definition at line 44 of file PreshowerClusterShapeProducer.cc.

EndcapPiZeroDiscriminatorAlgo* PreshowerClusterShapeProducer::presh_pi0_algo
private

Definition at line 57 of file PreshowerClusterShapeProducer.cc.

edm::EDGetTokenT<EcalRecHitCollection> PreshowerClusterShapeProducer::preshHitToken_
private

Definition at line 48 of file PreshowerClusterShapeProducer.cc.

std::string PreshowerClusterShapeProducer::PreshowerClusterShapeCollectionX_
private

Definition at line 54 of file PreshowerClusterShapeProducer.cc.

std::string PreshowerClusterShapeProducer::PreshowerClusterShapeCollectionY_
private

Definition at line 55 of file PreshowerClusterShapeProducer.cc.