CMS 3D CMS Logo

EcalPulseSymmCovariancesHandler.cc
Go to the documentation of this file.
2 
3 #include <iostream>
4 #include <fstream>
5 
7  : m_name(ps.getUntrackedParameter<std::string>("name", "EcalPulseSymmCovariancesHandler")) {
8  std::cout << "EcalPulseSymmCovariance Source handler constructor\n" << std::endl;
9  m_firstRun = static_cast<unsigned int>(atoi(ps.getParameter<std::string>("firstRun").c_str()));
10  m_filename = ps.getParameter<std::string>("inputFileName");
11  m_EBPulseShapeCovariance = ps.getParameter<std::vector<double> >("EBPulseShapeCovariance");
12  m_EEPulseShapeCovariance = ps.getParameter<std::vector<double> >("EEPulseShapeCovariance");
13 }
14 
16 
18  // true means all is standard and OK
19  bool result = true;
21  for (int k = 0; k < N; ++k) {
22  if (fabs(item->covval[k]) > 1)
23  result = false;
24  }
25  return result;
26 }
27 
29  bool isbarrel) {
30  for (int k = 0; k < std::pow(EcalPulseShape::TEMPLATESAMPLES, 2); ++k) {
33  if (j >= i) {
34  int linK = j + (EcalPulseShape::TEMPLATESAMPLES - 1) * i;
35  item->covval[linK] = isbarrel ? m_EBPulseShapeCovariance[k] : m_EEPulseShapeCovariance[k];
36  }
37  }
38 }
39 
41  std::cout << "------- Ecal - > getNewObjects\n";
42 
43  // create the object pukse shapes
45 
46  // read the templates from a text file
47  std::ifstream inputfile;
48  inputfile.open(m_filename.c_str());
50  unsigned int rawId;
51  int isbarrel;
53 
54  // keep track of bad crystals
55  int nEBbad(0), nEEbad(0);
56  std::vector<EBDetId> ebgood;
57  std::vector<EEDetId> eegood;
58 
59  // fill with the measured shapes only for data
60  if (m_firstRun > 1) {
61  while (std::getline(inputfile, line)) {
62  std::istringstream linereader(line);
63  linereader >> isbarrel >> rawId;
64  // std::cout << "Inserting template for crystal with rawId = " << rawId << " (isbarrel = " << isbarrel << ") " << std::endl;
65  for (int k = 0; k < std::pow(EcalPulseShape::TEMPLATESAMPLES, 2); ++k) {
68  linereader >> covvals[i][j];
69  }
70 
71  if (!linereader) {
72  std::cout << "Wrong format of the text file. Exit." << std::endl;
73  return;
74  }
76  for (int i = 0; i < EcalPulseShape::TEMPLATESAMPLES; ++i)
77  for (int j = 0; j < EcalPulseShape::TEMPLATESAMPLES; ++j) {
78  item.val(i, j) = covvals[i][j];
79  }
80 
81  if (isbarrel) {
82  EBDetId ebdetid(rawId);
83  if (!checkPulseSymmCovariance(&item))
84  nEBbad++;
85  else {
86  ebgood.push_back(ebdetid);
87  pulsecovs->insert(std::make_pair(ebdetid.rawId(), item));
88  }
89  } else {
90  EEDetId eedetid(rawId);
91  if (!checkPulseSymmCovariance(&item))
92  nEEbad++;
93  else {
94  eegood.push_back(eedetid);
95  pulsecovs->insert(std::make_pair(eedetid.rawId(), item));
96  }
97  }
98  }
99  }
100 
101  // now fill the bad crystals and simulation with the simulation values (from TB)
102  std::cout << "Filled the DB with the good measured ECAL templates. Now filling the others with the TB values"
103  << std::endl;
104  for (int iEta = -EBDetId::MAX_IETA; iEta <= EBDetId::MAX_IETA; ++iEta) {
105  if (iEta == 0)
106  continue;
107  for (int iPhi = EBDetId::MIN_IPHI; iPhi <= EBDetId::MAX_IPHI; ++iPhi) {
108  if (EBDetId::validDetId(iEta, iPhi)) {
109  EBDetId ebdetid(iEta, iPhi, EBDetId::ETAPHIMODE);
110 
111  std::vector<EBDetId>::iterator it = find(ebgood.begin(), ebgood.end(), ebdetid);
112  if (it == ebgood.end()) {
114  fillSimPulseSymmCovariance(&item, true);
115  pulsecovs->insert(std::make_pair(ebdetid.rawId(), item));
116  }
117  }
118  }
119  }
120 
121  for (int iZ = -1; iZ < 2; iZ += 2) {
122  for (int iX = EEDetId::IX_MIN; iX <= EEDetId::IX_MAX; ++iX) {
123  for (int iY = EEDetId::IY_MIN; iY <= EEDetId::IY_MAX; ++iY) {
124  if (EEDetId::validDetId(iX, iY, iZ)) {
125  EEDetId eedetid(iX, iY, iZ);
126 
127  std::vector<EEDetId>::iterator it = find(eegood.begin(), eegood.end(), eedetid);
128  if (it == eegood.end()) {
130  fillSimPulseSymmCovariance(&item, false);
131  pulsecovs->insert(std::make_pair(eedetid.rawId(), item));
132  }
133  }
134  }
135  }
136  }
137 
138  std::cout << "Inserted the pulse covariances into the new item object" << std::endl;
139 
140  unsigned int irun = m_firstRun;
141  Time_t snc = (Time_t)irun;
142 
143  m_to_transfer.push_back(std::make_pair((EcalPulseSymmCovariances*)pulsecovs, snc));
144 
145  std::cout << "Ecal - > end of getNewObjects -----------" << std::endl;
146  std::cout << "N. bad shapes for EB = " << nEBbad << std::endl;
147  std::cout << "N. bad shapes for EE = " << nEEbad << std::endl;
148  std::cout << "Written the object" << std::endl;
149 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
static const int MIN_IPHI
Definition: EBDetId.h:135
static const int TEMPLATESAMPLES
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
static const int IX_MIN
Definition: EEDetId.h:290
static const int IY_MIN
Definition: EEDetId.h:294
static bool validDetId(int i, int j)
check if a valid index combination
Definition: EBDetId.h:118
EcalPulseSymmCovariancesMap EcalPulseSymmCovariances
static const int ETAPHIMODE
Definition: EBDetId.h:158
void insert(std::pair< uint32_t, Item > const &a)
static const int IX_MAX
Definition: EEDetId.h:298
#define N
Definition: blowfish.cc:9
static const int MAX_IPHI
Definition: EBDetId.h:137
void fillSimPulseSymmCovariance(EcalPulseSymmCovariances::Item *item, bool isbarrel)
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
static bool validDetId(int crystal_ix, int crystal_iy, int iz)
Definition: EEDetId.h:248
static const int MAX_IETA
Definition: EBDetId.h:136
cond::Time_t Time_t
Definition: Time.h:18
bool checkPulseSymmCovariance(EcalPulseSymmCovariances::Item *item)
static const int IY_MAX
Definition: EEDetId.h:302
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29