2 #include "RelationalAccess/ISchema.h"
3 #include "RelationalAccess/IQuery.h"
4 #include "RelationalAccess/ICursor.h"
5 #include "CoralBase/AttributeList.h"
6 #include "CoralBase/Attribute.h"
7 #include "CoralBase/AttributeSpecification.h"
13 #include <boost/algorithm/string.hpp>
14 #include <boost/tokenizer.hpp>
18 unsigned long long result = 0;
19 std::vector<unsigned long long> luminormids;
20 coral::IQuery* qHandle = schema.newQuery();
22 qHandle->addToOutputList(
"DATA_ID");
23 if (!normtagname.empty()) {
24 std::string qConditionStr(
"ENTRY_NAME=:normtagname");
25 coral::AttributeList qCondition;
26 qCondition.extend(
"normtagname",
typeid(
std::string));
27 qCondition[
"normtagname"].data<
std::string>() = normtagname;
28 qHandle->setCondition(qConditionStr, qCondition);
30 coral::AttributeList qResult;
31 qResult.extend(
"DATA_ID",
typeid(
unsigned long long));
32 qHandle->defineOutput(qResult);
33 coral::ICursor& cursor = qHandle->execute();
34 while (cursor.next()) {
35 const coral::AttributeList& row = cursor.currentRow();
36 luminormids.push_back(row[
"DATA_ID"].data<unsigned long long>());
39 std::vector<unsigned long long>::iterator resultIt;
40 for (resultIt = luminormids.begin(); resultIt != luminormids.end(); ++resultIt) {
41 if ((*resultIt) >
result) {
48 std::map<std::string, unsigned long long>& resultMap,
52 coral::IQuery* qHandle = schema.newQuery();
54 qHandle->addToOutputList(
"DATA_ID");
55 qHandle->addToOutputList(
"ENTRY_NAME");
56 coral::AttributeList qCondition;
61 lumitypeStr =
"PIXEL";
63 qCondition[
"lumitype"].data<
std::string>() = lumitypeStr;
65 qConditionStr +=
" AND ISTYPEDEFAULT=:istypedefault";
66 qCondition.extend(
"istypedefault",
typeid(
unsigned int));
67 qCondition[
"istypedefault"].data<
unsigned int>() = 1;
69 qHandle->setCondition(qConditionStr, qCondition);
70 coral::AttributeList qResult;
71 qResult.extend(
"DATA_ID",
typeid(
unsigned long long));
73 qHandle->defineOutput(qResult);
75 coral::ICursor& cursor = qHandle->execute();
76 while (cursor.next()) {
77 const coral::AttributeList& row = cursor.currentRow();
79 unsigned long long normid = row[
"DATA_ID"].data<
unsigned long long>();
80 if (resultMap.find(normname) == resultMap.end()) {
81 resultMap.insert(std::make_pair(normname, normid));
83 if (resultMap[normname] < normid) {
84 resultMap.insert(std::make_pair(normname, normid));
89 std::cout <<
"database error in NormDML::normIdByType " << er.what() << std::endl;
98 unsigned long long normid,
99 std::map<unsigned int, lumi::NormDML::normData>&
result) {
101 coral::IQuery* qHandle = schema.newQuery();
104 coral::AttributeList qCondition;
105 qCondition.extend(
"normid",
typeid(
unsigned long long));
106 qCondition[
"normid"].data<
unsigned long long>() = normid;
107 qHandle->setCondition(qConditionStr, qCondition);
108 coral::AttributeList qResult;
109 coral::ICursor& cursor = qHandle->execute();
110 while (cursor.next()) {
111 const coral::AttributeList& row = cursor.currentRow();
112 unsigned int since = row[
"SINCE"].data<
unsigned int>();
113 if (result.find(since) == result.end()) {
115 result.insert(std::make_pair(since, thisnorm));
118 if (!row[
"AMODETAG"].isNull()) {
121 if (!row[
"NOMINALEGEV"].isNull()) {
122 result[
since].beamegev = row[
"NOMINALEGEV"].data<
unsigned int>();
125 std::vector<std::string> correctorParams;
126 parseLumiCorrector(correctorStr, correctorParams);
127 result[
since].corrfunc = *(correctorParams.begin());
128 for (std::vector<std::string>::iterator corrIt = correctorParams.begin() + 1; corrIt != correctorParams.end();
130 std::string paramName = boost::to_upper_copy(*corrIt);
133 parseAfterglows(afterglowStr, result[since].afterglows);
135 float param = row[paramName].data<
float>();
136 result[
since].coefficientmap.insert(std::make_pair(paramName, param));
145 boost::split(correctorParams, cleancorrectorStr, boost::is_any_of(
":,"));
148 typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
149 boost::char_separator<char> sep(
"[(,)] ");
150 tokenizer tokens(afterglowStr, sep);
154 for (tokenizer::iterator tok_iter = tokens.begin(); tok_iter != tokens.end(); ++tok_iter) {
155 if (counter % 2 == 0) {
158 std::stringstream strStream(valStr);
160 afterglowmap.insert(std::make_pair(threshold, val));
162 thresholdStr = *(tok_iter);
163 std::stringstream strStream(thresholdStr);
static void trim(std::string &s)
void parseAfterglows(const std::string &afterglowStr, std::map< unsigned int, float > &afterglowmap)
static const std::string luminormv2dataTableName()
void parseLumiCorrector(const std::string &correctorStr, std::vector< std::string > &correctorParams)
void normById(const coral::ISchema &schema, unsigned long long normid, std::map< unsigned int, normData > &result)
static const std::string luminormv2TableName()
static std::atomic< unsigned int > counter
void normIdByType(const coral::ISchema &schema, std::map< std::string, unsigned long long > &resultMap, LumiType=HF, bool defaultonly=true)
unsigned long long normIdByName(const coral::ISchema &schema, const std::string &normtagname)