Skip to content
Snippets Groups Projects
Select Git revision
  • 3e4e23da523228fb5f78ea47e2c0bc2e4a089748
  • master default protected
  • nightly_master
  • online_mvd_readconf_cleanup protected
  • online_much_readconf_cleanup protected
  • jul25_patches
  • 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
  • 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
  • dev_2025_28
  • dev_2025_27
38 results

CbmMCDataArray.h

Blame
  • Florian Uhlig's avatar
    Administrator authored
    Unify user names in the license header authors list.
    Remove duplicate users in the authors list.
    Cleanupo of some other inor issues.
    131d9ce2
    History
    CbmMCDataArray.h 5.25 KiB
    /* Copyright (C) 2015-2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
       SPDX-License-Identifier: GPL-3.0-only
       Authors: Mikhail Prokudin, Volker Friese [committer], Florian Uhlig */
    
    /** @file  CbmMCDataArray.h
     ** @author //Dr.Sys <mikhail.prokudin@cern.ch>
     **/
    
    #ifndef CBMMCDATAARRAY_H
    #define CBMMCDATAARRAY_H
    
    #include "CbmLink.h"  // for CbmLink
    
    #include <Rtypes.h>      // for THashConsistencyHolder, ClassDef
    #include <RtypesCore.h>  // for Int_t, Long64_t
    #include <TString.h>     // for TString
    
    #include <list>    // for list
    #include <map>     // for map
    #include <vector>  // for vector
    
    class TChain;
    class TClonesArray;
    class TObject;
    
    /** @class CbmMCDataArray
     ** @brief Access to a MC data branch for time-based analysis
     ** @author //Dr.Sys <mikhail.prokudin@cern.ch>
     ** @date 31 March 2015
     **
     ** This class provides cached access to data for an event-by-event MC data branch,
     ** which is used when matching time-based reconstruction data to the input MC data.
     ** Data arrays from already used events are cached, which allows switching between
     ** events without the performance deterioration induced by frequent calls to
     ** TTree::GetEntry().
     ** In legacy mode, the data from the current event will be retrieved from
     ** FairRootManager.
     **/
    class CbmMCDataArray {
      friend class CbmMCDataManager;
    
    public:
      /** Destructor **/
      virtual ~CbmMCDataArray() {}
    
    
      /** Get an object by CbmLink pointer
    		 ** @param link Pointer to CbmLink object
    		 ** @value      Pointer to linked object
    		 **/
      TObject* Get(const CbmLink* lnk) { return Get(lnk->GetFile(), lnk->GetEntry(), lnk->GetIndex()); }
    
    
      /** Get an object by CbmLink reference
    		 ** @param link Reference to CbmLink object
    		 ** @value      Pointer to linked object
    		 **/
      TObject* Get(const CbmLink& lnk) { return Get(lnk.GetFile(), lnk.GetEntry(), lnk.GetIndex()); }
    
    
      /** Get an object by file number, event number and index
    		 ** @param fileNumber	  Input file number
    		 ** @param eventNumber  Event number
    		 ** @param index        Index of desired object in its array
    		 ** @value              Pointer to referenced object
    		 **/
      TObject* Get(Int_t fileNumber, Int_t eventNumber, Int_t index);
    
      /** Get a size of TClonesArray . Slow if TClonesArray not in cache
    		 ** @param fileNumber	Input file number
    		 ** @param eventNumber  Event number
    		 ** @value              Size of corresponding TClonesArray
    		 **/
      Int_t Size(Int_t fileNumber, Int_t eventNumber);
    
      /** Get a size of TClonesArray . Slow if TClonesArray not in cache
    		 ** @param link	Reference to CbmLink object, index field is ignored
    		 ** @value 	Size of corresponding TClonesArray
    		 **/
      Int_t Size(const CbmLink& lnk) { return Size(lnk.GetFile(), lnk.GetEntry()); }
    
      /** Get a size of TClonesArray . Slow if TClonesArray not in cache
    		 ** @param link	Pointer to CbmLink object, index field is ignored
    		 ** @value 	Size of corresponding TClonesArray
    		 **/
      Int_t Size(const CbmLink* lnk) { return Size(lnk->GetFile(), lnk->GetEntry()); }
    
    private:
      /** Default constructor. Should be called from CbmMCDataManager. **/
      CbmMCDataArray() : fLegacy(0), fLegacyArray(nullptr), fBranchName(), fSize(0), fChains(), fTArr(), fN(0), fArrays() {}
    
      /** Standard constructor. Should be called from CbmMCDataManager.
    		 ** @param branchName   Name of data branch
    		 ** @param fileList     Vector of file list (one for each input source)
    		 **/
      CbmMCDataArray(const char* branchName, const std::vector<std::list<TString>>& fileList);
    
      /** Constructor in legacy mode. Gets the branch from FairRootManager.
    	   ** @param branchName  Name of data branch
    	   **/
      CbmMCDataArray(const char* branchName);
    
    
      /** Copy constructor. Should not be called. **/
      CbmMCDataArray(const CbmMCDataArray&);
    
    
      /** Done. Clear all arrays and delete file chain. **/
      void Done();
    
    
      /** Finish event. Delete all arrays to free memory. **/
      void FinishEvent();
    
      /** Make TChain number chainNum2 friend of TChain number chainNum2
    		 ** @param chainNum1 a number of chain for which AddFriend is called
    		 ** @param chainNum2 number of chain which became a friend
    		 **/
      void AddFriend(Int_t chainNum1, Int_t chainNum2);
    
    
      /** Get an object in legacy mode
    		 ** @param fileNumber   Input number
    		 ** @param eventNumber  Event number
    		 ** @param index        Index of desired object in its array
    		 ** @value              Pointer to referenced object
    		 **/
      TObject* LegacyGet(Int_t fileNumber, Int_t eventNumber, Int_t index);
    
    
      //----   Private data members -------
      Int_t fLegacy;                     //! If true, run in legacy mode
      TClonesArray* fLegacyArray;        //! Pointer to TClonesArray for legacy mode
      TString fBranchName;               //! Name of the data branch
      Int_t fSize;                       //! Number of input file lists (one per source)
      std::vector<TChain*> fChains;      //! Arrays of chains (one per input source)
      std::vector<TClonesArray*> fTArr;  //! Data arrays from chains (one per input source)
      std::vector<Long64_t> fN;          //! Number of entries in chains
    
      /** Cached data arrays. The vector index is the input source number, the map
    		 ** index is the event number.
    		 **/
      std::vector<std::map<Int_t, TClonesArray*>> fArrays;  //!
    
      CbmMCDataArray& operator=(const CbmMCDataArray&);
    
      ClassDef(CbmMCDataArray, 1);
    };
    
    #endif