#include <TreeMdcCalibDataCnv.h>
Inheritance diagram for TreeMdcCalibDataCnv:
Public Types | |
typedef Ty2 | destination |
typedef Ty2 | destination |
typedef Ty1 | source |
typedef Ty1 | source |
Public Member Functions | |
virtual StatusCode | createObj (IOpaqueAddress *addr, DataObject *&refpObject) |
virtual StatusCode | createRoot (const std::string &fname, CalibData::CalibBase1 *pTDSObj) |
virtual StatusCode | finalize () |
ICalibTreeSvc * | getCalibTreeSvc () |
virtual StatusCode | initialize () |
const CLID & | objType () const |
destination * | operator (const source &) const |
destination * | operator (const source &) const |
virtual long | repSvcType () const |
TreeMdcCalibDataCnv (ISvcLocator *svc) | |
virtual | ~TreeMdcCalibDataCnv () |
Static Public Member Functions | |
const CLID & | classID () |
const unsigned char | storageType () |
Protected Member Functions | |
virtual destination * | convert (const source &) const =0 |
virtual destination * | convert (const source &) const =0 |
virtual StatusCode | fillRoot (CalibData::CalibBase *pTDSObj, TObject *pRootObj) |
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 | internalCreateObj (DataObject *&refpObject, IOpaqueAddress *address) |
void | setBaseInfo (CalibData::CalibBase1 *pObj) |
Another utility for derived classes to use. | |
Protected Attributes | |
TFile * | m_inFile |
IInstrumentName * | m_instrSvc |
ICalibMetaCnvSvc * | m_metaSvc |
TFile * | m_outFile |
int | m_runfrm |
int | m_runto |
TDirectory * | m_saveDir |
int | m_serNo |
ICalibTreeSvc * | m_treeSvc |
TTree * | m_ttree |
Friends | |
class | CnvFactory<TreeMdcCalibDataCnv> |
|
|
|
|
|
|
|
|
|
00031 : 00032 TreeCalBaseCnv(svc, CLID_Calib_MdcCal) { 00033 00034 }
|
|
00029 {};
|
|
00041 {
00042 return CLID_Calib_MdcCal;
00043 }
|
|
|
|
|
|
Create the transient representation of an object, given an opaque address. This and the following update method comprise the core functionality of calibration converters. 00108 { 00109 // StatusCode ret; 00110 00111 // first do the things we always need: 00112 // First string parameter of opaque address is file ident 00113 MsgStream log(msgSvc(), "TreeCalBaseCnv"); 00114 log << MSG::DEBUG<<"TreeCalBaseCnv::createObj( starting ...."<<endreq; 00115 // const std::string* par = addr->par(); 00116 00117 // std::string par0 = par[0]; 00118 00119 // return internalCreateObj(par0, refpObject, addr); 00120 return internalCreateObj(refpObject, addr); 00121 00122 }
|
|
Create ROOT file corresponding to TDS object input. Default implementation is to return an error. Must be separately implemented for each calibration type.
00086 { 00087 MsgStream log(msgSvc(), "TreeCalBaseCnv"); 00088 log << MSG::ERROR 00089 << "createRoot method not implemented for this calibration type" 00090 << endreq; 00091 return StatusCode::FAILURE; 00092 }
|
|
Given a pointer to a TDS object which can be cast to "our" type, fill in corresponding information in the corresponding root class
00097 { 00098 00099 // Get instrument name from InstrumentName service Now handled by 00100 // TreeCalBaseCnv 00101 // TString instr = TString((m_instrSvc->getInstrumentName()).c_str()); 00102 // pRootObj->setInstrument(instr); 00103 return StatusCode::SUCCESS; 00104 }
|
|
00078 {
00079 return Converter::finalize();
00080 }
|
|
00057 {
00058 return m_treeSvc;
00059 }
|
|
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.
Reimplemented from TreeCalBaseCnv. 00046 { 00047 00048 MsgStream log(msgSvc(), "TreeMdcCalibDataCnv"); 00049 log<<MSG::DEBUG<<"SetProperty"<<endreq; 00050 CalibData::MdcCalibData *tmpObject = new CalibData::MdcCalibData ; 00051 TreeAddress* add = dynamic_cast<TreeAddress*>(addr); 00052 DatabaseRecord *records=add->pp(); 00053 00054 TBuffer *buf1 = new TBuffer(TBuffer::kRead); 00055 TBuffer *buf2 = new TBuffer(TBuffer::kRead); 00056 TBuffer *buf3 = new TBuffer(TBuffer::kRead); 00057 TBuffer *buf4 = new TBuffer(TBuffer::kRead); 00058 00059 buf1->SetBuffer((*records)["XtTree"],512000,kFALSE); 00060 buf2->SetBuffer((*records)["QtTree"],512000,kFALSE); 00061 buf3->SetBuffer((*records)["T0Tree"],512000,kFALSE); 00062 buf4->SetBuffer((*records)["SdTree"],512000,kFALSE); 00063 00064 00065 std::cout<<" CalVerSft is "<<(*records)["CalParVer"]; 00066 std::cout<<" File name is "<<(*records)["FileName"]<<std::endl; 00067 00068 TTree* xttree = new TTree(); 00069 xttree->Streamer(*buf1); 00070 00071 TTree* qttree = new TTree(); 00072 qttree->Streamer(*buf2); 00073 00074 TTree* t0tree= new TTree(); 00075 t0tree->Streamer(*buf3); 00076 00077 TTree* sdtree = new TTree(); 00078 sdtree->Streamer(*buf4); 00079 00080 // Read in the object 00081 int i; 00082 int nentries; 00083 //read xttree----------------------------- 00084 double xtpar; 00085 int xtkey; 00086 xttree -> SetBranchAddress("xtpar", &xtpar); 00087 xttree -> SetBranchAddress("xtkey", &xtkey); 00088 nentries = xttree -> GetEntries(); 00089 for(i=0; i<nentries; i++){ 00090 xttree -> GetEntry(i); 00091 tmpObject -> setXtpar(xtkey,xtpar); 00092 } 00093 // read t0tree ------------------------------------------------------------ 00094 double t0; 00095 double delt0; 00096 t0tree -> SetBranchAddress("t0", &t0); 00097 t0tree -> SetBranchAddress("delt0", &delt0); 00098 nentries = t0tree -> GetEntries(); 00099 for(i=0; i<nentries; i++){ 00100 t0tree -> GetEntry(i); 00101 tmpObject -> setT0(t0); 00102 tmpObject -> setDelT0(delt0); 00103 } 00104 // read qttree ------------------------------------------------------------ 00105 double qtpar0; 00106 double qtpar1; 00107 qttree -> SetBranchAddress("qtpar0", &qtpar0); 00108 qttree -> SetBranchAddress("qtpar1", &qtpar1); 00109 nentries = qttree -> GetEntries(); 00110 for(i=0; i<nentries; i++){ 00111 qttree -> GetEntry(i); 00112 tmpObject -> setQtpar0(qtpar0); 00113 tmpObject -> setQtpar1(qtpar1); 00114 } 00115 00116 // read Sdtree --------------------------------------------------------- 00117 double sdpar; 00118 int sdkey; 00119 sdtree -> SetBranchAddress("sdpar", &sdpar); 00120 sdtree -> SetBranchAddress("sdkey", &sdkey); 00121 nentries = sdtree -> GetEntries(); 00122 00123 for(i=0; i<nentries; i++){ 00124 sdtree -> GetEntry(i); 00125 tmpObject -> setSdpar(sdkey,sdpar); 00126 } 00127 00128 refpObject=tmpObject; 00129 delete xttree; 00130 delete qttree; 00131 delete t0tree; 00132 delete sdtree; 00133 00134 return StatusCode::SUCCESS; 00135 00136 00137 }
|
|
In case there is additional work to do on the created object.
00184 {
00185 return StatusCode::SUCCESS;
00186 }
|
|
00045 { 00046 StatusCode status = Converter::initialize(); 00047 00048 IDataProviderSvc* dp; 00049 00050 // I guess the service names are assigned in jobOptions? 00051 00052 serviceLocator()->getService ("CalibDataSvc", 00053 IID_IDataProviderSvc, 00054 (IInterface*&)dp); 00055 setDataProvider(dp); 00056 00057 // Locate the Root Conversion Service 00058 serviceLocator()->getService ("CalibTreeCnvSvc", 00059 IID_ICalibTreeSvc, 00060 (IInterface*&) m_treeSvc); 00061 00062 // Locate meta conversion service 00063 // Will anything need to be changed here to accommodate possibility 00064 // of two concrete implementations of ICalibMetaCnvSvc? Would 00065 // have different storage types. Could specify type desired 00066 // as job option. Ditto for name of class? 00067 serviceLocator()->getService("CalibMySQLCnvSvc", 00068 IID_ICalibMetaCnvSvc, 00069 (IInterface*&)m_metaSvc); 00070 00071 serviceLocator()->getService ("CalibDataSvc", 00072 IID_IInstrumentName, 00073 (IInterface*&)m_instrSvc); 00074 00075 return status; 00076 }
|
|
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.
00128 { 00129 00130 MsgStream log(msgSvc(), "TreeCalBaseCnv"); 00131 log << MSG::DEBUG<<"TreeCalBaseCnv::internalCreateObj( starting ..... "<<endreq; 00132 TreeCalBaseCnv* converter = this; 00133 CLID classId = address->clID(); 00134 00135 IConverter* conv = this->conversionSvc()->converter(classId); 00136 if (0 == conv) { 00137 log << MSG::WARNING 00138 << "No proper converter found for classID " << classId 00139 << ", the default converter" 00140 << " will be used. " << endreq; 00141 } else { 00142 converter = dynamic_cast <TreeCalBaseCnv*> (conv); 00143 if (0 == converter) { 00144 log << MSG::ERROR 00145 << "The converter found for classID " << classId 00146 << " was not a descendent of TreeCalBaseCnv as it should be " 00147 << "( was of type " << typeid (*converter).name() << "). " 00148 << "The default converter will be used" << endreq; 00149 converter = this; 00150 } 00151 } 00152 00153 m_runfrm =*( address->ipar()); 00154 m_runto =*( address->ipar()+1); 00155 // m_runfrm = 100; 00156 // m_runto =1000; 00157 // creates an object for the node found 00158 StatusCode sc = converter->i_createObj(address, refpObject); 00159 if (sc.isFailure()) { 00160 return sc; 00161 } 00162 CalibData::CalibBase1* tmpObject = dynamic_cast <CalibData::CalibBase1*> (refpObject); 00163 setBaseInfo(tmpObject); 00164 // ends up the object construction 00165 sc = converter->i_processObj(refpObject, address); 00166 if (sc.isSuccess()) { 00167 log << MSG::DEBUG << "Successfully created calib. object " << endreq; 00168 } 00169 // closeRead(); 00170 return sc; 00171 }
|
|
00037 {
00038 return CLID_Calib_MdcCal;
00039 }
|
|
|
|
|
|
00034 {
00035 return CALIBTREE_StorageType;
00036 }
|
|
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. 00189 { 00190 MsgStream log(msgSvc(), "TreeCalBaseCnv"); 00191 log << MSG::DEBUG<<"set the runfrm and runto Numbers in the converter"<<endreq; 00192 pObj->setrunfrm(m_runfrm); 00193 pObj->setrunto(m_runto); 00194 }
|
|
00061 {return CALIBTREE_StorageType;}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|