00001 #include "TAPGeneratorFactory.h"
00002 #include "MaxBinAPGenerator.h"
00003 #include "TPulseIsland.h"
00004 #include "TAnalysedPulse.h"
00005 #include "EventNavigator.h"
00006 #include "SetupNavigator.h"
00007 #include <algorithm>
00008
00009
00010
00011
00012
00013 static bool IsTimeOrdered(TAnalysedPulse* a, TAnalysedPulse* b) {
00014
00015 return ( a->GetTime() < b->GetTime() );
00016 }
00017
00018
00019 MaxBinAPGenerator::MaxBinAPGenerator(TAPGeneratorOptions* opts)
00020 : TVAnalysedPulseGenerator("MaxBinAPGenerator", opts),
00021 fMaxBinAmplitude(SetupNavigator::Instance()->GetPedestal(GetChannel()),
00022 TSetupData::Instance()->GetTriggerPolarity(TSetupData::Instance()->GetBankName(GetChannel().str()))),
00023 fMaxBinTime(TSetupData::Instance()->GetTriggerPolarity(TSetupData::Instance()->GetBankName(GetChannel().str())),
00024 TSetupData::Instance()->GetClockTick(TSetupData::Instance()->GetBankName(GetChannel().str())),
00025 opts->GetDouble("time_shift", TSetupData::Instance()->GetTimeShift(TSetupData::Instance()->GetBankName(GetChannel().str())))) {
00026
00027 }
00028
00029
00030
00031 int MaxBinAPGenerator::ProcessPulses(const PulseIslandList& pulseList,
00032 AnalysedPulseList& analysedList)
00033 {
00034
00035 double amplitude, time;
00036 TAnalysedPulse* outPulse;
00037
00038 for (PulseIslandList::const_iterator pulseIter = pulseList.begin(); pulseIter != pulseList.end(); pulseIter++) {
00039 amplitude = fMaxBinAmplitude(*pulseIter);
00040 time = fMaxBinTime(*pulseIter);
00041
00042
00043 outPulse=MakeNewTAP(pulseIter-pulseList.begin());
00044 outPulse->SetAmplitude(amplitude);
00045 outPulse->SetTime(time);
00046
00047
00048 analysedList.push_back(outPulse);
00049
00050 }
00051 std::sort(analysedList.begin(), analysedList.end(), IsTimeOrdered);
00052 return 0;
00053 }
00054 ALCAP_TAP_GENERATOR(MaxBin);