00001 #ifndef __EMCOMQAFEMT_H__
00002 #define __EMCOMQAFEMT_H__
00003
00004 #ifndef __EMCOMCALFEMT_H__
00005 #include "emcOMCalFEMT.h"
00006 #endif
00007
00008 #include <string>
00009 #include <map>
00010 #include <vector>
00011
00017 template<class T>
00018 class emcOMQAFEMT : public emcOMCalFEMT<T>
00019 {
00020
00021 public:
00022 emcOMQAFEMT(const char* name, const char* title) :
00023 emcOMCalFEMT<T>(name, title)
00024 {}
00025
00026 virtual ~emcOMQAFEMT()
00027 {}
00028
00030 virtual bool CanRead(const emcManageable& object) const;
00031
00033 virtual bool CanWrite(const emcManageable& object) const;
00034
00036 virtual void FromPdbCalBank(emcCalFEM& calfem, PdbCalBank& bank);
00037
00039 virtual std::string GetPersistentClassName(void) const
00040 {
00041 return "PdbEmcLCTofBank";
00042 }
00043
00045 virtual void ToPdbCalBank(const emcCalFEM& calfem, PdbCalBank& bank);
00046
00047 private:
00048 std::map<std::string, std::vector<int> > fCollectErrors;
00049 };
00050
00051
00052
00053
00054
00055 #include "PdbCalBank.hh"
00056 #include "PdbEmcLCTof.hh"
00057
00058 #ifndef __EMCINDEXER_H__
00059 #include "EmcIndexer.h"
00060 #endif
00061 #ifndef __EMCQAFEM_H__
00062 #include "emcQAFEM.h"
00063 #endif
00064
00065 #include <cassert>
00066 #include <ctime>
00067 #include <string>
00068 #include <fstream>
00069
00070
00071 template<class T>
00072 bool
00073 emcOMQAFEMT<T>::CanRead(const emcManageable& object) const
00074 {
00075
00076
00077
00078 if ( object.GetSource() != storage() )
00079 {
00080 return false;
00081 }
00082
00083 const emcManageable* object_ptr = &object;
00084 const emcQAFEM* test = dynamic_cast<const emcQAFEM*>(object_ptr);
00085
00086 if (test)
00087 {
00088 return true;
00089 }
00090 return false;
00091 }
00092
00093
00094 template<class T>
00095 bool
00096 emcOMQAFEMT<T>::CanWrite(const emcManageable& object) const
00097 {
00098
00099
00100
00101 if ( object.GetDestination() != storage() )
00102 {
00103 return false;
00104 }
00105
00106 const emcManageable* object_ptr = &object;
00107 const emcQAFEM* test = dynamic_cast<const emcQAFEM*>(object_ptr);
00108
00109 if (test)
00110 {
00111 return true;
00112 }
00113 return false;
00114 }
00115
00116
00117 template<class T>
00118 void
00119 emcOMQAFEMT<T>::FromPdbCalBank(emcCalFEM& calfem, PdbCalBank& emcBank)
00120 {
00121
00122 size_t thesize = emcBank.getLength();
00123 PdbEmcLCTof* pdbqa;
00124 emcQAFEM* qaFEM = dynamic_cast<emcQAFEM*>(&calfem);
00125 assert(qaFEM != 0);
00126 qaFEM->Reset();
00127
00128 size_t i;
00129 for ( i = 0; i < thesize; i++)
00130 {
00131 pdbqa = dynamic_cast<PdbEmcLCTof*>(&(emcBank.getEntry(i)));
00132 INT32 error, warning;
00133 float value1, value2;
00134 pdbqa->GetLCTofs(value1, value2);
00135 error = static_cast<INT32>(value1);
00136 warning = static_cast<INT32>(value2);
00137 qaFEM->AppendOneChannel(i, error, warning);
00138 }
00139 }
00140
00141
00142 template<class T>
00143 void
00144 emcOMQAFEMT<T>::ToPdbCalBank(const emcCalFEM& calfem, PdbCalBank& emcBank)
00145 {
00146 PdbEmcLCTof* pdbqa;
00147
00148 size_t thesize = 144;
00149
00150 emcBank.setLength(thesize);
00151
00152 const emcQAFEM* qaFEM = dynamic_cast<const emcQAFEM*>(&calfem);
00153 assert(qaFEM != 0);
00154
00155 emcQAFEM fem(*qaFEM);
00156
00157 size_t i = 0;
00158 int channel;
00159 INT32 error, warning;
00160 float value1, value2;
00161
00162 fem.First();
00163
00164
00165 for ( i = 0; i < thesize; i++ )
00166 {
00167 pdbqa = dynamic_cast<PdbEmcLCTof*>(&(emcBank.getEntry(i)));
00168 pdbqa->SetLCTofs(0.0, 0.0);
00169 }
00170
00171
00172 while ( fem.Next(channel, error, warning) )
00173 {
00174 pdbqa = dynamic_cast<PdbEmcLCTof*>(&(emcBank.getEntry(channel)));
00175 assert(pdbqa != 0);
00176 value1 = static_cast<float>(error);
00177 value2 = static_cast<float>(warning);
00178 pdbqa->SetLCTofs(value1, value2);
00179 }
00180 }
00181
00182 #endif