CMS 3D CMS Logo

CSCGainsDBConditions.h
Go to the documentation of this file.
1 #ifndef _CSCGAINSDBCONDITIONS_H
2 #define _CSCGAINSDBCONDITIONS_H
3 
4 #include <memory>
5 #include <cmath>
15 
19 
21  public:
23  ~CSCGainsDBConditions() override;
24 
25 
26  inline static CSCDBGains * prefillDBGains();
27 
28  typedef const CSCDBGains * ReturnType;
29 
30  ReturnType produceDBGains(const CSCDBGainsRcd&);
31 
32  private:
33  // ----------member data ---------------------------
36 
37 };
38 
39 #include<fstream>
40 #include<vector>
41 #include<iostream>
42 
43 // to workaround plugin library
45 {
46  // const int MAX_SIZE = 273024;//for ME1a unganged
47  const int MAX_SIZE = 252288;
48  const int FACTOR = 1000;
49  const int MAX_SHORT = 32767;
50  CSCDBGains * cndbgains = new CSCDBGains();
51 
52  int db_index;
53  float db_gainslope;//db_intercpt, db_chisq;
54  std::vector<int> db_index_id;
55  std::vector<float> db_slope;
56  std::vector<float> db_intercept;
57  std::vector<float> db_chi2;
58  int new_index;
59  float new_gainslope,new_intercpt, new_chisq;
60  std::vector<int> new_cham_id;
61  std::vector<int> new_index_id;
62  std::vector<int> new_strips;
63  std::vector<float> new_slope;
64  std::vector<float> new_intercept;
65  std::vector<float> new_chi2;
66 
67  int counter;
68  int db_nrlines=0;
69  int new_nrlines=0;
70 
71  std::ifstream dbdata;
72  dbdata.open("old_dbgains.dat",std::ios::in);
73  if(!dbdata) {
74  std::cerr <<"Error: old_dbgains.dat -> no such file!"<< std::endl;
75  exit(1);
76  }
77 
78  while (!dbdata.eof() ) {
79  dbdata >> db_index >> db_gainslope;
80  db_index_id.push_back(db_index);
81  db_slope.push_back(db_gainslope);
82  //db_intercept.push_back(db_intercpt);
83  //db_chi2.push_back(db_chisq);
84  db_nrlines++;
85  }
86  dbdata.close();
87 
88  std::ifstream newdata;
89  newdata.open("gains.dat",std::ios::in);
90  if(!newdata) {
91  std::cerr <<"Error: gains.dat -> no such file!"<< std::endl;
92  exit(1);
93  }
94 
95  while (!newdata.eof() ) {
96  newdata >> new_index >> new_gainslope >> new_intercpt >> new_chisq ;
97  new_index_id.push_back(new_index);
98  new_slope.push_back(new_gainslope);
99  new_intercept.push_back(new_intercpt);
100  new_chi2.push_back(new_chisq);
101  new_nrlines++;
102  }
103  newdata.close();
104 
105  CSCDBGains::GainContainer & itemvector = cndbgains->gains;
106  itemvector.resize(MAX_SIZE);
107  cndbgains->factor_gain = (short int) (FACTOR);
108  std::cout<<" myfactor "<<cndbgains->factor_gain<<std::endl;
109 
110  for(int i=0; i<MAX_SIZE;++i){
111  itemvector[i].gain_slope= int (db_slope[i]*FACTOR+0.5);
112  }
113 
114  for(int i=0; i<MAX_SIZE;++i){
115  counter=db_index_id[i];
116  itemvector[i] = itemvector[counter];
117  itemvector[i].gain_slope = int (db_slope[i]);
118 
119  for (unsigned int k=0;k<new_index_id.size()-1;k++){
120  if(counter==new_index_id[k]){
121  if ((short int) (fabs(new_slope[k]*FACTOR+0.5))<MAX_SHORT) itemvector[counter].gain_slope= int (new_slope[k]*FACTOR+0.5);
122  itemvector[i] = itemvector[counter];
123  }
124  }
125  if(counter>223968){
126  itemvector[counter].gain_slope = int (db_slope[i]);
127  itemvector[i] = itemvector[counter];
128  }
129  }
130  return cndbgains;
131 }
132 
133 
134 #endif
135 
CSCGainsDBConditions(const edm::ParameterSet &)
GainContainer gains
Definition: CSCDBGains.h:24
const CSCDBGains * ReturnType
int factor_gain
Definition: CSCDBGains.h:19
ReturnType produceDBGains(const CSCDBGainsRcd &)
static CSCDBGains * prefillDBGains()
std::vector< Item > GainContainer
Definition: CSCDBGains.h:23
int k[5][pyjets_maxn]
static std::atomic< unsigned int > counter
void setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue &, edm::ValidityInterval &) override