ATLAS Offline Software
Loading...
Searching...
No Matches
BunchGroupSetLoader.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
7#include "./DBHelper.h"
10
11#include <iostream>
12#include <stdexcept>
13#include <typeinfo>
14
15using namespace std;
16
17bool
19
20 TRG_MSG_INFO("Loading BunchGroupSet with ID = " << data.id());
21 try {
22
23 {
25 unique_ptr<coral::IQuery> q(m_session.nominalSchema().tableHandle( "L1_BUNCH_GROUP_SET").newQuery());
26 q->setRowCacheSize( 5 );
27
28 //Bind list
29 coral::AttributeList bindList;
30 bindList.extend<int>("bgsId");
31 bindList[0].data<int>() = (int)data.id();
32 q->setCondition( "L1BGS_ID = :bgsId", bindList );
33
34 //Output data and types
35 coral::AttributeList attList;
36 attList.extend<std::string>( "L1BGS_NAME" );
37 attList.extend<int>( "L1BGS_VERSION" );
38 attList.extend<std::string>( "L1BGS_COMMENT" );
39 fillQuery(q.get(),attList);
40
41 coral::ICursor& cursor = q->execute();
42
43 if ( ! cursor.next() ) {
44 TRG_MSG_ERROR("No such BGS exists " << data.id());
46 throw std::runtime_error( "BunchGroupSetLoader >> BunchGroupSet not available" );
47 }
48
49 const coral::AttributeList& row = cursor.currentRow();
50 string name = row["L1BGS_NAME"].data<std::string>();
51 int version = row["L1BGS_VERSION"].data<int>();
52 string comment = row["L1BGS_COMMENT"].data<std::string>();
53
54 if ( cursor.next() ) {
55 TRG_MSG_ERROR("More than one BunchGroupSet exists " << data.id());
57 throw std::runtime_error( "BunchGroupSetLoader >> BunchGroupSet not available" );
58 }
59
60 // fill the object with data
61 data.setName( name );
62 data.setVersion( version );
63 data.setComment( comment );
64 }
65
66 // now touch the l1_bgs_to_bg table to get the bunch groups.
67 {
68 unique_ptr<coral::IQuery> q( m_session.nominalSchema().tableHandle( "L1_BGS_TO_BG").newQuery() );
69 q->setRowCacheSize( 5 );
70
71 //binding
72 coral::AttributeList bindList;
73 bindList.extend<int>("bgsId");
74 bindList[0].data<int>() = (int)data.id();
75 q->setCondition( "L1BGS2BG_BUNCH_GROUP_SET_ID = :bgsId ", bindList );
76
77 //Output data and types
78 coral::AttributeList attList;
79 attList.extend<long>( "L1BGS2BG_BUNCH_GROUP_ID" );
80 attList.extend<long>( "L1BGS2BG_INTERNAL_NUMBER" );
81 if(isRun2()) {
82 attList.extend<string>( "L1BGS2BG_BUNCH_GROUP_NAME" );
83 }
84 fillQuery(q.get(),attList);
85
86 q->addToOrderList( "L1BGS2BG_INTERNAL_NUMBER" );
87
88 coral::ICursor& cursor = q->execute();
89
90 BunchGroupLoader& bgldr = dynamic_cast<BunchGroupLoader&>(dynamic_cast<StorageMgr&>(m_storageMgr).bunchGroupLoader() );
91 while( cursor.next() ) {
92 BunchGroup bg;
93 const coral::AttributeList& row = cursor.currentRow();
94
95 bg.setId(row["L1BGS2BG_BUNCH_GROUP_ID"].data<long>());
96 bg.setInternalNumber( row["L1BGS2BG_INTERNAL_NUMBER"].data<long>() );
97 if(isRun2()) {
98 bg.setName( row["L1BGS2BG_BUNCH_GROUP_NAME"].data<string>() );
99 }
100 if ( !bgldr.load( bg ) ) {
101 TRG_MSG_ERROR("loading BunchGroup " << bg.id() );
103 throw std::runtime_error( "BunchGroupSetLoader: Error loading BunchGroup" );
104 }
105
106 data.addBunchGroup(bg);
107 }
109 }
110
111 }
112 catch( const coral::Exception& e ) {
113 TRG_MSG_ERROR("Coral::Exception: " << e.what());
114 m_session.transaction().rollback();
115 throw;
116 }
117
118 return true;
119}
120
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
virtual bool load(BunchGroup &data) override
virtual bool load(BunchGroupSet &data) override
StorageMgr & m_storageMgr
reference to the storage manager
Definition DBLoader.h:67
void commitSession()
commit session if not already done
Definition DBLoader.cxx:45
coral::ISessionProxy & m_session
CORAL interface to database session.
Definition DBLoader.h:68
void startSession()
start session if not already active
Definition DBLoader.cxx:35
Database Storage Manager, controls the database session and the different loader classes for DB acces...
Definition StorageMgr.h:23
virtual IBunchGroupLoader & bunchGroupLoader() override
void fillQuery(coral::IQuery *q, coral::AttributeList &attList)
Definition DBHelper.cxx:13
STL namespace.