00001 #include "EcalTPGParamBuilder.h"
00002
00003 #include "CalibCalorimetry/EcalTPGTools/plugins/EcalTPGDBApp.h"
00004
00005
00006 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00007 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
00008 #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h"
00009 #include "Geometry/Records/interface/CaloGeometryRecord.h"
00010 #include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h"
00011 #include "Geometry/EcalMapping/interface/EcalMappingRcd.h"
00012
00013 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
00014 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00015 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00016
00017 #include "CondFormats/DataRecord/interface/EcalIntercalibConstantsRcd.h"
00018 #include "CondFormats/EcalObjects/interface/EcalADCToGeVConstant.h"
00019 #include "CondFormats/DataRecord/interface/EcalADCToGeVConstantRcd.h"
00020 #include "CondFormats/EcalObjects/interface/EcalMGPAGainRatio.h"
00021 #include "CondFormats/DataRecord/interface/EcalGainRatiosRcd.h"
00022 #include "CondFormats/DataRecord/interface/EcalPedestalsRcd.h"
00023 #include "CondFormats/EcalObjects/interface/EcalTPGPedestals.h"
00024 #include "CondFormats/DataRecord/interface/EcalTPGPedestalsRcd.h"
00025
00026 #include "SimCalorimetry/EcalSimAlgos/interface/EcalSimParameterMap.h"
00027 #if (CMSSW_VERSION>=340)
00028 #include "SimCalorimetry/EcalSimAlgos/interface/EBShape.h"
00029 #include "SimCalorimetry/EcalSimAlgos/interface/EEShape.h"
00030 #endif
00031
00032 #include <iostream>
00033 #include <string>
00034 #include <sstream>
00035 #include <vector>
00036 #include <time.h>
00037
00038 #include <TF1.h>
00039 #include <TH2F.h>
00040 #include <TFile.h>
00041 #include <TNtuple.h>
00042 #include <iomanip>
00043 #include <fstream>
00044
00045 using namespace std;
00046
00047 double oneOverEtResolEt(double *x, double *par) {
00048 double Et = x[0] ;
00049 if (Et<1e-6) return 1./par[1] ;
00050 double resolEt_overEt = sqrt( (par[0]/sqrt(Et))*(par[0]/sqrt(Et)) + (par[1]/Et)*(par[1]/Et) + par[2]*par[2] ) ;
00051 return 1./(Et*resolEt_overEt) ;
00052 }
00053
00054 EcalTPGParamBuilder::EcalTPGParamBuilder(edm::ParameterSet const& pSet)
00055 : xtal_LSB_EB_(0), xtal_LSB_EE_(0), nSample_(5), complement2_(7)
00056 {
00057 ped_conf_id_=0;
00058 lin_conf_id_=0;
00059 lut_conf_id_=0;
00060 wei_conf_id_=0;
00061 fgr_conf_id_=0;
00062 sli_conf_id_=0;
00063 spi_conf_id_=0;
00064 del_conf_id_=0;
00065 bxt_conf_id_=0;
00066 btt_conf_id_=0;
00067 bst_conf_id_=0;
00068 tag_="";
00069 version_=0;
00070
00071 m_write_ped=1;
00072 m_write_lin=1;
00073 m_write_lut=1;
00074 m_write_wei=1;
00075 m_write_fgr=1;
00076 m_write_sli=1;
00077 m_write_spi=1;
00078 m_write_del=1;
00079 m_write_bxt=1;
00080 m_write_btt=1;
00081 m_write_bst=1;
00082
00083 writeToDB_ = pSet.getParameter<bool>("writeToDB") ;
00084 DBEE_ = pSet.getParameter<bool>("allowDBEE") ;
00085 string DBsid = pSet.getParameter<std::string>("DBsid") ;
00086 string DBuser = pSet.getParameter<std::string>("DBuser") ;
00087 string DBpass = pSet.getParameter<std::string>("DBpass") ;
00088
00089
00090 tag_ = pSet.getParameter<std::string>("TPGtag") ;
00091 version_ = pSet.getParameter<unsigned int>("TPGversion") ;
00092
00093 m_write_ped = pSet.getParameter<unsigned int>("TPGWritePed") ;
00094 m_write_lin = pSet.getParameter<unsigned int>("TPGWriteLin") ;
00095 m_write_lut = pSet.getParameter<unsigned int>("TPGWriteLut") ;
00096 m_write_wei = pSet.getParameter<unsigned int>("TPGWriteWei") ;
00097 m_write_fgr = pSet.getParameter<unsigned int>("TPGWriteFgr") ;
00098 m_write_sli = pSet.getParameter<unsigned int>("TPGWriteSli") ;
00099 m_write_spi = pSet.getParameter<unsigned int>("TPGWriteSpi") ;
00100 m_write_del = pSet.getParameter<unsigned int>("TPGWriteDel") ;
00101 m_write_bxt = pSet.getParameter<unsigned int>("TPGWriteBxt") ;
00102 m_write_btt = pSet.getParameter<unsigned int>("TPGWriteBtt") ;
00103 m_write_bst = pSet.getParameter<unsigned int>("TPGWriteBst") ;
00104
00105 btt_conf_id_=m_write_btt;
00106 bxt_conf_id_=m_write_bxt;
00107 bst_conf_id_=m_write_bst;
00108
00109 if(m_write_ped != 0 && m_write_ped != 1 ) ped_conf_id_=m_write_ped;
00110
00111 try {
00112 if (writeToDB_) std::cout << "data will be saved with tag and version="<< tag_<< ".version"<<version_<< endl;
00113 db_ = new EcalTPGDBApp(DBsid, DBuser, DBpass) ;
00114 } catch (exception &e) {
00115 cout << "ERROR: " << e.what() << endl;
00116 } catch (...) {
00117 cout << "Unknown error caught" << endl;
00118 }
00119
00120 writeToFiles_ = pSet.getParameter<bool>("writeToFiles") ;
00121 if (writeToFiles_) {
00122 std::string outFile = pSet.getParameter<std::string>("outFile") ;
00123 out_file_ = new std::ofstream(outFile.c_str(), std::ios::out) ;
00124 }
00125 geomFile_ = new std::ofstream("geomFile.txt", std::ios::out) ;
00126
00127
00128 useTransverseEnergy_ = pSet.getParameter<bool>("useTransverseEnergy") ;
00129
00130 Et_sat_EB_ = pSet.getParameter<double>("Et_sat_EB") ;
00131 Et_sat_EE_ = pSet.getParameter<double>("Et_sat_EE") ;
00132 sliding_ = pSet.getParameter<unsigned int>("sliding") ;
00133 weight_timeShift_ = pSet.getParameter<double>("weight_timeShift") ;
00134 sampleMax_ = pSet.getParameter<unsigned int>("weight_sampleMax") ;
00135 weight_unbias_recovery_ = pSet.getParameter<bool>("weight_unbias_recovery") ;
00136
00137 forcedPedestalValue_ = pSet.getParameter<int>("forcedPedestalValue") ;
00138 forceEtaSlice_ = pSet.getParameter<bool>("forceEtaSlice") ;
00139
00140 LUT_option_ = pSet.getParameter<std::string>("LUT_option") ;
00141 LUT_threshold_EB_ = pSet.getParameter<double>("LUT_threshold_EB") ;
00142 LUT_threshold_EE_ = pSet.getParameter<double>("LUT_threshold_EE") ;
00143 LUT_stochastic_EB_ = pSet.getParameter<double>("LUT_stochastic_EB") ;
00144 LUT_noise_EB_ =pSet.getParameter<double>("LUT_noise_EB") ;
00145 LUT_constant_EB_ =pSet.getParameter<double>("LUT_constant_EB") ;
00146 LUT_stochastic_EE_ = pSet.getParameter<double>("LUT_stochastic_EE") ;
00147 LUT_noise_EE_ =pSet.getParameter<double>("LUT_noise_EE") ;
00148 LUT_constant_EE_ =pSet.getParameter<double>("LUT_constant_EE") ;
00149
00150 TTF_lowThreshold_EB_ = pSet.getParameter<double>("TTF_lowThreshold_EB") ;
00151 TTF_highThreshold_EB_ = pSet.getParameter<double>("TTF_highThreshold_EB") ;
00152 TTF_lowThreshold_EE_ = pSet.getParameter<double>("TTF_lowThreshold_EE") ;
00153 TTF_highThreshold_EE_ = pSet.getParameter<double>("TTF_highThreshold_EE") ;
00154
00155 FG_lowThreshold_EB_ = pSet.getParameter<double>("FG_lowThreshold_EB") ;
00156 FG_highThreshold_EB_ = pSet.getParameter<double>("FG_highThreshold_EB") ;
00157 FG_lowRatio_EB_ = pSet.getParameter<double>("FG_lowRatio_EB") ;
00158 FG_highRatio_EB_ = pSet.getParameter<double>("FG_highRatio_EB") ;
00159 FG_lut_EB_ = pSet.getParameter<unsigned int>("FG_lut_EB") ;
00160 FG_Threshold_EE_ = pSet.getParameter<double>("FG_Threshold_EE") ;
00161 FG_lut_strip_EE_ = pSet.getParameter<unsigned int>("FG_lut_strip_EE") ;
00162 FG_lut_tower_EE_ = pSet.getParameter<unsigned int>("FG_lut_tower_EE") ;
00163 SFGVB_Threshold_ = pSet.getParameter<unsigned int>("SFGVB_Threshold") ;
00164 SFGVB_lut_ = pSet.getParameter<unsigned int>("SFGVB_lut") ;
00165 SFGVB_SpikeKillingThreshold_ = pSet.getParameter<int>("SFGVB_SpikeKillingThreshold") ;
00166 pedestal_offset_ = pSet.getParameter<unsigned int>("pedestal_offset") ;
00167
00168 useInterCalibration_ = pSet.getParameter<bool>("useInterCalibration") ;
00169 H2_ = pSet.getUntrackedParameter<bool>("H2",false) ;
00170
00171
00172
00173
00174 if(SFGVB_SpikeKillingThreshold_ == -1 || (SFGVB_SpikeKillingThreshold_ > Et_sat_EB_))
00175 SFGVB_SpikeKillingThreshold_ = 1023;
00176 else
00177 SFGVB_SpikeKillingThreshold_ = int(SFGVB_SpikeKillingThreshold_ * 1024/Et_sat_EB_);
00178 std::cout << "INFO:SPIKE KILLING THRESHOLD (ADC)=" << SFGVB_SpikeKillingThreshold_ << std::endl;
00179
00180
00181
00182 TimingDelays_EB_ = pSet.getParameter<std::string>("timing_delays_EB") ;
00183 TimingDelays_EE_ = pSet.getParameter<std::string>("timing_delays_EE") ;
00184 TimingPhases_EB_ = pSet.getParameter<std::string>("timing_phases_EB") ;
00185 TimingPhases_EE_ = pSet.getParameter<std::string>("timing_phases_EE") ;
00186
00187 std::cout << "INFO: READING timing files" << std::endl;
00188 std::ifstream delay_eb(TimingDelays_EB_.c_str());
00189 if(!delay_eb) std::cout << "ERROR: File " << TimingDelays_EB_.c_str() << " could not be opened" << std::endl;
00190 std::ifstream delay_ee(TimingDelays_EE_.c_str());
00191 if(!delay_ee) std::cout << "ERROR: File " << TimingDelays_EE_.c_str() << " could not be opened" << std::endl;
00192 std::ifstream phase_eb(TimingPhases_EB_.c_str());
00193 if(!phase_eb) std::cout << "ERROR: File " << TimingPhases_EB_.c_str() << " could not be opened" << std::endl;
00194 std::ifstream phase_ee(TimingPhases_EE_.c_str());
00195 if(!phase_ee) std::cout << "ERROR: File " << TimingPhases_EE_.c_str() << " could not be opened" << std::endl;
00196
00197 char buf[1024];
00198
00199 delay_eb.getline(buf,sizeof(buf),'\n');
00200 while( delay_eb ) {
00201 std::stringstream sin(buf);
00202
00203 int tcc;
00204 sin >> tcc;
00205
00206 vector<int> vec_delays_eb;
00207 for(int ieb=0; ieb<68; ++ieb){
00208 int time_delay = -1;
00209 sin >> time_delay;
00210 vec_delays_eb.push_back(time_delay);
00211 if(time_delay==-1) std::cout << "ERROR:Barrel timing delay -1, check file" << std::endl;
00212 }
00213
00214 if(vec_delays_eb.size()!=68)
00215 std::cout << "ERROR:Barrel timing delay wrong, not enough towers, check file" << std::endl;
00216
00217 if (delays_EB_.find(tcc) == delays_EB_.end())
00218 delays_EB_.insert(make_pair(tcc,vec_delays_eb));
00219
00220 cout << tcc << " ";
00221 for(unsigned int ieb=0; ieb<vec_delays_eb.size(); ++ieb)
00222 cout << vec_delays_eb[ieb] << " ";
00223 cout << endl;
00224
00225 delay_eb.getline(buf,sizeof(buf),'\n');
00226 }
00227 delay_eb.close();
00228
00229
00230 phase_eb.getline(buf,sizeof(buf),'\n');
00231 while( phase_eb ) {
00232 std::stringstream sin(buf);
00233 int tcc;
00234 sin >> tcc;
00235
00236 vector<int> vec_phases_eb;
00237 for(unsigned int ieb=0; ieb<68; ++ieb){
00238 int time_phase = -1;
00239 sin >> time_phase;
00240 vec_phases_eb.push_back(time_phase);
00241 if(time_phase==-1) std::cout << "ERROR:Barrel timing phase -1, check file" << std::endl;
00242 }
00243
00244 if(vec_phases_eb.size()!=68)
00245 std::cout << "ERROR:Barrel timing phase wrong, not enough towers, check file" << std::endl;
00246
00247 if (phases_EB_.find(tcc) == phases_EB_.end())
00248 phases_EB_.insert(make_pair(tcc,vec_phases_eb));
00249
00250 cout << tcc << " ";
00251 for(unsigned int ieb=0; ieb<vec_phases_eb.size(); ++ieb)
00252 cout << vec_phases_eb[ieb] << " ";
00253 cout << endl;
00254
00255 phase_eb.getline(buf,sizeof(buf),'\n');
00256 }
00257 phase_eb.close();
00258
00259
00260 delay_ee.getline(buf,sizeof(buf),'\n');
00261 while( delay_ee ) {
00262 std::stringstream sin(buf);
00263 int tcc;
00264 sin >> tcc;
00265
00266 vector<int> vec_delays_ee;
00267 for(unsigned int iee=0; iee<48; ++iee){
00268 int time_delay = -1;
00269 sin >> time_delay;
00270 vec_delays_ee.push_back(time_delay);
00271 if(time_delay==-1) std::cout << "ERROR:EE timing delay -1, check file" << std::endl;
00272 }
00273
00274 if(vec_delays_ee.size()!=48)
00275 std::cout << "ERROR:EE timing delay wrong, not enough towers, check file" << std::endl;
00276
00277 if (delays_EE_.find(tcc) == delays_EE_.end())
00278 delays_EE_.insert(make_pair(tcc,vec_delays_ee));
00279
00280 cout << tcc << " ";
00281 for(unsigned int iee=0; iee<vec_delays_ee.size(); ++iee)
00282 cout << vec_delays_ee[iee] << " ";
00283 cout << endl;
00284
00285 delay_ee.getline(buf,sizeof(buf),'\n');
00286 }
00287 delay_ee.close();
00288
00289
00290
00291 phase_ee.getline(buf,sizeof(buf),'\n');
00292 while( phase_ee ) {
00293 std::stringstream sin(buf);
00294 int tcc;
00295 sin >> tcc;
00296
00297 vector<int> vec_phases_ee;
00298 for(unsigned int iee=0; iee<48; ++iee){
00299 int time_phase = -1;
00300 sin >> time_phase;
00301 vec_phases_ee.push_back(time_phase);
00302 if(time_phase==-1) std::cout << "ERROR:EE timing phase -1, check file" << std::endl;
00303 }
00304
00305 if(vec_phases_ee.size()!=48)
00306 std::cout << "ERROR:EE timing phase wrong, not enough towers, check file" << std::endl;
00307
00308 if (phases_EE_.find(tcc) == phases_EE_.end())
00309 phases_EE_.insert(make_pair(tcc,vec_phases_ee));
00310
00311 cout << tcc << " ";
00312 for(unsigned int iee=0; iee<vec_phases_ee.size(); ++iee)
00313 cout << vec_phases_ee[iee] << " ";
00314 cout << endl;
00315
00316 phase_ee.getline(buf,sizeof(buf),'\n');
00317 }
00318 phase_ee.close();
00319
00320 std::cout << "INFO: DONE reading timing files for EB and EE" << std::endl;
00321
00322 }
00323
00324 EcalTPGParamBuilder::~EcalTPGParamBuilder()
00325 {
00326 if (writeToFiles_) {
00327 (*out_file_ )<<"EOF"<<std::endl ;
00328 out_file_->close() ;
00329 delete out_file_ ;
00330 }
00331 }
00332
00333
00334 bool EcalTPGParamBuilder::checkIfOK(EcalPedestals::Item item)
00335 {
00336 bool result=true;
00337 if( item.mean_x1 <150. || item.mean_x1 >250) result=false;
00338 if( item.mean_x6 <150. || item.mean_x6 >250) result=false;
00339 if( item.mean_x12 <150. || item.mean_x12 >250) result=false;
00340 if( item.rms_x1 <0 || item.rms_x1 > 2) result=false;
00341 if( item.rms_x6 <0 || item.rms_x6 > 3) result=false;
00342 if( item.rms_x12 <0 || item.rms_x12 > 5) result=false;
00343 return result;
00344 }
00345
00346 int EcalTPGParamBuilder::getEtaSlice(int tccId, int towerInTCC)
00347 {
00348 int etaSlice = (towerInTCC-1)/4+1 ;
00349
00350 if (tccId>36 || tccId<73) return etaSlice ;
00351
00352 else {
00353 if (tccId >=1 && tccId <= 18) etaSlice += 21 ;
00354 if (tccId >=19 && tccId <= 36) etaSlice += 17 ;
00355 if (tccId >=91 && tccId <= 108) etaSlice += 21 ;
00356 if (tccId >=73 && tccId <= 90) etaSlice += 17 ;
00357 }
00358 return etaSlice ;
00359 }
00360
00361 void EcalTPGParamBuilder::analyze(const edm::Event& evt, const edm::EventSetup& evtSetup)
00362 {
00363 using namespace edm;
00364 using namespace std;
00365
00366
00367 ESHandle<CaloGeometry> theGeometry;
00368 ESHandle<CaloSubdetectorGeometry> theEndcapGeometry_handle, theBarrelGeometry_handle;
00369 evtSetup.get<CaloGeometryRecord>().get( theGeometry );
00370 evtSetup.get<EcalEndcapGeometryRecord>().get("EcalEndcap",theEndcapGeometry_handle);
00371 evtSetup.get<EcalBarrelGeometryRecord>().get("EcalBarrel",theBarrelGeometry_handle);
00372 evtSetup.get<IdealGeometryRecord>().get(eTTmap_);
00373 theEndcapGeometry_ = &(*theEndcapGeometry_handle);
00374 theBarrelGeometry_ = &(*theBarrelGeometry_handle);
00375
00376
00377 ESHandle< EcalElectronicsMapping > ecalmapping;
00378 evtSetup.get< EcalMappingRcd >().get(ecalmapping);
00379 theMapping_ = ecalmapping.product();
00380
00381
00382
00383 TFile saving ("EcalTPGParam.root","recreate") ;
00384 saving.cd () ;
00385 TH2F * ICEB = new TH2F("ICEB", "IC: Barrel", 360, 1, 361, 172, -86, 86) ;
00386 ICEB->GetYaxis()->SetTitle("eta index") ;
00387 ICEB->GetXaxis()->SetTitle("phi index") ;
00388 TH2F * tpgFactorEB = new TH2F("tpgFactorEB", "tpgFactor: Barrel", 360, 1, 361, 172, -86, 86) ;
00389 tpgFactorEB->GetYaxis()->SetTitle("eta index") ;
00390 tpgFactorEB->GetXaxis()->SetTitle("phi index") ;
00391
00392 TH2F * ICEEPlus = new TH2F("ICEEPlus", "IC: Plus Endcap", 120, -9, 111, 120, -9, 111) ;
00393 ICEEPlus->GetYaxis()->SetTitle("y index") ;
00394 ICEEPlus->GetXaxis()->SetTitle("x index") ;
00395 TH2F * tpgFactorEEPlus = new TH2F("tpgFactorEEPlus", "tpgFactor: Plus Endcap", 120, -9, 111, 120, -9, 111) ;
00396 tpgFactorEEPlus->GetYaxis()->SetTitle("y index") ;
00397 tpgFactorEEPlus->GetXaxis()->SetTitle("x index") ;
00398 TH2F * ICEEMinus = new TH2F("ICEEMinus", "IC: Minus Endcap", 120, -9, 111, 120, -9, 111) ;
00399 ICEEMinus->GetYaxis()->SetTitle("y index") ;
00400 ICEEMinus->GetXaxis()->SetTitle("x index") ;
00401 TH2F * tpgFactorEEMinus = new TH2F("tpgFactorEEMinus", "tpgFactor: Minus Endcap", 120, -9, 111, 120, -9, 111) ;
00402 tpgFactorEEMinus->GetYaxis()->SetTitle("y index") ;
00403 tpgFactorEEMinus->GetXaxis()->SetTitle("x index") ;
00404
00405 TH2F * IC = new TH2F("IC", "IC", 720, -acos(-1.), acos(-1.), 600, -3., 3.) ;
00406 IC->GetYaxis()->SetTitle("eta") ;
00407 IC->GetXaxis()->SetTitle("phi") ;
00408 TH2F * tpgFactor = new TH2F("tpgFactor", "tpgFactor", 720, -acos(-1.), acos(-1.), 600, -3., 3.) ;
00409 tpgFactor->GetYaxis()->SetTitle("eta") ;
00410 tpgFactor->GetXaxis()->SetTitle("phi") ;
00411
00412 TH1F * hshapeEB = new TH1F("shapeEB", "shapeEB", 250, 0., 10.) ;
00413 TH1F * hshapeEE = new TH1F("shapeEE", "shapeEE", 250, 0., 10.) ;
00414
00415 TTree * ntuple = new TTree("tpgmap","TPG geometry map") ;
00416 const std::string branchFloat[26] = {"fed","tcc","tower","stripInTower","xtalInStrip",
00417 "CCU","VFE","xtalInVFE","xtalInCCU","ieta","iphi",
00418 "ix","iy","iz","hashedId","ic","cmsswId","dbId","ietaTT","iphiTT",
00419 "TCCch","TCCslot","SLBch","SLBslot","ietaGCT","iphiGCT"} ;
00420 ntupleInts_ = new Int_t[26] ;
00421 for (int i=0 ; i<26 ; i++) ntuple->Branch(branchFloat[i].c_str(),&ntupleInts_[i],(branchFloat[i]+string("/I")).c_str()) ;
00422 ntuple->Branch("det",ntupleDet_,"det/C") ;
00423 ntuple->Branch("crate",ntupleCrate_,"crate/C") ;
00424
00425
00426 TNtuple *ntupleSpike = new TNtuple("spikeParam","Spike parameters","gainId:theta:G:g:ped:pedLin") ;
00427
00428
00429
00430
00432
00434 list<uint32_t> towerListEB ;
00435 list<uint32_t> stripListEB ;
00436 list<uint32_t> towerListEE ;
00437 list<uint32_t> stripListEE ;
00438 list<uint32_t>::iterator itList ;
00439
00440 map<int, uint32_t> stripMapEB ;
00441 map<uint32_t, uint32_t> stripMapEBsintheta ;
00442
00443
00444
00445
00446 EcalPedestalsMap pedMap ;
00447
00448 if(m_write_ped == 1) {
00449 std::cout <<"Getting the pedestals from offline DB..."<<endl;
00450
00451 ESHandle<EcalPedestals> pedHandle;
00452 evtSetup.get<EcalPedestalsRcd>().get( pedHandle );
00453 pedMap = pedHandle.product()->getMap() ;
00454
00455
00456 EcalPedestalsMapIterator pedIter ;
00457 int nPed = 0 ;
00458 for (pedIter = pedMap.begin() ; pedIter != pedMap.end() && nPed<10 ; ++pedIter, nPed++) {
00459 EcalPedestals::Item aped = (*pedIter);
00460 std::cout<<aped.mean_x12<<", "<<aped.mean_x6<<", "<<aped.mean_x1<<std::endl ;
00461 }
00462 } else if(m_write_ped==0) {
00463 std::cout <<"Getting the pedestals from previous configuration"<<std::endl;
00464
00465 EcalPedestals peds ;
00466
00467 FEConfigMainInfo fe_main_info;
00468 fe_main_info.setConfigTag(tag_);
00469 try {
00470 std::cout << "trying to read previous tag if it exists tag="<< tag_<< ".version"<<version_<< endl;
00471 db_-> fetchConfigSet(&fe_main_info);
00472 if(fe_main_info.getPedId()>0 ) ped_conf_id_=fe_main_info.getPedId();
00473
00474 FEConfigPedInfo fe_ped_info;
00475 fe_ped_info.setId(ped_conf_id_);
00476 db_-> fetchConfigSet(&fe_ped_info);
00477 std::map<EcalLogicID, FEConfigPedDat> dataset_TpgPed;
00478 db_->fetchDataSet(&dataset_TpgPed, &fe_ped_info);
00479
00480 typedef std::map<EcalLogicID, FEConfigPedDat>::const_iterator CIfeped;
00481 EcalLogicID ecid_xt;
00482 FEConfigPedDat rd_ped;
00483 int icells=0;
00484 for (CIfeped p = dataset_TpgPed.begin(); p != dataset_TpgPed.end(); p++)
00485 {
00486 ecid_xt = p->first;
00487 rd_ped = p->second;
00488
00489 std::string ecid_name=ecid_xt.getName();
00490
00491
00492 if (ecid_name=="EB_crystal_number") {
00493
00494
00495 int sm_num=ecid_xt.getID1();
00496 int xt_num=ecid_xt.getID2();
00497
00498 EBDetId ebdetid(sm_num,xt_num,EBDetId::SMCRYSTALMODE);
00499 EcalPedestals::Item item;
00500 item.mean_x1 =rd_ped.getPedMeanG1() ;
00501 item.mean_x6 =rd_ped.getPedMeanG6();
00502 item.mean_x12 =rd_ped.getPedMeanG12();
00503 item.rms_x1 =0.5 ;
00504 item.rms_x6 =1. ;
00505 item.rms_x12 =1.2 ;
00506
00507 if(icells<10) std::cout << " copy the EB data " << " ped = " << item.mean_x12<< std::endl;
00508
00509 peds.insert(std::make_pair(ebdetid.rawId(),item));
00510
00511 ++icells;
00512 }else if (ecid_name=="EE_crystal_number"){
00513
00514
00515 int z=ecid_xt.getID1();
00516 int x=ecid_xt.getID2();
00517 int y=ecid_xt.getID3();
00518 EEDetId eedetid(x,y,z,EEDetId::XYMODE);
00519 EcalPedestals::Item item;
00520 item.mean_x1 =rd_ped.getPedMeanG1() ;
00521 item.mean_x6 =rd_ped.getPedMeanG6();
00522 item.mean_x12 =rd_ped.getPedMeanG12();
00523 item.rms_x1 =0.5 ;
00524 item.rms_x6 =1. ;
00525 item.rms_x12 =1.2 ;
00526
00527 peds.insert(std::make_pair(eedetid.rawId(),item));
00528 ++icells;
00529 }
00530 }
00531
00532 pedMap = peds.getMap() ;
00533
00534 EcalPedestalsMapIterator pedIter ;
00535 int nPed = 0 ;
00536 for (pedIter = pedMap.begin() ; pedIter != pedMap.end() && nPed<10 ; ++pedIter, nPed++) {
00537 EcalPedestals::Item aped = (*pedIter);
00538 std::cout<<aped.mean_x12<<", "<<aped.mean_x6<<", "<<aped.mean_x1<<std::endl ;
00539 }
00540
00541
00542 } catch (exception &e) {
00543 cout << " error reading previous pedestals " << endl;
00544 } catch (...) {
00545 cout << "Unknown error reading previous pedestals " << endl;
00546 }
00547
00548
00549
00550
00551 } else if(m_write_ped >1) {
00552 std::cout <<"Getting the pedestals from configuration number"<< m_write_ped <<std::endl;
00553
00554
00555
00556 EcalPedestals peds ;
00557
00558 try {
00559
00560 FEConfigPedInfo fe_ped_info;
00561 fe_ped_info.setId(m_write_ped);
00562 db_-> fetchConfigSet(&fe_ped_info);
00563 std::map<EcalLogicID, FEConfigPedDat> dataset_TpgPed;
00564 db_->fetchDataSet(&dataset_TpgPed, &fe_ped_info);
00565
00566 typedef std::map<EcalLogicID, FEConfigPedDat>::const_iterator CIfeped;
00567 EcalLogicID ecid_xt;
00568 FEConfigPedDat rd_ped;
00569 int icells=0;
00570 for (CIfeped p = dataset_TpgPed.begin(); p != dataset_TpgPed.end(); p++)
00571 {
00572 ecid_xt = p->first;
00573 rd_ped = p->second;
00574
00575 std::string ecid_name=ecid_xt.getName();
00576
00577
00578 if (ecid_name=="EB_crystal_number") {
00579 if(icells<10) std::cout << " copy the EB data " << " icells = " << icells << std::endl;
00580 int sm_num=ecid_xt.getID1();
00581 int xt_num=ecid_xt.getID2();
00582
00583 EBDetId ebdetid(sm_num,xt_num,EBDetId::SMCRYSTALMODE);
00584 EcalPedestals::Item item;
00585 item.mean_x1 =(unsigned int)rd_ped.getPedMeanG1() ;
00586 item.mean_x6 =(unsigned int)rd_ped.getPedMeanG6();
00587 item.mean_x12 =(unsigned int)rd_ped.getPedMeanG12();
00588 item.rms_x1 =0.5 ;
00589 item.rms_x6 =1. ;
00590 item.rms_x12 =1.2 ;
00591
00592 peds.insert(std::make_pair(ebdetid.rawId(),item));
00593 ++icells;
00594 }else if (ecid_name=="EE_crystal_number"){
00595
00596
00597 int z=ecid_xt.getID1();
00598 int x=ecid_xt.getID2();
00599 int y=ecid_xt.getID3();
00600 EEDetId eedetid(x,y,z,EEDetId::XYMODE);
00601 EcalPedestals::Item item;
00602 item.mean_x1 =(unsigned int)rd_ped.getPedMeanG1();
00603 item.mean_x6 =(unsigned int)rd_ped.getPedMeanG6();
00604 item.mean_x12 =(unsigned int)rd_ped.getPedMeanG12();
00605 item.rms_x1 =0.5 ;
00606 item.rms_x6 =1. ;
00607 item.rms_x12 =1.2 ;
00608
00609 peds.insert(std::make_pair(eedetid.rawId(),item));
00610 ++icells;
00611 }
00612 }
00613
00614 pedMap = peds.getMap() ;
00615
00616 EcalPedestalsMapIterator pedIter ;
00617 int nPed = 0 ;
00618 for (pedIter = pedMap.begin() ; pedIter != pedMap.end() && nPed<10 ; ++pedIter, nPed++) {
00619 EcalPedestals::Item aped = (*pedIter);
00620 std::cout<<aped.mean_x12<<", "<<aped.mean_x6<<", "<<aped.mean_x1<<std::endl ;
00621 }
00622
00623
00624 } catch (exception &e) {
00625 cout << " error reading previous pedestals " << endl;
00626 } catch (...) {
00627 cout << "Unknown error reading previous pedestals " << endl;
00628 }
00629
00630
00631 }
00632
00633
00634
00635 std::cout<<"...\n"<<std::endl ;
00636
00637
00638
00639 std::cout <<"Getting intercalib from offline DB..."<<endl;
00640 ESHandle<EcalIntercalibConstants> pIntercalib ;
00641 evtSetup.get<EcalIntercalibConstantsRcd>().get(pIntercalib) ;
00642 const EcalIntercalibConstants * intercalib = pIntercalib.product() ;
00643 const EcalIntercalibConstantMap & calibMap = intercalib->getMap() ;
00644 EcalIntercalibConstantMap::const_iterator calIter ;
00645 int nCal = 0 ;
00646 for (calIter = calibMap.begin() ; calIter != calibMap.end() && nCal<10 ; ++calIter, nCal++) {
00647 std::cout<<(*calIter)<<std::endl ;
00648 }
00649 std::cout<<"...\n"<<std::endl ;
00650 float calibvec[1700] ;
00651 if (H2_) {
00652 std::cout<<"H2: overwriting IC coef with file"<<std::endl ;
00653 std::ifstream calibfile("calib_sm36.txt", std::ios::out) ;
00654 int idata, icry ;
00655 float fdata, fcali ;
00656 std::string strdata ;
00657 if (calibfile.is_open()) {
00658 calibfile >> strdata >> strdata >> strdata >> strdata >> strdata ;
00659 while(!calibfile.eof()) {
00660 calibfile >> idata >> icry >> fcali >> fdata >> fdata ;
00661 calibvec[icry-1] = fcali ;
00662 if(calibfile.eof()){
00663 break ;
00664 }
00665 }
00666 }
00667 }
00668
00669
00670 std::cout <<"Getting the gain ratios from offline DB..."<<endl;
00671 ESHandle<EcalGainRatios> pRatio;
00672 evtSetup.get<EcalGainRatiosRcd>().get(pRatio);
00673 const EcalGainRatioMap & gainMap = pRatio.product()->getMap();
00674 EcalGainRatioMap::const_iterator gainIter ;
00675 int nGain = 0 ;
00676 for (gainIter = gainMap.begin() ; gainIter != gainMap.end() && nGain<10 ; ++gainIter, nGain++) {
00677 const EcalMGPAGainRatio & aGain = (*gainIter) ;
00678 std::cout<<aGain.gain12Over6()<<", "<<aGain.gain6Over1() * aGain.gain12Over6()<<std::endl ;
00679 }
00680 std::cout<<"...\n"<<std::endl ;
00681
00682
00683
00684 std::cout <<"Getting the ADC to GEV from offline DB..."<<endl;
00685 ESHandle<EcalADCToGeVConstant> pADCToGeV ;
00686 evtSetup.get<EcalADCToGeVConstantRcd>().get(pADCToGeV) ;
00687 const EcalADCToGeVConstant * ADCToGeV = pADCToGeV.product() ;
00688 xtal_LSB_EB_ = ADCToGeV->getEBValue() ;
00689 xtal_LSB_EE_ = ADCToGeV->getEEValue() ;
00690 std::cout<<"xtal_LSB_EB_ = "<<xtal_LSB_EB_<<std::endl ;
00691 std::cout<<"xtal_LSB_EE_ = "<<xtal_LSB_EE_<<std::endl ;
00692 std::cout<<std::endl ;
00693
00694
00695 vector<EcalLogicID> my_EcalLogicId;
00696 vector<EcalLogicID> my_TTEcalLogicId;
00697 vector<EcalLogicID> my_StripEcalLogicId;
00698 EcalLogicID my_EcalLogicId_EB;
00699
00700 EcalLogicID my_EcalLogicId_EE;
00701 vector<EcalLogicID> my_TTEcalLogicId_EE;
00702 vector<EcalLogicID> my_RTEcalLogicId_EE;
00703 vector<EcalLogicID> my_StripEcalLogicId1_EE;
00704 vector<EcalLogicID> my_StripEcalLogicId2_EE;
00705 vector<EcalLogicID> my_CrystalEcalLogicId_EE;
00706 vector<EcalLogicID> my_TTEcalLogicId_EB_by_TCC;
00707 vector<EcalLogicID> my_StripEcalLogicId_EE_strips_by_TCC;
00708
00709
00710 std::cout<<"going to get the ecal logic id set"<< endl;
00711 my_EcalLogicId_EB = db_->getEcalLogicID( "EB",EcalLogicID::NULLID,EcalLogicID::NULLID,EcalLogicID::NULLID,"EB");
00712 my_EcalLogicId_EE = db_->getEcalLogicID( "EE",EcalLogicID::NULLID,EcalLogicID::NULLID,EcalLogicID::NULLID,"EE");
00713 my_EcalLogicId = db_->getEcalLogicIDSetOrdered( "EB_crystal_number",
00714 1, 36,
00715 1, 1700,
00716 EcalLogicID::NULLID,EcalLogicID::NULLID,
00717 "EB_crystal_number",12 );
00718 my_TTEcalLogicId = db_->getEcalLogicIDSetOrdered( "EB_trigger_tower",
00719 1, 36,
00720 1, 68,
00721 EcalLogicID::NULLID,EcalLogicID::NULLID,
00722 "EB_trigger_tower",12 );
00723 my_StripEcalLogicId = db_->getEcalLogicIDSetOrdered( "EB_VFE", 1, 36, 1, 68, 1,5 , "EB_VFE",123 );
00724 std::cout<<"got the 3 ecal barrel logic id set"<< endl;
00725
00726
00727 my_CrystalEcalLogicId_EE = db_->getEcalLogicIDSetOrdered("EE_crystal_number",
00728 -1, 1,
00729 0, 200,
00730 0, 200,
00731 "EE_crystal_number",123 );
00732
00733
00734
00735 my_StripEcalLogicId1_EE = db_->getEcalLogicIDSetOrdered( "ECAL_readout_strip",
00736 601, 609,
00737 1, 100,
00738 0,5 ,
00739 "ECAL_readout_strip",123 );
00740
00741
00742 my_StripEcalLogicId2_EE = db_->getEcalLogicIDSetOrdered( "ECAL_readout_strip",
00743 646, 654,
00744 1, 100,
00745 0,5 ,
00746 "ECAL_readout_strip",123 );
00747
00748
00749
00750 my_StripEcalLogicId_EE_strips_by_TCC = db_->getEcalLogicIDSetOrdered( "EE_trigger_strip",
00751 1, 108,
00752 1, 100,
00753 1,5 ,
00754 "EE_trigger_strip",123 );
00755
00756
00757
00758
00759
00760 my_TTEcalLogicId_EB_by_TCC = db_->getEcalLogicIDSetOrdered( "ECAL_trigger_tower",
00761 1, 108,
00762 1, 68,
00763 EcalLogicID::NULLID,EcalLogicID::NULLID,
00764 "ECAL_trigger_tower",12 );
00765
00766
00767
00768 my_TTEcalLogicId_EE = db_->getEcalLogicIDSetOrdered( "EE_trigger_tower",
00769 1, 108,
00770 1, 40,
00771 EcalLogicID::NULLID,EcalLogicID::NULLID,
00772 "EE_trigger_tower",12 );
00773
00774
00775
00776 my_RTEcalLogicId_EE = db_->getEcalLogicIDSetOrdered( "EE_readout_tower",
00777 1, 1000,
00778 1, 100,
00779 EcalLogicID::NULLID,EcalLogicID::NULLID,
00780 "EE_readout_tower",12 );
00781
00782 std::cout<<"got the end cap logic id set"<< endl;
00783
00784 if (writeToDB_) {
00785 std::cout<<"Getting the latest ids for this tag (latest version) "<< endl;
00786
00787 FEConfigMainInfo fe_main_info;
00788 fe_main_info.setConfigTag(tag_);
00789 try {
00790 std::cout << "trying to read previous tag if it exists tag="<< tag_<< ".version"<<version_<< endl;
00791
00792 db_-> fetchConfigSet(&fe_main_info);
00793 if(fe_main_info.getPedId()>0 && ped_conf_id_ ==0 ) ped_conf_id_=fe_main_info.getPedId();
00794 lin_conf_id_=fe_main_info.getLinId();
00795 lut_conf_id_=fe_main_info.getLUTId();
00796 wei_conf_id_=fe_main_info.getWeiId();
00797 fgr_conf_id_=fe_main_info.getFgrId();
00798 sli_conf_id_=fe_main_info.getSliId();
00799 spi_conf_id_=fe_main_info.getSpiId();
00800 del_conf_id_=fe_main_info.getTimId();
00801 if(fe_main_info.getBxtId()>0 && bxt_conf_id_==0 ) bxt_conf_id_=fe_main_info.getBxtId();
00802 if(fe_main_info.getBttId()>0 && btt_conf_id_==0 ) btt_conf_id_=fe_main_info.getBttId();
00803 if(fe_main_info.getBstId()>0 && bst_conf_id_==0 ) bst_conf_id_=fe_main_info.getBstId();
00804
00805
00806
00807 std::cout<<"got it "<< endl;
00808
00809 } catch (exception &e) {
00810 cout << " tag did not exist a new tag will be created " << endl;
00811 } catch (...) {
00812 cout << "Unknown error caught" << endl;
00813 }
00814
00815 }
00816
00818
00820
00821 map<EcalLogicID, FEConfigPedDat> pedset ;
00822 map<EcalLogicID, FEConfigLinDat> linset ;
00823 map<EcalLogicID, FEConfigLinParamDat> linparamset ;
00824 map<EcalLogicID, FEConfigLUTParamDat> lutparamset ;
00825 map<EcalLogicID, FEConfigFgrParamDat> fgrparamset ;
00826
00827 map<int, linStruc> linEtaSlice ;
00828 map< vector<int>, linStruc > linMap ;
00829
00830
00831 int NbOfStripPerTCC[108][68] ;
00832 for (int i=0 ; i<108 ; i++)
00833 for (int j=0 ; j<68 ; j++)
00834 NbOfStripPerTCC[i][j] = 0 ;
00835 const std::vector<DetId> & ebCells = theBarrelGeometry_->getValidDetIds(DetId::Ecal, EcalBarrel);
00836 const std::vector<DetId> & eeCells = theEndcapGeometry_->getValidDetIds(DetId::Ecal, EcalEndcap);
00837 for (vector<DetId>::const_iterator it = ebCells.begin(); it != ebCells.end(); ++it) {
00838 EBDetId id(*it) ;
00839 const EcalTrigTowerDetId towid= id.tower();
00840 const EcalTriggerElectronicsId elId = theMapping_->getTriggerElectronicsId(id) ;
00841 int tccNb = theMapping_->TCCid(towid) ;
00842 int towerInTCC = theMapping_->iTT(towid) ;
00843 int stripInTower = elId.pseudoStripId() ;
00844 if (stripInTower>NbOfStripPerTCC[tccNb-1][towerInTCC-1]) NbOfStripPerTCC[tccNb-1][towerInTCC-1] = stripInTower ;
00845 }
00846 for (vector<DetId>::const_iterator it = eeCells.begin(); it != eeCells.end(); ++it) {
00847 EEDetId id(*it) ;
00848 const EcalTrigTowerDetId towid= (*eTTmap_).towerOf(id) ;
00849 const EcalTriggerElectronicsId elId = theMapping_->getTriggerElectronicsId(id) ;
00850 int tccNb = theMapping_->TCCid(towid) ;
00851 int towerInTCC = theMapping_->iTT(towid) ;
00852 int stripInTower = elId.pseudoStripId() ;
00853 if (stripInTower>NbOfStripPerTCC[tccNb-1][towerInTCC-1]) NbOfStripPerTCC[tccNb-1][towerInTCC-1] = stripInTower ;
00854 }
00855
00856
00857
00858
00859 if (writeToFiles_) (*out_file_)<<"COMMENT ====== barrel crystals ====== "<<std::endl ;
00860
00861
00862 for (vector<DetId>::const_iterator it = ebCells.begin(); it != ebCells.end(); ++it) {
00863 EBDetId id(*it) ;
00864 double theta = theBarrelGeometry_->getGeometry(id)->getPosition().theta() ;
00865 if (!useTransverseEnergy_) theta = acos(0.) ;
00866 const EcalTrigTowerDetId towid= id.tower();
00867 const EcalTriggerElectronicsId elId = theMapping_->getTriggerElectronicsId(id) ;
00868 int dccNb = theMapping_->DCCid(towid) ;
00869 int tccNb = theMapping_->TCCid(towid) ;
00870 int towerInTCC = theMapping_->iTT(towid) ;
00871 int stripInTower = elId.pseudoStripId() ;
00872 int xtalInStrip = elId.channelId() ;
00873 const EcalElectronicsId Id = theMapping_->getElectronicsId(id) ;
00874 int CCUid = Id.towerId() ;
00875 int VFEid = Id.stripId() ;
00876 int xtalInVFE = Id.xtalId() ;
00877 int xtalWithinCCUid = 5*(VFEid-1) + xtalInVFE -1 ;
00878
00879 (*geomFile_)<<"dccNb = "<<dccNb<<" tccNb = "<<tccNb<<" towerInTCC = "<<towerInTCC
00880 <<" stripInTower = "<<stripInTower<<" xtalInStrip = "<<xtalInStrip
00881 <<" CCUid = "<<CCUid<<" VFEid = "<<VFEid<<" xtalInVFE = "<<xtalInVFE
00882 <<" xtalWithinCCUid = "<<xtalWithinCCUid<<" ieta = "<<id.ieta()<<" iphi = "<<id.iphi()
00883 <<" xtalhashedId = "<<id.hashedIndex()<<" xtalNb = "<<id.ic()
00884 <<" ietaTT = "<<towid.ieta()<<" iphiTT = "<<towid.iphi()<<endl ;
00885
00886 int TCCch = towerInTCC ;
00887 int SLBslot = int((towerInTCC-1)/8.) + 1 ;
00888 int SLBch = (towerInTCC-1)%8 + 1 ;
00889 int cmsswId = id.rawId() ;
00890 int ixtal=(id.ism()-1)*1700+(id.ic()-1);
00891 EcalLogicID logicId =my_EcalLogicId[ixtal];
00892 int dbId = logicId.getLogicID() ;
00893 int val[] = {dccNb+600,tccNb,towerInTCC,stripInTower,
00894 xtalInStrip,CCUid,VFEid,xtalInVFE,xtalWithinCCUid,id.ieta(),id.iphi(),
00895 -999,-999,towid.ieta()/abs(towid.ieta()),id.hashedIndex(),
00896 id.ic(), cmsswId, dbId,
00897 towid.ieta(),towid.iphi(), TCCch, getCrate(tccNb).second, SLBch, SLBslot,
00898 getGCTRegionEta(towid.ieta()),getGCTRegionPhi(towid.iphi())} ;
00899 for (int i=0 ; i<26 ; i++) ntupleInts_[i] = val[i] ;
00900
00901 sprintf(ntupleDet_,getDet(tccNb).c_str()) ;
00902 sprintf(ntupleCrate_,getCrate(tccNb).first.c_str()) ;
00903 ntuple->Fill() ;
00904
00905
00906 if (tccNb == 37 && stripInTower == 3 && xtalInStrip == 3 && (towerInTCC-1)%4==0) {
00907 int etaSlice = towid.ietaAbs() ;
00908 coeffStruc coeff ;
00909 getCoeff(coeff, calibMap, id.rawId()) ;
00910 getCoeff(coeff, gainMap, id.rawId()) ;
00911 getCoeff(coeff, pedMap, id.rawId()) ;
00912 linStruc lin ;
00913 for (int i=0 ; i<3 ; i++) {
00914 int mult, shift ;
00915 bool ok = computeLinearizerParam(theta, coeff.gainRatio_[i], coeff.calibCoeff_, "EB", mult , shift) ;
00916 if (!ok) std::cout << "unable to compute the parameters for SM="<< id.ism()<<" xt="<< id.ic()<<" " <<dec<<id.rawId()<<std::endl ;
00917 else {
00918 lin.pedestal_[i] = coeff.pedestals_[i] ;
00919 lin.mult_[i] = mult ;
00920 lin.shift_[i] = shift ;
00921 }
00922 }
00923
00924 bool ok(true) ;
00925 if (forcedPedestalValue_ == -2) ok = realignBaseline(lin, 0) ;
00926 if (!ok) std::cout<<"SM="<< id.ism()<<" xt="<< id.ic()<<" " <<dec<<id.rawId()<<std::endl ;
00927 linEtaSlice[etaSlice] = lin ;
00928 }
00929 }
00930
00931
00932 for (vector<DetId>::const_iterator it = ebCells.begin(); it != ebCells.end(); ++it) {
00933 EBDetId id(*it) ;
00934 double theta = theBarrelGeometry_->getGeometry(id)->getPosition().theta() ;
00935 if (!useTransverseEnergy_) theta = acos(0.) ;
00936 const EcalTrigTowerDetId towid= id.tower();
00937 towerListEB.push_back(towid.rawId()) ;
00938 const EcalTriggerElectronicsId elId = theMapping_->getTriggerElectronicsId(id) ;
00939 stripListEB.push_back(elId.rawId() & 0xfffffff8) ;
00940 int dccNb = theMapping_->DCCid(towid) ;
00941
00942 int towerInTCC = theMapping_->iTT(towid) ;
00943
00944
00945 const EcalElectronicsId Id = theMapping_->getElectronicsId(id) ;
00946 int CCUid = Id.towerId() ;
00947 int VFEid = Id.stripId() ;
00948 int xtalInVFE = Id.xtalId() ;
00949 int xtalWithinCCUid = 5*(VFEid-1) + xtalInVFE -1 ;
00950 int etaSlice = towid.ietaAbs() ;
00951
00952
00953 int hashedStripLogicID = 68*5*(id.ism()-1) + 5*(towerInTCC-1) + (VFEid-1) ;
00954 stripMapEB[hashedStripLogicID] = elId.rawId() & 0xfffffff8 ;
00955 stripMapEBsintheta[elId.rawId() & 0xfffffff8] = SFGVB_Threshold_ + abs(int(sin(theta)*pedestal_offset_)) ;
00956
00957
00958
00959
00960
00961
00962
00963
00964
00965
00966
00967
00968
00969 FEConfigPedDat pedDB ;
00970 FEConfigLinDat linDB ;
00971 if (writeToFiles_) (*out_file_)<<"CRYSTAL "<<dec<<id.rawId()<<std::endl ;
00972
00973
00974 coeffStruc coeff ;
00975 getCoeff(coeff, calibMap, id.rawId()) ;
00976 if (H2_) coeff.calibCoeff_ = calibvec[id.ic()-1] ;
00977 getCoeff(coeff, gainMap, id.rawId()) ;
00978 getCoeff(coeff, pedMap, id.rawId()) ;
00979 ICEB->Fill(id.iphi(), id.ieta(), coeff.calibCoeff_) ;
00980 IC->Fill(theBarrelGeometry_->getGeometry(id)->getPosition().phi(), theBarrelGeometry_->getGeometry(id)->getPosition().eta(), coeff.calibCoeff_) ;
00981
00982 vector<int> xtalCCU ;
00983 xtalCCU.push_back(dccNb+600) ;
00984 xtalCCU.push_back(CCUid) ;
00985 xtalCCU.push_back(xtalWithinCCUid) ;
00986 xtalCCU.push_back(id.rawId()) ;
00987
00988
00989
00990 if (forceEtaSlice_) {
00991 map<int, linStruc>::const_iterator itLin = linEtaSlice.find(etaSlice);
00992 if (itLin != linEtaSlice.end()) {
00993 linMap[xtalCCU] = itLin->second ;
00994 if (writeToFiles_) {
00995 for (int i=0 ; i<3 ; i++)
00996 (*out_file_) << hex <<" 0x"<<itLin->second.pedestal_[i]<<" 0x"<<itLin->second.mult_[i]<<" 0x"<<itLin->second.shift_[i]<<std::endl;
00997 }
00998 if (writeToDB_) {
00999 for (int i=0 ; i<3 ; i++) {
01000 if (i==0) {pedDB.setPedMeanG12(itLin->second.pedestal_[i]) ; linDB.setMultX12(itLin->second.mult_[i]) ; linDB.setShift12(itLin->second.shift_[i]) ; }
01001 if (i==1) {pedDB.setPedMeanG6(itLin->second.pedestal_[i]) ; linDB.setMultX6(itLin->second.mult_[i]) ; linDB.setShift6(itLin->second.shift_[i]) ; }
01002 if (i==2) {pedDB.setPedMeanG1(itLin->second.pedestal_[i]) ; linDB.setMultX1(itLin->second.mult_[i]) ; linDB.setShift1(itLin->second.shift_[i]) ; }
01003 }
01004 }
01005 float factor = float(itLin->second.mult_[0])*pow(2.,-itLin->second.shift_[0])/xtal_LSB_EB_ ;
01006 tpgFactorEB->Fill(id.iphi(), id.ieta(), factor) ;
01007 tpgFactor->Fill(theBarrelGeometry_->getGeometry(id)->getPosition().phi(),
01008 theBarrelGeometry_->getGeometry(id)->getPosition().eta(), factor) ;
01009 }
01010 else std::cout<<"current EtaSlice = "<<etaSlice<<" not found in the EtaSlice map"<<std::endl ;
01011 }
01012 else {
01013
01014 linStruc lin ;
01015 int forceBase12 = 0 ;
01016 for (int i=0 ; i<3 ; i++) {
01017 int mult, shift ;
01018 bool ok = computeLinearizerParam(theta, coeff.gainRatio_[i], coeff.calibCoeff_, "EB", mult , shift) ;
01019 if (!ok) std::cout << "unable to compute the parameters for SM="<< id.ism()<<" xt="<< id.ic()<<" " <<dec<<id.rawId()<<std::endl ;
01020 else {
01021
01022
01023
01024
01025
01026
01027
01028
01029 double base = coeff.pedestals_[i] ;
01030 if (forcedPedestalValue_ == -3 && i==0) {
01031 double G = mult*pow(2.0,-(shift+2)) ;
01032 double g = G/sin(theta) ;
01033
01034 base = double(coeff.pedestals_[i]) - pedestal_offset_/g ;
01035 if (base<0.) base = 0 ;
01036 forceBase12 = int(base) ;
01037 }
01038 lin.pedestal_[i] = coeff.pedestals_[i] ;
01039 lin.mult_[i] = mult ;
01040 lin.shift_[i] = shift ;
01041
01042
01043
01044
01045
01046
01047
01048
01049 }
01050 }
01051
01052 bool ok(true) ;
01053 if (forcedPedestalValue_ == -2) ok = realignBaseline(lin, 0) ;
01054 if (forcedPedestalValue_ == -3) ok = realignBaseline(lin, forceBase12) ;
01055 if (!ok) std::cout<<"SM="<< id.ism()<<" xt="<< id.ic()<<" " <<dec<<id.rawId()<<std::endl ;
01056
01057 for (int i=0 ; i<3 ; i++) {
01058 if (writeToFiles_) (*out_file_) << hex <<" 0x"<<lin.pedestal_[i]<<" 0x"<<lin.mult_[i]<<" 0x"<<lin.shift_[i]<<std::endl;
01059 if (writeToDB_) {
01060 if (i==0) {pedDB.setPedMeanG12(lin.pedestal_[i]) ; linDB.setMultX12(lin.mult_[i]) ; linDB.setShift12(lin.shift_[i]) ; }
01061 if (i==1) {pedDB.setPedMeanG6(lin.pedestal_[i]) ; linDB.setMultX6(lin.mult_[i]) ; linDB.setShift6(lin.shift_[i]) ; }
01062 if (i==2) {pedDB.setPedMeanG1(lin.pedestal_[i]) ; linDB.setMultX1(lin.mult_[i]) ; linDB.setShift1(lin.shift_[i]) ; }
01063 }
01064 if (i==0) {
01065 float factor = float(lin.mult_[i])*pow(2.,-lin.shift_[i])/xtal_LSB_EB_ ;
01066 tpgFactorEB->Fill(id.iphi(), id.ieta(), factor) ;
01067 tpgFactor->Fill(theBarrelGeometry_->getGeometry(id)->getPosition().phi(),
01068 theBarrelGeometry_->getGeometry(id)->getPosition().eta(), factor) ;
01069 }
01070 double G = lin.mult_[i]*pow(2.0,-(lin.shift_[i]+2)) ;
01071 double g = G/sin(theta) ;
01072 float val[] = { float(i),
01073 float(theta),
01074 float(G),
01075 float(g),
01076 float(coeff.pedestals_[i]),
01077 float(lin.pedestal_[i])};
01078 ntupleSpike->Fill(val) ;
01079 }
01080 linMap[xtalCCU] = lin ;
01081 }
01082 if (writeToDB_) {
01083
01084 int ixtal=(id.ism()-1)*1700+(id.ic()-1);
01085 EcalLogicID logicId =my_EcalLogicId[ixtal];
01086 pedset[logicId] = pedDB ;
01087 linset[logicId] = linDB ;
01088 }
01089 }
01090
01091 if (writeToDB_) {
01092
01093 FEConfigLinParamDat linparam ;
01094 linparam.setETSat(Et_sat_EB_);
01095 linparamset[my_EcalLogicId_EB] = linparam ;
01096
01097 FEConfigFgrParamDat fgrparam ;
01098 fgrparam.setFGlowthresh(FG_lowThreshold_EB_);
01099 fgrparam.setFGhighthresh(FG_highThreshold_EB_);
01100 fgrparam.setFGlowratio(FG_lowRatio_EB_);
01101 fgrparam.setFGhighratio(FG_highRatio_EB_);
01102 fgrparamset[my_EcalLogicId_EB] = fgrparam ;
01103
01104
01105 FEConfigLUTParamDat lutparam ;
01106 lutparam.setETSat(Et_sat_EB_);
01107 lutparam.setTTThreshlow(TTF_lowThreshold_EB_);
01108 lutparam.setTTThreshhigh(TTF_highThreshold_EB_);
01109 lutparamset[my_EcalLogicId_EB] = lutparam ;
01110
01111 }
01112
01113
01114
01115 if (writeToFiles_) (*out_file_)<<"COMMENT ====== endcap crystals ====== "<<std::endl ;
01116
01117
01118 for (vector<DetId>::const_iterator it = eeCells.begin(); it != eeCells.end(); ++it) {
01119 EEDetId id(*it) ;
01120 double theta = theEndcapGeometry_->getGeometry(id)->getPosition().theta() ;
01121 if (!useTransverseEnergy_) theta = acos(0.) ;
01122 const EcalTrigTowerDetId towid= (*eTTmap_).towerOf(id) ;
01123 const EcalTriggerElectronicsId elId = theMapping_->getTriggerElectronicsId(id) ;
01124 const EcalElectronicsId Id = theMapping_->getElectronicsId(id) ;
01125 int dccNb = Id.dccId() ;
01126 int tccNb = theMapping_->TCCid(towid) ;
01127 int towerInTCC = theMapping_->iTT(towid) ;
01128 int stripInTower = elId.pseudoStripId() ;
01129 int xtalInStrip = elId.channelId() ;
01130 int CCUid = Id.towerId() ;
01131 int VFEid = Id.stripId() ;
01132 int xtalInVFE = Id.xtalId() ;
01133 int xtalWithinCCUid = 5*(VFEid-1) + xtalInVFE -1 ;
01134
01135 (*geomFile_)<<"dccNb = "<<dccNb<<" tccNb = "<<tccNb<<" towerInTCC = "<<towerInTCC
01136 <<" stripInTower = "<<stripInTower<<" xtalInStrip = "<<xtalInStrip
01137 <<" CCUid = "<<CCUid<<" VFEid = "<<VFEid<<" xtalInVFE = "<<xtalInVFE
01138 <<" xtalWithinCCUid = "<<xtalWithinCCUid<<" ix = "<<id.ix()<<" iy = "<<id.iy()
01139 <<" xtalhashedId = "<<id.hashedIndex()<<" xtalNb = "<<id.isc()
01140 <<" ietaTT = "<<towid.ieta()<<" iphiTT = "<<towid.iphi()<<endl ;
01141
01142 int TCCch = stripInTower ;
01143 int SLBslot, SLBch ;
01144 if (towerInTCC<5) {
01145 SLBslot = 1 ;
01146 SLBch = 4 + towerInTCC ;
01147 }
01148 else {
01149 SLBslot = int((towerInTCC-5)/8.) + 2 ;
01150 SLBch = (towerInTCC-5)%8 + 1 ;
01151 }
01152 for (int j=0 ; j<towerInTCC-1 ; j++) TCCch += NbOfStripPerTCC[tccNb-1][j] ;
01153
01154 int cmsswId = id.rawId() ;
01155 EcalLogicID logicId ;
01156 int iz = id.positiveZ() ;
01157 if (iz ==0) iz = -1 ;
01158 for (int k=0; k<(int)my_CrystalEcalLogicId_EE.size(); k++) {
01159 int z= my_CrystalEcalLogicId_EE[k].getID1() ;
01160 int x= my_CrystalEcalLogicId_EE[k].getID2() ;
01161 int y= my_CrystalEcalLogicId_EE[k].getID3() ;
01162 if (id.ix()==x && id.iy()==y && iz==z) logicId=my_CrystalEcalLogicId_EE[k];
01163 }
01164 int dbId = logicId.getLogicID() ;
01165
01166 int val[] = {dccNb+600,tccNb,towerInTCC,stripInTower,
01167 xtalInStrip,CCUid,VFEid,xtalInVFE,xtalWithinCCUid,-999,-999,
01168 id.ix(),id.iy(),towid.ieta()/abs(towid.ieta()),id.hashedIndex(),
01169 id.ic(),cmsswId, dbId,
01170 towid.ieta(),towid.iphi(),TCCch, getCrate(tccNb).second, SLBch, SLBslot,
01171 getGCTRegionEta(towid.ieta()),getGCTRegionPhi(towid.iphi())} ;
01172 for (int i=0 ; i<26 ; i++) ntupleInts_[i] = val[i] ;
01173 sprintf(ntupleDet_,getDet(tccNb).c_str()) ;
01174 sprintf(ntupleCrate_,getCrate(tccNb).first.c_str()) ;
01175 ntuple->Fill() ;
01176
01177 if ((tccNb == 76 || tccNb == 94) && stripInTower == 1 && xtalInStrip == 3 && (towerInTCC-1)%4==0) {
01178 int etaSlice = towid.ietaAbs() ;
01179 coeffStruc coeff ;
01180 getCoeff(coeff, calibMap, id.rawId()) ;
01181 getCoeff(coeff, gainMap, id.rawId()) ;
01182 getCoeff(coeff, pedMap, id.rawId()) ;
01183 linStruc lin ;
01184 for (int i=0 ; i<3 ; i++) {
01185 int mult, shift ;
01186 bool ok = computeLinearizerParam(theta, coeff.gainRatio_[i], coeff.calibCoeff_, "EE", mult , shift) ;
01187 if (!ok) std::cout << "unable to compute the parameters for Quadrant="<< id.iquadrant()<<" xt="<< id.ic()<<" " <<dec<<id.rawId()<<std::endl ;
01188 else {
01189 lin.pedestal_[i] = coeff.pedestals_[i] ;
01190 lin.mult_[i] = mult ;
01191 lin.shift_[i] = shift ;
01192 }
01193 }
01194
01195 bool ok(true) ;
01196 if (forcedPedestalValue_ == -2 || forcedPedestalValue_ == -3) ok = realignBaseline(lin, 0) ;
01197 if (!ok) std::cout<<"Quadrant="<< id.iquadrant()<<" xt="<< id.ic()<<" " <<dec<<id.rawId()<<std::endl ;
01198
01199 linEtaSlice[etaSlice] = lin ;
01200 }
01201 }
01202
01203
01204 for (vector<DetId>::const_iterator it = eeCells.begin(); it != eeCells.end(); ++it) {
01205 EEDetId id(*it);
01206 double theta = theEndcapGeometry_->getGeometry(id)->getPosition().theta() ;
01207 if (!useTransverseEnergy_) theta = acos(0.) ;
01208 const EcalTrigTowerDetId towid= (*eTTmap_).towerOf(id) ;
01209 const EcalTriggerElectronicsId elId = theMapping_->getTriggerElectronicsId(id) ;
01210 const EcalElectronicsId Id = theMapping_->getElectronicsId(id) ;
01211 towerListEE.push_back(towid.rawId()) ;
01212
01213 if (towid.ietaAbs() == 27 || towid.ietaAbs() == 28) {
01214 EcalTrigTowerDetId additionalTower(towid.zside(), towid.subDet(), towid.ietaAbs(), towid.iphi()+1) ;
01215 towerListEE.push_back(additionalTower.rawId()) ;
01216 }
01217 stripListEE.push_back(elId.rawId() & 0xfffffff8) ;
01218 int dccNb = Id.dccId() ;
01219
01220
01221
01222
01223 int CCUid = Id.towerId() ;
01224 int VFEid = Id.stripId() ;
01225 int xtalInVFE = Id.xtalId() ;
01226 int xtalWithinCCUid = 5*(VFEid-1) + xtalInVFE -1 ;
01227 int etaSlice = towid.ietaAbs() ;
01228
01229 EcalLogicID logicId ;
01230 FEConfigPedDat pedDB ;
01231 FEConfigLinDat linDB ;
01232 if (writeToFiles_) (*out_file_)<<"CRYSTAL "<<dec<<id.rawId()<<std::endl ;
01233 if (writeToDB_ && DBEE_) {
01234 int iz = id.positiveZ() ;
01235 if (iz ==0) iz = -1 ;
01236 for (int k=0; k<(int)my_CrystalEcalLogicId_EE.size(); k++) {
01237 int z= my_CrystalEcalLogicId_EE[k].getID1() ;
01238 int x= my_CrystalEcalLogicId_EE[k].getID2() ;
01239 int y= my_CrystalEcalLogicId_EE[k].getID3() ;
01240 if (id.ix()==x && id.iy()==y && iz==z) logicId=my_CrystalEcalLogicId_EE[k];
01241 }
01242 }
01243
01244 coeffStruc coeff ;
01245 getCoeff(coeff, calibMap, id.rawId()) ;
01246 getCoeff(coeff, gainMap, id.rawId()) ;
01247 getCoeff(coeff, pedMap, id.rawId()) ;
01248 if (id.zside()>0) ICEEPlus->Fill(id.ix(), id.iy(), coeff.calibCoeff_) ;
01249 else ICEEMinus->Fill(id.ix(), id.iy(), coeff.calibCoeff_) ;
01250 IC->Fill(theEndcapGeometry_->getGeometry(id)->getPosition().phi(), theEndcapGeometry_->getGeometry(id)->getPosition().eta(), coeff.calibCoeff_) ;
01251
01252 vector<int> xtalCCU ;
01253 xtalCCU.push_back(dccNb+600) ;
01254 xtalCCU.push_back(CCUid) ;
01255 xtalCCU.push_back(xtalWithinCCUid) ;
01256 xtalCCU.push_back(id.rawId()) ;
01257
01258
01259
01260 if (forceEtaSlice_) {
01261 map<int, linStruc>::const_iterator itLin = linEtaSlice.find(etaSlice);
01262 if (itLin != linEtaSlice.end()) {
01263 linMap[xtalCCU] = itLin->second ;
01264 if (writeToFiles_) {
01265 for (int i=0 ; i<3 ; i++)
01266 (*out_file_) << hex <<" 0x"<<itLin->second.pedestal_[i]<<" 0x"<<itLin->second.mult_[i]<<" 0x"<<itLin->second.shift_[i]<<std::endl;
01267 }
01268 if (writeToDB_ && DBEE_) {
01269 for (int i=0 ; i<3 ; i++) {
01270 if (i==0) {pedDB.setPedMeanG12(itLin->second.pedestal_[i]) ; linDB.setMultX12(itLin->second.mult_[i]) ; linDB.setShift12(itLin->second.shift_[i]) ; }
01271 if (i==1) {pedDB.setPedMeanG6(itLin->second.pedestal_[i]) ; linDB.setMultX6(itLin->second.mult_[i]) ; linDB.setShift6(itLin->second.shift_[i]) ; }
01272 if (i==2) {pedDB.setPedMeanG1(itLin->second.pedestal_[i]) ; linDB.setMultX1(itLin->second.mult_[i]) ; linDB.setShift1(itLin->second.shift_[i]) ; }
01273 }
01274 }
01275 float factor = float(itLin->second.mult_[0])*pow(2.,-itLin->second.shift_[0])/xtal_LSB_EE_ ;
01276 if (id.zside()>0) tpgFactorEEPlus->Fill(id.ix(), id.iy(), factor) ;
01277 else tpgFactorEEMinus->Fill(id.ix(), id.iy(), factor) ;
01278 tpgFactor->Fill(theEndcapGeometry_->getGeometry(id)->getPosition().phi(),
01279 theEndcapGeometry_->getGeometry(id)->getPosition().eta(), factor) ;
01280 }
01281 else std::cout<<"current EtaSlice = "<<etaSlice<<" not found in the EtaSlice map"<<std::endl ;
01282 }
01283 else {
01284
01285 linStruc lin ;
01286 for (int i=0 ; i<3 ; i++) {
01287 int mult, shift ;
01288 bool ok = computeLinearizerParam(theta, coeff.gainRatio_[i], coeff.calibCoeff_, "EE", mult , shift) ;
01289 if (!ok) std::cout << "unable to compute the parameters for "<<dec<<id.rawId()<<std::endl ;
01290 else {
01291 lin.pedestal_[i] = coeff.pedestals_[i] ;
01292 lin.mult_[i] = mult ;
01293 lin.shift_[i] = shift ;
01294 }
01295 }
01296
01297 bool ok(true) ;
01298 if (forcedPedestalValue_ == -2 || forcedPedestalValue_ == -3) ok = realignBaseline(lin, 0) ;
01299 if (!ok) std::cout<<"Quadrant="<< id.iquadrant()<<" xt="<< id.ic()<<" " <<dec<<id.rawId()<<std::endl ;
01300
01301 for (int i=0 ; i<3 ; i++) {
01302 if (writeToFiles_) (*out_file_) << hex <<" 0x"<<lin.pedestal_[i]<<" 0x"<<lin.mult_[i]<<" 0x"<<lin.shift_[i]<<std::endl;
01303 if (writeToDB_ && DBEE_) {
01304 if (i==0) {pedDB.setPedMeanG12(lin.pedestal_[i]) ; linDB.setMultX12(lin.mult_[i]) ; linDB.setShift12(lin.shift_[i]) ; }
01305 if (i==1) {pedDB.setPedMeanG6(lin.pedestal_[i]) ; linDB.setMultX6(lin.mult_[i]) ; linDB.setShift6(lin.shift_[i]) ; }
01306 if (i==2) {pedDB.setPedMeanG1(lin.pedestal_[i]) ; linDB.setMultX1(lin.mult_[i]) ; linDB.setShift1(lin.shift_[i]) ; }
01307 }
01308 if (i==0) {
01309 float factor = float(lin.mult_[i])*pow(2.,-lin.shift_[i])/xtal_LSB_EE_ ;
01310 if (id.zside()>0) tpgFactorEEPlus->Fill(id.ix(), id.iy(), factor) ;
01311 else tpgFactorEEMinus->Fill(id.ix(), id.iy(), factor) ;
01312 tpgFactor->Fill(theEndcapGeometry_->getGeometry(id)->getPosition().phi(),
01313 theEndcapGeometry_->getGeometry(id)->getPosition().eta(), factor) ;
01314 }
01315 }
01316 linMap[xtalCCU] = lin ;
01317 }
01318 if (writeToDB_ && DBEE_) {
01319 pedset[logicId] = pedDB ;
01320 linset[logicId] = linDB ;
01321 }
01322 }
01323
01324 if (writeToDB_ ) {
01325
01326 FEConfigLinParamDat linparam ;
01327 linparam.setETSat(Et_sat_EE_);
01328 linparamset[my_EcalLogicId_EE] = linparam ;
01329
01330 FEConfigLUTParamDat lutparam ;
01331 lutparam.setETSat(Et_sat_EE_);
01332 lutparam.setTTThreshlow(TTF_lowThreshold_EE_);
01333 lutparam.setTTThreshhigh(TTF_highThreshold_EE_);
01334 lutparamset[my_EcalLogicId_EE] = lutparam ;
01335
01336
01337 FEConfigFgrParamDat fgrparam ;
01338 fgrparam.setFGlowthresh(FG_Threshold_EE_);
01339 fgrparam.setFGhighthresh(FG_Threshold_EE_);
01340 fgrparamset[my_EcalLogicId_EE] = fgrparam ;
01341
01342 }
01343
01344 if (writeToDB_) {
01345
01346 ostringstream ltag;
01347 ltag.str("EB_"); ltag<<Et_sat_EB_<<"_EE_"<<Et_sat_EE_;
01348 std::string lin_tag=ltag.str();
01349 std::cout<< " LIN tag "<<lin_tag<<endl;
01350
01351 if(m_write_ped==1) {
01352 ped_conf_id_=db_->writeToConfDB_TPGPedestals(pedset, 1, "from_OfflineDB") ;
01353 } else {
01354 std::cout<< "the ped id ="<<ped_conf_id_<<" will be used for the pedestals "<<std::endl;
01355 }
01356
01357 if(m_write_lin==1) lin_conf_id_=db_->writeToConfDB_TPGLinearCoef(linset,linparamset, 1, lin_tag) ;
01358 }
01359
01361
01363 std::ofstream evgueni("TPG_hardcoded.hh", std::ios::out) ;
01364 evgueni<<"void getLinParamTPG_hardcoded(int fed, int ccu, int xtal,"<<endl ;
01365 evgueni<<" int & mult12, int & shift12, int & base12,"<<endl ;
01366 evgueni<<" int & mult6, int & shift6, int & base6,"<<endl ;
01367 evgueni<<" int & mult1, int & shift1, int & base1)"<<endl ;
01368 evgueni<<"{"<<endl;
01369 evgueni<<" mult12 = 0 ; shift12 = 0 ; base12 = 0 ; mult6 = 0 ; shift6 = 0 ; base6 = 0 ; mult1 = 0 ; shift1 = 0 ; base1 = 0 ;"<<endl ;
01370 map< vector<int>, linStruc>::const_iterator itLinMap ;
01371 for (itLinMap = linMap.begin() ; itLinMap != linMap.end() ; itLinMap++) {
01372 vector<int> xtalInCCU = itLinMap->first ;
01373 evgueni<<" if (fed=="<<xtalInCCU[0]<<" && ccu=="<<xtalInCCU[1]<<" && xtal=="<<xtalInCCU[2]<<") {" ;
01374 evgueni<<" mult12 = "<<itLinMap->second.mult_[0]<<" ; shift12 = "<<itLinMap->second.shift_[0]<<" ; base12 = "<<itLinMap->second.pedestal_[0]<<" ; " ;
01375 evgueni<<" mult6 = "<<itLinMap->second.mult_[1]<<" ; shift6 = "<<itLinMap->second.shift_[1]<<" ; base6 = "<<itLinMap->second.pedestal_[1]<<" ; " ;
01376 evgueni<<" mult1 = "<<itLinMap->second.mult_[2]<<" ; shift1 = "<<itLinMap->second.shift_[2]<<" ; base1 = "<<itLinMap->second.pedestal_[2]<<" ; " ;
01377 evgueni<<" return ;}" <<endl ;
01378 }
01379 evgueni<<"}" <<endl ;
01380 evgueni.close() ;
01381
01382
01383
01385
01387
01388 const int NWEIGROUPS = 2 ;
01389 std::vector<unsigned int> weights[NWEIGROUPS] ;
01390
01391 #if (CMSSW_VERSION>=340)
01392 EBShape shapeEB ;
01393 EEShape shapeEE ;
01394 weights[0] = computeWeights(shapeEB, hshapeEB) ;
01395 weights[1] = computeWeights(shapeEE, hshapeEE) ;
01396 #else
01397
01398 EcalSimParameterMap parameterMap;
01399 EBDetId barrel(1,1);
01400 double phase = parameterMap.simParameters(barrel).timePhase();
01401 EcalShape shape(phase);
01402 weights[0] = computeWeights(shape, hshapeEB) ;
01403 weights[1] = weights[0] ;
01404 #endif
01405
01406 map<EcalLogicID, FEConfigWeightGroupDat> dataset;
01407
01408 for (int igrp=0 ; igrp<NWEIGROUPS ; igrp++) {
01409
01410 if (weights[igrp].size() == 5) {
01411
01412 if (writeToFiles_) {
01413 (*out_file_) <<std::endl ;
01414 (*out_file_) <<"WEIGHT "<<igrp<<endl ;
01415 for (unsigned int sample=0 ; sample<5 ; sample++) (*out_file_) << "0x" <<hex<<weights[igrp][sample]<<" " ;
01416 (*out_file_)<<std::endl ;
01417 (*out_file_) <<std::endl ;
01418 }
01419 if (writeToDB_) {
01420 std::cout<<"going to write the weights for groupe:"<<igrp<<endl;
01421 FEConfigWeightGroupDat gut;
01422 gut.setWeightGroupId(igrp);
01423
01424 gut.setWeight0(weights[igrp][4] );
01425 gut.setWeight1(weights[igrp][3]+ 0x80);
01426 gut.setWeight2(weights[igrp][2] );
01427 gut.setWeight3(weights[igrp][1] );
01428 gut.setWeight4(weights[igrp][0] );
01429 EcalLogicID ecid = EcalLogicID( "DUMMY", igrp,igrp);
01430
01431 dataset[ecid] = gut;
01432 }
01433 }
01434 }
01435
01436 if (writeToDB_) {
01437
01438
01439 map<EcalLogicID, FEConfigWeightDat> dataset2;
01440
01441
01442 for (int ich=0; ich<(int)my_StripEcalLogicId.size() ; ich++){
01443 FEConfigWeightDat wut;
01444 int igroup = 0;
01445 wut.setWeightGroupId(igroup);
01446 dataset2[my_StripEcalLogicId[ich]] = wut;
01447 }
01448
01449
01450 for (int ich=0; ich<(int)my_StripEcalLogicId1_EE.size() ; ich++){
01451 FEConfigWeightDat wut;
01452 int igroup = 1;
01453 wut.setWeightGroupId(igroup);
01454
01455 dataset2[my_StripEcalLogicId1_EE[ich]] = wut;
01456 }
01457
01458 for (int ich=0; ich<(int)my_StripEcalLogicId2_EE.size() ; ich++){
01459 FEConfigWeightDat wut;
01460 int igroup = 1;
01461 wut.setWeightGroupId(igroup);
01462
01463 dataset2[my_StripEcalLogicId2_EE[ich]] = wut;
01464 }
01465
01466
01467 ostringstream wtag;
01468 wtag.str(""); wtag<<"Shape_NGroups_"<<NWEIGROUPS;
01469 std::string weight_tag=wtag.str();
01470 std::cout<< " weight tag "<<weight_tag<<endl;
01471 if (m_write_wei==1) wei_conf_id_=db_->writeToConfDB_TPGWeight(dataset, dataset2, NWEIGROUPS, weight_tag) ;
01472 }
01473
01474
01476
01478
01479
01480 unsigned int lowRatio, highRatio, lowThreshold, highThreshold, lutFG ;
01481 computeFineGrainEBParameters(lowRatio, highRatio, lowThreshold, highThreshold, lutFG) ;
01482 if (writeToFiles_) {
01483 (*out_file_) <<std::endl ;
01484 (*out_file_) <<"FG 0"<<std::endl ;
01485 (*out_file_)<<hex<<"0x"<<lowThreshold<<" 0x"<<highThreshold
01486 <<" 0x"<<lowRatio<<" 0x"<<highRatio<<" 0x"<<lutFG
01487 <<std::endl ;
01488 }
01489
01490
01491 unsigned int threshold, lut_tower ;
01492 unsigned int lut_strip;
01493 computeFineGrainEEParameters(threshold, lut_strip, lut_tower) ;
01494
01495
01496
01497
01498 if (writeToDB_) {
01499 std::cout<<"going to write the fgr "<< endl;
01500 map<EcalLogicID, FEConfigFgrGroupDat> dataset;
01501
01502 int NFGRGROUPS =1;
01503 for (int ich=0; ich<NFGRGROUPS; ich++){
01504 FEConfigFgrGroupDat gut;
01505 gut.setFgrGroupId(ich);
01506 gut.setThreshLow(lowRatio );
01507 gut.setThreshHigh(highRatio);
01508 gut.setRatioLow(lowThreshold);
01509 gut.setRatioHigh(highThreshold);
01510 gut.setLUTValue(lutFG);
01511 EcalLogicID ecid = EcalLogicID( "DUMMY", ich,ich);
01512
01513 dataset[ecid] = gut;
01514 }
01515
01516
01517 map<EcalLogicID, FEConfigFgrDat> dataset2;
01518
01519 for (int ich=0; ich<(int)my_TTEcalLogicId.size() ; ich++){
01520 FEConfigFgrDat wut;
01521 int igroup=0;
01522 wut.setFgrGroupId(igroup);
01523
01524
01525
01526 dataset2[my_TTEcalLogicId[ich]] = wut;
01527 }
01528
01529
01530 for (int ich=0; ich<(int)my_RTEcalLogicId_EE.size() ; ich++){
01531
01532 FEConfigFgrDat wut;
01533 int igroup=0;
01534 wut.setFgrGroupId(igroup);
01535
01536
01537
01538 dataset2[my_RTEcalLogicId_EE[ich]] = wut;
01539 }
01540
01541
01542 map<EcalLogicID, FEConfigFgrEETowerDat> dataset3;
01543 for (int ich=0; ich<(int)my_TTEcalLogicId_EE.size() ; ich++){
01544 FEConfigFgrEETowerDat fgreett;
01545 fgreett.setLutValue(lut_tower);
01546 dataset3[my_TTEcalLogicId_EE[ich]]=fgreett;
01547 }
01548
01549
01550
01551 map<EcalLogicID, FEConfigFgrEEStripDat> dataset4;
01552 for (int ich=0; ich<(int)my_StripEcalLogicId1_EE.size() ; ich++){
01553 FEConfigFgrEEStripDat zut;
01554 zut.setThreshold(threshold);
01555 zut.setLutFgr(lut_strip);
01556 dataset4[my_StripEcalLogicId1_EE[ich]] = zut;
01557 }
01558 for (int ich=0; ich<(int)my_StripEcalLogicId2_EE.size() ; ich++){
01559 FEConfigFgrEEStripDat zut;
01560 zut.setThreshold(threshold);
01561 zut.setLutFgr(lut_strip);
01562
01563 dataset4[my_StripEcalLogicId2_EE[ich]] = zut;
01564 }
01565 for (int ich=0; ich<(int)my_StripEcalLogicId.size() ; ich++){
01566
01567 FEConfigFgrEEStripDat zut;
01568 EcalLogicID thestrip = my_StripEcalLogicId[ich] ;
01569 uint32_t elStripId = stripMapEB[ich] ;
01570 map<uint32_t, uint32_t>::const_iterator it = stripMapEBsintheta.find(elStripId) ;
01571 if (it != stripMapEBsintheta.end()) zut.setThreshold(it->second);
01572 else {
01573 cout<<"ERROR: strip SFGVB threshold parameter not found for that strip:"<<thestrip.getID1()<<" "<<thestrip.getID3()<<" "<<thestrip.getID3()<<endl ;
01574 cout<<" using value = "<<SFGVB_Threshold_+pedestal_offset_<<endl ;
01575 zut.setThreshold(SFGVB_Threshold_+pedestal_offset_) ;
01576 }
01577 zut.setLutFgr(SFGVB_lut_);
01578
01579 dataset4[thestrip] = zut;
01580 }
01581
01582
01583 ostringstream wtag;
01584 wtag.str(""); wtag<<"FGR_"<<lutFG<<"_N_"<<NFGRGROUPS<<"_eb_"<<FG_lowThreshold_EB_<<"_EB_"<<FG_highThreshold_EB_;
01585 std::string weight_tag=wtag.str();
01586 std::cout<< " weight tag "<<weight_tag<<endl;
01587 if(m_write_fgr==1) fgr_conf_id_=db_->writeToConfDB_TPGFgr(dataset, dataset2, fgrparamset,dataset3, dataset4, NFGRGROUPS, weight_tag) ;
01588
01589
01590 map<EcalLogicID, FEConfigSpikeDat> datasetspike;
01591 for (int ich=0; ich<(int)my_TTEcalLogicId.size() ; ich++){
01592 FEConfigSpikeDat spiketh;
01593 spiketh.setSpikeThreshold(SFGVB_SpikeKillingThreshold_);
01594 datasetspike[my_TTEcalLogicId[ich]] = spiketh;
01595 }
01596
01597
01598 ostringstream stag;
01599 stag.str(""); stag<<"SpikeTh"<<SFGVB_SpikeKillingThreshold_;
01600 std::string spike_tag=stag.str();
01601 std::cout<< " spike tag "<<spike_tag<<endl;
01602 if(m_write_spi==1) spi_conf_id_=db_->writeToConfDB_Spike(datasetspike, spike_tag) ;
01603
01604
01605
01606 map<EcalLogicID, FEConfigTimingDat> datasetdelay;
01607 for (int ich=0; ich<(int)my_TTEcalLogicId_EB_by_TCC.size() ; ich++){
01608 FEConfigTimingDat delay;
01609
01610 EcalLogicID logiciddelay = my_TTEcalLogicId_EB_by_TCC[ich] ;
01611 int id1_tcc=my_TTEcalLogicId_EB_by_TCC[ich].getID1();
01612 int id2_tt =my_TTEcalLogicId_EB_by_TCC[ich].getID2();
01613 std::map<int, vector<int> >::const_iterator ittEB = delays_EB_.find(id1_tcc);
01614 std::vector<int> TimingDelaysEB = ittEB->second;
01615
01616 if (ittEB != delays_EB_.end()){
01617 if(TimingDelaysEB[id2_tt-1] == -1){
01618 std::cout << "ERROR: Barrel timing delay not specified, check file, putting default value 1" << std::endl;
01619 delay.setTimingPar1(1);
01620 }
01621 else delay.setTimingPar1(TimingDelaysEB[id2_tt-1]);
01622 } else {
01623 std::cout << "ERROR:Barrel Could not find delay parameter for that trigger tower " << std::endl;
01624 std::cout << "Using default value = 1" << std::endl;
01625 delay.setTimingPar1(1);
01626 }
01627
01628 std::map<int, vector<int> >::const_iterator ittpEB = phases_EB_.find(id1_tcc);
01629 std::vector<int> TimingPhasesEB = ittpEB->second;
01630
01631 if (ittpEB != phases_EB_.end()){
01632 if(TimingPhasesEB[id2_tt-1] == -1){
01633 std::cout << "ERROR: Barrel timing phase not specified, check file, putting default value 0" << std::endl;
01634 delay.setTimingPar2(0);
01635 }
01636 else delay.setTimingPar2(TimingPhasesEB[id2_tt-1]);
01637 } else {
01638 std::cout << "ERROR:Barrel Could not find phase parameter for that trigger tower " << std::endl;
01639 std::cout << "Using default value = 0" << std::endl;
01640 delay.setTimingPar2(0);
01641 }
01642
01643 std::cout << ich << " tcc=" << id1_tcc << " TT=" << id2_tt << " logicId=" << logiciddelay.getLogicID()
01644 << " delay=" << TimingDelaysEB[id2_tt-1] << " phase=" << TimingPhasesEB[id2_tt-1] << std::endl;
01645
01646
01647
01648 datasetdelay[my_TTEcalLogicId_EB_by_TCC[ich]] = delay;
01649 }
01650
01651
01652 int stripindex = 0;
01653 int tccin = 1;
01654 for (int ich=0; ich<(int)my_StripEcalLogicId_EE_strips_by_TCC.size() ; ich++){
01655 FEConfigTimingDat delay;
01656
01657
01658
01659
01660 EcalLogicID logiciddelay = my_StripEcalLogicId_EE_strips_by_TCC[ich] ;
01661 int id1_tcc=my_StripEcalLogicId_EE_strips_by_TCC[ich].getID1();
01662 int id2_tt =my_StripEcalLogicId_EE_strips_by_TCC[ich].getID2();
01663 int id3_st =my_StripEcalLogicId_EE_strips_by_TCC[ich].getID3();
01664
01665
01666 if(id1_tcc != tccin) {tccin = id1_tcc; stripindex=0;}
01667
01668 std::map<int, vector<int> >::const_iterator ittEE = delays_EE_.find(id1_tcc);
01669 std::vector<int> TimingDelaysEE = ittEE->second;
01670
01671 if (ittEE != delays_EE_.end()){
01672 if(TimingDelaysEE[stripindex] == -1){
01673 std::cout << "ERROR: Endcap timing delay not specified, check file, putting default value 1" << std::endl;
01674 delay.setTimingPar1(1);
01675 }
01676 else delay.setTimingPar1(TimingDelaysEE[stripindex]);
01677 } else {
01678 std::cout << "ERROR:Endcap Could not find delay parameter for that trigger tower " << std::endl;
01679 std::cout << "Using default value = 1" << std::endl;
01680 delay.setTimingPar1(1);
01681 }
01682
01683 std::map<int, vector<int> >::const_iterator ittpEE = phases_EE_.find(id1_tcc);
01684 std::vector<int> TimingPhasesEE = ittpEE->second;
01685
01686 if (ittpEE != phases_EE_.end()){
01687 if(TimingPhasesEE[stripindex] == -1){
01688 std::cout << "ERROR: Endcap timing phase not specified, check file, putting default value 0" << std::endl;
01689 delay.setTimingPar2(0);
01690 }
01691 else delay.setTimingPar2(TimingPhasesEE[stripindex]);
01692 } else {
01693 std::cout << "ERROR:Endcap Could not find phase parameter for that trigger tower " << std::endl;
01694 std::cout << "Using default value = 0" << std::endl;
01695 delay.setTimingPar2(0);
01696 }
01697
01698 std::cout << ich << " stripindex=" << stripindex << " tcc=" << id1_tcc << " TT=" << id2_tt << " id3_st=" << id3_st
01699 << " logicId=" << logiciddelay.getLogicID()
01700 << " delay=" << TimingDelaysEE[stripindex] << " phase=" << TimingPhasesEE[stripindex] << std::endl;
01701
01702
01703
01704
01705 datasetdelay[my_StripEcalLogicId_EE_strips_by_TCC[ich]] = delay;
01706 stripindex++;
01707 }
01708
01709 ostringstream de_tag;
01710 de_tag.str(""); de_tag<<"DelaysFromFile";
01711 std::string delay_tag=de_tag.str();
01712 std::cout<< " delay tag "<<delay_tag<<endl;
01713 if(m_write_del==1) del_conf_id_=db_->writeToConfDB_Delay(datasetdelay, delay_tag) ;
01714
01715
01716 }
01717
01718 if (writeToDB_) {
01719 std::cout<<"going to write the sliding "<< endl;
01720 map<EcalLogicID, FEConfigSlidingDat> dataset;
01721
01722 for (int ich=0; ich<(int)my_StripEcalLogicId.size() ; ich++){
01723 FEConfigSlidingDat wut;
01724 wut.setSliding(sliding_);
01725
01726
01727
01728 dataset[my_StripEcalLogicId[ich]] = wut;
01729 }
01730
01731
01732 for (int ich=0; ich<(int)my_StripEcalLogicId1_EE.size() ; ich++){
01733 FEConfigSlidingDat wut;
01734 wut.setSliding(sliding_);
01735
01736
01737
01738 dataset[my_StripEcalLogicId1_EE[ich]] = wut;
01739 }
01740 for (int ich=0; ich<(int)my_StripEcalLogicId2_EE.size() ; ich++){
01741 FEConfigSlidingDat wut;
01742 wut.setSliding(sliding_);
01743
01744
01745
01746 dataset[my_StripEcalLogicId2_EE[ich]] = wut;
01747 }
01748
01749
01750
01751 ostringstream wtag;
01752 wtag.str(""); wtag<<"Sliding_"<<sliding_;
01753 std::string justatag=wtag.str();
01754 std::cout<< " sliding tag "<<justatag<<endl;
01755 int iov_id=0;
01756 if(m_write_sli==1) sli_conf_id_=db_->writeToConfDB_TPGSliding(dataset,iov_id, justatag) ;
01757 }
01758
01759
01760
01761
01762
01764
01766
01767 int lut_EB[1024], lut_EE[1024] ;
01768
01769
01770 computeLUT(lut_EB, "EB") ;
01771 if (writeToFiles_) {
01772 (*out_file_) <<std::endl ;
01773 (*out_file_) <<"LUT 0"<<std::endl ;
01774 for (int i=0 ; i<1024 ; i++) (*out_file_)<<"0x"<<hex<<lut_EB[i]<<endl ;
01775 (*out_file_)<<endl ;
01776 }
01777
01778
01779 computeLUT(lut_EE, "EE") ;
01780
01781 bool newLUT(false) ;
01782 for (int i=0 ; i<1024 ; i++) if (lut_EE[i] != lut_EB[i]) newLUT = true ;
01783 if (newLUT && writeToFiles_) {
01784 (*out_file_) <<std::endl ;
01785 (*out_file_) <<"LUT 1"<<std::endl ;
01786 for (int i=0 ; i<1024 ; i++) (*out_file_)<<"0x"<<hex<<lut_EE[i]<<endl ;
01787 (*out_file_)<<endl ;
01788 }
01789
01790
01791
01792 if (writeToDB_) {
01793
01794
01795
01796 map<EcalLogicID, FEConfigLUTGroupDat> dataset;
01797
01798 int NLUTGROUPS =0;
01799 int ich=0;
01800 FEConfigLUTGroupDat lut;
01801 lut.setLUTGroupId(ich);
01802 for (int i=0; i<1024; i++){
01803 lut.setLUTValue(i, lut_EB[i] );
01804 }
01805 EcalLogicID ecid = EcalLogicID( "DUMMY", ich,ich);
01806
01807 dataset[ecid] = lut;
01808
01809 ich++;
01810
01811 FEConfigLUTGroupDat lute;
01812 lute.setLUTGroupId(ich);
01813 for (int i=0; i<1024; i++){
01814 lute.setLUTValue(i, lut_EE[i] );
01815 }
01816 EcalLogicID ecide = EcalLogicID( "DUMMY", ich,ich);
01817
01818 dataset[ecide] = lute;
01819
01820 ich++;
01821
01822 NLUTGROUPS=ich;
01823
01824
01825 map<EcalLogicID, FEConfigLUTDat> dataset2;
01826
01827 for (int ich=0; ich<(int)my_TTEcalLogicId.size() ; ich++){
01828 FEConfigLUTDat lut;
01829 int igroup=0;
01830 lut.setLUTGroupId(igroup);
01831
01832
01833 dataset2[my_TTEcalLogicId[ich]] = lut;
01834 }
01835
01836
01837 for (int ich=0; ich<(int)my_TTEcalLogicId_EE.size() ; ich++){
01838 FEConfigLUTDat lut;
01839 int igroup=1;
01840 lut.setLUTGroupId(igroup);
01841
01842
01843 dataset2[my_TTEcalLogicId_EE[ich]] = lut;
01844 }
01845
01846
01847 ostringstream ltag;
01848 ltag.str(""); ltag<<LUT_option_<<"_NGroups_"<<NLUTGROUPS;
01849 std::string lut_tag=ltag.str();
01850 std::cout<< " LUT tag "<<lut_tag<<endl;
01851 if(m_write_lut==1) lut_conf_id_=db_->writeToConfDB_TPGLUT(dataset, dataset2,lutparamset, NLUTGROUPS, lut_tag) ;
01852
01853 }
01854
01855
01856 if (writeToDB_) {
01857
01858
01859
01860 int conf_id_=db_->writeToConfDB_TPGMain(ped_conf_id_,lin_conf_id_, lut_conf_id_, fgr_conf_id_,
01861 sli_conf_id_, wei_conf_id_, spi_conf_id_, del_conf_id_, bxt_conf_id_, btt_conf_id_, bst_conf_id_, tag_, version_) ;
01862
01863 std::cout << "\n Conf ID = " << conf_id_ << std::endl;
01864
01865 }
01866
01867
01869
01871
01872
01873 stripListEB.sort() ;
01874 stripListEB.unique() ;
01875 cout<<"Number of EB strips="<<dec<<stripListEB.size()<<endl ;
01876 if (writeToFiles_) {
01877 (*out_file_) <<std::endl ;
01878 for (itList = stripListEB.begin(); itList != stripListEB.end(); itList++ ) {
01879 (*out_file_) <<"STRIP_EB "<<dec<<(*itList)<<endl ;
01880 (*out_file_) << hex << "0x" <<sliding_<<std::endl ;
01881 (*out_file_) <<"0" <<std::endl ;
01882 (*out_file_) <<"0x"<<stripMapEBsintheta[(*itList)] << " 0x" << SFGVB_lut_ <<std::endl ;
01883 }
01884 }
01885
01886
01887 stripListEE.sort() ;
01888 stripListEE.unique() ;
01889 cout<<"Number of EE strips="<<dec<<stripListEE.size()<<endl ;
01890 if (writeToFiles_) {
01891 (*out_file_) <<std::endl ;
01892 for (itList = stripListEE.begin(); itList != stripListEE.end(); itList++ ) {
01893 (*out_file_) <<"STRIP_EE "<<dec<<(*itList)<<endl ;
01894 (*out_file_) << hex << "0x" <<sliding_<<std::endl ;
01895 (*out_file_) <<" 0" << std::endl ;
01896 (*out_file_)<<hex<<"0x"<<threshold<<" 0x"<<lut_strip<<std::endl ;
01897 }
01898 }
01899
01900
01902
01904
01905
01906 towerListEB.sort() ;
01907 towerListEB.unique() ;
01908 cout<<"Number of EB towers="<<dec<<towerListEB.size()<<endl ;
01909 if (writeToFiles_) {
01910 (*out_file_) <<std::endl ;
01911 for (itList = towerListEB.begin(); itList != towerListEB.end(); itList++ ) {
01912 (*out_file_) <<"TOWER_EB "<<dec<<(*itList)<<endl ;
01913 (*out_file_) <<" 0\n 0\n" ;
01914 (*out_file_) <<" " << SFGVB_SpikeKillingThreshold_ << std::endl;
01915 }
01916 }
01917
01918
01919 towerListEE.sort() ;
01920 towerListEE.unique() ;
01921 cout<<"Number of EE towers="<<dec<<towerListEE.size()<<endl ;
01922 if (writeToFiles_) {
01923 (*out_file_) <<std::endl ;
01924 for (itList = towerListEE.begin(); itList != towerListEE.end(); itList++ ) {
01925 (*out_file_) <<"TOWER_EE "<<dec<<(*itList)<<endl ;
01926 if (newLUT) (*out_file_) <<" 1\n" ;
01927 else (*out_file_) <<" 0\n" ;
01928 (*out_file_)<<hex<<"0x"<<lut_tower<<std::endl ;
01929 }
01930 }
01931
01932
01933
01934
01936
01938 ICEB->Write() ;
01939 tpgFactorEB->Write() ;
01940 ICEEPlus->Write() ;
01941 tpgFactorEEPlus->Write() ;
01942 ICEEMinus->Write() ;
01943 tpgFactorEEMinus->Write() ;
01944 IC->Write() ;
01945 tpgFactor->Write() ;
01946 hshapeEB->Write() ;
01947 hshapeEE->Write() ;
01948 ntuple->Write() ;
01949 ntupleSpike->Write() ;
01950 saving.Close () ;
01951 }
01952
01953 void EcalTPGParamBuilder::beginJob()
01954 {
01955 using namespace edm;
01956 using namespace std;
01957
01958 std::cout<<"we are in beginJob"<<endl;
01959
01960 create_header() ;
01961
01962 DetId eb(DetId::Ecal,EcalBarrel) ;
01963 DetId ee(DetId::Ecal,EcalEndcap) ;
01964
01965 if (writeToFiles_) {
01966 (*out_file_)<<"PHYSICS_EB "<<dec<<eb.rawId()<<std::endl ;
01967 (*out_file_)<<Et_sat_EB_<<" "<<TTF_lowThreshold_EB_<<" "<<TTF_highThreshold_EB_<<std::endl ;
01968 (*out_file_)<<FG_lowThreshold_EB_<<" "<<FG_highThreshold_EB_<<" "
01969 <<FG_lowRatio_EB_<<" "<<FG_highRatio_EB_<<std::endl ;
01970
01971 (*out_file_) <<std::endl ;
01972
01973 (*out_file_)<<"PHYSICS_EE "<<dec<<ee.rawId()<<std::endl ;
01974 (*out_file_)<<Et_sat_EE_<<" "<<TTF_lowThreshold_EE_<<" "<<TTF_highThreshold_EE_<<std::endl ;
01975 (*out_file_)<<FG_Threshold_EE_<<" "<<-1<<" "
01976 <<-1<<" "<<-1<<std::endl ;
01977 (*out_file_) <<std::endl ;
01978 }
01979
01980 }
01981
01982
01983
01984 bool EcalTPGParamBuilder::computeLinearizerParam(double theta, double gainRatio, double calibCoeff, std::string subdet, int & mult , int & shift)
01985 {
01986
01987
01988
01989
01990
01991
01992
01993
01994
01995
01996
01997
01998
01999
02000
02001
02002
02003
02004
02005 int shiftDet = 2 ;
02006 double ratio = xtal_LSB_EB_/Et_sat_EB_ ;
02007
02008 if (subdet=="EE") {
02009 shiftDet = 2 ;
02010
02011 ratio = xtal_LSB_EE_/Et_sat_EE_ ;
02012 }
02013
02014
02015
02016 double factor = 1024 * ratio * gainRatio * calibCoeff * sin(theta) * (1 << (sliding_ + shiftDet + 2)) ;
02017
02018 mult = (int)(factor+0.5) ;
02019 for (shift = 0 ; shift<15 ; shift++) {
02020 if (mult>=128 && mult<256) return true ;
02021 factor *= 2 ;
02022 mult = (int)(factor+0.5) ;
02023 }
02024 std::cout << "too bad we did not manage to calculate the factor for calib="<<calibCoeff<<endl;
02025 return false ;
02026 }
02027
02028 void EcalTPGParamBuilder::create_header()
02029 {
02030 if (!writeToFiles_) return ;
02031 (*out_file_) <<"COMMENT put your comments here"<<std::endl ;
02032
02033 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02034 (*out_file_) <<"COMMENT physics EB structure"<<std::endl ;
02035 (*out_file_) <<"COMMENT"<<std::endl ;
02036 (*out_file_) <<"COMMENT EtSaturation (GeV), ttf_threshold_Low (GeV), ttf_threshold_High (GeV)"<<std::endl ;
02037 (*out_file_) <<"COMMENT FG_lowThreshold (GeV), FG_highThreshold (GeV), FG_lowRatio, FG_highRatio"<<std::endl ;
02038
02039 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02040 (*out_file_) <<"COMMENT"<<std::endl ;
02041
02042 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02043 (*out_file_) <<"COMMENT physics EE structure"<<std::endl ;
02044 (*out_file_) <<"COMMENT"<<std::endl ;
02045 (*out_file_) <<"COMMENT EtSaturation (GeV), ttf_threshold_Low (GeV), ttf_threshold_High (GeV)"<<std::endl ;
02046 (*out_file_) <<"COMMENT FG_Threshold (GeV), dummy, dummy, dummy"<<std::endl ;
02047 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02048 (*out_file_) <<"COMMENT"<<std::endl ;
02049
02050 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02051 (*out_file_) <<"COMMENT crystal structure (same for EB and EE)"<<std::endl ;
02052 (*out_file_) <<"COMMENT"<<std::endl ;
02053 (*out_file_) <<"COMMENT ped, mult, shift [gain12]"<<std::endl ;
02054 (*out_file_) <<"COMMENT ped, mult, shift [gain6]"<<std::endl ;
02055 (*out_file_) <<"COMMENT ped, mult, shift [gain1]"<<std::endl ;
02056 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02057 (*out_file_) <<"COMMENT"<<std::endl ;
02058
02059 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02060 (*out_file_) <<"COMMENT strip EB structure"<<std::endl ;
02061 (*out_file_) <<"COMMENT"<<std::endl ;
02062 (*out_file_) <<"COMMENT sliding_window"<<std::endl ;
02063 (*out_file_) <<"COMMENT weightGroupId"<<std::endl ;
02064 (*out_file_) <<"COMMENT threshold_sfg lut_sfg"<<std::endl ;
02065 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02066 (*out_file_) <<"COMMENT"<<std::endl ;
02067
02068 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02069 (*out_file_) <<"COMMENT strip EE structure"<<std::endl ;
02070 (*out_file_) <<"COMMENT"<<std::endl ;
02071 (*out_file_) <<"COMMENT sliding_window"<<std::endl ;
02072 (*out_file_) <<"COMMENT weightGroupId"<<std::endl ;
02073 (*out_file_) <<"COMMENT threshold_fg lut_fg"<<std::endl ;
02074 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02075 (*out_file_) <<"COMMENT"<<std::endl ;
02076
02077 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02078 (*out_file_) <<"COMMENT tower EB structure"<<std::endl ;
02079 (*out_file_) <<"COMMENT"<<std::endl ;
02080 (*out_file_) <<"COMMENT LUTGroupId"<<std::endl ;
02081 (*out_file_) <<"COMMENT FgGroupId"<<std::endl ;
02082 (*out_file_) <<"COMMENT spike_killing_threshold"<<std::endl ;
02083 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02084 (*out_file_) <<"COMMENT"<<std::endl ;
02085
02086 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02087 (*out_file_) <<"COMMENT tower EE structure"<<std::endl ;
02088 (*out_file_) <<"COMMENT"<<std::endl ;
02089 (*out_file_) <<"COMMENT LUTGroupId"<<std::endl ;
02090 (*out_file_) <<"COMMENT tower_lut_fg"<<std::endl ;
02091 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02092 (*out_file_) <<"COMMENT"<<std::endl ;
02093
02094 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02095 (*out_file_) <<"COMMENT Weight structure"<<std::endl ;
02096 (*out_file_) <<"COMMENT"<<std::endl ;
02097 (*out_file_) <<"COMMENT weightGroupId"<<std::endl ;
02098 (*out_file_) <<"COMMENT w0, w1, w2, w3, w4"<<std::endl ;
02099 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02100 (*out_file_) <<"COMMENT"<<std::endl ;
02101
02102 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02103 (*out_file_) <<"COMMENT lut structure"<<std::endl ;
02104 (*out_file_) <<"COMMENT"<<std::endl ;
02105 (*out_file_) <<"COMMENT LUTGroupId"<<std::endl ;
02106 (*out_file_) <<"COMMENT LUT[1-1024]"<<std::endl ;
02107 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02108 (*out_file_) <<"COMMENT"<<std::endl ;
02109
02110 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02111 (*out_file_) <<"COMMENT fg EB structure"<<std::endl ;
02112 (*out_file_) <<"COMMENT"<<std::endl ;
02113 (*out_file_) <<"COMMENT FgGroupId"<<std::endl ;
02114 (*out_file_) <<"COMMENT el, eh, tl, th, lut_fg"<<std::endl ;
02115 (*out_file_) <<"COMMENT ================================="<<std::endl ;
02116 (*out_file_) <<"COMMENT"<<std::endl ;
02117
02118 (*out_file_) <<std::endl ;
02119 }
02120
02121
02122 int EcalTPGParamBuilder::uncodeWeight(double weight, int complement2)
02123 {
02124 int iweight ;
02125 unsigned int max = (unsigned int)(pow(2.,complement2)-1) ;
02126 if (weight>0) iweight=int((1<<6)*weight+0.5) ;
02127 else iweight= max - int(-weight*(1<<6)+0.5) +1 ;
02128 iweight = iweight & max ;
02129 return iweight ;
02130 }
02131
02132 double EcalTPGParamBuilder::uncodeWeight(int iweight, int complement2)
02133 {
02134 double weight = double(iweight)/pow(2., 6.) ;
02135
02136 if ( (iweight & (1<<(complement2-1))) != 0) weight = (double(iweight)-pow(2., complement2))/pow(2., 6.) ;
02137 return weight ;
02138 }
02139
02140 #if (CMSSW_VERSION>=340)
02141 std::vector<unsigned int> EcalTPGParamBuilder::computeWeights(EcalShapeBase & shape, TH1F * histo)
02142 #else
02143 std::vector<unsigned int> EcalTPGParamBuilder::computeWeights(EcalShape & shape, TH1F * histo)
02144 #endif
02145 {
02146 std::cout<<"Computing Weights..."<<std::endl ;
02147 #if (CMSSW_VERSION>=340)
02148 double timeMax = shape.timeOfMax() - shape.timeOfThr() ;
02149 #else
02150 double timeMax = shape.computeTimeOfMaximum() - shape.computeT0() ;
02151 #endif
02152 double max = shape(timeMax) ;
02153
02154 double sumf = 0. ;
02155 double sumf2 = 0. ;
02156 for (unsigned int sample = 0 ; sample<nSample_ ; sample++) {
02157 double time = timeMax - ((double)sampleMax_-(double)sample)*25. ;
02158 time -= weight_timeShift_ ;
02159 sumf += shape(time)/max ;
02160 sumf2 += shape(time)/max * shape(time)/max ;
02161 for (int subtime = 0 ; subtime<25 ; subtime++) histo->Fill(float(sample*25. + subtime)/25., shape(time+subtime)) ;
02162 }
02163 double lambda = 1./(sumf2-sumf*sumf/nSample_) ;
02164 double gamma = -lambda*sumf/nSample_ ;
02165 double * weight = new double[nSample_] ;
02166 for (unsigned int sample = 0 ; sample<nSample_ ; sample++) {
02167 double time = timeMax - ((double)sampleMax_-(double)sample)*25. ;
02168 time -= weight_timeShift_ ;
02169 weight[sample] = lambda*shape(time)/max + gamma ;
02170 }
02171
02172
02173 int * iweight = new int[nSample_] ;
02174 for (unsigned int sample = 0 ; sample<nSample_ ; sample++) iweight[sample] = uncodeWeight(weight[sample], complement2_) ;
02175
02176
02177 int isumw = 0 ;
02178 for (unsigned int sample = 0 ; sample<nSample_ ; sample++) isumw += iweight[sample] ;
02179 unsigned int imax = (unsigned int)(pow(2.,int(complement2_))-1) ;
02180 isumw = (isumw & imax ) ;
02181
02182 double ampl = 0. ;
02183 double sumw = 0. ;
02184 for (unsigned int sample = 0 ; sample<nSample_ ; sample++) {
02185 double time = timeMax - ((double)sampleMax_-(double)sample)*25. ;
02186 time -= weight_timeShift_ ;
02187 ampl += weight[sample]*shape(time) ;
02188 sumw += weight[sample] ;
02189 std::cout<<"weight="<<weight[sample]<<" shape="<<shape(time)<<std::endl ;
02190 }
02191 std::cout<<"Weights: sum="<<isumw<<" in float ="<<uncodeWeight(isumw, complement2_)<<" sum of floats ="<<sumw<<std::endl ;
02192 std::cout<<"Weights: sum (weight*shape) = "<<ampl<<std::endl ;
02193
02194
02195
02196
02197 if (weight_unbias_recovery_) {
02198 int count = 0 ;
02199 while (isumw != 0 && count<10) {
02200 double min = 99. ;
02201 unsigned int index = 0 ;
02202 if ( (isumw & (1<<(complement2_-1))) != 0) {
02203
02204 std::cout<<"Correcting for bias: adding 1"<<std::endl ;
02205 for (unsigned int sample = 0 ; sample<nSample_ ; sample++) {
02206 int new_iweight = iweight[sample]+1 ;
02207 double new_weight = uncodeWeight(new_iweight, complement2_) ;
02208 if (fabs(new_weight-weight[sample])<min) {
02209 min = fabs(new_weight-weight[sample]) ;
02210 index = sample ;
02211 }
02212 }
02213 iweight[index] ++ ;
02214 } else {
02215
02216 std::cout<<"Correcting for bias: subtracting 1"<<std::endl ;
02217 for (unsigned int sample = 0 ; sample<nSample_ ; sample++) {
02218 int new_iweight = iweight[sample]-1 ;
02219 double new_weight = uncodeWeight(new_iweight, complement2_) ;
02220 if (fabs(new_weight-weight[sample])<min) {
02221 min = fabs(new_weight-weight[sample]) ;
02222 index = sample ;
02223 }
02224 }
02225 iweight[index] -- ;
02226 }
02227 isumw = 0 ;
02228 for (unsigned int sample = 0 ; sample<nSample_ ; sample++) isumw += iweight[sample] ;
02229 imax = (unsigned int)(pow(2.,int(complement2_))-1) ;
02230 isumw = (isumw & imax ) ;
02231 std::cout<<"Correcting weight number: "<<index<<" sum weights = "<<isumw<<std::endl ;
02232 count ++ ;
02233 }
02234 }
02235
02236
02237 isumw = 0 ;
02238 for (unsigned int sample = 0 ; sample<nSample_ ; sample++) isumw += iweight[sample] ;
02239 imax = (unsigned int)(pow(2.,int(complement2_))-1) ;
02240 isumw = (isumw & imax ) ;
02241 ampl = 0. ;
02242 for (unsigned int sample = 0 ; sample<nSample_ ; sample++) {
02243 double time = timeMax - ((double)sampleMax_-(double)sample)*25. ;
02244 time -= weight_timeShift_ ;
02245 double new_weight = uncodeWeight(iweight[sample], complement2_) ;
02246 sumw += uncodeWeight(iweight[sample], complement2_) ;
02247 ampl += new_weight*shape(time) ;
02248 std::cout<<"weight unbiased after integer conversion="<<new_weight<<" shape="<<shape(time)<<std::endl ;
02249 }
02250 std::cout<<"Weights: sum="<<isumw<<" in float ="<<uncodeWeight(isumw, complement2_)<<" sum of floats ="<<sumw<<std::endl ;
02251 std::cout<<"Weights: sum (weight*shape) = "<<ampl<<std::endl ;
02252
02253
02254
02255 std::vector<unsigned int> theWeights ;
02256 for (unsigned int sample = 0 ; sample<nSample_ ; sample++) theWeights.push_back(iweight[sample]) ;
02257 std::cout<<std::endl ;
02258
02259 delete weight ;
02260 delete iweight ;
02261 return theWeights ;
02262 }
02263
02264 void EcalTPGParamBuilder::computeLUT(int * lut, std::string det)
02265 {
02266 double Et_sat = Et_sat_EB_ ;
02267 double LUT_threshold = LUT_threshold_EB_ ;
02268 double LUT_stochastic = LUT_stochastic_EB_ ;
02269 double LUT_noise = LUT_noise_EB_ ;
02270 double LUT_constant = LUT_constant_EB_ ;
02271 double TTF_lowThreshold = TTF_lowThreshold_EB_ ;
02272 double TTF_highThreshold = TTF_highThreshold_EB_ ;
02273 if (det == "EE") {
02274 Et_sat = Et_sat_EE_ ;
02275 LUT_threshold = LUT_threshold_EE_ ;
02276 LUT_stochastic = LUT_stochastic_EE_ ;
02277 LUT_noise = LUT_noise_EE_ ;
02278 LUT_constant = LUT_constant_EE_ ;
02279 TTF_lowThreshold = TTF_lowThreshold_EE_ ;
02280 TTF_highThreshold = TTF_highThreshold_EE_ ;
02281 }
02282
02283
02284 for (int i=0 ; i<1024 ; i++) {
02285 lut[i] = i ;
02286 if (lut[i]>0xff) lut[i] = 0xff ;
02287 }
02288
02289
02290 if (LUT_option_ == "Linear") {
02291 int mylut = 0 ;
02292 for (int i=0 ; i<1024 ; i++) {
02293 lut[i] = mylut ;
02294 if ((i+1)%4 == 0 ) mylut++ ;
02295
02296 }
02297 }
02298
02299
02300 if (LUT_option_ == "EcalResolution") {
02301 TF1 * func = new TF1("func",oneOverEtResolEt, 0., Et_sat,3) ;
02302 func->SetParameters(LUT_stochastic, LUT_noise, LUT_constant) ;
02303 double norm = func->Integral(0., Et_sat) ;
02304 for (int i=0 ; i<1024 ; i++) {
02305 double Et = i*Et_sat/1024. ;
02306 lut[i] = int(0xff*func->Integral(0., Et)/norm + 0.5) ;
02307 }
02308 }
02309
02310
02311 for (int j=0 ; j<1024 ; j++) {
02312 double Et_GeV = Et_sat/1024*(j+0.5) ;
02313 if (Et_GeV <= LUT_threshold) lut[j] = 0 ;
02314 int ttf = 0x0 ;
02315 if (Et_GeV >= TTF_highThreshold) ttf = 3 ;
02316 if (Et_GeV >= TTF_lowThreshold && Et_GeV < TTF_highThreshold) ttf = 1 ;
02317 ttf = ttf << 8 ;
02318 lut[j] += ttf ;
02319 }
02320
02321 }
02322
02323 void EcalTPGParamBuilder::getCoeff(coeffStruc & coeff, const EcalIntercalibConstantMap & calibMap, unsigned int rawId)
02324 {
02325
02326 coeff.calibCoeff_ = 1. ;
02327 if (!useInterCalibration_) return ;
02328 EcalIntercalibConstantMap::const_iterator icalit = calibMap.find(rawId);
02329 if( icalit != calibMap.end() ) coeff.calibCoeff_ = (*icalit) ;
02330 else std::cout<<"getCoeff: "<<rawId<<" not found in EcalIntercalibConstantMap"<<std::endl ;
02331 }
02332
02333 void EcalTPGParamBuilder::getCoeff(coeffStruc & coeff, const EcalGainRatioMap & gainMap, unsigned int rawId)
02334 {
02335
02336 coeff.gainRatio_[0] = 1. ;
02337 coeff.gainRatio_[1] = 2. ;
02338 coeff.gainRatio_[2] = 12. ;
02339 EcalGainRatioMap::const_iterator gainIter = gainMap.find(rawId);
02340 if (gainIter != gainMap.end()) {
02341 const EcalMGPAGainRatio & aGain = (*gainIter) ;
02342 coeff.gainRatio_[1] = aGain.gain12Over6() ;
02343 coeff.gainRatio_[2] = aGain.gain6Over1() * aGain.gain12Over6() ;
02344 }
02345 else std::cout<<"getCoeff: "<<rawId<<" not found in EcalGainRatioMap"<<std::endl ;
02346 }
02347
02348 void EcalTPGParamBuilder::getCoeff(coeffStruc & coeff, const EcalPedestalsMap & pedMap, unsigned int rawId)
02349 {
02350 coeff.pedestals_[0] = 0 ;
02351 coeff.pedestals_[1] = 0 ;
02352 coeff.pedestals_[2] = 0 ;
02353
02354 if (forcedPedestalValue_ >= 0) {
02355 coeff.pedestals_[0] = forcedPedestalValue_ ;
02356 coeff.pedestals_[1] = forcedPedestalValue_ ;
02357 coeff.pedestals_[2] = forcedPedestalValue_ ;
02358 return ;
02359 }
02360
02361
02362 EcalPedestalsMapIterator pedIter = pedMap.find(rawId);
02363 if (pedIter != pedMap.end()) {
02364 EcalPedestals::Item aped = (*pedIter);
02365 coeff.pedestals_[0] = int(aped.mean_x12 + 0.5) ;
02366 coeff.pedestals_[1] = int(aped.mean_x6 + 0.5) ;
02367 coeff.pedestals_[2] = int(aped.mean_x1 + 0.5) ;
02368 }
02369 else std::cout<<"getCoeff: "<<rawId<<" not found in EcalPedestalsMap"<<std::endl ;
02370 }
02371
02372 void EcalTPGParamBuilder::getCoeff(coeffStruc & coeff, const map<EcalLogicID, MonPedestalsDat> & pedMap, const EcalLogicID & logicId)
02373 {
02374
02375 coeff.pedestals_[0] = 0 ;
02376 coeff.pedestals_[1] = 0 ;
02377 coeff.pedestals_[2] = 0 ;
02378
02379 map<EcalLogicID, MonPedestalsDat>::const_iterator it = pedMap.find(logicId);
02380 if (it != pedMap.end()) {
02381 MonPedestalsDat ped = it->second ;
02382 coeff.pedestals_[0] = int(ped.getPedMeanG12() + 0.5) ;
02383 coeff.pedestals_[1] = int(ped.getPedMeanG6() + 0.5) ;
02384 coeff.pedestals_[2] = int(ped.getPedMeanG1() + 0.5) ;
02385 }
02386 else std::cout<<"getCoeff: "<<logicId.getID1()<<", "<<logicId.getID2()<<", "<<logicId.getID3()
02387 <<" not found in map<EcalLogicID, MonPedestalsDat>"<<std::endl ;
02388 }
02389
02390 void EcalTPGParamBuilder::computeFineGrainEBParameters(unsigned int & lowRatio, unsigned int & highRatio,
02391 unsigned int & lowThreshold, unsigned int & highThreshold, unsigned int & lut)
02392 {
02393 lowRatio = int(0x80*FG_lowRatio_EB_ + 0.5) ;
02394 if (lowRatio>0x7f) lowRatio = 0x7f ;
02395 highRatio = int(0x80*FG_highRatio_EB_ + 0.5) ;
02396 if (highRatio>0x7f) highRatio = 0x7f ;
02397
02398
02399 double lsb_FG = Et_sat_EB_/1024./4 ;
02400 lowThreshold = int(FG_lowThreshold_EB_/lsb_FG+0.5) ;
02401 if (lowThreshold>0xff) lowThreshold = 0xff ;
02402 highThreshold = int(FG_highThreshold_EB_/lsb_FG+0.5) ;
02403 if (highThreshold>0xff) highThreshold = 0xff ;
02404
02405
02406
02407
02408
02409
02410
02411
02412 if (FG_lut_EB_ == 0) lut = 0x0888 ;
02413 else lut = FG_lut_EB_ ;
02414 }
02415
02416 void EcalTPGParamBuilder::computeFineGrainEEParameters(unsigned int & threshold, unsigned int & lut_strip, unsigned int & lut_tower)
02417 {
02418
02419 double lsb_FG = Et_sat_EE_/1024. ;
02420 threshold = int(FG_Threshold_EE_/lsb_FG+0.5) ;
02421 lut_strip = FG_lut_strip_EE_ ;
02422 lut_tower = FG_lut_tower_EE_ ;
02423 }
02424
02425 bool EcalTPGParamBuilder::realignBaseline(linStruc & lin, float forceBase12)
02426 {
02427 bool ok(true) ;
02428 float base[3] = {forceBase12, float(lin.pedestal_[1]), float(lin.pedestal_[2])} ;
02429 for (int i=1 ; i<3 ; i++) {
02430 if (lin.mult_[i]>0) {
02431 base[i] = float(lin.pedestal_[i]) -
02432 float(lin.mult_[0])/float(lin.mult_[i])*pow(2., -(lin.shift_[0]-lin.shift_[i]))*(lin.pedestal_[0]-base[0]) ;
02433 } else base[i] = 0 ;
02434 }
02435
02436 for (int i=0 ; i<3 ; i++) {
02437 lin.pedestal_[i] = base[i] ;
02438
02439 if (base[i]<0 || lin.pedestal_[i]>1000) {
02440 cout<<"WARNING: base= "<<base[i]<<", "<<lin.pedestal_[i]<<" for gainId[0-2]="<<i<<" ==> forcing at 0"<<endl ;
02441 lin.pedestal_[i] = 0 ;
02442 ok = false ;
02443 }
02444 }
02445 return ok ;
02446
02447 }
02448
02449 int EcalTPGParamBuilder::getGCTRegionPhi(int ttphi){
02450 int gctphi=0;
02451 gctphi = (ttphi+1)/4;
02452 if(ttphi<=2) gctphi=0;
02453 if(ttphi>=71) gctphi=0;
02454 return gctphi;
02455 }
02456
02457 int EcalTPGParamBuilder::getGCTRegionEta(int tteta){
02458 int gcteta = 0;
02459 if(tteta>0) gcteta = (tteta-1)/4 + 11;
02460 else if(tteta<0) gcteta = (tteta+1)/4 + 10;
02461 return gcteta;
02462 }
02463
02464 std::string EcalTPGParamBuilder::getDet(int tcc){
02465 std::stringstream sdet ;
02466
02467 if (tcc>36 && tcc<55) sdet<<"EB-"<<tcc-36 ;
02468 else if (tcc>=55 && tcc<73) sdet<<"EB+"<<tcc-54 ;
02469 else if (tcc<=36) sdet<<"EE-" ;
02470 else sdet<<"EE+" ;
02471
02472 if (tcc<=36 || tcc>=73) {
02473 if (tcc>=73) tcc-=72 ;
02474 if (tcc==1 || tcc==18 || tcc==19 || tcc==36) sdet<<7 ;
02475 else if (tcc==2 || tcc==3 || tcc==20 || tcc==21) sdet<<8 ;
02476 else if (tcc==4 || tcc==5 || tcc==22 || tcc==23) sdet<<9 ;
02477 else if (tcc==6 || tcc==7 || tcc==24 || tcc==25) sdet<<1 ;
02478 else if (tcc==8 || tcc==9 || tcc==26 || tcc==27) sdet<<2 ;
02479 else if (tcc==10 || tcc==11 || tcc==28 || tcc==29) sdet<<3 ;
02480 else if (tcc==12 || tcc==13 || tcc==30 || tcc==31) sdet<<4 ;
02481 else if (tcc==14 || tcc==15 || tcc==32 || tcc==33) sdet<<5 ;
02482 else if (tcc==16 || tcc==17 || tcc==34 || tcc==35) sdet<<6 ;
02483 }
02484
02485 return sdet.str() ;
02486 }
02487
02488 std::pair < std::string, int > EcalTPGParamBuilder::getCrate(int tcc){
02489 std::stringstream crate ;
02490 std::string pos ;
02491 int slot = 0 ;
02492
02493 crate<<"S2D" ;
02494 if (tcc>=40 && tcc<=42) {crate<<"02d" ; slot = 5 + (tcc-40)*6 ;}
02495 if (tcc>=43 && tcc<=45) {crate<<"03d" ; slot = 5 + (tcc-43)*6 ;}
02496 if (tcc>=37 && tcc<=39) {crate<<"04d" ; slot = 5 + (tcc-37)*6 ;}
02497 if (tcc>=52 && tcc<=54) {crate<<"06d" ; slot = 5 + (tcc-52)*6 ;}
02498 if (tcc>=46 && tcc<=48) {crate<<"07d" ; slot = 5 + (tcc-46)*6 ;}
02499 if (tcc>=49 && tcc<=51) {crate<<"08d" ; slot = 5 + (tcc-49)*6 ;}
02500 if (tcc>=58 && tcc<=60) {crate<<"02h" ; slot = 5 + (tcc-58)*6 ;}
02501 if (tcc>=61 && tcc<=63) {crate<<"03h" ; slot = 5 + (tcc-61)*6 ;}
02502 if (tcc>=55 && tcc<=57) {crate<<"04h" ; slot = 5 + (tcc-55)*6 ;}
02503 if (tcc>=70 && tcc<=72) {crate<<"06h" ; slot = 5 + (tcc-70)*6 ;}
02504 if (tcc>=64 && tcc<=66) {crate<<"07h" ; slot = 5 + (tcc-64)*6 ;}
02505 if (tcc>=67 && tcc<=69) {crate<<"08h" ; slot = 5 + (tcc-67)*6 ;}
02506
02507 if (tcc>=76 && tcc<=81) {
02508 crate<<"02l" ;
02509 if (tcc%2==0) slot = 2 + (tcc-76)*3 ;
02510 else slot = 4 + (tcc-77)*3 ;
02511 }
02512 if (tcc>=94 && tcc<=99) {
02513 crate<<"02l" ;
02514 if (tcc%2==0) slot = 3 + (tcc-94)*3 ;
02515 else slot = 5 + (tcc-95)*3 ;
02516 }
02517
02518 if (tcc>=22 && tcc<=27) {
02519 crate<<"03l" ;
02520 if (tcc%2==0) slot = 2 + (tcc-22)*3 ;
02521 else slot = 4 + (tcc-23)*3 ;
02522 }
02523 if (tcc>=4 && tcc<=9) {
02524 crate<<"03l" ;
02525 if (tcc%2==0) slot = 3 + (tcc-4)*3 ;
02526 else slot = 5 + (tcc-5)*3 ;
02527 }
02528
02529 if (tcc>=82 && tcc<=87) {
02530 crate<<"07l" ;
02531 if (tcc%2==0) slot = 2 + (tcc-82)*3 ;
02532 else slot = 4 + (tcc-83)*3 ;
02533 }
02534 if (tcc>=100 && tcc<=105) {
02535 crate<<"07l" ;
02536 if (tcc%2==0) slot = 3 + (tcc-100)*3 ;
02537 else slot = 5 + (tcc-101)*3 ;
02538 }
02539
02540 if (tcc>=28 && tcc<=33) {
02541 crate<<"08l" ;
02542 if (tcc%2==0) slot = 2 + (tcc-28)*3 ;
02543 else slot = 4 + (tcc-29)*3 ;
02544 }
02545 if (tcc>=10 && tcc<=15) {
02546 crate<<"08l" ;
02547 if (tcc%2==0) slot = 3 + (tcc-10)*3 ;
02548 else slot = 5 + (tcc-11)*3 ;
02549 }
02550
02551 if (tcc==34) {crate<<"04l" ; slot = 2 ;}
02552 if (tcc==16) {crate<<"04l" ; slot = 3 ;}
02553 if (tcc==35) {crate<<"04l" ; slot = 4 ;}
02554 if (tcc==17) {crate<<"04l" ; slot = 5 ;}
02555 if (tcc==36) {crate<<"04l" ; slot = 8 ;}
02556 if (tcc==18) {crate<<"04l" ; slot = 9 ;}
02557 if (tcc==19) {crate<<"04l" ; slot = 10 ;}
02558 if (tcc==1) {crate<<"04l" ; slot = 11 ;}
02559 if (tcc==20) {crate<<"04l" ; slot = 14 ;}
02560 if (tcc==2) {crate<<"04l" ; slot = 15 ;}
02561 if (tcc==21) {crate<<"04l" ; slot = 16 ;}
02562 if (tcc==3) {crate<<"04l" ; slot = 17 ;}
02563
02564 if (tcc==88) {crate<<"06l" ; slot = 2 ;}
02565 if (tcc==106) {crate<<"06l" ; slot = 3 ;}
02566 if (tcc==89) {crate<<"06l" ; slot = 4 ;}
02567 if (tcc==107) {crate<<"06l" ; slot = 5 ;}
02568 if (tcc==90) {crate<<"06l" ; slot = 8 ;}
02569 if (tcc==108) {crate<<"06l" ; slot = 9 ;}
02570 if (tcc==73) {crate<<"06l" ; slot = 10 ;}
02571 if (tcc==91) {crate<<"06l" ; slot = 11 ;}
02572 if (tcc==74) {crate<<"06l" ; slot = 14 ;}
02573 if (tcc==92) {crate<<"06l" ; slot = 15 ;}
02574 if (tcc==75) {crate<<"06l" ; slot = 16 ;}
02575 if (tcc==93) {crate<<"06l" ; slot = 17 ;}
02576
02577 return std::pair< std::string, int > (crate.str(),slot) ;
02578 }