emcOMPedestal5FEMT.h

Go to the documentation of this file.
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   // Get the name of the low-level Objy persistent class we are dealing with.
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   // we advertize here that we can only handle a given
00073   // number of object types, e.g. emcPedestalFEM only.
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   // we advertize here that we can only handle a given
00097   // number of object types, e.g. emcPedestalFEM only.
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       // Get the PdbEmcPedestal5 object for channel i from the bank
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       // it's important to group the following lines (as it's an
00149       // append for the same channel).
00150       // FIXME: there's plenty of improvement to do with this
00151       // nasty set interface !
00152       // (ideas are welcome)
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