376 MsgStream log(
msgSvc,
"MucCalibMgr");
377 log << MSG::INFO <<
"Initialize NTuples" << endreq;
380 Gaudi::svcLocator() -> service(
"NTupleSvc",
ntupleSvc);
385 NTuplePtr nt1(
ntupleSvc,
"FILE450/EventLog");
386 if ( nt1 ) { m_eventLogTuple = nt1; }
389 m_eventLogTuple =
ntupleSvc->book (
"FILE450/EventLog", CLID_RowWiseTuple,
"MucCalibConst N-Tuple");
390 if ( m_eventLogTuple )
392 sc = m_eventLogTuple->addItem (
"event_id", m_ntEventId);
393 sc = m_eventLogTuple->addItem (
"event_tag", m_ntEventTag);
394 sc = m_eventLogTuple->addItem (
"start_time", m_ntEsTime);
395 sc = m_eventLogTuple->addItem (
"digi_num", m_ntDigiNum);
396 sc = m_eventLogTuple->addItem (
"track_num", m_ntTrackNum);
397 sc = m_eventLogTuple->addItem (
"exphit_num", m_ntExpHitNum);
398 sc = m_eventLogTuple->addItem (
"effhit_num", m_ntEffHitNum);
399 sc = m_eventLogTuple->addItem (
"noshit_num", m_ntNosHitNum);
400 sc = m_eventLogTuple->addItem (
"cluster_num", m_ntClusterNum);
401 sc = m_eventLogTuple->addItem (
"event_time", m_ntEventTime);
404 log << MSG::ERROR <<
"Cannot book N-tuple:" << long(m_eventLogTuple) << endmsg;
405 return StatusCode::FAILURE;
411 NTuplePtr nt2(
ntupleSvc,
"FILE450/MdcTrkInfo");
412 if ( nt2 ) { m_mdcTrkInfoTuple = nt2; }
415 m_mdcTrkInfoTuple =
ntupleSvc->book (
"FILE450/MdcTrkInfo", CLID_RowWiseTuple,
"MucCalibConst N-Tuple");
416 if ( m_mdcTrkInfoTuple )
418 sc = m_mdcTrkInfoTuple->addItem (
"charge", m_charge);
419 sc = m_mdcTrkInfoTuple->addItem (
"mdcpx", m_mdcpx);
420 sc = m_mdcTrkInfoTuple->addItem (
"mdcpy", m_mdcpy);
421 sc = m_mdcTrkInfoTuple->addItem (
"mdcpz", m_mdcpz);
422 sc = m_mdcTrkInfoTuple->addItem (
"mdcpt", m_mdcpt);
423 sc = m_mdcTrkInfoTuple->addItem (
"mdcpp", m_mdcpp);
424 sc = m_mdcTrkInfoTuple->addItem (
"mdcphi", m_mdcphi);
425 sc = m_mdcTrkInfoTuple->addItem (
"mdctheta", m_mdctheta);
428 log << MSG::ERROR <<
"Cannot book N-tuple:" << long(m_mdcTrkInfoTuple) << endmsg;
429 return StatusCode::FAILURE;
434 NTuplePtr nt3(
ntupleSvc,
"FILE450/TrackInfo");
435 if ( nt3 ) { m_trackInfoTuple = nt3; }
438 m_trackInfoTuple =
ntupleSvc->book (
"FILE450/TrackInfo", CLID_RowWiseTuple,
"MucCalibConst N-Tuple");
439 if ( m_trackInfoTuple )
441 sc = m_trackInfoTuple->addItem (
"track_event", m_ntTrackEvent);
442 sc = m_trackInfoTuple->addItem (
"track_tag", m_ntTrackTag);
443 sc = m_trackInfoTuple->addItem (
"track_hits", m_ntTrackHits);
444 sc = m_trackInfoTuple->addItem (
"segment_fly", m_ntTrackSegFly);
445 sc = m_trackInfoTuple->addItem (
"layer_fly_a", m_ntTrackLayFlyA);
446 sc = m_trackInfoTuple->addItem (
"layer_fly_b", m_ntTrackLayFlyB);
447 sc = m_trackInfoTuple->addItem (
"layer_fly_c", m_ntTrackLayFlyC);
448 sc = m_trackInfoTuple->addItem (
"rec_mode", m_trkRecMode);
449 sc = m_trackInfoTuple->addItem (
"chi2", m_chi2);
450 sc = m_trackInfoTuple->addItem (
"px", m_px);
451 sc = m_trackInfoTuple->addItem (
"py", m_py);
452 sc = m_trackInfoTuple->addItem (
"pz", m_pz);
453 sc = m_trackInfoTuple->addItem (
"pt", m_pt);
454 sc = m_trackInfoTuple->addItem (
"pp", m_pp);
455 sc = m_trackInfoTuple->addItem (
"r", m_r );
456 sc = m_trackInfoTuple->addItem (
"costheta", m_cosTheta);
457 sc = m_trackInfoTuple->addItem (
"theta", m_theta);
458 sc = m_trackInfoTuple->addItem (
"phi", m_phi);
459 sc = m_trackInfoTuple->addItem (
"depth", m_depth);
460 sc = m_trackInfoTuple->addItem (
"br_last_lay", m_brLastLayer);
461 sc = m_trackInfoTuple->addItem (
"ec_last_lay", m_ecLastLayer);
462 sc = m_trackInfoTuple->addItem (
"total_hits", m_totalHits);
463 sc = m_trackInfoTuple->addItem (
"fired_layers", m_totalLayers);
464 sc = m_trackInfoTuple->addItem (
"maxhits_in_layer", m_maxHitsInLayer);
467 log << MSG::ERROR <<
"Cannot book N-tuple:" << long(m_trackInfoTuple) << endmsg;
468 return StatusCode::FAILURE;
473 NTuplePtr nt4(
ntupleSvc,
"FILE450/TrackDiff");
474 if ( nt4 ) { m_trackDiffTuple = nt4; }
477 m_trackDiffTuple =
ntupleSvc->book (
"FILE450/TrackDiff", CLID_RowWiseTuple,
"MucCalibConst N-Tuple");
478 if ( m_trackDiffTuple ) {
479 sc = m_trackDiffTuple->addItem (
"dimu_tag", m_ntDimuTag);
480 sc = m_trackDiffTuple->addItem (
"pos_phi_diff", m_ntPosPhiDiff);
481 sc = m_trackDiffTuple->addItem (
"pos_theta_diff", m_ntPosThetaDiff);
482 sc = m_trackDiffTuple->addItem (
"mom_phi_diff", m_ntMomPhiDiff);
483 sc = m_trackDiffTuple->addItem (
"mom_theta_diff", m_ntMomThetaDiff);
486 log << MSG::ERROR <<
"Cannot book N-tuple:" << long(m_trackDiffTuple) << endmsg;
487 return StatusCode::FAILURE;
492 NTuplePtr nt5(
ntupleSvc,
"FILE450/ClusterSize");
493 if ( nt5 ) { m_clusterSizeTuple = nt5; }
496 m_clusterSizeTuple =
ntupleSvc->book (
"FILE450/ClusterSize", CLID_RowWiseTuple,
"MucCalibConst N-Tuple");
497 if ( m_clusterSizeTuple ) {
498 sc = m_clusterSizeTuple->addItem (
"cluster_size", m_ntClusterSize);
501 log << MSG::ERROR <<
"Cannot book N-tuple:" << long(m_clusterSizeTuple) << endmsg;
502 return StatusCode::FAILURE;
507 NTuplePtr nt6(
ntupleSvc,
"FILE450/EffWindow");
508 if ( nt6 ) { m_effWindowTuple = nt6; }
511 m_effWindowTuple =
ntupleSvc->book (
"FILE450/EffWindow", CLID_RowWiseTuple,
"MucCalibConst N-Tuple");
512 if ( m_effWindowTuple ) {
513 sc = m_effWindowTuple->addItem (
"hit_window", m_ntEffWindow);
516 log << MSG::ERROR <<
"Cannot book N-tuple:" << long(m_effWindowTuple) << endmsg;
517 return StatusCode::FAILURE;
521 NTuplePtr nt7(
ntupleSvc,
"FILE450/ResInfo");
522 if ( nt7 ) { m_resInfoTuple = nt7; }
525 m_resInfoTuple =
ntupleSvc->book (
"FILE450/ResInfo", CLID_RowWiseTuple,
"MucCalibConst N-Tuple");
526 if ( m_resInfoTuple ) {
527 sc = m_resInfoTuple->addItem (
"line_res", m_lineRes);
528 sc = m_resInfoTuple->addItem (
"quad_res", m_quadRes);
529 sc = m_resInfoTuple->addItem (
"extr_res", m_extrRes);
530 sc = m_resInfoTuple->addItem (
"res_part", m_resPart);
531 sc = m_resInfoTuple->addItem (
"res_segment", m_resSegment);
532 sc = m_resInfoTuple->addItem (
"res_layer", m_resLayer);
533 sc = m_resInfoTuple->addItem (
"res_fired", m_resFired);
534 sc = m_resInfoTuple->addItem (
"res_mode", m_resMode);
537 log << MSG::ERROR <<
"Cannot book N-tuple:" << long(m_resInfoTuple) << endmsg;
538 return StatusCode::FAILURE;
572 return StatusCode::SUCCESS;
744 int part, segment, layer, stripMax;
745 part = segment = layer = stripMax = 0;
747 for(
int i=0; i<BOX_MAX; i++ )
749 m_ptrIdTr->
SetBoxPos( i, &part, &segment, &layer );
750 stripMax = m_ptrIdTr->
GetStripMax( part, segment, layer );
752 sprintf( name,
"StripFireMap_P%d_S%d_L%d_Box%d", part, segment, layer, i );
753 sprintf(
title,
"Fires per strip in P%d_S%d_L%d Box%d",part, segment, layer, i );
754 m_hStripFireMap[i] =
new TH1F(name,
title, stripMax, 0, stripMax);
756 sprintf( name,
"StripExpHitMap_P%d_S%d_L%d_Box%d", part, segment, layer, i );
757 sprintf(
title,
"Exp hits per strip in P%d_S%d_L%d Box%d",part, segment, layer, i );
758 m_hStripExpHitMap[i] =
new TH1F(name,
title, stripMax, 0, stripMax);
760 sprintf( name,
"StripEffHitMap_P%d_S%d_L%d_Box%d", part, segment, layer, i );
761 sprintf(
title,
"Eff hits per strip in P%d_S%d_L%d Box%d",part, segment, layer, i );
762 m_hStripEffHitMap[i] =
new TH1F(name,
title, stripMax, 0, stripMax);
764 sprintf( name,
"StripNosHitMap_P%d_S%d_L%d_Box%d", part, segment, layer, i );
765 sprintf(
title,
"Inc hits per strip in P%d_S%d_L%d Box%d",part, segment, layer, i );
766 m_hStripNosHitMap[i] =
new TH1F(name,
title, stripMax, 0, stripMax);
768 sprintf( name,
"StripEffMap_P%d_S%d_L%d_Box%d", part, segment, layer, i );
769 sprintf(
title,
"Strip efficiency in P%d_S%d_L%d Box%d",part, segment, layer, i );
770 m_hStripEffMap[i] =
new TH1F(name,
title, stripMax, 0, stripMax);
772 sprintf( name,
"StripNosRatioMap_P%d_S%d_L%d_Box%d", part, segment, layer, i );
773 sprintf(
title,
"Strip noise hit ratio in P%d_S%d_L%d Box%d",part, segment, layer, i );
774 m_hStripNosRatioMap[i] =
new TH1F(name,
title, stripMax, 0, stripMax);
777 m_hStripFire =
new TH1F(
"StripFire",
"Fires per strip",
STRIP_MAX+1, -0.5,
STRIP_MAX+0.5 );
778 m_hStripExpHit =
new TH1F(
"StripExpHit",
"Exp hit per strip",
STRIP_MAX+1, -0.5,
STRIP_MAX+0.5 );
779 m_hStripEffHit =
new TH1F(
"StripEffHit",
"Eff hit per strip",
STRIP_MAX+1, -0.5,
STRIP_MAX+0.5 );
780 m_hStripNosHit =
new TH1F(
"StripNoshit",
"Nos hit per strip",
STRIP_MAX+1, -0.5,
STRIP_MAX+0.5 );
781 m_hStripEff =
new TH1F(
"StripEff",
"Strip efficiency",
STRIP_MAX+1, -0.5,
STRIP_MAX+0.5 );
782 m_hStripNosRatio=
new TH1F(
"StripNosRatio",
"Strip noise hit ratio",
STRIP_MAX+1, -0.5,
STRIP_MAX+0.5 );
783 m_hStripArea =
new TH1F(
"StripArea",
"Strip area",
STRIP_MAX+1, -0.5,
STRIP_MAX+0.5 );
787 return StatusCode::SUCCESS;
1156 MsgStream log(
msgSvc,
"MucCalibMgr");
1157 log << MSG::INFO <<
"Read event" << endreq;
1159 Gaudi::svcLocator()->service(
"EventDataSvc",
eventSvc);
1160 m_evtBegin = clock();
1163 SmartDataPtr<Event::EventHeader> eventHeader(
eventSvc,
"/Event/EventHeader");
1165 log << MSG::FATAL <<
"Could not find event header" << endreq;
1166 return( StatusCode::FAILURE );
1169 m_currentRun = eventHeader->runNumber();
1170 m_currentEvent = eventHeader->eventNumber();
1171 if( m_fStartRun == 0 ) m_fStartRun = m_currentRun;
1172 m_fEndRun = m_currentRun;
1175 log << MSG::INFO <<
"Run [ " << m_currentRun <<
" ]\tEvent [ " << m_currentEvent <<
" ]" << endreq;
1176 if( ((
long)m_fTotalEvent)%2000 == 0 ) cout << m_fTotalEvent <<
"\tdone!" << endl;
1179 if( m_dimuSelect ) {
1181 log << MSG::INFO <<
"Event tag:\t" << m_eventTag << endreq;
1182 if( m_dimuOnly && m_eventTag != 1 )
return( StatusCode::FAILURE );
1186 log << MSG::INFO <<
"Retrieve digis" << endreq;
1188 SmartDataPtr<MucDigiCol> mucDigiCol(
eventSvc,
"/Event/Digi/MucDigiCol");
1190 log << MSG::FATAL <<
"Could not find MUC digi" << endreq;
1191 return( StatusCode::FAILURE);
1194 int part, segment, layer, strip, pad;
1195 part = segment = layer = strip = pad = 0;
1196 double padX, padY, padZ;
1197 padX = padY = padZ = 0.;
1201 MucDigiCol::iterator digiIter = mucDigiCol->begin();
1203 for (
int digiId =0; digiIter != mucDigiCol->end(); digiIter++, digiId++ )
1205 mucId = (*digiIter)->identify();
1211 log << MSG::DEBUG <<
"[" << part <<
"\t" << segment <<
"\t" << layer <<
"\t" << strip <<
"]\t" ;
1212 if( (digiId+1)%8 == 0 ) log << MSG::DEBUG << endreq;
1216 if(
abs(part)>=
PART_MAX ||
abs(segment)>=SEGMENT_MAX ||
abs(layer)>=LAYER_MAX ||
abs(strip)>=STRIP_INBOX_MAX) {
1217 log << MSG::ERROR << endreq <<
"Digi IDs slop over!" << endreq;
1223 m_digiCol.push_back( aMark );
1224 m_segDigiCol[part][segment].push_back( aMark );
1226 log << MSG::DEBUG << endreq;
1227 log << MSG::INFO <<
"Total digits of this event: " << eventDigi << endreq;
1228 if( eventDigi > 200) log << MSG::ERROR <<
"Event: " << m_currentEvent <<
"\tdigits sharply rise:\t" << eventDigi << endreq;
1246 int clusterNum, bigClusterNum, clusterSize;
1247 clusterNum = bigClusterNum = clusterSize = 0;
1248 if( m_clusterMode ) {
1249 log << MSG::INFO <<
"Searching clusters" << endreq;
1250 m_clusterCol = (*m_ptrMucMark).CreateClusterCol(m_clusterMode, m_digiCol );
1253 for(
unsigned int i=0; i<m_clusterCol.size(); i++ )
1255 clusterSize = m_clusterCol[i].size();
1257 if( clusterSize > CLUSTER_ALARM )
1259 log << MSG::WARNING <<
"Big cluster:" << endreq;
1260 part = (*m_clusterCol[i][0]).Part();
1261 segment = (*m_clusterCol[i][0]).
Segment();
1262 layer = (*m_clusterCol[i][0]).Layer();
1264 if( m_clusterSave ) (*m_fdata) <<
"Event:\t" << m_currentEvent <<
"\tbig cluster " << bigClusterNum << endl;
1266 for(
int j=0; j<clusterSize; j++ )
1268 strip = (*m_clusterCol[i][j]).Strip();
1269 log << MSG::WARNING <<
"[" << part <<
"\t" << segment <<
"\t" << layer <<
"\t" << strip <<
"]\t";
1270 if( (j+1)%8 == 0 ) log << MSG::WARNING << endreq;
1271 if( m_clusterSave ) (*m_fdata) << part <<
"\t" << segment <<
"\t" << layer <<
"\t" << strip << endl;
1273 log << MSG::WARNING << endreq;
1276 else if( clusterSize > 1 )
1278 log << MSG::DEBUG <<
"cluster: " << clusterNum << endreq;
1279 clusterNum ++, m_fTotalClstNum ++;
1280 part = (*m_clusterCol[i][0]).Part();
1281 segment = (*m_clusterCol[i][0]).
Segment();
1282 layer = (*m_clusterCol[i][0]).Layer();
1283 for(
int j=0; j<clusterSize; j++ )
1285 strip = (*m_clusterCol[i][j]).Strip();
1286 log << MSG::DEBUG <<
"[" << part <<
"\t" << segment <<
"\t" << layer <<
"\t" << strip <<
"]\t";
1287 if( (j+1)%8 == 0 ) log << MSG::DEBUG << endreq;
1289 log << MSG::DEBUG << endreq;
1293 if( m_clusterMode) log << MSG::INFO <<
"Total clusters in this event: " << clusterNum << endreq;
1294 else log << MSG::INFO <<
"Clusters not built" << endreq;
1298 log << MSG::INFO <<
"Retrieve tracks" << endreq;
1300 SmartDataPtr<RecMdcTrackCol> mdcTrackCol(
eventSvc,
"/Event/Recon/RecMdcTrackCol");
1302 log << MSG::FATAL <<
"Could not find mdc tracks" << endreq;
1303 return( StatusCode::FAILURE);
1306 RecMdcTrackCol::iterator mdctrkIter = mdcTrackCol->begin();
1307 for (; mdctrkIter != mdcTrackCol->end(); mdctrkIter++)
1309 m_charge = (*mdctrkIter)->charge();
1310 m_mdcpx = (*mdctrkIter)->px();
1311 m_mdcpy = (*mdctrkIter)->py();
1312 m_mdcpz = (*mdctrkIter)->pz();
1313 m_mdcpt = (*mdctrkIter)->pxy();
1314 m_mdcpp = (*mdctrkIter)->p();
1315 m_mdcphi = (*mdctrkIter)->phi();
1316 m_mdctheta = (*mdctrkIter)->theta();
1317 m_mdcTrkInfoTuple->write();
1321 SmartDataPtr<RecMucTrackCol> mucTrackCol(
eventSvc,
"/Event/Recon/RecMucTrackCol");
1323 log << MSG::FATAL <<
"Could not find RecMucTrackCol" << endreq;
1324 return( StatusCode::FAILURE);
1328 if (aRecMucTrackCol->size() < 1) {
1329 log << MSG::INFO <<
"No MUC tracks in this event" << endreq;
1330 return StatusCode::SUCCESS;
1332 log << MSG::INFO <<
"Total tracks of this event: " << aRecMucTrackCol->size() << endreq;
1339 SmartDataPtr<RecEsTimeCol> aRecEsTimeCol(
eventSvc,
"/Event/Recon/RecEsTimeCol");
1340 if( ! aRecEsTimeCol ){
1341 log << MSG::ERROR <<
"Could not find RecEsTimeCol" << endreq;
1342 return StatusCode::FAILURE;
1344 RecEsTimeCol::iterator iter_evt = aRecEsTimeCol->begin();
1347 m_ntEsTime = (*iter_evt)->getStat();
1348 if( (*iter_evt)->getStat() != 211 ) {
1349 log << MSG::WARNING <<
"Event time not by TOF, skip!" << endreq;
1350 return StatusCode::SUCCESS;
1357 phiDiff = thetaDiff = 0.;
1358 if( aRecMucTrackCol->size()==2 && (*aRecMucTrackCol)[0]->GetTotalHits() > 4 && (*aRecMucTrackCol)[1]->GetTotalHits() > 4 )
1361 phi1 = (*aRecMucTrackCol)[0]->getMucPos().phi();
phi2 = (*aRecMucTrackCol)[1]->getMucPos().phi();
1366 theta1 = (*aRecMucTrackCol)[0]->getMucPos().theta();
theta2 = (*aRecMucTrackCol)[1]->getMucPos().theta();
1368 m_hTrackPosPhiDiff->Fill( phiDiff );
1369 m_hTrackPosThetaDiff->Fill( thetaDiff );
1370 m_hDimuTracksPosDiff->Fill( thetaDiff, phiDiff );
1371 m_ntPosPhiDiff = phiDiff;
1372 m_ntPosThetaDiff = thetaDiff;
1374 log << MSG::INFO <<
"PosPhiDiff:\t" << phiDiff <<
"\tPosThetaDiff:\t" << thetaDiff << endreq;
1377 phi1 = (*aRecMucTrackCol)[0]->getMucMomentum().phi();
phi2 = (*aRecMucTrackCol)[1]->getMucMomentum().phi();
1382 theta1 = (*aRecMucTrackCol)[0]->getMucMomentum().theta();
theta2 = (*aRecMucTrackCol)[1]->getMucMomentum().theta();
1385 m_hTrackMomPhiDiff->Fill( phiDiff );
1386 m_hTrackMomThetaDiff->Fill( thetaDiff );
1387 m_hDimuTracksMomDiff->Fill( thetaDiff, phiDiff );
1388 m_ntMomPhiDiff = phiDiff;
1389 m_ntMomThetaDiff = thetaDiff;
1391 log << MSG::INFO <<
"MomPhiDiff:\t" << phiDiff <<
"\tMomThetaDiff:\t" << thetaDiff << endreq;
1392 m_ntDimuTag = m_eventTag;
1393 m_trackDiffTuple->write();
1397 RecMucTrackCol::iterator trackIter = mucTrackCol->begin();
1398 int trackHitNum, rawHitNum, expectedHitNum, segNum, trkRecMode, lastLayerBR, lastLayerEC;
1399 int layerPassNum[3], passMax[TRACK_SEG_MAX][2];
1400 bool firedLay[TRACK_SEG_MAX][LAYER_MAX];
1401 bool seedList[
PART_MAX][LAYER_MAX];
1402 trackHitNum = rawHitNum = expectedHitNum = segNum = trkRecMode = lastLayerBR = lastLayerEC = 0;
1403 layerPassNum[0] = layerPassNum[1] = layerPassNum[2] = 0;
1404 for(
int segi=0; segi<TRACK_SEG_MAX; segi++ ) {
1405 passMax[segi][0] = passMax[segi][1] = 0;
1406 for(
int layi=0; layi<LAYER_MAX; layi++ ) firedLay[segi][layi] = 0;
1413 vector<int> mucRawHitCol;
1414 vector<int> mucExpHitCol;
1416 for (
int trackId = 0; trackIter != mucTrackCol->end(); trackIter++, trackId++)
1421 trackHitNum = (*trackIter)->numHits();
1422 log << MSG::DEBUG <<
"Track: " << trackId <<
" Hits: " << trackHitNum << endreq;
1424 if( trackHitNum == 0 ) {
1425 log << MSG::INFO <<
"Track " << trackId <<
" no hits" << endreq;
1429 m_ntTrackHits = trackHitNum;
1431 m_trkRecMode = trkRecMode = (*trackIter)->GetRecMode();
1432 m_chi2 = (*trackIter)->chi2();
1433 m_px = (*trackIter)->getMucMomentum().x();
1434 m_py = (*trackIter)->getMucMomentum().y();
1435 m_pz = (*trackIter)->getMucMomentum().z();
1436 m_pt = sqrt(m_px*m_px + m_py*m_py);
1437 m_pp = sqrt(m_px*m_px + m_py*m_py + m_pz*m_pz);
1440 m_r = (*trackIter)->getMucPos().mag();
1441 m_cosTheta = (*trackIter)->getMucPos().cosTheta();
1442 m_theta = (*trackIter)->getMucPos().theta();
1443 m_phi = (*trackIter)->getMucPos().phi();
1444 m_depth = (*trackIter)->depth();
1445 m_brLastLayer = lastLayerBR = (*trackIter)->brLastLayer();
1446 m_ecLastLayer = lastLayerEC = (*trackIter)->ecLastLayer();
1447 m_totalHits = (*trackIter)->numHits();
1448 m_totalLayers = (*trackIter)->numLayers();
1449 m_maxHitsInLayer = (*trackIter)->maxHitsInLayer();
1452 m_hPhiCosTheta->Fill(m_cosTheta, m_phi);
1453 log << MSG::INFO <<
"Fill track info" << endreq;
1457 if( m_calHitCol.size() != 0 ) m_calHitCol.clear();
1460 log << MSG::DEBUG <<
"Reconstruction hits(digis in a track): " << endreq;
1462 mucRawHitCol =(*trackIter)->getVecHits();
1463 rawHitNum += mucRawHitCol.size();
1472 for(
unsigned int hitId = 0; hitId < mucRawHitCol.size(); hitId++)
1480 mucId = mucRawHitCol[hitId];
1487 log << MSG::DEBUG <<
"[" << part <<
"\t" << segment <<
"\t" << layer <<
"\t" << strip <<
"]\t";
1492 m_calHitCol.push_back( aMark );
1498 if(hitId == 0) { trkSeg[segNum].push_back( aMark ); segNum ++; }
1501 log << MSG::DEBUG <<
"segNum: " << segNum << endreq;
1502 bool notInSeg =
true;
1503 for(
int segi=0; segi<segNum; segi++ )
1507 trkSeg[segi].push_back( aMark );
1513 if( notInSeg ==
true )
1515 trkSeg[segNum].push_back( aMark );
1517 if( segNum > TRACK_SEG_MAX ) {
1518 log << MSG::ERROR <<
"Track segment overflow: " << segNum << endreq;
1524 log << MSG::DEBUG << endreq;
1527 layerPassNum[0] = layerPassNum[1] = layerPassNum[2] = 0;
1528 for(
int segi=0; segi<segNum; segi++ )
1531 passMax[segi][0] = passMax[segi][1] = trkSeg[segi][0]->Layer();
1532 for(
unsigned int hiti=1; hiti<trkSeg[segi].size(); hiti++ )
1534 if( trkSeg[segi][hiti]->Layer() < passMax[segi][0] )
1535 passMax[segi][0] = trkSeg[segi][hiti]->Layer();
1536 if( trkSeg[segi][hiti]->Layer() > passMax[segi][1] )
1537 passMax[segi][1] = trkSeg[segi][hiti]->Layer();
1538 firedLay[segi][trkSeg[segi][hiti]->Layer()] = 1;
1541 for(
int layi=0; layi<LAYER_MAX; layi++ ) {
1542 if( firedLay[segi][layi] ) tmpLayNum ++;
1545 if( segi == 0 ) layerPassNum[0] += passMax[segi][1] + 1;
1546 else layerPassNum[0] += (passMax[segi][1] - passMax[segi][0] + 1);
1548 layerPassNum[1] += (passMax[segi][1] - passMax[segi][0] + 1);
1549 layerPassNum[2] += tmpLayNum;
1551 trkSeg[segi].clear();
1553 m_ntTrackEvent = m_currentEvent;
1554 m_ntTrackTag = m_eventTag;
1555 m_ntTrackSegFly = segNum;
1556 m_ntTrackLayFlyA = layerPassNum[0];
1557 m_ntTrackLayFlyB = layerPassNum[1];
1558 m_ntTrackLayFlyC = layerPassNum[2];
1559 m_trackInfoTuple->write();
1560 log << MSG::INFO <<
"Track\t" << trackId <<
"\tsegment(s):\t" << segNum
1561 <<
"\tlayer passed:\t" << layerPassNum[0] <<
"\t" << layerPassNum[1] <<
"\t" << layerPassNum[2] << endreq;
1566 log << MSG::DEBUG <<
"Fitting hits(expected hits in a track): " << endreq;
1568 mucExpHitCol = (*trackIter)->getExpHits();
1570 expectedHitNum += mucExpHitCol.size();
1572 for(
unsigned int hitId = 0; hitId < mucExpHitCol.size(); hitId++)
1578 mucId =mucExpHitCol[hitId];
1601 MucMark* currentMark =
new MucMark( part, segment, layer, strip );
1602 m_expHitCol.push_back( currentMark );
1608 bool isInEffWindow =
false;
1609 isInPos = currentMark->
IsInCol( m_segDigiCol[part][segment] );
1612 if( part ==
BRID && (layer-lastLayerBR>1) )
continue;
1613 if( part !=
BRID && (layer-lastLayerEC>1) )
continue;
1616 if( part==
BRID && layer==0 && (strip<2 || strip>45) )
1620 m_record[part][segment][layer][strip][2] ++;
1621 m_record[part][segment][layer][strip][1] ++;
1622 m_effHitCol.push_back( m_segDigiCol[part][segment][isInPos] );
1624 if( m_usePad != 0 ) {
1625 m_h2DExpMap[part][segment][layer]->Fill(padX, padY);
1626 m_h2DHitMap[part][segment][layer]->Fill(padX, padY);
1631 m_record[part][segment][layer][strip][1] ++;
1632 if( m_usePad != 0 ) m_h2DExpMap[part][segment][layer]->Fill(padX, padY);
1640 m_record[part][segment][layer][strip][2] ++;
1641 m_record[part][segment][layer][strip][1] ++;
1642 m_effHitCol.push_back( m_segDigiCol[part][segment][isInPos] );
1644 if( m_usePad != 0 ) {
1645 m_h2DExpMap[part][segment][layer]->Fill(padX, padY);
1646 m_h2DHitMap[part][segment][layer]->Fill(padX, padY);
1651 else for(
int tempStrip=0, hiti=-m_effWindow; hiti<=m_effWindow; hiti++ )
1653 if( hiti == 0 )
continue;
1654 tempStrip = strip + hiti;
1655 if( tempStrip < 0 || tempStrip > m_ptrIdTr->
GetStripMax(part,segment,layer) )
continue;
1657 isInPos = m_ptrMucMark->
IsInCol( part, segment, layer, tempStrip, m_segDigiCol[part][segment] );
1660 m_record[part][segment][layer][tempStrip][2] ++;
1661 m_record[part][segment][layer][tempStrip][1] ++;
1662 m_effHitCol.push_back( m_segDigiCol[part][segment][isInPos] );
1664 if( m_usePad != 0 ) {
1665 m_h2DExpMap[part][segment][layer]->Fill(padX, padY);
1666 m_h2DHitMap[part][segment][layer]->Fill(padX, padY);
1669 m_ntEffWindow = hiti;
1670 m_effWindowTuple->write();
1671 isInEffWindow =
true;
1676 if( isInEffWindow ) {
continue; }
1678 m_record[part][segment][layer][strip][1] ++;
1679 if( m_usePad != 0 ) m_h2DExpMap[part][segment][layer]->Fill(padX, padY);
1685 log << MSG::INFO <<
"Fill residual" << endreq;
1686 vector<float> m_lineResCol = (*trackIter)->getDistHits();
1687 vector<float> m_quadResCol = (*trackIter)->getQuadDistHits();
1688 vector<float> m_extrResCol = (*trackIter)->getExtDistHits();
1689 int mode = (*trackIter)->GetRecMode();
1691 for(
unsigned int nres = 0; nres < m_lineResCol.size(); nres++ )
1692 if( fabs(m_lineResCol[nres])>resMax ) resMax = fabs(m_lineResCol[nres]);
1694 log << MSG::INFO <<
"Good track for res" << endreq;
1695 if( trackHitNum > 4 && m_lineResCol[0] != -99)
1698 bool firedFlag[
PART_MAX][LAYER_MAX][2];
1699 for(
int iprt=0; iprt<
PART_MAX; iprt++)
1700 for(
int jlay=0; jlay<LAYER_MAX; jlay++)
1701 firedFlag[iprt][jlay][0] = firedFlag[iprt][jlay][1] =
false;
1703 for(
unsigned int hitId = 0; hitId < mucExpHitCol.size(); hitId++)
1708 mucId = mucExpHitCol[hitId];
1714 firedFlag[part][layer][0] =
true;
1717 log << MSG::INFO <<
"Fit res" << endreq;
1718 for(
unsigned int hitId = 0; hitId < mucRawHitCol.size(); hitId++)
1723 mucId = mucRawHitCol[hitId];
1728 if( part ==
BRID ) m_hBarrelResDist[layer]->Fill( m_lineResCol[hitId] );
1729 else m_hEndcapResDist[layer]->Fill( m_lineResCol[hitId] );
1732 if( firedFlag[part][layer][0] ==
true && firedFlag[part][layer][1] ==
false )
1735 m_resSegment = segment;
1737 m_lineRes = m_lineResCol[hitId];
1744 m_resInfoTuple->write();
1748 firedFlag[part][layer][1] =
true;
1751 log << MSG::INFO <<
"Exp res" << endreq;
1752 for(
unsigned int hitId = 0; hitId < mucExpHitCol.size(); hitId++)
1757 mucId = mucExpHitCol[hitId];
1762 if(firedFlag[part][layer][0] ==
true && firedFlag[part][layer][1] ==
false)
1765 m_resSegment = segment;
1772 m_resInfoTuple->write();
1778 mucRawHitCol.clear();
1779 mucExpHitCol.clear();
1785 m_ntTrackNum = mucTrackCol->size();
1787 m_fTotalEffHit += rawHitNum;
1788 log << MSG::INFO <<
"Total hits in this event, raw: " << rawHitNum <<
"\texpected: " << expectedHitNum << endreq;
1792 log << MSG::INFO <<
"Searching inc/noise hits" << endreq;
1795 for(
unsigned int i=0; i < m_digiCol.size(); i++ )
1799 if( m_digiCol[i]->IsInCol( m_effHitCol ) !=-1)
continue;
1802 for(
unsigned int j=0; j < m_clusterCol.size(); j++ )
1805 for(
unsigned int k=0; k<m_clusterCol[j].size(); k++)
1807 if( m_clusterCol[j][k]->IsInCol(m_effHitCol) != -1)
1814 if ( hasEffHit && (m_digiCol[i]->IsInCol( m_clusterCol[j] ) != -1) ) {
1821 m_nosHitCol.push_back( m_digiCol[i] );
1827 return StatusCode::SUCCESS;
1888 MsgStream log(
msgSvc,
"MucCalibMgr");
1889 log << MSG::INFO <<
"Fill event" << endreq;
1891 int part, segment, layer, strip, size;
1892 part = segment = layer = strip = size = 0;
1895 log << MSG::INFO <<
"Fill digis" << endreq;
1896 for(
unsigned int i=0; i<m_digiCol.size(); i++ )
1898 part = (*m_digiCol[i]).Part();
1899 segment = (*m_digiCol[i]).
Segment();
1900 layer = (*m_digiCol[i]).Layer();
1901 strip = (*m_digiCol[i]).Strip();
1903 FillDigi( part, segment, layer, strip );
1904 m_record[part][segment][layer][strip][0] ++;
1909 log << MSG::INFO <<
"Fill rec hits" << endreq;
1910 for(
unsigned int i=0; i<m_expHitCol.size(); i++ )
1912 part = (*m_expHitCol[i]).Part();
1913 segment = (*m_expHitCol[i]).
Segment();
1914 layer = (*m_expHitCol[i]).Layer();
1915 strip = (*m_expHitCol[i]).Strip();
1918 m_record[part][segment][layer][strip][4] ++;
1923 log << MSG::INFO <<
"Fill eff hits" << endreq;
1924 for(
unsigned int i=0; i<m_effHitCol.size(); i++ )
1926 part = (*m_effHitCol[i]).Part();
1927 segment = (*m_effHitCol[i]).
Segment();
1928 layer = (*m_effHitCol[i]).Layer();
1929 strip = (*m_effHitCol[i]).Strip();
1936 log << MSG::INFO <<
"Fill clusters" << endreq;
1937 for(
unsigned int i=0; i<m_clusterCol.size(); i++ )
1939 size = m_clusterCol[i].size();
1941 if( size > CLUSTER_CUT )
1943 part = (*m_clusterCol[i][0]).Part();
1944 segment = (*m_clusterCol[i][0]).
Segment();
1945 layer = (*m_clusterCol[i][0]).Layer();
1948 m_ntClusterSize = size;
1949 m_clusterSizeTuple->write();
1954 log << MSG::INFO <<
"Fill inc/noise hits" << endreq;
1955 for(
unsigned int i=0; i<m_nosHitCol.size(); i++ )
1957 part = (*m_nosHitCol[i]).Part();
1958 segment = (*m_nosHitCol[i]).
Segment();
1959 layer = (*m_nosHitCol[i]).Layer();
1960 strip = (*m_nosHitCol[i]).Strip();
1963 m_record[part][segment][layer][strip][3] ++;
1967 m_ntEventId = m_currentEvent;
1968 m_ntEventTag = m_eventTag;
1969 m_ntDigiNum = m_digiCol.size();
1970 m_ntExpHitNum = m_expHitCol.size();
1971 m_ntEffHitNum = m_effHitCol.size();
1972 m_ntNosHitNum = m_nosHitCol.size();
1973 m_ntClusterNum = m_clusterCol.size();
1976 for(
unsigned int i=0; i<m_digiCol.size(); i++ ) {
1977 if( m_digiCol[i] !=
NULL )
delete m_digiCol[i];
1980 for(
unsigned int i=0; i<m_expHitCol.size(); i++ ) {
1981 if( m_expHitCol[i] !=
NULL )
delete m_expHitCol[i];
1989 for(
unsigned int i=0; i<m_calHitCol.size(); i++ ) {
1990 if( m_calHitCol[i] !=
NULL )
delete m_calHitCol[i];
1993 if( m_digiCol.size() != 0 ) m_digiCol.clear();
1994 if( m_expHitCol.size() != 0 ) m_expHitCol.clear();
1995 if( m_calHitCol.size() != 0 ) m_calHitCol.clear();
1996 if( m_effHitCol.size() != 0 ) m_effHitCol.clear();
1997 if( m_nosHitCol.size() != 0 ) m_nosHitCol.clear();
1998 if( m_clusterCol.size() != 0 ) m_clusterCol.clear();
2002 for(
int j=0; j<SEGMENT_MAX; j++ ) {
2003 if( m_segDigiCol[i][j].size() != 0 ) m_segDigiCol[i][j].clear();
2009 m_ntEventTime = (double(m_evtEnd - m_evtBegin))/CLOCKS_PER_SEC;
2010 log << MSG::INFO <<
"Event time:\t" << m_ntEventTime <<
"s" << endreq;
2011 m_eventLogTuple->write();
2013 return StatusCode::SUCCESS;
2154 MsgStream log(
msgSvc,
"MucCalibMgr");
2155 log<< MSG::INFO <<
"Analyse layer efficiency and noise" << endreq;
2157 int part, segment, layer, stripMax;
2158 part = segment = layer = stripMax = 0;
2160 double digi, effHit, trackNum, nosHit, recHit;
2161 double eff, effErr, noise, nosRatio, nosRatioErr, cnt, cluster;
2162 eff = effErr = noise = nosRatio = nosRatioErr = cnt = cluster = 0.;
2164 for(
int i=0; i<LAYER_MAX; i++ )
2166 digi = effHit = trackNum = nosHit = recHit = 0;
2170 for(
int k=0; k<SEGMENT_MAX; k++)
2173 for(
int n=0;
n<stripMax;
n++ )
2175 digi += m_record[j][k][i][
n][0];
2176 trackNum += m_record[j][k][i][
n][1];
2177 effHit += m_record[j][k][i][
n][2];
2178 nosHit += m_record[j][k][i][
n][3];
2179 recHit += m_record[j][k][i][
n][4];
2185 if( trackNum == 0 ) {
2192 eff = ( (double)effHit )/trackNum;
2193 effErr = sqrt( eff*(1-eff)/trackNum );
2194 m_fCalibLayerNum ++;
2198 if( m_layerResults[3][i] < LIMIT_CUT || m_fTotalDAQTime < LIMIT_CUT )
2199 noise = DEFAULT_NOS_VALUE;
2201 if( m_recMode == 2 ) noise = (double)nosHit/(m_fTotalEvent*TRIGGER_WINDOW*m_layerResults[3][i]);
2202 else noise = (double)nosHit/(m_fTotalDAQTime * m_layerResults[3][i]);
2206 nosRatio = ( (double)nosHit )/digi;
2207 nosRatioErr = sqrt( nosRatio*(1-nosRatio)/digi );
2210 nosRatio = DEFAULT_INC_VALUE;
2215 if( m_recMode == 2 )
2216 cnt = (double)digi/(m_fTotalEvent*TRIGGER_WINDOW * m_layerResults[3][i]);
2218 cnt = (double)digi/(m_fTotalDAQTime * m_layerResults[3][i]);
2221 cluster = m_hLayerCluster[i]->GetMean();
2223 m_layerResults[0][ i ] = eff;
2224 m_layerResults[1][ i ] = effErr;
2225 m_layerResults[2][ i ] = noise;
2226 m_layerResults[4][ i ] = cluster;
2227 m_layerResults[5][ i ] = trackNum;
2230 m_hLayerEff->Fill( i, eff );
2231 m_hLayerEff->SetBinError( i+1, effErr );
2232 m_hLayerNosRatio->Fill( i, nosRatio );
2233 m_hLayerNosRatio->SetBinError( i+1, nosRatioErr );
2234 m_hLayerNos->Fill( i, noise );
2235 m_hLayerCnt->Fill( i, cnt );
2238 m_hLayerClusterCmp->Fill( i, cluster );
2243 m_fLayerEffErr = effErr;
2244 m_fLayerTrkNum = trackNum;
2245 m_fLayerExpHit = recHit;
2246 m_fLayerEffHit = effHit;
2247 m_fLayerNosRatio = nosRatio;
2248 m_fLayerDigi = digi;
2249 m_fLayerNosHit = nosHit;
2250 m_fLayerNos = noise;
2252 m_tLayConst->Fill();
2255 m_fLayerCluster = cluster;
2259 return StatusCode::SUCCESS;
2264 MsgStream log(
msgSvc,
"MucCalibMgr");
2265 log<< MSG::INFO <<
"Analyse box efficiency and noise" << endreq;
2267 int part, segment, layer, stripMax;
2268 part = segment = layer = stripMax = 0;
2270 double digi, effHit, trackNum, nosHit, recHit;
2271 double eff, effErr, noise, nosRatio, nosRatioErr, cnt, cluster;
2272 eff = effErr = noise = nosRatio = nosRatioErr = cnt = cluster = 0.;
2274 for(
int i=0; i<BOX_MAX; i++ )
2276 m_ptrIdTr->
SetBoxPos( i, &part, &segment, &layer );
2277 stripMax = m_ptrIdTr->
GetStripMax( part, segment, layer );
2279 digi = effHit = trackNum = nosHit = recHit = 0;
2280 for(
int j=0; j<stripMax; j++ )
2282 digi += m_record[part][segment][layer][j][0];
2283 trackNum += m_record[part][segment][layer][j][1];
2284 effHit += m_record[part][segment][layer][j][2];
2285 nosHit += m_record[part][segment][layer][j][3];
2286 recHit += m_record[part][segment][layer][j][4];
2290 if( trackNum == 0 ) {
2297 eff = ( (double)effHit )/trackNum;
2298 effErr = sqrt( eff*(1-eff)/trackNum );
2303 if( m_boxResults[3][i] < LIMIT_CUT || m_fTotalDAQTime < LIMIT_CUT )
2304 noise = DEFAULT_NOS_VALUE;
2306 if( m_recMode == 2 )
2307 noise = (double)nosHit/(m_fTotalEvent*TRIGGER_WINDOW * m_boxResults[3][i]);
2309 noise = (double)nosHit/(m_fTotalDAQTime * m_boxResults[3][i]);
2313 nosRatio = ( (double)nosHit )/digi;
2314 nosRatioErr = sqrt( nosRatio*(1-nosRatio)/digi );
2317 nosRatio = DEFAULT_INC_VALUE;
2322 if( m_recMode == 2 )
2323 cnt = (double)digi/(m_fTotalEvent*TRIGGER_WINDOW * m_boxResults[3][i]);
2325 cnt = (double)digi/(m_fTotalDAQTime * m_boxResults[3][i]);
2328 cluster = m_hBoxCluster[i]->GetMean();
2330 m_boxResults[0][ i ] = eff;
2331 m_boxResults[1][ i ] = effErr;
2332 m_boxResults[2][ i ] = noise;
2333 m_boxResults[4][ i ] = cluster;
2334 m_boxResults[5][ i ] = trackNum;
2337 m_hBoxEff->Fill( i, eff );
2338 m_hBoxEff->SetBinError( i+1, effErr );
2339 m_hBoxNosRatio->Fill( i, nosRatio );
2340 m_hBoxNosRatio->SetBinError( i+1, nosRatioErr );
2341 m_hBoxNos->Fill( i, noise );
2342 m_hBoxCnt->Fill( i, cnt );
2345 m_hBoxClusterCmp->Fill( i, cluster );
2350 m_fBoxSegment = segment;
2351 m_fBoxLayer = layer;
2353 m_fBoxEffErr = effErr;
2354 m_fBoxTrkNum = trackNum;
2355 m_fBoxExpHit = recHit;
2356 m_fBoxEffHit = effHit;
2357 m_fBoxNosRatio = nosRatio;
2359 m_fBoxNosHit = nosHit;
2362 m_tBoxConst->Fill();
2365 m_fBoxCluster = cluster;
2369 return StatusCode::SUCCESS;
2374 MsgStream log(
msgSvc,
"MucCalibMgr");
2375 log<< MSG::INFO <<
"Analyse strip efficiency and noise" << endreq;
2377 int part, segment, layer, stripMax;
2378 part = segment = layer = stripMax = 0;
2380 double digi, effHit, trackNum, nosHit, recHit;
2381 double eff, effErr, noise, nosRatio, nosRatioErr, cnt, cluster;
2382 eff = effErr = noise = nosRatio = nosRatioErr = cnt = cluster = 0.;
2384 for(
int i=0; i<BOX_MAX; i++ )
2386 m_ptrIdTr->
SetBoxPos( i, &part, &segment, &layer );
2387 stripMax = m_ptrIdTr->
GetStripMax( part, segment, layer );
2389 for(
int j=0; j<stripMax; j++ )
2391 digi = m_record[part][segment][layer][j][0];
2392 trackNum = m_record[part][segment][layer][j][1];
2393 effHit = m_record[part][segment][layer][j][2];
2394 nosHit = m_record[part][segment][layer][j][3];
2395 recHit = m_record[part][segment][layer][j][4];
2397 int stripId = m_ptrIdTr->
GetStripId( part, segment, layer, j );
2400 if( trackNum == 0 ) {
2407 eff = ( (double)effHit )/trackNum;
2408 effErr = sqrt( eff*(1-eff)/trackNum );
2409 m_fCalibStripNum ++;
2413 if( m_stripResults[3][stripId] < LIMIT_CUT || m_fTotalDAQTime < LIMIT_CUT )
2414 noise = DEFAULT_NOS_VALUE;
2416 if( m_recMode == 2 )
2417 noise = (double)nosHit/(m_fTotalEvent*TRIGGER_WINDOW * m_stripResults[3][stripId]);
2419 noise = (double)nosHit/(m_fTotalDAQTime * m_stripResults[3][stripId]);
2423 nosRatio = ( (double)nosHit )/digi;
2424 nosRatioErr = sqrt( nosRatio*(1-nosRatio)/digi );
2427 nosRatio = DEFAULT_INC_VALUE;
2432 if( m_recMode == 2 )
2433 cnt = (double)digi/(m_fTotalEvent*TRIGGER_WINDOW * m_stripResults[3][stripId]);
2435 cnt = (double)digi/(m_fTotalDAQTime * m_stripResults[3][stripId]);
2438 m_stripResults[0][ stripId ] = eff;
2439 m_stripResults[1][ stripId ] = effErr;
2440 m_stripResults[2][ stripId ] = noise;
2441 m_stripResults[5][ stripId ] = trackNum;
2444 m_hStripEffMap[i]->Fill( j, eff );
2445 m_hStripEffMap[i]->SetBinError( j+1, effErr );
2446 m_hStripEff->Fill( stripId, eff );
2447 m_hStripEff->SetBinError( stripId+1, effErr );
2448 m_hStripNosRatioMap[i]->Fill( j, nosRatio );
2449 m_hStripNosRatioMap[i]->SetBinError( j+1, nosRatioErr );
2450 m_hStripNosRatio->Fill( stripId, nosRatio );
2451 m_hStripNosRatio->SetBinError( stripId+1, nosRatioErr );
2452 m_hStripNos->Fill( stripId, noise );
2453 m_hStripCnt->Fill( stripId, cnt );
2456 m_fStripId = stripId;
2457 m_fStripPart = part;
2458 m_fStripSegment = segment;
2459 m_fStripLayer = layer;
2461 m_fStripEffErr = effErr;
2462 m_fStripNosRatio = nosRatio;
2463 m_fStripDigi = digi;
2464 m_fStripNos = noise;
2466 m_fStripEffHit = effHit;
2467 m_fStripExpHit = recHit;
2468 m_fStripNosHit = nosHit;
2469 m_fStripTrkNum = trackNum;
2470 m_tStrConst->Fill();
2475 return StatusCode::SUCCESS;
2562 MsgStream log(
msgSvc,
"MucCalibMgr");
2563 log << MSG::INFO <<
"Save calibration constants" << endreq;
2567 double layerXY[2][LAYER_MAX];
2568 double layerEXY[2][LAYER_MAX];
2569 for(
int i=0; i<LAYER_MAX; i++ )
2573 if( m_layerResults[5][i] >= 100*TRACK_THRESHOLD ) {
2574 layerXY[1][i] = m_layerResults[0][i];
2575 layerEXY[1][i] = m_layerResults[1][i];
2582 m_geLayerEff =
new TGraphErrors(LAYER_MAX, layerXY[0], layerXY[1], layerEXY[0], layerEXY[1]);
2583 m_geLayerEff->SetMarkerStyle(25);
2584 m_geLayerEff->SetMarkerSize(0.5);
2585 m_cv[0] =
new TCanvas(
"GoodLayerEff",
"Layer efficiency", 50, 50, 800, 600);
2586 m_cv[0]->SetFillColor(0);
2587 m_cv[0]->SetBorderMode(0);
2588 m_geLayerEff->Draw(
"AP");
2592 double boxXY[2][BOX_MAX];
2593 double boxEXY[2][BOX_MAX];
2594 for(
int i=0; i<BOX_MAX; i++ )
2598 if( m_boxResults[5][i] >= 10*TRACK_THRESHOLD ) {
2599 boxXY[1][i] = m_boxResults[0][i];
2600 boxEXY[1][i] = m_boxResults[1][i];
2607 m_geBoxEff =
new TGraphErrors(BOX_MAX, boxXY[0], boxXY[1], boxEXY[0], boxEXY[1]);
2608 m_geBoxEff->SetMarkerStyle(25);
2609 m_geBoxEff->SetMarkerSize(0.5);
2610 m_cv[1] =
new TCanvas(
"GoodBoxEff",
"Box efficiency", 75, 75, 800, 600);
2611 m_cv[1]->SetFillColor(0);
2612 m_cv[1]->SetBorderMode(0);
2613 m_geBoxEff->Draw(
"AP");
2623 if( m_stripResults[5][i] >= TRACK_THRESHOLD ) {
2624 stripXY[1][i] = m_stripResults[0][i];
2625 stripEXY[1][i] = m_stripResults[1][i];
2632 m_geStripEff =
new TGraphErrors(
STRIP_MAX, stripXY[0], stripXY[1], stripEXY[0], stripEXY[1]);
2633 m_geStripEff->SetMarkerStyle(25);
2634 m_geStripEff->SetMarkerSize(0.5);
2635 m_cv[2] =
new TCanvas(
"GoodStripEff",
"Strip efficiency", 100, 100, 800, 600);
2636 m_cv[2]->SetFillColor(0);
2637 m_cv[2]->SetBorderMode(0);
2638 m_geStripEff->Draw(
"AP");
2644 m_hHitMapBarrel_Lay[i]->Write();
2647 m_hHitMapEndcap_Lay[0][i]->Write();
2648 m_hHitMapEndcap_Lay[1][i]->Write();
2654 m_hHitMapBarrel_Seg[i]->Write();
2657 m_hHitMapEndcap_Seg[0][i]->Write();
2658 m_hHitMapEndcap_Seg[1][i]->Write();
2661 m_hTrackDistance->Fit(
"gaus");
2662 m_hTrackPosPhiDiff->Fit(
"gaus");
2663 m_hTrackPosThetaDiff->Fit(
"gaus");
2664 m_hTrackMomPhiDiff->Fit(
"gaus");
2665 m_hTrackMomThetaDiff->Fit(
"gaus");
2667 m_hTrackDistance->Write();
2668 m_hTrackPosPhiDiff->Write();
2669 m_hTrackPosThetaDiff->Write();
2670 m_hTrackMomPhiDiff->Write();
2671 m_hTrackMomThetaDiff->Write();
2676 m_hBarrelResComp[0]->Write();
2677 m_hBarrelResComp[1]->Write();
2678 m_hEndcapResComp[0]->Write();
2679 m_hEndcapResComp[1]->Write();
2681 if( m_usePad != 0 ) m_histArray->Write();
2683 for(
int i=0; i<BOX_MAX; i++ )
2685 m_hStripFireMap[ i ]->Write();
2686 m_hStripExpHitMap[ i ]->Write();
2687 m_hStripEffHitMap[ i ]->Write();
2688 m_hStripNosHitMap[ i ]->Write();
2689 m_hStripEffMap[ i ]->Write();
2690 m_hStripNosRatioMap[ i ]->Write();
2692 m_hStripFire->Write();
2693 m_hStripExpHit->Write();
2694 m_hStripEffHit->Write();
2695 m_hStripNosHit->Write();
2696 m_hStripEff->Write();
2697 m_hStripArea->Write();
2698 m_hStripNos->Write();
2699 m_hStripNosRatio->Write();
2700 log << MSG::INFO <<
"Save LV2 histograms done!" << endreq;
2702 m_hBoxFire->Write();
2703 m_hBoxExpHit->Write();
2704 m_hBoxEffHit->Write();
2705 m_hBoxNosHit->Write();
2707 m_hBoxArea->Write();
2709 m_hBoxNosRatio->Write();
2710 log << MSG::INFO <<
"Save LV1 histograms done!" << endreq;
2712 m_hBrLayerFire->Write();
2713 m_hEcLayerFire->Write();
2714 m_hLayerFire->Write();
2715 m_hLayerExpHit->Write();
2716 m_hLayerEffHit->Write();
2717 m_hLayerNosHit->Write();
2718 m_hLayerEff->Write();
2719 m_hLayerArea->Write();
2720 m_hLayerNos->Write();
2721 m_hLayerNosRatio->Write();
2723 for(
int i=0; i<LAYER_MAX; i++ ) m_hLayerCluster[i]->
Write();
2724 for(
int i=0; i<BOX_MAX; i++ ) m_hBoxCluster[i]->
Write();
2725 m_hLayerClusterCmp->Write();
2726 m_hBoxClusterCmp->Write();
2728 log << MSG::INFO <<
"Save histograms done!" << endreq;
2731 m_fLayerCoverage = 100*(double)m_fCalibLayerNum/LAYER_MAX;
2732 m_fBoxCoverage = 100*(double)m_fCalibBoxNum/BOX_MAX;
2733 m_fStripCoverage = 100*(double)m_fCalibStripNum/
STRIP_MAX;
2735 long digi_num, trk_num, eff_hit, nos_hit, exp_hit;
2736 m_tStatLog->Branch(
"digi_num", &digi_num,
"digi_num/I");
2737 m_tStatLog->Branch(
"trk_num", &trk_num,
"trk_num/I");
2738 m_tStatLog->Branch(
"eff_hit", &eff_hit,
"eff_hit/I");
2739 m_tStatLog->Branch(
"nos_hit", &nos_hit,
"nos_hit/I");
2740 m_tStatLog->Branch(
"exp_hit", &exp_hit,
"exp_hit/I");
2748 for(
int n=0;
n<stripMax;
n++ )
2750 digi_num = m_record[i][j][k][
n][0];
2751 trk_num = m_record[i][j][k][
n][1];
2752 eff_hit = m_record[i][j][k][
n][2];
2753 nos_hit = m_record[i][j][k][
n][3];
2754 exp_hit = m_record[i][j][k][
n][4];
2759 m_jobFinish = clock();
2760 m_fTotalJobTime = (double)(m_jobFinish - m_jobStart)/CLOCKS_PER_SEC;
2764 m_tStatLog->Write();
2765 m_tLayConst->Write();
2766 m_tBoxConst->Write();
2767 m_tStrConst->Write();
2770 if( m_fdata !=
NULL ) m_fdata->close();
2772 return StatusCode::SUCCESS;