Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

VertexDbSvc Class Reference

#include <VertexDbSvc.h>

Inheritance diagram for VertexDbSvc:

IVertexDbSvc IVertexDbSvc List of all members.

Public Member Functions

virtual StatusCode finalize ()
virtual StatusCode finalize ()
int getReadBunchInfo (int runno)
int getReadBunchInfo (int runno)
StatusCode getVertexTableInfo ()
StatusCode getVertexTableInfo ()
void handle (const Incident &)
void handle (const Incident &)
virtual StatusCode initialize ()
virtual StatusCode initialize ()
bool isVertexValid ()
bool isVertexValid ()
double * PrimaryVertex ()
double * PrimaryVertex ()
virtual StatusCode queryInterface (const InterfaceID &riid, void **ppvUnknown)
virtual StatusCode queryInterface (const InterfaceID &riid, void **ppvUnknown)
double * SigmaPrimaryVertex ()
double * SigmaPrimaryVertex ()
 VertexDbSvc (const std::string &name, ISvcLocator *svcloc)
 VertexDbSvc (const std::string &name, ISvcLocator *svcloc)
 ~VertexDbSvc ()
 ~VertexDbSvc ()

Static Public Member Functions

const InterfaceID & interfaceID ()
const InterfaceID & interfaceID ()

Private Attributes

std::string dbName
std::string host
std::string m_bossver
IDatabaseSvcm_dbsvc
IDatabaseSvcm_dbsvc
IDataProviderSvc * m_eventSvc
IDataProviderSvc * m_eventSvc
bool m_isRunNumberValid
double m_primaryVertex [3]
double m_sigmaPrimaryVertex [3]
double m_sigmax
double m_sigmay
double m_sigmaz
std::string m_verpar
double m_vx
double m_vy
double m_vz
std::string password
unsigned int serialNo
std::string table
std::string userName

Constructor & Destructor Documentation

VertexDbSvc::VertexDbSvc const std::string &  name,
ISvcLocator *  svcloc
 

00036                                                                  :
00037   Service (name, svcloc){
00038   // declare properties
00039   declareProperty("Host" , host = std::string("bes3db2.ihep.ac.cn"));
00040   declareProperty("DbName" , dbName = std::string("offlinedb"));
00041   declareProperty("UserName" , userName = std::string("guest"));
00042   declareProperty("Password" , password = std::string("guestpass"));
00043   declareProperty("BossVer" , m_bossver = std::string("default"));
00044   declareProperty("VerPar" , m_verpar = std::string("default"));
00045 }

VertexDbSvc::~VertexDbSvc  ) 
 

00047                          {
00048 }

VertexDbSvc::VertexDbSvc const std::string &  name,
ISvcLocator *  svcloc
 

VertexDbSvc::~VertexDbSvc  ) 
 


Member Function Documentation

virtual StatusCode VertexDbSvc::finalize  )  [virtual]
 

StatusCode VertexDbSvc::finalize  )  [virtual]
 

00088                                 {
00089      MsgStream log(messageService(), name());
00090      log << MSG::INFO << "VertexDbSvc::finalize()" << endreq;
00091    //  if(m_connect_offline) delete m_connect_offline;
00092     return StatusCode::SUCCESS;
00093 }

int VertexDbSvc::getReadBunchInfo int  runno  ) 
 

int VertexDbSvc::getReadBunchInfo int  runno  ) 
 

00186                                           {
00187    MsgStream log(messageService(), name());
00188   char stmt1[200];
00189   if(m_bossver=="default")
00190      m_bossver = getenv("BES_RELEASE");
00191   const char* SftVer = m_bossver.c_str();
00192   if(m_verpar=="default"){
00193      sprintf(stmt1,"select Vx, Vy, Vz, SigmaVx, SigmaVy, SigmaVz "
00194            "from BeamPar where RunNo = %d and SftVer='%s' group by ParVer", runno,SftVer);
00195   }
00196 
00197   if(m_verpar!="default"){
00198      sprintf(stmt1,"select Vx, Vy, Vz, SigmaVx, SigmaVy, SigmaVz "
00199            "from BeamPar where RunNo = %d and SftVer='%s' and ParVer = %s", runno,SftVer,m_verpar);
00200   }
00201   DatabaseRecordVector res1;    
00202   int res_no =  m_dbsvc->query("offlinedb",stmt1,res1);  
00203   if(res_no==0) return 0;
00204   if(res_no>=1){
00205   DatabaseRecord* dbrec=res1[res_no-1];
00206   sscanf((*dbrec)["Vx"], "%lf", &m_primaryVertex[0]);
00207   sscanf((*dbrec)["Vy"], "%lf", &m_primaryVertex[1]);
00208   sscanf((*dbrec)["Vz"], "%lf", &m_primaryVertex[2]);
00209   sscanf((*dbrec)["SigmaVx"], "%lf", &m_sigmaPrimaryVertex[0]);
00210   sscanf((*dbrec)["SigmaVy"], "%lf", &m_sigmaPrimaryVertex[1]);
00211   sscanf((*dbrec)["SigmaVz"], "%lf", &m_sigmaPrimaryVertex[2]);
00212 
00213      return 1;
00214   }
00215   
00216 }

