33 MsgStream log(
msgSvc(), name() );
35 log << MSG::INFO <<
"in initialize()" << endmsg;
39 if ( service(
"THistSvc", m_thsvc ).isFailure() )
41 log << MSG::ERROR <<
"Couldn't get THistSvc" << endmsg;
42 return StatusCode::FAILURE;
49 for (
int i = 0; i < B_LAY_NUM; i++ )
51 sprintf( name,
"BrResDist_All_L%d", i );
53 m_hBrResDist[i][0] =
new TH1F( name,
title, 200, -100, 100 );
54 sprintf( name,
"/DQAHist/MUC/BrResDist_All_L%d", i );
55 if ( m_thsvc->regHist( name, m_hBrResDist[i][0] ).isFailure() )
56 { log << MSG::ERROR <<
"Couldn't register " << name << endmsg; }
58 sprintf( name,
"BrResDist_Dimu_L%d", i );
59 m_hBrResDist[i][1] =
new TH1F( name,
title, 200, -100, 100 );
60 sprintf( name,
"/DQAHist/MUC/BrResDist_Dimu_L%d", i );
61 if ( m_thsvc->regHist( name, m_hBrResDist[i][1] ).isFailure() )
62 { log << MSG::ERROR <<
"Couldn't register " << name << endmsg; }
65 for (
int i = 0; i < E_LAY_NUM; i++ )
67 sprintf( name,
"EcResDist_All_L%d", i );
69 m_hEcResDist[i][0] =
new TH1F( name,
title, 200, -100, 100 );
70 sprintf( name,
"/DQAHist/MUC/EcResDist_All_L%d", i );
71 if ( m_thsvc->regHist( name, m_hEcResDist[i][0] ).isFailure() )
72 { log << MSG::ERROR <<
"Couldn't register " << name << endmsg; }
74 sprintf( name,
"EcResDist_Dimu_L%d", i );
75 m_hEcResDist[i][1] =
new TH1F( name,
title, 200, -100, 100 );
76 sprintf( name,
"/DQAHist/MUC/EcResDist_Dimu_L%d", i );
77 if ( m_thsvc->regHist( name, m_hEcResDist[i][1] ).isFailure() )
78 { log << MSG::ERROR <<
"Couldn't register " << name << endmsg; }
109 for (
int i = 0; i <
TAGN; i++ )
111 for (
int j = 0; j < 2; j++ )
113 for (
int k = 0; k <
LVLN; k++ )
120 m_hEff[k][i][j] =
new TH1F( name,
title, LAYER_MAX + 1, -0.5, LAYER_MAX + 0.5 );
121 m_hEff[k][i][j]->GetXaxis()->SetTitle(
"Layer id" );
125 m_hEff[k][i][j] =
new TH1F( name,
title, BOX_MAX + 1, -0.5, BOX_MAX + 0.5 );
126 m_hEff[k][i][j]->GetXaxis()->SetTitle(
"Box id [EE:0~31, BR:32~103, WE:104~135]" );
130 m_hEff[k][i][j] =
new TH1F( name,
title, STRIP_MAX + 1, -0.5, STRIP_MAX + 0.5 );
131 m_hEff[k][i][j]->GetXaxis()->SetTitle(
"Strip id" );
134 m_hEff[k][i][j]->GetXaxis()->CenterTitle();
138 if ( m_thsvc->regHist( name, m_hEff[k][i][j] ).isFailure() )
139 { log << MSG::ERROR <<
"Couldn't register " << name << endmsg; }
144 m_hNosRatio[i][j] =
new TH1F( name,
title, BOX_MAX + 1, -0.5, BOX_MAX + 0.5 );
145 m_hNosRatio[i][j]->GetXaxis()->SetTitle(
"Box id [EE:0~31, BR:32~103, WE:104~135]" );
146 m_hNosRatio[i][j]->GetXaxis()->CenterTitle();
151 if ( m_thsvc->regHist( name, m_hNosRatio[i][j] ).isFailure() )
152 { log << MSG::ERROR <<
"Couldn't register " << name << endmsg; }
158 m_hCostheta[i] =
new TH1F( name,
title, 360, -1.0, 1.0 );
159 m_hCostheta[i]->GetXaxis()->SetTitle(
"cos#theta" );
160 m_hCostheta[i]->GetXaxis()->CenterTitle();
164 m_hPhi[i] =
new TH1F( name,
title, 360, -
PI,
PI );
165 m_hPhi[i]->GetXaxis()->SetTitle(
"#phi" );
166 m_hPhi[i]->GetXaxis()->CenterTitle();
169 if ( m_thsvc->regHist( name, m_hCostheta[i] ).isFailure() )
170 { log << MSG::ERROR <<
"Couldn't register " << name << endmsg; }
172 if ( m_thsvc->regHist( name, m_hPhi[i] ).isFailure() )
173 { log << MSG::ERROR <<
"Couldn't register Phi_All" << endmsg; }
184 for (
int i = 0; i < PART_MAX; i++ )
185 for (
int j = 0; j < SEGMENT_MAX; j++ )
186 for (
int k = 0; k < LAYER_MAX; k++ )
187 for (
int n = 0;
n < STRIP_INBOX_MAX;
n++ )
189 m_recordAll[i][j][k][
n][0] = 0;
190 m_recordAll[i][j][k][
n][1] = 0;
191 m_recordAll[i][j][k][
n][2] = 0;
192 m_recordAll[i][j][k][
n][3] = 0;
193 m_recordAll[i][j][k][
n][4] = 0;
195 m_recordDimu[i][j][k][
n][0] = 0;
196 m_recordDimu[i][j][k][
n][1] = 0;
197 m_recordDimu[i][j][k][
n][2] = 0;
198 m_recordDimu[i][j][k][
n][3] = 0;
199 m_recordDimu[i][j][k][
n][4] = 0;
202 m_ptrMucMark =
new MucMark( 0, 0, 0, 0 );
205 m_digiCol.resize( 0 );
206 m_expHitCol.resize( 0 );
207 m_effHitCol.resize( 0 );
208 m_nosHitCol.resize( 0 );
209 m_clusterCol.resize( 0 );
211 for (
int i = 0; i < PART_MAX; i++ )
212 for (
int j = 0; j < SEGMENT_MAX; j++ ) { m_segDigiCol[i][j].resize( 0 ); }
214 log << MSG::INFO <<
"Initialize done!" << endmsg;
215 return StatusCode::SUCCESS;
221 MsgStream log(
msgSvc(), name() );
222 log << MSG::INFO <<
"in execute()" << endmsg;
224 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
225 m_run = eventHeader->runNumber();
226 m_event = eventHeader->eventNumber();
227 log << MSG::DEBUG <<
"Run " << m_run <<
"\tEvent " << m_event << endmsg;
229 SmartDataPtr<DQAEvent::DQAEvent> dqaevt( eventSvc(),
"/Event/DQATag" );
230 if ( dqaevt ) { log << MSG::INFO <<
"success get DQAEvent" << endmsg; }
233 log << MSG::ERROR <<
"Error accessing DQAEvent" << endmsg;
234 return StatusCode::FAILURE;
236 log << MSG::DEBUG <<
"DQA event tag = " << dqaevt->EventTag() << endmsg;
238 int part, segment, layer, strip;
241 if ( dqaevt->Dimu() ) isDimu =
true;
242 log << MSG::INFO <<
"DQADimuTag:\t" << dqaevt->Dimu() << endmsg;
245 if ( !m_dstFileOnly )
247 log << MSG::INFO <<
"Retrieve digis" << endmsg;
248 SmartDataPtr<MucDigiCol> mucDigiCol( eventSvc(),
"/Event/Digi/MucDigiCol" );
251 log << MSG::FATAL <<
"Could not find MUC digi" << endmsg;
252 return ( StatusCode::FAILURE );
256 MucDigiCol::iterator digiIter = mucDigiCol->begin();
258 for (
int digiId = 0; digiIter != mucDigiCol->end(); digiIter++, digiId++ )
260 mucId = ( *digiIter )->identify();
269 m_digiCol.push_back( aMark );
270 m_segDigiCol[part][segment].push_back( aMark );
271 m_recordAll[part][segment][layer][strip][0]++;
272 if ( isDimu ) m_recordDimu[part][segment][layer][strip][0]++;
274 log << MSG::INFO <<
"Total digis in this event: " << eventDigi << endmsg;
275 if ( eventDigi > 500 )
276 cout <<
"Run:\t" << m_run <<
"\tEvent:\t" << m_event <<
"\tdigits inflation:\t"
277 << eventDigi << endl;
280 m_clusterCol = ( *m_ptrMucMark ).CreateClusterCol( 1, m_digiCol );
281 log << MSG::INFO <<
"Total clusters in this event: " << m_clusterCol.size() << endmsg;
286 SmartDataPtr<RecMucTrackCol> mucTrackCol( eventSvc(),
"/Event/Recon/RecMucTrackCol" );
290 log << MSG::WARNING <<
"Could not find RecMucTrackCol"
292 return ( StatusCode::SUCCESS );
296 if ( aRecMucTrackCol->size() < 1 )
298 log << MSG::INFO <<
"No MUC tracks in this event" << endmsg;
299 return StatusCode::SUCCESS;
301 log << MSG::INFO <<
"Total tracks of this event: " << aRecMucTrackCol->size() << endmsg;
303 int trackHitNum, expectedHitNum, segNum, lastLayerBR, lastLayerEC;
304 int layerPassNum[3], passMax[TRACK_SEG_MAX][2];
305 bool firedLay[TRACK_SEG_MAX][LAYER_MAX];
306 double costheta, phi;
308 trackHitNum = expectedHitNum = segNum = lastLayerBR = lastLayerEC = 0;
309 layerPassNum[0] = layerPassNum[1] = layerPassNum[2] = 0;
310 for (
int segi = 0; segi < TRACK_SEG_MAX; segi++ )
312 passMax[segi][0] = passMax[segi][1] = 0;
313 for (
int layi = 0; layi < LAYER_MAX; layi++ ) firedLay[segi][layi] = 0;
316 vector<MucRecHit*> mucRawHitCol;
317 vector<MucRecHit*> mucExpHitCol;
318 RecMucTrackCol::iterator trackIter = mucTrackCol->begin();
319 for (
int trackId = 0; trackIter != mucTrackCol->end(); trackIter++, trackId++ )
321 trackHitNum = ( *trackIter )->numHits();
323 if ( trackHitNum == 0 )
325 log << MSG::INFO <<
"Track " << trackId <<
" no hits" << endmsg;
329 lastLayerBR = ( *trackIter )->brLastLayer();
330 lastLayerEC = ( *trackIter )->ecLastLayer();
332 CLHEP::Hep3Vector a3Vector( ( *trackIter )->xPos(), ( *trackIter )->yPos(),
333 ( *trackIter )->zPos() );
334 costheta = a3Vector.cosTheta();
335 phi = a3Vector.phi();
336 if ( m_thsvc->getHist(
"/DQAHist/MUC/Costheta_All", htmp ).isSuccess() )
337 { htmp->Fill( costheta ); }
338 else { log << MSG::ERROR <<
"Fail to retrieve Costheta_All" << endmsg; }
339 if ( m_thsvc->getHist(
"/DQAHist/MUC/Phi_All", htmp ).isSuccess() ) { htmp->Fill( phi ); }
340 else { log << MSG::ERROR <<
"Fail to retrieve Phi_All" << endmsg; }
344 if ( m_thsvc->getHist(
"/DQAHist/MUC/Costheta_Dimu", htmp ).isSuccess() )
345 { htmp->Fill( costheta ); }
346 else { log << MSG::ERROR <<
"Fail to retrieve Costheta_Dimu" << endmsg; }
347 if ( m_thsvc->getHist(
"/DQAHist/MUC/Phi_Dimu", htmp ).isSuccess() )
348 { htmp->Fill( phi ); }
349 else { log << MSG::ERROR <<
"Fail to retrieve Phi_Dimu" << endmsg; }
351 log << MSG::INFO <<
"Fill costheta and phi:\t" << costheta <<
"\t" << phi << endmsg;
357 mucExpHitCol = ( *trackIter )->GetExpectedHits();
359 expectedHitNum += mucExpHitCol.size();
360 for (
unsigned int hitId = 0; hitId < mucExpHitCol.size(); hitId++ )
362 pMucRawHit = mucExpHitCol[hitId];
363 part = pMucRawHit->
Part();
364 segment = pMucRawHit->
Seg();
365 layer = pMucRawHit->
Gap();
366 strip = pMucRawHit->
Strip();
368 MucMark* currentMark =
new MucMark( part, segment, layer, strip );
369 m_expHitCol.push_back( currentMark );
373 bool isInEffWindow =
false;
374 isInPos = currentMark->
IsInCol( m_segDigiCol[part][segment] );
377 if ( part == BRID && ( layer - lastLayerBR > 1 ) )
continue;
378 if ( part != BRID && ( layer - lastLayerEC > 1 ) )
continue;
381 if ( part == BRID && layer == 0 && ( strip < 2 || strip > 45 ) )
385 m_recordAll[part][segment][layer][strip][2]++;
386 m_recordAll[part][segment][layer][strip][1]++;
387 m_effHitCol.push_back( m_segDigiCol[part][segment][isInPos] );
391 m_recordDimu[part][segment][layer][strip][2]++;
392 m_recordDimu[part][segment][layer][strip][1]++;
397 m_recordAll[part][segment][layer][strip][1]++;
398 if ( isDimu ) m_recordDimu[part][segment][layer][strip][1]++;
405 m_recordAll[part][segment][layer][strip][2]++;
406 m_recordAll[part][segment][layer][strip][1]++;
407 m_effHitCol.push_back( m_segDigiCol[part][segment][isInPos] );
411 m_recordDimu[part][segment][layer][strip][2]++;
412 m_recordDimu[part][segment][layer][strip][1]++;
418 for (
int tempStrip = 0, hiti = -m_effWindow; hiti <= m_effWindow; hiti++ )
420 if ( hiti == 0 )
continue;
421 tempStrip = strip + hiti;
422 if ( tempStrip < 0 || tempStrip > m_ptrIdTr->GetStripMax( part, segment, layer ) )
425 isInPos = m_ptrMucMark->IsInCol( part, segment, layer, tempStrip,
426 m_segDigiCol[part][segment] );
429 m_recordAll[part][segment][layer][tempStrip][2]++;
430 m_recordAll[part][segment][layer][tempStrip][1]++;
431 m_effHitCol.push_back( m_segDigiCol[part][segment][isInPos] );
435 m_recordDimu[part][segment][layer][tempStrip][2]++;
436 m_recordDimu[part][segment][layer][tempStrip][1]++;
439 isInEffWindow =
true;
443 if ( isInEffWindow ) {
continue; }
446 m_recordAll[part][segment][layer][strip][1]++;
447 if ( isDimu ) m_recordDimu[part][segment][layer][strip][1]++;
453 log << MSG::INFO <<
"Fill residual" << endmsg;
454 if ( !m_dstFileOnly )
456 vector<float> m_lineResCol = ( *trackIter )->getDistHits();
458 mucRawHitCol = ( *trackIter )->GetHits();
461 if ( trackHitNum > 4 && m_lineResCol[0] != -99 )
464 bool firedFlag[PART_MAX][LAYER_MAX][2];
465 for (
int iprt = 0; iprt < PART_MAX; iprt++ )
466 for (
int jlay = 0; jlay < LAYER_MAX; jlay++ )
467 firedFlag[iprt][jlay][0] = firedFlag[iprt][jlay][1] =
false;
469 for (
unsigned int hitId = 0; hitId < mucExpHitCol.size(); hitId++ )
471 pMucExpHit = mucExpHitCol[hitId];
472 part = pMucExpHit->
Part();
473 segment = pMucExpHit->
Seg();
474 layer = pMucExpHit->
Gap();
475 firedFlag[part][layer][0] =
true;
478 for (
unsigned int hitId = 0; hitId < mucRawHitCol.size(); hitId++ )
480 pMucRawHit = mucRawHitCol[hitId];
481 part = pMucRawHit->
Part();
482 segment = pMucRawHit->
Seg();
483 layer = pMucRawHit->
Gap();
486 if ( firedFlag[part][layer][0] ==
true && firedFlag[part][layer][1] ==
false )
490 sprintf( name,
"/DQAHist/MUC/BrResDist_All_L%d", layer );
491 if ( m_thsvc->getHist( name, htmp ).isSuccess() )
492 { htmp->Fill( m_lineResCol[hitId] ); }
493 else { log << MSG::ERROR <<
"Fail to retrieve " << name << endmsg; }
498 sprintf( name,
"/DQAHist/MUC/BrResDist_Dimu_L%d", layer );
499 if ( m_thsvc->getHist( name, htmp ).isSuccess() )
500 { htmp->Fill( m_lineResCol[hitId] ); }
501 else { log << MSG::ERROR <<
"Fail to retrieve " << name << endmsg; }
507 sprintf( name,
"/DQAHist/MUC/EcResDist_All_L%d", layer );
508 if ( m_thsvc->getHist( name, htmp ).isSuccess() )
509 { htmp->Fill( m_lineResCol[hitId] ); }
510 else { log << MSG::ERROR <<
"Fail to retrieve " << name << endmsg; }
515 sprintf( name,
"/DQAHist/MUC/EcResDist_Dimu_L%d", layer );
516 if ( m_thsvc->getHist( name, htmp ).isSuccess() )
517 { htmp->Fill( m_lineResCol[hitId] ); }
518 else { log << MSG::ERROR <<
"Fail to retrieve " << name << endmsg; }
524 firedFlag[part][layer][1] =
true;
528 mucRawHitCol.clear();
529 mucExpHitCol.clear();
535 log << MSG::INFO <<
"Searching inc/noise hits" << endmsg;
538 for (
unsigned int i = 0; i < m_digiCol.size(); i++ )
542 if ( m_digiCol[i]->IsInCol( m_effHitCol ) != -1 )
continue;
545 for (
unsigned int j = 0; j < m_clusterCol.size(); j++ )
548 for (
unsigned int k = 0; k < m_clusterCol[j].size(); k++ )
550 if ( m_clusterCol[j][k]->IsInCol( m_effHitCol ) != -1 )
557 if ( hasEffHit && ( m_digiCol[i]->IsInCol( m_clusterCol[j] ) != -1 ) )
566 part = ( *m_digiCol[i] ).Part();
567 segment = ( *m_digiCol[i] ).
Segment();
568 layer = ( *m_digiCol[i] ).Layer();
569 strip = ( *m_digiCol[i] ).Strip();
573 m_recordAll[part][segment][layer][strip][3]++;
574 if ( isDimu ) m_recordDimu[part][segment][layer][strip][3]++;
575 m_nosHitCol.push_back( m_digiCol[i] );
581 DQA_MUC::FillHistograms( isDimu ).ignore();
584 for (
unsigned int i = 0; i < m_digiCol.size(); i++ )
586 if ( m_digiCol[i] != NULL )
delete m_digiCol[i];
589 for (
unsigned int i = 0; i < m_expHitCol.size(); i++ )
591 if ( m_expHitCol[i] != NULL )
delete m_expHitCol[i];
594 if ( m_effHitCol.size() != 0 ) m_effHitCol.clear();
595 if ( m_expHitCol.size() != 0 ) m_expHitCol.clear();
596 if ( m_nosHitCol.size() != 0 ) m_nosHitCol.clear();
597 if ( m_digiCol.size() != 0 ) m_digiCol.clear();
598 if ( m_clusterCol.size() != 0 ) m_clusterCol.clear();
600 for (
int i = 0; i < PART_MAX; i++ )
602 for (
int j = 0; j < SEGMENT_MAX; j++ )
604 if ( m_segDigiCol[i][j].size() != 0 ) m_segDigiCol[i][j].clear();
608 return StatusCode::SUCCESS;