00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <iostream>
00015 #include <string>
00016 #include <vector>
00017 #include <sstream>
00018 #include <iconv.h>
00019 #include <sys/time.h>
00020 #include "CaloOnlineTools/HcalOnlineDb/interface/HcalChannelDataXml.h"
00021
00022 using namespace std;
00023
00024
00025
00026
00027 HcalChannelDataXml::HcalChannelDataXml(){
00028 comment = hcal_ass.getRandomQuote();
00029
00030 dataset_count = 0;
00031 global_timestamp = time(NULL);
00032 }
00033
00034
00035 HcalChannelDataXml::~HcalChannelDataXml()
00036 {
00037 delete _root;
00038 delete _dataset;
00039 }
00040
00041
00042 int HcalChannelDataXml::init_data( void )
00043 {
00044 static const char * _str = "\
00045 <ROOT>\n\
00046 <HEADER>\n\
00047 <TYPE>\n\
00048 <EXTENSION_TABLE_NAME>HCAL_CHANNEL_QUALITY_V1</EXTENSION_TABLE_NAME>\n\
00049 <NAME>HCAL Channel Quality [V1]</NAME>\n\
00050 </TYPE>\n\
00051 <RUN>\n\
00052 <RUN_NUMBER>1</RUN_NUMBER>\n\
00053 </RUN>\n\
00054 <HINTS channelmap='HCAL_CHANNELS'/>\n\
00055 </HEADER>\n\
00056 <ELEMENTS>\n\
00057 <DATA_SET id='-1'/>\n\
00058 <IOV id='1'>\n\
00059 <INTERVAL_OF_VALIDITY_BEGIN>1</INTERVAL_OF_VALIDITY_BEGIN>\n\
00060 <INTERVAL_OF_VALIDITY_END>-1</INTERVAL_OF_VALIDITY_END>\n\
00061 </IOV>\n\
00062 <TAG id='2' mode='auto'>\n\
00063 <TAG_NAME>test-channel-status-01jul2009-v4</TAG_NAME>\n\
00064 <DETECTOR_NAME>HCAL</DETECTOR_NAME>\n\
00065 <COMMENT_DESCRIPTION>testing channel status recording</COMMENT_DESCRIPTION>\n\
00066 </TAG>\n\
00067 </ELEMENTS>\n\
00068 <MAPS>\n\
00069 <TAG idref='2'>\n\
00070 <IOV idref='1'>\n\
00071 <DATA_SET idref='-1'/>\n\
00072 </IOV>\n\
00073 </TAG>\n\
00074 </MAPS>\n\
00075 </ROOT>\n\
00076 ";
00077 const XMLByte * _template = (const XMLByte *)_str;
00078 _root = new MemBufInputSource( _template, strlen( (const char *)_template ), "_root", false );
00079 parse(*_root);
00080
00081
00082
00083 set_header_table_name(extension_table_name);
00084 set_header_type(type_name);
00085 set_header_run_number(run_number);
00086 set_header_channel_map(channel_map);
00087 set_elements_dataset_id(data_set_id);
00088 set_elements_iov_id(iov_id);
00089 set_elements_iov_begin(iov_begin);
00090 set_elements_iov_end(iov_end);
00091 set_elements_tag_id(tag_id);
00092 set_elements_tag_mode(tag_mode);
00093 set_elements_tag_name(tag_name);
00094 set_elements_detector_name(detector_name);
00095 set_elements_comment(comment);
00096 set_maps_tag_idref(tag_idref);
00097 set_maps_iov_idref(iov_idref);
00098 set_maps_dataset_idref(data_set_idref);
00099
00100 static const char * _str2 = "\
00101 <DATA_SET>\n\
00102 <COMMENT_DESCRIPTION>test-channel-status-26jun2009-v1</COMMENT_DESCRIPTION>\n\
00103 <CREATE_TIMESTAMP>2009-04-06 17:36:40.0</CREATE_TIMESTAMP>\n\
00104 <CREATED_BY_USER>user</CREATED_BY_USER>\n\
00105 <VERSION>test-channel-status-26jun2009-v1</VERSION>\n\
00106 <SUBVERSION>1</SUBVERSION>\n\
00107 <CHANNEL>\n\
00108 <EXTENSION_TABLE_NAME>HCAL_CHANNELS</EXTENSION_TABLE_NAME>\n\
00109 </CHANNEL>\n\
00110 <DATA>\n\
00111 </DATA>\n\
00112 </DATA_SET>\n\
00113 ";
00114 const XMLByte * _template2 = (const XMLByte *)_str2;
00115 _dataset = new MemBufInputSource( _template2, strlen( (const char *)_template2 ), "_dataset", false );
00116
00117
00118
00119 username = hcal_ass.getUserName();
00120 dataset_comment = hcal_ass.getRandomQuote();
00121
00122 return 0;
00123 }
00124
00125
00126 DOMNode * HcalChannelDataXml::add_hcal_channel( DOMNode * _dataset, int ieta, int iphi, int depth, std::string subdetector ){
00127 DOMElement * _channel = get_channel_element(_dataset);
00128 if (_channel){
00129 add_element(_channel, XMLProcessor::_toXMLCh("IETA"), XMLProcessor::_toXMLCh(ieta));
00130 add_element(_channel, XMLProcessor::_toXMLCh("IPHI"), XMLProcessor::_toXMLCh(iphi));
00131 add_element(_channel, XMLProcessor::_toXMLCh("DEPTH"), XMLProcessor::_toXMLCh(depth));
00132 add_element(_channel, XMLProcessor::_toXMLCh("SUBDET"), XMLProcessor::_toXMLCh(subdetector));
00133 }
00134
00135 return (DOMNode *)_channel;
00136 }
00137
00138
00139 DOMNode * HcalChannelDataXml::add_dataset( void ){
00140 XMLDOMBlock dataset_block( *_dataset );
00141 DOMDocument * dataset_doc = dataset_block . getDocument();
00142 DOMElement * root_elem = (DOMElement *)(document -> getElementsByTagName( XMLProcessor::_toXMLCh( "ROOT" ) ) -> item(0));
00143 DOMNode * dataset_node = document -> importNode( dataset_doc -> getDocumentElement(), true );
00144 root_elem -> appendChild( dataset_node );
00145
00146
00147
00148
00149
00150
00151 char _buf[128];
00152
00153 time_t _offset = global_timestamp;
00154 sprintf( _buf, "%d", (uint32_t)_offset );
00155 std::string _version;
00156 _version.clear();
00157 _version.append(tag_name);
00158 _version.append(".");
00159 _version.append(_buf);
00160
00161 DOMElement * dataset_elem = (DOMElement *)dataset_node;
00162 setTagValue(dataset_elem, "COMMENT_DESCRIPTION", dataset_comment);
00163 setTagValue(dataset_elem, "CREATE_TIMESTAMP", getTimestamp(time(0)));
00164 setTagValue(dataset_elem, "CREATED_BY_USER", username);
00165 setTagValue(dataset_elem, "VERSION", _version);
00166 setTagValue(dataset_elem, "SUBVERSION", dataset_count);
00167
00168
00169
00170 setTagValue(dataset_elem, "EXTENSION_TABLE_NAME", channel_map);
00171
00172 if (dataset_node) ++dataset_count;
00173 return dataset_node;
00174 }
00175
00176
00177 DOMElement * HcalChannelDataXml::get_data_element( DOMNode * _dataset ){
00178 DOMElement * _element = 0;
00179 if (_dataset){
00180 _element = (DOMElement *)(((DOMElement *)_dataset) -> getElementsByTagName(XMLProcessor::_toXMLCh("DATA"))->item( 0 ));
00181 }
00182 return _element;
00183 }
00184
00185
00186 DOMElement * HcalChannelDataXml::get_channel_element( DOMNode * _dataset ){
00187 DOMElement * _element = 0;
00188 if (_dataset){
00189 _element = (DOMElement *)(((DOMElement *)_dataset) -> getElementsByTagName(XMLProcessor::_toXMLCh("CHANNEL"))->item( 0 ));
00190 }
00191 return _element;
00192 }
00193
00194
00195 DOMNode * HcalChannelDataXml::set_header_table_name(std::string name){
00196 extension_table_name = name;
00197 DOMElement * _header = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("HEADER") ) -> item(0));
00198 return setTagValue(_header, "EXTENSION_TABLE_NAME", extension_table_name);
00199 }
00200
00201
00202 DOMNode * HcalChannelDataXml::set_header_type(std::string type){
00203 type_name = type;
00204 DOMElement * _header = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("HEADER") ) -> item(0));
00205 return setTagValue(_header, "NAME", type_name);
00206 }
00207
00208
00209 DOMNode * HcalChannelDataXml::set_header_run_number(int run){
00210 run_number = run;
00211 DOMElement * _header = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("HEADER") ) -> item(0));
00212 return setTagValue(_header, "RUN_NUMBER", run_number);
00213 }
00214
00215
00216 DOMNode * HcalChannelDataXml::set_header_channel_map(std::string name){
00217 channel_map = name;
00218 DOMElement * _header = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("HEADER") ) -> item(0));
00219 return setTagAttribute(_header, "HINTS", "channelmap", channel_map);
00220 }
00221
00222
00223 DOMNode * HcalChannelDataXml::set_elements_dataset_id(int id){
00224 data_set_id = id;
00225 DOMElement * _elements = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("ELEMENTS") ) -> item(0));
00226 return setTagAttribute(_elements, "DATA_SET", "id", data_set_id);
00227 }
00228
00229
00230 DOMNode * HcalChannelDataXml::set_elements_iov_id(int id){
00231 iov_id = id;
00232 DOMElement * _elements = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("ELEMENTS") ) -> item(0));
00233 return setTagAttribute(_elements, "IOV", "id", iov_id);
00234 }
00235
00236
00237 DOMNode * HcalChannelDataXml::set_elements_iov_begin(int value){
00238 iov_begin = value;
00239 DOMElement * _elements = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("ELEMENTS") ) -> item(0));
00240 return setTagValue(_elements, "INTERVAL_OF_VALIDITY_BEGIN", iov_begin);
00241 }
00242
00243
00244 DOMNode * HcalChannelDataXml::set_elements_iov_end(int value){
00245 iov_end = value;
00246 DOMElement * _elements = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("ELEMENTS") ) -> item(0));
00247 return setTagValue(_elements, "INTERVAL_OF_VALIDITY_END", iov_end);
00248 }
00249
00250
00251 DOMNode * HcalChannelDataXml::set_elements_tag_id(int value){
00252 tag_id = value;
00253 DOMElement * _elements = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("ELEMENTS") ) -> item(0));
00254 return setTagAttribute(_elements, "TAG", "id", tag_id);
00255 }
00256
00257
00258 DOMNode * HcalChannelDataXml::set_elements_tag_mode(std::string value){
00259 tag_mode = value;
00260 DOMElement * _elements = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("ELEMENTS") ) -> item(0));
00261 return setTagAttribute(_elements, "TAG", "mode", tag_mode);
00262 }
00263
00264
00265 DOMNode * HcalChannelDataXml::set_elements_tag_name(std::string value){
00266 tag_name = value;
00267 DOMElement * _elements = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("ELEMENTS") ) -> item(0));
00268 return setTagValue(_elements, "TAG_NAME", tag_name);
00269 }
00270
00271
00272 DOMNode * HcalChannelDataXml::set_elements_detector_name(std::string value){
00273 detector_name = value;
00274 DOMElement * _elements = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("ELEMENTS") ) -> item(0));
00275 return setTagValue(_elements, "DETECTOR_NAME", detector_name);
00276 }
00277
00278
00279 DOMNode * HcalChannelDataXml::set_elements_comment(std::string value){
00280 comment = value;
00281 DOMElement * _elements = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("ELEMENTS") ) -> item(0));
00282 return setTagValue(_elements, "COMMENT_DESCRIPTION", comment);
00283 }
00284
00285
00286 DOMNode * HcalChannelDataXml::set_maps_tag_idref(int value){
00287 tag_idref = value;
00288 DOMElement * _maps = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("MAPS") ) -> item(0));
00289 return setTagAttribute(_maps, "TAG", "idref", tag_idref);
00290 }
00291
00292
00293 DOMNode * HcalChannelDataXml::set_maps_iov_idref(int value){
00294 iov_idref = value;
00295 DOMElement * _maps = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("MAPS") ) -> item(0));
00296 return setTagAttribute(_maps, "IOV", "idref", iov_idref);
00297 }
00298
00299
00300 DOMNode * HcalChannelDataXml::set_maps_dataset_idref(int value){
00301 data_set_idref = value;
00302 DOMElement * _maps = (DOMElement *)(document -> getElementsByTagName( XMLString::transcode("MAPS") ) -> item(0));
00303 return setTagAttribute(_maps, "DATA_SET", "idref", data_set_idref);
00304 }
00305
00306
00307
00308
00309
00310
00311
00312