BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MdcCalConstMgr.cxx
Go to the documentation of this file.
2
3#include "GaudiKernel/Bootstrap.h"
4#include "GaudiKernel/IDataProviderSvc.h"
5#include "GaudiKernel/IMessageSvc.h"
6#include "GaudiKernel/ISvcLocator.h"
7#include "GaudiKernel/MsgStream.h"
8#include "GaudiKernel/PropertyMgr.h"
9#include "GaudiKernel/SmartDataPtr.h"
10#include "GaudiKernel/StatusCode.h"
11
12#include "TFile.h"
13#include "TH1F.h"
14#include "TObjArray.h"
15#include "TROOT.h"
16#include "TTree.h"
17
18#include <iomanip>
19#include <iostream>
20
22 // constructor
23}
24
26 // destructor
27}
28
29void MdcCalConstMgr::init( IMdcGeomSvc* mdcGeomSvc, IMdcCalibFunSvc* mdcFunSvc ) {
30 m_mdcGeomSvc = mdcGeomSvc;
31 m_mdcFunSvc = mdcFunSvc;
32}
33
34// read calibration data from TCDS
36 IMessageSvc* msgSvc;
37 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
38 MsgStream log( msgSvc, "MdcCalConstMgr" );
39 log << MSG::INFO << "Read calibration data from TCDS by MdcCalibFunSvc" << endmsg;
40
41 int lay;
42 int wid;
43
44 int nlayer;
45 int nwire;
46
47 int key;
48 double val;
49
50 nlayer = m_mdcGeomSvc->getLayerSize();
51 nwire = m_mdcGeomSvc->getWireSize();
52
53 // read XT data -----------------------------------------------------------
54 m_mdcFunSvc->setXtBegin();
55 while ( m_mdcFunSvc->getNextXtpar( key, val ) ) { calconst->fillXtpar( key, val ); }
56
57 // read T0 data -----------------------------------------------------------
58 double t0;
59 double delt0;
60 for ( wid = 0; wid < nwire; wid++ )
61 {
62 t0 = m_mdcFunSvc->getT0( wid );
63 delt0 = m_mdcFunSvc->getDelT0( wid );
64 calconst->fillT0( t0 );
65 calconst->fillDelT0( delt0 );
66 }
67
68 // read QT data -----------------------------------------------------------
69 double qtpar0;
70 double qtpar1;
71 for ( lay = 0; lay < nlayer; lay++ )
72 {
73 qtpar0 = m_mdcFunSvc->getQtpar( lay, 0 );
74 qtpar1 = m_mdcFunSvc->getQtpar( lay, 1 );
75 calconst->fillQtpar0( qtpar0 );
76 calconst->fillQtpar1( qtpar1 );
77 }
78
79 // read spatial resolution data -------------------------------------------
80 m_mdcFunSvc->setSdBegin();
81 while ( m_mdcFunSvc->getNextSdpar( key, val ) ) { calconst->fillSdpar( key, val ); }
82}
83
84// write calibration data from TCDS
86
87// read calibration data directly in run directory
89 IMessageSvc* msgSvc;
90 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
91 MsgStream log( msgSvc, "MdcCalConstMgr" );
92 log << MSG::WARNING << "read calibration data directly from run directory" << endmsg;
93
94 TFile fconst( "MdcCalibConst.root" );
95 log << MSG::INFO << "open file" << endmsg;
96
97 // read xttree ------------------------------------------------------------
98 int i;
99 int key;
100 double xtpar;
101 int entry;
102 TTree* xttree = (TTree*)fconst.Get( "XtTree" );
103 xttree->SetBranchAddress( "xtkey", &key );
104 xttree->SetBranchAddress( "xtpar", &xtpar );
105 entry = (int)xttree->GetEntries();
106 for ( i = 0; i < entry; i++ )
107 {
108 xttree->GetEntry( i );
109 calconst->fillXtpar( key, xtpar );
110 }
111 log << MSG::INFO << "read XTtree" << endmsg;
112
113 // read t0tree ------------------------------------------------------------
114 double t0;
115 double delt0;
116 TTree* t0tree = (TTree*)fconst.Get( "T0Tree" );
117 t0tree->SetBranchAddress( "t0", &t0 );
118 t0tree->SetBranchAddress( "delt0", &delt0 );
119 entry = (int)t0tree->GetEntries();
120 for ( i = 0; i < entry; i++ )
121 {
122 t0tree->GetEntry( i );
123 calconst->fillT0( t0 );
124 calconst->fillDelT0( delt0 );
125 }
126 log << MSG::INFO << "read XTtree" << endmsg;
127
128 // read qttree ------------------------------------------------------------
129 double qtpar0;
130 double qtpar1;
131 TTree* qttree = (TTree*)fconst.Get( "QtTree" );
132 qttree->SetBranchAddress( "qtpar0", &qtpar0 );
133 qttree->SetBranchAddress( "qtpar1", &qtpar1 );
134 entry = (int)qttree->GetEntries();
135 for ( i = 0; i < entry; i++ )
136 {
137 qttree->GetEntry( i );
138 calconst->fillQtpar0( qtpar0 );
139 calconst->fillQtpar1( qtpar1 );
140 }
141
142 // read sdtree ---------------------------------------------------------
143 double sdpar;
144 TTree* sdtree = (TTree*)fconst.Get( "SdTree" );
145 sdtree->SetBranchAddress( "sdkey", &key );
146 sdtree->SetBranchAddress( "sdpar", &sdpar );
147 entry = sdtree->GetEntries();
148 for ( i = 0; i < entry; i++ )
149 {
150 sdtree->GetEntry( i );
151 calconst->fillSdpar( key, sdpar );
152 }
153
154 fconst.Close();
155
156 log << MSG::INFO << "read MdcCalibConst over" << endmsg;
157}
158
159// write calibration data directly in run directory
161 IMessageSvc* msgSvc;
162 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
163 MsgStream log( msgSvc, "MdcCalConstMgr" );
164 log << MSG::INFO << "MdcCalConstMgr::wrtConst()" << endmsg;
165
166 TFile fconst( "MdcCalibConst_new.root", "recreate" );
167
168 // XT parameter tree -------------------------------------------------------
169 int i;
170 int key;
171 int entry;
172 double xtpar;
173 TTree* xttree = new TTree( "XtTree", "XtTree" );
174 xttree->Branch( "xtkey", &key, "key/I" );
175 xttree->Branch( "xtpar", &xtpar, "xtpar/D" );
176 calconst->setXtBegin();
177 while ( calconst->getNextXtpar( key, xtpar ) ) { xttree->Fill(); }
178
179 // T0 parameter tree -------------------------------------------------------
180 double t0;
181 double delt0;
182
183 TTree* t0tree = new TTree( "T0Tree", "T0Tree" );
184 t0tree->Branch( "t0", &t0, "t0/D" );
185 t0tree->Branch( "delt0", &delt0, "delt0/D" );
186 entry = calconst->getT0Size();
187 for ( i = 0; i < entry; i++ )
188 {
189 t0 = calconst->getT0( i );
190 delt0 = calconst->getDelT0( i );
191 t0tree->Fill();
192 }
193
194 // QT parameter tree -------------------------------------------------------
195 double qtpar0;
196 double qtpar1;
197
198 TTree* qttree = new TTree( "QtTree", "QtTree" );
199 qttree->Branch( "qtpar0", &qtpar0, "qtpar0/D" );
200 qttree->Branch( "qtpar1", &qtpar1, "qtpar1/D" );
201 entry = calconst->getQtSize();
202 for ( i = 0; i < entry; i++ )
203 {
204 qtpar0 = calconst->getQtpar0( i );
205 qtpar1 = calconst->getQtpar1( i );
206 qttree->Fill();
207 }
208
209 // Spacial Resolution parameter tree ---------------------------------------
210 double sdpar;
211
212 TTree* sdtree = new TTree( "SdTree", "SdTree" );
213 sdtree->Branch( "sdkey", &key, "key/I" );
214 sdtree->Branch( "sdpar", &sdpar, "sdpar/D" );
215 calconst->setSdBegin();
216 while ( calconst->getNextSdpar( key, sdpar ) ) { sdtree->Fill(); }
217
218 xttree->Write();
219 t0tree->Write();
220 qttree->Write();
221 sdtree->Write();
222
223 delete xttree;
224 delete t0tree;
225 delete qttree;
226 delete sdtree;
227
228 fconst.Close();
229
230 log << MSG::INFO << "MdcCalibConst_new.root was written." << endmsg;
231}
IMessageSvc * msgSvc()
*************DOUBLE PRECISION m_pi *DOUBLE PRECISION m_HvecTau2 DOUBLE PRECISION m_HvClone2 DOUBLE PRECISION m_gamma1 DOUBLE PRECISION m_gamma2 DOUBLE PRECISION m_thet1 DOUBLE PRECISION m_thet2 INTEGER m_IFPHOT *COMMON c_Taupair $ !Spin Polarimeter vector first Tau $ !Spin Polarimeter vector second Tau $ !Clone Spin Polarimeter vector first Tau $ !Clone Spin Polarimeter vector second Tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning nd tau $ !Random Euler angle for cloning nd tau $ !Random Euler angle for cloning nd tau $ !phi of HvecTau1 $ !theta of HvecTau1 $ !phi of HvecTau2 $ !theta of HvecTau2 $ !super key
Definition Taupair.h:42
void wrtConst(MdcCalibConst *calconst)
void init(IMdcGeomSvc *mdcGeomSvc, IMdcCalibFunSvc *mdcFunSvc)
void rdConstTcds(MdcCalibConst *calconst)
void rdConst(MdcCalibConst *calconst)
void wrtConstTcds(MdcCalibConst *calconst)
void fillXtpar(int key, double val)
double getT0(int wireid) const
int getNextXtpar(int &key, double &xtpar)
double getDelT0(int wireid) const
double getQtpar1(int lay) const
double getQtpar0(int lay) const
int getNextSdpar(int &key, double &sdpar)
void fillSdpar(int key, double val)