Go to the documentation of this file.00001 #include <fstream>
00002
00003 #include "CalibMuon/CSCCalibration/interface/CSCGainsConditions.h"
00004
00005 CSCGains * CSCGainsConditions::prefillGains(){
00006
00007 float mean,min,minchi;
00008 int seed;
00009 int old_chamber_id,old_strip,new_chamber_id,new_strip;
00010 float old_gainslope,old_intercpt, old_chisq;
00011 std::vector<int> old_cham_id;
00012 std::vector<int> old_strips;
00013 std::vector<float> old_slope;
00014 std::vector<float> old_intercept;
00015 std::vector<float> old_chi2;
00016 float new_gainslope,new_intercpt, new_chisq;
00017 std::vector<int> new_cham_id;
00018 std::vector<int> new_strips;
00019 std::vector<float> new_slope;
00020 std::vector<float> new_intercept;
00021 std::vector<float> new_chi2;
00022
00023 const CSCDetId& detId = CSCDetId();
00024 CSCGains * cngains = new CSCGains();
00025
00026 int max_istrip,id_layer,max_ring,max_cham;
00027 unsigned int old_nrlines=0;
00028 unsigned int new_nrlines=0;
00029 seed = 10000;
00030 srand(seed);
00031 mean=6.8, min=-10.0, minchi=1.0;
00032
00033 std::ifstream olddata;
00034 olddata.open("old_gains.dat",std::ios::in);
00035 if(!olddata) {
00036 std::cerr <<"Error: old_gains.dat -> no such file!"<< std::endl;
00037 exit(1);
00038 }
00039
00040 while (!olddata.eof() ) {
00041 olddata >> old_chamber_id >> old_strip >> old_gainslope >> old_intercpt >> old_chisq ;
00042 old_cham_id.push_back(old_chamber_id);
00043 old_strips.push_back(old_strip);
00044 old_slope.push_back(old_gainslope);
00045 old_intercept.push_back(old_intercpt);
00046 old_chi2.push_back(old_chisq);
00047 old_nrlines++;
00048 }
00049 olddata.close();
00050
00051 std::ifstream newdata;
00052 newdata.open("new_gains.txt",std::ios::in);
00053 if(!newdata) {
00054 std::cerr <<"Error: new_gains.txt -> no such file!"<< std::endl;
00055 exit(1);
00056 }
00057
00058 while (!newdata.eof() ) {
00059 newdata >> new_chamber_id >> new_strip >> new_gainslope >> new_intercpt >> new_chisq ;
00060 new_cham_id.push_back(new_chamber_id);
00061 new_strips.push_back(new_strip);
00062 new_slope.push_back(new_gainslope);
00063 new_intercept.push_back(new_intercpt);
00064 new_chi2.push_back(new_chisq);
00065 new_nrlines++;
00066 }
00067 newdata.close();
00068
00069
00070
00071 for(int iendcap=detId.minEndcapId(); iendcap<=detId.maxEndcapId(); iendcap++){
00072 for(int istation=detId.minStationId() ; istation<=detId.maxStationId(); istation++){
00073 max_ring=detId.maxRingId();
00074
00075
00076 if(istation==1) max_ring=3;
00077 if(istation==2) max_ring=2;
00078 if(istation==3) max_ring=2;
00079 if(istation==4) max_ring=1;
00080
00081 for(int iring=detId.minRingId(); iring<=max_ring; iring++){
00082 max_istrip=80;
00083 max_cham=detId.maxChamberId();
00084 if(istation==1 && iring==1) max_cham=36;
00085 if(istation==1 && iring==2) max_cham=36;
00086 if(istation==1 && iring==3) max_cham=36;
00087 if(istation==2 && iring==1) max_cham=18;
00088 if(istation==2 && iring==2) max_cham=36;
00089 if(istation==3 && iring==1) max_cham=18;
00090 if(istation==3 && iring==2) max_cham=36;
00091 if(istation==4 && iring==1) max_cham=18;
00092
00093 for(int ichamber=detId.minChamberId(); ichamber<=max_cham; ichamber++){
00094 for(int ilayer=detId.minLayerId(); ilayer<=detId.maxLayerId(); ilayer++){
00095
00096 if(istation==1 && iring==3) max_istrip=64;
00097
00098 std::vector<CSCGains::Item> itemvector;
00099 itemvector.resize(max_istrip);
00100 id_layer = 100000*iendcap + 10000*istation + 1000*iring + 10*ichamber + ilayer;
00101
00102 for(int istrip=0;istrip<max_istrip;istrip++){
00103 itemvector[istrip].gain_slope=((double)rand()/((double)(RAND_MAX)+(double)(1)))+mean;
00104 itemvector[istrip].gain_intercept=((double)rand()/((double)(RAND_MAX)+(double)(1)))+min;
00105 itemvector[istrip].gain_chi2=((double)rand()/((double)(RAND_MAX)+(double)(1)))+minchi;
00106 cngains->gains[id_layer]=itemvector;
00107 }
00108 }
00109 }
00110 }
00111 }
00112 }
00113
00114
00115 int istrip = 0;
00116 std::vector<CSCGains::Item> itemvector;
00117 itemvector.resize(80);
00118
00119 for(unsigned int mystrip=0; mystrip<old_nrlines-1; mystrip++){
00120 if(old_strips[mystrip]==0) istrip = 0;
00121 itemvector[istrip].gain_slope=old_slope[mystrip];
00122 itemvector[istrip].gain_intercept=old_intercept[mystrip];
00123 itemvector[istrip].gain_chi2=old_chi2[mystrip];
00124 cngains->gains[old_cham_id[mystrip]]=itemvector;
00125 istrip++;
00126 }
00127
00128
00129 itemvector.resize(64);
00130 for(unsigned int mystrip=0; mystrip<old_nrlines-1; mystrip++){
00131 if(old_strips[mystrip]==0) istrip = 0;
00132 if(old_cham_id[mystrip] >= 113000 && old_cham_id[mystrip] <= 113999){
00133 itemvector[istrip].gain_slope=old_slope[mystrip];
00134 itemvector[istrip].gain_intercept=old_intercept[mystrip];
00135 itemvector[istrip].gain_chi2=old_chi2[mystrip];
00136 cngains->gains[old_cham_id[mystrip]]=itemvector;
00137 istrip++;
00138 }
00139 }
00140
00141 itemvector.resize(64);
00142 for(unsigned int mystrip=0; mystrip<old_nrlines-1; mystrip++){
00143 if(old_strips[mystrip]==0) istrip = 0;
00144 if(old_cham_id[mystrip] >= 213000 && old_cham_id[mystrip] <= 213999){
00145 itemvector[istrip].gain_slope=old_slope[mystrip];
00146 itemvector[istrip].gain_intercept=old_intercept[mystrip];
00147 itemvector[istrip].gain_chi2=old_chi2[mystrip];
00148 cngains->gains[old_cham_id[mystrip]]=itemvector;
00149 istrip++;
00150 }
00151 }
00152
00153
00154 itemvector.resize(80);
00155 for(unsigned int mystrip=0; mystrip<new_nrlines-1; mystrip++){
00156 if(new_strips[mystrip]==0) istrip = 0;
00157 itemvector[istrip].gain_slope=new_slope[mystrip];
00158 itemvector[istrip].gain_intercept=new_intercept[mystrip];
00159 itemvector[istrip].gain_chi2=new_chi2[mystrip];
00160 cngains->gains[new_cham_id[mystrip]]=itemvector;
00161 istrip++;
00162 }
00163
00164 itemvector.resize(64);
00165 for(unsigned int mystrip=0; mystrip<new_nrlines-1; mystrip++){
00166 if(new_strips[mystrip]==0) istrip = 0;
00167 if(new_cham_id[mystrip] >= 113000 && new_cham_id[mystrip] <= 113999){
00168 itemvector[istrip].gain_slope=new_slope[mystrip];
00169 itemvector[istrip].gain_intercept=new_intercept[mystrip];
00170 itemvector[istrip].gain_chi2=new_chi2[mystrip];
00171 cngains->gains[new_cham_id[mystrip]]=itemvector;
00172 istrip++;
00173 }
00174 }
00175
00176 itemvector.resize(64);
00177 for(unsigned int mystrip=0; mystrip<new_nrlines-1; mystrip++){
00178 if(new_strips[mystrip]==0) istrip = 0;
00179 if(new_cham_id[mystrip] >= 213000 && new_cham_id[mystrip] <= 213999){
00180 itemvector[istrip].gain_slope=new_slope[mystrip];
00181 itemvector[istrip].gain_intercept=new_intercept[mystrip];
00182 itemvector[istrip].gain_chi2=new_chi2[mystrip];
00183 cngains->gains[new_cham_id[mystrip]]=itemvector;
00184 istrip++;
00185 }
00186 }
00187 return cngains;
00188 }
00189
00190
00191 CSCGainsConditions::CSCGainsConditions(const edm::ParameterSet& iConfig)
00192 {
00193
00194
00195 cnGains = prefillGains();
00196
00197 setWhatProduced(this,&CSCGainsConditions::produceGains);
00198 findingRecord<CSCGainsRcd>();
00199
00200 }
00201
00202
00203 CSCGainsConditions::~CSCGainsConditions()
00204 {
00205
00206
00207
00208 delete cnGains;
00209 }
00210
00211
00212
00213
00214
00215
00216
00217 CSCGainsConditions::ReturnType
00218 CSCGainsConditions::produceGains(const CSCGainsRcd& iRecord)
00219 {
00220
00221 CSCGains* mydata=new CSCGains( *cnGains );
00222
00223 return mydata;
00224
00225 }
00226
00227 void CSCGainsConditions::setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue&,
00228 edm::ValidityInterval & oValidity)
00229 {
00230 oValidity = edm::ValidityInterval(edm::IOVSyncValue::beginOfTime(),edm::IOVSyncValue::endOfTime());
00231
00232 }