![]() |
![]() |
00001 #include "RecoLuminosity/LumiProducer/interface/RevisionDML.h" 00002 #include "RelationalAccess/ISchema.h" 00003 #include "RelationalAccess/ITable.h" 00004 #include "RelationalAccess/ITableDataEditor.h" 00005 #include "RelationalAccess/IQuery.h" 00006 #include "RelationalAccess/ICursor.h" 00007 #include "RelationalAccess/SchemaException.h" 00008 #include "CoralBase/AttributeList.h" 00009 #include "CoralBase/Attribute.h" 00010 #include "CoralBase/AttributeSpecification.h" 00011 #include "CoralBase/TimeStamp.h" 00012 #include "RecoLuminosity/LumiProducer/interface/LumiNames.h" 00013 #include "RecoLuminosity/LumiProducer/interface/idDealer.h" 00014 #include "RecoLuminosity/LumiProducer/interface/Exception.h" 00015 #include <algorithm> 00016 unsigned long long 00017 lumi::RevisionDML::getEntryInBranchByName(coral::ISchema& schema, 00018 const std::string& datatableName, 00019 const std::string& entryname, 00020 const std::string& branchname){ 00021 unsigned long long entry_id=0; 00022 coral::IQuery* qHandle=schema.newQuery(); 00023 qHandle->addToTableList( lumi::LumiNames::entryTableName(datatableName),"e"); 00024 qHandle->addToTableList( lumi::LumiNames::revisionTableName(),"r"); 00025 qHandle->addToOutputList("e.ENTRY_ID","entry_id"); 00026 00027 coral::AttributeList qCondition; 00028 qCondition.extend("entryname",typeid(std::string)); 00029 qCondition.extend("branchname",typeid(std::string)); 00030 qCondition["entryname"].data<std::string>()=entryname; 00031 qCondition["branchname"].data<std::string>()=branchname; 00032 std::string qConditionStr("r.REVISION_ID=e.REVISION_ID and e.NAME=:entryname AND r.BRANCH_NAME=:branchname"); 00033 00034 coral::AttributeList qResult; 00035 qResult.extend("entry_id",typeid(unsigned long long)); 00036 qHandle->defineOutput(qResult); 00037 qHandle->setCondition(qConditionStr,qCondition); 00038 coral::ICursor& cursor=qHandle->execute(); 00039 while(cursor.next()){ 00040 entry_id=cursor.currentRow()["entry_id"].data<unsigned long long>(); 00041 } 00042 delete qHandle; 00043 return entry_id; 00044 } 00045 void 00046 lumi::RevisionDML::bookNewEntry(coral::ISchema& schema, 00047 const std::string& datatableName, 00048 lumi::RevisionDML::Entry& entry){ 00049 lumi::idDealer idg(schema); 00050 const std::string entrytableName=lumi::LumiNames::entryTableName(datatableName); 00051 entry.revision_id=idg.generateNextIDForTable(lumi::LumiNames::revisionTableName()); 00052 entry.data_id=idg.generateNextIDForTable(datatableName); 00053 entry.entry_id=idg.generateNextIDForTable(entrytableName); 00054 } 00055 void 00056 lumi::RevisionDML::bookNewRevision(coral::ISchema& schema, 00057 const std::string& datatableName, 00058 lumi::RevisionDML::Entry& revision){ 00059 lumi::idDealer idg(schema); 00060 revision.revision_id=idg.generateNextIDForTable(lumi::LumiNames::revisionTableName()); 00061 revision.data_id=idg.generateNextIDForTable(datatableName); 00062 } 00063 void 00064 lumi::RevisionDML::addEntry(coral::ISchema& schema, 00065 const std::string& datatableName, 00066 const lumi::RevisionDML::Entry& entry, 00067 unsigned long long branchid, 00068 const std::string& branchname ){ 00069 coral::AttributeList revdata; 00070 revdata.extend("REVISION_ID",typeid(unsigned long long)); 00071 revdata.extend("BRANCH_ID",typeid(unsigned long long)); 00072 revdata.extend("BRANCH_NAME",typeid(std::string)); 00073 revdata.extend("CTIME",typeid(coral::TimeStamp)); 00074 revdata["REVISION_ID"].data<unsigned long long>()=entry.revision_id; 00075 revdata["BRANCH_ID"].data<unsigned long long>()=branchid; 00076 revdata["BRANCH_NAME"].data<std::string>()=branchname; 00077 revdata["CTIME"].data<coral::TimeStamp>()=coral::TimeStamp::now(); 00078 const std::string revTableName=lumi::LumiNames::revisionTableName(); 00079 schema.tableHandle(revTableName).dataEditor().insertRow(revdata); 00080 00081 coral::AttributeList entrydata; 00082 entrydata.extend("REVISION_ID",typeid(unsigned long long)); 00083 entrydata.extend("ENTRY_ID",typeid(unsigned long long)); 00084 entrydata.extend("NAME",typeid(std::string)); 00085 entrydata["REVISION_ID"].data<unsigned long long>()=entry.revision_id; 00086 entrydata["ENTRY_ID"].data<unsigned long long>()=entry.entry_id; 00087 entrydata["NAME"].data<std::string>()=entry.entry_name; 00088 const std::string entryTableName=lumi::LumiNames::entryTableName(datatableName); 00089 schema.tableHandle(entryTableName).dataEditor().insertRow(entrydata); 00090 00091 coral::AttributeList revmapdata; 00092 revmapdata.extend("REVISION_ID",typeid(unsigned long long)); 00093 revmapdata.extend("DATA_ID",typeid(unsigned long long)); 00094 00095 revmapdata["REVISION_ID"].data<unsigned long long>()=entry.revision_id; 00096 revmapdata["DATA_ID"].data<unsigned long long>()=entry.data_id; 00097 00098 const std::string revmapTableName=lumi::LumiNames::revmapTableName(datatableName); 00099 schema.tableHandle(revmapTableName).dataEditor().insertRow(revmapdata); 00100 } 00101 void 00102 lumi::RevisionDML::addRevision(coral::ISchema& schema, 00103 const std::string& datatableName, 00104 const lumi::RevisionDML::Entry& revision, 00105 unsigned long long branchid, 00106 std::string& branchname ){ 00107 coral::AttributeList revdata; 00108 revdata.extend("REVISION_ID",typeid(unsigned long long)); 00109 revdata.extend("BRANCH_ID",typeid(unsigned long long)); 00110 revdata.extend("BRANCH_NAME",typeid(std::string)); 00111 revdata.extend("CTIME",typeid(coral::TimeStamp)); 00112 revdata["REVISION_ID"].data<unsigned long long>()=revision.revision_id; 00113 revdata["BRANCH_ID"].data<unsigned long long>()=branchid; 00114 revdata["BRANCH_NAME"].data<std::string>()=branchname; 00115 revdata["CTIME"].data<coral::TimeStamp>()=coral::TimeStamp::now(); 00116 schema.tableHandle(lumi::LumiNames::revisionTableName()).dataEditor().insertRow(revdata); 00117 coral::AttributeList revmapdata; 00118 revmapdata.extend("REVISION_ID",typeid(unsigned long long)); 00119 revmapdata.extend("DATA_ID",typeid(unsigned long long)); 00120 revmapdata["REVISION_ID"].data<unsigned long long>()=revision.revision_id; 00121 revmapdata["DATA_ID"].data<unsigned long long>()=revision.data_id; 00122 const std::string revmapTableName=lumi::LumiNames::revmapTableName(datatableName); 00123 schema.tableHandle(revmapTableName).dataEditor().insertRow(revmapdata); 00124 } 00125 void 00126 lumi::RevisionDML::insertLumiRunData(coral::ISchema& schema, 00127 const lumi::RevisionDML::LumiEntry& lumientry){ 00128 coral::AttributeList lumirundata; 00129 lumirundata.extend("DATA_ID",typeid(unsigned long long)); 00130 lumirundata.extend("ENTRY_ID",typeid(unsigned long long)); 00131 lumirundata.extend("ENTRY_NAME",typeid(std::string)); 00132 lumirundata.extend("RUNNUM",typeid(unsigned int)); 00133 lumirundata.extend("SOURCE",typeid(std::string)); 00134 lumirundata.extend("NOMINALEGEV",typeid(float)); 00135 lumirundata.extend("NCOLLIDINGBUNCHES",typeid(unsigned int)); 00136 lumirundata["DATA_ID"].data<unsigned long long>()=lumientry.data_id; 00137 lumirundata["ENTRY_ID"].data<unsigned long long>()=lumientry.entry_id; 00138 lumirundata["ENTRY_NAME"].data<std::string>()=lumientry.entry_name; 00139 lumirundata["RUNNUM"].data<unsigned int>()=lumientry.runnumber; 00140 lumirundata["SOURCE"].data<std::string>()=lumientry.source; 00141 lumirundata["NOMINALEGEV"].data<float>()=lumientry.bgev; 00142 lumirundata["NCOLLIDINGBUNCHES"].data<unsigned int>()=lumientry.ncollidingbunches; 00143 const std::string lumidataTableName=lumi::LumiNames::lumidataTableName(); 00144 schema.tableHandle(lumidataTableName).dataEditor().insertRow(lumirundata); 00145 } 00146 void 00147 lumi::RevisionDML::insertTrgRunData(coral::ISchema& schema, 00148 const lumi::RevisionDML::TrgEntry& trgentry){ 00149 coral::AttributeList trgrundata; 00150 trgrundata.extend("DATA_ID",typeid(unsigned long long)); 00151 trgrundata.extend("ENTRY_ID",typeid(unsigned long long)); 00152 trgrundata.extend("ENTRY_NAME",typeid(std::string)); 00153 trgrundata.extend("RUNNUM",typeid(unsigned int)); 00154 trgrundata.extend("SOURCE",typeid(std::string)); 00155 trgrundata.extend("BITZERONAME",typeid(std::string)); 00156 trgrundata.extend("BITNAMECLOB",typeid(std::string)); 00157 trgrundata["DATA_ID"].data<unsigned long long>()=trgentry.data_id; 00158 trgrundata["ENTRY_ID"].data<unsigned long long>()=trgentry.entry_id; 00159 trgrundata["ENTRY_NAME"].data<std::string>()=trgentry.entry_name; 00160 trgrundata["RUNNUM"].data<unsigned int>()=trgentry.runnumber; 00161 trgrundata["SOURCE"].data<std::string>()=trgentry.source; 00162 trgrundata["BITZERONAME"].data<std::string>()=trgentry.bitzeroname; 00163 trgrundata["BITNAMECLOB"].data<std::string>()=trgentry.bitnames; 00164 const std::string trgdataTableName=lumi::LumiNames::trgdataTableName(); 00165 schema.tableHandle(trgdataTableName).dataEditor().insertRow(trgrundata); 00166 } 00167 void 00168 lumi::RevisionDML::insertHltRunData(coral::ISchema& schema, 00169 const lumi::RevisionDML::HltEntry& hltentry){ 00170 coral::AttributeList hltrundata; 00171 hltrundata.extend("DATA_ID",typeid(unsigned long long)); 00172 hltrundata.extend("ENTRY_ID",typeid(unsigned long long)); 00173 hltrundata.extend("ENTRY_NAME",typeid(std::string)); 00174 hltrundata.extend("RUNNUM",typeid(unsigned int)); 00175 hltrundata.extend("SOURCE",typeid(std::string)); 00176 hltrundata.extend("NPATH",typeid(unsigned int)); 00177 hltrundata.extend("PATHNAMECLOB",typeid(std::string)); 00178 hltrundata["DATA_ID"].data<unsigned long long>()=hltentry.data_id; 00179 hltrundata["ENTRY_ID"].data<unsigned long long>()=hltentry.entry_id; 00180 hltrundata["ENTRY_NAME"].data<std::string>()=hltentry.entry_name; 00181 hltrundata["RUNNUM"].data<unsigned int>()=hltentry.runnumber; 00182 hltrundata["SOURCE"].data<std::string>()=hltentry.source; 00183 hltrundata["NPATH"].data<unsigned int>()=hltentry.npath; 00184 hltrundata["PATHNAMECLOB"].data<std::string>()=hltentry.pathnames; 00185 const std::string hltdataTableName=lumi::LumiNames::hltdataTableName(); 00186 schema.tableHandle(hltdataTableName).dataEditor().insertRow(hltrundata); 00187 } 00188 00189 unsigned long long 00190 lumi::RevisionDML::currentHFDataTagId(coral::ISchema& schema){ 00191 unsigned long long currentdatatagid=0; 00192 std::vector<unsigned long long> alltagids; 00193 coral::IQuery* qHandle=schema.newQuery(); 00194 qHandle->addToTableList( lumi::LumiNames::tagsTableName()); 00195 qHandle->addToOutputList("TAGID"); 00196 coral::AttributeList qResult; 00197 qResult.extend("TAGID",typeid(unsigned long long)); 00198 qHandle->defineOutput(qResult); 00199 coral::ICursor& cursor=qHandle->execute(); 00200 while(cursor.next()){ 00201 if(!cursor.currentRow()["TAGID"].isNull()){ 00202 alltagids.push_back(cursor.currentRow()["TAGID"].data<unsigned long long>()); 00203 } 00204 } 00205 delete qHandle; 00206 if(alltagids.size()>0){ 00207 std::vector<unsigned long long>::iterator currentdatatagidIt=std::max_element(alltagids.begin(),alltagids.end()); 00208 currentdatatagid=*currentdatatagidIt; 00209 } 00210 return currentdatatagid; 00211 } 00212 00213 unsigned long long 00214 lumi::RevisionDML::HFDataTagIdByName(coral::ISchema& schema, 00215 const std::string& datatagname){ 00216 unsigned long long datatagid=0; 00217 coral::IQuery* qHandle=schema.newQuery(); 00218 qHandle->addToTableList( lumi::LumiNames::tagsTableName()); 00219 const std::string conditionStr("TAGNAME=:tagname"); 00220 coral::AttributeList condition; 00221 condition.extend("tagname",typeid(std::string)); 00222 condition["tagname"].data<std::string>()=datatagname; 00223 qHandle->addToOutputList("TAGID"); 00224 coral::AttributeList qResult; 00225 qResult.extend("TAGID",typeid(unsigned long long)); 00226 qHandle->setCondition(conditionStr,condition); 00227 qHandle->defineOutput(qResult); 00228 coral::ICursor& cursor=qHandle->execute(); 00229 while(cursor.next()){ 00230 if(!cursor.currentRow()["TAGID"].isNull()){ 00231 datatagid=cursor.currentRow()["TAGID"].data<unsigned long long>(); 00232 } 00233 } 00234 delete qHandle; 00235 return datatagid; 00236 } 00237 00238 unsigned long long 00239 lumi::RevisionDML::addRunToCurrentHFDataTag(coral::ISchema& schema, 00240 unsigned int runnum, 00241 unsigned long long lumiid, 00242 unsigned long long trgid, 00243 unsigned long long hltid, 00244 const std::string& patchcomment) 00245 { 00246 unsigned long long currenttagid=currentHFDataTagId(schema); 00247 coral::AttributeList tagrundata; 00248 tagrundata.extend("TAGID",typeid(unsigned long long)); 00249 tagrundata.extend("RUNNUM",typeid(unsigned int)); 00250 tagrundata.extend("LUMIDATAID",typeid(unsigned long long)); 00251 tagrundata.extend("TRGDATAID",typeid(unsigned long long)); 00252 tagrundata.extend("HLTDATAID",typeid(unsigned long long)); 00253 tagrundata.extend("CREATIONTIME",typeid(coral::TimeStamp)); 00254 tagrundata.extend("COMMENT",typeid(std::string)); 00255 tagrundata["TAGID"].data<unsigned long long>()=currenttagid; 00256 tagrundata["RUNNUM"].data<unsigned int>()=runnum; 00257 tagrundata["LUMIDATAID"].data<unsigned long long>()=lumiid; 00258 tagrundata["TRGDATAID"].data<unsigned long long>()=trgid; 00259 tagrundata["HLTDATAID"].data<unsigned long long>()=hltid; 00260 tagrundata["CREATIONTIME"].data<coral::TimeStamp>()=coral::TimeStamp::now(); 00261 tagrundata["COMMENT"].data<std::string>()=patchcomment; 00262 const std::string tagrunTableName=lumi::LumiNames::tagRunsTableName(); 00263 try{ 00264 schema.tableHandle(lumi::LumiNames::tagRunsTableName()).dataEditor().insertRow(tagrundata); 00265 }catch(const coral::DuplicateEntryInUniqueKeyException& er){ 00266 throw lumi::duplicateRunInDataTagException("","addRunToCurrentHFDataTag","RevisionDML"); 00267 } 00268 return currenttagid; 00269 } 00270 00271 lumi::RevisionDML::DataID 00272 lumi::RevisionDML::dataIDForRun(coral::ISchema& schema, 00273 unsigned int runnum, 00274 unsigned long long tagid){ 00275 lumi::RevisionDML::DataID result; 00276 coral::IQuery* qHandle=schema.newQuery(); 00277 qHandle->addToTableList( lumi::LumiNames::tagRunsTableName()); 00278 qHandle->addToOutputList("LUMIDATAID"); 00279 qHandle->addToOutputList("TRGDATAID"); 00280 qHandle->addToOutputList("HLTDATAID"); 00281 coral::AttributeList qResult; 00282 qResult.extend("LUMIDATAID",typeid(unsigned long long)); 00283 qResult.extend("TRGDATAID",typeid(unsigned long long)); 00284 qResult.extend("HLTDATAID",typeid(unsigned long long)); 00285 qHandle->defineOutput(qResult); 00286 coral::AttributeList qCondition; 00287 qCondition.extend("tagid",typeid(unsigned long long)); 00288 qCondition.extend("runnum",typeid(unsigned int)); 00289 qCondition["tagid"].data<unsigned long long>()=tagid; 00290 qCondition["runnum"].data<unsigned int>()=runnum; 00291 std::string qConditionStr("TAGID<=:tagid AND RUNNUM=:runnum"); 00292 qHandle->setCondition(qConditionStr,qCondition); 00293 coral::ICursor& cursor=qHandle->execute(); 00294 unsigned long long minlumid=0; 00295 unsigned long long mintrgid=0; 00296 unsigned long long minhltid=0; 00297 while(cursor.next()){ 00298 if(!cursor.currentRow()["LUMIDATAID"].isNull()){ 00299 unsigned long long lumiid=cursor.currentRow()["LUMIDATAID"].data<unsigned long long>(); 00300 if(lumiid>minlumid){ 00301 result.lumi_id=lumiid; 00302 } 00303 00304 } 00305 if(!cursor.currentRow()["TRGDATAID"].isNull()){ 00306 unsigned long long trgid=cursor.currentRow()["TRGDATAID"].data<unsigned long long>(); 00307 if(trgid>mintrgid){ 00308 result.trg_id=trgid; 00309 } 00310 } 00311 if(!cursor.currentRow()["HLTDATAID"].isNull()){ 00312 unsigned long long hltid=cursor.currentRow()["HLTDATAID"].data<unsigned long long>(); 00313 if(hltid>minhltid){ 00314 result.hlt_id=hltid; 00315 } 00316 } 00317 } 00318 delete qHandle; 00319 return result; 00320 }