BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
WrMdcCalib Class Reference

#include <WrMdcCalib.h>

Inheritance diagram for WrMdcCalib:

Public Member Functions

 WrMdcCalib ()
 ~WrMdcCalib ()
void initialize (TObjArray *hlist, IMdcGeomSvc *mdcGeomSvc, IMdcCalibFunSvc *mdcFunSvc, IMdcUtilitySvc *mdcUtilitySvc)
void setParam (MdcCalParams &param)
int fillHist (MdcCalEvent *event)
int updateConst (MdcCalibConst *calconst)
void printCut () const
void clear ()
Public Member Functions inherited from MdcCalib
 MdcCalib ()
virtual ~MdcCalib ()

Detailed Description

Definition at line 6 of file WrMdcCalib.h.

Constructor & Destructor Documentation

◆ WrMdcCalib()

WrMdcCalib::WrMdcCalib ( )

Definition at line 13 of file WrMdcCalib.cxx.

13 {
14 for ( int lay = 0; lay < MdcCalNLayer; lay++ )
15 {
16 if ( lay < 8 )
17 {
18 m_docaMin[lay] = 1.2; // mm
19 m_docaMax[lay] = 4.8; // mm
20 }
21 else
22 {
23 m_docaMin[lay] = 1.6; // mm
24 m_docaMax[lay] = 6.4; // mm
25 }
26 }
27}
const int MdcCalNLayer
Definition MdcCalParams.h:6

◆ ~WrMdcCalib()

WrMdcCalib::~WrMdcCalib ( )

Definition at line 29 of file WrMdcCalib.cxx.

29{}

Member Function Documentation

◆ clear()

void WrMdcCalib::clear ( )
virtual

Implements MdcCalib.

Definition at line 31 of file WrMdcCalib.cxx.

31 {
32 for ( int i = 0; i < MdcCalTotCell; i++ )
33 {
34 delete m_hleft[i];
35 delete m_hright[i];
36 }
37 delete m_hdwxtot;
38 delete m_hddwx;
39 delete m_hdwytot;
40 delete m_hddwy;
41 delete m_hLrResiSum;
42 delete m_hLrResiSub;
43 delete m_fdWire;
44 delete m_fdResiWire;
46}
const int MdcCalTotCell
Definition MdcCalParams.h:9
virtual void clear()=0
Definition MdcCalib.cxx:83

◆ fillHist()

int WrMdcCalib::fillHist ( MdcCalEvent * event)
virtual

Implements MdcCalib.

Definition at line 108 of file WrMdcCalib.cxx.

