//----------------------------------------------------------------------- // File and Version Information: // $Id: $ // //--------------------------------------------------------------------- //#pragma once #ifndef PNDEMCDISTRIBUTEDCLUSTERING_H #define PNDEMCDISTRIBUTEDCLUSTERING_H #include "FairTask.h" #include #include "FairTSBufferFunctional.h" #include "TStopwatch.h" class TClonesArray; class TObjectArray; class PndEmcDigi; class PndEmcCluster; class PndEmcGeoPar; class PndEmcRecoPar; class BinaryFunctor; class PndEmcDistributedClustering : public FairTask { public: // Constructors PndEmcDistributedClustering(Int_t verbose=0, Bool_t storeclusters=kTRUE); // Destructor virtual ~PndEmcDistributedClustering( ); /** Virtual method Init **/ virtual InitStatus Init(); /** Virtual method Exec **/ virtual void Exec(Option_t* opt); virtual void FinishTask(); void SetStorageOfData(Bool_t val); //!< Method to specify whether clusters are stored or not. /// Restoring digis makes only sense if reconstruction is done timebased void StoreClusterBaseDigis(Bool_t val = kTRUE) { fStoreClusterBase = kTRUE; } /// Override EmcRecoPar cluster active time parameter ..to be set in ns!!! void SetClusterActiveTime(Double_t time) { fClusterActiveTime = time; } void SetDigiTimeThreshold(Double_t dt) { fTimeBetweenDigis = dt; } protected: virtual void FinishPreclusters(); void FinishPrecluster(PndEmcCluster* tmpcluster); virtual void FinishClusters(); void FinishCluster(PndEmcCluster* tmpcluster); private: /** Input array of preclusters and corresponding CbmDigis **/ TClonesArray* fDigiArray; TClonesArray* fPreclusterArray; /** Output array of PndEmcClusters **/ TClonesArray* fClusterArray; //!< active clusters PndEmcGeoPar* fGeoPar; /** Geometry parameter container **/ PndEmcRecoPar* fRecoPar; /** Reconstruction parameter container **/ Double_t fDigiEnergyTresholdBarrel; Double_t fDigiEnergyTresholdFWD; Double_t fDigiEnergyTresholdBWD; Double_t fDigiEnergyTresholdShashlyk; Double_t fClusterActiveTime; //!< Defines how long clusters are kept open in timebased reconstruction Double_t fTimeBetweenDigis; //!< Set time threshold for separating digis within a timebunch BinaryFunctor* fDigiFunctor; std::vector fClusterPosParam; Int_t fNrOfEvents; Bool_t fStoreClusters; Bool_t fStoreClusterBase; //restore digis in case of a timebased run /** Get parameter containers **/ virtual void SetParContainers(); TStopwatch fTimer; ClassDef(PndEmcDistributedClustering, 1) }; #endif // PNDEMCDISTRIBUTEDCLUSTERING_HH