emcOMQAFEMT.h

Go to the documentation of this file.
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   // we advertize here that we can only handle a given
00076   // number of object types, e.g. emcQAFEM only.
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   // we advertize here that we can only handle a given
00099   // number of object types, e.g. emcQAFEM only.
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   /* Fills calfem from the values in bank. */
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   // Set everything to zero
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   // Fills only the relevant ones
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