CMS 3D CMS Logo

TBHodoActiveVolumeRawInfoProducer.cc
Go to the documentation of this file.
1 /*
2  * \file TBHodoActiveVolumeRawInfoProducer.cc
3  *
4  *
5  */
6 
8 
9 #include <iostream>
10 
11 using namespace cms;
12 using namespace std;
13 
15  m_EcalToken = consumes<edm::PCaloHitContainer>(edm::InputTag("g4SimHits", "EcalTBH4BeamHits"));
16  produces<EcalTBHodoscopeRawInfo>();
17 
18  theTBHodoGeom_ = new EcalTBHodoscopeGeometry();
19 
20  myThreshold = 0.05E-3;
21 }
22 
24 
26  unique_ptr<EcalTBHodoscopeRawInfo> product(new EcalTBHodoscopeRawInfo());
27 
28  // caloHit container
30  const edm::PCaloHitContainer *caloHits = nullptr;
31  event.getByToken(m_EcalToken, pCaloHit);
32  if (pCaloHit.isValid()) {
33  caloHits = pCaloHit.product();
34  LogDebug("EcalTBHodo") << "total # caloHits: " << caloHits->size();
35  } else {
36  edm::LogError("EcalTBHodo") << "Error! can't get the caloHitContainer ";
37  }
38  if (!caloHits) {
39  return;
40  }
41 
42  // detid - energy_sum map
43  std::map<unsigned int, double> energyMap;
44 
45  for (auto &&aHit : *caloHits) {
46  double thisHitEne = aHit.energy();
47 
48  std::map<unsigned int, double>::iterator itmap = energyMap.find(aHit.id());
49  if (itmap == energyMap.end())
50  energyMap.insert(pair<unsigned int, double>(aHit.id(), thisHitEne));
51  else {
52  (*itmap).second += thisHitEne;
53  }
54  }
55 
56  // planes and fibers
57  int nPlanes = theTBHodoGeom_->getNPlanes();
58  int nFibers = theTBHodoGeom_->getNFibres();
59  product->setPlanes(nPlanes);
60 
61  bool firedChannels[4][64];
62  for (int iPlane = 0; iPlane < nPlanes; ++iPlane) {
63  for (int iFiber = 0; iFiber < nFibers; ++iFiber) {
64  firedChannels[iPlane][iFiber] = 0.;
65  }
66  }
67  for (std::map<unsigned int, double>::const_iterator itmap = energyMap.begin(); itmap != energyMap.end(); ++itmap) {
68  if ((*itmap).second > myThreshold) {
69  HodoscopeDetId myHodoDetId = HodoscopeDetId((*itmap).first);
70  firedChannels[myHodoDetId.planeId()][myHodoDetId.fibrId()] = true;
71  }
72  }
73  for (int iPlane = 0; iPlane < nPlanes; ++iPlane) {
74  EcalTBHodoscopePlaneRawHits planeHit(nFibers);
75 
76  for (int iFiber = 0; iFiber < nFibers; ++iFiber) {
77  planeHit.setHit(iFiber, firedChannels[iPlane][iFiber]);
78  }
79  product->setPlane((unsigned int)iPlane, planeHit);
80  }
81 
82  LogDebug("EcalTBHodo") << (*product);
83 
84  event.put(std::move(product));
85 }
#define LogDebug(id)
std::vector< PCaloHit > PCaloHitContainer
void setHit(unsigned int i, bool status)
void produce(edm::Event &event, const edm::EventSetup &eventSetup) override
Produce digis out of raw data.
TBHodoActiveVolumeRawInfoProducer(const edm::ParameterSet &ps)
Constructor.
bool isValid() const
Definition: HandleBase.h:74
Namespace of DDCMS conversion namespace.
int fibrId() const
T const * product() const
Definition: Handle.h:74
int planeId() const
def move(src, dest)
Definition: eostools.py:511
Definition: event.py:1