CGEM BOSS 6.6.5.f
BESIII Offline Software System
Loading...
Searching...
No Matches
DQA_Dedx.cxx
Go to the documentation of this file.
1#include <vector>
2
3#include "GaudiKernel/MsgStream.h"
4#include "GaudiKernel/SmartDataPtr.h"
5#include "GaudiKernel/PropertyMgr.h"
6#include "GaudiKernel/Bootstrap.h"
7
8#include "GaudiKernel/INTupleSvc.h"
9#include "GaudiKernel/NTuple.h"
10#include "GaudiKernel/ITHistSvc.h"
11
12#include "CLHEP/Vector/ThreeVector.h"
13#include "CLHEP/Vector/LorentzVector.h"
14
15#include "EventModel/EventModel.h"
16#include "EventModel/Event.h"
17
18#include "EvtRecEvent/EvtRecEvent.h"
19#include "EvtRecEvent/EvtRecTrack.h"
20#include "DstEvent/TofHitStatus.h"
21#include "EventModel/EventHeader.h"
22#include "EvTimeEvent/RecEsTime.h"
23
24//#include "VertexFit/VertexDbSvc.h"
25#include "ParticleID/ParticleID.h"
26//
27#include "DQAEvent/DQAEvent.h"
28#include "DQA_Dedx/DQA_Dedx.h"
29
30#include "TH2F.h"
31
32#ifndef ENABLE_BACKWARDS_COMPATIBILITY
34#endif
35using CLHEP::HepLorentzVector;
36
37
38/////////////////////////////////////////////////////////////////////////////
39
40DQA_Dedx::DQA_Dedx(const std::string& name, ISvcLocator* pSvcLocator) :
41 Algorithm(name, pSvcLocator) {
42
43 //Declare the properties
44}
45
46// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
48 MsgStream log(msgSvc(), name());
49
50 log << MSG::INFO << "in initialize()" << endmsg;
51 StatusCode status;
52
53 // DQA
54 // The first directory specifier must be "DQAFILE"
55 // The second is the sub-system name: MDC, DEDX, TOF, EMC, MUC, TRG
56 // user can define more directory, such as DAQFILE/MDC/Bhabha.
57
58
59 if(service("THistSvc", m_thsvc).isFailure()) {
60 log << MSG::ERROR << "Couldn't get THistSvc" << endreq;
61 return StatusCode::FAILURE;
62 }
63
64
65
66 NTuplePtr nt_bb(ntupleSvc(), "DQAFILE/DEDX");
67 if ( nt_bb ) m_bb_tuple = nt_bb;
68 else {
69 m_bb_tuple = ntupleSvc()->book("DQAFILE/DEDX/Bhabha", CLID_ColumnWiseTuple, "Dedx ntuple");
70 if( m_bb_tuple ) {
71 status = m_bb_tuple->addItem("runNo", m_bb_runNo);
72 status = m_bb_tuple->addItem("event", m_bb_event);
73 status = m_bb_tuple->addItem("p", m_bb_p);
74 status = m_bb_tuple->addItem("costh", m_bb_costh);
75 status = m_bb_tuple->addItem("t0", m_bb_t0);
76 status = m_bb_tuple->addItem("chiE",m_bb_chiE);
77 status = m_bb_tuple->addItem("chiMu",m_bb_chiMu);
78 status = m_bb_tuple->addItem("chiPi",m_bb_chiPi);
79 status = m_bb_tuple->addItem("chiK",m_bb_chiK);
80 status = m_bb_tuple->addItem("chiP",m_bb_chiP);
81 status = m_bb_tuple->addItem("nhit", m_bb_nhit);
82 status = m_bb_tuple->addItem("ndedxhit", m_bb_ndedxhit);
83 status = m_bb_tuple->addItem("dEdx", m_bb_dEdx);
84 } else {
85 log << MSG::ERROR << "Can not book N-tuple:" << long(m_bb_tuple) << endreq;
86 }
87 }
88
89 TH1F* h_dedx_bb = new TH1F("Dedx_bhabha", "dEdx distribution of bhabha samples", 150, 0., 1500.);
90 if(m_thsvc->regHist("/DQAHist/Dedx/Bhabha/dedx", h_dedx_bb).isFailure()) {
91 log << MSG::ERROR << "Couldn't register Dedx_bhabha" << endreq;
92 }
93 TH1F* h_dedxbarrel_bb = new TH1F("Dedx_Barrel_bhabha", "dEdx distribution of barrel bhabha samples", 150, 0., 1500.);
94 if(m_thsvc->regHist("/DQAHist/Dedx/Bhabha/dedx_barrel", h_dedxbarrel_bb).isFailure()) {
95 log << MSG::ERROR << "Couldn't register Dedx_Barrel_bhabha" << endreq;
96 }
97 TH1F* h_chie_bb = new TH1F("ChiE_bhabha", "ChiE distribution of bhabha samples", 200, -20., 20.);
98 if(m_thsvc->regHist("/DQAHist/Dedx/Bhabha/chiE", h_chie_bb).isFailure()) {
99 log << MSG::ERROR << "Couldn't register chiE_bhabha" << endreq;
100 }
101 TH1F* h_nhitdedx_bb = new TH1F("Nhitdedx", "dEdx used hits", 40, 0., 60.);
102 if(m_thsvc->regHist("/DQAHist/Dedx/Bhabha/nhitdedx", h_nhitdedx_bb).isFailure()) {
103 log << MSG::ERROR << "Couldn't register Nhitdedx" << endreq;
104 }
105 TH1F* h_nhit_bb = new TH1F("Nhit", "Total hits", 40, 0., 60.);
106 if(m_thsvc->regHist("/DQAHist/Dedx/Bhabha/nhit", h_nhit_bb).isFailure()) {
107 log << MSG::ERROR << "Couldn't register Nhit" << endreq;
108 }
109 TH2F* h_dedxvsp_bb=new TH2F("dEdx vs momentume","dEdx vs momentume", 200,0,2.5,200,0,2000);
110 if(m_thsvc->regHist("/DQAHist/Dedx/Bhabha/dedx_p", h_dedxvsp_bb).isFailure()) {
111 log << MSG::ERROR << "Couldn't register dedx vs p" << endreq;
112 }
113 TH2F* h_dedxvscos_bb=new TH2F("dEdx vs costheta","dEdx vs costheta", 100,-1,1,150,0,1500);
114 if(m_thsvc->regHist("/DQAHist/Dedx/Bhabha/dedx_costh", h_dedxvscos_bb).isFailure()) {
115 log << MSG::ERROR << "Couldn't register dedx vs costh" << endreq;
116 }
117 TH2F* h_dedxvst0_bb=new TH2F("dEdx vs t0","dEdx vs t0", 250,0,2500,150,0,1500);
118 if(m_thsvc->regHist("/DQAHist/Dedx/Bhabha/dedx_t0", h_dedxvst0_bb).isFailure()) {
119 log << MSG::ERROR << "Couldn't register dedx vs t0" << endreq;
120 }
121
122
123 NTuplePtr nt_du(ntupleSvc(), "DQAFILE/DEDX");
124 if ( nt_du ) m_bb_tuple = nt_du;
125 else {
126 m_du_tuple = ntupleSvc()->book("DQAFILE/DEDX/Dimu", CLID_ColumnWiseTuple, "Dedx ntuple");
127 if( m_du_tuple ) {
128 status = m_du_tuple->addItem("runNo", m_du_runNo);
129 status = m_du_tuple->addItem("event", m_du_event);
130 status = m_du_tuple->addItem("p", m_du_p);
131 status = m_du_tuple->addItem("costh", m_du_costh);
132 status = m_du_tuple->addItem("t0", m_du_t0);
133 status = m_du_tuple->addItem("chiE",m_du_chiE);
134 status = m_du_tuple->addItem("chiMu",m_du_chiMu);
135 status = m_du_tuple->addItem("chiPi",m_du_chiPi);
136 status = m_du_tuple->addItem("chiK",m_du_chiK);
137 status = m_du_tuple->addItem("chiP",m_du_chiP);
138 status = m_du_tuple->addItem("nhit", m_du_nhit);
139 status = m_du_tuple->addItem("ndedxhit", m_du_ndedxhit);
140 status = m_du_tuple->addItem("dEdx", m_du_dEdx);
141 } else {
142 log << MSG::ERROR << "Can not book N-tuple:" << long(m_du_tuple) << endreq;
143 }
144 }
145
146
147 TH1F* h_dedx_du = new TH1F("Dedx_dimu", "dEdx distribution of bhabha samples", 150, 0., 1500.);
148 if(m_thsvc->regHist("/DQAHist/Dedx/Dimu/dedx", h_dedx_du).isFailure()) {
149 log << MSG::ERROR << "Couldn't register Dedx_dimu" << endreq;
150 }
151 TH1F* h_dedxbarrel_du = new TH1F("Dedx_Barrel_dimu", "dEdx distribution of barrel bhabha samples", 150, 0., 1500.);
152 if(m_thsvc->regHist("/DQAHist/Dedx/Dimu/dedx_barrel", h_dedxbarrel_du).isFailure()) {
153 log << MSG::ERROR << "Couldn't register Dedx_Barrel_dimu" << endreq;
154 }
155 TH1F* h_chimu_du = new TH1F("ChiE_dimu", "ChiE distribution of bhabha samples", 200, -20., 20.);
156 if(m_thsvc->regHist("/DQAHist/Dedx/Dimu/chiMu", h_chimu_du).isFailure()) {
157 log << MSG::ERROR << "Couldn't register chiMu_dimu" << endreq;
158 }
159 TH1F* h_nhitdedx_du = new TH1F("Nhitdedx", "dEdx used hits", 40, 0., 60.);
160 if(m_thsvc->regHist("/DQAHist/Dedx/Dimu/nhitdedx", h_nhitdedx_du).isFailure()) {
161 log << MSG::ERROR << "Couldn't register Nhitdedx" << endreq;
162 }
163 TH1F* h_nhit_du = new TH1F("Nhit", "Total hits", 40, 0., 60.);
164 if(m_thsvc->regHist("/DQAHist/Dedx/Dimu/nhit", h_nhit_du).isFailure()) {
165 log << MSG::ERROR << "Couldn't register Nhit" << endreq;
166 }
167 TH2F* h_dedxvsp_du=new TH2F("dEdx vs momentume","dEdx vs momentume", 200,0,2.5,200,0,2000);
168 if(m_thsvc->regHist("/DQAHist/Dedx/Dimu/dedx_p", h_dedxvsp_du).isFailure()) {
169 log << MSG::ERROR << "Couldn't register dedx vs p" << endreq;
170 }
171 TH2F* h_dedxvscos_du=new TH2F("dEdx vs costheta","dEdx vs costheta", 100,-1,1,150,0,1500);
172 if(m_thsvc->regHist("/DQAHist/Dedx/Dimu/dedx_costh", h_dedxvscos_du).isFailure()) {
173 log << MSG::ERROR << "Couldn't register dedx vs costh" << endreq;
174 }
175 TH2F* h_dedxvst0_du=new TH2F("dEdx vs t0","dEdx vs t0", 200,0,2500,150,0,1500);
176 if(m_thsvc->regHist("/DQAHist/Dedx/Dimu/dedx_t0", h_dedxvst0_du).isFailure()) {
177 log << MSG::ERROR << "Couldn't register dedx vs t0" << endreq;
178 }
179
180
181
182
183 log << MSG::INFO << "successfully return from initialize()" <<endmsg;
184 return StatusCode::SUCCESS;
185
186
187}
188
189// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
190StatusCode DQA_Dedx::execute() {
191
192 MsgStream log(msgSvc(), name());
193 log << MSG::INFO << "in execute()" << endreq;
194
195 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
196 m_bb_runNo=eventHeader->runNumber();
197 m_bb_event=eventHeader->eventNumber();
198
199 m_du_runNo=eventHeader->runNumber();
200 m_du_event=eventHeader->eventNumber();
201
202 log << MSG::DEBUG <<"run, evt num = "
203 << m_bb_runNo << " , "
204 << m_bb_event <<endreq;
205
206
207 SmartDataPtr<EvtRecEvent> evtRecEvent(eventSvc(), EventModel::EvtRec::EvtRecEvent);
208
209 SmartDataPtr<DQAEvent::DQAEvent> dqaevt(eventSvc(), "/Event/DQATag");
210 if ( dqaevt ) {
211 log << MSG::INFO << "success get DQAEvent" << endreq;
212 } else {
213 log << MSG::ERROR << "Error accessing DQAEvent" << endreq;
214 return StatusCode::FAILURE;
215 }
216
217 log << MSG::DEBUG << "event tag = " << dqaevt->EventTag() << endreq;
218
219 // get the required control sample with DQA tag
220 if ( dqaevt->Bhabha() ) {
221 log << MSG::INFO << "Bhabha event" << endreq;
222 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol);
223 for(int i = 0; i < evtRecEvent->totalCharged(); i++){
224 EvtRecTrackIterator itTrk=evtRecTrkCol->begin() + i;
225 log << MSG::DEBUG << i << " " << (*itTrk)->partId() << " "
226 << (*itTrk)->quality() << endreq;
227 // get the: required particle through the track's PID
228 // Pid: 1 - electron, 2 - muon, 3 - pion, 4 - kaon, 5 - proton
229 if ( (*itTrk)->partId() != 1 ) continue; // only e+, e-
230 // if you want to do dE/dx or TOF study, select track with no bias
231 // Quality: defined by whether dE/dx or TOF is used to identify particle
232 // 0 - no dE/dx, no TOF (can be used for dE/dx and TOF calibration)
233 // 1 - only dE/dx (can be used for TOF calibration)
234 // 2 - only TOF (can be used for dE/dx calibration)
235 // 3 - Both dE/dx and TOF
236 int qual = (*itTrk)->quality();
237 if ( qual != 0 && qual != 2) continue; // no dE/dx PID is used in selection
238 // if ( qual != 0 && qual != 1) continue; // no TOF PID is used in the selection
239
240
241 TH1 *h(0);
242 TH2 *h2(0);
243 //initinalize all values
244 m_bb_runNo=-999;
245 m_bb_event=-999;
246 m_bb_p=-999;
247 m_bb_costh=-999;
248 m_bb_t0=-999;
249 m_bb_chiE=-999;
250 m_bb_chiMu=-999;
251 m_bb_chiPi=-999;
252 m_bb_chiK=-999;
253 m_bb_chiP=-999;
254 m_bb_nhit=-999;
255 m_bb_ndedxhit=-999;
256 m_bb_dEdx=-999;
257
258
259 if((*itTrk)->isMdcKalTrackValid()){
260 RecMdcKalTrack *mdcTrk = (*itTrk)->mdcKalTrack();
262 if ( mdcTrk->charge() > 0 ) {
263 log << MSG::DEBUG << "is electron" << endreq;
264 } else {
265 log << MSG::DEBUG << "is positron" << endreq;
266 }
267 double x0 =mdcTrk->x();
268 double y0 =mdcTrk->y();
269 double z0 =mdcTrk->z();
270 double Rxy=sqrt(x0*x0+y0*y0);
271
272 m_bb_p=mdcTrk->p()*mdcTrk->charge();
273 m_bb_costh=cos(mdcTrk->theta());
274
275
276 double tes=-999;
277
278 //get event start time
279 SmartDataPtr<RecEsTimeCol> aevtimeCol(eventSvc(),"/Event/Recon/RecEsTimeCol");
280 if( aevtimeCol && aevtimeCol->size()>0 ){
281 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
282 for(; iter_evt!=aevtimeCol->end(); iter_evt++){
283 tes = (*iter_evt)->getTest();
284 //esTimeflag = (*iter_evt)->getStat();
285 }
286 }
287 m_bb_t0=tes;
288
289 //get dedx information
290 if((*itTrk)->isMdcDedxValid()){
291 RecMdcDedx* dedxTrk = (*itTrk)->mdcDedx();
292 m_bb_chiE = dedxTrk->chi(0);
293 m_bb_chiMu = dedxTrk->chi(1);
294 m_bb_chiPi = dedxTrk->chi(2);
295 m_bb_chiK = dedxTrk->chi(3);
296 m_bb_chiP = dedxTrk->chi(4);
297 m_bb_ndedxhit = dedxTrk->numGoodHits();
298 m_bb_nhit = dedxTrk->numTotalHits();
299 m_bb_dEdx = dedxTrk->probPH();
300
301 //fill histograms
302 if (m_thsvc->getHist("/DQAHist/Dedx/Bhabha/dedx", h).isSuccess()) {
303 h->Fill(dedxTrk->probPH());
304 }
305 else {
306 log << MSG::ERROR << "Couldn't retrieve dedx" << endreq;
307 }
308 if(fabs(cos(mdcTrk->theta()))<0.83){
309 if (m_thsvc->getHist("/DQAHist/Dedx/Bhabha/dedx_barrel", h).isSuccess()) {
310 h->Fill(dedxTrk->probPH());
311 }
312 else {
313 log << MSG::ERROR << "Couldn't retrieve dedx_barrel" << endreq;
314 }
315 }
316 if (m_thsvc->getHist("/DQAHist/Dedx/Bhabha/chiE", h).isSuccess()) {
317 h->Fill(dedxTrk->chiE());
318 }
319 else {
320 log << MSG::ERROR << "Couldn't retrieve chiE" << endreq;
321 }
322 if (m_thsvc->getHist("/DQAHist/Dedx/Bhabha/nhitdedx", h).isSuccess()) {
323 h->Fill( dedxTrk->numGoodHits());
324 }
325 else {
326 log << MSG::ERROR << "Couldn't retrieve nhitdedx" << endreq;
327 }
328 if (m_thsvc->getHist("/DQAHist/Dedx/Bhabha/nhit", h).isSuccess()) {
329 h->Fill( dedxTrk->numTotalHits());
330 }
331 else {
332 log << MSG::ERROR << "Couldn't retrieve nhit" << endreq;
333 }
334 if (m_thsvc->getHist("/DQAHist/Dedx/Bhabha/dedx_p", h2).isSuccess()) {
335 h2->Fill(mdcTrk->p(), dedxTrk->probPH());
336 }
337 else {
338 log << MSG::ERROR << "Couldn't retrieve dedx_p" << endreq;
339 }
340 if (m_thsvc->getHist("/DQAHist/Dedx/Bhabha/dedx_costh", h2).isSuccess()) {
341 h2->Fill(cos(mdcTrk->theta()), dedxTrk->probPH());
342 }
343 else {
344 log << MSG::ERROR << "Couldn't retrieve dedx_costh" << endreq;
345 }
346 if (m_thsvc->getHist("/DQAHist/Dedx/Bhabha/dedx_t0", h2).isSuccess()) {
347 h2->Fill(tes, dedxTrk->probPH());
348 }
349 else {
350 log << MSG::ERROR << "Couldn't retrieve dedx_t0" << endreq;
351 }
352
353 }//end of valid dedx track
354 }//end of valid mdc track
355 }//end of looping track
356 }//end of bhabha tag event
357
358
359 if ( dqaevt->Dimu() ) {
360 log << MSG::INFO << "Dimu event" << endreq;
361 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol);
362 for(int i = 0; i < evtRecEvent->totalCharged(); i++){
363 EvtRecTrackIterator itTrk=evtRecTrkCol->begin() + i;
364 log << MSG::DEBUG << i << " " << (*itTrk)->partId() << " "
365 << (*itTrk)->quality() << endreq;
366 // get the: required particle through the track's PID
367 // Pid: 1 - electron, 2 - muon, 3 - pion, 4 - kaon, 5 - proton
368 if ( (*itTrk)->partId() != 2 ) continue; // only e+, e-
369 // if you want to do dE/dx or TOF study, select track with no bias
370 // Quality: defined by whether dE/dx or TOF is used to identify particle
371 // 0 - no dE/dx, no TOF (can be used for dE/dx and TOF calibration)
372 // 1 - only dE/dx (can be used for TOF calibration)
373 // 2 - only TOF (can be used for dE/dx calibration)
374 // 3 - Both dE/dx and TOF
375 int qual = (*itTrk)->quality();
376 if ( qual != 0 && qual != 2) continue; // no dE/dx PID is used in selection
377 // if ( qual != 0 && qual != 1) continue; // no TOF PID is used in the selection
378
379 TH1 *h(0);
380 TH2 *h2(0);
381 //initinalize all values
382 m_du_runNo=-999;
383 m_du_event=-999;
384 m_du_p=-999;
385 m_du_costh=-999;
386 m_du_t0=-999;
387 m_du_chiE=-999;
388 m_du_chiMu=-999;
389 m_du_chiPi=-999;
390 m_du_chiK=-999;
391 m_du_chiP=-999;
392 m_du_nhit=-999;
393 m_du_ndedxhit=-999;
394 m_du_dEdx=-999;
395
396
397 if((*itTrk)->isMdcKalTrackValid()){
398 RecMdcKalTrack *mdcTrk = (*itTrk)->mdcKalTrack();
400 if ( mdcTrk->charge() > 0 ) {
401 log << MSG::DEBUG << "is muon+" << endreq;
402 } else {
403 log << MSG::DEBUG << "is muon-" << endreq;
404 }
405 double x0 =mdcTrk->x();
406 double y0 =mdcTrk->y();
407 double z0 =mdcTrk->z();
408 double Rxy=sqrt(x0*x0+y0*y0);
409
410 m_du_p=mdcTrk->p()*mdcTrk->charge();
411 m_du_costh=cos(mdcTrk->theta());
412
413
414 double tes=-999;
415 //get event start time
416 SmartDataPtr<RecEsTimeCol> aevtimeCol(eventSvc(),"/Event/Recon/RecEsTimeCol");
417 if( aevtimeCol && aevtimeCol->size()>0 ){
418 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
419 for(; iter_evt!=aevtimeCol->end(); iter_evt++){
420 tes = (*iter_evt)->getTest();
421 //esTimeflag = (*iter_evt)->getStat();
422 }
423 }
424 m_du_t0=tes;
425
426 //get dedx information
427 if((*itTrk)->isMdcDedxValid()){
428 RecMdcDedx* dedxTrk = (*itTrk)->mdcDedx();
429 m_du_chiE = dedxTrk->chi(0);
430 m_du_chiMu = dedxTrk->chi(1);
431 m_du_chiPi = dedxTrk->chi(2);
432 m_du_chiK = dedxTrk->chi(3);
433 m_du_chiP = dedxTrk->chi(4);
434 m_du_ndedxhit = dedxTrk->numGoodHits();
435 m_du_nhit = dedxTrk->numTotalHits();
436 m_du_dEdx = dedxTrk->probPH();
437
438 //fill histograms
439 if (m_thsvc->getHist("/DQAHist/Dedx/Dimu/dedx", h).isSuccess()) {
440 h->Fill(dedxTrk->probPH());
441 }
442 else {
443 log << MSG::ERROR << "Couldn't retrieve dedx" << endreq;
444 }
445 if(fabs(cos(mdcTrk->theta()))<0.83){
446 if (m_thsvc->getHist("/DQAHist/Dedx/Dimu/dedx_barrel", h).isSuccess()) {
447 h->Fill(dedxTrk->probPH());
448 }
449 else {
450 log << MSG::ERROR << "Couldn't retrieve dedx_barrel" << endreq;
451 }
452 }
453 if (m_thsvc->getHist("/DQAHist/Dedx/Dimu/chiMu", h).isSuccess()) {
454 h->Fill(dedxTrk->chiE());
455 }
456 else {
457 log << MSG::ERROR << "Couldn't retrieve chiMu" << endreq;
458 }
459 if (m_thsvc->getHist("/DQAHist/Dedx/Dimu/nhitdedx", h).isSuccess()) {
460 h->Fill( dedxTrk->numGoodHits());
461 }
462 else {
463 log << MSG::ERROR << "Couldn't retrieve nhitdedx" << endreq;
464 }
465 if (m_thsvc->getHist("/DQAHist/Dedx/Dimu/nhit", h).isSuccess()) {
466 h->Fill( dedxTrk->numTotalHits());
467 }
468 else {
469 log << MSG::ERROR << "Couldn't retrieve nhit" << endreq;
470 }
471 if (m_thsvc->getHist("/DQAHist/Dedx/Dimu/dedx_p", h2).isSuccess()) {
472 h2->Fill(mdcTrk->p(), dedxTrk->probPH());
473 }
474 else {
475 log << MSG::ERROR << "Couldn't retrieve dedx_p" << endreq;
476 }
477 if (m_thsvc->getHist("/DQAHist/Dedx/Dimu/dedx_costh", h2).isSuccess()) {
478 h2->Fill(cos(mdcTrk->theta()), dedxTrk->probPH());
479 }
480 else {
481 log << MSG::ERROR << "Couldn't retrieve dedx_costh" << endreq;
482 }
483 if (m_thsvc->getHist("/DQAHist/Dedx/Dimu/dedx_t0", h2).isSuccess()) {
484 h2->Fill(tes, dedxTrk->probPH());
485 }
486 else {
487 log << MSG::ERROR << "Couldn't retrieve dedx_t0" << endreq;
488 }
489
490 }//end of valide dedx track
491 }//end of valide mdc track
492 }//end of looping track
493 }//end of dimu tag event
494
495
496 m_bb_tuple->write();
497 m_du_tuple->write();
498
499 return StatusCode::SUCCESS;
500
501}
502
503// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
504StatusCode DQA_Dedx::finalize() {
505
506 MsgStream log(msgSvc(), name());
507 log << MSG::INFO << "in finalize()" << endmsg;
508 return StatusCode::SUCCESS;
509}
510
511
HepGeom::Point3D< double > HepPoint3D
Definition: DQA_Dedx.cxx:33
double cos(const BesAngle a)
StatusCode initialize()
Definition: DQA_Dedx.cxx:47
StatusCode execute()
Definition: DQA_Dedx.cxx:190
StatusCode finalize()
Definition: DQA_Dedx.cxx:504
DQA_Dedx(const std::string &name, ISvcLocator *pSvcLocator)
Definition: DQA_Dedx.cxx:40