LCOV - code coverage report
Current view: top level - manalyzer - manalyzer_example_frontend.cxx (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 69 0
Test Date: 2025-11-11 10:26:08 Functions: 0.0 % 12 0

            Line data    Source code
       1              : //
       2              : // MIDAS analyzer example: MIDAS frontend for sending analyzed data back into MIDAS
       3              : //
       4              : // K.Olchanski
       5              : //
       6              : 
       7              : #undef NDEBUG // midas required assert() to be always enabled
       8              : 
       9              : #include <stdio.h>
      10              : #include <cassert>
      11              : 
      12              : #include "manalyzer.h"
      13              : #include "midasio.h"
      14              : 
      15              : class TMEventFlow : public TAFlowEvent
      16              : {
      17              : public:
      18              :    TMEvent fEvent;
      19              : 
      20            0 :    TMEventFlow(TAFlowEvent* flow, const TMEvent& event)
      21            0 :       : TAFlowEvent(flow)
      22              :    {
      23            0 :       fEvent = event;
      24            0 :    }
      25              : };
      26              : 
      27              : /*******************************************************************\
      28              : 
      29              :   Name:         tmfe_example_everything.cxx
      30              :   Created by:   K.Olchanski
      31              : 
      32              :   Contents:     Example Front end to demonstrate all functions of TMFE class
      33              : 
      34              : \********************************************************************/
      35              : 
      36              : 
      37              : #include <stdio.h>
      38              : #include "tmfe.h"
      39              : 
      40              : class EqAnalyzer :
      41              :    public TMFeEquipment
      42              : {
      43              : public:
      44            0 :    EqAnalyzer(const char* eqname, const char* eqfilename) // ctor
      45            0 :       : TMFeEquipment(eqname, eqfilename)
      46              :    {
      47            0 :       printf("EqAnalyzer::ctor!\n");
      48              : 
      49              :       // configure the equipment here:
      50              :       
      51            0 :       fEqConfReadConfigFromOdb = false;
      52            0 :       fEqConfEventID = 100;
      53            0 :       fEqConfPeriodMilliSec = 0;
      54              :       //fEqConfWriteEventsToOdb = true;
      55            0 :       fEqConfBuffer = "ANAA";
      56            0 :    }
      57              : 
      58            0 :    ~EqAnalyzer() // dtor
      59            0 :    {
      60            0 :       printf("EqAnalyzer::dtor!\n");
      61            0 :    }
      62              : 
      63            0 :    void HandleUsage()
      64              :    {
      65            0 :       printf("EqAnalyzer::HandleUsage!\n");
      66            0 :    }
      67              : 
      68            0 :    TMFeResult HandleInit(const std::vector<std::string>& args)
      69              :    {
      70            0 :       printf("EqAnalyzer::HandleInit!\n");
      71            0 :       fEqConfReadOnlyWhenRunning = false; // overwrite ODB Common RO_RUNNING to false
      72              :       //fEqConfWriteEventsToOdb = true; // overwrite ODB Common RO_ODB to true
      73              :       //EqSetStatus("Started...", "white");
      74            0 :       return TMFeOk();
      75              :    }
      76              : };
      77              : 
      78              : // example frontend
      79              : 
      80            0 : class FeAnalyzer: public TMFrontend
      81              : {
      82              : public:
      83              : };
      84              : 
      85              : /* emacs
      86              :  * Local Variables:
      87              :  * tab-width: 8
      88              :  * c-basic-offset: 3
      89              :  * indent-tabs-mode: nil
      90              :  * End:
      91              :  */
      92              : 
      93              : class ExampleFrontend: public TARunObject
      94              : {
      95              : public:
      96              :    EqAnalyzer* fEq = NULL;
      97              : 
      98              : public:
      99            0 :    ExampleFrontend(TARunInfo* runinfo, EqAnalyzer* eq)
     100            0 :       : TARunObject(runinfo)
     101              :    {
     102            0 :       printf("ExampleFrontend::ctor, run %d, file %s\n", runinfo->fRunNo, runinfo->fFileName.c_str());
     103            0 :       fModuleName = "ExampleFrontend";
     104            0 :       fEq = eq;
     105            0 :    }
     106              : 
     107            0 :    ~ExampleFrontend()
     108            0 :    {
     109            0 :       printf("ExampleFrontend::dtor!\n");
     110            0 :    }
     111              : 
     112            0 :    TAFlowEvent* Analyze(TARunInfo* runinfo, TMEvent* event, TAFlags* flags, TAFlowEvent* flow)
     113              :    {
     114            0 :       printf("ExampleFrontend::Analyze, run %d, event serno %d, id 0x%04x, data size %d\n", runinfo->fRunNo, event->serial_number, (int)event->event_id, event->data_size);
     115              : 
     116            0 :       flow = new TMEventFlow(flow, *event);
     117              : 
     118            0 :       return flow;
     119              :    }
     120              :       
     121            0 :    TAFlowEvent* AnalyzeFlowEvent(TARunInfo* runinfo, TAFlags* flags, TAFlowEvent* flow)
     122              :    {
     123            0 :       printf("ExampleFrontend::AnalyzeFlowEvent, run %d\n", runinfo->fRunNo);
     124              : 
     125            0 :       if (!flow)
     126              :          return flow;
     127              : 
     128            0 :       TMEventFlow* ef = flow->Find<TMEventFlow>();
     129              : 
     130            0 :       if (!ef)
     131              :          return flow;
     132              : 
     133            0 :       uint32_t anaa_bank[] = { 1, 2, 3, 4 };
     134              : 
     135            0 :       ef->fEvent.AddBank("ANAA", TID_UINT32, (const char*)&anaa_bank[0], sizeof(anaa_bank));
     136              : 
     137            0 :       ef->fEvent.PrintHeader();
     138              : 
     139            0 :       if (fEq) {
     140            0 :          fEq->EqSendEvent(ef->fEvent.data);
     141            0 :          fEq->EqWriteStatistics();
     142              :       }
     143              : 
     144              :       return flow;
     145              :    }
     146              : };
     147              : 
     148              : class ExampleFrontendFactory: public TAFactory
     149              : {
     150              :    FeAnalyzer* fFe = NULL;
     151              :    EqAnalyzer* fEq = NULL;
     152              : 
     153            0 :    void Init(const std::vector<std::string> &args)
     154              :    {
     155            0 :       printf("ExampleFrontendFactory::Init!\n");
     156              : 
     157            0 :       assert(fEq == NULL);
     158              : 
     159            0 :       fFe = new FeAnalyzer();
     160            0 :       fEq = new EqAnalyzer("analyzer", __FILE__);
     161            0 :       fFe->FeAddEquipment(fEq);
     162              :       
     163            0 :       TMFeResult r = fFe->FeInitEquipments(args);
     164              :       
     165            0 :       if (r.error_flag) {
     166            0 :          fprintf(stderr, "Cannot initialize equipments, error message: %s, bye.\n", r.error_message.c_str());
     167            0 :          fFe->fMfe->Disconnect();
     168            0 :          exit(1);
     169              :       }
     170            0 :    }
     171              : 
     172            0 :    void Finish()
     173              :    {
     174            0 :       printf("ExampleFrontendFactory::Finish!\n");
     175              : 
     176              :       //if (fEq) {
     177              :       //   delete fEq;
     178              :       //   fEq = NULL;
     179              :       //}
     180            0 :       if (fFe) {
     181            0 :          delete fFe;
     182            0 :          fFe = NULL;
     183              :       }
     184            0 :    }
     185              :   
     186            0 :    ExampleFrontend* NewRunObject(TARunInfo* runinfo)
     187              :    {
     188            0 :       return new ExampleFrontend(runinfo, fEq);
     189              :    }
     190              : };
     191              : 
     192              : static TARegister tar(new ExampleFrontendFactory);
     193              : 
     194              : /* emacs
     195              :  * Local Variables:
     196              :  * tab-width: 8
     197              :  * c-basic-offset: 3
     198              :  * indent-tabs-mode: nil
     199              :  * End:
     200              :  */
        

Generated by: LCOV version 2.0-1