00001 #ifndef __EMCOMPEDESTALFEM_H__
00002 #define __EMCOMPEDESTALFEM_H__
00003
00004 #ifndef __EMCOMCALFEMT_H__
00005 #include "emcOMCalFEMT.h"
00006 #endif
00007
00013 template <class T>
00014 class emcOMPedestalFEMT : public emcOMCalFEMT<T>
00015 {
00016 public:
00017 emcOMPedestalFEMT(const char* name, const char* title)
00018 : emcOMCalFEMT<T>(name, title)
00019 { }
00020 virtual ~emcOMPedestalFEMT()
00021 { }
00022
00024 virtual bool CanRead(const emcManageable& object) const;
00025
00027 virtual bool CanWrite(const emcManageable& object) const;
00028
00030 virtual void FromPdbCalBank(emcCalFEM& calfem, PdbCalBank& bank);
00031
00032
00033
00034 virtual std::string GetPersistentClassName(void) const
00035 {
00036 return "PdbEmcPedestalBank";
00037 }
00038
00040 virtual void ToPdbCalBank(const emcCalFEM& calfem, PdbCalBank& bank);
00041 };
00042
00043
00044
00045
00046
00047 #ifndef __EMCPEDESTALFEM_H__
00048 #include "emcPedestalFEM.h"
00049 #endif
00050 #ifndef __EMCINDEXER_H__
00051 #include "EmcIndexer.h"
00052 #endif
00053
00054 #include "PdbCalBank.hh"
00055 #include "PdbEmcPedestal.hh"
00056
00057 #include <iostream>
00058 #include <fstream>
00059 #include <cassert>
00060 #include <cstdio>
00061
00062
00063 template <class T>
00064 bool
00065 emcOMPedestalFEMT<T>::CanRead(const emcManageable& object) const
00066 {
00067
00068
00069
00070 if ( object.GetSource() != storage() )
00071 {
00072 return false;
00073 }
00074
00075 const emcManageable* object_ptr = &object;
00076 const emcPedestalFEM* test = dynamic_cast<const emcPedestalFEM*>(object_ptr);
00077
00078 if (test && test->Version() == 0)
00079 {
00080 return true;
00081 }
00082 return false;
00083 }
00084
00085
00086
00087 template <class T>
00088 bool
00089 emcOMPedestalFEMT<T>::CanWrite(const emcManageable& object) const
00090 {
00091
00092
00093
00094 if ( object.GetDestination() != storage() )
00095 {
00096 return false;
00097 }
00098
00099 const emcManageable* object_ptr = &object;
00100 const emcPedestalFEM* test = dynamic_cast<const emcPedestalFEM*>(object_ptr);
00101
00102 if (test && test->Version() == 0)
00103 {
00104 return true;
00105 }
00106 return false;
00107 }
00108
00109
00110 template<class T>
00111 void
00112 emcOMPedestalFEMT<T>::FromPdbCalBank(emcCalFEM& calfem, PdbCalBank& emcbank)
00113 {
00114 assert(calfem.Version() == 0);
00115
00116 int thesize = emcbank.getLength();
00117
00118 assert (thesize == 144);
00119
00120 int i, amu;
00121 int low, high, tac;
00122 PdbEmcPedestal* pdbped;
00123 emcPedestalFEM* pedFEM = dynamic_cast<emcPedestalFEM*>(&calfem);
00124 assert(pedFEM != 0);
00125
00126 emcPedestalFEM::AmuVector vlow(64), vhigh(64), vtac(64);
00127
00128 for ( i = 0; i < thesize; i ++ )
00129 {
00130
00131
00132 pdbped = dynamic_cast<PdbEmcPedestal*>(&(emcbank.getEntry(i)));
00133 for ( amu = 0; amu < 64; amu ++)
00134 {
00135 pdbped->GetValues(amu, low, high, tac);
00136 vlow[amu] = low;
00137 vhigh[amu] = high;
00138 vtac[amu] = tac;
00139 }
00140
00141
00142
00143
00144
00145 pedFEM->AppendOneChannel("LG_Pre-Post", vlow);
00146 pedFEM->AppendOneChannel("HG_Pre-Post", vhigh);
00147 pedFEM->AppendOneChannel("TAC", vtac);
00148 }
00149 }
00150
00151
00152 template<class T>
00153 void
00154 emcOMPedestalFEMT<T>::ToPdbCalBank(const emcCalFEM& calfem,
00155 PdbCalBank& emcBank)
00156 {
00157 assert(calfem.Version() == 0);
00158
00159 size_t thesize = calfem.GetNumberOfChannels();
00160 assert(thesize == 144);
00161
00162 emcBank.setLength(thesize);
00163
00164 PdbEmcPedestal* pdbped;
00165 const emcPedestalFEM* pedFEM = dynamic_cast<const emcPedestalFEM*>(&calfem);
00166 assert(pedFEM != 0);
00167
00168 int i, amu;
00169 int low, high, tac;
00170
00171 for ( i = 0; i < 144; i++ )
00172 {
00173 pdbped = (PdbEmcPedestal*) & (emcBank.getEntry(i));
00174 assert(pdbped != 0);
00175 for ( amu = 0; amu < 64; amu++ )
00176 {
00177 low = static_cast<int>(pedFEM->getValue(i, amu, "LG_Pre-Post"));
00178 high = static_cast<int>(pedFEM->getValue(i, amu, "HG_Pre-Post"));
00179 tac = static_cast<int>(pedFEM->getValue(i, amu, "TAC"));
00180 pdbped->Set(amu, low, high, tac);
00181 }
00182 }
00183 }
00184
00185 #endif