Skip to content
Snippets Groups Projects
merger_spy.h 2.27 KiB
Newer Older
Diego Gruyer's avatar
Diego Gruyer committed
//Created by KVClassFactory on Sat Jun 14 15:18:15 2014
//Author: gruyer,,,

#ifndef __merger_spy_H
#define __merger_spy_H


#include "KVConfig.h"
#include "TThread.h"
#include "TDatime.h"
#include "TH1F.h"
#include "TList.h"

namespace zmq {
   class socket_t;
}

#include <unordered_map>

#include "MFMFileReader.h"
#include "MFMBufferReader.h"
#include <MFMFaziaFrame.h>
#include <MFMMesytecMDPPFrame.h>

#include "MergerInfo.pb.h"

class merger_spy : TNamed
{

private:
   MFMBufferReader* fReader;

   TThread* fThread;
   zmq::socket_t* fZmqIn, *fZmqOut;

   Double_t fStartTime;
   TDatime fTimeStamp;
   Bool_t fSimuMode;

   TTimer fTimer;
   Double_t fDt;

   TList histos;
   bool zmqin,zmqout;

   ULong64_t fazia_ts,indra_ts;
   uint16_t fLabel1, fLabel2;
   ULong64_t lasttimestamp;
   ULong64_t lastINDRAtimestamp;
   ULong64_t lastFAZIAtimestamp;
   ULong64_t INDRA_bit_corrector;
   bool merged;
   UShort_t TIMEML_UP,TIMEML,TIMEH;
   int inmerge_indra,inmerge_fazia;
   ULong64_t lastmergeTSforfreq;
   UInt_t nmergedforfreq;

   int nev_fazia, nev_faziasolo;
   int nev_indra, nev_indrasolo;
   int nev_merged;

   int fazia_ts_errors, indra_ts_errors, random_errors;

   TH1* h_delta_timestamp;
   TH1* h_dt_lastmerge;
   TH1* h_dt_lastmerge2;
   TH1* h_dt_indra;
   TH1* h_dt_indra_ms;
   TH1* h_dt_fazia;
   TH1* h_events;
   TH1* h_dt_fazia_indra_faziaseul;
   TH1* h_dt_fazia_indra_merge;
   TH1* h_mult_merge;
//   TH2F* h_mult_merge_qui;
   TH1* h_coinc_freq_avg_500;
   TH1* h_coinc_freq_avg_100;
   TH1* h_coinc_freq_avg_1000;

public:
   int nbuffer;


private:
   void fill_protobuf(myprotobuf::merger_info &minfo);

   enum {
      INDRA=1,
      FAZIA=10
   };
public:
   merger_spy(int send_delay=1,bool simu=false);
   virtual ~merger_spy();

   void ConnectZmqIn(const std::string& urlin);
   void ConnectZmqOut(const std::string& urlout);

   void Run();

   void Start();
   static void* Process(void* obj);
   Bool_t HandleTimer(TTimer*);
   void Stop();

   void* TreatEvent(MFMBufferReader* reader);

 //  ClassDef(merger_spy,1)
   void treat_indra_frame(const MFMCommonFrame& frame);
   void treat_fazia_frame(const MFMCommonFrame& frame);
   int handle_single_mfmframe(const MFMCommonFrame& frame);
   void handle_merged_mfmframe(const MFMMergeFrameManager& mergeframe);
};

#endif