Skip to content
Snippets Groups Projects
Select Git revision
  • d0694b51bfec1e0f009e86f8f4d2eeeb8689d955
  • master default protected
  • jul25_patches
  • nightly_master
  • online_mvd_readconf_cleanup protected
  • online_much_readconf_cleanup protected
  • cleanup_rich_v25a
  • jul24_patches
  • nov23_patches
  • DC_2404
  • nighly_master
  • DC_Jan24
  • DC_Nov23
  • DC_Oct23
  • feb23_patches
  • L1Algo-dev9
  • dec21_patches protected
  • apr21_patches protected
  • RC2_jul25
  • dev_2025_46
  • dev_2025_45
  • dev_2025_44
  • dev_2025_43
  • dev_2025_42
  • dev_2025_41
  • dev_2025_40
  • dev_2025_39
  • dev_2025_38
  • dev_2025_37
  • dev_2025_36
  • dev_2025_35
  • dev_2025_34
  • dev_2025_33
  • dev_2025_32
  • dev_2025_31
  • dev_2025_30
  • RC_jul25
  • dev_2025_29
38 results

CbmDeviceHitBuilderTof.h

Blame
  • P.-A. Loizeau's avatar
    Pierre-Alain Loizeau authored
    - In CbmDeviceUnpackTofCri, get the TS start time directly from the timeslice and pass it to the BuildInt method, instead of some roundabout way with the algo
    - In CbmDeviceUnpackTofCri, use the native pointer interface of the Algo to set the parameter pointer, brings more checks + avoid exposing internal methods
    4ca602d0
    History
    CbmDeviceHitBuilderTof.h 10.60 KiB
    /* Copyright (C) 2018-2020 PI-UHd, GSI
       SPDX-License-Identifier: GPL-3.0-only
       Authors: Norbert Herrmann [committer] */
    
    /**
     * CbmDeviceHitBuilderTof.h
     *
     * @since 2018-05-31
     * @author N. Herrmann
     */
    
    #ifndef CBMDEVICEHITBUILDERTOF_H_
    #define CBMDEVICEHITBUILDERTOF_H_
    
    #include "CbmMqTMessage.h"
    #include "CbmTofAddress.h"     // in cbmdata/tof
    #include "CbmTofGeoHandler.h"  // in tof/TofTools
    
    #include "MicrosliceDescriptor.hpp"
    #include "Timeslice.hpp"
    
    #include "FairEventHeader.h"
    #include "FairMQDevice.h"
    
    #include "Rtypes.h"
    #include "TFile.h"
    #include "TGeoManager.h"
    #include "TMessage.h"
    #include "TTree.h"
    
    #include <map>
    #include <vector>
    
    class CbmHistManager;
    // Relevant TOF classes
    class CbmTofDigi;
    class CbmTofHit;
    class CbmMatch;
    class CbmEvent;
    class CbmVertex;
    // Geometry
    class CbmTofGeoHandler;
    class CbmTofDetectorId;
    class CbmTofDigiPar;
    class CbmTofDigiBdfPar;
    class CbmTofCell;
    
    // ROOT Classes and includes
    class TClonesArray;
    class TF1;
    class TH1;
    class TH2;
    class TProfile;
    class TString;
    
    // C++ Classes and includes
    #include <list>
    #include <map>
    #include <vector>
    
    class CbmDeviceHitBuilderTof : public FairMQDevice {
    public:
      CbmDeviceHitBuilderTof();
      virtual ~CbmDeviceHitBuilderTof();
    
    protected:
      virtual void InitTask();
      //bool HandleData(FairMQMessagePtr&, int);
      bool HandleData(FairMQParts&, int);
      bool HandleMessage(FairMQMessagePtr&, int);
    
      virtual void fit_ybox(const char* hname);                    // Fit
      virtual void fit_ybox(TH1* h, Double_t dy);                  // Fit
      virtual void fit_ybox(TH1* h, Double_t dy, Double_t* fpar);  // Fit
      virtual void CheckLHMemory();                                // Check consistency of stored last hits
      virtual void CleanLHMemory();                                // Cleanup
      virtual Bool_t AddNextChan(Int_t iSmType, Int_t iSm, Int_t iRpc, Int_t iLastChan, Double_t dLastPosX,
                                 Double_t dLastPosY, Double_t dLastTime,
                                 Double_t dLastTot);  // needed for time based data
      virtual void LH_store(Int_t iSmType, Int_t iSm, Int_t iRpc, Int_t iChm, CbmTofHit* pHit);
    
    private:
      // Variables used for histo filling
    
      Bool_t IsChannelNameAllowed(std::string channelName);
    
      Bool_t InitWorkspace();
      Bool_t InitContainers();
      Bool_t LoadGeometry();
      Bool_t InitRootOutput();
    
      Bool_t ReInitContainers();
      void CreateHistograms();
      void WriteHistograms();
    
      Bool_t MonitorPulser();
      Bool_t ApplyPulserCorrection();
      Bool_t InitCalibParameter();
      Bool_t BuildClusters();
      Bool_t InspectRawDigis();
      Bool_t CalibRawDigis();
      Bool_t FillDigiStor();
      Bool_t BuildHits();
      Bool_t MergeClusters();
      Bool_t FillHistos();
      Bool_t SendHits();
      Bool_t SendAll();
    
      uint64_t fNumMessages;
      std::vector<std::string> fAllowedChannels = {"tofcomponent", "parameters", "tofdigis", "tofhits", "syscmd"};
    
      TGeoManager* fGeoMan;
      // ToF geometry variables
      CbmTofGeoHandler* fGeoHandler;
      CbmTofDetectorId* fTofId;
      CbmTofDigiPar* fDigiPar;
      CbmTofCell* fChannelInfo;
      CbmTofDigiBdfPar* fDigiBdfPar;
      // Input variables
      Int_t fiNDigiIn;
      std::vector<CbmTofDigi> fvDigiIn;
      std::vector<uint64_t> fEventHeader;
      FairEventHeader* fEvtHeader;
    
      // Output variables
      // TClonesArray* fTofCalDigisColl;      // Calibrated TOF Digis
      std::vector<CbmTofDigi>* fTofCalDigiVec = nullptr;  // Calibrated TOF Digis
      TClonesArray* fTofHitsColl;                         // TOF hits
      TClonesArray* fTofDigiMatchColl;                    // TOF Digi Links
      TClonesArray* fTofHitsCollOut;                      // TOF hits
      TClonesArray* fTofDigiMatchCollOut;                 // TOF Digi Links
      Int_t fiNbHits;                                     // Index of the CbmTofHit TClonesArray
    
      // Constants or setting parameters
      Int_t fiNevtBuild;
      Int_t fiMsgCnt;
    
      Double_t fdTOTMax;
      Double_t fdTOTMin;
      Double_t fdTTotMean;
    
      Double_t fdMaxTimeDist;   // Isn't this just a local variable? Why make it global and preset?!?
      Double_t fdMaxSpaceDist;  // Isn't this just a local variable? Why make it global and preset?!?
    
      Double_t fdEvent;
      Int_t fiMaxEvent;
      Int_t fiRunId;
    
      Int_t fiOutputTreeEntry;
      Int_t fiFileIndex;
    
      // Intermediate storage variables
      std::vector<std::vector<std::vector<std::vector<CbmTofDigi*>>>> fStorDigi;  //[nbType][nbSm*nbRpc][nbCh][nDigis]
      std::vector<std::vector<std::vector<std::vector<Int_t>>>> fStorDigiInd;     //[nbType][nbSm*nbRpc][nbCh][nDigis]
      std::vector<Int_t> vDigiIndRef;
    
      std::vector<std::vector<std::vector<Int_t>>> fviClusterMul;   //[nbType][nbSm][nbRpc]
      std::vector<std::vector<std::vector<Int_t>>> fviClusterSize;  //[nbType][nbRpc][nClusters]
      std::vector<std::vector<std::vector<Int_t>>> fviTrkMul;       //[nbType][nbRpc][nClusters]
      std::vector<std::vector<std::vector<Double_t>>> fvdX;         //[nbType][nbRpc][nClusters]
      std::vector<std::vector<std::vector<Double_t>>> fvdY;         //[nbType][nbRpc][nClusters]
      std::vector<std::vector<std::vector<Double_t>>> fvdDifX;      //[nbType][nbRpc][nClusters]
      std::vector<std::vector<std::vector<Double_t>>> fvdDifY;      //[nbType][nbRpc][nClusters]
      std::vector<std::vector<std::vector<Double_t>>> fvdDifCh;     //[nbType][nbRpc][nClusters]
    
      // Intermediate calibration variables
      std::vector<std::vector<std::vector<std::vector<Double_t>>>> fvCPDelTof;   //[nSMT][nRpc][nbClDelTofBinX][nbSel]
      std::vector<std::vector<std::vector<std::vector<Double_t>>>> fvCPTOff;     //[nSMT][nRpc][nCh][nbSide]
      std::vector<std::vector<std::vector<std::vector<Double_t>>>> fvCPTotGain;  //[nSMT][nRpc][nCh][nbSide]
      std::vector<std::vector<std::vector<std::vector<Double_t>>>> fvCPTotOff;   //[nSMT][nRpc][nCh][nbSide]
      std::vector<std::vector<std::vector<std::vector<std::vector<Double_t>>>>>
        fvCPWalk;  //[nSMT][nRpc][nCh][nbSide][nbWalkBins]
      std::vector<std::vector<std::vector<std::vector<std::list<CbmTofHit*>>>>> fvLastHits;  //[nSMT[nSm][nRpc][nCh][NHits]
      std::vector<Int_t> fvDeadStrips;                                                       //[nbDet]
    
      std::vector<std::vector<Double_t>> fvPulserOffset;  //[nbDet][nbSide]
      const Int_t NPulserTimes = 10;
      std::vector<std::vector<std::list<Double_t>>> fvPulserTimes;  //[nbDet][nbSide][NPulserTimes]
    
    
      // histograms
      TH1* fhEvDetMul;
      TH1* fhEvDigiMul;
      TH1* fhEvRateIn;
      TH1* fhEvRateOut;
      TH1* fhPulMul;
      TH1* fhDigiTdif;
      TH2* fhPulserTimesRaw;
      std::vector<TProfile*> fhPulserTimeRawEvo;
      TH2* fhPulserTimesCor;
      TH2* fhDigiTimesRaw;
      TH2* fhDigiTimesCor;
    
      std::vector<TH2*> fhRpcDigiTot;                            //[nbDet]
      std::vector<TH2*> fhRpcDigiCor;                            //[nbDet]
      std::vector<TH1*> fhRpcCluMul;                             //[nbDet]
      std::vector<TH1*> fhRpcCluRate;                            //[nbDet]
      std::vector<TH2*> fhRpcCluPosition;                        //[nbDet]
      std::vector<TH2*> fhRpcCluDelPos;                          //[nbDet]
      std::vector<TH2*> fhRpcCluDelMatPos;                       //[nbDet]
      std::vector<TH2*> fhRpcCluTOff;                            //[nbDet]
      std::vector<TH2*> fhRpcCluDelTOff;                         //[nbDet]
      std::vector<TH2*> fhRpcCluDelMatTOff;                      //[nbDet]
      std::vector<TH2*> fhRpcCluTrms;                            //[nbDet]
      std::vector<TH2*> fhRpcCluTot;                             //[nbDet]
      std::vector<TH2*> fhRpcCluSize;                            //[nbDet]
      std::vector<TH2*> fhRpcCluAvWalk;                          //[nbDet]
      std::vector<TH2*> fhRpcCluAvLnWalk;                        //[nbDet]
      std::vector<std::vector<std::vector<TH2*>>> fhRpcCluWalk;  // [nbDet][nbCh][nSide]
      std::vector<TH2*> fhSmCluPosition;                         //[nbSmTypes]
      std::vector<TH2*> fhSmCluTOff;
      std::vector<TProfile*> fhSmCluSvel;
      std::vector<std::vector<TProfile*>> fhSmCluFpar;
      std::vector<TH1*> fhRpcDTLastHits;          //[nbDet]
      std::vector<TH1*> fhRpcDTLastHits_Tot;      //[nbDet]
      std::vector<TH1*> fhRpcDTLastHits_CluSize;  //[nbDet]
    
      std::vector<std::vector<TH1*>> fhTRpcCluMul;                             //[nbDet][nbSel]
      std::vector<std::vector<TH2*>> fhTRpcCluPosition;                        //[nbDet][nbSel]
      std::vector<std::vector<TH2*>> fhTRpcCluTOff;                            //[nbDet] [nbSel]
      std::vector<std::vector<TH2*>> fhTRpcCluTot;                             // [nbDet][nbSel]
      std::vector<std::vector<TH2*>> fhTRpcCluSize;                            // [nbDet][nbSel]
      std::vector<std::vector<TH2*>> fhTRpcCluAvWalk;                          // [nbDet][nbSel]
      std::vector<std::vector<TH2*>> fhTRpcCluDelTof;                          // [nbDet][nbSel]
      std::vector<std::vector<TH2*>> fhTRpcCludXdY;                            // [nbDet][nbSel]
      std::vector<std::vector<std::vector<std::vector<TH2*>>>> fhTRpcCluWalk;  // [nbDet][nbSel][nbCh][nSide]
    
      std::vector<std::vector<TH2*>> fhTSmCluPosition;  //[nbSmTypes][nbSel]
      std::vector<std::vector<TH2*>> fhTSmCluTOff;      //[nbSmTypes][nbSel]
      std::vector<std::vector<TH2*>> fhTSmCluTRun;      //[nbSmTypes][nbSel]
      std::vector<std::vector<TH2*>> fhTRpcCluTOffDTLastHits;
      std::vector<std::vector<TH2*>> fhTRpcCluTotDTLastHits;
      std::vector<std::vector<TH2*>> fhTRpcCluSizeDTLastHits;
      std::vector<std::vector<TH2*>> fhTRpcCluMemMulDTLastHits;
    
      std::vector<TH1*> fhSeldT;  //[nbSel]
    
      // Calibration control variables
      Double_t dTRef;
      Int_t fCalMode;
      Double_t fdCaldXdYMax;
      Int_t fiCluMulMax;
      Int_t fTRefMode;
      Int_t fTRefHits;
      Int_t fDutId;
      Int_t fDutSm;
      Int_t fDutRpc;
      Int_t fDutAddr;
      Int_t fSelId;
      Int_t fSelSm;
      Int_t fSelRpc;
      Int_t fSelAddr;
      Int_t fiBeamRefType;
      Int_t fiBeamRefSm;
      Int_t fiBeamRefDet;
      Int_t fiBeamRefAddr;
      Int_t fiBeamRefMulMax;
      Int_t fiBeamAddRefMul;
      Int_t fSel2Id;
      Int_t fSel2Sm;
      Int_t fSel2Rpc;
      Int_t fSel2Addr;
      Int_t fiMode;
      Int_t fiPulserMode;
      uint64_t fiPulMulMin;
      uint64_t fiPulDetRef;
      uint64_t fiPulTotMin;
      uint64_t fiPulTotMax;
    
      std::map<UInt_t, UInt_t> fDetIdIndexMap;
      std::vector<Int_t> fviDetId;
    
      Double_t fPosYMaxScal;
      Double_t fTRefDifMax;
      Double_t fTotMax;
      Double_t fTotMin;
      Double_t fTotMean;
      Double_t fdDelTofMax;
      Double_t fMaxTimeDist;
      Double_t fdChannelDeadtime;
      Double_t fdMemoryTime;
    
      Bool_t fEnableMatchPosScaling;
      Bool_t fbPs2Ns;  // convert input raw digis from ps to ns
    
      TString fCalParFileName;   // name of the file name with Calibration Parameters
      TString fOutHstFileName;   // name of the histogram output file name with Calibration Parameters
      TString fOutRootFileName;  // name of the output file name with Digis & Hits
      TFile* fCalParFile;        // pointer to Calibration Parameter file
      TFile* fOutRootFile;       // pointer to root output file
    };
    
    #endif /* CBMDEVICEHITBUILDERTOF_H_ */