00001
00002 #include "CalRecon/CalRecLogs.h"
00003 #define LOGWIDTH 3.05
00004
00005
00006
00007 CalRecLog::CalRecLog(int ilayer, CalDetGeo::axis v, int icolumn,idents::ModuleId mod) :
00008 CalADCLog(ilayer,v,icolumn,mod)
00009
00010 {
00011 clear();
00012 }
00013
00014
00015 CalRecLog::CalRecLog(int ilayer, CalDetGeo::axis v, int icolumn) :
00016 CalADCLog(ilayer,v,icolumn)
00017
00018 {
00019 clear();
00020 }
00021
00022 double CalRecLog::asymmetry() const
00023
00024 {
00025 double asymmetry = 0.;
00026 if (m_pEnergy > 0 && m_nEnergy > 0)
00027 asymmetry = (m_pEnergy-m_nEnergy)/(m_pEnergy+m_nEnergy);
00028 return asymmetry;
00029 }
00030
00031 void CalRecLog::writeOut() const
00032
00033 {
00034 if(energy()>0){
00035 std::cout << " ID " << logID() << " - "<< modId()<<" " << layer()<<" "<< view()
00036 <<" " << column() << " ";
00037 std::cout << " E-+ " << energy() << " " << negEnergy() << " " << posEnergy() ;
00038 std::cout << " Asy " << asymmetry();
00039 std::cout << " Pos " << position().x() << " " << position().y() << " " << position().z();
00040 std::cout << "\n";
00041 }
00042 }
00043
00044 void CalRecLog::draw(gui::DisplayRep& v) const
00045
00046 {
00047 double MINENE = 10.;
00048 double FACTOR = 0.1;
00049
00050 double delta = 0.2*LOGWIDTH;
00051 double x = position().x();
00052 double y = position().y();
00053 double z = position().z();
00054 double ene = energy();
00055 if (ene <= MINENE) return;
00056
00057 v.setColor("black");
00058 v.moveTo(Point(x-delta,y,z));
00059 v.lineTo(Point(x+delta,y,z));
00060 v.moveTo(Point(x,y-delta,z));
00061 v.lineTo(Point(x,y+delta,z));
00062
00063 v.moveTo(Point(x,y,z));
00064 v.lineTo(Point(x,y,z-log(FACTOR*ene)));
00065 }
00066
00067
00068 void CalRecLog::clear()
00069
00070 {
00071 CalADCLog::clear();
00072
00073 for (int irange = 0; irange < CALNRANGES; irange++) {
00074 m_negEnergy[irange] = 0;
00075 m_posEnergy[irange] = 0;
00076 }
00077
00078 m_nEnergy = 0.;
00079 m_pEnergy = 0.;
00080 m_position = Point(0.,0.,0.);
00081 }
00082
00083
00084
00085 void CalRecLogs::ini(int nModX, int nModY, int nLogs, int nLayers, int nViews)
00086
00087 {
00088 for (int iy = 1; iy <= nModY; iy++){
00089 for (int ix = 1; ix <= nModX; ix++){
00090 idents::ModuleId mod(ix,iy);
00091
00092 for (int ilayer = 0; ilayer < nLayers; ilayer++) {
00093 for (int v=0; v < nViews; v++){
00094 CalDetGeo::axis view = CalDetGeo::makeAxis(v);
00095 for (int ilog = 0; ilog < nLogs; ilog++) {
00096 m_List.push_back(new CalRecLog(ilayer,view,ilog,mod));
00097 }
00098 }
00099 }
00100 }
00101 }
00102 }
00103
00104 CalRecLogs::~CalRecLogs()
00105
00106 {
00107 if(m_calDisp) m_calDisp->clearLogsDisp();
00108 for (int ilog = 0; ilog < m_List.size(); ilog++) delete m_List[ilog];
00109 }
00110
00111 void CalRecLogs::clear()
00112
00113 {
00114 for (int ilog = 0; ilog < m_List.size(); ilog++) {
00115 m_List[ilog]->clear();
00116 }
00117 }
00118
00119 CalRecLog* CalRecLogs::getLogID(int logID) const
00120
00121 {
00122 int jlog = -1;
00123 for (int ilog = 0; ilog < m_List.size(); ilog++) {
00124 if (m_List[ilog]->logID() == logID) {
00125 jlog = ilog;
00126 break;
00127 }
00128 }
00129 return m_List[jlog];
00130 }
00131
00132
00133 void CalRecLogs::writeOut() const
00134
00135 {
00136 if (m_List.size()<=0) return;
00137
00138 std::cout << " CalRecLogs " << m_List.size() <<"\n";
00139 for (int i = 0; i < m_List.size();i++) {
00140 m_List[i]->writeOut();
00141 }
00142 }
00143
00144 void CalRecLogs::draw(gui::DisplayRep& v) const
00145
00146 {
00147 if (m_List.size() <=0) return;
00148 for (int i = 0; i < m_List.size();i++) m_List[i]->draw(v);
00149 }