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