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

TrackerRecon.h

Go to the documentation of this file.
00001 //-------------------------------------------------------------------
00002 //
00003 //     TrackerRecon:
00004 //
00005 //          Steers the Silicon-Tracker Reconstruction    
00006 //
00007 //                    Bill Atwood
00008 //                    B. Atwood, JA Hernando, Santa Cruz, 02/05/99
00009 //
00010 //-------------------------------------------------------------------
00011 
00012 #ifndef __TRACKERRECON_H
00013 #define __TRACKERRECON_H 1
00014 
00015 #include "reconstruction/Recon.h"
00016 #include "data/SiData.h"
00017 #include "reconstruction/CalRecon.h"
00018 #include "reconstruction/MCRecon.h"
00019 #include "geometry/Ray.h"
00020 #include "reconstruction/GlastFit.h"
00021 #include "reconstruction/KalFit.h"
00022 
00023 // forward declarations
00024 class Point;
00025 class Vector;
00026 //class CalRecon;
00027 // class GlastFit;
00028 class SiClusters;
00029 class ReconVisitor;
00030 class GlastFit;
00031 class GlastFit;
00032 class GlastRecon;
00033 class GFpair;
00034 class GFgamma; 
00035 class GFbase;
00036 class ActiveDistance;
00037 class EnergyCorrection;
00038 class ExtraHits;
00039 class TowerBoundaries;
00040 class TrackerVeto;
00041 
00042 class TrackerRecon : public Recon
00043 {
00044 public:
00045 
00046     TrackerRecon(); // test constructor, tracker only
00047     TrackerRecon (GlastRecon* c);    
00048     ~TrackerRecon ();
00049     void initialize();
00050    
00051         // access functions
00052     Point center () {return(x1);}
00053     Vector direction () {return(t1);}
00054     const inline CalRecon* getCalRecon() {return cal;}
00055         
00056         // Kalman Track list
00057     std::vector<KalTrack> xtrackList;
00058     std::vector<KalTrack> ytrackList;
00059 
00060         // operations
00061     void accept (ReconVisitor& d);
00062     void clear ();
00063     void draw (gui::DisplayRep& v);
00064     // Do the Tracker Reconstruction
00065     void reconstruct(const SiData* stripData);
00066 
00067     // access methods
00068 
00069     // access the silicon cluster finding data
00070     SiClusters* getClusters ();
00071 
00072     // access the best CsICorrEnergy estimate
00073     double  getCsICorrEnergy () const;
00074 
00075     // provide access to the GlastFit gamma reconstruction tracks
00076     GFgamma*    gammaFit ();
00077 
00078     // private structure - defines instrument parameters
00079     // HSG: 7/10/99
00080     // this is sketchy, but it won't change all of the calls
00081     // in TrackerRecon.cxx...(change it later)
00082     class   Parameters {
00083     public:
00084         int num_convs;          // number of converters
00085         float conv_gap;         // converter gap ?
00086         float conv_rad_len;     // radiation length of converters
00087         float si_thickness;     // thickness of the silicon
00088         float tower_width;      // width of a tower module
00089 
00090     protected:
00091         // initialize all of the parameters
00092         void    initialize ();
00093 
00094         // make TrackerRecon a friend so that only TrackerRecon
00095         // can do the initialization
00096         friend class TrackerRecon;
00097     };
00098 
00099     // provide access to the standard tracker parameters
00100     static const   Parameters& params ();
00101 
00102     // need for the Csi_corr_energy
00103     enum configuration {BASELINE, SUPERGLAST}; // need for the Csi_corr_energy
00104 
00105 private:
00106     //  Original selection of the best/pair GlastFit
00107     //----------------------------------------------
00108     GlastFit* bestTrkHypo (enum SiData::Axis axis, float numSigma,
00109                              float energy, int firstLayer);
00110     
00111     GlastFit* calTrkHypo  (enum SiData::Axis axis, float numSigma,
00112                              float energy, int firstLayer, const Point& calHit);
00113     
00114     GlastFit* pairTrkHypo (enum SiData::Axis axis, float numSigma,
00115                              GlastFit& bestFit);
00116     
00117     GlastFit* nextTrkHypo (enum SiData::Axis axis, float numSigma,
00118                              float energy, int firstLayer);
00119 
00120     // Kalman Filter Private Ntuple for debuging purposes (JAH 011399)
00121     // void KalPrivateTup();
00122     
00123     // Tracker Analysis functions
00124     //----------------------------
00125     double TAna_trackerVeto(double& xsigma, double& ysigma);
00126     double TAna_kink(double& pairKink,double& fitKinkN, double& pairKinkN);
00127     double TAna_densityHits(double& previousHits, double& nextHits);
00128     double TAna_towerBoundary(double& xboundary, double& yboundary);
00129     double TAna_activeDistance();
00130     double TAna_extraHits(double& nlayers, double& istHitCount, double& outHits, double& shwHits1, double& shwHits2);
00131     double TAna_corrEnergy(double shwHits1, double shwHits2, double boundary);
00132     
00133     // Original TrackerRecon
00134     //--------------------------------------
00135     void iniTrackerRecon();
00136     void iniClusters(const SiData*);
00137     void iniCalorimeterInput();
00138     
00139     
00140     void moreGlastTracks();
00141     void loadResultsIntoData(const SiData*);
00142 
00143     // Update TrackerRecon
00144     //-----------------------------------
00145     void RCreconstruct(const SiData*);
00146     
00147     bool seedCandidates(GFdata::type type);
00148     bool candidates(GFdata::type , GFdata::type seeds);
00149     void selectGamma(); 
00150     void selectParticle();
00151     
00152     bool findSeedCandidates(std::vector<GFdata>& candidates, GFdata::type type, SiData::Axis); 
00153     bool findSeedCandidates(std::vector<GFdata>& candidates, GFdata::type type, SiData::Axis, int iplane, int itower = 0);
00154     bool findCandidates(std::vector<GFdata>& candidates, const GFdata& Xcandidate, const GFdata& Ycandidate, GFdata::type type);
00155     GFdata GFconstructor(GFdata::type type, int ilayer, const Ray testRay, SiData::Axis axis = SiData::X);
00156     void incorporate(std::vector<GFdata>& candidates, const GFdata);
00157     
00158     double corrEnergy(int ilevel, enum configuration, int nShowerHits, double slope);
00159     Point createPRef(SiData::Axis axis, int ilayer, const Point& PIni);
00160     
00161     void loadTrackerRecon();
00162     void loadTuple(const SiData*);
00163         
00164     std::vector<GFdata> m_Xcandidates;
00165     std::vector<GFdata> m_Ycandidates;
00166     
00167     std::vector<GFdata> m_candidates;
00168     
00169     GFgamma* _mGFgamma;
00170     
00171 
00172     // Silicon Hits
00173     LbldData::iterator i_Conv_Layer_Hits;
00174     LbldData::iterator i_max_controller_hits;
00175     LbldData::iterator i_First_Conv_Layer;
00176     LbldData::iterator i_nConv_Layers_Hit;
00177     LbldData::iterator i_Conv_Layer_Hits_Gamma;
00178     LbldData::iterator i_nConv_Layers_Gamma;
00179     LbldData::iterator i_First_Conv_Layer_Gamma;
00180     
00181     // Tracker Reconstruction
00182     LbldData::iterator i_Kal_Energy;
00183     LbldData::iterator i_Kal_Energy_X;
00184     LbldData::iterator i_Kal_Energy_Y;
00185     
00186     // Event Reconstruction
00187     LbldData::iterator i_No_XTrks;
00188     LbldData::iterator i_No_YTrks;
00189     LbldData::iterator i_No_Trks;
00190     
00191     // Gamma quality
00192     LbldData::iterator i_fit_type;
00193     LbldData::iterator i_fit_topo;
00194     LbldData::iterator i_Chisq_1st;
00195     LbldData::iterator i_Chisq;
00196     LbldData::iterator i_No_Hits;
00197     LbldData::iterator i_No_SHits;
00198     LbldData::iterator i_No_Gaps;
00199     LbldData::iterator i_No_Gaps_1st;
00200     LbldData::iterator i_No_Noise;
00201     LbldData::iterator i_No_Noise_1st;
00202     LbldData::iterator i_qual_X;
00203     LbldData::iterator i_qual_Y;
00204     LbldData::iterator i_qual;
00205     
00206     // Pair reconstruction
00207     LbldData::iterator i_Fit_XNhits;
00208     LbldData::iterator i_Fit_YNhits;
00209     LbldData::iterator i_Fit_XChisq;
00210     LbldData::iterator i_Fit_YChisq;
00211     LbldData::iterator i_Fit_XChisq_1st;
00212     LbldData::iterator i_Fit_YChisq_1st;
00213     LbldData::iterator i_Fit_XKalThetaMS;
00214     LbldData::iterator i_Fit_YKalThetaMS;
00215     LbldData::iterator i_Fit_XKalEne;
00216     LbldData::iterator i_Fit_YKalEne;
00217     LbldData::iterator i_Fit_x0;
00218     LbldData::iterator i_Fit_y0;
00219     LbldData::iterator i_Fit_z0;
00220     LbldData::iterator i_Fit_xdir;
00221     LbldData::iterator i_Fit_ydir;
00222     LbldData::iterator i_Fit_zdir;
00223     
00224     LbldData::iterator i_Pair_XNhits;
00225     LbldData::iterator i_Pair_YNhits;
00226     LbldData::iterator i_Pair_XChisq;
00227     LbldData::iterator i_Pair_YChisq;
00228     LbldData::iterator i_Pair_XChisq_1st;
00229     LbldData::iterator i_Pair_YChisq_1st;
00230     LbldData::iterator i_Pair_XKalThetaMS;
00231     LbldData::iterator i_Pair_YKalThetaMS;
00232     LbldData::iterator i_Pair_XKalEne;
00233     LbldData::iterator i_Pair_YKalEne;
00234     LbldData::iterator i_Pair_x0;
00235     LbldData::iterator i_Pair_y0;
00236     LbldData::iterator i_Pair_z0;
00237     LbldData::iterator i_Pair_xdir;
00238     LbldData::iterator i_Pair_ydir;
00239     LbldData::iterator i_Pair_zdir;
00240     
00241     LbldData::iterator i_e_frac;
00242     LbldData::iterator i_errSlopeX;
00243     LbldData::iterator i_errSlopeY;
00244     LbldData::iterator i_weightXSlope;
00245     LbldData::iterator i_weightYSlope; 
00246     LbldData::iterator i_xeneXSlope;
00247     LbldData::iterator i_xeneYSlope;    
00248     
00249     // gamma reconstruction
00250     LbldData::iterator i_First_XHit;
00251     LbldData::iterator i_First_YHit;
00252     LbldData::iterator i_Diff_1st_Hit;
00253     LbldData::iterator i_Gamma_x0;
00254     LbldData::iterator i_Gamma_y0;
00255     LbldData::iterator i_Gamma_z0;
00256     LbldData::iterator i_Gamma_xdir;
00257     LbldData::iterator i_Gamma_ydir;
00258     LbldData::iterator i_Gamma_zdir;
00259     
00260     // analysis
00261     LbldData::iterator i_CsI_corr_Energy;
00262     LbldData::iterator i_1st_count;
00263     LbldData::iterator i_srp_hit_rat;
00264     LbldData::iterator i_out_hit_rat;
00265     LbldData::iterator i_activeDist;
00266     LbldData::iterator i_showerHits1;
00267     LbldData::iterator i_showerHits2;
00268 
00269     LbldData::iterator i_Gamma_DLT;
00270     LbldData::iterator i_Tower_Bnd;
00271     LbldData::iterator i_Fit_xv;
00272     LbldData::iterator i_Fit_yv;
00273     LbldData::iterator i_Zdiff_XY;
00274     LbldData::iterator i_Zdiff_plane;
00275     LbldData::iterator i_trkVeto_code;
00276     LbldData::iterator i_trkVeto_Xsigma;
00277     LbldData::iterator i_trkVeto_Ysigma;
00278 
00279     LbldData::iterator i_fit_kink;
00280     LbldData::iterator i_pair_kink;
00281     LbldData::iterator i_fit_kinkN;
00282     LbldData::iterator i_pair_kinkN;
00283     
00284     LbldData::iterator i_hits_previous;
00285     LbldData::iterator i_hits_first;
00286     LbldData::iterator i_hits_next;
00287 
00288     // HMA (GSFC) silicon clusters
00289     LbldData::iterator i_FitSide_nXused, i_FitSide_nYused;
00290 
00291     //  Common Data Members 
00292     Point x1;
00293     Vector t1;
00294     Vector t0;
00295     Vector t2;
00296     Point x0;
00297     Point x2;
00298     
00299     //  Si variables
00300     SiClusters* _mclsData;
00301     int m_totalHits;
00302     int m_firstConvLayer;
00303     int m_numLayersHit;
00304     
00305     //  Cal variables
00306     const CalRecon* cal;
00307     double m_CsIEnergy;
00308     double m_CsICorrEnergy;
00309     Point m_aveCalHit;
00310     
00311     // Internal Additional members 
00312     int m_firstLayer;
00313     int m_fitType;
00314     double m_xFactor;
00315     double m_yFactor; 
00316     
00317     // HMA (GSFC) variables used for clusters of silicon hits
00318     Point clusterFitPos;
00319     Vector clusterFitDir;
00320     int nHitsUsedCluster;
00321     
00322     // Analysis Objects 
00323     // ------------------------------------------------------------------------------
00324     ActiveDistance*     m_activeDist;   // object which handles Active_Dist comp.
00325     EnergyCorrection*   m_Ecorr;        // object which handles the energy correction
00326     ExtraHits*          m_extraHits;    // object which examines hit patterns
00327     TowerBoundaries*    m_twrBounds;    // object which examines twr boundaries
00328     TrackerVeto*        m_tkrVeto;      // object which examines tkr veto handling
00329     // ------------------------------------------------------------------------------
00330 
00331     // instrument-wide parameters
00332     static  Parameters  s_parms;
00333 };
00334 
00335 // inline declarations
00336 
00337 // TrackerRecon::Parameters class
00338 
00339 inline  const TrackerRecon::Parameters& TrackerRecon::params ()
00340 {
00341     return s_parms;
00342 }
00343 
00344 // TrackerRecon class
00345 
00346 inline  double  TrackerRecon::getCsICorrEnergy () const
00347 {
00348     return m_CsICorrEnergy;
00349 }
00350 
00351 inline  SiClusters* TrackerRecon::getClusters ()
00352 {
00353     return _mclsData;
00354 }
00355 
00356 #endif

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