108 {
109 IMessageSvc* msgSvc;
110 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
111 MsgStream log( msgSvc, "WrMdcCalib" );
112 log << MSG::DEBUG << "WrMdcCalib::fillHist()" << endmsg;
113
114 MdcCalib::fillHist( event );
115
116 // get EsTimeCol
117 bool esCutFg = event->getEsCutFlag();
118 if ( !esCutFg ) return -1;
119
120 int i;
121 int k;
122 int ntrk;
123 int nhit;
124 int stat;
125
126 int lay;
127 int cel;
128 int wir;
129 int lr;
130 double dmeas;
131 double doca;
132 double resi;
133
134 bool fgHitLay[MdcCalNLayer];
135
136 MdcCalRecTrk* rectrk;
137 MdcCalRecHit* rechit;
138
139 ntrk = event->getNTrk();
140 log << MSG::DEBUG << "number of tracks: " << ntrk << endmsg;
141
142 for ( i = 0; i < ntrk; i++ )
143 {
144 rectrk = event->getRecTrk( i );
145 nhit = rectrk->getNHits();
146
147 // dr cut
148 double dr = rectrk->getDr();
149 if ( fabs( dr ) > m_param.drCut ) continue;
150
151 // dz cut
152 double dz = rectrk->getDz();
153 if ( fabs( dz ) > m_param.dzCut ) continue;
154
155 // momentum cut
156 double p = rectrk->getP();
157 if ( ( fabs( p ) < m_param.pCut[0] ) || ( fabs( p ) > m_param.pCut[1] ) ) continue;
158
159 for ( lay = 0; lay < MdcCalNLayer; lay++ ) fgHitLay[lay] = false;
160 for ( k = 0; k < nhit; k++ )
161 {
162 rechit = rectrk->getRecHit( k );
163 lay = rechit->getLayid();
164 fgHitLay[lay] = true;
165 }
166
167 int nhitlay = 0;
168 for ( lay = 0; lay < MdcCalNLayer; lay++ )
169 if ( fgHitLay[lay] ) nhitlay++;
170 if ( nhitlay < m_param.nHitLayCut ) continue;
171
172 log << MSG::DEBUG << "number of hits: " << nhit << endmsg;
173 for ( k = 0; k < nhit; k++ )
174 {
175 rechit = rectrk->getRecHit( k );
176 lay = rechit->getLayid();
177 cel = rechit->getCellid();
178 wir = m_mdcGeomSvc->Wire( lay, cel )->Id();
179 lr = rechit->getLR();
180 doca = rechit->getDocaExc();
181 dmeas = rechit->getDmeas();
182 resi = rechit->getResiExc();
183 stat = rechit->getStat();
184
185 if ( 1 != stat ) continue;
186
187 if ( ( fabs( doca ) < m_docaMin[lay] ) || ( fabs( doca ) > m_docaMax[lay] ) ||
188 ( fabs( resi ) > m_param.resiCut[lay] ) )
189 { continue; }
190
191 if ( 0 == lay )
192 {
193 if ( !fgHitLay[1] ) continue;
194 }
195 else if ( 42 == lay )
196 {
197 if ( !fgHitLay[41] ) continue;
198 }
199 else
200 {
201 if ( ( !fgHitLay[lay - 1] ) && ( !fgHitLay[lay + 1] ) ) continue;
202 }
203
204 if ( wir < ( m_mdcGeomSvc->getWireSize() ) )
205 {
206 if ( 0 == lr ) { m_hleft[wir]->Fill( resi ); }
207 else if ( 1 == lr ) { m_hright[wir]->Fill( resi ); }
208 }
209 else { std::cout << "wir: " << wir << std::endl; }
210 }
211 }
212 return 1;
213}
IMessageSvc * msgSvc()
double getDocaExc() const
double getDmeas() const
int getCellid() const
int getLayid() const
double getResiExc() const
int getLR() const
int getStat() const
MdcCalRecHit * getRecHit(int index) const
double getP() const
double getDz() const
int getNHits() const
double getDr() const
virtual int fillHist(MdcCalEvent *event)=0
Definition MdcCalib.cxx:767

◆ initialize()

void WrMdcCalib::initialize ( TObjArray * hlist,
IMdcGeomSvc * mdcGeomSvc,
IMdcCalibFunSvc * mdcFunSvc,
IMdcUtilitySvc * mdcUtilitySvc )
virtual

Implements MdcCalib.

Definition at line 48 of file WrMdcCalib.cxx.

