35 "key",
"SpectrumSubstracter2",
36 "category",
"Arithmetic Operations",
37 "description",
"SpectrumSubstracter2",
40 static FactoryRegistrator<ProcessingFactory, SpectrumSubstracter2>
reg =
metadata;
63 std::string SpectrumSubstracter2::NewUniqueName()
65 static int ObjectCount=0;
67 std::stringstream name;
68 name <<
"SpectrumSubstracter2_" << ObjectCount++;
73 bool SpectrumSubstracter2::ConcreteConfigure(
const ProcessingConfig&c)
84 "SpectrumSubstracter2::Do(): Not in execution mode");
86 switch (mProtoState) {
89 SubstractMagPhase(in1,in2,out);
92 SubstractComplex(in1,in2,out);
95 SubstractPolar(in1,in2,out);
98 SubstractBPF(in1,in2,out);
101 SubstractBPFMagPhase(in1,in2,out);
104 SubstractBPFComplex(in1,in2,out);
107 SubstractBPFPolar(in1,in2,out);
110 SubstractMagPhaseBPF(in1,in2,out);
113 SubstractComplexBPF(in1,in2,out);
116 SubstractPolarBPF(in1,in2,out);
120 Substract(in1,in2,out);
123 CLAM_ASSERT(
false,
"Do(...) : internal inconsistency (invalid mProtoState)");
132 mOut.
GetData().SetSpectralRange( mIn1.
GetData().GetSpectralRange() );
156 "SpectrumSubstracter2: First input Spectrum without content");
158 "SpectrumSubstracter2: Second input Spectrum without content");
160 "SpectrumSubstracter2: Output Spectrum object without content");
166 CLAM_ASSERT(mSize,
"SpectrumSubstracter2::SetPrototypes: Zero size spectrum");
171 if (!mSize) mSize = in2.
GetSize();
173 "SpectrumSubstracter2::SetPrototypes: Sizes Mismatch");
178 if (!mSize) mSize = out.
GetSize();
180 "SpectrumSubstracter2::SetPrototypes: Output size Mismatch");
188 CLAM_ASSERT(in1.GetSpectralRange() == in2.GetSpectralRange(),
189 "SpectrumSubstracter2::SetPrototypes: Spectral range mismatch on inputs");
190 CLAM_ASSERT(in1.GetSpectralRange() == out.GetSpectralRange(),
191 "SpectrumSubstracter2::SetPrototypes: Spectral range mismatch on output");
207 "SpectrumSubstracter2: Log Scale Output not implemented");
212 bool i1BPF=
false, i2BPF=
false, oBPF=
false;
228 mProtoState=SBPFMagPhase;
232 mProtoState=SBPFComplex;
236 mProtoState=SBPFPolar;
241 mProtoState=SBPFMagPhase;
245 mProtoState=SBPFComplex;
249 mProtoState=SBPFPolar;
253 CLAM_ASSERT(
false,
"SpectrumSubstracter2::SetPrototypes:"
254 " Data flags internal inconsistency");
259 mProtoState=SMagPhaseBPF;
263 mProtoState=SComplexBPF;
267 mProtoState=SPolarBPF;
272 mProtoState=SMagPhaseBPF;
276 mProtoState=SComplexBPF;
280 mProtoState=SPolarBPF;
284 CLAM_ASSERT(
false,
"SpectrumSubstracter2::SetPrototypes:"
285 " invalid data flags");
289 mProtoState=SMagPhase;
293 mProtoState=SComplex;
304 mProtoState=SMagPhase;
310 mProtoState=SComplex;
320 mProtoState=SMagPhase;
327 CLAM_ASSERT(
false,
"SpectrumSubstracter2::SetPrototypes(): Not implemented");
341 PrototypeState state_copy = mProtoState;
342 ScaleState state2_copy = mScaleState;
347 mProtoState = state_copy;
348 mScaleState = state2_copy;
352 void SpectrumSubstracter2::SubstractMagPhase(Spectrum& in1, Spectrum& in2, Spectrum& out)
354 switch(mScaleState) {
356 SubstractMagPhaseLin(in1,in2,out);
359 SubstractMagPhaseLog(in1,in2,out);
362 SubstractMagPhaseLinLog(in1,in2,out);
365 SubstractMagPhaseLinLog(in2,in1,out);
370 void SpectrumSubstracter2::SubstractMagPhaseLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
372 bool remove1=
false,remove2=
false,remove3=
false;
384 in1.SetTypeSynchronize(f);
390 in2.SetTypeSynchronize(f);
399 TData *m1 = in1.GetMagBuffer().GetPtr();
400 TData *f1 = in1.GetPhaseBuffer().GetPtr();
401 TData *m2 = in2.GetMagBuffer().GetPtr();
402 TData *f2 = in2.GetPhaseBuffer().GetPtr();
403 TData *mo = out.GetMagBuffer().GetPtr();
404 TData *fo = out.GetPhaseBuffer().GetPtr();
405 for (
int i=0;i<mSize;i++) {
407 TData r1,i1,r2,i2,r3,i3;
435 f.bComplex=f.bPolar=f.bMagPhaseBPF=
false;
437 out.SynchronizeTo(f);
440 in1.RemoveMagBuffer();
441 in1.RemovePhaseBuffer();
445 in2.RemoveMagBuffer();
446 in2.RemovePhaseBuffer();
450 out.RemoveMagBuffer();
451 out.RemovePhaseBuffer();
458 void SpectrumSubstracter2::SubstractComplex(Spectrum& in1, Spectrum& in2, Spectrum& out)
460 switch(mScaleState) {
462 SubstractComplexLin(in1,in2,out);
465 SubstractComplexLog(in1,in2,out);
468 SubstractComplexLinLog(in1,in2,out);
471 SubstractComplexLinLog(in2,in1,out);
476 void SpectrumSubstracter2::SubstractComplexLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
478 bool remove1=
false,remove2=
false,remove3=
false;
490 in1.SetTypeSynchronize(f);
496 in2.SetTypeSynchronize(f);
505 Complex *c1 = in1.GetComplexArray().GetPtr();
506 Complex *c2 = in2.GetComplexArray().GetPtr();
507 Complex *co = out.GetComplexArray().GetPtr();
508 for (
int i=0;i<mSize;i++)
511 f.bMagPhase=f.bPolar=f.bMagPhaseBPF=
false;
513 out.SynchronizeTo(f);
516 in1.RemoveComplexArray();
520 in2.RemoveComplexArray();
524 out.RemoveComplexArray();
530 void SpectrumSubstracter2::SubstractPolar(Spectrum& in1, Spectrum& in2, Spectrum& out)
532 switch(mScaleState) {
534 SubstractPolarLin(in1,in2,out);
537 SubstractPolarLog(in1,in2,out);
540 SubstractPolarLinLog(in1,in2,out);
543 SubstractPolarLinLog(in2,in1,out);
548 void SpectrumSubstracter2::SubstractPolarLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
550 bool remove1=
false,remove2=
false,remove3=
false;
562 in1.SetTypeSynchronize(f);
568 in2.SetTypeSynchronize(f);
577 Polar *p1 = in1.GetPolarArray().GetPtr();
578 Polar *p2 = in2.GetPolarArray().GetPtr();
579 Polar *po = out.GetPolarArray().GetPtr();
580 for (
int i=0;i<mSize;i++)
583 f.bComplex=f.bMagPhase=f.bMagPhaseBPF=
false;
585 out.SynchronizeTo(f);
588 in1.RemovePolarArray();
592 in2.RemovePolarArray();
596 out.RemovePolarArray();
602 void SpectrumSubstracter2::SubstractBPFMagPhase(Spectrum& in1, Spectrum& in2, Spectrum& out)
604 switch(mScaleState) {
606 SubstractBPFMagPhaseLin(in1,in2,out);
609 SubstractBPFMagPhaseLog(in1,in2,out);
612 CLAM_ASSERT(
false,
"SubstractBPFMagPhaseLinLog: Not implemented");
615 SubstractBPFMagPhaseLogLin(in1,in2,out);
620 void SpectrumSubstracter2::SubstractMagPhaseBPF(Spectrum& in1, Spectrum& in2, Spectrum& out)
622 switch(mScaleState) {
624 SubstractBPFMagPhaseLin(in2,in1,out);
627 SubstractBPFMagPhaseLog(in2,in1,out);
630 SubstractBPFMagPhaseLogLin(in2,in1,out);
633 CLAM_ASSERT(
false,
"SubstractBPFMagPhaseLinLog: Not implemented");
638 void SpectrumSubstracter2::SubstractBPFMagPhaseLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
640 bool remove2=
false,remove3=
false;
653 in2.SetTypeSynchronize(f);
663 TData delta = out.GetSpectralRange() /
665 BPF &m1 = in1.GetMagBPF();
666 BPF &f1 = in1.GetPhaseBPF();
667 TData *m2 = in2.GetMagBuffer().GetPtr();
668 TData *f2 = in2.GetPhaseBuffer().GetPtr();
669 TData *mo = out.GetMagBuffer().GetPtr();
670 TData *fo = out.GetPhaseBuffer().GetPtr();
671 for (
int i=0;i<mSize;i++) {
672 Polar po =
Polar(m1.GetValue(pos),f1.GetValue(pos)) -
679 f.bComplex=f.bPolar=f.bMagPhaseBPF=
false;
681 out.SynchronizeTo(f);
684 in2.RemoveMagBuffer();
685 in2.RemovePhaseBuffer();
689 out.RemoveMagBuffer();
690 out.RemovePhaseBuffer();
695 void SpectrumSubstracter2::SubstractBPFMagPhaseLogLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
697 bool remove2=
false,remove3=
false;
710 in2.SetTypeSynchronize(f);
720 TData delta = out.GetSpectralRange() /
722 BPF &m1 = in1.GetMagBPF();
723 BPF &f1 = in1.GetPhaseBPF();
724 TData *m2 = in2.GetMagBuffer().GetPtr();
725 TData *f2 = in2.GetPhaseBuffer().GetPtr();
726 TData *mo = out.GetMagBuffer().GetPtr();
727 TData *fo = out.GetPhaseBuffer().GetPtr();
728 for (
int i=0;i<mSize;i++) {
736 f.bComplex=f.bPolar=f.bMagPhaseBPF=
false;
738 out.SynchronizeTo(f);
741 in2.RemoveMagBuffer();
742 in2.RemovePhaseBuffer();
746 out.RemoveMagBuffer();
747 out.RemovePhaseBuffer();
752 void SpectrumSubstracter2::SubstractBPFComplex(Spectrum& in1, Spectrum& in2, Spectrum& out)
754 switch(mScaleState) {
756 SubstractBPFComplexLin(in1,in2,out);
759 SubstractBPFComplexLog(in1,in2,out);
762 CLAM_ASSERT(
false,
"SubstractBPFMagPhaseLinLog: Not implemented");
765 SubstractBPFComplexLogLin(in1,in2,out);
770 void SpectrumSubstracter2::SubstractComplexBPF(Spectrum& in1, Spectrum& in2, Spectrum& out)
772 switch(mScaleState) {
774 SubstractBPFComplexLin(in2,in1,out);
777 SubstractBPFComplexLog(in2,in1,out);
780 SubstractBPFComplexLogLin(in2,in1,out);
783 CLAM_ASSERT(
false,
"SubstractBPFMagPhaseLinLog: Not implemented");
788 void SpectrumSubstracter2::SubstractBPFComplexLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
790 bool remove2=
false,remove3=
false;
803 in2.SetTypeSynchronize(f);
813 TData delta = out.GetSpectralRange() /
815 BPF &m1 = in1.GetMagBPF();
816 BPF &f1 = in1.GetPhaseBPF();
817 Complex *c2 = in2.GetComplexArray().GetPtr();
818 Complex *co = out.GetComplexArray().GetPtr();
819 for (
int i=0;i<mSize;i++) {
820 TData BRe = fabs(m1.GetValue(pos)) *
CLAM_cos(f1.GetValue(pos));
821 TData BIm = fabs(m1.GetValue(pos)) *
CLAM_sin(f1.GetValue(pos));
822 co[i]=
Complex(BRe,BIm) - c2[i];
826 f.bMagPhase=f.bPolar=f.bMagPhaseBPF=
false;
828 out.SynchronizeTo(f);
831 in2.RemoveComplexArray();
835 out.RemoveComplexArray();
843 void SpectrumSubstracter2::SubstractBPFComplexLogLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
845 bool remove2=
false,remove3=
false;
858 in2.SetTypeSynchronize(f);
868 TData delta = out.GetSpectralRange() /
870 BPF &m1 = in1.GetMagBPF();
871 BPF &f1 = in1.GetPhaseBPF();
872 Complex *c2 = in2.GetComplexArray().GetPtr();
873 Complex *co = out.GetComplexArray().GetPtr();
874 for (
int i=0;i<mSize;i++) {
877 co[i]=
Complex(BRe,BIm) - c2[i];
881 f.bMagPhase=f.bPolar=f.bMagPhaseBPF=
false;
883 out.SynchronizeTo(f);
887 in2.RemoveComplexArray();
891 out.RemoveComplexArray();
897 void SpectrumSubstracter2::SubstractBPFPolar(Spectrum& in1, Spectrum& in2, Spectrum& out)
899 switch(mScaleState) {
901 SubstractBPFPolarLin(in1,in2,out);
904 SubstractBPFPolarLog(in1,in2,out);
907 CLAM_ASSERT(
false,
"SubstractBPFPolarLinLog: Not implemented");
910 SubstractBPFPolarLogLin(in1,in2,out);
915 void SpectrumSubstracter2::SubstractPolarBPF(Spectrum& in1, Spectrum& in2, Spectrum& out)
917 switch(mScaleState) {
919 SubstractBPFPolarLin(in2,in1,out);
922 SubstractBPFPolarLog(in2,in1,out);
925 SubstractBPFPolarLogLin(in2,in1,out);
928 CLAM_ASSERT(
false,
"SubstractBPFPolarLinLog: Not implemented");
933 void SpectrumSubstracter2::SubstractBPFPolarLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
935 bool remove2=
false,remove3=
false;
948 in2.SetTypeSynchronize(f);
958 TData delta = out.GetSpectralRange() /
960 BPF &m1 = in1.GetMagBPF();
961 BPF &f1 = in1.GetPhaseBPF();
962 Polar *p2 = in2.GetPolarArray().GetPtr();
963 Polar *po = out.GetPolarArray().GetPtr();
964 for (
int i=0;i<mSize;i++) {
965 po[i]=
Polar(m1.GetValue(pos),f1.GetValue(pos))-p2[i];
969 f.bMagPhase=f.bComplex=f.bMagPhaseBPF=
false;
971 out.SynchronizeTo(f);
974 in2.RemovePolarArray();
978 out.RemovePolarArray();
983 void SpectrumSubstracter2::SubstractBPFPolarLogLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
985 bool remove2=
false,remove3=
false;
998 in2.SetTypeSynchronize(f);
1008 TData delta = out.GetSpectralRange() /
1010 BPF &m1 = in1.GetMagBPF();
1011 BPF &f1 = in1.GetPhaseBPF();
1012 Polar *p2 = in2.GetPolarArray().GetPtr();
1013 Polar *po = out.GetPolarArray().GetPtr();
1014 for (
int i=0;i<mSize;i++) {
1016 TData BPha = f1.GetValue(pos);
1017 po[i]=
Polar(BMag,BPha)-p2[i];
1021 f.bMagPhase=f.bComplex=f.bMagPhaseBPF=
false;
1023 out.SynchronizeTo(f);
1026 in2.RemovePolarArray();
1030 out.RemovePolarArray();
1035 void SpectrumSubstracter2::SubstractBPF(Spectrum& in1, Spectrum& in2, Spectrum& out)
1039 for (
int i=0;i<mSize;i++) {
1040 Point &pm1=in1.GetMagBPF().GetPointArray()[i];
1041 Point &pm2=in2.GetMagBPF().GetPointArray()[i];
1042 Point &pmo=out.GetMagBPF().GetPointArray()[i];
1043 Point &pf1=in1.GetPhaseBPF().GetPointArray()[i];
1044 Point &pf2=in2.GetPhaseBPF().GetPointArray()[i];
1045 Point &pfo=out.GetPhaseBPF().GetPointArray()[i];
1047 "SubstractBPF: BPF abcisas do not match "
1048 "(and BPF merging not yet iplemented)");
1050 "SubstractBPF: BPF abcisas do not match "
1051 "(and BPF merging not yet iplemented)");
1052 pmo.SetY(pm1.GetY()/pm2.GetY());
1053 pfo.SetY(pf1.GetY()-pf2.GetY());
1059 void SpectrumSubstracter2::SubstractMagPhaseLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1061 CLAM_ASSERT(
false,
"SubstractMagPhaseLog: Not implemented");
1063 void SpectrumSubstracter2::SubstractMagPhaseLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1065 CLAM_ASSERT(
false,
"SubstractMagPhaseLinLog: Not implemented");
1067 void SpectrumSubstracter2::SubstractComplexLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1069 CLAM_ASSERT(
false,
"SubstractComplexLog: Not implemented");
1071 void SpectrumSubstracter2::SubstractComplexLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1073 CLAM_ASSERT(
false,
"SubstractComplexLinLog: Not implemented");
1075 void SpectrumSubstracter2::SubstractPolarLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1077 CLAM_ASSERT(
false,
"SubstractPolarLog: Not implemented");
1079 void SpectrumSubstracter2::SubstractPolarLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1081 CLAM_ASSERT(
false,
"SubstractPolarLinLog: Not implemented");
1083 void SpectrumSubstracter2::SubstractBPFComplexLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1085 CLAM_ASSERT(
false,
"SubstractBPFComplexLog: Not implemented");
1087 void SpectrumSubstracter2::SubstractBPFComplexLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1089 CLAM_ASSERT(
false,
"SubstractBPFComplexLinLog: Not implemented");
1091 void SpectrumSubstracter2::SubstractBPFPolarLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1093 CLAM_ASSERT(
false,
"SubstractBPFPolarLog: Not implemented");
1095 void SpectrumSubstracter2::SubstractBPFPolarLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1097 CLAM_ASSERT(
false,
"SubstractBPFPolarLinLog: Not implemented");
1099 void SpectrumSubstracter2::SubstractBPFMagPhaseLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1101 CLAM_ASSERT(
false,
"SubstractBPFMagPhaseLog: Not implemented");
1103 void SpectrumSubstracter2::SubstractBPFMagPhaseLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1105 CLAM_ASSERT(
false,
"SubstractBPFMagPhaseLinLog: Not implemented");