CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/SimCalorimetry/EcalTrigPrimAlgos/src/EcalFenixAmplitudeFilter.cc

Go to the documentation of this file.
00001 #include <SimCalorimetry/EcalTrigPrimAlgos/interface/EcalFenixAmplitudeFilter.h>
00002 #include "CondFormats/EcalObjects/interface/EcalTPGWeightIdMap.h"
00003 #include "CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h"
00004 #include "CondFormats/EcalObjects/interface/EcalTPGGroups.h"
00005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00006 #include <iostream>
00007 
00008 EcalFenixAmplitudeFilter::EcalFenixAmplitudeFilter()
00009   :inputsAlreadyIn_(0), shift_(6) {
00010   }
00011 
00012 EcalFenixAmplitudeFilter::~EcalFenixAmplitudeFilter(){
00013 }
00014 
00015 int EcalFenixAmplitudeFilter::setInput(int input)
00016 {
00017   if(input>0X3FFFF)
00018     {
00019       std::cout<<"ERROR IN INPUT OF AMPLITUDE FILTER"<<std::endl;
00020       return -1;
00021     }
00022   if(inputsAlreadyIn_<5)
00023     {
00024       buffer_[inputsAlreadyIn_]=input;
00025       inputsAlreadyIn_++;
00026     }
00027   else
00028     {
00029       for(int i=0; i<4; i++) buffer_[i]=buffer_[i+1];
00030       buffer_[4]=input;
00031     }
00032   return 1;
00033 }
00034 
00035 void EcalFenixAmplitudeFilter::process(std::vector<int> &addout,std::vector<int> &output)
00036 {
00037   // test
00038   inputsAlreadyIn_=0;
00039   for (unsigned int i =0;i<5;i++) buffer_[i]=0;//FIXME: 5
00040   
00041   // test end
00042   
00043   for (unsigned int i =0;i<addout.size();i++){
00044     
00045     setInput(addout[i]);
00046     output[i]=process();
00047   }
00048   // shift the result by 1!
00049   for (unsigned int i=0 ; i<(output.size());i++){
00050     if (i!=output.size()-1) output[i]=output[i+1];
00051     else output[i]=0;
00052   }  
00053   return;
00054 }
00055 
00056 int EcalFenixAmplitudeFilter::process()
00057 {
00058   //UB FIXME: 5
00059   if(inputsAlreadyIn_<5) return 0;
00060   int output=0;
00061   for(int i=0; i<5; i++)
00062     {
00063       output+=(weights_[i]*buffer_[i])>>shift_;
00064     }
00065   if(output<0) output=0;
00066   if(output>0X3FFFF)  output=0X3FFFF;
00067   return output;
00068 }
00069 
00070 void EcalFenixAmplitudeFilter::setParameters(uint32_t raw,const EcalTPGWeightIdMap * ecaltpgWeightMap,const EcalTPGWeightGroup * ecaltpgWeightGroup)
00071 {
00072   uint32_t params_[5];
00073   const EcalTPGGroups::EcalTPGGroupsMap & groupmap = ecaltpgWeightGroup -> getMap();
00074   EcalTPGGroups::EcalTPGGroupsMapItr it = groupmap.find(raw);
00075   if (it!=groupmap.end()) {
00076     uint32_t weightid =(*it).second;
00077     const EcalTPGWeightIdMap::EcalTPGWeightMap & weightmap = ecaltpgWeightMap -> getMap();
00078     EcalTPGWeightIdMap::EcalTPGWeightMapItr itw = weightmap.find(weightid);
00079     (*itw).second.getValues(params_[0],params_[1],params_[2],params_[3],params_[4]);
00080     // we have to transform negative coded in 7 bits into negative coded in 32 bits
00081     // maybe this should go into the getValue method??
00082     for (int i=0;i<5;++i){
00083       weights_[i] = (params_[i] & 0x40) ?    (int)( params_[i] | 0xffffffc0) : (int)(params_[i]);
00084     }
00085   }
00086   else edm::LogWarning("EcalTPG")<<" could not find EcalTPGGroupsMap entry for "<<raw;
00087 }
00088 
00089 
00090 
00091