49 {
50 IMessageSvc* msgSvc;
51 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
52 MsgStream log( msgSvc, "WrMdcCalib" );
53 log << MSG::INFO << "WrMdcCalib::initialize()" << endmsg;
54
55 m_hlist = hlist;
56 m_mdcGeomSvc = mdcGeomSvc;
57 m_mdcFunSvc = mdcFunSvc;
58 m_mdcUtilitySvc = mdcUtilitySvc;
59
60 MdcCalib::initialize( m_hlist, m_mdcGeomSvc, m_mdcFunSvc, m_mdcUtilitySvc );
61
62 int i;
63 int nwire;
64 int lay;
65 int cel;
66 char hname[200];
67
68 m_fdWire = new TFolder( "WireCor", "WireCor" );
69 m_hlist->Add( m_fdWire );
70
71 m_fdResiWire = new TFolder( "ResiWire", "ResiWire" );
72 m_hlist->Add( m_fdResiWire );
73
74 nwire = m_mdcGeomSvc->getWireSize();
75 for ( i = 0; i < nwire; i++ )
76 {
77 lay = m_mdcGeomSvc->Wire( i )->Layer();
78 cel = m_mdcGeomSvc->Wire( i )->Cell();
79
80 sprintf( hname, "h%04d_L%02d_%03d_Left", i, lay, cel );
81 m_hleft[i] = new TH1F( hname, hname, 300, -1.5, 1.5 );
82 m_fdWire->Add( m_hleft[i] );
83
84 sprintf( hname, "h%04d_L%02d_%03d_Right", i, lay, cel );
85 m_hright[i] = new TH1F( hname, hname, 300, -1.5, 1.5 );
86 m_fdWire->Add( m_hright[i] );
87 }
88
89 m_hdwxtot = new TH1F( "dwXtot", "", 100, -0.5, 0.5 );
90 m_fdResiWire->Add( m_hdwxtot );
91
92 m_hddwx = new TH1F( "ddwX", "", 100, -0.5, 0.5 );
93 m_fdResiWire->Add( m_hddwx );
94
95 m_hdwytot = new TH1F( "dwYtot", "", 100, -0.5, 0.5 );
96 m_fdResiWire->Add( m_hdwytot );
97
98 m_hddwy = new TH1F( "ddwY", "", 100, -0.5, 0.5 );
99 m_fdResiWire->Add( m_hddwy );
100
101 m_hLrResiSum = new TH1F( "LrResiSum", "", 200, -0.5, 0.5 );
102 m_fdResiWire->Add( m_hLrResiSum );
103
104 m_hLrResiSub = new TH1F( "LrResiSub", "", 200, -0.5, 0.5 );
105 m_fdResiWire->Add( m_hLrResiSub );
106}
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
virtual void initialize(TObjArray *hlist, IMdcGeomSvc *mdcGeomSvc, IMdcCalibFunSvc *mdcFunSvc, IMdcUtilitySvc *mdcUtilitySvc)=0
Definition MdcCalib.cxx:225

◆ printCut()

void WrMdcCalib::printCut ( ) const
virtual

Implements MdcCalib.

Definition at line 215 of file WrMdcCalib.cxx.

virtual void printCut() const =0

◆ setParam()

void WrMdcCalib::setParam ( MdcCalParams & param)
inlinevirtual

Implements MdcCalib.

Definition at line 44 of file WrMdcCalib.h.

44 {
45 MdcCalib::setParam( param );
46 m_param = param;
47}
virtual void setParam(MdcCalParams &param)=0
Definition MdcCalib.h:305

◆ updateConst()

int WrMdcCalib::updateConst ( MdcCalibConst * calconst)
virtual

Implements MdcCalib.

Definition at line 217 of file WrMdcCalib.cxx.

