/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Mdc/MdcCalibAlg/MdcCalibAlg-00-09-02/src/MdcCalConstMgr.cxx

Go to the documentation of this file.
00001 #include "MdcCalibAlg/MdcCalConstMgr.h"
00002 
00003 #include "GaudiKernel/MsgStream.h"
00004 #include "GaudiKernel/IMessageSvc.h"
00005 #include "GaudiKernel/StatusCode.h"
00006 #include "GaudiKernel/ISvcLocator.h"
00007 #include "GaudiKernel/Bootstrap.h"
00008 #include "GaudiKernel/SmartDataPtr.h"
00009 #include "GaudiKernel/IDataProviderSvc.h"
00010 #include "GaudiKernel/PropertyMgr.h"
00011 
00012 #include "TROOT.h"
00013 #include "TFile.h"
00014 #include "TTree.h"
00015 #include "TH1F.h"
00016 #include "TObjArray.h"
00017 
00018 #include <iostream>
00019 #include <iomanip>
00020 
00021 MdcCalConstMgr::MdcCalConstMgr(){
00022      // constructor
00023 }
00024 
00025 MdcCalConstMgr::~MdcCalConstMgr(){
00026      // destructor
00027 }
00028 
00029 void MdcCalConstMgr::init(IMdcGeomSvc* mdcGeomSvc, IMdcCalibFunSvc* mdcFunSvc){
00030      m_mdcGeomSvc = mdcGeomSvc;
00031      m_mdcFunSvc = mdcFunSvc;
00032 }
00033 
00034 // read calibration data from TCDS
00035 void MdcCalConstMgr::rdConstTcds(MdcCalibConst* calconst){
00036      IMessageSvc* msgSvc;
00037      Gaudi::svcLocator() -> service("MessageSvc", msgSvc);
00038      MsgStream log(msgSvc, "MdcCalConstMgr");
00039      log << MSG::INFO << "Read calibration data from TCDS by MdcCalibFunSvc"
00040          << endreq;
00041 
00042      int lay;
00043      int wid;
00044 
00045      int nlayer;
00046      int nwire;
00047 
00048      int key;
00049      double val;
00050 
00051      nlayer = m_mdcGeomSvc -> getLayerSize();
00052      nwire = m_mdcGeomSvc -> getWireSize();
00053 
00054 // read XT data -----------------------------------------------------------
00055      m_mdcFunSvc -> setXtBegin();
00056      while( m_mdcFunSvc -> getNextXtpar(key, val) ){
00057           calconst -> fillXtpar(key, val);
00058      }
00059 
00060 // read T0 data -----------------------------------------------------------
00061      double t0;
00062      double delt0;
00063      for(wid=0; wid<nwire; wid++){
00064         t0 = m_mdcFunSvc -> getT0(wid);
00065         delt0 = m_mdcFunSvc -> getDelT0(wid);
00066         calconst -> fillT0(t0);
00067         calconst -> fillDelT0(delt0);
00068      }
00069 
00070 // read QT data -----------------------------------------------------------
00071      double qtpar0;
00072      double qtpar1;
00073      for(lay=0; lay<nlayer; lay++){
00074           qtpar0 = m_mdcFunSvc -> getQtpar(lay, 0);
00075           qtpar1 = m_mdcFunSvc -> getQtpar(lay, 1);
00076           calconst -> fillQtpar0(qtpar0);
00077           calconst -> fillQtpar1(qtpar1);
00078      }
00079 
00080 // read spatial resolution data -------------------------------------------
00081      m_mdcFunSvc -> setSdBegin();
00082      while( m_mdcFunSvc -> getNextSdpar(key, val) ){
00083           calconst -> fillSdpar(key, val);
00084      }
00085 }
00086 
00087 
00088 // write calibration data from TCDS
00089 void MdcCalConstMgr::wrtConstTcds(MdcCalibConst* calconst){
00090 
00091 }
00092 
00093 
00094 // read calibration data directly in run directory
00095 void MdcCalConstMgr::rdConst(MdcCalibConst* calconst){
00096      IMessageSvc* msgSvc;
00097      Gaudi::svcLocator() -> service("MessageSvc", msgSvc);
00098      MsgStream log(msgSvc, "MdcCalConstMgr");
00099      log << MSG::WARNING << "read calibration data directly from run directory" 
00100          << endreq;
00101 
00102      TFile fconst("MdcCalibConst.root");
00103      log << MSG::INFO << "open file" << endreq;
00104 
00105 // read xttree ------------------------------------------------------------
00106      int i;
00107      int key;
00108      double xtpar;
00109      int entry;
00110      TTree* xttree = (TTree*)fconst.Get("XtTree");
00111      xttree -> SetBranchAddress("xtkey", &key);
00112      xttree -> SetBranchAddress("xtpar", &xtpar);
00113      entry = (int)xttree -> GetEntries();
00114      for(i=0; i<entry; i++){
00115           xttree -> GetEntry(i);
00116           calconst -> fillXtpar(key, xtpar);
00117      }
00118      log << MSG::INFO << "read XTtree" << endreq;
00119 
00120 // read t0tree ------------------------------------------------------------
00121      double t0;
00122      double delt0;
00123      TTree* t0tree = (TTree*)fconst.Get("T0Tree");
00124      t0tree -> SetBranchAddress("t0", &t0);
00125      t0tree -> SetBranchAddress("delt0", &delt0);
00126      entry = (int)t0tree -> GetEntries();
00127      for(i=0; i<entry; i++){
00128           t0tree -> GetEntry(i);
00129           calconst -> fillT0(t0);
00130           calconst -> fillDelT0(delt0);
00131      }
00132      log << MSG::INFO << "read XTtree" << endreq;
00133 
00134 // read qttree ------------------------------------------------------------
00135      double qtpar0;
00136      double qtpar1;
00137      TTree* qttree = (TTree*)fconst.Get("QtTree");
00138      qttree -> SetBranchAddress("qtpar0", &qtpar0);
00139      qttree -> SetBranchAddress("qtpar1", &qtpar1);
00140      entry = (int)qttree -> GetEntries();
00141      for(i=0; i<entry; i++){
00142           qttree -> GetEntry(i);
00143           calconst -> fillQtpar0(qtpar0);
00144           calconst -> fillQtpar1(qtpar1);
00145      }
00146 
00147 // read sdtree ---------------------------------------------------------
00148      double sdpar;
00149      TTree* sdtree = (TTree*)fconst.Get("SdTree");
00150      sdtree -> SetBranchAddress("sdkey", &key);
00151      sdtree -> SetBranchAddress("sdpar", &sdpar);
00152      entry = sdtree -> GetEntries();
00153      for(i=0; i<entry; i++){
00154           sdtree -> GetEntry(i);
00155           calconst -> fillSdpar(key, sdpar);
00156      }
00157 
00158      fconst.Close();
00159 
00160      log << MSG::INFO << "read MdcCalibConst over" << endreq;
00161 }
00162 
00163 
00164 // write calibration data directly in run directory
00165 void MdcCalConstMgr::wrtConst(MdcCalibConst* calconst) {
00166      IMessageSvc* msgSvc;
00167      Gaudi::svcLocator() -> service("MessageSvc", msgSvc);
00168      MsgStream log(msgSvc, "MdcCalConstMgr");
00169      log << MSG::INFO << "MdcCalConstMgr::wrtConst()" << endreq;
00170 
00171      TFile fconst("MdcCalibConst_new.root", "recreate");
00172 
00173 // XT parameter tree -------------------------------------------------------
00174      int i;
00175      int key;
00176      int entry;
00177      double xtpar;
00178      TTree* xttree = new TTree("XtTree", "XtTree");
00179      xttree -> Branch("xtkey", &key, "key/I");
00180      xttree -> Branch("xtpar", &xtpar, "xtpar/D");
00181      calconst -> setXtBegin();
00182      while( calconst -> getNextXtpar(key, xtpar) ){
00183           xttree -> Fill();
00184      }
00185 
00186 // T0 parameter tree -------------------------------------------------------
00187      double t0;
00188      double delt0;
00189 
00190      TTree* t0tree = new TTree("T0Tree", "T0Tree");
00191      t0tree -> Branch("t0", &t0, "t0/D");
00192      t0tree -> Branch("delt0", &delt0, "delt0/D");
00193      entry = calconst -> getT0Size();
00194      for(i=0; i<entry; i++){
00195           t0 = calconst -> getT0(i);
00196           delt0 = calconst -> getDelT0(i);
00197           t0tree -> Fill();
00198      }
00199 
00200 // QT parameter tree -------------------------------------------------------
00201      double qtpar0;
00202      double qtpar1;
00203 
00204      TTree* qttree = new TTree("QtTree", "QtTree");
00205      qttree -> Branch("qtpar0", &qtpar0, "qtpar0/D");
00206      qttree -> Branch("qtpar1", &qtpar1, "qtpar1/D");
00207      entry = calconst -> getQtSize();
00208      for(i=0; i<entry; i++){
00209           qtpar0 = calconst -> getQtpar0(i);
00210           qtpar1 = calconst -> getQtpar1(i);
00211           qttree -> Fill();
00212      }
00213 
00214 // Spacial Resolution parameter tree ---------------------------------------
00215      double sdpar;
00216 
00217      TTree* sdtree = new TTree("SdTree", "SdTree");
00218      sdtree -> Branch("sdkey", &key, "key/I");
00219      sdtree -> Branch("sdpar", &sdpar, "sdpar/D");
00220      calconst -> setSdBegin();
00221      while( calconst -> getNextSdpar(key, sdpar) ){
00222           sdtree -> Fill();
00223      }
00224 
00225      xttree -> Write();
00226      t0tree -> Write();
00227      qttree -> Write();
00228      sdtree -> Write();
00229 
00230      delete xttree;
00231      delete t0tree;
00232      delete qttree;
00233      delete sdtree;
00234 
00235      fconst.Close();
00236 
00237      log << MSG::INFO << "MdcCalibConst_new.root was written." << endreq;
00238 }

Generated on Tue Nov 29 23:12:50 2016 for BOSS_7.0.2 by  doxygen 1.4.7