// ESAF : Euso Simulation and Analysis Framework // $Id: ClusterAnalysisModule.hh,v 1.7 2004/09/28 12:10:10 thea Exp $ // R. Pesce created Mar, 4 2004 #ifndef __CLUSTERANALYSISMODULE_HH_ #define __CLUSTERANALYSISMODULE_HH_ #include #include "euso.hh" #include "RecoModule.hh" class EusoCluster; class RecoRootEvent; class ClusterAnalysisModule : public RecoModule { public: // ctor ClusterAnalysisModule(); // dtor virtual ~ClusterAnalysisModule(); // Init method: called at the beginning of a run virtual Bool_t Init(); // called before each event process virtual Bool_t PreProcess(); // event processing virtual Bool_t Process( RecoEvent* ); // called after processing an event virtual Bool_t PostProcess(); // called at the end of each run virtual Bool_t Done(); // save root output virtual Bool_t SaveRootData( RecoRootEvent* ); // memory clean virtual void UserMemoryClean(); // get a specified cluster EusoCluster* GetCluster( Int_t i ); EsafConfigClass(Reco, ClusterAnalysisModule) private: RecoEvent *fEv; RecoRootEvent *fRecoRootEvent; Double_t fNumThreshold; // number of threshold distance to aggregate clusters Double_t fRelNumPointsMin; // new clusters will have a num of points min multiplied by this Double_t fRelNumHits; // " " " " " " " hits " " " " Int_t fMainCluster; // id of most populous cluster vector fThetaMean; // theta mean for each cluster vector fPhiMean; // phi mean for each cluster vector fDim; // mean angular dimension of cluster Double_t fThreshold; // distance threshold vector fSelectedClusters; void SearchMainCluster(); Double_t AngularDistance(Double_t, Double_t, Double_t, Double_t); Bool_t gDoFit; vector fClusters; void HistoClusters(); // methods for clustering clusters void InitSuperClustering(); void NewSuperCluster(); void SearchSuperClusters(); void WriteSuperCluster(); void FillSuperCluster(); // variables for clustering of clusters Int_t fNumSuperClusters; // number of superclusters founded Int_t fNumNodes; // number of nodes Int_t fNumPointsCluster; // number of points in cluster Int_t fCounter; // point to be processed Int_t fBookmark; // first point of a new cluster vector fId; // identifier of point vector fFlag1; // flag that indicates if a point is already in a cluster vector fFlag2; // flag that indicates if a point is already considered in the // current search ClassDef(ClusterAnalysisModule,0) }; #endif /* __CLUSTERANALYSISMODULE_HH_ */