StatusCode VertexDbSvc::getVertexTableInfo  ) 
 

StatusCode VertexDbSvc::getVertexTableInfo  ) 
 

00105                                           {
00106    MsgStream log(messageService(), name());
00107    SmartDataPtr<Event::EventHeader> eventHeader(m_eventSvc,"/Event/EventHeader");
00108  m_isRunNumberValid = false;
00109  int  run = eventHeader->runNumber();
00110  int stt =run;
00111  if(run<0){
00112     log << MSG::INFO << "This data is the MC sample with the Run Number: " << run << endreq;
00113     run=-run;
00114 }
00115   
00116  unsigned long *lengths;
00117  char stmt1[200];
00118  if(m_bossver=="default")
00119  m_bossver = getenv("BES_RELEASE");
00120  const char* SftVer = m_bossver.c_str();
00121  if(m_verpar=="default"){
00122  sprintf(stmt1,"select Vx, Vy, Vz, SigmaVx, SigmaVy, SigmaVz "
00123            "from BeamPar where RunNo = %d and SftVer='%s' group by ParVer", run,SftVer);
00124  }
00125 
00126  if(m_verpar!="default"){
00127      sprintf(stmt1,"select Vx, Vy, Vz, SigmaVx, SigmaVy, SigmaVz "
00128                       "from BeamPar where RunNo = %d and SftVer='%s' and ParVer = %s", run,SftVer,m_verpar);
00129       }
00130 
00131 DatabaseRecordVector res;
00132 int row_no = m_dbsvc->query("offlinedb",stmt1,res);
00133  if(row_no==0&&stt>0){
00134    fprintf(stderr, "VertexDbSvc:: can not found vertex information for run: %d , boss version %s\n,",run,SftVer);
00135    exit(1);
00136    return StatusCode::FAILURE;
00137  }
00138   if(row_no>0){
00139   DatabaseRecord* dbrec=res[row_no-1];
00140   sscanf((*dbrec)["Vx"], "%lf", &m_primaryVertex[0]);
00141   sscanf((*dbrec)["Vy"], "%lf", &m_primaryVertex[1]);
00142   sscanf((*dbrec)["Vz"], "%lf", &m_primaryVertex[2]);
00143   sscanf((*dbrec)["SigmaVx"], "%lf", &m_sigmaPrimaryVertex[0]);
00144   sscanf((*dbrec)["SigmaVy"], "%lf", &m_sigmaPrimaryVertex[1]);
00145   sscanf((*dbrec)["SigmaVz"], "%lf", &m_sigmaPrimaryVertex[2]);
00146 }
00147 
00148  if(row_no==0&&stt<0){
00149     bool last =true;
00150     int kk;
00151    for(kk=0;true;kk++){
00152      int ret = getReadBunchInfo(run+kk);
00153      if(ret==0&&(run-kk)>0){ 
00154         ret = getReadBunchInfo(run-kk);
00155         last =false;
00156      }
00157      if(ret==1||kk>10000) break;
00158    }
00159    if(kk>10000){
00160     log << MSG::ERROR << "Can not find vertex information for run:" <<run<< endreq;
00161      exit(1);
00162    }
00163   if(last == true) log << MSG::INFO << "Use Bunch infor. of run " << run+kk << " instead of run " << run << endreq;
00164   if(last == false) log << MSG::INFO << "Use Bunch infor. of run " << run-kk << " instead of run " << run << endreq;
00165               
00166  }
00167  m_isRunNumberValid = true;
00168   log << MSG::INFO << "Successfully fetch the vertex information for run: " << stt << endreq;
00169    return StatusCode::SUCCESS;
00170 }

void VertexDbSvc::handle const Incident &   ) 
 

void VertexDbSvc::handle const Incident &   ) 
 

00095                                            {
00096      MsgStream log( messageService(), name() );
00097      log << MSG::DEBUG << "handle: " << inc.type() << endreq;
00098 
00099      if ( inc.type() == "NewRun" ){
00100           log << MSG::DEBUG << "NewRun" << endreq;
00101          getVertexTableInfo();
00102      } 
00103 }

virtual StatusCode VertexDbSvc::initialize  )  [virtual]
 

