12#include "CoolKernel/DatabaseId.h"
13#include "CoolKernel/Exception.h"
14#include "CoolKernel/IDatabaseSvc.h"
15#include "CoolKernel/IDatabase.h"
16#include "CoolApplication/Application.h"
17#include "CoolKernel/IFolder.h"
18#include "CoolKernel/FolderSpecification.h"
19#include "CoolKernel/RecordSpecification.h"
20#include "CoolKernel/Record.h"
21#include "CoolKernel/FieldSpecification.h"
22#include "CoolKernel/IObject.h"
23#include "CoolKernel/IObjectIterator.h"
24#include "CoolKernel/IRecordIterator.h"
25#include "CoolKernel/StorageType.h"
31#include "RelationalAccess/ConnectionService.h"
67 typedef cool::Float
c_t;
258typedef std::pair<cool::ValidityKey, cool::ValidityKey>
IovPeriod_t;
260makeRunInterval(
const cool::ValidityKey runstart,
const cool::ValidityKey runend,
const cool::ChannelId channelId ){
261 cool::ValidityKey s =runstart<<32LL;
262 if (runend==cool::ValidityKeyMax)
return IovKey_t(s, cool::ValidityKeyMax,channelId);
263 cool::ValidityKey e =(runend+1LL)<<32LL;
267bool inInterval(
const cool::ValidityKey n,
const cool::ValidityKey from,
const cool::ValidityKey to){
268 return ((n>from) and (n<=to));
272 if (until ==0)
return 140000;
273 if (until==1230768000000000000)
return 139999;
274 if (until==1262304000000000000)
return 149999;
275 if (until==1288569600000000000)
return 167999;
276 if (until==1290686400000000000)
return 169799;
277 if (until==1293840000000000000)
return 170999;
279 if (until==1333588404000000000)
return 200804;
280 if (until==1333612447000000000)
return 200805;
282 if (until==1356998400000000000)
return 216999;
283 return cool::ValidityKeyMax;
288 if (since==0)
return 0;
289 if (since==1230768000000000000)
return 140000;
290 if (since==1262304000000000000)
return 150000;
291 if (since==1288569600000000000)
return 168000;
292 if (since==1290686400000000000)
return 169800;
293 if (since==1293840000000000000)
return 171000;
295 if (since==1333588404000000000)
return 200805;
297 if (since==1333612447000000000)
return 200806;
304 const auto since=iov.first;
305 const auto until=iov.second;
306 const auto channelId = iov.channelId;
315 result = (numArgs>1) and (numArgs<4);
324 std::string
result(inconn);
325 if (inconn.find(
'/')==std::string::npos) {
326 result=
"sqlite://X;schema=/tmp/sroe/mycool.db;dbname="+inconn;
334 DbConnection(
const std::string & sourceDb,
const bool isCoraCool=
false);
343 const cool::IDatabaseSvc &
m_dbSvc;
352 return (descriptor.find(
"<coracool") != std::string::npos);
364 const std::string dbConnectionString=
transConn(sourceDb);
365 readOnly= (dbConnectionString.find (
"sqlite")==std::string::npos);
371 catch (std::exception& e) {
372 std::cout <<
"Cool exception caught: " << e.what() << std::endl;
375 std::cout<<
"creating "<<dbConnectionString<<std::endl;
377 }
catch (std::exception& e){
378 std::cout <<
"Cool exception caught: " << e.what() << std::endl;
412 std::string tag=run1Tag;
421 const std::string
name;
422 const std::string
tag;
423 FolderSpec(
const std::string & thename,
const std::string & thetag):
name(thename),
tag(thetag){};
438 const std::string&
tag()
const;
440 const cool::IFolderPtr &
ptr()
const;
451 :m_connection(theConnection),m_folderSpec(theFolder),m_folderPtr{},
452 m_sourceflc{},m_isCoraCool(false){
457 }
catch (cool::Exception & e){
458 std::cout<<
" Could not get folder "<<
theFolder.name<<std::endl;
467const cool::IFolderPtr &
482 return (cool::FolderVersioning::SINGLE_VERSION ==
m_folderPtr->versioningMode());
495cool::RecordSpecification
497 if (
m_sourceflc==
nullptr)
return cool::RecordSpecification();
501cool::RecordSpecification
521 SelectionCriterion(
const cool::ChannelSelection & c,
const cool::ValidityKey & s,
const cool::ValidityKey & u):
533 if (ccPtr->size()>0){
548 theFolder.ccPtr()->setPrefetchAll(
true);
550 if (theFolder.isSingleVersion()) {
551 sourceitr=theFolder.ccPtr()->browseObjects(choice.since, choice.until, choice.channels);
553 sourceitr=theFolder.ccPtr()->browseObjects(choice.since, choice.until, choice.channels, theFolder.tag());
555 unsigned int counter(0);
556 std::map<IovKey_t, CoraCoolObject::AttrListVec> mapOfVectorsByIov;
557 while (sourceitr->hasNext() and (counter<limit)) {
559 IovKey_t iov(obj->since(),obj->until(),obj->channelId());
563 return mapOfVectorsByIov;
570 theFolder.ptr()->setPrefetchAll(
false);
571 cool::IObjectIteratorPtr sourceitr;
572 if (theFolder.isSingleVersion()) {
573 sourceitr=theFolder.ptr()->browseObjects(choice.since, choice.until, choice.channels);
575 sourceitr=theFolder.ptr()->browseObjects(choice.since, choice.until, choice.channels, theFolder.tag());
577 unsigned int counter(0);
578 std::map<IovKey_t, cool::IRecordVector> mapOfVectorsByIov;
579 while (sourceitr->goToNext() and counter<limit) {
580 const cool::IObject& sobj=sourceitr->currentRef();
581 cool::IRecordIterator& spitr=sobj.payloadIterator();
582 const cool::IRecordVectorPtr svptr=spitr.fetchAllAsVector();
583 cool::IRecordVector::const_iterator svitr=svptr->begin();
584 cool::IRecordVector::const_iterator svend=svptr->end();
585 IovKey_t iov(sobj.since(),sobj.until(),sobj.channelId());
586 mapOfVectorsByIov[iov]=*svptr;
589 return mapOfVectorsByIov;
600template<
class R2,
class R1>
602setRecord(cool::Record &
r,
const coral::AttributeList &
a,
const std::string & itemName,
const std::string &targetName){
603 static bool warning(
true);
605 if (not
a[itemName].isNull()){
606 const R1 attribute =
a[itemName].data<R1>();
607 const R2 field =
static_cast<R2
>(attribute);
608 if (attribute !=
static_cast<R1
>(field)) std::cout<<
"Cast value mismatch, attr.="<<attribute<<
", field="<<field<<std::endl;
609 r[targetName].setValue<R2>(attribute);
611 r[targetName].setNull();
613 }
catch (coral::AttributeException & e) {
614 if (warning) std::cout<<itemName<<
" gives exception"<<std::endl;
619template<
class R2,
class R1>
621setRecord(cool::Record &
r,
const coral::AttributeList &
a,
const std::string & itemName){
629 std::cout<<
"data size "<<
data.size()<<std::endl;
630 for (
const auto &iov:
data){
634 cool::RecordSpecification rSpec = destination.
payloadSpec();
635 cool::IRecordVector cvp;
636 for (
auto const & attrList:thisVectorPayload){
637 cool::Record
r(rSpec);
657 const auto pRec=std::make_shared<cool::Record>(
r);
669 std::cout<<
"data size "<<
data.size()<<std::endl;
670 for (
const auto &iov:
data){
674 cool::RecordSpecification rSpec = destination.
payloadSpec();
675 cool::IRecordVector cvp;
676 for (
auto const & attrList:thisVectorPayload){
677 cool::Record
r(rSpec);
683 const auto pRec=std::make_shared<cool::Record>(
r);
686 std::cout<<iov.first.first<<
"-"<<iov.first.second<<
" : "<<iov.first.channelId<<std::endl;
694 std::cout<<
"data size "<<
data.size()<<std::endl;
695 for (
const auto &iov:
data){
699 cool::RecordSpecification rSpec = destination.
payloadSpec();
700 cool::IRecordVector cvp;
701 for (
auto const & attrList:thisVectorPayload){
702 cool::Record
r(rSpec);
710 const auto pRec=std::make_shared<cool::Record>(
r);
713 std::cout<<iov.first.first<<
"-"<<iov.first.second<<
" : "<<iov.first.channelId<<std::endl;
722 std::cout<<
"data size "<<
data.size()<<std::endl;
723 for (
const auto &iov:
data){
727 cool::RecordSpecification rSpec = destination.
payloadSpec();
728 cool::IRecordVector cvp;
729 for (
auto const & attrList:thisVectorPayload){
730 cool::Record
r(rSpec);
737 const auto pRec=std::make_shared<cool::Record>(
r);
750 std::cout<<
"data size "<<
data.size()<<std::endl;
751 for (
const auto &iov:
data){
755 cool::RecordSpecification rSpec = destination.
payloadSpec();
756 cool::IRecordVector cvp;
757 for (
auto const & attrList:thisVectorPayload){
758 cool::Record
r(rSpec);
771 const auto pRec=std::make_shared<cool::Record>(
r);
783 std::cout<<
"data size "<<
data.size()<<std::endl;
784 for (
const auto &iov:
data){
788 cool::RecordSpecification rSpec = destination.
payloadSpec();
789 cool::IRecordVector cvp;
790 for (
auto const & attrList:thisVectorPayload){
791 cool::Record
r(rSpec);
801 const auto pRec=std::make_shared<cool::Record>(
r);
804 std::cout<<iov.first.first<<
"-"<<iov.first.second<<
" : "<<iov.first.channelId<<std::endl;
814 std::cout<<
"data size "<<
data.size()<<std::endl;
815 for (
const auto &iov:
data){
819 cool::RecordSpecification rSpec = destination.
payloadSpec();
820 cool::IRecordVector cvp;
821 for (
auto const & attrList:thisVectorPayload){
822 cool::Record
r(rSpec);
827 const auto pRec=std::make_shared<cool::Record>(
r);
830 std::cout<<iov.first.first<<
"-"<<iov.first.second<<
" : "<<iov.first.channelId<<std::endl;
839 const std::string s(
"|");
840 std::cout<<
"|*Payload Name*|*COOL Type*|"<<std::endl;
841 for (
unsigned int i(0);i!=spec.size();++i){
842 const cool::IFieldSpecification& f=spec[i];
843 std::cout<<s<<f.name()<<s<<f.storageType().name()<<s<<std::endl;
848const coral::AttributeList &
852const coral::AttributeList &
854 return vectorEntry->attributeList();
860showResult(
const T & theResult,
const unsigned int maxShown=5){
861 for (
const auto & i:theResult){
863 typename T::mapped_type dataVector=i.second;
864 std::cout<<
"IOV: "<<iov.first<<
","<<iov.second<<std::endl;
865 std::cout<<
"Data: "<<std::endl;
866 const unsigned int numEntries=dataVector.size();
867 const unsigned int numberToShow=std::min(numEntries,maxShown);
868 for(
unsigned int j(0);j!=numberToShow;++j){
869 const coral::AttributeList & thisEntry=
getAttributes(dataVector[j]);
870 thisEntry.toOutputStream(std::cout);
871 std::cout<<std::endl;
905 const std::string
result = itsCoraCool?(
"/SCT/DAQ/Configuration/"):(
"/SCT/DAQ/Config/");
911 std::string::size_type p1,p2;
912 p1=metadata.find(
"<timeStamp>")+11;
913 p2=metadata.find(
"</timeStamp>");
914 const bool valid= ((p1<p2) and (p2!=std::string::npos));
915 if (valid) metadata.replace(p1,p2-11,
"time");
923 bool replacementMade(
false);
927 if (replacementMade) std::cout<<
"timestamp replacement made\n"<<
description<<std::endl;
930 cool::IFolderPtr pSourceFolder=sourceFolder.
ptr();
931 const cool::FolderVersioning::Mode dvermode=cool::FolderVersioning::MULTI_VERSION;
932 const cool::PayloadMode::Mode payMode=pSourceFolder->folderSpecification().payloadMode();
933 const cool::FolderSpecification coolFolderSpec(dvermode,pSourceFolder->payloadSpecification(),payMode);
934 cool::IFolderPtr destfl=writeDb.
dbPtr()->createFolder(destFolder,coolFolderSpec,
description,
true);
935 std::cout<<
"Folder "<<destFolder<<
" created."<<std::endl;
937 const std::map<cool::ChannelId,std::string> & chanmap=pSourceFolder->listChannelsWithNames();
938 for (
const auto & chan:chanmap){
940 const std::string & sourcedesc=pSourceFolder->channelDescription(chan.first);
941 const std::string& sourcename=chan.second;
942 destfl->createChannel(chan.first,sourcename,sourcedesc);
944 std::cout<<std::endl;
948std::vector<std::string> &
949split(
const std::string &s,
char delim, std::vector<std::string> &elems) {
950 std::stringstream
ss(s);
952 while (std::getline(
ss, item, delim)) {
953 elems.push_back(item);
957std::vector<std::string>
958split(
const std::string &s,
char delim) {
959 std::vector<std::string> elems;
960 split(s, delim, elems);
964int main(
int argc,
const char * argv[]) {
994 std::array<std::string,2> chipTagNames={
"SctDaqConfigChip-Run2-10July2015",
"SctDaqConfigurationChip-MC-06"};
1019 std::array<std::string,2> geogTagNames={
"SctDaqConfigGeog-Run2-10July2015",
"SctDaqConfigurationGeog-MC-06"};
1044 std::array<std::string,2> murTagNames={
"SctDaqConfigMur-Run2-10July2015",
"SctDaqConfigurationMur-MC-06"};
1070 std::array<std::string,2> moduleTagNames={
"SctDaqConfigModule-Run2-10July2015",
"SctDaqConfigurationModule-MC-06"};
1082 std::array<std::string,2> channelTagNames={
"SctDaqConfigChannel-Run2-10July2015",
"SctDaqConfigurationChannel-MC-06"};
1107 std::array<std::string,2> rodTagNames={
"SctDaqConfigRod-Run2-10July2015",
"SctDaqConfigurationRod-MC-06"};
1132 std::array<std::string,2> rodmurTagNames={
"SctDaqConfigRodmur-Run2-10July2015",
"SctDaqConfigurationRodmur-MC-06"};
1135 std::array<std::string,6> folderNames={
"Chip",
"Geog",
"MUR",
"Module",
"ROD",
"RODMUR"};
1136 std::string dbName(
"");
1137 const std::string defaultDbName=
"COOLOFL_SCT/OFLP200";
1138 std::string iovString=argv[1];
1140 std::cout<<
"No arguments? "<<std::endl;
1141 std::cout<<argc<<std::endl;
1142 iovString=
"1333588404000000000-1333588404000000001";
1143 std::cout<<
"running with default argument "<<iovString<<std::endl;
1149 const cool::ValidityKey since = std::stoll(
splitString[0]);
1150 cool::ValidityKey until = std::stoll(
splitString[1]);
1151 dbName=defaultDbName;
1156 std::array<std::string,2> folderPaths={
"/SCT/DAQ/Config/",
"/SCT/DAQ/Configuration/"};
1157 const unsigned int nFolders=folderNames.size();
1160 std::cout<<
"problem"<<std::endl;
1163 unsigned int index(0);
1164 for (
const auto & folderPath:folderPaths){
1165 bool itsCoraCool =(folderPath.find(
"Configuration") != std::string::npos);
1166 const std::string chipTagName=chipTagNames[
index];
1167 const std::string geogTagName=geogTagNames[
index];
1168 const std::string murTagName=murTagNames[
index];
1169 const std::string moduleTagName=moduleTagNames[
index];
1170 const std::string channelTagName=channelTagNames[
index];
1171 const std::string rodTagName=rodTagNames[
index];
1172 const std::string rodmurTagName=rodmurTagNames[
index++];
1175 const unsigned int nData(1000000);
1176 for (
unsigned int i(0);i!=nFolders;++i){
1177 std::string tagName;
1178 if (folderNames[i]==
"Chip") tagName=chipTagName;
1179 if (folderNames[i]==
"Geog") tagName=geogTagName;
1180 if (folderNames[i]==
"MUR") tagName=murTagName;
1181 if (folderNames[i]==
"Module") tagName=moduleTagName;
1182 if (folderNames[i]==
"Channel") tagName=channelTagName;
1183 if (folderNames[i]==
"ROD") tagName=rodTagName;
1184 if (folderNames[i]==
"RODMUR") tagName=rodmurTagName;
1186 std::string folderName=folderPath+folderNames[i];
1187 const FolderSpec theFolder(folderName,tagName);
1188 Folder folder(connection, theFolder);
1190 std::cout<<
"---++++"<<folderName<<std::endl;
1210 std::string run1Tag = folder.folderSpec().tag;
1212 std::cout<<
"Destination tag "<<destTag<<std::endl;
1214 if (folderNames[i]==
"Chip"){
1216 const FolderSpec destFolder(
"/SCT/DAQ/Config/Chip",tagName);
1217 Folder target(writeDb,destFolder);
1220 if (folderNames[i]==
"Geog"){
1222 const FolderSpec destFolder(
"/SCT/DAQ/Config/Geog",tagName);
1223 Folder target(writeDb,destFolder);
1226 if (folderNames[i]==
"MUR"){
1228 const FolderSpec destFolder(
"/SCT/DAQ/Config/MUR",tagName);
1229 Folder target(writeDb,destFolder);
1232 if (folderNames[i]==
"Module"){
1234 const FolderSpec destFolder(
"/SCT/DAQ/Config/Module",tagName);
1235 Folder target(writeDb,destFolder);
1238 if (folderNames[i]==
"Channel"){
1240 const FolderSpec destFolder(
"/SCT/DAQ/Config/Channel",tagName);
1241 Folder target(writeDb,destFolder);
1244 if (folderNames[i]==
"ROD"){
1246 const FolderSpec destFolder(
"/SCT/DAQ/Config/ROD",tagName);
1247 Folder target(writeDb,destFolder);
1250 if (folderNames[i]==
"RODMUR"){
1252 const FolderSpec destFolder(
"/SCT/DAQ/Config/RODMUR",tagName);
1253 Folder target(writeDb,destFolder);
boost::shared_ptr< CoraCoolObject > CoraCoolObjectPtr
boost::shared_ptr< CoraCoolObjectIter > CoraCoolObjectIterPtr
boost::shared_ptr< CoraCoolDatabase > CoraCoolDatabasePtr
boost::shared_ptr< CoraCoolFolder > CoraCoolFolderPtr
char data[hepevt_bytes_allocation_ATLAS]
std::vector< std::string > splitString(const std::string &in, const std::string &delim)
AttrListVec::const_iterator const_iterator
std::vector< coral::AttributeList > AttrListVec
CoraCoolDatabasePtr coraCoolPtr() const
DbConnection(const std::string &sourceDb)
const cool::IDatabaseSvc & m_dbSvc
CoraCoolDatabasePtr m_sourceCoraPtr
cool::IDatabasePtr m_sourceDbPtr
cool::Application m_coolapp
coral::ConnectionService m_coralsvc
cool::IDatabasePtr dbPtr() const
Folder(const DbConnection &theConnection, const FolderSpec &theFolder)
const DbConnection & m_connection
CoraCoolFolderPtr m_sourceflc
const cool::IFolderPtr & ptr() const
const FolderSpec & folderSpec() const
cool::RecordSpecification foreignKeySpec()
const FolderSpec m_folderSpec
bool isSingleVersion() const
cool::RecordSpecification payloadSpec() const
specification of the payload entries
bool checkWhetherCoraCool() const
const CoraCoolFolderPtr & ccPtr() const
cool::IFolderPtr m_folderPtr
const std::string & tag() const
std::string description() const
const std::string selection
std::string description
glabal timer - how long have I taken so far?
cool::Int16 opMarkSpace_t
USAGE: openCoraCool.exe "COOLONL_SCT/COMP200".
cool::UChar opMarkSpace_t
cool::UInt16 chipStatus_t
cool::UInt16 bcidOffset_t
cool::UInt32 trigEnable_t
const coral::AttributeList & getAttributes(const coral::AttributeList &vectorEntry)
std::string transConn(const std::string &inconn)
void writeModule(const CCIovVectorMap_t &data, const Folder &destination, const std::string &tag)
IovKey_t time2RunLumi(const IovKey_t &iov)
cool::ValidityKey convertSince(const cool::ValidityKey &since)
bool inInterval(const cool::ValidityKey n, const cool::ValidityKey from, const cool::ValidityKey to)
std::vector< std::string > & split(const std::string &s, char delim, std::vector< std::string > &elems)
IovVectorMap_t read(const Folder &theFolder, const SelectionCriterion &choice, const unsigned int limit=10)
cool::ValidityKey convertUntil(const cool::ValidityKey &until)
CoraCoolObject::AttrListVec readOneDatum(const CoraCoolObjectPtr &ccPtr)
std::map< IovKey_t, cool::IRecordVector > IovVectorMap_t
void writeChannel(const CCIovVectorMap_t &data, const Folder &destination, const std::string &tag)
void writeMUR(const CCIovVectorMap_t &data, const Folder &destination, const std::string &tag)
IovKey_t makeRunInterval(const cool::ValidityKey runstart, const cool::ValidityKey runend, const cool::ChannelId channelId)
void writeChip(const CCIovVectorMap_t &data, const Folder &destination, const std::string &tag)
std::string convertTagToRun2(const std::string &run1Tag)
cool::IFolderPtr createLocalCopyStructure(const Folder &sourceFolder, const DbConnection &writeDb, const bool forceTimestamp=false)
bool replaceTimestamp(std::string &metadata)
std::string defaultFolderPath(const bool itsCoraCool)
cool::StorageType::TypeId coral2CoolType(const std::string & coralTypeName){ std::vector<std::string>...
CCIovVectorMap_t readCC(const Folder &theFolder, const SelectionCriterion &choice, const unsigned int limit=10)
std::map< IovKey_t, CoraCoolObject::AttrListVec > CCIovVectorMap_t
void setRecord(cool::Record &r, const coral::AttributeList &a, const std::string &itemName, const std::string &targetName)
IovKey_t runLumiFromTimeStamp(const IovKey_t & timeStamp){ return timeStamp; }.
void showResult(const T &theResult, const unsigned int maxShown=5)
bool isCoraCoolDescriptor(const std::string &descriptor)
void writeGeog(const CCIovVectorMap_t &data, const Folder &destination, const std::string &tag)
std::pair< cool::ValidityKey, cool::ValidityKey > IovPeriod_t
https://twiki.cern.ch/twiki/bin/viewauth/AtlasComputing/ConditionsRun1RunNumbers 152777:1270866809,...
bool argumentsOK(const int numArgs, const char **)
void printRecordSpec(const cool::RecordSpecification &spec)
void writeRod(const CCIovVectorMap_t &data, const Folder &destination, const std::string &tag)
void writeRodmur(const CCIovVectorMap_t &data, const Folder &destination, const std::string &tag)
FolderSpec(const std::string &thename, const std::string &thetag)
MyKey(const cool::ValidityKey &f, const cool::ValidityKey &s, const cool::ChannelId &c)
bool operator<(const MyKey &rhs) const
cool::ChannelId channelId
const cool::ChannelSelection channels
const cool::ValidityKey until
SelectionCriterion(const cool::ChannelSelection &c, const cool::ValidityKey &s, const cool::ValidityKey &u)
const cool::ValidityKey since