9#include "CoolKernel/Exception.h"
10#include "CoolKernel/FolderSpecification.h"
11#include "CoolKernel/IDatabaseSvc.h"
12#include "CoolKernel/IDatabase.h"
13#include "CoolKernel/IFolder.h"
14#include "CoolKernel/IFolderSet.h"
15#include "CoolKernel/IObject.h"
16#include "CoolKernel/IObjectIterator.h"
17#include "CoolKernel/pointers.h"
18#include "CoolApplication/DatabaseSvcFactory.h"
21#include "RelationalAccess/IConnectionServiceConfiguration.h"
22#include "RelationalAccess/ConnectionService.h"
23#include "RelationalAccess/ISessionProxy.h"
24#include "RelationalAccess/ITransaction.h"
25#include "RelationalAccess/ISchema.h"
26#include "RelationalAccess/ITable.h"
27#include "RelationalAccess/IQuery.h"
28#include "RelationalAccess/ICursor.h"
86 typename std::list<std::pair<IOVRange, T > >
data;
98 data.push_back(std::pair<IOVRange, T>(range, val));
112 if (
data.empty())
return T(-1);
114 typename std::list<std::pair<IOVRange, T> >
::iterator it;
128 if ((
m_last->first).isInRange(time))
return m_last->second;
133 if ((
m_last->first).isInRange(time))
return m_last->second;
146 if (
m_last->first.stop() <= time) {
180 std::list<std::pair<IOVRange, T> > mydata;
184 IOVTime firsttime = range.start();
185 IOVTime lasttime = range.stop();
191 typename std::list<std::pair<IOVRange, T> >
::iterator elem;
193 std::pair<IOVRange, T> val;
196 for (elem =
m_last; elem !=
data.end(); ++elem) {
201 if (val.first.start() < firsttime || val.first.stop() > lasttime) {
202 IOVTime iovstart((val.first.start() < firsttime ? firsttime : val.first.start()));
203 IOVTime iovstop((val.first.stop() > lasttime ? lasttime : val.first.stop()));
204 val.first =
IOVRange(iovstart, iovstop);
206 mydata.push_back(val);
209 if (elem->first.isInRange(lasttime))
break;
252 void setIOV(
const cool::ValidityKey start,
const cool::ValidityKey stop);
257 cool::ChannelId
getHLTChannelId(
const std::string& trigger,
const std::string& folder_name);
260 cool::ChannelId
getL1ChannelId(
const std::string& trigger,
const std::string& folder_name);
263 cool::ChannelId
getLumiChannelId(
const std::string& lumimethod,
const std::string& folder_name);
283 std::map<cool::ValidityKey, T>
getObjMapFromFolderAtChan(
const std::string& obj_name,
const std::string& folder_name,
const cool::ChannelId&
id);
286 std::map<cool::ValidityKey, T>
getTrigObjMapFromFolderByName(
const std::string& obj_name,
const std::string& folder_name,
const std::string& trigger);
293 std::map<cool::ValidityKey, T>
getLumiIterator(
const std::string& luminame,
const std::string& folder_name,
const std::string& tag,
const cool::ChannelId&
id );
306 std::map<cool::ValidityKey, LumiFolderData>
307 getLumiFolderData(
const std::string& folder_name,
const std::string& tag,
const cool::ChannelId&
id );
316 std::map<cool::ValidityKey, L1CountFolderData>
321 IOVData<T> getIOVData(
const std::string& name,
const std::string& folder_name,
const cool::ChannelId&
id,
const std::string& tag=
"");
324 std::string
transConn(
const std::string& inconn);
352 std::map<cool::ValidityKey, T> mymap;
354 cool::IFolderPtr folder_ptr =
m_sourceDbPtr->getFolder(folder_name);
355 cool::IObjectIteratorPtr obj_itr=folder_ptr->browseObjects(
m_VKstart,
m_VKstart, cool::ChannelSelection::all());
357 while (obj_itr->goToNext()){
359 const cool::IRecord& payload=obj_itr->currentRef().payload();
364 const cool::IRecord& payload=obj_itr->currentRef().payload();
366 mymap.insert( std::pair<cool::ValidityKey, T>(obj_itr->currentRef().since() ,payload[obj_name].data<T>()));
371 m_logger <<
Root::kERROR <<
"Couldn't find HLT trigger [" << trigger <<
"] in folder [" << folder_name <<
"]" << Root::GEndl;
382 std::map<cool::ValidityKey, T> mymap;
383 cool::IFolderPtr folder_ptr =
m_sourceDbPtr->getFolder(folder_name);
384 cool::ChannelSelection chsel(
id);
385 if(folder_ptr->existsChannel(
id)){
386 cool::IObjectIteratorPtr itr = folder_ptr->browseObjects(
m_VKstart,
m_VKstop,chsel);
387 while (itr->goToNext()) {
388 const cool::IRecord& payload=itr->currentRef().payload();
390 mymap.insert( std::pair<cool::ValidityKey, T>(itr->currentRef().since() ,payload[obj_name].data<T>()));
402std::map<cool::ValidityKey, T>
CoolQuery::getLumiIterator(
const std::string& luminame,
const std::string& folder_name,
const std::string& tag,
const cool::ChannelId&
id ){
404 std::map<cool::ValidityKey, T> mymap;
405 cool::IFolderPtr folder_ptr =
m_sourceDbPtr->getFolder(folder_name);
407 if(folder_ptr->existsChannel(
id) && folder_ptr->existsUserTag(tag)){
408 cool::IObjectIteratorPtr itr = folder_ptr->browseObjects(
m_VKstart,
m_VKstop,
id, tag);
409 while (itr->goToNext()) {
410 const cool::IRecord& payload=itr->currentRef().payload();
411 mymap.insert( std::pair<cool::ValidityKey, T>(itr->currentRef().since() ,payload[luminame].data<T>()));
413 }
else if(folder_ptr->existsChannel(
id) && !folder_ptr->existsUserTag(tag)){
417 m_logger <<
Root::kWARNING <<
"Lumi tag " << tag <<
" does not exist, or Lumi channel id " <<
id <<
" does not exist in database." << Root::GEndl;
426CoolQuery::getIOVData(
const std::string& obj_name,
const std::string& folder_name,
const cool::ChannelId&
id,
const std::string& tag) {
430 cool::IFolderPtr folder_ptr =
m_sourceDbPtr->getFolder(folder_name);
431 cool::ChannelSelection chsel(
id);
432 if(!folder_ptr->existsChannel(
id)){
433 m_logger <<
Root::kWARNING <<
"Channel " <<
id <<
" does not exist in database " << folder_name <<
"!" << Root::GEndl;
438 cool::IObjectIteratorPtr itr;
439 if (folder_ptr->existsUserTag(tag)) {
445 while (itr->goToNext()) {
447 since.setRETime(itr->currentRef().since());
448 until.setRETime(itr->currentRef().until());
452 const cool::IRecord& payload=itr->currentRef().payload();
454 mydata.
add( range, payload[obj_name].
data<T>() );
char data[hepevt_bytes_allocation_ATLAS]
Basic time unit for IOVSvc.
void setDb(const std::string &database)
cool::ChannelId getHLTChannelId(const std::string &trigger, const std::string &folder_name)
void setIOV(const cool::ValidityKey start, const cool::ValidityKey stop)
IOVData< T > getIOVData(const std::string &name, const std::string &folder_name, const cool::ChannelId &id, const std::string &tag="")
CoolQuery(const std::string &database, const std::string &triggerchain)
std::map< cool::ValidityKey, L1CountFolderData > getL1CountFolderData(const std::string &folder_name, const cool::ChannelId &id)
void setTrigger(const std::string &triggerchain)
unsigned int getTriggerLevel(const std::string &triggername)
coral::ConnectionService m_coralsvc
cool::IDatabasePtr m_sourceDbPtr
Root::TMsgLogger m_logger
cool::Float getHLTPrescaleFromChannelId(const std::string &folder_name, const cool::ChannelId &id)
void setIOVForRun(unsigned int runnum)
ReplicaSorter * m_repsort
void printHLTTriggers(const std::string &folder_name)
std::map< cool::ValidityKey, T > getTrigObjMapFromFolderByName(const std::string &obj_name, const std::string &folder_name, const std::string &trigger)
std::map< cool::ValidityKey, LumiFolderData > getLumiFolderData(const std::string &folder_name, const std::string &tag, const cool::ChannelId &id)
cool::ValidityKey m_VKstart
cool::Int32 getL1PrescaleFromChannelId(const std::string &folder_name, const cool::ChannelId &id)
void printL1Triggers(const std::string &folder_name)
std::string m_triggerchain
cool::ChannelId getL1ChannelId(const std::string &trigger, const std::string &folder_name)
std::string transConn(const std::string &inconn)
cool::ChannelId getLumiChannelId(const std::string &lumimethod, const std::string &folder_name)
std::map< cool::ValidityKey, T > getLumiIterator(const std::string &luminame, const std::string &folder_name, const std::string &tag, const cool::ChannelId &id)
std::string getHLTLowerChainName(const std::string &trigger, const std::string &folder_name)
cool::ValidityKey m_VKstop
std::map< cool::ValidityKey, T > getObjMapFromFolderAtChan(const std::string &obj_name, const std::string &folder_name, const cool::ChannelId &id)
void add(IOVRange range, T val)
IOVData & operator=(const IOVData &)=default
std::list< std::pair< IOVRange, T > > getOverlap(const IOVRange &range)
std::list< std::pair< IOVRange, T > >::iterator m_last
IOVData(IOVData &&)=default
std::list< std::pair< IOVRange, T > > data
IOVData(const IOVData &)=default
Basic time unit for IOVSvc.
static std::vector< std::string > triggerchain
cool::UInt63 AfterPrescale
cool::UInt63 BeforePrescale