00001 #ifndef ClusterManager_H
00002 #define ClusterManager_H
00003 #include "NueAna/ParticlePID/ParticleFinder/Managed/HitManager.h"
00004 #include "NueAna/ParticlePID/ParticleFinder/Managed/ManagedHit.h"
00005 #include "NueAna/ParticlePID/ParticleFinder/Managed/ManagedCluster.h"
00006 #include "NueAna/ParticlePID/ParticleFinder/Managed/ClusterSaver.h"
00007
00008 #include <vector>
00009 #include <map>
00010
00011 #include "TObject.h"
00012
00013 namespace Managed
00014 {
00015
00016 class ClusterSaver;
00017
00018 class ClusterManager : public TObject
00019 {
00020 public:
00021 ClusterManager();
00022 ~ClusterManager();
00023
00024
00025 void MakeClusters(double min_cluster_e=0.4, double min_strip_e=0.4, double max_t_skip=0.025);
00026
00027 void Reset();
00028 void AddStrip(int myplane, int mystrip, double myenergy, double st, double sz, int view);
00029
00030 void LoadHits();
00031
00032 std::vector<int> GetPlanes();
00033 std::vector<int> GetStrips(int plane);
00034
00035 Managed::ManagedCluster * GetCluster(int cid);
00036 Managed::ManagedCluster * GetSavedCluster(int cid);
00037
00038 void SplitEnergy(Managed::ManagedCluster * cluster,double energy, int matchenergy);
00039 int MergeClusters(int cid1, int cid2);
00040
00041 void FillClusterMap(std::map<double, std::map<double, std::pair<double, int> > > * cluster_map );
00042
00043 std::vector<int> FindClustersInZ(double z,int view);
00044
00045
00046 std::map<double, std::map<double, int> > cluster_map;
00047 std::map<double, std::map<double, int> > cluster_map_u;
00048 std::map<double, std::map<double, int> > cluster_map_v;
00049
00050 std::map<double, std::map<double, int> > * GetClusterMap(int view=0);
00051
00052 std::vector<Managed::ManagedCluster> clusters;
00053
00054
00055 std::vector<int> GetViewIndex(int view);
00056
00057 double maxz;
00058 double minz;
00059 double maxu;
00060 double minu;
00061 double maxv;
00062 double minv;
00063
00064 void SetHitManager(Managed::HitManager *h){hitmanager=h;};
00065 HitManager * GetHitManager(){return hitmanager;};
00066
00067 void SetClusterSaver(Managed::ClusterSaver *cs){clustersaver=cs;};
00068 Managed::ClusterSaver * GetClusterSaver(){return clustersaver;};
00069
00070 void DumpClusters();
00071
00072 int SaveCluster(int cluster_id, double energy_to_save=0, int status=0);
00073
00074 void ClearInUse(){inuse.clear();};
00075
00076 void MarkUsed(int id){inuse.push_back(id);};
00077
00078 private:
00079 int clusters_are_made;
00080 std::map<int, std::map<int,int> > loc_map;
00081 std::vector<ManagedHit> hits;
00082 HitManager *hitmanager;
00083 ClusterSaver *clustersaver;
00084
00085 void EraseCluster(int cid);
00086
00087 void AdjustCluster(Managed::ManagedCluster *cluster);
00088
00089 ClassDef(ClusterManager,1);
00090
00091 int needMapRebuild;
00092 void RebuildClusterMaps();
00093
00094 std::vector<int>inuse;
00095
00096 std::vector<int>clusters_to_delete;
00097 };
00098
00099 }
00100
00101 #endif
00102