#include <CalibMuon/CSCCalibration/interface/CSCCrosstalkConditions.h>
Public Types | |
typedef const CSCcrosstalk * | ReturnType |
Public Member Functions | |
CSCCrosstalkConditions (const edm::ParameterSet &) | |
ReturnType | produceCrosstalk (const CSCcrosstalkRcd &) |
~CSCCrosstalkConditions () | |
Static Public Member Functions | |
static CSCcrosstalk * | prefillCrosstalk () |
Private Member Functions | |
void | setIntervalFor (const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue &, edm::ValidityInterval &) |
Private Attributes | |
CSCcrosstalk * | cnCrosstalk |
Definition at line 19 of file CSCCrosstalkConditions.h.
typedef const CSCcrosstalk* CSCCrosstalkConditions::ReturnType |
Definition at line 27 of file CSCCrosstalkConditions.h.
CSCCrosstalkConditions::CSCCrosstalkConditions | ( | const edm::ParameterSet & | iConfig | ) |
Definition at line 252 of file CSCCrosstalkConditions.cc.
References cnCrosstalk, prefillCrosstalk(), produceCrosstalk(), and edm::ESProducer::setWhatProduced().
00253 { 00254 //the following line is needed to tell the framework what 00255 // data is being produced 00256 cnCrosstalk = prefillCrosstalk(); 00257 // added by Zhen (changed since 1_2_0) 00258 setWhatProduced(this,&CSCCrosstalkConditions::produceCrosstalk); 00259 findingRecord<CSCcrosstalkRcd>(); 00260 //now do what ever other initialization is needed 00261 }
CSCCrosstalkConditions::~CSCCrosstalkConditions | ( | ) |
Definition at line 264 of file CSCCrosstalkConditions.cc.
References cnCrosstalk.
00265 { 00266 00267 // do anything here that needs to be done at desctruction time 00268 // (e.g. close files, deallocate resources etc.) 00269 delete cnCrosstalk; 00270 }
CSCcrosstalk * CSCCrosstalkConditions::prefillCrosstalk | ( | ) | [static] |
Definition at line 5 of file CSCCrosstalkConditions.cc.
References TestMuL1L2Filter_cff::cerr, CSCcrosstalk::crosstalk, detId, lat::endl(), cmsRelvalreport::exit, in, CSCDetId::maxChamberId(), CSCDetId::maxEndcapId(), CSCDetId::maxLayerId(), CSCDetId::maxRingId(), CSCDetId::maxStationId(), mean(), min, CSCDetId::minChamberId(), CSCDetId::minEndcapId(), CSCDetId::minLayerId(), CSCDetId::minRingId(), and CSCDetId::minStationId().
Referenced by CSCCrosstalkConditions().
00005 { 00006 00007 float mean,min,minchi; 00008 int seed;long int M; 00009 int old_chamber_id,old_strip,new_chamber_id,new_strip; 00010 float old_slope_right,old_slope_left,old_intercept_right; 00011 float old_intercept_left, old_chi2_right,old_chi2_left; 00012 std::vector<int> old_cham_id; 00013 std::vector<int> old_strips; 00014 std::vector<float> old_slope_r; 00015 std::vector<float> old_intercept_r; 00016 std::vector<float> old_chi2_r; 00017 std::vector<float> old_slope_l; 00018 std::vector<float> old_intercept_l; 00019 std::vector<float> old_chi2_l; 00020 float new_slope_right,new_slope_left,new_intercept_right; 00021 float new_intercept_left, new_chi2_right,new_chi2_left; 00022 std::vector<int> new_cham_id; 00023 std::vector<int> new_strips; 00024 std::vector<float> new_slope_r; 00025 std::vector<float> new_intercept_r; 00026 std::vector<float> new_chi2_r; 00027 std::vector<float> new_slope_l; 00028 std::vector<float> new_intercept_l; 00029 std::vector<float> new_chi2_l; 00030 00031 00032 00033 const CSCDetId& detId = CSCDetId(); 00034 CSCcrosstalk * cncrosstalk = new CSCcrosstalk(); 00035 00036 int max_istrip,id_layer,max_ring,max_cham; 00037 unsigned int old_nrlines=0; 00038 unsigned int new_nrlines=0; 00039 seed = 10000; 00040 srand(seed); 00041 mean=-0.0009, min=0.035, minchi=1.5, M=1000; 00042 00043 //endcap=1 to 2,station=1 to 4, ring=1 to 4,chamber=1 to 36,layer=1 to 6 00044 std::ifstream olddata; 00045 olddata.open("old_xtalk.dat",std::ios::in); 00046 if(!olddata) { 00047 std::cerr <<"Error: old_xtalk.dat -> no such file!"<< std::endl; 00048 exit(1); 00049 } 00050 00051 while (!olddata.eof() ) { 00052 olddata >> old_chamber_id >> old_strip >> old_slope_right >> old_intercept_right >> old_chi2_right >> old_slope_left >> old_intercept_left >> old_chi2_left ; 00053 old_cham_id.push_back(old_chamber_id); 00054 old_strips.push_back(old_strip); 00055 old_slope_r.push_back(old_slope_right); 00056 old_slope_l.push_back(old_slope_left); 00057 old_intercept_r.push_back(old_intercept_right); 00058 old_intercept_l.push_back(old_intercept_left); 00059 old_chi2_r.push_back(old_chi2_right); 00060 old_chi2_l.push_back(old_chi2_left); 00061 old_nrlines++; 00062 } 00063 olddata.close(); 00064 00065 std::ifstream newdata; 00066 newdata.open("new_xtalk.txt",std::ios::in); 00067 if(!newdata) { 00068 std::cerr <<"Error: new_xtalk.dat -> no such file!"<< std::endl; 00069 exit(1); 00070 } 00071 00072 while (!newdata.eof() ) { 00073 newdata >> new_chamber_id >> new_strip >> new_slope_right >> new_intercept_right >> new_chi2_right >> new_slope_left >> new_intercept_left >> new_chi2_left ; 00074 new_cham_id.push_back(new_chamber_id); 00075 new_strips.push_back(new_strip); 00076 new_slope_r.push_back(new_slope_right); 00077 new_slope_l.push_back(new_slope_left); 00078 new_intercept_r.push_back(new_intercept_right); 00079 new_intercept_l.push_back(new_intercept_left); 00080 new_chi2_r.push_back(new_chi2_right); 00081 new_chi2_l.push_back(new_chi2_left); 00082 new_nrlines++; 00083 } 00084 newdata.close(); 00085 00086 for(int iendcap=detId.minEndcapId(); iendcap<=detId.maxEndcapId(); iendcap++){ 00087 for(int istation=detId.minStationId() ; istation<=detId.maxStationId(); istation++){ 00088 max_ring=detId.maxRingId(); 00089 //station 4 ring 4 not there(36 chambers*2 missing) 00090 //3 rings max this way of counting (ME1a & b) 00091 if(istation==1) max_ring=3; 00092 if(istation==2) max_ring=2; 00093 if(istation==3) max_ring=2; 00094 if(istation==4) max_ring=1; 00095 00096 for(int iring=detId.minRingId(); iring<=max_ring; iring++){ 00097 max_istrip=80; 00098 max_cham=detId.maxChamberId(); 00099 if(istation==1 && iring==1) max_cham=36; 00100 if(istation==1 && iring==2) max_cham=36; 00101 if(istation==1 && iring==3) max_cham=36; 00102 if(istation==2 && iring==1) max_cham=18; 00103 if(istation==2 && iring==2) max_cham=36; 00104 if(istation==3 && iring==1) max_cham=18; 00105 if(istation==3 && iring==2) max_cham=36; 00106 if(istation==4 && iring==1) max_cham=18; 00107 //station 1 ring 3 has 64 strips per layer instead of 80(minus & plus side!!!) 00108 00109 for(int ichamber=detId.minChamberId(); ichamber<=max_cham; ichamber++){ 00110 00111 for(int ilayer=detId.minLayerId(); ilayer<=detId.maxLayerId(); ilayer++){ 00112 //station 1 ring 3 has 64 strips per layer instead of 80 00113 if(istation==1 && iring==3) max_istrip=64; 00114 00115 std::vector<CSCcrosstalk::Item> itemvector; 00116 itemvector.resize(max_istrip); 00117 id_layer = 100000*iendcap + 10000*istation + 1000*iring + 10*ichamber + ilayer; 00118 00119 for(int istrip=0;istrip<max_istrip;istrip++){ 00120 //create fake values 00121 itemvector[istrip].xtalk_slope_right=-((double)rand()/((double)(RAND_MAX)+(double)(1)))/10000+mean; 00122 itemvector[istrip].xtalk_intercept_right=((double)rand()/((double)(RAND_MAX)+(double)(1)))/100+min; 00123 itemvector[istrip].xtalk_chi2_right=((double)rand()/((double)(RAND_MAX)+(double)(1)))+minchi; 00124 itemvector[istrip].xtalk_slope_left=-((double)rand()/((double)(RAND_MAX)+(double)(1)))/10000+mean; 00125 itemvector[istrip].xtalk_intercept_left=((double)rand()/((double)(RAND_MAX)+(double)(1)))/100+min; 00126 itemvector[istrip].xtalk_chi2_left=((double)rand()/((double)(RAND_MAX)+(double)(1)))+minchi; 00127 cncrosstalk->crosstalk[id_layer]=itemvector; 00128 00129 if(istrip==0){ 00130 itemvector[istrip].xtalk_slope_right=-((double)rand()/((double)(RAND_MAX)+(double)(1)))/10000+mean; 00131 itemvector[istrip].xtalk_intercept_right=((double)rand()/((double)(RAND_MAX)+(double)(1)))/100+min; 00132 itemvector[istrip].xtalk_chi2_right=((double)rand()/((double)(RAND_MAX)+(double)(1)))+minchi; 00133 itemvector[istrip].xtalk_slope_left=0.0; 00134 itemvector[istrip].xtalk_intercept_left=0.0; 00135 itemvector[istrip].xtalk_chi2_left=0.0; 00136 cncrosstalk->crosstalk[id_layer]=itemvector; 00137 } 00138 00139 if(istrip==79){ 00140 itemvector[istrip].xtalk_slope_right=0.0; 00141 itemvector[istrip].xtalk_intercept_right=0.0; 00142 itemvector[istrip].xtalk_chi2_right=0.0; 00143 itemvector[istrip].xtalk_slope_left=-((double)rand()/((double)(RAND_MAX)+(double)(1)))/10000+mean; 00144 itemvector[istrip].xtalk_intercept_left=((double)rand()/((double)(RAND_MAX)+(double)(1)))/100+min; 00145 itemvector[istrip].xtalk_chi2_left=((double)rand()/((double)(RAND_MAX)+(double)(1)))+minchi; 00146 cncrosstalk->crosstalk[id_layer]=itemvector; 00147 } 00148 } 00149 } 00150 } 00151 } 00152 } 00153 00154 //overwrite fakes with old values from DB 00155 int istrip = 0; 00156 std::vector<CSCcrosstalk::Item> itemvector; 00157 itemvector.resize(80); 00158 00159 for(unsigned int mystrip=0; mystrip<old_nrlines-1; mystrip++){ 00160 if(old_strips[mystrip]==0) istrip = 0; 00161 itemvector[istrip].xtalk_slope_right=old_slope_r[mystrip]; 00162 itemvector[istrip].xtalk_intercept_right=old_intercept_r[mystrip]; 00163 itemvector[istrip].xtalk_chi2_right=old_chi2_r[mystrip]; 00164 itemvector[istrip].xtalk_slope_left=old_slope_l[mystrip]; 00165 itemvector[istrip].xtalk_intercept_left=old_intercept_l[mystrip]; 00166 itemvector[istrip].xtalk_chi2_left=old_chi2_l[mystrip]; 00167 cncrosstalk->crosstalk[old_cham_id[mystrip]]=itemvector; 00168 istrip++; 00169 } 00170 00171 00172 itemvector.resize(64); 00173 for(unsigned int mystrip=0; mystrip<old_nrlines-1; mystrip++){ 00174 if(old_strips[mystrip]==0) istrip = 0; 00175 if(old_cham_id[mystrip] >= 113000 && old_cham_id[mystrip] <= 113999){ 00176 itemvector[istrip].xtalk_slope_right=old_slope_r[mystrip]; 00177 itemvector[istrip].xtalk_intercept_right=old_intercept_r[mystrip]; 00178 itemvector[istrip].xtalk_chi2_right=old_chi2_r[mystrip]; 00179 itemvector[istrip].xtalk_slope_left=old_slope_l[mystrip]; 00180 itemvector[istrip].xtalk_intercept_left=old_intercept_l[mystrip]; 00181 itemvector[istrip].xtalk_chi2_left=old_chi2_l[mystrip]; 00182 cncrosstalk->crosstalk[old_cham_id[mystrip]]=itemvector; 00183 istrip++; 00184 } 00185 } 00186 00187 itemvector.resize(64); 00188 for(unsigned int mystrip=0; mystrip<old_nrlines-1; mystrip++){ 00189 if(old_strips[mystrip]==0) istrip = 0; 00190 if(old_cham_id[mystrip] >= 213000 && old_cham_id[mystrip] <= 213999){ 00191 itemvector[istrip].xtalk_slope_right=old_slope_r[mystrip]; 00192 itemvector[istrip].xtalk_intercept_right=old_intercept_r[mystrip]; 00193 itemvector[istrip].xtalk_chi2_right=old_chi2_r[mystrip]; 00194 itemvector[istrip].xtalk_slope_left=old_slope_l[mystrip]; 00195 itemvector[istrip].xtalk_intercept_left=old_intercept_l[mystrip]; 00196 itemvector[istrip].xtalk_chi2_left=old_chi2_l[mystrip]; 00197 cncrosstalk->crosstalk[old_cham_id[mystrip]]=itemvector; 00198 istrip++; 00199 } 00200 } 00201 00202 //overwrite old values with ones from new runs 00203 itemvector.resize(80); 00204 for(unsigned int mystrip=0; mystrip<new_nrlines-1; mystrip++){ 00205 if(new_strips[mystrip]==0) istrip = 0; 00206 itemvector[istrip].xtalk_slope_right=new_slope_r[mystrip]; 00207 itemvector[istrip].xtalk_intercept_right=new_intercept_r[mystrip]; 00208 itemvector[istrip].xtalk_chi2_right=new_chi2_r[mystrip]; 00209 itemvector[istrip].xtalk_slope_left=new_slope_l[mystrip]; 00210 itemvector[istrip].xtalk_intercept_left=new_intercept_l[mystrip]; 00211 itemvector[istrip].xtalk_chi2_left=new_chi2_l[mystrip]; 00212 cncrosstalk->crosstalk[new_cham_id[mystrip]]=itemvector; 00213 istrip++; 00214 } 00215 00216 itemvector.resize(64); 00217 for(unsigned int mystrip=0; mystrip<new_nrlines-1; mystrip++){ 00218 if(new_strips[mystrip]==0) istrip = 0; 00219 if(new_cham_id[mystrip] >= 113000 && new_cham_id[mystrip] <= 113999){ 00220 itemvector[istrip].xtalk_slope_right=new_slope_r[mystrip]; 00221 itemvector[istrip].xtalk_intercept_right=new_intercept_r[mystrip]; 00222 itemvector[istrip].xtalk_chi2_right=new_chi2_r[mystrip]; 00223 itemvector[istrip].xtalk_slope_left=new_slope_l[mystrip]; 00224 itemvector[istrip].xtalk_intercept_left=new_intercept_l[mystrip]; 00225 itemvector[istrip].xtalk_chi2_left=new_chi2_l[mystrip]; 00226 cncrosstalk->crosstalk[new_cham_id[mystrip]]=itemvector; 00227 istrip++; 00228 } 00229 } 00230 00231 itemvector.resize(64); 00232 for(unsigned int mystrip=0; mystrip<new_nrlines-1; mystrip++){ 00233 if(new_strips[mystrip]==0) istrip = 0; 00234 if(new_cham_id[mystrip] >= 213000 && new_cham_id[mystrip] <= 213999){ 00235 itemvector[istrip].xtalk_slope_right=new_slope_r[mystrip]; 00236 itemvector[istrip].xtalk_intercept_right=new_intercept_r[mystrip]; 00237 itemvector[istrip].xtalk_chi2_right=new_chi2_r[mystrip]; 00238 itemvector[istrip].xtalk_slope_left=new_slope_l[mystrip]; 00239 itemvector[istrip].xtalk_intercept_left=new_intercept_l[mystrip]; 00240 itemvector[istrip].xtalk_chi2_left=new_chi2_l[mystrip]; 00241 cncrosstalk->crosstalk[new_cham_id[mystrip]]=itemvector; 00242 istrip++; 00243 } 00244 } 00245 } 00246 00247 return cncrosstalk; 00248 00249 }
CSCCrosstalkConditions::ReturnType CSCCrosstalkConditions::produceCrosstalk | ( | const CSCcrosstalkRcd & | iRecord | ) |
Definition at line 279 of file CSCCrosstalkConditions.cc.
References cnCrosstalk.
Referenced by CSCCrosstalkConditions().
00280 { 00281 // Added by Zhen, need a new object so to not be deleted at exit 00282 CSCcrosstalk* mydata=new CSCcrosstalk( *cnCrosstalk ); 00283 00284 return mydata; 00285 00286 }
void CSCCrosstalkConditions::setIntervalFor | ( | const edm::eventsetup::EventSetupRecordKey & | , | |
const edm::IOVSyncValue & | , | |||
edm::ValidityInterval & | oValidity | |||
) | [private, virtual] |
Implements edm::EventSetupRecordIntervalFinder.
Definition at line 288 of file CSCCrosstalkConditions.cc.
References edm::IOVSyncValue::beginOfTime(), and edm::IOVSyncValue::endOfTime().
00290 { 00291 oValidity = edm::ValidityInterval(edm::IOVSyncValue::beginOfTime(),edm::IOVSyncValue::endOfTime()); 00292 00293 }
CSCcrosstalk* CSCCrosstalkConditions::cnCrosstalk [private] |
Definition at line 34 of file CSCCrosstalkConditions.h.
Referenced by CSCCrosstalkConditions(), produceCrosstalk(), and ~CSCCrosstalkConditions().