Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

SiClusters.h

Go to the documentation of this file.
00001 // $Id: SiClusters.h,v 1.3 2000/12/08 23:01:08 igable Exp $
00002 
00003 #ifndef SI_CLUSTER_H
00004 #define SI_CLUSTER_H 1
00005 
00006 #include "geometry/Point.h"
00007 #include "data/SiData.h"
00008 
00009 #include <iostream>
00010 
00011 class SiClusters
00012 {
00013  public:
00014   class Cluster;
00015 
00016  private:
00017 
00018   class Tray
00019     {
00020     private:
00021       friend class SiClusters;
00022 
00023       public:
00024 
00025           Tray (int m);
00026           ~Tray ();
00027 
00028           void flagHit (unsigned int idx);
00029           void flagHit (enum SiData::Axis , unsigned int );
00030           void unflagHit (unsigned int idx);
00031           void unflagHit (enum SiData::Axis , unsigned int );
00032           void clearHitFlags ();
00033 
00034         // Data Members for Class Attributes
00035 
00036           unsigned int module;
00037           std::vector<Cluster *> xhitList;
00038           std::vector<Cluster *> yhitList;
00039     };
00040 
00041 
00042 
00043   public:
00044 
00045   class Cluster
00046     {
00047     public:
00048       friend class SiClusters;
00049       Cluster (Point p, int n);
00050       Cluster (Point p, int n, int ns);
00051 
00052       int flag;
00053       int number;
00054       int num_noise;  // Number of noise strips in cluster
00055       Point pos;
00056     };
00057 
00058   public:
00059 
00060       explicit SiClusters (int  ntrays );
00061       // see note on size_type in .cxx file
00062       ~SiClusters ();
00063 
00064 
00065       //        setup call to transfer data from DetectorVisitor SiData
00066       //        and compute clusters
00067       void loadFrom (const SiData& data);
00068 
00069       //        -------------------- access functions for data
00070       //        analysis------------------------
00071       void clear ();
00072 
00073       //        number of  strip clusters in the given tray (tray=0..11)
00074       int nHits (enum SiData::Axis a, int trayNum) const;
00075 
00076       Point nextHit (int trayN, int* index);
00077 
00078       //        Function for cycling over allowed hit combinations
00079       Point nextHit (enum SiData::Axis a, int trayN, int* index);
00080 
00081       Point nearestHitInside( unsigned int trayNum, float dR,
00082                               const Point& x0, int* index);
00083 
00084       Point nearestHitInside( unsigned int trayNum, float dX, float dY,
00085                               const Point& x0, int* index);
00086 
00087       Point nearestHitInside( enum SiData::Axis a, unsigned int trayNum,
00088                               float dX, const Point& x0, int* index);
00089 
00090       Point nearestHitOutside( unsigned int trayNum, float dR,
00091                                const Point& x0, int* index);
00092 
00093       //        Functions for adding hits to trajectories
00094       Point nearestHitOutside( enum SiData::Axis a, unsigned int trayNum,
00095                                float dX, const Point& x0, int* index);
00096 
00097       Point meanHit (unsigned int trayNum, float* rmsX, float* rmsY);
00098 
00099       Point meanHit (enum SiData::Axis axis, unsigned int trayNum, float* rms);
00100 
00101       //        Functions for giving global pattern information
00102       Point meanHitInside (unsigned int trayNum, float dXY, const Point& x0);
00103 
00104       //        Functions for analyzing hit patterns
00105       int numberOfHitsNear( unsigned int trayNum, float dX, float dY,
00106                     const Point& x0);
00107       int numberOfHitsNear( unsigned int trayNum, float dR, const Point& x0);
00108           int numberOfHitsNear( enum SiData::Axis a, unsigned int trayNum, float dR,
00109                             const Point& x0);
00110 
00111       int clusterSize(enum SiData::Axis a, unsigned int index);
00112 
00113       Point clusterPosition(enum SiData::Axis a, unsigned int index);
00114 
00115 
00116       int clusterNoise(enum SiData::Axis a, unsigned int index);
00117 
00118       bool hitFlagged(enum SiData::Axis a, unsigned int index);
00119 
00120       void flagHit (unsigned int index);
00121       void flagHit (enum SiData::Axis a, unsigned int index);
00122 
00123       void unflagHit (unsigned int index);
00124 
00125       void unflagHit (enum SiData::Axis a, unsigned int index);
00126 
00127        //       Funcitons for managing hit bank for pattern recognition
00128       void clearHitFlags ();
00129 
00130       void printOn (std::ostream& cout = std::cout);
00131 
00132           static int tower(int indexhit);
00133 
00134    private:
00135 
00136       SiClusters::Tray* getTrayFor (int lyr, int mod);
00137 
00138        void transferData (enum SiData::Axis a, const SiData& data,
00139                           int lyr, int start, int stop);
00140 
00141     // Data Members for Associations
00142 
00143        std::vector< std::vector< Tray *> > trayList;
00144 
00145 };
00146 
00147 
00148 // Class SiClusters::Tray
00149 
00150 inline SiClusters::Tray::Tray (int m) : module(m) {}
00151 
00152 inline SiClusters::Tray::~Tray ()
00153 {
00154     std::vector<Cluster *>::iterator it = xhitList.begin();
00155   for ( ; it != xhitList.end(); it++ ) {
00156     delete *it;
00157   }
00158   xhitList.clear();
00159 
00160   for ( it = yhitList.begin(); it != yhitList.end(); it++ ) {
00161     delete *it;
00162   }
00163   yhitList.clear();
00164 }
00165 
00166 // Class SiClusters::Cluster
00167 
00168 inline SiClusters::Cluster::Cluster (Point p, int n, int ns)
00169     : flag(0), number(n), num_noise(ns), pos(p) {}
00170 
00171 inline SiClusters::Cluster::Cluster (Point p, int n)
00172     : flag(0), number(n), num_noise(0), pos(p) {}
00173 
00174 #endif
00175 

Generated at Wed Nov 21 12:20:45 2001 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000