00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <stdio.h>
00016 #include <iostream>
00017 #include <fstream>
00018 #include <sstream>
00019 #include <vector>
00020
00021
00022
00023 #include "CaloOnlineTools/HcalOnlineDb/interface/LMap.h"
00024 #include "CaloOnlineTools/HcalOnlineDb/interface/RooGKCounter.h"
00025 #include "DataFormats/HcalDetId/interface/HcalGenericDetId.h"
00026 #include "DataFormats/HcalDetId/interface/HcalDetId.h"
00027 #include "CaloOnlineTools/HcalOnlineDb/interface/HcalAssistant.h"
00028
00029 using namespace std;
00030
00031
00032
00033 class LMap::impl {
00034 public:
00035 impl(){ }
00036 ~impl(){ }
00037
00038 int read( std::string accessor, std::string type );
00039 std::map<int,LMapRow> & get_map( void ){ return _lmap; };
00040
00041 private:
00042 std::vector<LMapRow> _table;
00043 std::map<int,LMapRow> _lmap;
00044
00045 };
00046
00047
00048
00049 LMap::LMap() : p_impl( new impl ) { }
00050
00051 LMap::~LMap() { }
00052
00053
00054
00055 int LMap::read( std::string accessor, std::string type )
00056 {
00057 return p_impl -> read( accessor, type );
00058 }
00059
00060 std::map<int,LMapRow> & LMap::get_map( void )
00061 {
00062 return p_impl -> get_map();
00063 }
00064
00065 int LMap::impl::read( std::string map_file, std::string type )
00066 {
00067
00068 RooGKCounter lines;
00069
00070 std::string _row;
00071 ifstream inFile( map_file . c_str(), std::ios::in );
00072 if (!inFile)
00073 {
00074 std::cout << "Unable to open file with the logical map: " << map_file << std::endl;
00075 }
00076 else
00077 {
00078 std::cout << "File with the logical map opened successfully: " << map_file << std::endl;
00079 std::cout << "Type: " << type << std::endl;
00080 }
00081 while ( getline( inFile, _row ) > 0 )
00082 {
00083 LMapRow aRow;
00084 char det[32];
00085 char rbx[32];
00086 char fpga[32];
00087 char slbin[32];
00088 char slbin2[32];
00089 char slnam[32];
00090 char rctnam[32];
00091
00092 const char * let_code = "Z";
00093
00094 int _read = 0;
00095 if ( type == "HBEF" )
00096 {
00097 const char * _format = " %d %d %d %d %d %s %s %d %d %d %d %d %d %d %d %d %s %d %d %d %d %d %s %s %s %d %d %d %s %d";
00098 _read = sscanf( _row . c_str(), _format,
00099 &(aRow.side),
00100 &(aRow.eta), &(aRow.phi), &(aRow.dphi), &(aRow.depth),
00101 det,
00102 rbx,
00103 &(aRow.wedge), &(aRow.rm), &(aRow.pixel), &(aRow.qie), &(aRow.adc), &(aRow.rm_fi), &(aRow.fi_ch),
00104 &(aRow.crate), &(aRow.htr),
00105 fpga,
00106 &(aRow.htr_fi),
00107 &(aRow.dcc_sl), &(aRow.spigo), &(aRow.dcc), &(aRow.slb),
00108 slbin, slbin2, slnam,
00109 &(aRow.rctcra), &(aRow.rctcar), &(aRow.rctcon),
00110 rctnam,
00111 &(aRow.fedid) );
00112 }
00113 else if ( type == "HO" )
00114 {
00115 const char * _format = " %d %d %d %d %d %s %s %d %d %d %d %d %d %d %s %d %d %s %d %d %d %d %d";
00116 _read = sscanf( _row . c_str(), _format,
00117 &(aRow.side),
00118 &(aRow.eta), &(aRow.phi), &(aRow.dphi), &(aRow.depth),
00119 det,
00120 rbx,
00121 &(aRow.wedge), &(aRow.rm), &(aRow.pixel), &(aRow.qie), &(aRow.adc), &(aRow.rm_fi), &(aRow.fi_ch),
00122 &let_code,
00123 &(aRow.crate), &(aRow.htr),
00124 fpga,
00125 &(aRow.htr_fi),
00126 &(aRow.dcc_sl), &(aRow.spigo), &(aRow.dcc), &(aRow.slb) );
00127
00128
00129
00130
00131 }
00132 if ( _read >= 23 )
00133 {
00134 lines . count();
00135
00136 std::string _det(det);
00137 if ( _det.find("HB") != std::string::npos ) aRow . det = HcalBarrel;
00138 else if ( _det.find("HE") != std::string::npos ) aRow . det = HcalEndcap;
00139 else if ( _det.find("HF") != std::string::npos ) aRow . det = HcalForward;
00140 else if ( _det.find("HO") != std::string::npos ) aRow . det = HcalOuter;
00141 else aRow . det = HcalOther;
00142
00143 aRow . rbx .append( rbx );
00144 aRow . fpga .append( fpga );
00145 aRow . slbin .append( slbin );
00146 aRow . slbin2 .append( slbin2 );
00147 aRow . slnam .append( slnam );
00148 aRow . rctnam .append( rctnam );
00149 aRow . let_code .append( let_code );
00150
00151 _table . push_back( aRow );
00152
00153 HcalDetId _hdid(aRow.det, aRow.side*aRow.eta, aRow.phi, aRow.depth);
00154
00155 _lmap[_hdid.rawId()] = aRow;
00156
00157 }
00158 }
00159 inFile.close();
00160 std::cout << "LMap: " << lines . getCount() << " lines read" << std::endl;
00161
00162 return 0;
00163 }
00164
00165
00166
00167
00168
00169
00170
00171 EMap::EMap( const HcalElectronicsMap * emap ){
00172 if (emap){
00173 HcalAssistant _ass;
00174
00175
00176
00177 std::vector <HcalElectronicsId> v_eId = emap->allElectronicsIdPrecision();
00178 for (std::vector <HcalElectronicsId>::const_iterator eId=v_eId.begin();
00179 eId!=v_eId.end();
00180 eId++){
00181 EMapRow row;
00182
00183 row.crate = eId->readoutVMECrateId();
00184 row.slot = eId->htrSlot();
00185 row.dcc = eId->dccid();
00186 row.spigot = eId->spigot();
00187 row.fiber = eId->fiberIndex();
00188 row.fiberchan = eId->fiberChanId();
00189 if (eId->htrTopBottom()==1) row.topbottom = "t";
00190 else row.topbottom = "b";
00191
00192 HcalGenericDetId _gid( emap->lookup(*eId) );
00193 if ( !(_gid.null()) &&
00194 (_gid.genericSubdet()==HcalGenericDetId::HcalGenBarrel ||
00195 _gid.genericSubdet()==HcalGenericDetId::HcalGenEndcap ||
00196 _gid.genericSubdet()==HcalGenericDetId::HcalGenForward ||
00197 _gid.genericSubdet()==HcalGenericDetId::HcalGenOuter
00198 )
00199 ){
00200 HcalDetId _id( emap->lookup(*eId) );
00201 row.rawId = _id.rawId();
00202 row.ieta = _id.ieta();
00203 row.iphi = _id.iphi();
00204 row.idepth = _id.depth();
00205 row.subdet = _ass.getSubdetectorString(_id.subdet());
00206
00207 map.push_back(row);
00208 }
00209
00210 else if ( !(_gid.null()) &&
00211 _gid.genericSubdet()==HcalGenericDetId::HcalGenZDC
00212 ){
00213 HcalZDCDetId _id( emap->lookup(*eId) );
00214 row.zdc_channel = _id.channel();
00215 row.zdc_section = _ass.getZDCSectionString(_id.section());
00216 row.idepth = _id.depth();
00217 row.zdc_zside = _id.zside();
00218
00219 map.push_back(row);
00220 }
00221 }
00222
00223
00224
00225 v_eId = emap->allElectronicsIdTrigger();
00226 for (std::vector <HcalElectronicsId>::const_iterator eId=v_eId.begin();
00227 eId!=v_eId.end();
00228 eId++){
00229 EMapRow row;
00230
00231 row.crate = eId->readoutVMECrateId();
00232 row.slot = eId->htrSlot();
00233 row.dcc = eId->dccid();
00234 row.spigot = eId->spigot();
00235 row.fiber = eId->slbSiteNumber();
00236 row.fiberchan = eId->slbChannelIndex();
00237 if (eId->htrTopBottom()==1) row.topbottom = "t";
00238 else row.topbottom = "b";
00239
00240 HcalTrigTowerDetId _id( emap->lookupTrigger(*eId) );
00241 if ( !(_id.null()) ){
00242 row.rawId = _id.rawId();
00243 row.ieta = _id.ieta();
00244 row.iphi = _id.iphi();
00245 row.idepth = _id.depth();
00246 row.subdet = _ass.getSubdetectorString(_id.subdet());
00247
00248 map.push_back(row);
00249 }
00250 }
00251 }
00252 else{
00253 std::cerr << "Pointer to HcalElectronicsMap is 0!!!" << std::endl;
00254 }
00255 }
00256
00257
00258 int EMap::read_map( std::string filename )
00259 {
00260 RooGKCounter lines;
00261
00262 std::string _row;
00263 ifstream inFile( filename . c_str(), std::ios::in );
00264 if (!inFile){
00265 std::cout << "Unable to open file with the electronic map: " << filename << std::endl;
00266 }
00267 else{
00268 std::cout << "File with the electronic map opened successfully: " << filename << std::endl;
00269 }
00270 while ( getline( inFile, _row ) > 0 ){
00271 EMapRow aRow;
00272 char fpga[32];
00273 char subdet[32];
00274
00275 int _read;
00276 const char * _format = "%d %d %d %s %d %d %d %d %s %d %d %d";
00277 _read = sscanf( _row . c_str(), _format,
00278 &(aRow.rawId),
00279 &(aRow.crate), &(aRow.slot),
00280 fpga,
00281 &(aRow.dcc),
00282 &(aRow.spigot),&(aRow.fiber),&(aRow.fiberchan),
00283 subdet,
00284 &(aRow.ieta), &(aRow.iphi), &(aRow.idepth) );
00285 if ( _read >= 12 ){
00286 lines . count();
00287
00288 aRow . subdet .append( subdet );
00289 aRow . topbottom .append( fpga );
00290
00291 map . push_back( aRow );
00292
00293
00294 }
00295 }
00296 inFile.close();
00297 std::cout << "EMap: " << lines . getCount() << " lines read" << std::endl;
00298
00299 return 0;
00300 }
00301
00302
00303
00304 std::vector<EMap::EMapRow> & EMap::get_map( void )
00305 {
00306 return map;
00307 }
00308
00309
00310 bool EMap::EMapRow::operator<( const EMap::EMapRow & other) const{
00311 return rawId < other.rawId;
00312 }
00313
00314
00315
00316
00317
00318 int EMap_test::test_read_map( std::string filename )
00319 {
00320 EMap map( filename );
00321 return 0;
00322 }
00323
00324
00325 LMap_test::LMap_test() :_lmap(new LMap){ }
00326
00327 int LMap_test::test_read(std::string accessor, std::string type)
00328 {
00329 _lmap -> read(accessor,type);
00330 return 0;
00331 }