|
Public Member Functions |
virtual StatusCode | createAddress (long svc_type, const CLID &clid, const std::string *par, const unsigned long *ip, IOpaqueAddress *&refpAddress) |
| Create an address using explicit arguments to identify a single object.
|
virtual StatusCode | createAddress (long svc_type, const CLID &clid, const std::string *par, const unsigned long *ip, IOpaqueAddress *&refpAddress) |
| Create an address using explicit arguments to identify a single object.
|
virtual StatusCode | createCalib (DataObject *&refpObject, const std::string &fullpath, const CLID &classID, IRegistry *entry=0) |
virtual StatusCode | createCalib (DataObject *&refpObject, const std::string &fullpath, const CLID &classID, IRegistry *entry=0) |
virtual StatusCode | createObj (IOpaqueAddress *pAddress, DataObject *&refpObject) |
| Create a transient representation from another rep of this object.
|
virtual StatusCode | createObj (IOpaqueAddress *pAddress, DataObject *&refpObject) |
| Create a transient representation from another rep of this object.
|
virtual StatusCode | createRep (DataObject *pObject, IOpaqueAddress *&refpAddress) |
| Convert a transient object to a requested representation.
|
virtual StatusCode | createRep (DataObject *pObject, IOpaqueAddress *&refpAddress) |
| Convert a transient object to a requested representation.
|
virtual StatusCode | decodeDescription (const std::string &description, unsigned char &type) |
| Decode the string storage type to enumerated storage type.
|
virtual StatusCode | decodeDescription (const std::string &description, unsigned char &type) |
| Decode the string storage type to enumerated storage type.
|
virtual StatusCode | fillObjRefs (IOpaqueAddress *pAddress, DataObject *pObject) |
| Resolve the references of the created transient object.
|
virtual StatusCode | fillObjRefs (IOpaqueAddress *pAddress, DataObject *pObject) |
| Resolve the references of the created transient object.
|
virtual StatusCode | fillRepRefs (IOpaqueAddress *pAddress, DataObject *pObject) |
| Resolve the references of a converted object.
|
virtual StatusCode | fillRepRefs (IOpaqueAddress *pAddress, DataObject *pObject) |
| Resolve the references of a converted object.
|
virtual StatusCode | finalize () |
virtual StatusCode | finalize () |
virtual calibUtil::Metadata * | getMeta () |
virtual calibUtil::Metadata * | getMeta () |
| Handle to the MySQL metadata database.
|
virtual StatusCode | initialize () |
virtual StatusCode | initialize () |
virtual StatusCode | queryInterface (const InterfaceID &riid, void **ppvInterface) |
virtual StatusCode | queryInterface (const InterfaceID &riid, void **ppvInterface) |
virtual StatusCode | updateCalib (DataObject *pObject, const std::string &fullpath, const CLID &classID, IRegistry *entry=0) |
virtual StatusCode | updateCalib (DataObject *pObject, const std::string &fullpath, const CLID &classID, IRegistry *entry=0) |
virtual StatusCode | updateObj (IOpaqueAddress *pAddress, DataObject *pObject) |
| Update a transient representation from another rep of this object.
|
virtual StatusCode | updateObj (IOpaqueAddress *pAddress, DataObject *pObject) |
| Update a transient representation from another rep of this object.
|
virtual StatusCode | updateObjRefs (IOpaqueAddress *pAddress, DataObject *pObject) |
| Update the references of an updated transient object.
|
virtual StatusCode | updateObjRefs (IOpaqueAddress *pAddress, DataObject *pObject) |
| Update the references of an updated transient object.
|
virtual StatusCode | updateRep (IOpaqueAddress *pAddress, DataObject *pObject) |
| Update a converted representation of a transient object.
|
virtual StatusCode | updateRep (IOpaqueAddress *pAddress, DataObject *pObject) |
| Update a converted representation of a transient object.
|
virtual StatusCode | updateRepRefs (IOpaqueAddress *pAddress, DataObject *pObject) |
| Update the references of an already converted object.
|
virtual StatusCode | updateRepRefs (IOpaqueAddress *pAddress, DataObject *pObject) |
| Update the references of an already converted object.
|
Static Public Member Functions |
const InterfaceID & | interfaceID () |
| Interface ID of this class.
|
const InterfaceID & | interfaceID () |
| Interface ID of this class.
|
Protected Member Functions |
| CalibMySQLCnvSvc (const std::string &name, ISvcLocator *svc) |
| CalibMySQLCnvSvc (const std::string &name, ISvcLocator *svc) |
virtual | ~CalibMySQLCnvSvc () |
virtual | ~CalibMySQLCnvSvc () |
Private Attributes |
std::string | cal_ver |
std::string | m_bossver [11] |
unsigned int | m_calibLevelMask |
std::string | m_calPar [11] |
bool | m_crash |
std::string | m_dbName |
std::string | m_dbStatus |
IDetDataSvc * | m_detDataSvc |
| Handle to the IDetDataSvc interface of the CalibDataSvc.
|
IDetDataSvc * | m_detDataSvc |
| Handle to the IDetDataSvc interface of the CalibDataSvc.
|
IConversionSvc * | m_detPersSvc |
| Interval in seconds Handle to the IConversionSvc interface of the DetectorPersistencySvc.
|
IConversionSvc * | m_detPersSvc |
| Interval in seconds Handle to the IConversionSvc interface of the DetectorPersistencySvc.
|
facilities::Timestamp * | m_enterTimeEnd |
facilities::Timestamp * | m_enterTimeEnd |
std::string | m_enterTimeEndString |
facilities::Timestamp * | m_enterTimeStart |
facilities::Timestamp * | m_enterTimeStart |
std::string | m_enterTimeStartString |
IDataProviderSvc * | m_eventSvc |
IDataProviderSvc * | m_eventSvc |
std::string | m_host |
| MySQL host, a job options parameter.
|
IInstrumentName * | m_instrSvc |
IInstrumentName * | m_instrSvc |
int | m_MdcAlign_No |
calibUtil::Metadata * | m_meta |
| Handle for metadata access.
|
calibUtil::Metadata * | m_meta |
| Handle for metadata access.
|
std::vector< std::string > | m_qualityList |
std::vector< std::string > | m_qualityList |
unsigned int | m_qualityMask |
bool | m_useEventTime |
| Use event time to select calibration? Normal state is TRUE.
|
std::string | machine |
std::string | sft_ver |
Friends |
class | SvcFactory<CalibMySQLCnvSvc> |
| Only factories can access protected constructors.
|
A conversion service for GLAST calibration metadata database persistency. Allows to create and update condition data objects (i.e. DataObjects implementing IValidity).
|
00062 : ConversionSvc (name, svc, MYSQL_StorageType)
00063 , m_meta(0), m_useEventTime(true),m_enterTimeStart(0), m_enterTimeEnd(0),
00064 m_qualityMask(0)
00065 {
00066
00067 declareProperty("Host", m_host = "bes3db2.ihep.ac.cn");
00068 declareProperty("UseEventTime", m_useEventTime = true);
00069 declareProperty("EnterTimeEnd", m_enterTimeEndString = std::string("") );
00070 declareProperty("EnterTimeStart", m_enterTimeStartString = std::string("") );
00071
00072 declareProperty("DbName", m_dbName = std::string("offlinedb") );
00073 declareProperty("QualityList", m_qualityList);
00074 declareProperty("CrashOnError", m_crash = true);
00075 declareProperty("Sft_Ver",sft_ver);
00076 declareProperty("Cal_Ver",cal_ver);
00077 declareProperty("MdcCalPar",m_calPar[0]="default");
00078 declareProperty("DeDxCalPar",m_calPar[1]="default");
00079 declareProperty("EmcCalPar",m_calPar[2]="default");
00080 declareProperty("TofCalPar",m_calPar[3]="default");
00081 declareProperty("MucCalPar",m_calPar[4]="default");
00082 declareProperty("EsTimeCalPar",m_calPar[5]="default");
00083 declareProperty("EstTofCalPar",m_calPar[6]="default");
00084 declareProperty("MdcAlignPar",m_calPar[7]="default");
00085 declareProperty("TofQElecPar",m_calPar[8]="default");
00086 declareProperty("TofSimPar",m_calPar[9]="default");
00087 declareProperty("DedxSimPar",m_calPar[10]="default");
00088 declareProperty("MdcBossVer",m_bossver[0]="default");
00089 declareProperty("DeDxBossVer",m_bossver[1]="default");
00090 declareProperty("EmcBossVer",m_bossver[2]="default");
00091 declareProperty("TofBossVer",m_bossver[3]="default");
00092 declareProperty("MucBossVer",m_bossver[4]="default");
00093 declareProperty("EsTimeBossVer",m_bossver[5]="default");
00094 declareProperty("EstTofBossVer",m_bossver[6]="default");
00095 declareProperty("MdcAlignBossVer",m_bossver[7]="default");
00096 declareProperty("TofQElecBossVer",m_bossver[8]="default");
00097 declareProperty("TofSimBossVer",m_bossver[9]="default");
00098 declareProperty("DedxSimBossVer",m_bossver[10]="default");
00099 declareProperty("Align_RunNo",m_MdcAlign_No=8093);
00100 declareProperty("Db_Status",m_dbStatus="OK");
00101 }
|
|
Create a calib DataObject by calib type name, flavor and time. This method does not register DataObject in the transient data store. The string storage type is discovered at runtime in the Metadata dbs.
Implements ICalibMetaCnvSvc. 00444 {
00445 MsgStream log(msgSvc(), "CalibMySQLCnvSvc" );
00446
00447
00448
00449 std::string cType = CalibData::CalibModelSvc::getCalibType(fullpath);
00450
00451
00452 if (std::string("Test") == cType.substr(0, 4)) {
00453 cType = std::string("Test_Gen");
00454 }
00455
00456 unsigned int ser;
00457 unsigned int runfrm;
00458 unsigned int runto;
00459 calibUtil::Metadata::eRet ret;
00460
00461 MSG::Level msgLevel = MSG::DEBUG;
00462
00463 std::string physFmt = "UNK";
00464 std::string fmtVersion;
00465 std::string dataIdent;
00466
00467
00468 SmartDataPtr<Event::EventHeader> evt(m_eventSvc,"/Event/EventHeader");
00469 int runNo=0;
00470 if( !evt ){
00471 log << MSG::WARNING << "Unable to read the Event for TDS" << endreq;
00472
00473 }
00474 if( evt ){
00475 if(cType!="TofCal"&&cType!="EstTofCal"&&cType!="TofSim"&&cType!="DedxSim") runNo = fabs(evt -> runNumber());
00476 if(cType=="TofCal"||cType=="EstTofCal"||cType=="TofSim"||cType=="DedxSim") runNo = evt -> runNumber();
00477 }
00478 DatabaseRecordVector res;
00479 if(cType=="TofCal")
00480 {
00481 ret = m_meta->getReadTOFInfo(ser,&runfrm,&runto, m_calPar[3], res,runNo,m_bossver[3]);
00482 }
00483
00484 if(cType=="EmcCal")
00485 {
00486 ret = m_meta->getReadEMCInfo(ser,&runfrm,&runto, m_calPar[2], res,runNo,m_bossver[2]);
00487 }
00488
00489 if(cType=="DedxCal")
00490 {
00491 ret = m_meta->getReadDedxInfo(ser,&runfrm,&runto, m_calPar[1], res,runNo,m_bossver[1]);
00492 }
00493
00494 if(cType=="MdcCal")
00495 {
00496 ret = m_meta->getReadMDCInfo(ser,&runfrm,&runto, m_calPar[0], res,runNo,m_bossver[0]);
00497 }
00498
00499 if(cType=="MucCal")
00500 {
00501 ret = m_meta->getReadMUCInfo(ser,&runfrm,&runto, m_calPar[4], res,runNo,m_bossver[4]);
00502 }
00503 if(cType=="EsTimeCal")
00504 {
00505 ret = m_meta->getReadEsTimeInfo(ser,&runfrm,&runto, m_calPar[5], res,runNo,m_bossver[5]);
00506 }
00507
00508
00509 if(cType=="MdcAlign")
00510 {
00511
00512 ret = m_meta->getReadMdcAlignInfo(ser,&runfrm,&runto, m_calPar[7], res,runNo,m_bossver[7]);
00513 }
00514 if(cType=="TofQElec")
00515 {
00516 ret = m_meta->getReadTofQElecInfo(ser,&runfrm,&runto, m_calPar[8], res,runNo,m_bossver[8]);
00517 }
00518 if(cType=="TofSim")
00519 {
00520 ret = m_meta->getReadTofSimInfo(ser,&runfrm,&runto, m_calPar[9], res,runNo,m_bossver[9]);
00521 }
00522 if(cType=="DedxSim")
00523 {
00524 ret = m_meta->getReadDedxSimInfo(ser,&runfrm,&runto, m_calPar[10], res,runNo,m_bossver[10]);
00525 }
00526
00527
00528
00529 if(cType=="EstTofCal")
00530 {
00531 ret = m_meta->getReadEstTofInfo(ser,&runfrm,&runto, m_calPar[6], res,runNo,m_bossver[6]);
00532 if(ret!=calibUtil::Metadata::RETOk){
00533 log << MSG::INFO << "no record of EstTofCal in the database" << endreq;
00534 IDataProviderSvc* pCDS = 0;
00535 StatusCode sc = serviceLocator()->getService("CalibDataSvc", IID_IDataProviderSvc, (IInterface*&)pCDS);
00536 if ( !sc.isSuccess() ) {
00537 log << MSG::ERROR << "Could not locate CalibDataSvc" << endreq;
00538 return sc;
00539 }
00540
00541 IDataManagerSvc *dataManSvc = dynamic_cast<IDataManagerSvc*> (pCDS);
00542 dataManSvc->clearSubTree("/Calib/EstTofCal");
00543 pCDS->unregisterObject("/Calib/EstTofCal");
00544 return StatusCode::FAILURE;
00545 }
00546 }
00547
00548 if(ret!=calibUtil::Metadata::RETOk){
00549 log << MSG::ERROR << "no record in the database" << endreq;
00550 exit(1);
00551 }
00552 int sz=res.size();
00553 DatabaseRecord* records1 = res[0];
00554 sscanf((*records1)["RunFrom"], "%ld", &runfrm);
00555 sscanf((*records1)["RunTo"], "%ld", &runto);
00556
00557 if(m_dbStatus=="OK"){
00558 if(std::string((*records1)["Status"])!="OK") {
00559 log<<MSG::FATAL<<"Status of type "<<cType<<" is "<< (*records1)["Status"]<<" your setting is OK"<<endreq;
00560 exit(1);
00561 }
00562 }
00563
00564
00565 log << MSG::DEBUG << "dataIdent is:"<<dataIdent<< endreq;
00566 log << MSG::DEBUG << "runfrm is:"<<int(runfrm)<<" runto is:"<<runto<<"ser_no is:"<<ser<<endreq;
00567 unsigned char storageType;
00568 physFmt="TREE";
00569 StatusCode sc = decodeDescription(physFmt, storageType);
00570
00571
00572
00573
00574
00575
00576 log << MSG::DEBUG << "Creating an address of type "
00577 << (int)storageType << " for class " << classID << endreq;
00578
00579 IOpaqueAddress* tmpAddress;
00580 const std::string par[3] = {dataIdent, fullpath, fmtVersion};
00581 const unsigned long ipar[2] = {int(runfrm),int(runto)};
00582 log << MSG::DEBUG << "ipar is:"<<ipar[0]<<":"<<ipar[1]<<"ipar[1]"<<endreq;
00583
00584
00585
00586
00587 tmpAddress = new TreeAddress(storageType, classID,*records1,ipar);
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599 tmpAddress->addRef();
00600
00601
00602 tmpAddress->setRegistry(entry);
00603
00604
00605 sc = m_detPersSvc->createObj(tmpAddress, refpObject);
00606 tmpAddress->release();
00607 if ( !sc.isSuccess() ) {
00608 log << msgLevel
00609 << "Persistency service could not create a new object" << endreq;
00610 if (m_crash) {
00611 log << msgLevel << std::endl << "Exiting... " << std::endl << endreq;
00612 exit(1);
00613 }
00614 return sc;
00615 }
00616
00617 res.clear();
00618 log << MSG::DEBUG << "New object successfully created" << endreq;
00619 return StatusCode::SUCCESS;
00620
00621 }
|
|
Update a condition DataObject by This method does not register DataObject in the transient data store. The string storage type is discovered at runtime in the metadata dbs.
Implements ICalibMetaCnvSvc. 00638 {
00639 using CalibData::CalibBase;
00640
00641 MsgStream log(msgSvc(), "CalibMySQLCnvSvc" );
00642 StatusCode status;
00643
00644
00645
00646 std::string cType = CalibData::CalibModelSvc::getCalibType(fullpath);
00647
00648
00649 if (std::string("Test") == cType.substr(0, 4)) {
00650 cType = std::string("Test_Gen");
00651 }
00652
00653 if (0 == pObject) {
00654 log << MSG::ERROR << "There is no DataObject to update" << endreq;
00655 return StatusCode::FAILURE;
00656 }
00657
00658 if(pObject->clID()!=6411&& classID!=6411){
00659 if ( classID != pObject->clID() ) {
00660 log << MSG::ERROR << "Update requested for clID " << classID
00661 << " while DataObject is of clID "
00662 << pObject->clID() << endreq;
00663 exit(1);
00664 return StatusCode::FAILURE;
00665 }
00666 }
00667
00668
00669
00670 CalibBase1* pBase = dynamic_cast<CalibBase1*>(pObject);
00671 if (pBase == 0) {
00672 log << MSG::WARNING
00673 << "Object to be updated is not a calib object! " << endreq;
00674 return StatusCode::FAILURE;
00675 }
00676
00677
00678
00679 unsigned int ser;
00680 unsigned int runfrm;
00681 unsigned int runto;
00682 calibUtil::Metadata::eRet ret;
00683
00684
00685 std::string physFmt;
00686 std::string fmtVersion;
00687 std::string dataIdent;
00688
00689
00690
00691
00692
00693
00694
00695 SmartDataPtr<Event::EventHeader> evt(m_eventSvc,"/Event/EventHeader");
00696 int runNo=0;
00697 if( !evt ){
00698 log << MSG::WARNING << "Unable to read the Event for TDS" << endreq;
00699
00700 }
00701
00702
00703
00704 DatabaseRecordVector res;
00705 if( evt ){
00706 if(cType!="TofCal"&&cType!="EstTofCal"&&cType!="TofSim"&&cType!="DedxSim") runNo = fabs(evt -> runNumber());
00707 if(cType=="TofCal"||cType=="EstTofCal"||cType=="TofSim"||cType=="DedxSim") runNo = evt -> runNumber();
00708 }
00709 if(cType=="TofCal")
00710 {
00711 ret = m_meta->getReadTOFInfo(ser,&runfrm,&runto, m_calPar[3], res,runNo,m_bossver[3]);
00712 }
00713
00714 if(cType=="EmcCal")
00715 {
00716 ret = m_meta->getReadEMCInfo(ser,&runfrm,&runto, m_calPar[2], res,runNo,m_bossver[2]);
00717 }
00718 if(cType=="DedxCal")
00719 {
00720 ret = m_meta->getReadDedxInfo(ser,&runfrm,&runto, m_calPar[1], res,runNo,m_bossver[1]);
00721 }
00722 if(cType=="MdcCal")
00723 {
00724 ret = m_meta->getReadMDCInfo(ser,&runfrm,&runto, m_calPar[0], res,runNo,m_bossver[0]);
00725 }
00726 if(cType=="MucCal")
00727 {
00728 ret = m_meta->getReadMUCInfo(ser,&runfrm,&runto, m_calPar[4], res,runNo,m_bossver[4]);
00729 }
00730 if(cType=="EsTimeCal")
00731 {
00732 ret = m_meta->getReadEsTimeInfo(ser,&runfrm,&runto, m_calPar[5], res,runNo,m_bossver[5]);
00733 }
00734
00735 if(cType=="MdcAlign")
00736 {
00737 ret = m_meta->getReadMdcAlignInfo(ser,&runfrm,&runto, m_calPar[7], res,runNo,m_bossver[7]);
00738 }
00739 if(cType=="TofQElec")
00740 {
00741 ret = m_meta->getReadTofQElecInfo(ser,&runfrm,&runto, m_calPar[8], res,runNo,m_bossver[8]);
00742 }
00743 if(cType=="TofSim")
00744 {
00745 ret = m_meta->getReadTofSimInfo(ser,&runfrm,&runto, m_calPar[9], res,runNo,m_bossver[9]);
00746 }
00747 if(cType=="DedxSim")
00748 {
00749 ret = m_meta->getReadDedxSimInfo(ser,&runfrm,&runto, m_calPar[10], res,runNo,m_bossver[10]);
00750 }
00751
00752
00753 if(cType=="EstTofCal")
00754 {
00755 ret = m_meta->getReadEstTofInfo(ser,&runfrm,&runto, m_calPar[6], res,runNo,m_bossver[6]);
00756 if(ret!=calibUtil::Metadata::RETOk){
00757 log << MSG::INFO << "no record of EstTofCal in the database" << endreq;
00758 IDataProviderSvc* pCDS = 0;
00759 StatusCode sc = serviceLocator()->getService("CalibDataSvc", IID_IDataProviderSvc, (IInterface*&)pCDS);
00760 if ( !sc.isSuccess() ) {
00761 log << MSG::ERROR << "Could not locate CalibDataSvc" << endreq;
00762 return sc;
00763 }
00764
00765 IDataManagerSvc *dataManSvc = dynamic_cast<IDataManagerSvc*> (pCDS);
00766 dataManSvc->clearSubTree("/Calib/EstTofCal");
00767 pCDS->unregisterObject("/Calib/EstTofCal");
00768 return StatusCode::FAILURE;
00769 }
00770 }
00771
00772 if(ret!=calibUtil::Metadata::RETOk){
00773 log << MSG::ERROR << "Error searching in the database" << endreq;
00774 exit(1);
00775 }
00776
00777 physFmt="TREE";
00778 unsigned char storageType;
00779 status = decodeDescription(physFmt, storageType);
00780
00781
00782
00783
00784
00785 log << MSG::DEBUG << "Creating an address of type "
00786 << (int)storageType << " for class " << classID << endreq;
00787
00788
00789 DatabaseRecord* records1 = res[0];
00790 sscanf((*records1)["RunFrom"], "%ld", &runfrm);
00791 sscanf((*records1)["RunTo"], "%ld", &runto);
00792
00793 if(m_dbStatus=="OK"){
00794 if(std::string((*records1)["Status"])!="OK") {
00795 log<<MSG::FATAL<<"the status of type "<<cType<<" is "<< (*records1)["Status"]<<" your setting is OK"<<endreq;
00796 exit(1);
00797 }
00798 }
00799
00800
00801 IOpaqueAddress* tmpAddress;
00802 const unsigned long ipar[2] = {runfrm,runto};
00803
00804 tmpAddress = new TreeAddress(storageType, classID,*records1,ipar);
00805 log << MSG::DEBUG << "Temporary address successfully created" << endreq;
00806 tmpAddress->addRef();
00807
00808
00809 tmpAddress->setRegistry(entry);
00810
00811
00812 DataObject* pNewObject;
00813 status = m_detPersSvc->createObj(tmpAddress, pNewObject);
00814 tmpAddress->release();
00815 if ( !status.isSuccess() ) {
00816 log << MSG::ERROR
00817 << "Persistency service could not create object" << endreq;
00818 return status;
00819 }
00820
00821
00822
00823
00824
00825
00826 CalibBase1* pNewBase = dynamic_cast<CalibBase1*>(pNewObject);
00827 if (0 == pNewBase) {
00828 log << MSG::ERROR
00829 << "Cannot update objects other than Calib objects: "
00830 << "update() must be defined!"
00831 << endreq;
00832 return StatusCode::FAILURE;
00833 }
00834
00835
00836
00837
00838
00839
00840 pBase->update(*pNewBase, &log);
00841 res.clear();
00842 delete pNewBase;
00843 return StatusCode::SUCCESS;
00844 }
|