1 #include "marlin/MarlinConfig.h"
6 #include "lccd/IConditionsChangeListener.hh"
14 #include "lccd/SimpleFileHandler.hh"
15 #include "lccd/DBCondHandler.hh"
16 #include "lccd/DBFileHandler.hh"
17 #include "lccd/DataFileHandler.hh"
19 #include "lccd/LCConditionsMgr.hh"
23 using namespace lcio ;
29 ConditionsProcessor aConditionsProcessor ;
32 bool ConditionsProcessor::registerChangeListener( lccd::IConditionsChangeListener* cl,
const std::string& name) {
35 lccd::LCConditionsMgr::instance()->registerChangeListener( cl , name ) ;
44 ConditionsProcessor::ConditionsProcessor() : Processor(
"ConditionsProcessor") {
47 _description =
"ConditionsProcessor provides access to conditions data "
48 " transparently from LCIO files or a databases, using LCCD" ;
53 registerProcessorParameter(
"DBInit" ,
54 "Initialization string for conditions database" ,
60 dbcondExample.
push_back(
"conditionsName");
61 dbcondExample.
push_back(
"/lccd/myfolder");
65 registerOptionalParameter(
"DBCondHandler" ,
66 "Initialization of a conditions database handler" ,
69 dbcondExample.
size() ) ;
73 simpleExample.
push_back(
"conditionsName");
74 simpleExample.
push_back(
"conditions.slcio");
75 simpleExample.push_back(
"collectionName");
77 registerOptionalParameter(
"SimpleFileHandler" ,
78 "Initialization of a simple conditions file handler" ,
81 simpleExample.size() ) ;
84 dbfileExample.
push_back(
"conditionsName");
85 dbfileExample.
push_back(
"conditions.slcio");
86 dbfileExample.push_back(
"collectionName");
89 registerOptionalParameter(
"DBFileHandler" ,
90 "Initialization of a conditions db file handler" ,
93 dbfileExample.size() ) ;
97 datafileExample.
push_back(
"conditionsName");
99 registerOptionalParameter(
"DataFileHandler" ,
100 "Initialization of a data file handler" ,
101 _datafileHandlerInit ,
103 datafileExample.size() ) ;
111 void ConditionsProcessor::init() {
121 if( parameterSet(
"SimpleFileHandler" ) ) {
124 while( index < _simpleHandlerInit.size() ){
126 std::string condName( _simpleHandlerInit[ index++ ] ) ;
127 std::string fileName( _simpleHandlerInit[ index++ ] ) ;
128 std::string colName ( _simpleHandlerInit[ index++ ] ) ;
130 lccd::LCConditionsMgr::instance()->
131 registerHandler( condName ,
new lccd::SimpleFileHandler( fileName, condName, colName ) ) ;
133 _condHandlerNames.push_back( condName ) ;
138 if( parameterSet(
"DBCondHandler" ) ) {
141 while( index < _dbcondHandlerInit.size() ){
143 std::string condName( _dbcondHandlerInit[ index++ ] ) ;
144 std::string folder ( _dbcondHandlerInit[ index++ ] ) ;
145 std::string tag ( _dbcondHandlerInit[ index++ ] ) ;
148 if( tag ==
"HEAD" ) tag =
"" ;
150 lccd::LCConditionsMgr::instance()->
151 registerHandler( condName,
new lccd::DBCondHandler( _dbInit , folder , condName, tag ) ) ;
153 _condHandlerNames.push_back( condName ) ;
158 if( parameterSet(
"DBFileHandler" ) ) {
161 while( index < _dbfileHandlerInit.size() ){
163 std::string condName( _dbfileHandlerInit[ index++ ] ) ;
164 std::string fileName( _dbfileHandlerInit[ index++ ] ) ;
165 std::string colName ( _dbfileHandlerInit[ index++ ] ) ;
167 lccd::LCConditionsMgr::instance()->
168 registerHandler( condName ,
new lccd::DBFileHandler( fileName, condName, colName ) ) ;
170 _condHandlerNames.push_back( condName ) ;
175 if( parameterSet(
"DataFileHandler" ) ) {
178 while( index < _datafileHandlerInit.size() ){
180 std::string condName ( _datafileHandlerInit[ index++ ] ) ;
182 lccd::LCConditionsMgr::instance()->
183 registerHandler( condName ,
new lccd::DataFileHandler( condName ) ) ;
185 _condHandlerNames.push_back( condName ) ;
196 void ConditionsProcessor::processEvent( LCEvent * evt ) {
198 static int lastEvent = -1 ;
199 static int lastRun = -1 ;
203 if( evt->getEventNumber() != lastEvent || evt->getRunNumber() != lastRun ){
205 lccd::LCConditionsMgr::instance()->updateEvent( evt ) ;
207 lastEvent = evt->getEventNumber() ;
208 lastRun = evt->getRunNumber() ;
217 void ConditionsProcessor::end(){
220 for(
unsigned int i=0; i< _condHandlerNames.size() ; ++i){
222 lccd::LCConditionsMgr::instance()->removeHandler( _condHandlerNames[i] );
228 #endif // #ifdef MARLIN_LCCD