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
00069
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
00092
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