ATLAS Offline Software
CoraCoolExample.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <iostream>
6 #include <exception>
7 #include <math.h>
8 #include <vector>
9 #include <string>
10 #include <sstream>
13 #include "CoolKernel/IDatabaseSvc.h"
14 #include "CoolKernel/ChannelSelection.h"
19 #include "CoralBase/Blob.h"
21 
22 // declarations for CoraCoolExample class
23 
25  public:
26  CoraCoolExample(const std::string& dbstring, const std::string& options,
27  const std::string& folder,const int nfolder,
28  const int nobj, const int nchan, const int niov,
29  const int iov1,const int iovinc) ATLAS_CTORDTOR_NOT_THREAD_SAFE;
30  int execute();
31  bool write();
32  bool read();
33  bool checkAPI();
35  const int obj, const int chan,
36  const int iov);
37 
38  private:
39  const std::string m_dbstring;
40  std::vector<std::string> m_foldername;
41  const int m_nobj;
42  const int m_nchan;
43  const int m_niov;
44  const int m_iov1;
45  const int m_iovinc;
46  bool m_read;
47  bool m_write;
48  bool m_check;
49  bool m_delete;
50  bool m_blob;
51  bool m_writeref;
52  bool m_writeadj;
53  bool m_readonly;
54  bool m_bulk;
55  std::vector<std::string> m_coraltable;
56 
58  cool::IDatabasePtr m_cooldb;
59 
60  cool::RecordSpecification m_payloadspec;
61  cool::RecordSpecification m_fkspec;
63 };
64 
66  const std::string& options,
67  const std::string& folder,
68  const int nfolder,
69  const int nobj, const int nchan,
70  const int niov,
71  const int iov1, const int iovinc) :
72  m_dbstring(dbstring),
73  m_nobj(nobj), m_nchan(nchan), m_niov(niov),m_iov1(iov1),m_iovinc(iovinc) {
74 
75  std::cout << "Option string: " << options << std::endl;
76  std::cout << "Objects per channel=" << m_nobj << " Channels=" << m_nchan
77  << " IOVs=" << m_niov << std::endl;
78  std::cout << "IOVstart=" << m_iov1 << " inc " << m_iovinc << std::endl;
79 
80  // define folders
81  m_foldername.clear();
82  if (nfolder<2) {
83  m_foldername.push_back(folder);
84  } else if (nfolder<1000) {
85  std::cout << "Defining multiple folders" << std::endl;
86  for (int i=1;i<=nfolder;++i) {
87  std::ostringstream o;
88  o << folder << "_" << i;
89  std::cout << "Foldername " << o.str() << std::endl;
90  m_foldername.push_back(o.str());
91  }
92  } else {
93  std::cout << "Attempt to define too many folders " << std::endl;
94  }
95  // parse options
96  m_read=(options.find('r')!=std::string::npos);
97  m_write=(options.find('w')!=std::string::npos);
98  m_check=(options.find('c')!=std::string::npos);
99  m_delete=(options.find('d')!=std::string::npos);
100  m_blob=(options.find('b')!=std::string::npos);
101  m_writeref=(options.find('a')!=std::string::npos);
102  m_writeadj=(options.find('p')!=std::string::npos);
103  m_bulk=(options.find('j')!=std::string::npos);
104  m_readonly=(!(m_write || m_check));
105 
106  if (m_writeref) std::cout <<
107  "Second reference will be included for each object" << std::endl;
108  if (m_writeadj) std::cout <<
109  "Additional rows will be added for each object" << std::endl;
110  if (m_bulk) std::cout << "Writing will use bulk updates" << std::endl;
111 
112  // print dbstring without password if present
113  const unsigned int idx=m_dbstring.find("password");
114  std::cout << "Initialise database for " << m_dbstring.substr(0,idx) <<
115  " readonly " << m_readonly << std::endl;
116 
117  // access the CoraCool database service
118  // this ensures readonly connections will be shared
119  // the SEAL context is created by the CoraCoolDatabaseSvcFactory
120  // which takes care of loading all the required libraries
121 
122  CoraCoolDatabaseSvc& corasvc=CoraCoolDatabaseSvcFactory::databaseService();
123 
124  std::cout << "Done the CoraCool initialisation" << std::endl;
125 
126  // open the CORAL database connection which implicitly opens
127  // the corresponding COOL connection
128  // you can also pass in the COOL connection explicitly
129  std::cout << "Opening CORAL database" << std::endl;
130  try {
132  std::cout << "Database connections open OK" << std::endl;
133  }
134  catch (std::exception&e) {
135  std::cout << "Problem opening CORAL database: " << e.what() << std::endl;
136  }
137  std::cout << "Done the database opening" << std::endl;
138 
139  // list the COOL folders found in the database
140  cool::IDatabasePtr cooldb=m_coradb->coolDatabase();
141  const std::vector<std::string>& folders=cooldb->listAllNodes();
142  std::cout << "COOL database has " << folders.size() << " folders defined"
143  << std::endl;
144  for (std::vector<std::string>::const_iterator itr=folders.begin();
145  itr!=folders.end();++itr) std::cout << *itr << std::endl;
146 
147  // create the AttributeListSpecification for the payload
148  // primary / foreign keys
149  m_payloadspec.extend("PrimKey",cool::StorageType::Int32);
150  m_payloadspec.extend("ForeignKey",cool::StorageType::Int32);
151  // integers to check the data integrity on readback - keep details of the
152  // object origin
153  m_payloadspec.extend("IntObj",cool::StorageType::Int32);
154  m_payloadspec.extend("IntChan",cool::StorageType::Int32);
155  m_payloadspec.extend("IntIOV",cool::StorageType::Int32);
156  // other data members
157  m_payloadspec.extend("UInt1",cool::StorageType::UInt32);
158  m_payloadspec.extend("Float1",cool::StorageType::Float);
159  m_payloadspec.extend("Double1",cool::StorageType::Double);
160  m_payloadspec.extend("LongLong1",cool::StorageType::Int64);
161  m_payloadspec.extend("ULongLong1",cool::StorageType::UInt63);
162  m_payloadspec.extend("String1",cool::StorageType::String4k);
163  // optional declaration of CORAL Blob type object
164  m_blobsize = 0;
165  if (m_blob) {
166  m_payloadspec.extend("Blob1",cool::StorageType::Blob64k);
167  m_blobsize=1000;
168  std::cout << "Including blob of size " << m_blobsize << " in data " <<
169  std::endl;
170  }
171  // create COOL FK spec
172  m_fkspec.extend("CoolKey",cool::StorageType::Int32);
173 
174  // set payload table names from foldername leaf name
175  m_coraltable.clear();
176  for (std::vector<std::string>::const_iterator itr=m_foldername.begin();
177  itr!=m_foldername.end();++itr) {
178  std::string::size_type iofs=itr->rfind("/");
179  if (iofs!=std::string::npos) {
180  m_coraltable.push_back(itr->substr(iofs+1));
181  } else {
182  m_coraltable.push_back(*itr);
183  }
184  }
185 }
186 
188  const int obj,
189  const int chan, const int iov) {
190  // create a payload object according to the specification generated
191  // previously
192  coral::AttributeList data=fld->emptyAttrList();
193  // setup iov, modulo number of IOVs generated (to deal with referenced objs)
194  int iov2=iov;
196  // set keys to zero - will be overwritten
197  data["PrimKey"].data<int>()=0;
198  data["ForeignKey"].data<int>()=0;
199  // set next 3 depending on object identity, so can check on read back
200  data["IntObj"].data<int>()=obj;
201  data["IntChan"].data<int>()=chan;
202  data["IntIOV"].data<int>()=iov2;
203  // other data
204  data["Float1"].data<float>()=0.5+obj+chan+iov2;
205  data["Double1"].data<double>()=0.6+obj+chan+iov2;
206  data["UInt1"].data<unsigned int>()=iov2+chan+obj;
207  // use SEAL platform independent-types to access 64 bit ints
208  // works on 32 and 64 bit machines
209  data["LongLong1"].data<cool::Int64>()=iov2*100000+chan*1000+obj;
210  data["ULongLong1"].data<cool::UInt63>()=iov2+chan+2*obj;
211  data["String1"].data<std::string>()="A test string of data";
212  // setting up data for a blob object
213  if (m_blob) {
214  coral::Blob& blob=data["Blob1"].data<coral::Blob>();
215  blob.resize(m_blobsize);
216  unsigned char* p=static_cast<unsigned char*>(blob.startingAddress());
217  for (int i=0;i<m_blobsize;++i,++p) *p=(i+iov2+chan+obj) % 256;
218  }
219  return data;
220 }
221 
223  int retcode=0;
224  if (m_write) {
225  if (write()==false) {
226  std::cout << "CoraCoolExample FAILURE from write" << std::endl;
227  retcode+=1;
228  }
229  }
230  if (m_read) {
231  if (read()==false) {
232  std::cout << "CoraCoolExample FAILURE from read" << std::endl;
233  retcode+=2;
234  }
235  }
236  if (m_check) {
237  if (checkAPI()==false) retcode+=4;
238  }
239  return retcode;
240 }
241 
244  // loop over all folders
245  std::vector<std::string>::const_iterator ctitr=m_coraltable.begin();
246  for (std::vector<std::string>::const_iterator fitr=m_foldername.begin();
247  fitr!=m_foldername.end();++fitr,++ctitr) {
248  // check if previous attempt needs to be deleted
249  // does the folder exist already?
250  if (m_delete && m_coradb->existsFolder(*fitr)) {
251  try {
252  std::cout << "Deleting existing folder " << *fitr << std::endl;
253  m_coradb->deleteFolder(*fitr);
254  std::cout << "Folder deleted" << std::endl;
255  }
256  catch (cool::Exception& e) {
257  std::cout << "Problem deleting folder: " << e.what() << std::endl;
258  return false;
259  }
260  }
261  if (!m_coradb->existsFolder(*fitr)) {
262  // create the test folder
263  std::cout << "Creating folder with name " << *fitr << std::endl;
264  // description string to allow folder to be read in Athena
265  std::string desc="<timeStamp>run-event</timeStamp><addrHeader><address_header service_type=\"71\" clid=\"55403898\" /></addrHeader><typeName>CondAttrListVec</typeName>";
266  try {
267  folder=m_coradb->createFolder(
268  *fitr,*ctitr,m_fkspec,m_payloadspec,
269  "ForeignKey","PrimKey",desc,
270  cool::FolderVersioning::SINGLE_VERSION,true);
271  std::cout << "Folder " << *fitr << " created" << std::endl;
272  }
273  catch (cool::Exception& e) {
274  std::cout << "Problem creating folder: " << e.what() << std::endl;
275  return false;
276  }
277  } else {
278  folder=m_coradb->getFolder(*fitr);
279  }
280 
281  // now write data
282  int nobj=0;
283  for (int iiov=0;iiov<m_niov;++iiov) {
284  // bulk operation is inside loop to avoid problems with SV multichannel
285  // insert
286  if (m_bulk) folder->setupStorageBuffer();
287  int iovx=iiov*m_iovinc+m_iov1;
288  for (int ichan=0;ichan<m_nchan;++ichan) {
289  // prepare data
290  std::vector<coral::AttributeList> datavec;
291  for (int iobj=0;iobj<m_nobj;++iobj) {
293  datavec.push_back(adata);
294  }
295  try {
296  int fkey=folder->storeObject(iovx,iovx+m_iovinc,datavec.begin(),
297  datavec.end(),ichan);
298  ++nobj;
299  if (m_writeadj) {
300  // add aditional rows
301  std::vector<coral::AttributeList> datavec2;
302  for (int iobj=0;iobj<m_nobj;++iobj) {
303  coral::AttributeList adata=
304  makeAttrList(folder,iobj+m_nobj,ichan,iovx);
305  adata["ForeignKey"].data<int>()=fkey;
306  datavec2.push_back(adata);
307  }
308  folder->addPayload(datavec2.begin(),datavec2.end());
309  }
310  if (m_writeref) {
311  // add additional IOV for later run, also referencing this data
312  int iov2=iovx+m_iovinc*m_niov;
313  folder->referenceObject(iov2,iov2+m_iovinc,fkey,ichan);
314  }
315  }
316  catch (cool::Exception& e) {
317  std::cout << "Problem writing data: " << e.what() << std::endl;
318  return false;
319  }
320  }
321  if (m_bulk) folder->flushStorageBuffer();
322  }
323  std::cout << "Written " << nobj << " objects to folder " << *fitr <<
324  std::endl;
325  }
326  return true;
327 }
328 
330  // loop over folders
331  int nerr=0;
332  for (std::vector<std::string>::const_iterator fitr=m_foldername.begin();
333  fitr!=m_foldername.end();++fitr) {
334  std::cout << "Read back data from folder " << *fitr << std::endl;
336  try {
337  folder=m_coradb->getFolder(*fitr);
338  }
339  catch (cool::Exception& e) {
340  std::cout << "Exception during getFolder: " << e.what() << std::endl;
341  return false;
342  }
343  int nobj=0;
344  // printout specification of folder
345  const cool::IRecordSpecification& spec=
346  folder->payloadSpecification();
347  for (unsigned int i=0;i<spec.size();++i) {
348  std::cout << "Payload column: " << spec[i].name() << " type: " <<
349  spec[i].storageType().name() << std::endl;
350  }
351  int nrep=1;
352  if (m_writeref) nrep=2;
353  for (int iiov=0;iiov<m_niov*nrep;++iiov) {
354  int iovx=iiov*m_iovinc+m_iov1;
355  // bulk read at a point in time - get all channels valid at this time
356  CoraCoolObjectIterPtr itr=folder->browseObjects(iovx,cool::ChannelSelection::all());
357  while (itr->hasNext()) {
358  CoraCoolObjectPtr obj=itr->next();
359  // check the returned object against what was stored in the write method
360  int iobj=0;
361  for (CoraCoolObject::const_iterator payitr=obj->begin();
362  payitr!=obj->end();++payitr,++iobj) {
363  // construct the expected object to compare
364  int iobj2=(*payitr)["IntObj"].data<int>();
366  obj->channelId(),iovx);
367  // check all fields except the first two (primary and foreign keys)
368  // which are reassigned by CoraCool
369  bool match=(expect.size()==payitr->size() && expect.size()>2);
370  if (match) {
371  for (unsigned int i=2;i<expect.size();++i) {
372  std::string dtype=expect[i].specification().typeName();
373  bool failmatch=false;
374  if (dtype=="int" || dtype=="unsigned int" || dtype=="long long" ||
375  dtype=="std::string") {
376  failmatch=(expect[i]!=(*payitr)[i]);
377  } else if (dtype=="float") {
378  failmatch=(fabsf(expect[i].data<float>()-
379  (*payitr)[i].data<float>())>1.E-3);
380  } else if (dtype=="double") {
381  failmatch=(fabs(expect[i].data<double>()-
382  (*payitr)[i].data<double>())>1.E-3);
383  } else if (dtype=="blob") {
384  // coral defines comparison operator for blobs internally
385  failmatch=(expect[i]!=(*payitr)[i]);
386  }
387  if (failmatch) {
388  match=false;
389  std::cout << expect[i].specification().name() << " does not match" << std::endl;
390  }
391  }
392  }
393  if (!match) {
394  std::cout << "Objects do not match for object/channel/iov "
395  << iobj << "/" << obj->channelId() << "/" << iiov <<
396  std::endl;
397  std::cout << "Read from DB: ";
398  (*payitr).toOutputStream(std::cout);
399  std::cout << std::endl << "Expected object: ";
400  expect.toOutputStream(std::cout);
401  std::cout << std::endl;
402  ++nerr;
403  }
404  }
405  ++nobj;
406  }
407  }
408  std::cout << "Read a total of " << nobj << " objects from CoraCool folder "
409  << *fitr << " with " << nerr << " errors" << std::endl;
410  }
411  return (nerr==0);
412 }
413 
415  // this routine is suppposed to check all calls of the CoraCool API
416  std::cout << "Check API not implemented yet" << std::endl;
417  return true;
418 }
419 
420 int main ATLAS_NOT_THREAD_SAFE (int argc, const char* argv[]) {
421  if (argc<2) {
422  std::cout << "Syntax: CoraCoolExample.exe <dbConnection> { <options> ...}"
423  << std::endl;
424  std::cout << "See package mainpage.h for more information" << std::endl;
425  return 1;
426  }
427  std::string options="rw";
428  if (argc>2) options=argv[2];
429  std::string folder="/CoraCool/Test1";
430  if (argc>3) folder=argv[3];
431  int nfolder=1;
432  if (argc>4) nfolder=atoi(argv[4]);
433  int nobj=20;
434  if (argc>5) nobj=atoi(argv[5]);
435  int nchan=10;
436  if (argc>6) nchan=atoi(argv[6]);
437  int niov=5;
438  if (argc>7) niov=atoi(argv[7]);
439  int iov1=0;
440  if (argc>8) iov1=atoi(argv[8]);
441  int iovinc=1;
442  if (argc>9) iovinc=atoi(argv[9]);
443  int retcode=0;
444  try {
445  CoraCoolExample myexample(argv[1],options,folder,nfolder,
446  nobj,nchan,niov,iov1,iovinc);
447  retcode=myexample.execute();
448  }
449  catch (std::exception& e) {
450  std::cout << "Exception thrown from CoraCoolExample: " << e.what()
451  << std::endl;
452  retcode=16;
453  }
454  if (retcode==0) {
455  std::cout << "CoraCoolExample SUCCESS" << std::endl;
456  } else {
457  std::cout << "CoraCoolExample FAILURE with return code " <<
458  retcode << std::endl;
459  }
460  return retcode;
461 }
462 
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
PlotCalibFromCool.iov1
iov1
Definition: PlotCalibFromCool.py:382
dqt_zlumi_alleff_HIST.iov
iov
Definition: dqt_zlumi_alleff_HIST.py:119
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
CoraCoolExample::m_payloadspec
cool::RecordSpecification m_payloadspec
Definition: CoraCoolExample.cxx:60
CoraCoolExample::m_iovinc
const int m_iovinc
Definition: CoraCoolExample.cxx:45
CoraCoolDatabaseSvc.h
CoraCoolExample::m_blob
bool m_blob
Definition: CoraCoolExample.cxx:50
PlotCalibFromCool.dtype
dtype
Definition: PlotCalibFromCool.py:495
CaloCondBlobAlgs_fillNoiseFromASCII.spec
spec
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:47
CoraCoolExample::m_bulk
bool m_bulk
Definition: CoraCoolExample.cxx:54
createCoolChannelIdFile.dbstring
dbstring
Definition: createCoolChannelIdFile.py:31
CoraCoolExample::m_readonly
bool m_readonly
Definition: CoraCoolExample.cxx:53
CoraCoolExample::m_dbstring
const std::string m_dbstring
Definition: CoraCoolExample.cxx:39
PlotCalibFromCool.nchan
nchan
Definition: PlotCalibFromCool.py:564
python.subdetectors.tile.Blob
Blob
Definition: tile.py:17
CoraCoolDatabaseSvc
Definition: CoraCoolDatabaseSvc.h:25
CoraCoolExample::m_coradb
CoraCoolDatabasePtr m_coradb
Definition: CoraCoolExample.cxx:57
LArCellConditions.argv
argv
Definition: LArCellConditions.py:112
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
CoraCoolExample::m_writeref
bool m_writeref
Definition: CoraCoolExample.cxx:51
CoraCoolObject.h
CoraCoolExample::m_iov1
const int m_iov1
Definition: CoraCoolExample.cxx:44
defineDB.folders
list folders
Definition: JetTagCalibration/share/defineDB.py:26
main
int main(int, char **)
Main class for all the CppUnit test classes
Definition: CppUnit_SGtestdriver.cxx:141
CoraCoolObject::const_iterator
AttrListVec::const_iterator const_iterator
Definition: CoraCoolObject.h:23
CoraCoolExample::m_check
bool m_check
Definition: CoraCoolExample.cxx:48
CoraCoolExample::m_fkspec
cool::RecordSpecification m_fkspec
Definition: CoraCoolExample.cxx:61
CaloCondBlobAlgs_fillNoiseFromASCII.desc
desc
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:54
CoraCoolExample::m_read
bool m_read
Definition: CoraCoolExample.cxx:46
lumiFormat.i
int i
Definition: lumiFormat.py:92
CoraCoolExample::m_nobj
const int m_nobj
Definition: CoraCoolExample.cxx:41
CoraCoolExample::m_writeadj
bool m_writeadj
Definition: CoraCoolExample.cxx:52
ReadCellNoiseFromCool.chan
chan
Definition: ReadCellNoiseFromCool.py:52
calibdata.exception
exception
Definition: calibdata.py:496
python.AtlRunQueryLib.options
options
Definition: AtlRunQueryLib.py:379
DQHistogramMergeRegExp.argc
argc
Definition: DQHistogramMergeRegExp.py:20
CoraCoolExample::m_foldername
std::vector< std::string > m_foldername
Definition: CoraCoolExample.cxx:40
CoraCoolExample::m_delete
bool m_delete
Definition: CoraCoolExample.cxx:49
CoraCoolFolderPtr
boost::shared_ptr< CoraCoolFolder > CoraCoolFolderPtr
Definition: CoraCoolTypes.h:15
LArConditions2Ntuple.fld
string fld
Definition: LArConditions2Ntuple.py:283
CoraCoolDatabasePtr
boost::shared_ptr< CoraCoolDatabase > CoraCoolDatabasePtr
Definition: CoraCoolTypes.h:12
CoraCoolFolder.h
CoraCoolDatabaseSvc::openDatabase
CoraCoolDatabasePtr openDatabase(const std::string &dbconn, cool::IDatabasePtr cooldb, bool readonly=false)
Definition: CoraCoolDatabaseSvc.cxx:23
CoraCoolExample::m_cooldb
cool::IDatabasePtr m_cooldb
Definition: CoraCoolExample.cxx:58
CoraCoolExample::CoraCoolExample
CoraCoolExample(const std::string &dbstring, const std::string &options, const std::string &folder, const int nfolder, const int nobj, const int nchan, const int niov, const int iov1, const int iovinc) ATLAS_CTORDTOR_NOT_THREAD_SAFE
Definition: CoraCoolExample.cxx:65
defineDB.ichan
int ichan
Definition: JetTagCalibration/share/defineDB.py:28
ATLAS_NOT_THREAD_SAFE
int main ATLAS_NOT_THREAD_SAFE(int argc, const char *argv[])
Definition: CoraCoolExample.cxx:420
CoraCoolExample::m_nchan
const int m_nchan
Definition: CoraCoolExample.cxx:42
CoraCoolExample::m_coraltable
std::vector< std::string > m_coraltable
Definition: CoraCoolExample.cxx:55
CoraCoolExample::m_niov
const int m_niov
Definition: CoraCoolExample.cxx:43
Cut::all
@ all
Definition: SUSYToolsAlg.cxx:64
PlotCalibFromCool.iov2
iov2
Definition: PlotCalibFromCool.py:384
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
CoraCoolObjectIterPtr
boost::shared_ptr< CoraCoolObjectIter > CoraCoolObjectIterPtr
Definition: CoraCoolTypes.h:21
CoraCoolObjectPtr
boost::shared_ptr< CoraCoolObject > CoraCoolObjectPtr
Definition: CoraCoolTypes.h:18
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
CoraCoolDatabase.h
CaloCondBlobAlgs_fillNoiseFromASCII.folder
folder
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:56
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
CoraCoolObjectIter.h
ATLAS_CTORDTOR_NOT_THREAD_SAFE
#define ATLAS_CTORDTOR_NOT_THREAD_SAFE
Definition: checker_macros.h:213
CoraCoolExample::makeAttrList
coral::AttributeList makeAttrList(const CoraCoolFolderPtr fld, const int obj, const int chan, const int iov)
Definition: CoraCoolExample.cxx:187
CoraCoolExample::m_write
bool m_write
Definition: CoraCoolExample.cxx:47
CoraCoolDatabaseSvcFactory.h
CoraCoolExample::read
bool read()
Definition: CoraCoolExample.cxx:329
checker_macros.h
Define macros for attributes used to control the static checker.
python.PyAthena.obj
obj
Definition: PyAthena.py:135
CoraCoolExample::m_blobsize
int m_blobsize
Definition: CoraCoolExample.cxx:62
CoraCoolExample::execute
int execute()
Definition: CoraCoolExample.cxx:222
CoraCoolExample::write
bool write()
Definition: CoraCoolExample.cxx:242
CoraCoolExample::checkAPI
bool checkAPI()
Definition: CoraCoolExample.cxx:414
CaloCondBlobAlgs_fillNoiseFromASCII.blob
blob
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:96
match
bool match(std::string s1, std::string s2)
match the individual directories of two strings
Definition: hcg.cxx:356
CoraCoolExample
Definition: CoraCoolExample.cxx:24