StatusCode VertexDbSvc::initialize  )  [virtual]
 

00059                                   {
00060   MsgStream log(messageService(), name());
00061   log << MSG::INFO << "VertexDbSvc::initialize()" << endreq;
00062 
00063   StatusCode sc = Service::initialize();
00064   if( sc.isFailure() ) return sc;
00065   
00066    
00067   IIncidentSvc* incsvc;
00068   sc = service("IncidentSvc", incsvc);
00069   int priority = 100;
00070   if( sc.isSuccess() ){
00071     incsvc -> addListener(this, "NewRun", priority);
00072   }
00073 
00074   sc = serviceLocator()->service("DatabaseSvc",m_dbsvc,true);
00075   if (sc .isFailure() ) {
00076     log << MSG::ERROR << "Unable to find DatabaseSvc " << endreq;
00077     return sc;
00078   }
00079 
00080   sc = serviceLocator()->service("EventDataSvc", m_eventSvc, true);
00081   if (sc .isFailure() ) {
00082     log << MSG::ERROR << "Unable to find EventDataSvc " << endreq;
00083     return sc;
00084   }
00085   return StatusCode::SUCCESS;
00086 }

const InterfaceID& IVertexDbSvc::interfaceID  )  [inline, static, inherited]
 

00015 { return IID_IVertexDbSvc; }

const InterfaceID& IVertexDbSvc::interfaceID  )  [inline, static, inherited]
 

00015 { return IID_IVertexDbSvc; }

bool VertexDbSvc::isVertexValid  )  [inline, virtual]
 

Implements IVertexDbSvc.

00039                        {
00040   return m_isRunNumberValid;
00041 }

bool VertexDbSvc::isVertexValid  )  [inline, virtual]
 

Implements IVertexDbSvc.

00039                        {
00040   return m_isRunNumberValid;
00041 }

double* VertexDbSvc::PrimaryVertex  )  [virtual]
 

Implements IVertexDbSvc.

double * VertexDbSvc::PrimaryVertex  )  [virtual]
 

Implements IVertexDbSvc.

00172                                    {
00173   if (!m_isRunNumberValid) {
00174     fprintf(stderr, "WARNING in VertexDbSvc: runNo is invalid!\n");
00175   }
00176   return m_primaryVertex;
00177 }

virtual StatusCode VertexDbSvc::queryInterface const InterfaceID &  riid,
void **  ppvUnknown
[virtual]
 

StatusCode VertexDbSvc::queryInterface const InterfaceID &  riid,
void **  ppvUnknown
[virtual]
 

00050                                                                                   {
00051      if( IID_IVertexDbSvc.versionMatch(riid) ){
00052           *ppvInterface = static_cast<IVertexDbSvc*> (this);
00053      } else{
00054           return Service::queryInterface(riid, ppvInterface);
00055      }
00056      return StatusCode::SUCCESS;
00057 }

double* VertexDbSvc::SigmaPrimaryVertex  )  [virtual]
 

Implements IVertexDbSvc.

double * VertexDbSvc::SigmaPrimaryVertex  )  [virtual]
 

Implements IVertexDbSvc.

00179                                         {
00180   if (!m_isRunNumberValid) {
00181     fprintf(stderr, "WARNING in VertexDbSvc: runNo is invalid!\n");
00182   }
00183   return m_sigmaPrimaryVertex;
00184 }


Member Data Documentation

std::string VertexDbSvc::dbName [private]
 

std::string VertexDbSvc::host [private]
 

std::string VertexDbSvc::m_bossver [private]
 

IDatabaseSvc* VertexDbSvc::m_dbsvc [private]
 

IDatabaseSvc* VertexDbSvc::m_dbsvc [private]
 

IDataProviderSvc* VertexDbSvc::m_eventSvc [private]
 

IDataProviderSvc* VertexDbSvc::m_eventSvc [private]
 

bool VertexDbSvc::m_isRunNumberValid [private]
 

double VertexDbSvc::m_primaryVertex [private]
 

double VertexDbSvc::m_sigmaPrimaryVertex [private]
 

double VertexDbSvc::m_sigmax [private]
 

double VertexDbSvc::m_sigmay [private]
 

double VertexDbSvc::m_sigmaz [private]
 

std::string VertexDbSvc::m_verpar [private]
 

double VertexDbSvc::m_vx [private]
 

double VertexDbSvc::m_vy [private]
 

double VertexDbSvc::m_vz [private]
 

std::string VertexDbSvc::password [private]
 

unsigned int VertexDbSvc::serialNo [private]
 

std::string VertexDbSvc::table [private]
 

std::string VertexDbSvc::userName [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 19:13:33 2011 for BOSS6.5.5 by  doxygen 1.3.9.1