1 #ifndef _CSCCROSSTALKDBCONDITIONS_H 2 #define _CSCCROSSTALKDBCONDITIONS_H 46 const int MAX_SIZE = 252288;
47 const int SLOPE_FACTOR=10000000;
48 const int INTERCEPT_FACTOR=100000;
49 const int MAX_SHORT= 32767;
52 int db_index,new_index;
53 float db_slope_right,db_slope_left,db_intercept_right;
54 float db_intercept_left;
55 std::vector<int> db_index_id;
56 std::vector<float> db_slope_r;
57 std::vector<float> db_intercept_r;
58 std::vector<float> db_slope_l;
59 std::vector<float> db_intercept_l;
60 float new_slope_right,new_slope_left,new_intercept_right;
61 float new_intercept_left;
62 std::vector<int> new_index_id;
63 std::vector<float> new_slope_r;
64 std::vector<float> new_intercept_r;
65 std::vector<float> new_slope_l;
66 std::vector<float> new_intercept_l;
75 std::cerr <<
"Error: old_dbxtalk.dat -> no such file!"<< std::endl;
79 while (!dbdata.eof() ) {
80 dbdata >> db_index >> db_slope_right >> db_intercept_right >> db_slope_left >> db_intercept_left ;
81 db_index_id.push_back(db_index);
82 db_slope_r.push_back(db_slope_right);
83 db_slope_l.push_back(db_slope_left);
84 db_intercept_r.push_back(db_intercept_right);
85 db_intercept_l.push_back(db_intercept_left);
90 std::ifstream newdata;
93 std::cerr <<
"Error: xtalk.dat -> no such file!"<< std::endl;
97 while (!newdata.eof() ) {
98 newdata >> new_index >> new_slope_right >> new_intercept_right >> new_slope_left >> new_intercept_left;
99 new_index_id.push_back(new_index);
100 new_slope_r.push_back(new_slope_right);
101 new_slope_l.push_back(new_slope_left);
102 new_intercept_r.push_back(new_intercept_right);
103 new_intercept_l.push_back(new_intercept_left);
109 itemvector.resize(MAX_SIZE);
113 for(
int i=0;
i<MAX_SIZE;++
i){
114 itemvector[
i].xtalk_slope_right=(
short int) (db_slope_r[
i]*SLOPE_FACTOR+0.5);
115 itemvector[
i].xtalk_intercept_right= (
short int) (db_intercept_r[
i]*INTERCEPT_FACTOR+0.5);
116 itemvector[
i].xtalk_slope_left= (
short int) (db_slope_l[
i]*SLOPE_FACTOR+0.5);
117 itemvector[
i].xtalk_intercept_left= (
short int) (db_intercept_l[
i]*INTERCEPT_FACTOR+0.5);
120 for(
int i=0;
i<MAX_SIZE;++
i){
121 counter=db_index_id[
i];
122 for (
unsigned int k=0;
k<new_index_id.size()-1;
k++){
123 if(counter==new_index_id[
k]){
124 if ((
short int) (fabs(new_slope_r[k]*SLOPE_FACTOR+0.5))<MAX_SHORT) itemvector[
counter].xtalk_slope_right=
int (new_slope_r[k]*SLOPE_FACTOR+0.5);
125 if ((
short int) (fabs(new_intercept_r[k]*INTERCEPT_FACTOR+0.5))<MAX_SHORT) itemvector[
counter].xtalk_intercept_right=
int (new_intercept_r[k]*INTERCEPT_FACTOR+0.5);
126 if ((
short int) (fabs(new_slope_l[k]*SLOPE_FACTOR+0.5))<MAX_SHORT) itemvector[
counter].xtalk_slope_left=
int (new_slope_l[k]*SLOPE_FACTOR+0.5);
127 if ((
short int) (fabs(new_intercept_l[k]*INTERCEPT_FACTOR+0.5))<MAX_SHORT) itemvector[
counter].xtalk_intercept_left=
int (new_intercept_l[k]*INTERCEPT_FACTOR+0.5);
128 itemvector[
i] = itemvector[
counter];
134 itemvector[
counter].xtalk_slope_right =
int (db_slope_r[
i]);
135 itemvector[
counter].xtalk_slope_left =
int (db_slope_l[i]);
136 itemvector[
counter].xtalk_intercept_right =
int (db_intercept_r[i]);
137 itemvector[
counter].xtalk_intercept_left =
int (db_intercept_l[i]);
141 return cndbcrosstalk;
CSCCrosstalkDBConditions(const edm::ParameterSet &)
ReturnType produceDBCrosstalk(const CSCDBCrosstalkRcd &)
static CSCDBCrosstalk * prefillDBCrosstalk()
std::vector< Item > CrosstalkContainer
std::unique_ptr< CSCDBCrosstalk > ReturnType
~CSCCrosstalkDBConditions() override
void setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue &, edm::ValidityInterval &) override
static std::atomic< unsigned int > counter
CrosstalkContainer crosstalk