| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

DaqBenchmark.cc

Go to the documentation of this file.
00001 /*
00002  *  DaqBenchmark.cc
00003  *  DaqFormatModules
00004  *
00005  *  Created by Simon Patton on 8/5/10.
00006  *  Copyright 2010 DayaBay Collaboration. All rights reserved.
00007  *
00008  */
00009 #include "DaqBenchmark.h"
00010 
00011 #include <ctime>
00012 #include <sstream>
00013 
00014 #include "TH2.h"
00015 
00016 #include "Conventions/Electronics.h"
00017 #include "DaqXml/DaqXmlStream.h"
00018 #include "DaqReadoutFormat/RomData.h"
00019 #include "Event/DaqCrate.h"
00020 #include "Event/DaqFadcChannel.h"
00021 #include "Event/DaqLtb.h"
00022 #include "Event/DaqLtbFrame.h"
00023 #include "Event/DaqPmtChannel.h"
00024 #include "Event/DaqPmtCrate.h"
00025 #include "Event/Readout.h"
00026 #include "Event/ReadoutHeader.h"
00027 #include "Event/ReadoutPmtChannel.h"
00028 #include "Event/ReadoutPmtCrate.h"
00029 #include "EventReadoutFormat/EventHeader.h"
00030 #include "EventReadoutFormat/EventReadout.h"
00031 #include "EventReadoutFormat/EventTraits.h"
00032 #include "EventReadoutFormat/RomFragment.h"
00033 #include "EventReadoutFormat/RomHeader.h"
00034 #include "FeeReadoutFormat/FeeHit.h"
00035 #include "FeeReadoutFormat/FeeReadout.h"
00036 #include "FileReadoutFormat/DataSeparatorRecord.h"
00037 #include "FileReadoutFormat/FileBuffer.h"
00038 #include "FileReadoutFormat/FileTraits.h"
00039 #include "LtbReadoutFormat/LtbFrame.h"
00040 #include "LtbReadoutFormat/LtbReadout.h"
00041 #include "LtbReadoutFormat/LtbTime.h"
00042 #include "StatisticsSvc/IStatisticsSvc.h"
00043 
00044 using DayaBay::FadcChannelId;
00045 using DayaBay::FeeChannelId;
00046 using DayaBay::DaqCrate;
00047 using DayaBay::DaqFadcChannel;
00048 using DayaBay::DaqLtb;
00049 using DayaBay::DaqLtbFrame;
00050 using DayaBay::DaqPmtChannel;
00051 using DayaBay::DaqPmtCrate;
00052 using DayaBay::Readout;
00053 using DayaBay::ReadoutHeader;
00054 using DayaBay::ReadoutPmtChannel;
00055 using DayaBay::ReadoutPmtCrate;
00056 using DybDaq::DataSeparatorRecord;
00057 using DybDaq::EventHeader;
00058 using DybDaq::EventReadout;
00059 using DybDaq::EventTraits;
00060 using DybDaq::FeeHit;
00061 using DybDaq::FeeReadout;
00062 using DybDaq::FileBuffer;
00063 using DybDaq::FileTraits;
00064 using DybDaq::RomData;
00065 using DybDaq::RomFragment;
00066 using DybDaq::RomHeader;
00067 using DybDaq::LtbFrame;
00068 using DybDaq::LtbReadout;
00069 using DybDaq::LtbTime;
00070 
00071 using std::string;
00072 using std::stringstream;
00073 
00074 static const string i("  ");
00075 static const unsigned int kMaxSlotCount = 22U;
00076 static const unsigned int kMaxFeeChannelCount = 32U;
00077 static const unsigned int kBytesInInt = 4U;
00078 
00079 #define TIME_T_BUILTIN_TYPE unsigned long
00080 
00081 DaqBenchmark::DaqBenchmark(const string& name, 
00082                            ISvcLocator* pSvcLocator) :
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 }
00113 
00114 DaqBenchmark::~DaqBenchmark() {
00115     // Histograms are cleaned up by Stats service.
00116 }
00117 
00118 StatusCode DaqBenchmark::initialize()
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 }
00130 
00131 StatusCode DaqBenchmark::finalize()
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 }
00150 
00151 StatusCode DaqBenchmark::execute() {
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 }
00182 
00183 TH1F** DaqBenchmark::getSlotLowGainHistograms(const unsigned int slot) {
00184     return getSlotHistogram(m_feeLowGainHistograms,
00185                             slot); 
00186 }
00187 
00188 TH1F** DaqBenchmark::getSlotHighGainHistograms(const unsigned int slot) {
00189     return getSlotHistogram(m_feeHighGainHistograms,
00190                             slot); 
00191 }
00192 
00193 TH1F** DaqBenchmark::getSlotTdcHistograms(const unsigned int slot) {
00194     return getSlotHistogram(m_feeTdcHistograms,
00195                             slot);
00196 }
00197 
00198 TH1F** DaqBenchmark::getSlotHistogram(TH1F*** histograms,
00199                                       const unsigned int slot) {
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 }
00212 
00213 TH2F** DaqBenchmark::getSlotFadcHistograms(const unsigned int slot) {
00214     return getSlotHistogram(m_fadcHistograms,
00215                             slot);
00216 }
00217 
00218 TH2F** DaqBenchmark::getSlotHistogram(TH2F*** histograms,
00219                                       const unsigned int slot) {
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 }
00232 
00233 static const string getName(const string& field,
00234                             const unsigned int slot,
00235                             const unsigned int channelId) {
00236     // Construct histogram name in statistics service
00237     stringstream name;
00238     name << field << " for slot_" << std::setfill('0') << std::setw(2) << slot
00239          << "_channel_" << std::setfill('0') << std::setw(2) << channelId;
00240     return name.str();
00241 }
00242 
00243 static const string getPath(const unsigned int slot,
00244                             const unsigned int channelId, 
00245                             const char* name) {
00246     // Construct histogram path in statistics service
00247     stringstream path;
00248     path << "/file0//benchmark"
00249          << "/slot_" << std::setfill('0') << std::setw(2) << slot
00250          << "/channel_" << std::setfill('0') << std::setw(2) << channelId
00251          << "/" << name;
00252     return path.str();
00253 }
00254 
00255 TH1F* DaqBenchmark::getLowGainHistogram(TH1F** slotLowGainHistograms,
00256                                           const unsigned int slot,
00257                                           const unsigned int channelNumber) {
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 }
00276 
00277 TH1F* DaqBenchmark::getHighGainHistogram(TH1F** slotHighGainHistograms,
00278                                          const unsigned int slot,
00279                                          const unsigned int channelNumber) {
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 }
00298 
00299 TH1F* DaqBenchmark::getTdcHistogram(TH1F** slotTdcHistograms,
00300                                     const unsigned int slot,
00301                                     const unsigned int channelNumber) {
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 }
00320 
00321 TH2F* DaqBenchmark::getFadcHistogram(TH2F** slotFadcHistograms,
00322                                      const unsigned int slot,
00323                                      const unsigned int channelNumber) {
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 }
00345 
00346 static const time_t getEventTime(const EventReadout& event) {
00347     const EventReadout::RomFragmentPtrList& fragments = event.romFragments();
00348     unsigned int ltbModuleType = event.header().eventTraits().moduleType(EventTraits::kLtbModule);
00349     EventReadout::RomFragmentPtrList::const_iterator fragment = fragments.begin();
00350     while((ltbModuleType != ((*fragment)->header().moduleType()))
00351           && fragment != fragments.end()) {
00352         ++fragment;
00353     }
00354     if (fragment == fragments.end()) {
00355         return 0;
00356     }
00357     const LtbReadout& ltbReadout = dynamic_cast<const LtbReadout&>((*fragment)->unwrappedData());
00358     const LtbReadout::LtbFramePtrList& frames = ltbReadout.ltbFrames();
00359     if (0 == frames.size()) {
00360         return 0;
00361     }
00362     return (*(frames.begin()))->dateTime().unixTime();
00363 }
00364 
00365 StatusCode DaqBenchmark::handleDaqFormat(const ReadoutHeader& readoutHeader) {
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  }
00391 
00392 void DaqBenchmark::handleEvent(const DybDaq::EventReadout& event) {
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 }
00400 
00401 void DaqBenchmark::handleFragment(const RomFragment& fragment) {
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 }
00410 
00411 void DaqBenchmark::handleFee(const FeeReadout& readout,
00412                              const unsigned int slot) {
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 }
00440 
00441 static const time_t getEventTime(const TimeStamp& time) {
00442     time_t seconds = time.GetSec();
00443     return seconds;
00444 }
00445 
00446 StatusCode DaqBenchmark::handleReadoutEvent(const ReadoutHeader& readoutHeader) {
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  }
00463 
00464 void DaqBenchmark::handleEvent(const DayaBay::ReadoutPmtCrate& crate) {
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 }
00473 
00474 void DaqBenchmark::handleChannel(const ReadoutPmtChannel& channel) {
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 }
00513 
00514 StatusCode DaqBenchmark::handleDaqEvent(const ReadoutHeader& readoutHeader) {
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  }
00531 
00532 void DaqBenchmark::handleEvent(const DayaBay::DaqPmtCrate& crate) {
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 }
00564 
00565 void DaqBenchmark::handleFrame(const DaqLtbFrame& /* frame */) {
00566 }
00567 
00568 void DaqBenchmark::handleChannel(const DaqPmtChannel& channel) {
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 }
00598 
00599 void DaqBenchmark::handleChannel(const DaqFadcChannel& channel) {
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 }
00621 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:46:28 2011 for DaqFormatModules by doxygen 1.4.7