217 {
218 IMessageSvc* msgSvc;
219 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
220 MsgStream log( msgSvc, "WrMdcCalib" );
221 log << MSG::INFO << "WrMdcCalib::updateConst()" << endmsg;
222
223 MdcCalib::updateConst( calconst );
224
225 int i;
226 int lay;
227 int cel;
228 int nwire = m_mdcGeomSvc->getWireSize();
229 double dwphi; // wire derivation in phi direction
230 double resiLrSum; // to fill histogram
231 double wpos[6];
232 double xx;
233 double yy;
234 double rr;
235 double dx;
236 double dy;
237 double wphi;
238
239 Stat_t entry_l;
240 double mean_l;
241 Stat_t entry_r;
242 double mean_r;
243 const MdcGeoWire* pWire;
244
245 double ddw[MdcCalTotCell][6];
246 double dwinput[MdcCalTotCell][6];
247 string strtmp;
248 ifstream fwpinput( m_param.wpcFile.c_str() );
249 for ( i = 0; i < 7; i++ ) fwpinput >> strtmp;
250 for ( i = 0; i < nwire; i++ )
251 {
252 fwpinput >> strtmp >> dwinput[i][0] >> dwinput[i][1] >> dwinput[i][2] >> dwinput[i][3] >>
253 dwinput[i][4] >> dwinput[i][5];
254 }
255 fwpinput.close();
256
257 std::cout << "totwire: " << nwire << std::endl;
258 for ( i = 0; i < nwire; i++ )
259 {
260 pWire = m_mdcGeomSvc->Wire( i );
261 lay = pWire->Layer();
262 cel = pWire->Cell();
263
264 if ( 1 == m_param.fgCalib[lay] )
265 {
266 entry_l = m_hleft[i]->GetEntries();
267 mean_l = m_hleft[i]->GetMean();
268
269 entry_r = m_hright[i]->GetEntries();
270 mean_r = m_hright[i]->GetMean();
271
272 dwphi = 0.5 * ( mean_l - mean_r );
273 }
274 else { dwphi = 0.0; }
275 if ( 0 == m_param.fgWireCal[i] ) dwphi = 0.0;
276
277 resiLrSum = 0.5 * ( mean_l + mean_r );
278 m_hLrResiSum->Fill( resiLrSum );
279 m_hLrResiSub->Fill( dwphi );
280
281 wpos[0] = pWire->Backward().x(); // east end
282 wpos[1] = pWire->Backward().y();
283 wpos[3] = pWire->Forward().x(); // west end
284 wpos[4] = pWire->Forward().y();
285
286 xx = 0.5 * ( wpos[0] + wpos[3] );
287 yy = 0.5 * ( wpos[1] + wpos[4] );
288 rr = sqrt( ( xx * xx ) + ( yy * yy ) );
289
290 if ( yy >= 0 ) wphi = acos( xx / rr );
291 else wphi = PI2 - acos( xx / rr );
292
293 dx = -1.0 * dwphi * sin( wphi );
294 dy = dwphi * cos( wphi );
295
296 ddw[i][0] = dx;
297 ddw[i][1] = dy;
298 ddw[i][2] = 0.0;
299 ddw[i][3] = dx;
300 ddw[i][4] = dy;
301 ddw[i][5] = 0.0;
302 }
303
304 ofstream fwpc( "WirePosCalib_new.txt" );
305 fwpc << setw( 5 ) << "wireId" << setw( 15 ) << "dx_East(mm)" << setw( 15 ) << "dy_East(mm)"
306 << setw( 15 ) << "dz_East(mm)" << setw( 15 ) << "dx_West(mm)" << setw( 15 )
307 << "dy_West(mm)" << setw( 15 ) << "dz_West(mm)" << endl;
308
309 ofstream fdw( "dw.txt" );
310 fdw << setw( 5 ) << "wireId" << setw( 15 ) << "ddx_East(mm)" << setw( 15 ) << "ddy_East(mm)"
311 << setw( 15 ) << "ddz_East(mm)" << setw( 15 ) << "ddx_West(mm)" << setw( 15 )
312 << "ddy_West(mm)" << setw( 15 ) << "ddz_West(mm)" << endl;
313
314 int k;
315 double dwtot[6];
316 for ( i = 0; i < nwire; i++ )
317 {
318 for ( k = 0; k < 6; k++ ) dwtot[k] = dwinput[i][k] + ddw[i][k];
319 fwpc << setw( 5 ) << i;
320 for ( k = 0; k < 6; k++ ) fwpc << setw( 15 ) << dwtot[k];
321 fwpc << endl;
322
323 fdw << setw( 5 ) << i;
324 for ( k = 0; k < 6; k++ ) fdw << setw( 15 ) << ddw[i][k];
325 fdw << endl;
326 m_hdwxtot->Fill( dwtot[0] );
327 m_hddwx->Fill( ddw[i][0] );
328 m_hdwytot->Fill( dwtot[1] );
329 m_hddwy->Fill( ddw[i][1] );
330 }
331 fwpc.close();
332 fdw.close();
333 return 1;
334}
virtual int updateConst(MdcCalibConst *calconst)=0

The documentation for this class was generated from the following files: