00001 #include "MaxTimeDiffMEGenerator.h"
00002 #include "TMEGeneratorFactory.h"
00003 #include <iostream>
00004 #include <vector>
00005 #include <cmath>
00006 using std::cout;
00007 using std::endl;
00008
00009 int MaxTimeDiffMEGenerator::ProcessPulses(MuonEventList& muonEventsOut,
00010 const SourceDetPulseMap& detectorPulsesIn){
00011
00012 std::vector<DetectorPulseList::const_iterator> pulseIters;
00013 std::vector<DetectorPulseList::const_iterator> finalIters;
00014 for(SourceDetPulseMap::const_iterator i_detector=detectorPulsesIn.begin();
00015 i_detector!=detectorPulsesIn.end(); i_detector++){
00016 pulseIters.push_back(i_detector->second.begin());
00017 finalIters.push_back(i_detector->second.end());
00018 }
00019
00020
00021 double min_time = 999999;
00022 double pulse_time;
00023 while (pulseIters.size() > 0) {
00024
00025
00026 for (unsigned int b = 0; b < pulseIters.size(); ++b) {
00027 pulse_time = (*pulseIters[b])->GetTime() * 1e-6;
00028 min_time = std::min(min_time, pulse_time);
00029
00030 }
00031
00032
00033 double time_difference = 0.1;
00034 TMuonEvent* muon_event=new TMuonEvent();
00035 for (unsigned int b = 0; b < pulseIters.size(); ++b) {
00036
00037 TDetectorPulse* pulse = *(pulseIters[b]);
00038 double pulse_time = pulse->GetTime() * 1e-6;
00039
00040 if (std::fabs(pulse_time - min_time) < time_difference) {
00041 if(Debug()) cout<<"Using pulse from: " << pulse->GetSource() << std::endl;
00042 muon_event->AddPulse(pulse->GetSource(), pulse);
00043 ++(pulseIters[b]);
00044 }
00045 }
00046 muonEventsOut.push_back(muon_event);
00047 if(Debug()){
00048 cout<<"Created a TMuonEvent with "<<muon_event->TotalNumPulses();
00049 cout<< std::endl;
00050 }
00051
00052
00053
00054 for (int b = pulseIters.size()-1; b >= 0; --b) {
00055 if (pulseIters[b] == finalIters[b]){
00056 pulseIters.erase(pulseIters.begin() + b);
00057 finalIters.erase(finalIters.begin() + b);
00058 }
00059 }
00060 }
00061
00062 return 0;
00063 }
00064
00065 ALCAP_TME_GENERATOR(MaxTimeDiff);