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

#include <DQA_Dedx.h>

Inheritance diagram for DQA_Dedx:

Public Member Functions

 DQA_Dedx (const std::string &name, ISvcLocator *pSvcLocator)
StatusCode initialize ()
StatusCode execute ()
StatusCode finalize ()

Detailed Description

Definition at line 22 of file DQA_Dedx.h.

Constructor & Destructor Documentation

◆ DQA_Dedx()

DQA_Dedx::DQA_Dedx ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 21 of file DQA_Dedx.cxx.

22 : Algorithm( name, pSvcLocator ) {
23
24 // Declare the properties
25 declareProperty( "GetNtuple", m_getntuple = false );
26 declareProperty( "DstFileOnly", m_dstfile = false );
27}

Referenced by DQA_Dedx().

Member Function Documentation

◆ execute()

StatusCode DQA_Dedx::execute ( )

Definition at line 161 of file DQA_Dedx.cxx.

161 {
162
163 MsgStream log( msgSvc(), name() );
164 log << MSG::INFO << "in execute()" << endmsg;
165
166 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
167 m_bb_runNo = eventHeader->runNumber();
168 m_bb_event = eventHeader->eventNumber();
169
170 m_du_runNo = eventHeader->runNumber();
171 m_du_event = eventHeader->eventNumber();
172
173 log << MSG::DEBUG << "run, evt num = " << m_bb_runNo << " , " << m_bb_event << endmsg;
174
175 SmartDataPtr<EvtRecEvent> evtRecEvent( eventSvc(), EventModel::EvtRec::EvtRecEvent );
176
177 SmartDataPtr<DQAEvent::DQAEvent> dqaevt( eventSvc(), "/Event/DQATag" );
178 if ( dqaevt ) { log << MSG::INFO << "success get DQAEvent" << endmsg; }
179 else
180 {
181 log << MSG::ERROR << "Error accessing DQAEvent" << endmsg;
182 return StatusCode::FAILURE;
183 }
184
185 log << MSG::DEBUG << "event tag = " << dqaevt->EventTag() << endmsg;
186
187 // get the required control sample with DQA tag
188 if ( dqaevt->Bhabha() )
189 {
190 log << MSG::INFO << "Bhabha event" << endmsg;
191 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol( eventSvc(),
193 for ( int i = 0; i < evtRecEvent->totalCharged(); i++ )
194 {
195 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
196 log << MSG::DEBUG << i << " " << ( *itTrk )->quality() << endmsg;
197 // get the: required particle through the track's PID
198 // Pid: 1 - electron, 2 - muon, 3 - pion, 4 - kaon, 5 - proton
199 // if ( (*itTrk)->partId() != 1 ) continue; // only e+, e-
200 if ( !( *itTrk )->isElectron() ) continue; // only e+, e-
201 // if you want to do dE/dx or TOF study, select track with no bias
202 // Quality: defined by whether dE/dx or TOF is used to identify particle
203 // 0 - no dE/dx, no TOF (can be used for dE/dx and TOF calibration)
204 // 1 - only dE/dx (can be used for TOF calibration)
205 // 2 - only TOF (can be used for dE/dx calibration)
206 // 3 - Both dE/dx and TOF
207 int qual = ( *itTrk )->quality();
208 if ( qual != 0 && qual != 2 ) continue; // no dE/dx PID is used in selection
209 // if ( qual != 0 && qual != 1) continue; // no TOF PID is used in the selection
210
211 TH1* h( 0 );
212 TH2* h2( 0 );
213 // initinalize all values
214 m_bb_runNo = -999;
215 m_bb_event = -999;
216 m_bb_p = -999;
217 m_bb_costh = -999;
218 m_bb_t0 = -999;
219 m_bb_chiE = -999;
220 m_bb_chiMu = -999;
221 m_bb_chiPi = -999;
222 m_bb_chiK = -999;
223 m_bb_chiP = -999;
224 m_bb_nhit = -999;
225 m_bb_ndedxhit = -999;
226 m_bb_dEdx = -999;
227
228 if ( ( *itTrk )->isMdcKalTrackValid() )
229 {
230 RecMdcKalTrack* mdcTrk = ( *itTrk )->mdcKalTrack();
232 if ( mdcTrk->charge() > 0 ) { log << MSG::DEBUG << "is electron" << endmsg; }
233 else { log << MSG::DEBUG << "is positron" << endmsg; }
234 double x0 = mdcTrk->x();
235 double y0 = mdcTrk->y();
236 double z0 = mdcTrk->z();
237 double Rxy = sqrt( x0 * x0 + y0 * y0 );
238
239 m_bb_p = mdcTrk->p() * mdcTrk->charge();
240 m_bb_costh = cos( mdcTrk->theta() );
241
242 double tes = -999;
243 if ( !m_dstfile )
244 {
245
246 // get event start time
247 SmartDataPtr<RecEsTimeCol> aevtimeCol( eventSvc(), "/Event/Recon/RecEsTimeCol" );
248 if ( aevtimeCol && aevtimeCol->size() > 0 )
249 {
250 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
251 for ( ; iter_evt != aevtimeCol->end(); iter_evt++ )
252 {
253 tes = ( *iter_evt )->getTest();
254 // esTimeflag = (*iter_evt)->getStat();
255 }
256 }
257 m_bb_t0 = tes;
258 }
259
260 // get dedx information
261 if ( ( *itTrk )->isMdcDedxValid() )
262 {
263 RecMdcDedx* dedxTrk = ( *itTrk )->mdcDedx();
264 m_bb_chiE = dedxTrk->chi( 0 );
265 m_bb_chiMu = dedxTrk->chi( 1 );
266 m_bb_chiPi = dedxTrk->chi( 2 );
267 m_bb_chiK = dedxTrk->chi( 3 );
268 m_bb_chiP = dedxTrk->chi( 4 );
269 m_bb_ndedxhit = dedxTrk->numGoodHits();
270 m_bb_nhit = dedxTrk->numTotalHits();
271 m_bb_dEdx = dedxTrk->probPH();
272
273 // fill histograms
274 if ( m_thsvc->getHist( "/DQAHist/Dedx/Bhabha/dedx", h ).isSuccess() )
275 { h->Fill( dedxTrk->probPH() ); }
276 else { log << MSG::ERROR << "Couldn't retrieve dedx" << endmsg; }
277 if ( fabs( cos( mdcTrk->theta() ) ) < 0.83 )
278 {
279 if ( m_thsvc->getHist( "/DQAHist/Dedx/Bhabha/dedx_barrel", h ).isSuccess() )
280 { h->Fill( dedxTrk->probPH() ); }
281 else { log << MSG::ERROR << "Couldn't retrieve dedx_barrel" << endmsg; }
282 }
283 if ( m_thsvc->getHist( "/DQAHist/Dedx/Bhabha/chiE", h ).isSuccess() )
284 { h->Fill( dedxTrk->chiE() ); }
285 else { log << MSG::ERROR << "Couldn't retrieve chiE" << endmsg; }
286 if ( m_thsvc->getHist( "/DQAHist/Dedx/Bhabha/nhitdedx", h ).isSuccess() )
287 { h->Fill( dedxTrk->numGoodHits() ); }
288 else { log << MSG::ERROR << "Couldn't retrieve nhitdedx" << endmsg; }
289 if ( m_thsvc->getHist( "/DQAHist/Dedx/Bhabha/nhit", h ).isSuccess() )
290 { h->Fill( dedxTrk->numTotalHits() ); }
291 else { log << MSG::ERROR << "Couldn't retrieve nhit" << endmsg; }
292 if ( m_thsvc->getHist( "/DQAHist/Dedx/Bhabha/dedx_p", h2 ).isSuccess() )
293 { h2->Fill( mdcTrk->p(), dedxTrk->probPH() ); }
294 else { log << MSG::ERROR << "Couldn't retrieve dedx_p" << endmsg; }
295 if ( m_thsvc->getHist( "/DQAHist/Dedx/Bhabha/dedx_costh", h2 ).isSuccess() )
296 { h2->Fill( cos( mdcTrk->theta() ), dedxTrk->probPH() ); }
297 else { log << MSG::ERROR << "Couldn't retrieve dedx_costh" << endmsg; }
298 if ( !m_dstfile )
299 {
300 if ( m_thsvc->getHist( "/DQAHist/Dedx/Bhabha/dedx_t0", h2 ).isSuccess() )
301 { h2->Fill( tes, dedxTrk->probPH() ); }
302 else { log << MSG::ERROR << "Couldn't retrieve dedx_t0" << endmsg; }
303 }
304
305 } // end of valid dedx track
306 } // end of valid mdc track
307 } // end of looping track
308 } // end of bhabha tag event
309
310 if ( dqaevt->Dimu() )
311 {
312 log << MSG::INFO << "Dimu event" << endmsg;
313 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol( eventSvc(),
315 for ( int i = 0; i < evtRecEvent->totalCharged(); i++ )
316 {
317 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
318 log << MSG::DEBUG << i << " " << ( *itTrk )->quality() << endmsg;
319 // get the: required particle through the track's PID
320 // Pid: 1 - electron, 2 - muon, 3 - pion, 4 - kaon, 5 - proton
321 // if ( (*itTrk)->partId() != 2 ) continue; // only mu+, mu-
322 if ( !( *itTrk )->isMuon() ) continue; // only mu+, mu-
323 // if you want to do dE/dx or TOF study, select track with no bias
324 // Quality: defined by whether dE/dx or TOF is used to identify particle
325 // 0 - no dE/dx, no TOF (can be used for dE/dx and TOF calibration)
326 // 1 - only dE/dx (can be used for TOF calibration)
327 // 2 - only TOF (can be used for dE/dx calibration)
328 // 3 - Both dE/dx and TOF
329 int qual = ( *itTrk )->quality();
330 if ( qual != 0 && qual != 2 ) continue; // no dE/dx PID is used in selection
331 // if ( qual != 0 && qual != 1) continue; // no TOF PID is used in the selection
332
333 TH1* h( 0 );
334 TH2* h2( 0 );
335 // initinalize all values
336 m_du_runNo = -999;
337 m_du_event = -999;
338 m_du_p = -999;
339 m_du_costh = -999;
340 m_du_t0 = -999;
341 m_du_chiE = -999;
342 m_du_chiMu = -999;
343 m_du_chiPi = -999;
344 m_du_chiK = -999;
345 m_du_chiP = -999;
346 m_du_nhit = -999;
347 m_du_ndedxhit = -999;
348 m_du_dEdx = -999;
349
350 if ( ( *itTrk )->isMdcKalTrackValid() )
351 {
352 RecMdcKalTrack* mdcTrk = ( *itTrk )->mdcKalTrack();
354 if ( mdcTrk->charge() > 0 ) { log << MSG::DEBUG << "is muon+" << endmsg; }
355 else { log << MSG::DEBUG << "is muon-" << endmsg; }
356 double x0 = mdcTrk->x();
357 double y0 = mdcTrk->y();
358 double z0 = mdcTrk->z();
359 double Rxy = sqrt( x0 * x0 + y0 * y0 );
360
361 m_du_p = mdcTrk->p() * mdcTrk->charge();
362 m_du_costh = cos( mdcTrk->theta() );
363
364 double tes = -999;
365 if ( !m_dstfile )
366 {
367 // get event start time
368 SmartDataPtr<RecEsTimeCol> aevtimeCol( eventSvc(), "/Event/Recon/RecEsTimeCol" );
369 if ( aevtimeCol && aevtimeCol->size() > 0 )
370 {
371 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
372 for ( ; iter_evt != aevtimeCol->end(); iter_evt++ )
373 {
374 tes = ( *iter_evt )->getTest();
375 // esTimeflag = (*iter_evt)->getStat();
376 }
377 }
378 m_du_t0 = tes;
379 }
380
381 // get dedx information
382 if ( ( *itTrk )->isMdcDedxValid() )
383 {
384 RecMdcDedx* dedxTrk = ( *itTrk )->mdcDedx();
385 m_du_chiE = dedxTrk->chi( 0 );
386 m_du_chiMu = dedxTrk->chi( 1 );
387 m_du_chiPi = dedxTrk->chi( 2 );
388 m_du_chiK = dedxTrk->chi( 3 );
389 m_du_chiP = dedxTrk->chi( 4 );
390 m_du_ndedxhit = dedxTrk->numGoodHits();
391 m_du_nhit = dedxTrk->numTotalHits();
392 m_du_dEdx = dedxTrk->probPH();
393
394 // fill histograms
395 if ( m_thsvc->getHist( "/DQAHist/Dedx/Dimu/dedx", h ).isSuccess() )
396 { h->Fill( dedxTrk->probPH() ); }
397 else { log << MSG::ERROR << "Couldn't retrieve dedx" << endmsg; }
398 if ( fabs( cos( mdcTrk->theta() ) ) < 0.83 )
399 {
400 if ( m_thsvc->getHist( "/DQAHist/Dedx/Dimu/dedx_barrel", h ).isSuccess() )
401 { h->Fill( dedxTrk->probPH() ); }
402 else { log << MSG::ERROR << "Couldn't retrieve dedx_barrel" << endmsg; }
403 }
404 if ( m_thsvc->getHist( "/DQAHist/Dedx/Dimu/chiMu", h ).isSuccess() )
405 { h->Fill( dedxTrk->chiE() ); }
406 else { log << MSG::ERROR << "Couldn't retrieve chiMu" << endmsg; }
407 if ( m_thsvc->getHist( "/DQAHist/Dedx/Dimu/nhitdedx", h ).isSuccess() )
408 { h->Fill( dedxTrk->numGoodHits() ); }
409 else { log << MSG::ERROR << "Couldn't retrieve nhitdedx" << endmsg; }
410 if ( m_thsvc->getHist( "/DQAHist/Dedx/Dimu/nhit", h ).isSuccess() )
411 { h->Fill( dedxTrk->numTotalHits() ); }
412 else { log << MSG::ERROR << "Couldn't retrieve nhit" << endmsg; }
413 if ( m_thsvc->getHist( "/DQAHist/Dedx/Dimu/dedx_p", h2 ).isSuccess() )
414 { h2->Fill( mdcTrk->p(), dedxTrk->probPH() ); }
415 else { log << MSG::ERROR << "Couldn't retrieve dedx_p" << endmsg; }
416 if ( m_thsvc->getHist( "/DQAHist/Dedx/Dimu/dedx_costh", h2 ).isSuccess() )
417 { h2->Fill( cos( mdcTrk->theta() ), dedxTrk->probPH() ); }
418 else { log << MSG::ERROR << "Couldn't retrieve dedx_costh" << endmsg; }
419 if ( !m_dstfile )
420 {
421 if ( m_thsvc->getHist( "/DQAHist/Dedx/Dimu/dedx_t0", h2 ).isSuccess() )
422 { h2->Fill( tes, dedxTrk->probPH() ); }
423 else { log << MSG::ERROR << "Couldn't retrieve dedx_t0" << endmsg; }
424 }
425
426 } // end of valide dedx track
427 } // end of valide mdc track
428 } // end of looping track
429 } // end of dimu tag event
430
431 if ( m_getntuple )
432 {
433 m_bb_tuple->write().ignore();
434 m_du_tuple->write().ignore();
435 }
436
437 return StatusCode::SUCCESS;
438}
EvtRecTrackCol::iterator EvtRecTrackIterator
IMessageSvc * msgSvc()

◆ finalize()

StatusCode DQA_Dedx::finalize ( )

Definition at line 441 of file DQA_Dedx.cxx.

441 {
442
443 MsgStream log( msgSvc(), name() );
444 log << MSG::INFO << "in finalize()" << endmsg;
445 return StatusCode::SUCCESS;
446}

◆ initialize()

StatusCode DQA_Dedx::initialize ( )

Definition at line 30 of file DQA_Dedx.cxx.

30 {
31 MsgStream log( msgSvc(), name() );
32
33 log << MSG::INFO << "in initialize()" << endmsg;
34 StatusCode status;
35
36 // DQA
37 // The first directory specifier must be "DQAFILE"
38 // The second is the sub-system name: MDC, DEDX, TOF, EMC, MUC, TRG
39 // user can define more directory, such as DAQFILE/MDC/Bhabha.
40
41 if ( service( "THistSvc", m_thsvc ).isFailure() )
42 {
43 log << MSG::ERROR << "Couldn't get THistSvc" << endmsg;
44 return StatusCode::FAILURE;
45 }
46
47 NTuplePtr nt_bb( ntupleSvc(), "DQAFILE/DEDX" );
48 if ( nt_bb ) m_bb_tuple = nt_bb;
49 else
50 {
51 m_bb_tuple =
52 ntupleSvc()->book( "DQAFILE/DEDX/Bhabha", CLID_ColumnWiseTuple, "Dedx ntuple" );
53 if ( m_bb_tuple )
54 {
55 status = m_bb_tuple->addItem( "runNo", m_bb_runNo );
56 status = m_bb_tuple->addItem( "event", m_bb_event );
57 status = m_bb_tuple->addItem( "p", m_bb_p );
58 status = m_bb_tuple->addItem( "costh", m_bb_costh );
59 status = m_bb_tuple->addItem( "t0", m_bb_t0 );
60 status = m_bb_tuple->addItem( "chiE", m_bb_chiE );
61 status = m_bb_tuple->addItem( "chiMu", m_bb_chiMu );
62 status = m_bb_tuple->addItem( "chiPi", m_bb_chiPi );
63 status = m_bb_tuple->addItem( "chiK", m_bb_chiK );
64 status = m_bb_tuple->addItem( "chiP", m_bb_chiP );
65 status = m_bb_tuple->addItem( "nhit", m_bb_nhit );
66 status = m_bb_tuple->addItem( "ndedxhit", m_bb_ndedxhit );
67 status = m_bb_tuple->addItem( "dEdx", m_bb_dEdx );
68 }
69 else { log << MSG::ERROR << "Can not book N-tuple:" << long( m_bb_tuple ) << endmsg; }
70 }
71
72 TH1F* h_dedx_bb =
73 new TH1F( "Dedx_bhabha", "dEdx distribution of bhabha samples", 150, 0., 1500. );
74 if ( m_thsvc->regHist( "/DQAHist/Dedx/Bhabha/dedx", h_dedx_bb ).isFailure() )
75 { log << MSG::ERROR << "Couldn't register Dedx_bhabha" << endmsg; }
76 TH1F* h_dedxbarrel_bb = new TH1F(
77 "Dedx_Barrel_bhabha", "dEdx distribution of barrel bhabha samples", 150, 0., 1500. );
78 if ( m_thsvc->regHist( "/DQAHist/Dedx/Bhabha/dedx_barrel", h_dedxbarrel_bb ).isFailure() )
79 { log << MSG::ERROR << "Couldn't register Dedx_Barrel_bhabha" << endmsg; }
80 TH1F* h_chie_bb =
81 new TH1F( "ChiE_bhabha", "ChiE distribution of bhabha samples", 200, -20., 20. );
82 if ( m_thsvc->regHist( "/DQAHist/Dedx/Bhabha/chiE", h_chie_bb ).isFailure() )
83 { log << MSG::ERROR << "Couldn't register chiE_bhabha" << endmsg; }
84 TH1F* h_nhitdedx_bb = new TH1F( "Nhitdedx", "dEdx used hits", 40, 0., 60. );
85 if ( m_thsvc->regHist( "/DQAHist/Dedx/Bhabha/nhitdedx", h_nhitdedx_bb ).isFailure() )
86 { log << MSG::ERROR << "Couldn't register Nhitdedx" << endmsg; }
87 TH1F* h_nhit_bb = new TH1F( "Nhit", "Total hits", 40, 0., 60. );
88 if ( m_thsvc->regHist( "/DQAHist/Dedx/Bhabha/nhit", h_nhit_bb ).isFailure() )
89 { log << MSG::ERROR << "Couldn't register Nhit" << endmsg; }
90 TH2F* h_dedxvsp_bb =
91 new TH2F( "dEdx vs momentume", "dEdx vs momentume", 200, 0, 2.5, 200, 0, 2000 );
92 if ( m_thsvc->regHist( "/DQAHist/Dedx/Bhabha/dedx_p", h_dedxvsp_bb ).isFailure() )
93 { log << MSG::ERROR << "Couldn't register dedx vs p" << endmsg; }
94 TH2F* h_dedxvscos_bb =
95 new TH2F( "dEdx vs costheta", "dEdx vs costheta", 100, -1, 1, 150, 0, 1500 );
96 if ( m_thsvc->regHist( "/DQAHist/Dedx/Bhabha/dedx_costh", h_dedxvscos_bb ).isFailure() )
97 { log << MSG::ERROR << "Couldn't register dedx vs costh" << endmsg; }
98 TH2F* h_dedxvst0_bb = new TH2F( "dEdx vs t0", "dEdx vs t0", 250, 0, 2500, 150, 0, 1500 );
99 if ( m_thsvc->regHist( "/DQAHist/Dedx/Bhabha/dedx_t0", h_dedxvst0_bb ).isFailure() )
100 { log << MSG::ERROR << "Couldn't register dedx vs t0" << endmsg; }
101
102 NTuplePtr nt_du( ntupleSvc(), "DQAFILE/DEDX" );
103 if ( nt_du ) m_bb_tuple = nt_du;
104 else
105 {
106 m_du_tuple = ntupleSvc()->book( "DQAFILE/DEDX/Dimu", CLID_ColumnWiseTuple, "Dedx ntuple" );
107 if ( m_du_tuple )
108 {
109 status = m_du_tuple->addItem( "runNo", m_du_runNo );
110 status = m_du_tuple->addItem( "event", m_du_event );
111 status = m_du_tuple->addItem( "p", m_du_p );
112 status = m_du_tuple->addItem( "costh", m_du_costh );
113 status = m_du_tuple->addItem( "t0", m_du_t0 );
114 status = m_du_tuple->addItem( "chiE", m_du_chiE );
115 status = m_du_tuple->addItem( "chiMu", m_du_chiMu );
116 status = m_du_tuple->addItem( "chiPi", m_du_chiPi );
117 status = m_du_tuple->addItem( "chiK", m_du_chiK );
118 status = m_du_tuple->addItem( "chiP", m_du_chiP );
119 status = m_du_tuple->addItem( "nhit", m_du_nhit );
120 status = m_du_tuple->addItem( "ndedxhit", m_du_ndedxhit );
121 status = m_du_tuple->addItem( "dEdx", m_du_dEdx );
122 }
123 else { log << MSG::ERROR << "Can not book N-tuple:" << long( m_du_tuple ) << endmsg; }
124 }
125
126 TH1F* h_dedx_du =
127 new TH1F( "Dedx_dimu", "dEdx distribution of bhabha samples", 150, 0., 1500. );
128 if ( m_thsvc->regHist( "/DQAHist/Dedx/Dimu/dedx", h_dedx_du ).isFailure() )
129 { log << MSG::ERROR << "Couldn't register Dedx_dimu" << endmsg; }
130 TH1F* h_dedxbarrel_du = new TH1F(
131 "Dedx_Barrel_dimu", "dEdx distribution of barrel bhabha samples", 150, 0., 1500. );
132 if ( m_thsvc->regHist( "/DQAHist/Dedx/Dimu/dedx_barrel", h_dedxbarrel_du ).isFailure() )
133 { log << MSG::ERROR << "Couldn't register Dedx_Barrel_dimu" << endmsg; }
134 TH1F* h_chimu_du =
135 new TH1F( "ChiE_dimu", "ChiE distribution of bhabha samples", 200, -20., 20. );
136 if ( m_thsvc->regHist( "/DQAHist/Dedx/Dimu/chiMu", h_chimu_du ).isFailure() )
137 { log << MSG::ERROR << "Couldn't register chiMu_dimu" << endmsg; }
138 TH1F* h_nhitdedx_du = new TH1F( "Nhitdedx", "dEdx used hits", 40, 0., 60. );
139 if ( m_thsvc->regHist( "/DQAHist/Dedx/Dimu/nhitdedx", h_nhitdedx_du ).isFailure() )
140 { log << MSG::ERROR << "Couldn't register Nhitdedx" << endmsg; }
141 TH1F* h_nhit_du = new TH1F( "Nhit", "Total hits", 40, 0., 60. );
142 if ( m_thsvc->regHist( "/DQAHist/Dedx/Dimu/nhit", h_nhit_du ).isFailure() )
143 { log << MSG::ERROR << "Couldn't register Nhit" << endmsg; }
144 TH2F* h_dedxvsp_du =
145 new TH2F( "dEdx vs momentume", "dEdx vs momentume", 200, 0, 2.5, 200, 0, 2000 );
146 if ( m_thsvc->regHist( "/DQAHist/Dedx/Dimu/dedx_p", h_dedxvsp_du ).isFailure() )
147 { log << MSG::ERROR << "Couldn't register dedx vs p" << endmsg; }
148 TH2F* h_dedxvscos_du =
149 new TH2F( "dEdx vs costheta", "dEdx vs costheta", 100, -1, 1, 150, 0, 1500 );
150 if ( m_thsvc->regHist( "/DQAHist/Dedx/Dimu/dedx_costh", h_dedxvscos_du ).isFailure() )
151 { log << MSG::ERROR << "Couldn't register dedx vs costh" << endmsg; }
152 TH2F* h_dedxvst0_du = new TH2F( "dEdx vs t0", "dEdx vs t0", 200, 0, 2500, 150, 0, 1500 );
153 if ( m_thsvc->regHist( "/DQAHist/Dedx/Dimu/dedx_t0", h_dedxvst0_du ).isFailure() )
154 { log << MSG::ERROR << "Couldn't register dedx vs t0" << endmsg; }
155
156 log << MSG::INFO << "successfully return from initialize()" << endmsg;
157 return StatusCode::SUCCESS;
158}
INTupleSvc * ntupleSvc()

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