emcTacPedFEM.C

Go to the documentation of this file.
00001 #include "emcTacPedFEM.h"
00002 #include "emcTracedValue.h"
00003 #include "emcCalFEMFactory.h"
00004 #include <string>
00005 #include <cmath>
00006 
00007 using namespace std;
00008 
00009 namespace
00010 {
00011   static string name = "emcTacPedFEM" ;
00012   static string title = "TAC Pedestal Drift" ;
00013   static string classname = "emcTacPedFEM" ;
00014 
00015   emcCalFEM* creator(int absPosition,
00016                      const PHTimeStamp& start,
00017                      const PHTimeStamp& end,
00018                      bool isDefault)
00019   {
00020     if ( isDefault )
00021       {
00022         return emcTacPedFEM::Default(absPosition,start,end);
00023       }
00024     else
00025       {
00026         return new emcTacPedFEM(absPosition,start,end);
00027       }
00028   }
00029 
00030   static bool r = emcCalFEMFactory::registerCreator("TacPeds",
00031                                                     creator);
00032 
00033 }
00034 
00035 //_____________________________________________________________________________
00036 emcTacPedFEM::emcTacPedFEM(int absPosition)
00037   : emcGainFEM(absPosition)
00038 {
00039   NameIt(name,title,classname) ;
00040 }
00041 
00042 //_____________________________________________________________________________
00043 emcTacPedFEM::emcTacPedFEM(int absPosition,
00044                        const PHTimeStamp& tStart, const PHTimeStamp& tEnd)
00045   : emcGainFEM(absPosition,tStart,tEnd)
00046 {
00047   NameIt(name,title,classname) ;
00048 }
00049 
00050 //_____________________________________________________________________________
00051 void
00052 emcTacPedFEM::AddNewItem(int ichannel, emcTracedValue* item)
00053 {
00054   if (item) {
00055     item->MakeConstant(true) ;
00056     emcTracedFEM::AddNewItem(ichannel,item) ;
00057   }
00058 }
00059 
00060 //_____________________________________________________________________________
00061 bool
00062 emcTacPedFEM::AreDifferent(float v1, float v2, float epsilon) const
00063 {
00064   float diff = fabs(v1-v2) ;
00065   return ( diff > epsilon ) ;
00066 }
00067 
00068 //_____________________________________________________________________________
00069 float 
00070 emcTacPedFEM::Compact(float epsilon)
00071 {
00072   size_t i ;
00073 
00074   int nitems = fNItems ;
00075 
00076   for ( i = 0 ; i < fItems.size() ; i++) {
00077     CompactOneChannelConstants(i,epsilon) ;
00078   }
00079 
00080   float compression = fNItems/static_cast<float>(nitems) ;
00081   return compression ;
00082 }
00083 
00084 //_____________________________________________________________________________
00085 emcTacPedFEM*
00086 emcTacPedFEM::Default(int absPosition, 
00087                     const PHTimeStamp& tStart, const PHTimeStamp& tEnd)
00088 {
00089   emcTacPedFEM* fem = new emcTacPedFEM(absPosition,tStart,tEnd) ;
00090 
00091   fem->SetNumberOfChannels(144) ;
00092   
00093   size_t i ;
00094   for ( i = 0 ; i < 144 ; i++ ) {
00095     fem->AddNewItem(i,new emcTracedValue(0,1,0)) ;
00096   }
00097 
00098   return fem ;
00099 
00100 }