- //
- // Created by ja on 8/4/15.
- //
-
- #include "TbUTCmsPerBeetle.h"
- #include <iostream>
- #include <cmath>
-
- using namespace TbUT;
- using namespace std;
-
- CmsPerBeetle::CmsPerBeetle(IChannelMaskProvider& p_masksProvider,double p_hitThreshold):
- m_masksProvider(p_masksProvider),
- m_channelNumber(RawData<>::getnChannelNumber()),
- m_hitThreshold(p_hitThreshold)
- {
- cout<<"create correlation per beetle"<<endl;
- initializeCorrectionMap();
- }
-
- void CmsPerBeetle::initializeCorrectionMap()
- {
- int channelPerBeetle=32;
- for (int channel=0;channel<m_channelNumber;channel+=channelPerBeetle)
- m_correctionPerBeetle.insert(std::make_pair(channel,0));
- }
-
- void CmsPerBeetle::processEvent(RawData<>* p_data, RawData<double> **p_output)
- {
- calculateCorrection(p_data);
- removeCM(p_data,p_output);
- }
-
- void CmsPerBeetle::calculateCorrection(RawData<>* p_inputData)
- {
- int channelPerBeetle=32;
- for(auto& mapIt : m_correctionPerBeetle)
- {
- int usedChannels=0;
- for(int channel=mapIt.first;channel<mapIt.first+channelPerBeetle;channel++)
- {
- auto signal=p_inputData->getSignal(channel);
- if(!m_masksProvider.isMasked(channel) && abs(signal) <m_hitThreshold){
- mapIt.second+=signal;
- usedChannels++;
- }
- }
- if(usedChannels) mapIt.second/=static_cast<double>(usedChannels);
- }
- }
-
- void CmsPerBeetle::removeCM(RawData<>* p_data, RawData<double> **p_output)
- {
- int channelPerBeetle=32;
- for(auto& mapIt : m_correctionPerBeetle)
- {
- for(int channel=mapIt.first;channel<mapIt.first+channelPerBeetle;channel++)
- {
- if(m_masksProvider.isMasked(channel)){
- double signalMaskedChannel=0;
- (*p_output)->setSignal(signalMaskedChannel);
- }else{
- double l_channelSignal=p_data->getSignal(channel)-mapIt.second;
- (*p_output)->setSignal(l_channelSignal);
- }
- }
-
- }
-
- }
-