00001 #include "emcPacketProcessorv1.h"
00002 #include "packet.h"
00003 #include "packet_emc.h"
00004 #include "emcTowerContent.h"
00005 #include "emcTowerContainer.h"
00006 #include "emcDataError.h"
00007
00008 ClassImp(emcPacketProcessorv1)
00009
00010 namespace {
00011
00012 void checkData(emcTowerContainer& towers, int imin, int imax)
00013 {
00014 for ( int i = imin; i <= imax; ++i )
00015 {
00016 emcTowerContent* tower = towers.getTower(i);
00017
00018 int dataerror = 0;
00019
00020
00021
00022 int hgpost,lgpost,hgpre,lgpre,tac;
00023
00024 hgpost = tower->HGPost();
00025 hgpre = tower->HGPre();
00026 lgpost = tower->LGPost();
00027 lgpre = tower->LGPre();
00028 tac = tower->TAC();
00029
00030 if ( hgpre <= emcDataError::HG_MIN() ||
00031 hgpre>=emcDataError::HG_MAX() )
00032 {
00033 dataerror |= emcDataError::HG_PRE_OUT();
00034 }
00035 if ( hgpost <= emcDataError::HG_MIN() ||
00036 hgpost>=emcDataError::HG_MAX() )
00037 {
00038 dataerror |= emcDataError::HG_POST_OUT();
00039 }
00040 if ( lgpre <= emcDataError::LG_MIN() ||
00041 lgpre>=emcDataError::LG_MAX() )
00042 {
00043 dataerror |= emcDataError::LG_PRE_OUT();
00044 }
00045 if ( lgpost <= emcDataError::LG_MIN() ||
00046 lgpost>=emcDataError::LG_MAX() )
00047 {
00048 dataerror |= emcDataError::LG_POST_OUT();
00049 }
00050 if ( tac <= emcDataError::TAC_MIN() ||
00051 tac>=emcDataError::TAC_MAX() )
00052 {
00053 dataerror |= emcDataError::TAC_OUT();
00054 }
00055
00056 tower->SetDataError(dataerror);
00057 }
00058 }
00059 }
00060
00061 using std::cout;
00062 using std::cerr;
00063 using std::endl;
00064
00065
00066 emcPacketProcessorv1::emcPacketProcessorv1()
00067 {
00068 fDataArray = new int*[6];
00069 for ( size_t i = 0 ; i < 6 ; i++)
00070 {
00071 fDataArray[i] = new int[144];
00072 }
00073 }
00074
00075
00076 emcPacketProcessorv1::~emcPacketProcessorv1()
00077 {
00078 for ( size_t i = 0 ; i < 6 ; i++)
00079 {
00080 delete[] fDataArray[i];
00081 }
00082 delete[] fDataArray;
00083 }
00084
00085
00086 void
00087 emcPacketProcessorv1::identify(std::ostream& os) const
00088 {
00089 os << "emcPacketProcessorv1::identify" << std::endl;
00090 }
00091
00092
00093 int
00094 emcPacketProcessorv1::isValid() const
00095 {
00096 return 1;
00097 }
00098
00099
00100 bool
00101 emcPacketProcessorv1::process(const Packet& packet, emcTowerContainer& towers)
00102 {
00103
00104
00105
00106
00107
00108 Packet& ncpacket = const_cast<Packet&>(packet);
00109
00110 Packet_emc* p = dynamic_cast<Packet_emc*>(&ncpacket);
00111 if (!p)
00112 {
00113 cerr << "<E> " << __FILE__ << " " << __LINE__
00114 << " Cannot convert Packet to Packet_emc : ";
00115 ncpacket.identify(cerr);
00116 return false;
00117 }
00118
00119 int n = p->filliList6x144(fDataArray,0, 0, -4096);
00120
00121 int ntowers = towers.size();
00122
00123 int imin = ntowers;
00124
00125 for ( int i = 0 ; i < n ; i++ )
00126 {
00127 emcTowerContent* t = towers.addTower(ntowers);
00128
00129 t->SetID(p->getIdentifier()-8001,fDataArray[5][i]);
00130
00131 t->SetRaw(4095 - fDataArray[1][i],
00132 4095 - fDataArray[3][i],
00133 4095 - fDataArray[2][i],
00134 4095 - fDataArray[4][i],
00135 4095 - fDataArray[0][i],
00136 p->iValue(1,"AMU"),
00137 p->iValue(2,"AMU"),
00138 p->iValue(0,"AMU"),
00139 p->iValue(0,"BCLK")
00140 );
00141
00142 ++ntowers;
00143 }
00144
00145 int imax = ntowers-1;
00146
00147 checkData(towers,imin,imax);
00148
00149 return true;
00150 }
00151
00152
00153 void
00154 emcPacketProcessorv1::Reset()
00155 {
00156
00157 }