SpectralPeakArrayAdder.cxx
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "Complex.hxx"
00023 #include "SpecTypeFlags.hxx"
00024 #include "SpectralPeakArrayAdder.hxx"
00025 #include "BPF.hxx"
00026 #include "Point.hxx"
00027 #include "Spectrum.hxx"
00028
00029 namespace CLAM {
00030
00031 SpectralPeakArrayAdder::SpectralPeakArrayAdder(const Config &c)
00032 : mIn1("Input 1",this),
00033 mIn2("Input 2",this),
00034 mOut("Output",this)
00035 {
00036 Configure(c);
00037 }
00038
00039
00040
00041 bool SpectralPeakArrayAdder::Do(const SpectralPeakArray& in1, const SpectralPeakArray& in2, SpectralPeakArray& out)
00042 {
00043 CLAM_DEBUG_ASSERT(IsRunning(),
00044 "SpectralPeakArrayAdder::Do(): Not in execution mode");
00045
00046 CLAM_ASSERT((&out)!=(&in1) && (&out)!=(&in1), "SpectralPeakAdder cannot process inplace");
00047
00048
00049 out.AddIndexArray();
00050 out.UpdateData();
00051 out.SetnPeaks(0);
00052
00053 int nPeaks1=in1.GetnPeaks();
00054 int nPeaks2=in2.GetnPeaks();
00055
00056 if(nPeaks1==0)
00057 {
00058 out=in2;
00059 return true;
00060 }
00061 if(nPeaks2==0)
00062 {
00063 out=in1;
00064 return true;
00065 }
00066
00067 IndexArray& in1Index = in1.GetIndexArray();
00068
00069
00070
00071
00072 IndexArray& in2Index = in2.GetIndexArray();
00073 int i;
00074 for (i=0; i<nPeaks2;i++) in2Index[i]*=1000;
00075
00076 int nSelected1, nSelected2;
00077 nSelected1 = nSelected2 = 0;
00081 do
00082 {
00083
00084
00085
00086
00087 if(in1.GetFreq(nSelected1)<in2.GetFreq(nSelected2))
00088 {
00089 out.AddSpectralPeak(in1.GetSpectralPeak(nSelected1), true, in1Index[nSelected1]);
00090
00091 nSelected1++;
00092 }
00093 else
00094 {
00095 out.AddSpectralPeak(in2.GetSpectralPeak(nSelected2), true, in2Index[nSelected2]);
00096 nSelected2++;
00097 }
00098
00099 }while(nPeaks1-nSelected1 >0 && nPeaks2-nSelected2>0);
00100
00101 return true;
00102 }
00103
00104 };
00105