Namespaces | |
namespace | __init__ |
Functions | |
DaqBenchmark (const string &name, ISvcLocator *pSvcLocator) | |
~DaqBenchmark () | |
StatusCode | initialize () |
StatusCode | finalize () |
StatusCode | execute () |
TH1F ** | getSlotLowGainHistograms (const unsigned int slot) |
TH1F ** | getSlotHighGainHistograms (const unsigned int slot) |
TH1F ** | getSlotTdcHistograms (const unsigned int slot) |
TH1F ** | getSlotHistogram (TH1F ***histograms, const unsigned int slot) |
TH2F ** | getSlotFadcHistograms (const unsigned int slot) |
TH2F ** | getSlotHistogram (TH2F ***histograms, const unsigned int slot) |
TH1F * | getLowGainHistogram (TH1F **slotLowGainHistograms, const unsigned int slot, const unsigned int channelNumber) |
TH1F * | getHighGainHistogram (TH1F **slotHighGainHistograms, const unsigned int slot, const unsigned int channelNumber) |
TH1F * | getTdcHistogram (TH1F **slotTdcHistograms, const unsigned int slot, const unsigned int channelNumber) |
TH2F * | getFadcHistogram (TH2F **slotFadcHistograms, const unsigned int slot, const unsigned int channelNumber) |
StatusCode | handleDaqFormat (const ReadoutHeader &readoutHeader) |
void | handleEvent (const DybDaq::EventReadout &event) |
void | handleFragment (const RomFragment &fragment) |
void | handleFee (const FeeReadout &readout, const unsigned int slot) |
StatusCode | handleReadoutEvent (const ReadoutHeader &readoutHeader) |
void | handleEvent (const DayaBay::ReadoutPmtCrate &crate) |
void | handleChannel (const ReadoutPmtChannel &channel) |
StatusCode | handleDaqEvent (const ReadoutHeader &readoutHeader) |
void | handleEvent (const DayaBay::DaqPmtCrate &crate) |
void | handleFrame (const DaqLtbFrame &) |
void | handleChannel (const DaqPmtChannel &channel) |
void | handleChannel (const DaqFadcChannel &channel) |
DaqBenchmark::DaqBenchmark | ( | const string & | name, | |
ISvcLocator * | pSvcLocator | |||
) |
Definition at line 81 of file DaqBenchmark.cc.
00082 : 00083 GaudiAlgorithm(name, 00084 pSvcLocator), 00085 m_statsSvc(0), 00086 m_feeLowGainHistograms( new TH1F**[kMaxSlotCount]), 00087 m_feeHighGainHistograms( new TH1F**[kMaxSlotCount]), 00088 m_feeTdcHistograms( new TH1F**[kMaxSlotCount]), 00089 m_fadcHistograms( new TH2F**[kMaxSlotCount]), 00090 m_eventCount(0), 00091 m_payloadLength(0), 00092 m_beginTime(0), 00093 m_firstEventTime(0), 00094 m_lastEventTime(0) { 00095 for(unsigned int slot = 0; 00096 slot != kMaxSlotCount; 00097 ++slot) { 00098 m_feeLowGainHistograms[slot] = 0; 00099 m_feeHighGainHistograms[slot] = 0; 00100 m_feeTdcHistograms[slot] = 0; 00101 m_fadcHistograms[slot] = 0; 00102 } 00103 declareProperty("UseDaqFormat", 00104 m_useDaqFormat=true, 00105 "True is the benchmarks should us the DaqFormat products"); 00106 declareProperty("UseDaqEvent", 00107 m_useDaqEvent=false, 00108 "True is the benchmarks should us the DaqEvent products"); 00109 declareProperty("UseReadoutEvent", 00110 m_useReadoutEvent=false, 00111 "True is the benchmarks should us the ReadoutEvent products"); 00112 }
DaqBenchmark::~DaqBenchmark | ( | ) |
StatusCode DaqBenchmark::initialize | ( | ) |
Definition at line 118 of file DaqBenchmark.cc.
00119 { 00120 StatusCode sc = service("StatisticsSvc", 00121 m_statsSvc, 00122 true); 00123 if (sc.isFailure()) { 00124 error() << "Failed to get StatisticsSvc" << endreq; 00125 return sc; 00126 } 00127 m_beginTime = time(0); 00128 return sc; 00129 }
StatusCode DaqBenchmark::finalize | ( | ) |
Definition at line 131 of file DaqBenchmark.cc.
00132 { 00133 if (m_lastEventTime != m_firstEventTime) { 00134 time_t now = time(0); 00135 const double moduleDelta = difftime(now, 00136 m_beginTime); 00137 const double eventDelta = difftime(m_lastEventTime, 00138 m_firstEventTime); 00139 info() << "Benchmark factor for this job was " << std::setprecision(2) << (moduleDelta/ eventDelta) << "." << endreq; 00140 info() << "Analysis byte rate was " << std::setprecision(2) << (m_payloadLength / (moduleDelta * 1024U * 1024U)) << " MB/s." << endreq; 00141 info() << "Data taking event rate was " << std::setprecision(4) << ((m_eventCount - 1) / eventDelta) << " Hz." << endreq; 00142 info() << "Analysis event rate was " << std::setprecision(4) << ((m_eventCount - 1) / moduleDelta) << " Hz." << endreq; 00143 } 00144 00145 if( m_statsSvc ) { 00146 m_statsSvc->release(); 00147 } 00148 return StatusCode::SUCCESS; 00149 }
StatusCode DaqBenchmark::execute | ( | ) |
Definition at line 151 of file DaqBenchmark.cc.
00151 { 00152 const ReadoutHeader* readoutHeader = get<ReadoutHeader>("/Event/Readout/ReadoutHeader"); 00153 if (0 == readoutHeader) { 00154 error() << "Failed to get readout header." << endreq; 00155 return StatusCode::FAILURE; 00156 } 00157 00158 if (m_useDaqFormat) { 00159 StatusCode sc = handleDaqFormat(*readoutHeader); 00160 if (sc.isFailure()) { 00161 return sc; 00162 } 00163 } 00164 if (m_useDaqEvent) { 00165 StatusCode sc = handleDaqEvent(*readoutHeader); 00166 if (sc.isFailure()) { 00167 return sc; 00168 } 00169 } 00170 if (m_useReadoutEvent) { 00171 StatusCode sc = handleReadoutEvent(*readoutHeader); 00172 if (sc.isFailure()) { 00173 return sc; 00174 } 00175 } 00176 ++m_eventCount; 00177 if (0 == (m_eventCount % 1000)) { 00178 info() << " Processed " << m_eventCount << " events" << endreq; 00179 } 00180 return StatusCode::SUCCESS; 00181 }
TH1F** DaqBenchmark::getSlotLowGainHistograms | ( | const unsigned int | slot | ) |
Definition at line 183 of file DaqBenchmark.cc.
00183 { 00184 return getSlotHistogram(m_feeLowGainHistograms, 00185 slot); 00186 }
TH1F** DaqBenchmark::getSlotHighGainHistograms | ( | const unsigned int | slot | ) |
Definition at line 188 of file DaqBenchmark.cc.
00188 { 00189 return getSlotHistogram(m_feeHighGainHistograms, 00190 slot); 00191 }
TH1F** DaqBenchmark::getSlotTdcHistograms | ( | const unsigned int | slot | ) |
Definition at line 193 of file DaqBenchmark.cc.
00193 { 00194 return getSlotHistogram(m_feeTdcHistograms, 00195 slot); 00196 }
TH1F** DaqBenchmark::getSlotHistogram | ( | TH1F *** | histograms, | |
const unsigned int | slot | |||
) |
Definition at line 198 of file DaqBenchmark.cc.
00199 { 00200 TH1F** result = histograms[slot]; 00201 if (0 == result) { 00202 result = new TH1F*[kMaxFeeChannelCount]; 00203 histograms[slot] = result; 00204 for (unsigned int channel = 0; 00205 channel != kMaxFeeChannelCount; 00206 ++channel) { 00207 result[channel] = 0; 00208 } 00209 } 00210 return result; 00211 }
TH2F** DaqBenchmark::getSlotFadcHistograms | ( | const unsigned int | slot | ) |
Definition at line 213 of file DaqBenchmark.cc.
00213 { 00214 return getSlotHistogram(m_fadcHistograms, 00215 slot); 00216 }
TH2F** DaqBenchmark::getSlotHistogram | ( | TH2F *** | histograms, | |
const unsigned int | slot | |||
) |
Definition at line 218 of file DaqBenchmark.cc.
00219 { 00220 TH2F** result = histograms[slot]; 00221 if (0 == result) { 00222 result = new TH2F*[kMaxFeeChannelCount]; 00223 histograms[slot] = result; 00224 for (unsigned int channel = 0; 00225 channel != kMaxFeeChannelCount; 00226 ++channel) { 00227 result[channel] = 0; 00228 } 00229 } 00230 return result; 00231 }
TH1F* DaqBenchmark::getLowGainHistogram | ( | TH1F ** | slotLowGainHistograms, | |
const unsigned int | slot, | |||
const unsigned int | channelNumber | |||
) |
Definition at line 255 of file DaqBenchmark.cc.
00257 { 00258 TH1F* result = slotLowGainHistograms[channelNumber]; 00259 if (0 == result) { 00260 const string name = getName("Low Gain ADC", 00261 slot, 00262 channelNumber); 00263 result = new TH1F(name.c_str(), 00264 "ADC, low gain", 00265 4096, 00266 0, 00267 4096); 00268 slotLowGainHistograms[channelNumber] = result; 00269 m_statsSvc->put(getPath(slot, 00270 channelNumber, 00271 name.c_str()), 00272 result); 00273 } 00274 return result; 00275 }
TH1F* DaqBenchmark::getHighGainHistogram | ( | TH1F ** | slotHighGainHistograms, | |
const unsigned int | slot, | |||
const unsigned int | channelNumber | |||
) |
Definition at line 277 of file DaqBenchmark.cc.
00279 { 00280 TH1F* result = slotHighGainHistograms[channelNumber]; 00281 if (0 == result) { 00282 const string name = getName("High Gain ADC", 00283 slot, 00284 channelNumber); 00285 result = new TH1F(name.c_str(), 00286 "ADC, high gain", 00287 4096, 00288 0, 00289 4096); 00290 slotHighGainHistograms[channelNumber] = result; 00291 m_statsSvc->put(getPath(slot, 00292 channelNumber, 00293 name.c_str()), 00294 result); 00295 } 00296 return result; 00297 }
TH1F* DaqBenchmark::getTdcHistogram | ( | TH1F ** | slotTdcHistograms, | |
const unsigned int | slot, | |||
const unsigned int | channelNumber | |||
) |
Definition at line 299 of file DaqBenchmark.cc.
00301 { 00302 TH1F* result = slotTdcHistograms[channelNumber]; 00303 if (0 == result) { 00304 const string name = getName("TDC", 00305 slot, 00306 channelNumber); 00307 result = new TH1F(name.c_str(), 00308 "TDC", 00309 1000, 00310 300, 00311 1300); 00312 slotTdcHistograms[channelNumber] = result; 00313 m_statsSvc->put(getPath(slot, 00314 channelNumber, 00315 name.c_str()), 00316 result); 00317 } 00318 return result; 00319 }
TH2F* DaqBenchmark::getFadcHistogram | ( | TH2F ** | slotFadcHistograms, | |
const unsigned int | slot, | |||
const unsigned int | channelNumber | |||
) |
Definition at line 321 of file DaqBenchmark.cc.
00323 { 00324 TH2F* result = slotFadcHistograms[channelNumber]; 00325 if (0 == result) { 00326 const string name = getName("FADC", 00327 slot, 00328 channelNumber); 00329 result = new TH2F(name.c_str(), 00330 "FADC", 00331 0, 00332 120, 00333 120, 00334 0, 00335 256, 00336 256); 00337 slotFadcHistograms[channelNumber] = result; 00338 m_statsSvc->put(getPath(slot, 00339 channelNumber, 00340 name.c_str()), 00341 result); 00342 } 00343 return result; 00344 }
StatusCode DaqBenchmark::handleDaqFormat | ( | const ReadoutHeader & | readoutHeader | ) |
Definition at line 365 of file DaqBenchmark.cc.
00365 { 00366 const EventReadout* event = 0; 00367 const DaqCrate* daqCrate = readoutHeader.daqCrate(); 00368 if (0 == daqCrate) { 00369 const Readout* readout = readoutHeader.readout(); 00370 if (0 == readout) { 00371 error() << "Failed to get DAQ readout or readout from header" << endreq; 00372 return StatusCode::FAILURE; 00373 } 00374 event = readout->eventReadout(); 00375 if (0 == event) { 00376 error() << "Failed to get event readout from readout" << endreq; 00377 return StatusCode::FAILURE; 00378 } 00379 } else { 00380 event = &(daqCrate->eventReadout()); 00381 } 00382 00383 m_lastEventTime = getEventTime(*event); 00384 if (0 == m_firstEventTime) { 00385 m_firstEventTime = m_lastEventTime; 00386 } 00387 handleEvent(*event); 00388 m_payloadLength += event->header().totalSize() * kBytesInInt; 00389 return StatusCode::SUCCESS; 00390 }
void DaqBenchmark::handleEvent | ( | const DybDaq::EventReadout & | event | ) |
Definition at line 392 of file DaqBenchmark.cc.
00392 { 00393 const EventReadout::RomFragmentPtrList& fragments = event.romFragments(); 00394 for (EventReadout::RomFragmentPtrList::const_iterator fragment = fragments.begin(); 00395 fragment != fragments.end(); 00396 ++fragment) { 00397 handleFragment(*(*fragment)); 00398 } 00399 }
void DaqBenchmark::handleFragment | ( | const RomFragment & | fragment | ) |
Definition at line 401 of file DaqBenchmark.cc.
00401 { 00402 const RomHeader& header = fragment.header(); 00403 const unsigned int slot = header.slot(); 00404 const unsigned int kFeeModuleType = header.eventTraits().moduleType(EventTraits::kFeeModule); 00405 if (kFeeModuleType == header.moduleType()) { 00406 handleFee(dynamic_cast<const FeeReadout&>(fragment.unwrappedData()), 00407 slot); 00408 } 00409 }
void DaqBenchmark::handleFee | ( | const FeeReadout & | readout, | |
const unsigned int | slot | |||
) |
Definition at line 411 of file DaqBenchmark.cc.
00412 { 00413 TH1F** slotLowGainHistograms = getSlotLowGainHistograms(slot); 00414 TH1F** slotHighGainHistograms = getSlotHighGainHistograms(slot); 00415 TH1F** slotTdcHistograms = getSlotTdcHistograms(slot); 00416 00417 const FeeReadout::FeeHitPtrList& hits = readout.feeHits(); 00418 for (FeeReadout::FeeHitPtrList::const_iterator hitPtr = hits.begin(); 00419 hitPtr != hits.end(); 00420 ++hitPtr) { 00421 const FeeHit& hit = *(*hitPtr); 00422 const unsigned int channelNumber = hit.channelId() + 1; 00423 TH1F* rangeHistogram = 0; 00424 if (hit.isHighRangeAdc()) { 00425 rangeHistogram = getLowGainHistogram(slotLowGainHistograms, 00426 slot, 00427 channelNumber); 00428 } else { 00429 rangeHistogram = getHighGainHistogram(slotHighGainHistograms, 00430 slot, 00431 channelNumber); 00432 } 00433 rangeHistogram->Fill(hit.adc()); 00434 TH1F* tdcHistogram = getTdcHistogram(slotTdcHistograms, 00435 slot, 00436 channelNumber); 00437 tdcHistogram->Fill(hit.tdc()); 00438 } 00439 }
StatusCode DaqBenchmark::handleReadoutEvent | ( | const ReadoutHeader & | readoutHeader | ) |
Definition at line 446 of file DaqBenchmark.cc.
00446 { 00447 const Readout* readout = readoutHeader.readout(); 00448 if (0 == readout) { 00449 error() << "Failed to get readout from header" << endreq; 00450 return StatusCode::FAILURE; 00451 } 00452 00453 m_lastEventTime = getEventTime(readout->triggerTime()); 00454 if (0 == m_firstEventTime) { 00455 m_firstEventTime = m_lastEventTime; 00456 } 00457 const ReadoutPmtCrate* pmtReadout = dynamic_cast<const ReadoutPmtCrate*>(readout); 00458 if (0 != pmtReadout) { 00459 handleEvent(*pmtReadout); 00460 } 00461 return StatusCode::SUCCESS; 00462 }
void DaqBenchmark::handleEvent | ( | const DayaBay::ReadoutPmtCrate & | crate | ) |
Definition at line 464 of file DaqBenchmark.cc.
00464 { 00465 const std::vector<DayaBay::FeeChannelId> channels = const_cast<ReadoutPmtCrate&>(crate).channels(); 00466 std::vector<DayaBay::FeeChannelId>::const_iterator finished = channels.end(); 00467 for (std::vector<DayaBay::FeeChannelId>::const_iterator channel = channels.begin(); 00468 channel != finished; 00469 ++channel) { 00470 handleChannel(const_cast<ReadoutPmtCrate&>(crate).channel(*channel)); 00471 } 00472 }
void DaqBenchmark::handleChannel | ( | const ReadoutPmtChannel & | channel | ) |
Definition at line 474 of file DaqBenchmark.cc.
00474 { 00475 const FeeChannelId& feeChannelId = channel.channelId(); 00476 const unsigned int slot = feeChannelId.board(); 00477 TH1F** slotLowGainHistograms = getSlotLowGainHistograms(slot); 00478 TH1F** slotHighGainHistograms = getSlotHighGainHistograms(slot); 00479 TH1F** slotTdcHistograms = getSlotTdcHistograms(slot); 00480 00481 const unsigned int channelNumber = feeChannelId.connector(); 00482 TH1F* lowGainHistogram = getLowGainHistogram(slotLowGainHistograms, 00483 slot, 00484 channelNumber); 00485 TH1F* highGainHistogram = getHighGainHistogram(slotHighGainHistograms, 00486 slot, 00487 channelNumber); 00488 unsigned int hit = 0; 00489 const std::vector<int>& charges = channel.adc(); 00490 const std::vector<int>::const_iterator finishedCharges = charges.end(); 00491 for(std::vector<int>::const_iterator charge = charges.begin(); 00492 finishedCharges != charge; 00493 ++charge) { 00494 if (channel.adcRange(hit) == DayaBay::FeeGain::kHigh) { 00495 highGainHistogram->Fill(*charge); 00496 } else { 00497 lowGainHistogram->Fill(*charge); 00498 } 00499 ++hit; 00500 } 00501 00502 TH1F* tdcHistogram = getTdcHistogram(slotTdcHistograms, 00503 slot, 00504 channelNumber); 00505 const std::vector<int>& times = channel.tdc(); 00506 const std::vector<int>::const_iterator finishedTimes = times.end(); 00507 for(std::vector<int>::const_iterator time = times.begin(); 00508 finishedTimes != time; 00509 ++time) { 00510 tdcHistogram->Fill(*time); 00511 } 00512 }
StatusCode DaqBenchmark::handleDaqEvent | ( | const ReadoutHeader & | readoutHeader | ) |
Definition at line 514 of file DaqBenchmark.cc.
00514 { 00515 const DaqCrate* daqCrate = readoutHeader.daqCrate(); 00516 if (0 == daqCrate) { 00517 error() << "Failed to get readout from header" << endreq; 00518 return StatusCode::FAILURE; 00519 } 00520 00521 m_lastEventTime = getEventTime(daqCrate->triggerTime()); 00522 if (0 == m_firstEventTime) { 00523 m_firstEventTime = m_lastEventTime; 00524 } 00525 const DaqPmtCrate* pmtCrate = daqCrate->asPmtCrate(); 00526 if (0 != pmtCrate) { 00527 handleEvent(*pmtCrate); 00528 } 00529 return StatusCode::SUCCESS; 00530 }
void DaqBenchmark::handleEvent | ( | const DayaBay::DaqPmtCrate & | crate | ) |
Definition at line 532 of file DaqBenchmark.cc.
00532 { 00533 { 00534 const DaqLtb& triggerBoard = crate.localTriggerBoard(); 00535 const DaqLtb::LtbFramePtrList& frames = triggerBoard.frames(); 00536 const DaqLtb::LtbFramePtrList::const_iterator finished = frames.end(); 00537 for(DaqLtb::LtbFramePtrList::const_iterator frame = frames.begin(); 00538 finished != frame; 00539 ++frame) { 00540 handleFrame(*(*frame)); 00541 } 00542 } 00543 00544 { 00545 const DaqPmtCrate::PmtChannelPtrList& channels = crate.pmtChannelReadouts(); 00546 const DaqPmtCrate::PmtChannelPtrList::const_iterator finished = channels.end(); 00547 for (DaqPmtCrate::PmtChannelPtrList::const_iterator channel = channels.begin(); 00548 channel != finished; 00549 ++channel) { 00550 handleChannel(*(*channel)); 00551 } 00552 } 00553 00554 { 00555 const DaqPmtCrate::FadcChannelPtrList& channels = crate.fadcChannelReadouts(); 00556 const DaqPmtCrate::FadcChannelPtrList::const_iterator finished = channels.end(); 00557 for (DaqPmtCrate::FadcChannelPtrList::const_iterator channel = channels.begin(); 00558 channel != finished; 00559 ++channel) { 00560 handleChannel(*(*channel)); 00561 } 00562 } 00563 }
void DaqBenchmark::handleFrame | ( | const DaqLtbFrame & | ) |
void DaqBenchmark::handleChannel | ( | const DaqPmtChannel & | channel | ) |
Definition at line 568 of file DaqBenchmark.cc.
00568 { 00569 const FeeChannelId& feeChannelId = channel.channelId(); 00570 const unsigned int slot = feeChannelId.board(); 00571 TH1F** slotLowGainHistograms = getSlotLowGainHistograms(slot); 00572 TH1F** slotHighGainHistograms = getSlotHighGainHistograms(slot); 00573 TH1F** slotTdcHistograms = getSlotTdcHistograms(slot); 00574 00575 const unsigned int channelNumber = feeChannelId.connector(); 00576 TH1F* lowGainHistogram = getLowGainHistogram(slotLowGainHistograms, 00577 slot, 00578 channelNumber); 00579 TH1F* highGainHistogram = getHighGainHistogram(slotHighGainHistograms, 00580 slot, 00581 channelNumber); 00582 TH1F* tdcHistogram = getTdcHistogram(slotTdcHistograms, 00583 slot, 00584 channelNumber); 00585 00586 const unsigned int finished = channel.hitCount(); 00587 for(unsigned int hit = 0; 00588 hit != finished; 00589 ++hit) { 00590 if (channel.isHighGainAdc(hit)) { 00591 highGainHistogram->Fill(channel.adc(hit)); 00592 } else { 00593 lowGainHistogram->Fill(channel.adc(hit)); 00594 } 00595 tdcHistogram->Fill(channel.tdc(hit)); 00596 } 00597 }
void DaqBenchmark::handleChannel | ( | const DaqFadcChannel & | channel | ) |
Definition at line 599 of file DaqBenchmark.cc.
00599 { 00600 const FadcChannelId& fadcChannelId = channel.channelId(); 00601 const unsigned int slot = fadcChannelId.board(); 00602 TH2F** slotFadcHistograms = getSlotFadcHistograms(slot); 00603 00604 const unsigned int channelNumber = fadcChannelId.connector(); 00605 TH2F* fadcHistogram = getFadcHistogram(slotFadcHistograms, 00606 slot, 00607 channelNumber); 00608 00609 const DaqFadcChannel::FadcSamples& samples = channel.samples(); 00610 unsigned int bin = 0; 00611 const DaqFadcChannel::FadcSamples::const_iterator finished = samples.end(); 00612 for (DaqFadcChannel::FadcSamples::const_iterator sample = samples.begin(); 00613 finished != sample; 00614 ++sample) { 00615 fadcHistogram->Fill(bin, 00616 *sample, 00617 1.0); 00618 ++bin; 00619 } 00620 }