PandaRoot
PndEmcDistributedClustering.h
Go to the documentation of this file.
1 //-----------------------------------------------------------------------
2 // File and Version Information:
3 // $Id: $
4 //
5 //---------------------------------------------------------------------
6 //#pragma once
7 #ifndef PNDEMCDISTRIBUTEDCLUSTERING_H
8 #define PNDEMCDISTRIBUTEDCLUSTERING_H
9 
10 #include "FairTask.h"
11 #include <vector>
12 
13 #include "FairTSBufferFunctional.h"
14 #include "TStopwatch.h"
15 #include "TH1.h"
16 #include "TVector3.h"
17 
18 class TClonesArray;
19 class TObjectArray;
20 class PndEmcDigi;
21 class PndEmcCluster;
22 class PndEmcGeoPar;
23 class PndEmcRecoPar;
24 class BinaryFunctor;
25 
34 class PndEmcDistributedClustering : public FairTask
35 {
36 public:
37 
38  // Constructors
39 
40  PndEmcDistributedClustering(Int_t verbose=0, Bool_t storeclusters=kTRUE);
41 
42  // Destructor
43 
45 
47  virtual InitStatus Init();
48 
50  virtual void Exec(Option_t* opt);
51 
53  virtual void FinishTask();
54 
55  void SetStorageOfData(Bool_t val);
56 
58  void StoreClusterBaseDigis(Bool_t val = kTRUE) { fStoreClusterBase = kTRUE; }
59 
61  void SetTimebunchCutTime(Double_t time) { fTimebunchCutTime = time; }
63  void SetClusterActiveTime(Double_t dt) { fClusterActiveTime = dt; }
64 
66  void SetClusterMinimumEnergy(Double_t minE) { fClusterEnergyCut = minE; }
67  void EnableRemovalOfLowEnergyClusters(Bool_t enable) {fRemoveLowEclus = enable;}
71  void SetPositionMethod(Int_t method) { fPosMethod = method; }
78  void SetNeighbourMethod(Int_t nbmethod) { fNbMethod = nbmethod; }
86  void SetAutoDetermineTimecuts(Bool_t autodet) {fAutoDetermine = autodet;}
87 
88  void SetFactor(TVector3* factor) {fFactor = factor;}
89 
90 protected:
91  virtual void FinishPreclusters();
92  void FinishPrecluster(PndEmcCluster* tmpcluster);
93  virtual void FinishClusters();
94  void FinishCluster(PndEmcCluster* tmpcluster, int);
95  virtual void RemoveLowEnergyClusters();
96  virtual void MapDistancesToSingleHitClusters();
97 
98 private:
100  TClonesArray* fDigiArray;
101  TClonesArray* fPreclusterArray;
102 
104  TClonesArray* fClusterArray;
105 
106  PndEmcGeoPar* fGeoPar;
107  PndEmcRecoPar* fRecoPar;
109  Double_t fDigiEnergyTresholdBarrel;
110  Double_t fDigiEnergyTresholdFWD;
111  Double_t fDigiEnergyTresholdBWD;
112  Double_t fDigiEnergyTresholdShashlyk;
113  Double_t fClusterEnergyCut;
115  Double_t fTimebunchCutTime; // Defines how long clusters are kept open in timebased reconstruction
116  Double_t fClusterActiveTime;
117  BinaryFunctor* fDigiFunctor;
118 
119  std::vector<Double_t> fClusterPosParam;
120 
121  Int_t fNrOfEvents;
122  Int_t fPosMethod;
123  Int_t fNbMethod;
124  Int_t evtCounter;
125  Int_t digiCounter;
126  Int_t fNrOfDigis;
127  Int_t nDistProg;
128  Int_t fRemovedClusters;
129  Double_t DCtotRtime;
130  Double_t DCtotCtime;
131  Double_t CNtotRtime;
132  Double_t CNtotCtime;
133  bool tagSingleClus;
134  bool printClusters;
135  Bool_t fAutoDetermine;
136 
137  TH1I* hNdigis;
138 // TH1I* hClusMultiplicity;
139 // TH1D* hTimeDifference;
140  TH1D* hSingle;
141  TH1D* hDistancesToSingleHitClusters;
142 // TH1D* hRadDiff;
143 // TH1D* hPosDiff;
144 
145  Bool_t fStoreClusters;
146  Bool_t fStoreClusterBase; //restore digis in case of a timebased run
147  Bool_t fRemoveLowEclus;
148 
150  virtual void SetParContainers();
151 
152  TStopwatch fTimer;
153  int counter;
154  double stoptime;
155 
156  TVector3* fFactor;
157 
158  ClassDef(PndEmcDistributedClustering, 2)
159 };
160 #endif // PNDEMCDISTRIBUTEDCLUSTERING_HH
void SetAutoDetermineTimecuts(Bool_t autodet)
Task to create clusters from digis.
virtual void MapDistancesToSingleHitClusters()
virtual void FinishPreclusters()
void SetClusterActiveTime(Double_t dt)
Set time threshold for separating digis within a timebunch in ns.
PndEmcDistributedClustering(Int_t verbose=0, Bool_t storeclusters=kTRUE)
virtual InitStatus Init()
void EnableRemovalOfLowEnergyClusters(Bool_t enable)
virtual ~PndEmcDistributedClustering()
void SetStorageOfData(Bool_t val)
Method to specify whether clusters are stored or not.
void SetTimebunchCutTime(Double_t time)
Override EmcRecoPar cluster active time parameter ..to be set in ns!!!
virtual void FinishClusters()
virtual void Exec(Option_t *opt)
void FinishPrecluster(PndEmcCluster *tmpcluster)
void SetClusterMinimumEnergy(Double_t minE)
Set minimum cluster energy.
void StoreClusterBaseDigis(Bool_t val=kTRUE)
Restoring digis makes only sense if reconstruction is done timebased.
virtual void RemoveLowEnergyClusters()
void FinishCluster(PndEmcCluster *tmpcluster, int)
Parameter set for Emc Reco.
Definition: PndEmcRecoPar.h:12