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 }