#include <TreeCalBaseCnv.h>
Inheritance diagram for TreeCalBaseCnv:
Public Types | |
typedef Ty1 | source |
typedef Ty2 | destination |
Public Member Functions | |
virtual | ~TreeCalBaseCnv () |
virtual StatusCode | initialize () |
virtual StatusCode | finalize () |
virtual StatusCode | createObj (IOpaqueAddress *addr, DataObject *&refpObject) |
ICalibTreeSvc * | getCalibTreeSvc () |
TreeCalBaseCnv (ISvcLocator *svc, const CLID &clid) | |
virtual StatusCode | createRoot (const std::string &fname, CalibData::CalibBase1 *pTDSObj) |
destination * | operator (const source &) const |
Static Public Member Functions | |
static const unsigned char | storageType () |
Protected Member Functions | |
virtual StatusCode | internalCreateObj (DataObject *&refpObject, IOpaqueAddress *address) |
virtual StatusCode | i_createObj (IOpaqueAddress *address, DataObject *&refpObject) |
virtual StatusCode | i_processObj (DataObject *pObject, IOpaqueAddress *address) |
In case there is additional work to do on the created object. | |
virtual StatusCode | fillRoot (CalibData::CalibBase *pTDSObj, TObject *pRootObj) |
void | setBaseInfo (CalibData::CalibBase1 *pObj) |
Another utility for derived classes to use. | |
virtual destination * | convert (const source &) const =0 |
Protected Attributes | |
ICalibTreeSvc * | m_treeSvc |
ICalibMetaCnvSvc * | m_metaSvc |
IInstrumentName * | m_instrSvc |
int | m_serNo |
int | m_runfrm |
int | m_runto |
TFile * | m_outFile |
TTree * | m_ttree |
TFile * | m_inFile |
TDirectory * | m_saveDir |
Private Member Functions | |
bool | doClean () |
Definition at line 39 of file TreeCalBaseCnv.h.
typedef Ty2 Converter< Ty1, Ty2 >::destination [inherited] |
Definition at line 19 of file Converter.h.
Definition at line 18 of file Converter.h.
TreeCalBaseCnv::~TreeCalBaseCnv | ( | ) | [virtual] |
Definition at line 32 of file TreeCalBaseCnv.cxx.
00032 { 00033 // release TFile, TTree if they need releasing. With normal 00034 // termination they should already have been released. 00035 00036 // doClean(); 00037 00038 }
TreeCalBaseCnv::TreeCalBaseCnv | ( | ISvcLocator * | svc, | |
const CLID & | clid | |||
) |
Constructor for this converter
svc | a ISvcLocator interface to find services | |
clid | the type of object the converter is able to convert |
Definition at line 42 of file TreeCalBaseCnv.cxx.
00042 : 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) {}
virtual destination* Converter< Ty1, Ty2 >::convert | ( | const source & | ) | const [protected, pure virtual, inherited] |
StatusCode TreeCalBaseCnv::createObj | ( | IOpaqueAddress * | addr, | |
DataObject *& | refpObject | |||
) | [virtual] |
Create the transient representation of an object, given an opaque address. This and the following update method comprise the core functionality of calibration converters.
Definition at line 111 of file TreeCalBaseCnv.cxx.
References Bes_Common::DEBUG, internalCreateObj(), and msgSvc().
00112 { 00113 // StatusCode ret; 00114 00115 // first do the things we always need: 00116 // First string parameter of opaque address is file ident 00117 MsgStream log(msgSvc(), "TreeCalBaseCnv"); 00118 log << MSG::DEBUG<<"TreeCalBaseCnv::createObj( starting ...."<<endreq; 00119 // const std::string* par = addr->par(); 00120 00121 // std::string par0 = par[0]; 00122 00123 // return internalCreateObj(par0, refpObject, addr); 00124 return internalCreateObj(refpObject, addr); 00125 00126 }
StatusCode TreeCalBaseCnv::createRoot | ( | const std::string & | fname, | |
CalibData::CalibBase1 * | pTDSObj | |||
) | [virtual] |
Create ROOT file corresponding to TDS object input. Default implementation is to return an error. Must be separately implemented for each calibration type.
fname | Filename for output file | |
pTDSObj | Pointer to tds object to be converted |
Definition at line 89 of file TreeCalBaseCnv.cxx.
References calibUtil::ERROR, and msgSvc().
00090 { 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 }
bool TreeCalBaseCnv::doClean | ( | ) | [private] |
StatusCode TreeCalBaseCnv::fillRoot | ( | CalibData::CalibBase * | pTDSObj, | |
TObject * | pRootObj | |||
) | [protected, virtual] |
Given a pointer to a TDS object which can be cast to "our" type, fill in corresponding information in the corresponding root class
pTDSObj | Pointer to tds object to be converted | |
pRootObj | Pointer to destination root object |
Definition at line 100 of file TreeCalBaseCnv.cxx.
00101 { 00102 00103 // Get instrument name from InstrumentName service Now handled by 00104 // TreeCalBaseCnv 00105 // TString instr = TString((m_instrSvc->getInstrumentName()).c_str()); 00106 // pRootObj->setInstrument(instr); 00107 return StatusCode::SUCCESS; 00108 }
StatusCode TreeCalBaseCnv::finalize | ( | ) | [virtual] |
ICalibTreeSvc* TreeCalBaseCnv::getCalibTreeSvc | ( | ) | [inline] |
Definition at line 58 of file TreeCalBaseCnv.h.
References m_treeSvc.
00058 { 00059 return m_treeSvc; 00060 }
StatusCode TreeCalBaseCnv::i_createObj | ( | IOpaqueAddress * | address, | |
DataObject *& | refpObject | |||
) | [protected, virtual] |
This creates the transient representation of an object from the corresponding ROOT object. This actually does the "new" operation and deals with the attributes of the node. This base class implementation does nothing; it should not normally be called because it doesn't correspond to any TCDS class. Instead, i_createObj of some derived class will be called.
fname | The ROOT file to be read in to be used to builds the object | |
refpObject | the object to be built |
Reimplemented in TreeDedxCalibDataCnv, TreeDedxSimDataCnv, TreeEmcCalibDataCnv, TreeEsTimeCalibDataCnv, TreeEstTofCalibDataCnv, TreeMdcAlignDataCnv, TreeMdcCalibDataCnv, TreeMdcDataConstCnv, TreeMucCalibDataCnv, TreeTofCalibDataCnv, TreeTofElecDataCnv, and TreeTofSimDataCnv.
Definition at line 184 of file TreeCalBaseCnv.cxx.
Referenced by internalCreateObj().
StatusCode TreeCalBaseCnv::i_processObj | ( | DataObject * | pObject, | |
IOpaqueAddress * | address | |||
) | [protected, virtual] |
In case there is additional work to do on the created object.
Definition at line 190 of file TreeCalBaseCnv.cxx.
Referenced by internalCreateObj().
StatusCode TreeCalBaseCnv::initialize | ( | ) | [virtual] |
Definition at line 46 of file TreeCalBaseCnv.cxx.
References IID_ICalibMetaCnvSvc(), IID_ICalibTreeSvc(), IID_IInstrumentName(), m_instrSvc, m_metaSvc, and m_treeSvc.
00046 { 00047 StatusCode status = Converter::initialize(); 00048 00049 IDataProviderSvc* dp; 00050 00051 // I guess the service names are assigned in jobOptions? 00052 00053 /* serviceLocator()->getService ("CalibDataSvc", 00054 IID_IDataProviderSvc, 00055 (IInterface*&)dp);*/ 00056 serviceLocator()->getService ("CalibDataSvc", 00057 IDataProviderSvc::interfaceID(), 00058 (IInterface*&)dp); 00059 setDataProvider(dp); 00060 00061 // Locate the Root Conversion Service 00062 serviceLocator()->getService ("CalibTreeCnvSvc", 00063 IID_ICalibTreeSvc, 00064 (IInterface*&) m_treeSvc); 00065 00066 // Locate meta conversion service 00067 // Will anything need to be changed here to accommodate possibility 00068 // of two concrete implementations of ICalibMetaCnvSvc? Would 00069 // have different storage types. Could specify type desired 00070 // as job option. Ditto for name of class? 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 }
StatusCode TreeCalBaseCnv::internalCreateObj | ( | DataObject *& | refpObject, | |
IOpaqueAddress * | address | |||
) | [protected, virtual] |
This creates the transient representation of an object from the corresponding ROOT object it, then fills it and process it. This implementation actually only calls the i_* methods of the "right" converter to do the job; so the very first thing it does is get a pointer to the appropriate derived converter. Converters typically don't need to override this method but only to override/implement some of the i_* methods.
pRootObj | pointer to the ROOT object | |
refpObject | the object to be built | |
address | the opaque address for this object |
Definition at line 131 of file TreeCalBaseCnv.cxx.
References Bes_Common::DEBUG, calibUtil::ERROR, TreeAddress::getRunFrom(), TreeAddress::getRunTo(), i_createObj(), i_processObj(), m_runfrm, m_runto, msgSvc(), setBaseInfo(), and Bes_Common::WARNING.
Referenced by createObj().
00132 { 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 //m_runfrm =*( address->ipar()); 00161 //m_runto =*( address->ipar()+1); 00162 // m_runfrm = 100; 00163 // m_runto =1000; 00164 // creates an object for the node found 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 // ends up the object construction 00172 sc = converter->i_processObj(refpObject, address); 00173 if (sc.isSuccess()) { 00174 log << MSG::DEBUG << "Successfully created calib. object " << endreq; 00175 } 00176 // closeRead(); 00177 return sc; 00178 }
destination* Converter< Ty1, Ty2 >::operator | ( | const source & | ) | const [inline, inherited] |
void TreeCalBaseCnv::setBaseInfo | ( | CalibData::CalibBase1 * | pObj | ) | [protected] |
Another utility for derived classes to use.
Another convenience for derived classes: sets information belonging to the calibration base class, namely validity interval and serial number.
Definition at line 196 of file TreeCalBaseCnv.cxx.
References Bes_Common::DEBUG, m_runfrm, m_runto, msgSvc(), CalibData::CalibBase1::setrunfrm(), and CalibData::CalibBase1::setrunto().
Referenced by internalCreateObj().
00196 { 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 }
static const unsigned char TreeCalBaseCnv::storageType | ( | ) | [inline, static] |
Definition at line 62 of file TreeCalBaseCnv.h.
References CALIBTREE_StorageType.
00062 {return CALIBTREE_StorageType;}
TFile* TreeCalBaseCnv::m_inFile [protected] |
Definition at line 212 of file TreeCalBaseCnv.h.
IInstrumentName* TreeCalBaseCnv::m_instrSvc [protected] |
ICalibMetaCnvSvc* TreeCalBaseCnv::m_metaSvc [protected] |
TFile* TreeCalBaseCnv::m_outFile [protected] |
Definition at line 209 of file TreeCalBaseCnv.h.
int TreeCalBaseCnv::m_runfrm [protected] |
Definition at line 205 of file TreeCalBaseCnv.h.
Referenced by internalCreateObj(), and setBaseInfo().
int TreeCalBaseCnv::m_runto [protected] |
Definition at line 206 of file TreeCalBaseCnv.h.
Referenced by internalCreateObj(), and setBaseInfo().
TDirectory* TreeCalBaseCnv::m_saveDir [protected] |
Definition at line 214 of file TreeCalBaseCnv.h.
int TreeCalBaseCnv::m_serNo [protected] |
Definition at line 204 of file TreeCalBaseCnv.h.
ICalibTreeSvc* TreeCalBaseCnv::m_treeSvc [protected] |
TTree* TreeCalBaseCnv::m_ttree [protected] |
Definition at line 210 of file TreeCalBaseCnv.h.