00001
00002
00003
00004
00005 #ifndef __CAL_RECON_H
00006 #define __CAL_RECON_H 1
00007
00008 #include "reconstruction/Recon.h"
00009
00010 #include "geometry/Vector.h"
00011 #include "geometry/Point.h"
00012
00013 #include <vector>
00014
00015 class CsIData;
00016 class ReconVisitor;
00017 class CalModules;
00018 namespace gui { class DisplayRep; }
00019
00020 class CalRecon : public Recon
00021 {
00022
00023 public:
00024 CalRecon ();
00025
00026 ~CalRecon ();
00027
00028
00029 void getParameters ();
00030
00031 void accept (ReconVisitor& rv);
00032
00033 void reconstruct (const CsIData* csiData);
00034
00035 void clear ();
00036
00037 void draw (gui::DisplayRep& v);
00038
00039 void moments_anal (int counter);
00040
00041 double RLinePnt (Point xPos);
00042
00043 Point center () { return(m_cen); }
00044
00045 Vector direction () { return(m_dir); }
00046
00047 std::vector<double> Get_Elayer() { return E_layer; }
00048
00049
00050 private:
00051 unsigned int num_layers;
00052 int s_xNum;
00053
00054 double mod_width, s_xtal_gap, s_rad_len, s_wall_thickness, s_wall_gap;
00055
00056 double light_att;
00057 const char* calmat;
00058
00059 float chisq;
00060
00061 double moment[3], moment1, moment2, moment3;
00062
00063 double m_Rsq_mean;
00064 double eTotal;
00065
00066 int numXtals, ntothits;
00067
00068 LbldData::iterator i_CsI_Energy, i_CsI_Etop, i_CsI_Ebottom, i_CsI_Esides, i_CsI_S_or_B; LbldData::iterator i_CsI_Xtals, i_CsI_mean_X, i_CsI_mean_Y, i_CsI_mean_Z;
00069 LbldData::iterator i_CsI_dir_X, i_CsI_dir_Y, i_CsI_dir_Z, i_CsI_chisq, i_CsI_mips, i_CsI_Xtals_trunc;
00070 LbldData::iterator i_CsI_Xtals_keep, i_CsI_Rsq_mean, i_CsI_D3Mean;
00071 LbldData::iterator i_CsI_E_moment, i_CsI_E_disp, i_CsI_moment1, i_CsI_moment2, i_CsI_moment3;
00072 LbldData::iterator i_CsI_MaxMod, i_CsI_ModXtals;
00073 std::vector<LbldData::iterator>i_CsI_eLayer;
00074 LbldData::iterator i_Diode_Energy;
00075
00076
00077
00078 CalModules *calModules;
00079
00080 Point bCenter;
00081
00082 Vector principal_axis[3];
00083
00084 Point m_cen;
00085
00086 Vector m_dir;
00087
00088
00089
00090 std::vector<int>Use_R;
00091 std::vector<int>numlayhits;
00092 std::vector<double>E_hits;
00093 std::vector<double>E_layer;
00094
00095 std::vector< std::vector< class Point >* > LRpos;
00096 std::vector <char*> layerLabel;
00097
00098 };
00099
00100
00101 #endif