emcOMWalkTofFEMT.h

Go to the documentation of this file.
00001 #ifndef __EMCOMWALKTOFFEM_H__
00002 #define __EMCOMWALKTOFFEM_H__
00003 
00004 #ifndef __EMCOMCALFEMT_H__
00005 #include "emcOMCalFEMT.h"
00006 #endif
00007 
00013 template <class T>
00014 class emcOMWalkTofFEMT : public emcOMCalFEMT<T>
00015 {
00016 
00017 public:
00018   emcOMWalkTofFEMT(const char* name, const char* title)
00019     : emcOMCalFEMT<T>(name, title)
00020   { }
00021 
00022   virtual ~emcOMWalkTofFEMT()
00023   { }
00024 
00026   virtual bool CanRead(const emcManageable& object) const;
00027 
00029   virtual bool CanWrite(const emcManageable& object) const;
00030 
00032   virtual void FromPdbCalBank(emcCalFEM& calfem, PdbCalBank& bank);
00033 
00035   virtual std::string GetPersistentClassName(void) const
00036   {
00037     return "PdbEmcWalkTofBank";
00038   }
00039 
00041   virtual void ToPdbCalBank(const emcCalFEM& calfem, PdbCalBank& bank);
00042 
00043 };
00044 
00045 //_____________________________________________________________________________
00046 //_____________________________________________________________________________
00047 //_____________________________________________________________________________
00048 
00049 #ifndef __EMCWALKTOFFEM_H__
00050 #include "emcWalkTofFEM.h"
00051 #endif
00052 #ifndef __EMCINDEXER_H__
00053 #include "EmcIndexer.h"
00054 #endif
00055 #include "PdbCalBank.hh"
00056 #include "PdbEmcWalkTof.hh"
00057 
00058 #include <cassert>
00059 #include <iostream>
00060 #include <fstream>
00061 #include <cstdio>
00062 
00063 //_____________________________________________________________________________
00064 template <class T>
00065 bool
00066 emcOMWalkTofFEMT<T>::CanRead(const emcManageable& object) const
00067 {
00068   // we advertize here that we can only handle a given
00069   // number of object types, e.g. emcWalkTofFEM only.
00070 
00071   if ( object.GetSource() != storage() )
00072     {
00073       return false;
00074     }
00075 
00076   const emcManageable* object_ptr = &object;
00077   const emcWalkTofFEM* test = dynamic_cast<const emcWalkTofFEM*>(object_ptr);
00078 
00079   if (test)
00080     {
00081       return true;
00082     }
00083   return false;
00084 }
00085 
00086 //_____________________________________________________________________________
00087 template <class T>
00088 bool
00089 emcOMWalkTofFEMT<T>::CanWrite(const emcManageable& object) const
00090 {
00091   // we advertize here that we can only handle a given
00092   // number of object types, e.g. emcWalkTofFEM only.
00093 
00094   if ( object.GetDestination() != storage() )
00095     {
00096       return false;
00097     }
00098 
00099   const emcManageable* object_ptr = &object;
00100   const emcWalkTofFEM* test = dynamic_cast<const emcWalkTofFEM*>(object_ptr);
00101 
00102   if (test)
00103     {
00104       return true;
00105     }
00106   return false;
00107 }
00108 
00109 
00110 //_____________________________________________________________________________
00111 template<class T>
00112 void
00113 emcOMWalkTofFEMT<T>::FromPdbCalBank(emcCalFEM& calfem, PdbCalBank& emcBank)
00114 {
00115   size_t thesize = emcBank.getLength();
00116   assert (thesize == 144);
00117   size_t i;
00118   float value1;
00119   float value2;
00120 
00121   PdbEmcWalkTof* pdblct;
00122   emcWalkTofFEM* tofFEM = dynamic_cast<emcWalkTofFEM*>(&calfem);
00123   tofFEM->Reset();
00124 
00125 
00126   for ( i = 0; i < thesize; i++)
00127     {
00128       pdblct = dynamic_cast<PdbEmcWalkTof*>(&(emcBank.getEntry(i)));
00129       assert(pdblct != 0);
00130       pdblct->GetWalkTofs(value1, value2);
00131       tofFEM->AppendOneChannel(value1, value2);
00132     }
00133 }
00134 
00135 //_____________________________________________________________________________
00136 template<class T>
00137 void
00138 emcOMWalkTofFEMT<T>::ToPdbCalBank(const emcCalFEM& calfem, PdbCalBank& emcBank)
00139 {
00140   PdbEmcWalkTof* pdblct;
00141 
00142   int i;
00143   size_t thesize = calfem.GetNumberOfChannels();
00144   assert(thesize == 144);
00145 
00146   emcBank.setLength(thesize);
00147 
00148   const emcWalkTofFEM* tofFEM = dynamic_cast<const emcWalkTofFEM*>(&calfem);
00149   assert(tofFEM != 0);
00150   assert(tofFEM->GetNumberOfChannels() == 144);
00151 
00152   for ( i = 0; i < 144; i++)
00153     {
00154       pdblct = (PdbEmcWalkTof*) & (emcBank.getEntry(i));
00155       assert(pdblct != 0);
00156       pdblct->SetWalkTofs(tofFEM->getValue(i, 0), tofFEM->getValue(i, 1));
00157     }
00158 }
00159 
00160 #endif