CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_3/src/CalibMuon/CSCCalibration/plugins/CSCNoiseMatrixConditions.cc

Go to the documentation of this file.
00001 #include <fstream>
00002 
00003 #include "CalibMuon/CSCCalibration/interface/CSCNoiseMatrixConditions.h"
00004 
00005 CSCNoiseMatrix * CSCNoiseMatrixConditions::prefillNoiseMatrix(){
00006   
00007   int old_chamber_id,old_strip,new_chamber_id,new_strip;
00008   float old_elm33,old_elm34, old_elm44, old_elm35, old_elm45, old_elm55;
00009   float old_elm46, old_elm56, old_elm66, old_elm57, old_elm67, old_elm77;
00010   std::vector<int> old_cham_id;
00011   std::vector<int> old_strips;
00012   std::vector<float> old_elem33;
00013   std::vector<float> old_elem34;
00014   std::vector<float> old_elem44;
00015   std::vector<float> old_elem45;
00016   std::vector<float> old_elem35;
00017   std::vector<float> old_elem55;
00018   std::vector<float> old_elem46;
00019   std::vector<float> old_elem56;
00020   std::vector<float> old_elem66;
00021   std::vector<float> old_elem57;
00022   std::vector<float> old_elem67;
00023   std::vector<float> old_elem77;
00024 
00025 
00026   float new_elm33,new_elm34, new_elm44, new_elm35, new_elm45, new_elm55;
00027   float  new_elm46, new_elm56, new_elm66, new_elm57, new_elm67, new_elm77;
00028   std::vector<int> new_cham_id;
00029   std::vector<int> new_strips;
00030   std::vector<float> new_elem33;
00031   std::vector<float> new_elem34;
00032   std::vector<float> new_elem44;
00033   std::vector<float> new_elem45;
00034   std::vector<float> new_elem35;
00035   std::vector<float> new_elem55;
00036   std::vector<float> new_elem46;
00037   std::vector<float> new_elem56;
00038   std::vector<float> new_elem66;
00039   std::vector<float> new_elem57;
00040   std::vector<float> new_elem67;
00041   std::vector<float> new_elem77;
00042 
00043   const CSCDetId& detId = CSCDetId();
00044   CSCNoiseMatrix * cnmatrix = new CSCNoiseMatrix();
00045   
00046   int max_istrip,id_layer,max_ring,max_cham;
00047   unsigned int old_nrlines=0;
00048   unsigned int new_nrlines=0;
00049 
00050   std::ifstream olddata; 
00051   olddata.open("old_matrix.dat",std::ios::in); 
00052   if(!olddata) {
00053     std::cerr <<"Error: old_matrix.dat -> no such file!"<< std::endl;
00054     exit(1);
00055   }
00056   
00057   while (!olddata.eof() ) { 
00058     olddata >> old_chamber_id >> old_strip >> old_elm33 >> old_elm34 >> old_elm44 >> old_elm35 >> old_elm45 >> old_elm55 >> old_elm46 >> old_elm56 >> old_elm66 >> old_elm57 >> old_elm67 >> old_elm77; 
00059     old_cham_id.push_back(old_chamber_id);
00060     old_strips.push_back(old_strip);
00061     old_elem33.push_back(old_elm33);
00062     old_elem34.push_back(old_elm34);
00063     old_elem44.push_back(old_elm44);
00064     old_elem35.push_back(old_elm35);
00065     old_elem45.push_back(old_elm45);
00066     old_elem55.push_back(old_elm55);
00067     old_elem46.push_back(old_elm46);
00068     old_elem56.push_back(old_elm56);
00069     old_elem66.push_back(old_elm66);
00070     old_elem57.push_back(old_elm57);
00071     old_elem67.push_back(old_elm67);
00072     old_elem77.push_back(old_elm77);
00073 
00074     old_nrlines++;
00075   }
00076   olddata.close();
00077 
00078   std::ifstream newdata;
00079   newdata.open("new_matrix.txt",std::ios::in); 
00080   if(!newdata) {
00081     std::cerr <<"Error: new_matrix.txt -> no such file!"<< std::endl;
00082     exit(1);
00083   }
00084   
00085   while (!newdata.eof() ) { 
00086     newdata >> new_chamber_id >> new_strip >> new_elm33 >> new_elm34 >> new_elm44 >> new_elm35 >> new_elm45 >> new_elm55 >> new_elm46 >> new_elm56 >> new_elm66 >> new_elm57 >> new_elm67 >> new_elm77 ; 
00087     new_cham_id.push_back(new_chamber_id);
00088     new_strips.push_back(new_strip);
00089     new_elem33.push_back(new_elm33);
00090     new_elem34.push_back(new_elm34);
00091     new_elem44.push_back(new_elm44);
00092     new_elem35.push_back(new_elm35);
00093     new_elem45.push_back(new_elm45);
00094     new_elem55.push_back(new_elm55);
00095     new_elem46.push_back(new_elm46);
00096     new_elem56.push_back(new_elm56);
00097     new_elem66.push_back(new_elm66);
00098     new_elem57.push_back(new_elm57);
00099     new_elem67.push_back(new_elm67);
00100     new_elem77.push_back(new_elm77); 
00101     new_nrlines++;
00102   }
00103   newdata.close();
00104 
00105 
00106 
00107   //endcap=1 to 2,station=1 to 4, ring=1 to 4,chamber=1 to 36,layer=1 to 6 
00108   
00109   for(int iendcap=detId.minEndcapId(); iendcap<=detId.maxEndcapId(); iendcap++){
00110     for(int istation=detId.minStationId() ; istation<=detId.maxStationId(); istation++){
00111       max_ring=detId.maxRingId();
00112       //station 4 ring 4 not there(36 chambers*2 missing)
00113       //3 rings max this way of counting (ME1a & b)
00114       if(istation==1)    max_ring=3;
00115       if(istation==2)    max_ring=2;
00116       if(istation==3)    max_ring=2;
00117       if(istation==4)    max_ring=1;
00118         
00119       for(int iring=detId.minRingId(); iring<=max_ring; iring++){
00120         max_istrip=80;
00121         max_cham=detId.maxChamberId(); 
00122         if(istation==1 && iring==1)    max_cham=36;
00123         if(istation==1 && iring==2)    max_cham=36;
00124         if(istation==1 && iring==3)    max_cham=36;
00125         if(istation==2 && iring==1)    max_cham=18;
00126         if(istation==2 && iring==2)    max_cham=36;
00127         if(istation==3 && iring==1)    max_cham=18;
00128         if(istation==3 && iring==2)    max_cham=36;
00129         if(istation==4 && iring==1)    max_cham=18;
00130         
00131         for(int ichamber=detId.minChamberId(); ichamber<=max_cham; ichamber++){
00132           for(int ilayer=detId.minLayerId(); ilayer<=detId.maxLayerId(); ilayer++){
00133             //station 1 ring 3 has 64 strips per layer instead of 80 
00134             if(istation==1 && iring==3)   max_istrip=64;
00135 
00136             std::vector<CSCNoiseMatrix::Item> itemvector;
00137             itemvector.resize(max_istrip);
00138             id_layer = 100000*iendcap + 10000*istation + 1000*iring + 10*ichamber + ilayer;
00139             
00140             for(int istrip=0;istrip<max_istrip;istrip++){
00141               
00142               if(istation==1 && iring==1){
00143                 itemvector[istrip].elem33 = 7.86675;
00144                 itemvector[istrip].elem34 = 2.07075;
00145                 itemvector[istrip].elem44 = 6.93875;
00146                 itemvector[istrip].elem35 = 1.42525;
00147                 itemvector[istrip].elem45 = 2.51025;
00148                 itemvector[istrip].elem55 = 7.93975;
00149                 itemvector[istrip].elem46 = 0.94725;
00150                 itemvector[istrip].elem56 = 2.39275;
00151                 itemvector[istrip].elem66 = 6.46475;
00152                 itemvector[istrip].elem57 = 1.86325;
00153                 itemvector[istrip].elem67 = 2.08025;
00154                 itemvector[istrip].elem77 = 6.67975;
00155                 cnmatrix->matrix[id_layer]=itemvector;
00156               }
00157 
00158               if(istation==1 && iring==2){
00159                 itemvector[istrip].elem33 = 9.118;
00160                 itemvector[istrip].elem34 = 3.884;
00161                 itemvector[istrip].elem44 = 7.771;
00162                 itemvector[istrip].elem35 = 1.8225;
00163                 itemvector[istrip].elem45 = 3.7505;
00164                 itemvector[istrip].elem55 = 8.597;
00165                 itemvector[istrip].elem46 = 1.651;
00166                 itemvector[istrip].elem56 = 2.5225;
00167                 itemvector[istrip].elem66 = 6.583;
00168                 itemvector[istrip].elem57 = 1.5055;
00169                 itemvector[istrip].elem67 = 2.733;
00170                 itemvector[istrip].elem77 = 6.988;
00171                 cnmatrix->matrix[id_layer]=itemvector;
00172               }
00173 
00174               if(istation==1 && iring==3){
00175                 itemvector[istrip].elem33 = 9.5245;
00176                 itemvector[istrip].elem34 = 3.2415;
00177                 itemvector[istrip].elem44 = 7.6265;
00178                 itemvector[istrip].elem35 = 1.7225;
00179                 itemvector[istrip].elem45 = 3.6075;
00180                 itemvector[istrip].elem55 = 8.7275;
00181                 itemvector[istrip].elem46 = 1.663;
00182                 itemvector[istrip].elem56 = 2.592;
00183                 itemvector[istrip].elem66 = 7.5685;
00184                 itemvector[istrip].elem57 = 1.7905;
00185                 itemvector[istrip].elem67 = 2.409;
00186                 itemvector[istrip].elem77 = 7.1495;
00187                 cnmatrix->matrix[id_layer]=itemvector;
00188               }
00189 
00190               if(istation==2 && iring==1){
00191                 itemvector[istrip].elem33 = 9.06825;
00192                 itemvector[istrip].elem34 = 3.32025;
00193                 itemvector[istrip].elem44 = 7.52925;
00194                 itemvector[istrip].elem35 = 3.66125;
00195                 itemvector[istrip].elem45 = 3.39125;
00196                 itemvector[istrip].elem55 = 9.97625;
00197                 itemvector[istrip].elem46 = 1.32725;
00198                 itemvector[istrip].elem56 = 3.99025;
00199                 itemvector[istrip].elem66 = 8.10125;
00200                 itemvector[istrip].elem57 = 2.56456;
00201                 itemvector[istrip].elem67 = 2.96625;
00202                 itemvector[istrip].elem77 = 7.30925;
00203                 cnmatrix->matrix[id_layer]=itemvector;
00204               } 
00205 
00206               if(istation==2 &&iring==2){
00207                 itemvector[istrip].elem33 = 16.7442;
00208                 itemvector[istrip].elem34 = 7.96925;
00209                 itemvector[istrip].elem44 = 14.1643;
00210                 itemvector[istrip].elem35 = 4.67975;
00211                 itemvector[istrip].elem45 = 8.44075;
00212                 itemvector[istrip].elem55 = 17.2243;
00213                 itemvector[istrip].elem46 = 3.68575;
00214                 itemvector[istrip].elem56 = 7.48825;
00215                 itemvector[istrip].elem66 = 14.4902;
00216                 itemvector[istrip].elem57 = 4.4482;
00217                 itemvector[istrip].elem67 = 6.47875;
00218                 itemvector[istrip].elem77 = 14.6733;
00219                 cnmatrix->matrix[id_layer]=itemvector;
00220               } 
00221 
00222               if(istation==3 && iring==1){
00223                 itemvector[istrip].elem33 = 9.3495;
00224                 itemvector[istrip].elem34 = 3.529;
00225                 itemvector[istrip].elem44 = 7.8715;
00226                 itemvector[istrip].elem35 = 3.8155;
00227                 itemvector[istrip].elem45 = 3.858;
00228                 itemvector[istrip].elem55 = 10.8205;
00229                 itemvector[istrip].elem46 = 1.8585;
00230                 itemvector[istrip].elem56 = 4.445;
00231                 itemvector[istrip].elem66 = 8.0175;
00232                 itemvector[istrip].elem57 = 3.29479;
00233                 itemvector[istrip].elem67 = 3.625;
00234                 itemvector[istrip].elem77 = 8.3895;
00235                 cnmatrix->matrix[id_layer]=itemvector;
00236               } 
00237         
00238               if(istation==3 && iring==2){
00239                 itemvector[istrip].elem33 = 13.6193;
00240                 itemvector[istrip].elem34 = 5.91025;
00241                 itemvector[istrip].elem44 = 11.3842;
00242                 itemvector[istrip].elem35 = 3.31775;
00243                 itemvector[istrip].elem45 = 5.69775;
00244                 itemvector[istrip].elem55 = 11.6652;
00245                 itemvector[istrip].elem46 = 2.46175;
00246                 itemvector[istrip].elem56 = 4.48325;
00247                 itemvector[istrip].elem66 = 9.95725;
00248                 itemvector[istrip].elem57 = 2.10561;
00249                 itemvector[istrip].elem67 = 4.04625;
00250                 itemvector[istrip].elem77 = 9.51625;
00251                 cnmatrix->matrix[id_layer]=itemvector;
00252               } 
00253 
00254               if(istation==4 && iring==1){
00255                 itemvector[istrip].elem33 = 10.0;
00256                 itemvector[istrip].elem34 = 4.0;
00257                 itemvector[istrip].elem44 = 10.0;
00258                 itemvector[istrip].elem35 = 3.0;
00259                 itemvector[istrip].elem45 = 8.0;
00260                 itemvector[istrip].elem55 = 10.0;
00261                 itemvector[istrip].elem46 = 2.0;
00262                 itemvector[istrip].elem56 = 5.0;
00263                 itemvector[istrip].elem66 = 10.0;
00264                 itemvector[istrip].elem57 = 3.0;
00265                 itemvector[istrip].elem67 = 4.0;
00266                 itemvector[istrip].elem77 = 10.0;
00267                 cnmatrix->matrix[id_layer]=itemvector;
00268               }
00269             }
00270           }
00271         }
00272       }
00273     }
00274   }
00275 
00276   //overwrite fakes with old values from DB
00277   int istrip = 0;
00278   std::vector<CSCNoiseMatrix::Item> itemvector;
00279   itemvector.resize(80); 
00280 
00281   for(unsigned int mystrip=0; mystrip<old_nrlines-1; mystrip++){
00282     if(old_strips[mystrip]==0) istrip = 0;
00283     itemvector[istrip].elem33 = old_elem33[mystrip];
00284     itemvector[istrip].elem34 = old_elem34[mystrip]; 
00285     itemvector[istrip].elem44 = old_elem44[mystrip];
00286     itemvector[istrip].elem35 = old_elem35[mystrip];
00287     itemvector[istrip].elem45 = old_elem45[mystrip];
00288     itemvector[istrip].elem55 = old_elem55[mystrip];
00289     itemvector[istrip].elem46 = old_elem46[mystrip];
00290     itemvector[istrip].elem56 = old_elem56[mystrip];
00291     itemvector[istrip].elem66 = old_elem66[mystrip];
00292     itemvector[istrip].elem57 = old_elem57[mystrip];
00293     itemvector[istrip].elem67 = old_elem67[mystrip];
00294     itemvector[istrip].elem77 = old_elem77[mystrip];
00295     cnmatrix->matrix[old_cham_id[mystrip]]=itemvector;
00296     istrip++;
00297   }  
00298   
00299   
00300   itemvector.resize(64);
00301   for(unsigned int mystrip=0; mystrip<old_nrlines-1; mystrip++){
00302     if(old_strips[mystrip]==0) istrip = 0;
00303     if(old_cham_id[mystrip] >= 113000 && old_cham_id[mystrip] <= 113999){
00304       itemvector[istrip].elem33 = old_elem33[mystrip];
00305       itemvector[istrip].elem34 = old_elem34[mystrip]; 
00306       itemvector[istrip].elem44 = old_elem44[mystrip];
00307       itemvector[istrip].elem35 = old_elem35[mystrip];
00308       itemvector[istrip].elem45 = old_elem45[mystrip];
00309       itemvector[istrip].elem55 = old_elem55[mystrip];
00310       itemvector[istrip].elem46 = old_elem46[mystrip];
00311       itemvector[istrip].elem56 = old_elem56[mystrip];
00312       itemvector[istrip].elem66 = old_elem66[mystrip];
00313       itemvector[istrip].elem57 = old_elem57[mystrip];
00314       itemvector[istrip].elem67 = old_elem67[mystrip];
00315       itemvector[istrip].elem77 = old_elem77[mystrip];
00316       cnmatrix->matrix[old_cham_id[mystrip]]=itemvector;
00317       istrip++;
00318     }
00319   } 
00320   
00321   itemvector.resize(64);
00322   for(unsigned int mystrip=0; mystrip<old_nrlines-1; mystrip++){
00323     if(old_strips[mystrip]==0) istrip = 0;
00324     if(old_cham_id[mystrip] >= 213000 && old_cham_id[mystrip] <= 213999){
00325       itemvector[istrip].elem33 = old_elem33[mystrip];
00326       itemvector[istrip].elem34 = old_elem34[mystrip]; 
00327       itemvector[istrip].elem44 = old_elem44[mystrip];
00328       itemvector[istrip].elem35 = old_elem35[mystrip];
00329       itemvector[istrip].elem45 = old_elem45[mystrip];
00330       itemvector[istrip].elem55 = old_elem55[mystrip];
00331       itemvector[istrip].elem46 = old_elem46[mystrip];
00332       itemvector[istrip].elem56 = old_elem56[mystrip];
00333       itemvector[istrip].elem66 = old_elem66[mystrip];
00334       itemvector[istrip].elem57 = old_elem57[mystrip];
00335       itemvector[istrip].elem67 = old_elem67[mystrip];
00336       itemvector[istrip].elem77 = old_elem77[mystrip];
00337       cnmatrix->matrix[old_cham_id[mystrip]]=itemvector;
00338       istrip++;
00339     }
00340   }   
00341   
00342   //overwrite old values with ones from new runs
00343   itemvector.resize(80);
00344   for(unsigned int mystrip=0; mystrip<new_nrlines-1; mystrip++){
00345     if(new_strips[mystrip]==0) istrip = 0;
00346     itemvector[istrip].elem33 = new_elem33[mystrip];
00347     itemvector[istrip].elem34 = new_elem34[mystrip]; 
00348     itemvector[istrip].elem44 = new_elem44[mystrip];
00349     itemvector[istrip].elem35 = new_elem35[mystrip];
00350     itemvector[istrip].elem45 = new_elem45[mystrip];
00351     itemvector[istrip].elem55 = new_elem55[mystrip];
00352     itemvector[istrip].elem46 = new_elem46[mystrip];
00353     itemvector[istrip].elem56 = new_elem56[mystrip];
00354     itemvector[istrip].elem66 = new_elem66[mystrip];
00355     itemvector[istrip].elem57 = new_elem57[mystrip];
00356     itemvector[istrip].elem67 = new_elem67[mystrip];
00357     itemvector[istrip].elem77 = new_elem77[mystrip];
00358     cnmatrix->matrix[new_cham_id[mystrip]]=itemvector;
00359     istrip++;
00360   }
00361     
00362   itemvector.resize(64);
00363   for(unsigned int mystrip=0; mystrip<new_nrlines-1; mystrip++){
00364     if(new_strips[mystrip]==0) istrip = 0;
00365     if(new_cham_id[mystrip] >= 113000 && new_cham_id[mystrip] <= 113999){
00366       itemvector[istrip].elem33 = new_elem33[mystrip];
00367       itemvector[istrip].elem34 = new_elem34[mystrip]; 
00368       itemvector[istrip].elem44 = new_elem44[mystrip];
00369       itemvector[istrip].elem35 = new_elem35[mystrip];
00370       itemvector[istrip].elem45 = new_elem45[mystrip];
00371       itemvector[istrip].elem55 = new_elem55[mystrip];
00372       itemvector[istrip].elem46 = new_elem46[mystrip];
00373       itemvector[istrip].elem56 = new_elem56[mystrip];
00374       itemvector[istrip].elem66 = new_elem66[mystrip];
00375       itemvector[istrip].elem57 = new_elem57[mystrip];
00376       itemvector[istrip].elem67 = new_elem67[mystrip];
00377       itemvector[istrip].elem77 = new_elem77[mystrip];
00378       cnmatrix->matrix[new_cham_id[mystrip]]=itemvector;
00379       istrip++;
00380     }
00381   } 
00382   
00383   itemvector.resize(64);
00384   for(unsigned int mystrip=0; mystrip<new_nrlines-1; mystrip++){
00385     if(new_strips[mystrip]==0) istrip = 0;
00386     if(new_cham_id[mystrip] >= 213000 && new_cham_id[mystrip] <= 213999){
00387       itemvector[istrip].elem33 = new_elem33[mystrip];
00388       itemvector[istrip].elem34 = new_elem34[mystrip]; 
00389       itemvector[istrip].elem44 = new_elem44[mystrip];
00390       itemvector[istrip].elem35 = new_elem35[mystrip];
00391       itemvector[istrip].elem45 = new_elem45[mystrip];
00392       itemvector[istrip].elem55 = new_elem55[mystrip];
00393       itemvector[istrip].elem46 = new_elem46[mystrip];
00394       itemvector[istrip].elem56 = new_elem56[mystrip];
00395       itemvector[istrip].elem66 = new_elem66[mystrip];
00396       itemvector[istrip].elem57 = new_elem57[mystrip];
00397       itemvector[istrip].elem67 = new_elem67[mystrip];
00398       itemvector[istrip].elem77 = new_elem77[mystrip];
00399       cnmatrix->matrix[new_cham_id[mystrip]]=itemvector;
00400       istrip++;
00401     }
00402   } 
00403   return cnmatrix;
00404   
00405 }
00406 
00407 CSCNoiseMatrixConditions::CSCNoiseMatrixConditions(const edm::ParameterSet& iConfig)
00408 {
00409   //the following line is needed to tell the framework what
00410   // data is being produced
00411   cnMatrix = prefillNoiseMatrix();
00412   // added by Zhen (changed since 1_2_0)
00413   setWhatProduced(this,&CSCNoiseMatrixConditions::produceNoiseMatrix);
00414   findingRecord<CSCNoiseMatrixRcd>();
00415   //now do what ever other initialization is needed
00416 }
00417 
00418 
00419 CSCNoiseMatrixConditions::~CSCNoiseMatrixConditions()
00420 {
00421  
00422    // do anything here that needs to be done at desctruction time
00423    // (e.g. close files, deallocate resources etc.)
00424   delete cnMatrix;
00425 }
00426 
00427 
00428 //
00429 // member functions
00430 //
00431 
00432 // ------------ method called to produce the data  ------------
00433 CSCNoiseMatrixConditions::ReturnType
00434 CSCNoiseMatrixConditions::produceNoiseMatrix(const CSCNoiseMatrixRcd& iRecord)
00435 {
00436     // Added by Zhen, need a new object so to not be deleted at exit
00437     CSCNoiseMatrix* mydata=new CSCNoiseMatrix( *cnMatrix );
00438     
00439     return mydata;
00440 
00441 }
00442 
00443  void CSCNoiseMatrixConditions::setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue&,
00444  edm::ValidityInterval & oValidity)
00445  {
00446  oValidity = edm::ValidityInterval(edm::IOVSyncValue::beginOfTime(),edm::IOVSyncValue::endOfTime());
00447  
00448  }