00001
00002
00003
00004
00005
00006
00007
00008
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
00024 class Point;
00025 class Vector;
00026
00027
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();
00047 TrackerRecon (GlastRecon* c);
00048 ~TrackerRecon ();
00049 void initialize();
00050
00051
00052 Point center () {return(x1);}
00053 Vector direction () {return(t1);}
00054 const inline CalRecon* getCalRecon() {return cal;}
00055
00056
00057 std::vector<KalTrack> xtrackList;
00058 std::vector<KalTrack> ytrackList;
00059
00060
00061 void accept (ReconVisitor& d);
00062 void clear ();
00063 void draw (gui::DisplayRep& v);
00064
00065 void reconstruct(const SiData* stripData);
00066
00067
00068
00069
00070 SiClusters* getClusters ();
00071
00072
00073 double getCsICorrEnergy () const;
00074
00075
00076 GFgamma* gammaFit ();
00077
00078
00079
00080
00081
00082 class Parameters {
00083 public:
00084 int num_convs;
00085 float conv_gap;
00086 float conv_rad_len;
00087 float si_thickness;
00088 float tower_width;
00089
00090 protected:
00091
00092 void initialize ();
00093
00094
00095
00096 friend class TrackerRecon;
00097 };
00098
00099
00100 static const Parameters& params ();
00101
00102
00103 enum configuration {BASELINE, SUPERGLAST};
00104
00105 private:
00106
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
00121
00122
00123
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
00134
00135 void iniTrackerRecon();
00136 void iniClusters(const SiData*);
00137 void iniCalorimeterInput();
00138
00139
00140 void moreGlastTracks();
00141 void loadResultsIntoData(const SiData*);
00142
00143
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
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
00182 LbldData::iterator i_Kal_Energy;
00183 LbldData::iterator i_Kal_Energy_X;
00184 LbldData::iterator i_Kal_Energy_Y;
00185
00186
00187 LbldData::iterator i_No_XTrks;
00188 LbldData::iterator i_No_YTrks;
00189 LbldData::iterator i_No_Trks;
00190
00191
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
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
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
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
00289 LbldData::iterator i_FitSide_nXused, i_FitSide_nYused;
00290
00291
00292 Point x1;
00293 Vector t1;
00294 Vector t0;
00295 Vector t2;
00296 Point x0;
00297 Point x2;
00298
00299
00300 SiClusters* _mclsData;
00301 int m_totalHits;
00302 int m_firstConvLayer;
00303 int m_numLayersHit;
00304
00305
00306 const CalRecon* cal;
00307 double m_CsIEnergy;
00308 double m_CsICorrEnergy;
00309 Point m_aveCalHit;
00310
00311
00312 int m_firstLayer;
00313 int m_fitType;
00314 double m_xFactor;
00315 double m_yFactor;
00316
00317
00318 Point clusterFitPos;
00319 Vector clusterFitDir;
00320 int nHitsUsedCluster;
00321
00322
00323
00324 ActiveDistance* m_activeDist;
00325 EnergyCorrection* m_Ecorr;
00326 ExtraHits* m_extraHits;
00327 TowerBoundaries* m_twrBounds;
00328 TrackerVeto* m_tkrVeto;
00329
00330
00331
00332 static Parameters s_parms;
00333 };
00334
00335
00336
00337
00338
00339 inline const TrackerRecon::Parameters& TrackerRecon::params ()
00340 {
00341 return s_parms;
00342 }
00343
00344
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