00001 #include "TAPGeneratorFactory.h"
00002 #include "CFTimeMBAmpAPGenerator.h"
00003 #include "TPulseIsland.h"
00004 #include "TAnalysedPulse.h"
00005 #include "SetupNavigator.h"
00006
00007 #include <numeric>
00008 #include <algorithm>
00009 #include <cmath>
00010 #include <exception>
00011
00012
00013 class OptionsError : public std::exception {
00014 const char* what() const throw () {
00015 return "Bad MODULES option";
00016 }
00017 };
00018
00019 CFTimeMBAmpAPGenerator::CFTimeMBAmpAPGenerator(TAPGeneratorOptions* opts) :
00020 TVAnalysedPulseGenerator("CFTimeMBAmpAPGenerator",opts),
00021 fConstantFractionTime(SetupNavigator::Instance()->GetPedestal(GetChannel()),
00022 TSetupData::Instance()->GetTriggerPolarity(TSetupData::Instance()->GetBankName(GetChannel().str())),
00023 TSetupData::Instance()->GetClockTick(TSetupData::Instance()->GetBankName(GetChannel().str())),
00024 opts->GetBool("no_time_shift") ? 0. : SetupNavigator::Instance()->GetCoarseTimeOffset(GetSource()),
00025 opts->GetDouble("constant_fraction", -0.10)),
00026 fMaxBinAmplitude(SetupNavigator::Instance()->GetPedestal(GetChannel()),
00027 TSetupData::Instance()->GetTriggerPolarity(TSetupData::Instance()->GetBankName(GetChannel().str()))) {
00028 }
00029
00030 int CFTimeMBAmpAPGenerator::ProcessPulses(const PulseIslandList& pulseList,
00031 AnalysedPulseList& analysedList) {
00032
00033 for (unsigned int iTPI = 0; iTPI < pulseList.size(); ++iTPI) {
00034 TPulseIsland* tpi = pulseList.at(iTPI);
00035
00036 double time = fConstantFractionTime(tpi);
00037 double amplitude = fMaxBinAmplitude(tpi);
00038
00039 TAnalysedPulse* tap = MakeNewTAP(iTPI);
00040 tap->SetTime(time);
00041 tap->SetAmplitude(amplitude);
00042 analysedList.push_back(tap);
00043 }
00044
00045 return 0;
00046 }
00047
00048
00049
00050
00051
00052
00053
00054 ALCAP_TAP_GENERATOR(CFTimeMBAmp,constant_fraction,no_time_shift);