CMS 3D CMS Logo

NormDML.cc
Go to the documentation of this file.
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"
9 #include <algorithm>
10 #include <map>
11 #include <iostream>
12 #include <sstream>
13 #include <boost/algorithm/string.hpp>
14 #include <boost/tokenizer.hpp>
16 }
17 unsigned long long
18 lumi::NormDML::normIdByName(const coral::ISchema& schema,const std::string& normtagname){
20  unsigned long long result=0;
21  std::vector<unsigned long long> luminormids;
22  coral::IQuery* qHandle=schema.newQuery();
23  qHandle->addToTableList( lumi::LumiNames::luminormv2TableName() );
24  qHandle->addToOutputList("DATA_ID");
25  if(!normtagname.empty()){
26  std::string qConditionStr("ENTRY_NAME=:normtagname");
27  coral::AttributeList qCondition;
28  qCondition.extend("normtagname",typeid(std::string));
29  qCondition["normtagname"].data<std::string>()=normtagname;
30  qHandle->setCondition(qConditionStr,qCondition);
31  }
32  coral::AttributeList qResult;
33  qResult.extend("DATA_ID",typeid(unsigned long long));
34  qHandle->defineOutput(qResult);
35  coral::ICursor& cursor=qHandle->execute();
36  while( cursor.next() ){
37  const coral::AttributeList& row=cursor.currentRow();
38  luminormids.push_back(row["DATA_ID"].data<unsigned long long>());
39  }
40  delete qHandle;
41  std::vector<unsigned long long>::iterator resultIt;
42  for(resultIt=luminormids.begin();resultIt!=luminormids.end();++resultIt){
43  if( (*resultIt)>result){
44  result=*resultIt;
45  }
46  }
47  return result;
48 }
49 void
50 lumi::NormDML::normIdByType(const coral::ISchema& schema,std::map<std::string,unsigned long long>& resultMap,lumi::NormDML::LumiType lumitype,bool defaultonly){
52  coral::IQuery* qHandle=schema.newQuery();
53  qHandle->addToTableList( lumi::LumiNames::luminormv2TableName() );
54  qHandle->addToOutputList("DATA_ID");
55  qHandle->addToOutputList("ENTRY_NAME");
56  coral::AttributeList qCondition;
57  std::string qConditionStr("LUMITYPE=:lumitype");
58  qCondition.extend("lumitype",typeid(std::string));
59  std::string lumitypeStr("HF");
60  if(lumitype!=lumi::NormDML::HF){
61  lumitypeStr="PIXEL";
62  }
63  qCondition["lumitype"].data<std::string>()=lumitypeStr;
64  if(defaultonly){
65  qConditionStr+=" AND ISTYPEDEFAULT=:istypedefault";
66  qCondition.extend("istypedefault",typeid(unsigned int));
67  qCondition["istypedefault"].data<unsigned int>()=1;
68  }
69  qHandle->setCondition(qConditionStr,qCondition);
70  coral::AttributeList qResult;
71  qResult.extend("DATA_ID",typeid(unsigned long long));
72  qResult.extend("ENTRY_NAME",typeid(std::string));
73  qHandle->defineOutput(qResult);
74  try{
75  coral::ICursor& cursor=qHandle->execute();
76  while( cursor.next() ){
77  const coral::AttributeList& row=cursor.currentRow();
78  const std::string normname=row["ENTRY_NAME"].data<std::string>();
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));
82  }else{
83  if(resultMap[normname]<normid){
84  resultMap.insert(std::make_pair(normname,normid));
85  }
86  }
87  }
88  }catch(const coral::Exception& er){
89  std::cout<<"database error in NormDML::normIdByType "<<er.what()<<std::endl;
90  delete qHandle;
91  throw er;
92  }catch(...){
93  throw;
94  }
95  delete qHandle;
96 }
97 void
98 lumi::NormDML::normById(const coral::ISchema&schema,
99  unsigned long long normid,
100  std::map< unsigned int,lumi::NormDML::normData >& result){
102  coral::IQuery* qHandle=schema.newQuery();
103  qHandle->addToTableList( lumi::LumiNames::luminormv2dataTableName() );
104  std::string qConditionStr("DATA_ID=:normid ");
105  coral::AttributeList qCondition;
106  qCondition.extend("normid",typeid(unsigned long long));
107  qCondition["normid"].data<unsigned long long>()=normid;
108  qHandle->setCondition(qConditionStr,qCondition);
109  coral::AttributeList qResult;
110  coral::ICursor& cursor=qHandle->execute();
111  while( cursor.next() ){
112  const coral::AttributeList& row=cursor.currentRow();
113  unsigned int since=row["SINCE"].data<unsigned int>();
114  if(result.find(since)==result.end()){
115  lumi::NormDML::normData thisnorm;
116  result.insert(std::make_pair(since,thisnorm));
117  }
118  const std::string correctorStr=row["CORRECTOR"].data<std::string>();
119  if(!row["AMODETAG"].isNull()){
120  result[since].amodetag=row["AMODETAG"].data<std::string>();
121  }
122  if(!row["NOMINALEGEV"].isNull()){
123  result[since].beamegev=row["NOMINALEGEV"].data<unsigned int>();
124  }
125 
126  std::vector<std::string> correctorParams;
127  parseLumiCorrector(correctorStr,correctorParams);
128  result[since].corrfunc=*(correctorParams.begin());
129  for(std::vector<std::string>::iterator corrIt=correctorParams.begin()+1;
130  corrIt!=correctorParams.end();corrIt++){
131  std::string paramName=boost::to_upper_copy(*corrIt);
132  if(paramName==std::string("AFTERGLOW")){
133  const std::string afterglowStr=row["AFTERGLOW"].data<std::string>();
134  parseAfterglows(afterglowStr,result[since].afterglows);
135  }else{
136  float param=row[paramName].data<float>();
137  result[since].coefficientmap.insert(std::make_pair(paramName,param));
138  }
139  }
140  }
141  delete qHandle;
142 }
143 void
145  std::vector<std::string>& correctorParams){
146  std::string cleancorrectorStr(correctorStr);
147  boost::trim(cleancorrectorStr);
148  boost::split(correctorParams,cleancorrectorStr,boost::is_any_of(":,"));
149 }
150 void
151 lumi::NormDML::parseAfterglows(const std::string& afterglowStr,std::map<unsigned int,float>& afterglowmap){
152  typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
153  boost::char_separator<char> sep("[(,)] ");
154  tokenizer tokens(afterglowStr,sep);
155  unsigned int counter=1;
156  std::string thresholdStr;
157  unsigned int threshold;
158  for(tokenizer::iterator tok_iter=tokens.begin();tok_iter != tokens.end(); ++tok_iter){
159  if(counter%2==0){
160  std::string valStr=*(tok_iter);
161  float val=0.;
162  std::stringstream strStream(valStr);
163  strStream>>val;
164  afterglowmap.insert(std::make_pair(threshold,val));
165  }else{
166  thresholdStr=*(tok_iter);
167  std::stringstream strStream(thresholdStr);
168  strStream>>threshold;
169  }
170  ++counter;
171  }
172 }
void parseAfterglows(const std::string &afterglowStr, std::map< unsigned int, float > &afterglowmap)
Definition: NormDML.cc:151
static const std::string luminormv2dataTableName()
Definition: LumiNames.cc:26
void parseLumiCorrector(const std::string &correctorStr, std::vector< std::string > &correctorParams)
Definition: NormDML.cc:144
normname
check normtag and get norm values if required
Definition: lumiCalc2.py:356
correctorStr
Definition: lumiNorm.py:120
void normById(const coral::ISchema &schema, unsigned long long normid, std::map< unsigned int, normData > &result)
Definition: NormDML.cc:98
static const std::string luminormv2TableName()
Definition: LumiNames.cc:23
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)
Definition: NormDML.cc:50
double split
Definition: MVATrainer.cc:139
unsigned long long normIdByName(const coral::ISchema &schema, const std::string &normtagname)
Definition: NormDML.cc:18