00001
00008 #include "TreeCalBaseCnv.h"
00009
00010 #include "GaudiKernel/CnvFactory.h"
00011 #include "GaudiKernel/IOpaqueAddress.h"
00012 #include "GaudiKernel/DataObject.h"
00013 #include "GaudiKernel/IAddressCreator.h"
00014 #include "GaudiKernel/IDataProviderSvc.h"
00015 #include "GaudiKernel/IConversionSvc.h"
00016 #include "GaudiKernel/MsgStream.h"
00017
00018 #include "facilities/Util.h"
00019 #include "CalibDataSvc/ICalibRootSvc.h"
00020 #include "CalibDataSvc/ICalibMetaCnvSvc.h"
00021 #include "CalibDataSvc/IInstrumentName.h"
00022 #include "CalibData/CalibBase.h"
00023 #include "CalibData/CalibBase1.h"
00024
00025 #include "TROOT.h"
00026 #include "TFile.h"
00027 #include "TTree.h"
00028 #include "TObject.h"
00029 #include "DatabaseSvc/IDatabaseSvc.h"
00030 #include "CalibMySQLCnv/TreeAddress.h"
00031
00032 TreeCalBaseCnv::~TreeCalBaseCnv() {
00033
00034
00035
00036
00037
00038 }
00039
00040
00041
00042 TreeCalBaseCnv::TreeCalBaseCnv( ISvcLocator* svc, const CLID& clid) :
00043 Converter (CALIBTREE_StorageType, clid, svc),
00044 m_treeSvc (0), m_metaSvc(0), m_instrSvc(0),m_outFile(0), m_ttree(0), m_inFile(0), m_saveDir(0) {}
00045
00046 StatusCode TreeCalBaseCnv::initialize() {
00047 StatusCode status = Converter::initialize();
00048
00049 IDataProviderSvc* dp;
00050
00051
00052
00053
00054
00055
00056 serviceLocator()->getService ("CalibDataSvc",
00057 IDataProviderSvc::interfaceID(),
00058 (IInterface*&)dp);
00059 setDataProvider(dp);
00060
00061
00062 serviceLocator()->getService ("CalibTreeCnvSvc",
00063 IID_ICalibTreeSvc,
00064 (IInterface*&) m_treeSvc);
00065
00066
00067
00068
00069
00070
00071 serviceLocator()->getService("CalibMySQLCnvSvc",
00072 IID_ICalibMetaCnvSvc,
00073 (IInterface*&)m_metaSvc);
00074
00075 serviceLocator()->getService ("CalibDataSvc",
00076 IID_IInstrumentName,
00077 (IInterface*&)m_instrSvc);
00078
00079 return status;
00080 }
00081
00082 StatusCode TreeCalBaseCnv::finalize() {
00083 return Converter::finalize();
00084 }
00085
00086
00087
00088
00089 StatusCode TreeCalBaseCnv::createRoot(const std::string& ,
00090 CalibData::CalibBase1* ) {
00091 MsgStream log(msgSvc(), "TreeCalBaseCnv");
00092 log << MSG::ERROR
00093 << "createRoot method not implemented for this calibration type"
00094 << endreq;
00095 return StatusCode::FAILURE;
00096 }
00097
00098
00099
00100 StatusCode TreeCalBaseCnv::fillRoot(CalibData::CalibBase* ,
00101 TObject* ) {
00102
00103
00104
00105
00106
00107 return StatusCode::SUCCESS;
00108 }
00109
00110
00111 StatusCode TreeCalBaseCnv::createObj(IOpaqueAddress* addr,
00112 DataObject*& refpObject) {
00113
00114
00115
00116
00117 MsgStream log(msgSvc(), "TreeCalBaseCnv");
00118 log << MSG::DEBUG<<"TreeCalBaseCnv::createObj( starting ...."<<endreq;
00119
00120
00121
00122
00123
00124 return internalCreateObj(refpObject, addr);
00125
00126 }
00127
00128
00129
00130
00131 StatusCode TreeCalBaseCnv::internalCreateObj(DataObject*& refpObject,
00132 IOpaqueAddress* address) {
00133
00134 MsgStream log(msgSvc(), "TreeCalBaseCnv");
00135 log << MSG::DEBUG<<"TreeCalBaseCnv::internalCreateObj( starting ..... "<<endreq;
00136 TreeCalBaseCnv* converter = this;
00137 CLID classId = address->clID();
00138
00139 IConverter* conv = this->conversionSvc()->converter(classId);
00140 if (0 == conv) {
00141 log << MSG::WARNING
00142 << "No proper converter found for classID " << classId
00143 << ", the default converter"
00144 << " will be used. " << endreq;
00145 } else {
00146 converter = dynamic_cast <TreeCalBaseCnv*> (conv);
00147 if (0 == converter) {
00148 log << MSG::ERROR
00149 << "The converter found for classID " << classId
00150 << " was not a descendent of TreeCalBaseCnv as it should be "
00151 << "( was of type " << typeid (*converter).name() << "). "
00152 << "The default converter will be used" << endreq;
00153 converter = this;
00154 }
00155 }
00156
00157 TreeAddress* treeAddress = dynamic_cast <TreeAddress*> (address);
00158 m_runfrm = treeAddress->getRunFrom();
00159 m_runto = treeAddress->getRunTo();
00160
00161
00162
00163
00164
00165 StatusCode sc = converter->i_createObj(address, refpObject);
00166 if (sc.isFailure()) {
00167 return sc;
00168 }
00169 CalibData::CalibBase1* tmpObject = dynamic_cast <CalibData::CalibBase1*> (refpObject);
00170 setBaseInfo(tmpObject);
00171
00172 sc = converter->i_processObj(refpObject, address);
00173 if (sc.isSuccess()) {
00174 log << MSG::DEBUG << "Successfully created calib. object " << endreq;
00175 }
00176
00177 return sc;
00178 }
00179
00180
00181
00182
00183
00184 StatusCode TreeCalBaseCnv::i_createObj (IOpaqueAddress* address,
00185 DataObject*& ) {
00186 return StatusCode::FAILURE;
00187 }
00188
00189
00190 StatusCode TreeCalBaseCnv::i_processObj(DataObject*,
00191 IOpaqueAddress* ) {
00192 return StatusCode::SUCCESS;
00193 }
00194
00196 void TreeCalBaseCnv::setBaseInfo(CalibData::CalibBase1* pObj) {
00197 MsgStream log(msgSvc(), "TreeCalBaseCnv");
00198 log << MSG::DEBUG<<"set the runfrm and runto Numbers in the converter"<<endreq;
00199 pObj->setrunfrm(m_runfrm);
00200 pObj->setrunto(m_runto);
00201 }