Changeset 17332 for trunk


Ignore:
Timestamp:
11/21/13 17:18:41 (11 years ago)
Author:
tbretz
Message:
Added a trigger counter in the run and event object and count the events; replaced the arguments to Open/Write/Close to have access to the full infomation including the trigger counters; added a new service TRIGGER_COUNTER
Location:
trunk/FACT++/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/EventBuilder.cc

    r17236 r17332  
    1515#include "MessageImp.h"
    1616#include "EventBuilder.h"
     17#include "HeadersFAD.h"
    1718
    1819using namespace std;
     
    5960bool runOpen(const EVT_CTRL2 &evt);
    6061bool runWrite(const EVT_CTRL2 &evt);
    61 void runClose(RUN_CTRL2 &run);
     62void runClose(const EVT_CTRL2 &run);
    6263void applyCalib(const EVT_CTRL2 &evt, const size_t &size);
    6364void factOut(int severity, const char *message);
     
    866867        return true;
    867868
    868     runClose(run);
     869    runClose(*evt);
    869870    run.fileStat = kFileClosed;
    870871
     
    914915            event->BoardTime[ib] = evt->FADhead[ib].time;
    915916
     917        RUN_CTRL2 &run = *evt->runCtrl;
     918
     919        // Physics trigger
     920        if (evt->trgTyp && !(evt->trgTyp & FAD::EventHeader::kAll))
     921            run.triggerCounter[0]++;
     922        // Pure pedestal trigger
     923        else  if ((evt->trgTyp&FAD::EventHeader::kPedestal) && !(evt->trgTyp&FAD::EventHeader::kTIM))
     924            run.triggerCounter[1]++;
     925        // external light pulser trigger
     926        else if (evt->trgTyp & FAD::EventHeader::kLPext)
     927            run.triggerCounter[2]++;
     928        // time calibration triggers
     929        else if (evt->trgTyp & (FAD::EventHeader::kTIM|FAD::EventHeader::kPedestal))
     930            run.triggerCounter[3]++;
     931        // internal light pulser trigger
     932        else if (evt->trgTyp & FAD::EventHeader::kLPint)
     933            run.triggerCounter[4]++;
     934        // external trigger input 1
     935        else if (evt->trgTyp & FAD::EventHeader::kExt1)
     936            run.triggerCounter[5]++;
     937        // external trigger input 2
     938        else if (evt->trgTyp & FAD::EventHeader::kExt2)
     939            run.triggerCounter[6]++;
     940        // other triggers
     941        else
     942            run.triggerCounter[7]++;
     943
     944        evt->triggerCounter = run.triggerCounter;
     945
    916946        if (!eventCheck(*evt))
    917947        {
  • trunk/FACT++/src/EventBuilder.h

    r16619 r17332  
    44#include "FAD.h"
    55
     6#include <list>
    67#include <array>
    78#include <forward_list>
     9
    810
    911/* global variables;
     
    6769    FileStatus_t fileStat;
    6870
     71    std::array<uint32_t, 8> triggerCounter;
     72
    6973    std::shared_ptr<DrsCalibration> calib;
    7074    std::list<std::array<int16_t,1440>> prevStart; // History for start cells of previous events (for step calibration)
     
    7276    RUN_CTRL2() : runId(-1), reportMem(0), lastTime(0), lastEvt(0), maxEvt(1<<31), fileStat(kFileNotYetOpen)
    7377    {
     78        triggerCounter.fill(0);
     79
    7480        // runId   = -1;
    7581        // fileId  = kFileNotYetOpen;
     
    123129    int closeRequest;
    124130
     131    std::array<uint32_t, 8> triggerCounter;
     132
    125133    std::shared_ptr<RUN_CTRL2> runCtrl;
    126134
  • trunk/FACT++/src/EventBuilderWrapper.h

    r17319 r17332  
    7272    DimDescribedService fDimRuns;
    7373    DimDescribedService fDimEvents;
     74    DimDescribedService fDimTrigger;
    7475    DimDescribedService fDimRawData;
    7576    DimDescribedService fDimEventData;
     
    9495    Queue<tuple<Time,bool,FAD::EventHeader>>        fQueueProcHeader;
    9596    Queue<pair<Time,array<uint32_t,4>>>             fQueueEvents;
     97    Queue<tuple<Time,char,array<uint32_t,8>>>       fQueueTrigger;
    9698    Queue<pair<Time,array<uint16_t,2>>>             fQueueRoi;
    9799    Queue<vector<char>>                             fQueueRawData;
     
    216218                                                           "Event counts"
    217219                                                           "|evtsCount[int]:Num evts cur. run, total (all run), evt ID, trig. Num"),
     220        fDimTrigger     ("FAD_CONTROL/TRIGGER_COUNTER",    "I:1;I:1;I:1;I:1;I:1;I:1;I:1;I:1",
     221                                                           "Trigger counter"
     222                                                           "|N_trg[uint32]:Number of physics triggers"
     223                                                           "|N_ped[uint32]:Number of pure pedestal triggers"
     224                                                           "|N_lpe[uint32]:Number of external light pulser triggers"
     225                                                           "|N_tim[uint32]:Number of time calibration triggers"
     226                                                           "|N_lpi[uint32]:Number of internal light pulser triggers"
     227                                                           "|N_ext1[uint32]:Number of external triggers at input ext1"
     228                                                           "|N_ext2[uint32]:Number of external triggers at input ext2"
     229                                                           "|N_misc[uint32]:Number of all other triggers"),
    218230        fDimRawData     ("FAD_CONTROL/RAW_DATA",           "S:1;S:1;I:1;I:1;S:1;I:1;I:2;I:40;S:1440;S:160;F",
    219231                                                           "|roi[uint16]:number of samples per pixel"
     
    279291        fQueueProcHeader( std::bind(&EventBuilderWrapper::procHeader,           this, placeholders::_1)),
    280292        fQueueEvents(     std::bind(&EventBuilderWrapper::UpdateDimEvents,      this, placeholders::_1)),
     293        fQueueTrigger(    std::bind(&EventBuilderWrapper::UpdateDimTrigger,     this, placeholders::_1)),
    281294        fQueueRoi(        std::bind(&EventBuilderWrapper::UpdateDimRoi,         this, placeholders::_1)),
    282295        fQueueRawData(    std::bind(&EventBuilderWrapper::UpdateDimRawData,     this, placeholders::_1)),
     
    521534    }
    522535
     536    bool UpdateDimTrigger(const tuple<Time,char,array<uint32_t,8>> &stat)
     537    {
     538        fDimTrigger.setQuality(get<1>(stat));
     539        fDimTrigger.setData(get<2>(stat).data(), sizeof(uint32_t)*8);
     540        fDimTrigger.Update(get<0>(stat));
     541        return true;
     542    }
     543
    523544    bool runOpen(const EVT_CTRL2 &evt)
    524545    {
     
    528549        // If there is still an open file: close it
    529550        if (fFile)
    530             runClose(*evt.runCtrl);
     551            runClose(evt);
    531552
    532553        // Keep a copy of the currently valid drs calibration
     
    576597        fNumEvts[kTriggerId] = 0;
    577598        fNumEvts[kCurrent]   = 0;
    578         fQueueEvents.emplace(Time(), fNumEvts);
     599
     600        const Time time;
     601
     602        fQueueEvents.emplace(time, fNumEvts);
     603        fQueueTrigger.emplace(time, 'o', evt.triggerCounter);
    579604
    580605        ostringstream str;
     
    604629        }*/
    605630
    606         const EVENT &evt = *e.fEvent;
    607         if (!fFile->WriteEvt(evt))
     631        if (!fFile->WriteEvt(e))
    608632            return false;
    609633
     634        //const EVENT &evt = *e.fEvent;
     635
    610636        fNumEvts[kCurrent]++;
    611         fNumEvts[kEventId]   = evt.EventNum;
    612         fNumEvts[kTriggerId] = evt.TriggerNum;
     637        fNumEvts[kEventId]   = e.evNum;//evt.EventNum;
     638        fNumEvts[kTriggerId] = e.trgNum;//evt.TriggerNum;
    613639        fNumEvts[kTotal]++;
    614640
     
    618644        {
    619645            fQueueEvents.emplace(newt, fNumEvts);
     646            fQueueTrigger.emplace(newt, 'w', e.triggerCounter);
    620647            oldt = newt;
    621648        }
     
    624651    }
    625652
    626     void runClose(RUN_CTRL2 &run)
     653    void runClose(const EVT_CTRL2 &evt)
    627654    {
    628655        if (!fFile)
     
    635662
    636663        // Close the file
    637         const bool rc = fFile->Close(NULL);
     664        const bool rc = fFile->Close(evt);
    638665
    639666        fLastClosed = fFile->GetRunId();
     
    653680
    654681        // Time for update events before time for update runs
    655         fQueueEvents.emplace(Time(), fNumEvts);
     682        const Time time;
     683
     684        fQueueEvents.emplace(time, fNumEvts);
     685        fQueueTrigger.emplace(time, 'c', evt.triggerCounter);
     686
    656687        UpdateRuns();
    657688
     
    667698        // the memory will stay in scope until the end of its operation.
    668699        const DrsCalibration &cal = DataCalib::GetCalibration();
     700
     701        RUN_CTRL2 &run = *evt.runCtrl;
    669702        if (!run.calib || run.calib->fStep != cal.fStep || run.calib->fRoi!=cal.fRoi)
    670703            run.calib = make_shared<DrsCalibration>(cal);
     
    893926        }
    894927
    895         fQueueTempRefClk.emplace(tm, clk, tmp);
    896 
    897928        // check REFCLK_frequency
    898929        // check consistency with command configuration
    899930        // how to log errors?
    900931        // need gotNewRun/closedRun to know it is finished
     932
     933        fQueueTempRefClk.emplace(tm, clk, tmp);
     934
     935        if (evt.runCtrl->fileStat == kFileClosed)
     936        {
     937            static Time oldt(boost::date_time::neg_infin);
     938            if (tm>oldt+boost::posix_time::seconds(1))
     939            {
     940                fQueueTrigger.emplace(tm, 0, evt.runCtrl->triggerCounter);
     941                oldt = tm;
     942            }
     943        }
    901944
    902945        return true;
     
    13991442}
    14001443
    1401 void runClose(RUN_CTRL2 &run)
     1444void runClose(const EVT_CTRL2 &evt)
    14021445{
    1403     EventBuilderWrapper::This->runClose(run);
     1446    EventBuilderWrapper::This->runClose(evt);
    14041447}
    14051448
Note: See TracChangeset for help on using the changeset viewer.