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
00023 }
00024
00025 MdcCalConstMgr::~MdcCalConstMgr(){
00026
00027 }
00028
00029 void MdcCalConstMgr::init(IMdcGeomSvc* mdcGeomSvc, IMdcCalibFunSvc* mdcFunSvc){
00030 m_mdcGeomSvc = mdcGeomSvc;
00031 m_mdcFunSvc = mdcFunSvc;
00032 }
00033
00034
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
00055 m_mdcFunSvc -> setXtBegin();
00056 while( m_mdcFunSvc -> getNextXtpar(key, val) ){
00057 calconst -> fillXtpar(key, val);
00058 }
00059
00060
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
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
00081 m_mdcFunSvc -> setSdBegin();
00082 while( m_mdcFunSvc -> getNextSdpar(key, val) ){
00083 calconst -> fillSdpar(key, val);
00084 }
00085 }
00086
00087
00088
00089 void MdcCalConstMgr::wrtConstTcds(MdcCalibConst* calconst){
00090
00091 }
00092
00093
00094
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
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
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
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
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
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
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
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
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
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 }