50 std::string SpectrumAdder2::NewUniqueName()
52 static int ObjectCount=0;
54 std::stringstream name;
55 name <<
"SpectrumAdder2_" << ObjectCount++;
60 bool SpectrumAdder2::ConcreteConfigure(
const ProcessingConfig&c)
72 "SpectrumAdder2::Do(): Not in execution mode");
74 switch (mProtoState) {
77 AddMagPhase(in1,in2,out);
80 AddComplex(in1,in2,out);
83 AddPolar(in1,in2,out);
89 AddBPFMagPhase(in1,in2,out);
92 AddBPFComplex(in1,in2,out);
95 AddBPFPolar(in1,in2,out);
98 AddMagPhaseBPF(in1,in2,out);
101 AddComplexBPF(in1,in2,out);
104 AddPolarBPF(in1,in2,out);
111 CLAM_ASSERT(
false,
"Do(...) : internal inconsistency (invalid mProtoState)");
147 CLAM_ASSERT(mSize,
"SpectrumAdder2::SetPrototypes: Zero size spectrum");
151 CLAM_ASSERT(mSize == in2.
GetSize(),
"SpectrumAdder2::SetPrototypes:Size mismatch in spectrum sum");
155 CLAM_ASSERT(mSize,
"SpectrumAdder2::SetPrototypes: Zero size spectrum");
160 CLAM_ASSERT(mSize == out.
GetSize(),
"SpectrumAdder2::SetPrototypes:Size mismatch in spectrum sum");
164 CLAM_ASSERT(mSize,
"SpectrumAdder2::SetPrototypes: Zero size spectrum");
173 CLAM_ASSERT(in1.GetSpectralRange() == in2.GetSpectralRange() &&
174 in1.GetSpectralRange() == out.GetSpectralRange() ,
"SpectrumAdder2::SetPrototypes: Spectral range mismatch in spectrum sum");
196 bool i1BPF=
false, i2BPF=
false, oBPF=
false;
212 mProtoState=SBPFMagPhase;
216 mProtoState=SBPFComplex;
220 mProtoState=SBPFPolar;
225 mProtoState=SBPFMagPhase;
229 mProtoState=SBPFComplex;
233 mProtoState=SBPFPolar;
237 CLAM_ASSERT(
false,
"SpectrumAdder2::SetPrototypes: Data flags internal inconsistency");
242 mProtoState=SMagPhaseBPF;
246 mProtoState=SComplexBPF;
250 mProtoState=SPolarBPF;
255 mProtoState=SMagPhaseBPF;
259 mProtoState=SComplexBPF;
263 mProtoState=SPolarBPF;
266 CLAM_ASSERT(
false,
"SpectrumAdder2::SetPrototypes: invalid data flags");
270 mProtoState=SMagPhase;
274 mProtoState=SComplex;
285 mProtoState=SMagPhase;
291 mProtoState=SComplex;
301 mProtoState=SMagPhase;
308 CLAM_ASSERT(
false,
"SetPrototypes not implemented ");
321 PrototypeState state_copy = mProtoState;
322 ScaleState state2_copy = mScaleState;
327 mProtoState = state_copy;
328 mScaleState = state2_copy;
332 void SpectrumAdder2::AddMagPhase(Spectrum& in1, Spectrum& in2, Spectrum& out)
334 switch(mScaleState) {
336 AddMagPhaseLin(in1,in2,out);
339 AddMagPhaseLog(in1,in2,out);
342 AddMagPhaseLinLog(in1,in2,out);
345 AddMagPhaseLinLog(in2,in1,out);
350 void SpectrumAdder2::AddMagPhaseLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
352 bool remove1=
false,remove2=
false,remove3=
false;
364 in1.SetTypeSynchronize(f);
370 in2.SetTypeSynchronize(f);
379 TData *m1 = in1.GetMagBuffer().GetPtr();
380 TData *f1 = in1.GetPhaseBuffer().GetPtr();
381 TData *m2 = in2.GetMagBuffer().GetPtr();
382 TData *f2 = in2.GetPhaseBuffer().GetPtr();
383 TData *mo = out.GetMagBuffer().GetPtr();
384 TData *fo = out.GetPhaseBuffer().GetPtr();
385 for (
int i=0;i<mSize;i++) {
387 TData r1,i1,r2,i2,r3,i3;
415 f.bComplex=f.bPolar=f.bMagPhaseBPF=
false;
417 out.SynchronizeTo(f);
420 in1.RemoveMagBuffer();
421 in1.RemovePhaseBuffer();
425 in2.RemoveMagBuffer();
426 in2.RemovePhaseBuffer();
430 out.RemoveMagBuffer();
431 out.RemovePhaseBuffer();
437 void SpectrumAdder2::AddComplex(Spectrum& in1, Spectrum& in2, Spectrum& out)
439 switch(mScaleState) {
441 AddComplexLin(in1,in2,out);
444 AddComplexLog(in1,in2,out);
447 AddComplexLinLog(in1,in2,out);
450 AddComplexLinLog(in2,in1,out);
455 void SpectrumAdder2::AddComplexLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
457 bool remove1=
false,remove2=
false,remove3=
false;
469 in1.SetTypeSynchronize(f);
475 in2.SetTypeSynchronize(f);
484 Complex *c1 = in1.GetComplexArray().GetPtr();
485 Complex *c2 = in2.GetComplexArray().GetPtr();
486 Complex *co = out.GetComplexArray().GetPtr();
487 for (
int i=0;i<mSize;i++)
490 f.bMagPhase=f.bPolar=f.bMagPhaseBPF=
false;
492 out.SynchronizeTo(f);
495 in1.RemoveComplexArray();
499 in2.RemoveComplexArray();
503 out.RemoveComplexArray();
509 void SpectrumAdder2::AddPolar(Spectrum& in1, Spectrum& in2, Spectrum& out)
511 switch(mScaleState) {
513 AddPolarLin(in1,in2,out);
516 AddPolarLog(in1,in2,out);
519 AddPolarLinLog(in1,in2,out);
522 AddPolarLinLog(in2,in1,out);
527 void SpectrumAdder2::AddPolarLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
529 bool remove1=
false,remove2=
false,remove3=
false;
541 in1.SetTypeSynchronize(f);
547 in2.SetTypeSynchronize(f);
556 Polar *p1 = in1.GetPolarArray().GetPtr();
557 Polar *p2 = in2.GetPolarArray().GetPtr();
558 Polar *po = out.GetPolarArray().GetPtr();
559 for (
int i=0;i<mSize;i++)
562 f.bComplex=f.bMagPhase=f.bMagPhaseBPF=
false;
564 out.SynchronizeTo(f);
567 in1.RemovePolarArray();
571 in2.RemovePolarArray();
575 out.RemovePolarArray();
581 void SpectrumAdder2::AddBPFMagPhase(Spectrum& in1, Spectrum& in2, Spectrum& out)
583 switch(mScaleState) {
585 AddBPFMagPhaseLin(in1,in2,out);
588 AddBPFMagPhaseLog(in1,in2,out);
591 CLAM_ASSERT(
false,
"SpectrumAdder2::AddBPFMagPhase(LinLog): Not implemented");
594 AddBPFMagPhaseLogLin(in1,in2,out);
599 void SpectrumAdder2::AddMagPhaseBPF(Spectrum& in1, Spectrum& in2, Spectrum& out)
601 switch(mScaleState) {
603 AddBPFMagPhaseLin(in2,in1,out);
606 AddBPFMagPhaseLog(in2,in1,out);
609 AddBPFMagPhaseLogLin(in2,in1,out);
612 CLAM_ASSERT(
false,
"SpectrumAdder2::AddMagPhaseBPF(LinLog): Not implemented");
617 void SpectrumAdder2::AddBPFMagPhaseLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
619 bool remove2=
false,remove3=
false;
632 in2.SetTypeSynchronize(f);
642 TData delta = out.GetSpectralRange() /
644 BPF &m1 = in1.GetMagBPF();
645 BPF &f1 = in1.GetPhaseBPF();
646 TData *m2 = in2.GetMagBuffer().GetPtr();
647 TData *f2 = in2.GetPhaseBuffer().GetPtr();
648 TData *mo = out.GetMagBuffer().GetPtr();
649 TData *fo = out.GetPhaseBuffer().GetPtr();
650 for (
int i=0;i<mSize;i++) {
651 Polar po =
Polar(m1.GetValue(pos),f1.GetValue(pos)) +
658 f.bComplex=f.bPolar=f.bMagPhaseBPF=
false;
660 out.SynchronizeTo(f);
663 in2.RemoveMagBuffer();
664 in2.RemovePhaseBuffer();
668 out.RemoveMagBuffer();
669 out.RemovePhaseBuffer();
674 void SpectrumAdder2::AddBPFMagPhaseLogLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
676 bool remove2=
false,remove3=
false;
689 in2.SetTypeSynchronize(f);
699 TData delta = out.GetSpectralRange() /
701 BPF &m1 = in1.GetMagBPF();
702 BPF &f1 = in1.GetPhaseBPF();
703 TData *m2 = in2.GetMagBuffer().GetPtr();
704 TData *f2 = in2.GetPhaseBuffer().GetPtr();
705 TData *mo = out.GetMagBuffer().GetPtr();
706 TData *fo = out.GetPhaseBuffer().GetPtr();
707 for (
int i=0;i<mSize;i++) {
715 f.bComplex=f.bPolar=f.bMagPhaseBPF=
false;
717 out.SynchronizeTo(f);
720 in2.RemoveMagBuffer();
721 in2.RemovePhaseBuffer();
725 out.RemoveMagBuffer();
726 out.RemovePhaseBuffer();
731 void SpectrumAdder2::AddBPFComplex(Spectrum& in1, Spectrum& in2, Spectrum& out)
733 switch(mScaleState) {
735 AddBPFComplexLin(in1,in2,out);
738 AddBPFComplexLog(in1,in2,out);
741 CLAM_ASSERT(
false,
"SpectrumAdder2::AddBPFMagPhase(LinLog): Not implemented");
744 AddBPFComplexLogLin(in1,in2,out);
749 void SpectrumAdder2::AddComplexBPF(Spectrum& in1, Spectrum& in2, Spectrum& out)
751 switch(mScaleState) {
753 AddBPFComplexLin(in2,in1,out);
756 AddBPFComplexLog(in2,in1,out);
759 AddBPFComplexLogLin(in2,in1,out);
762 CLAM_ASSERT(
false,
"SpectrumAdder2::AddBPFMagPhase(LinLog): Not implemented");
767 void SpectrumAdder2::AddBPFComplexLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
769 bool remove2=
false,remove3=
false;
782 in2.SetTypeSynchronize(f);
792 TData delta = out.GetSpectralRange() /
794 BPF &m1 = in1.GetMagBPF();
795 BPF &f1 = in1.GetPhaseBPF();
796 Complex *c2 = in2.GetComplexArray().GetPtr();
797 Complex *co = out.GetComplexArray().GetPtr();
798 for (
int i=0;i<mSize;i++) {
799 TData BRe = fabs(m1.GetValue(pos)) *
CLAM_cos(f1.GetValue(pos));
800 TData BIm = fabs(m1.GetValue(pos)) *
CLAM_sin(f1.GetValue(pos));
801 co[i]=
Complex(BRe,BIm) + c2[i];
805 f.bMagPhase=f.bPolar=f.bMagPhaseBPF=
false;
807 out.SynchronizeTo(f);
810 in2.RemoveComplexArray();
814 out.RemoveComplexArray();
822 void SpectrumAdder2::AddBPFComplexLogLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
824 bool remove2=
false,remove3=
false;
837 in2.SetTypeSynchronize(f);
847 TData delta = out.GetSpectralRange() /
849 BPF &m1 = in1.GetMagBPF();
850 BPF &f1 = in1.GetPhaseBPF();
851 Complex *c2 = in2.GetComplexArray().GetPtr();
852 Complex *co = out.GetComplexArray().GetPtr();
853 for (
int i=0;i<mSize;i++) {
856 co[i]=
Complex(BRe,BIm) + c2[i];
860 f.bMagPhase=f.bPolar=f.bMagPhaseBPF=
false;
862 out.SynchronizeTo(f);
866 in2.RemoveComplexArray();
870 out.RemoveComplexArray();
876 void SpectrumAdder2::AddBPFPolar(Spectrum& in1, Spectrum& in2, Spectrum& out)
878 switch(mScaleState) {
880 AddBPFPolarLin(in1,in2,out);
883 AddBPFPolarLog(in1,in2,out);
886 CLAM_ASSERT(
false,
"SpectrumAdder2::AddBPFPolar(LinLog): Not implemented");
889 AddBPFPolarLogLin(in1,in2,out);
894 void SpectrumAdder2::AddPolarBPF(Spectrum& in1, Spectrum& in2, Spectrum& out)
896 switch(mScaleState) {
898 AddBPFPolarLin(in2,in1,out);
901 AddBPFPolarLog(in2,in1,out);
904 AddBPFPolarLogLin(in2,in1,out);
907 CLAM_ASSERT(
false,
"SpectrumAdder2::AddBPFPolar(LinLog): Not implemented");
912 void SpectrumAdder2::AddBPFPolarLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
914 bool remove2=
false,remove3=
false;
927 in2.SetTypeSynchronize(f);
937 TData delta = out.GetSpectralRange() /
939 BPF &m1 = in1.GetMagBPF();
940 BPF &f1 = in1.GetPhaseBPF();
941 Polar *p2 = in2.GetPolarArray().GetPtr();
942 Polar *po = out.GetPolarArray().GetPtr();
943 for (
int i=0;i<mSize;i++) {
944 po[i]=
Polar(m1.GetValue(pos),f1.GetValue(pos))+p2[i];
948 f.bMagPhase=f.bComplex=f.bMagPhaseBPF=
false;
950 out.SynchronizeTo(f);
953 in2.RemovePolarArray();
957 out.RemovePolarArray();
962 void SpectrumAdder2::AddBPFPolarLogLin(Spectrum& in1, Spectrum& in2, Spectrum& out)
964 bool remove2=
false,remove3=
false;
977 in2.SetTypeSynchronize(f);
987 TData delta = out.GetSpectralRange() /
989 BPF &m1 = in1.GetMagBPF();
990 BPF &f1 = in1.GetPhaseBPF();
991 Polar *p2 = in2.GetPolarArray().GetPtr();
992 Polar *po = out.GetPolarArray().GetPtr();
993 for (
int i=0;i<mSize;i++) {
995 TData BPha = f1.GetValue(pos);
996 po[i]=
Polar(BMag,BPha)+p2[i];
1000 f.bMagPhase=f.bComplex=f.bMagPhaseBPF=
false;
1002 out.SynchronizeTo(f);
1005 in2.RemovePolarArray();
1009 out.RemovePolarArray();
1014 void SpectrumAdder2::AddBPF(Spectrum& in1, Spectrum& in2, Spectrum& out)
1018 for (
int i=0;i<mSize;i++) {
1019 Point &pm1=in1.GetMagBPF().GetPointArray()[i];
1020 Point &pm2=in2.GetMagBPF().GetPointArray()[i];
1021 Point &pmo=out.GetMagBPF().GetPointArray()[i];
1022 Point &pf1=in1.GetPhaseBPF().GetPointArray()[i];
1023 Point &pf2=in2.GetPhaseBPF().GetPointArray()[i];
1024 Point &pfo=out.GetPhaseBPF().GetPointArray()[i];
1025 CLAM_ASSERT(pm1.GetX() == pm2.GetX(),
"InterpolateBPF: input BPF abcisas do not match "
1026 "(and BPF merging not yet iplemented)");
1027 CLAM_ASSERT(pm1.GetX() == pmo.GetX(),
"InterpolateBPF: ouput BPF abcisas do not match with imput "
1028 "(and BPF merging not yet iplemented)");
1029 pmo.SetY(pm1.GetY()*pm2.GetY());
1030 pfo.SetY(pf1.GetY()+pf2.GetY());
1036 void SpectrumAdder2::AddMagPhaseLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1038 CLAM_ASSERT(
false,
"AddMagPhaseLog: Not implemented");
1040 void SpectrumAdder2::AddMagPhaseLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1042 CLAM_ASSERT(
false,
"AddMagPhaseLinLog: Not implemented");
1044 void SpectrumAdder2::AddComplexLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1046 CLAM_ASSERT(
false,
"AddComplexLog: Not implemented");
1048 void SpectrumAdder2::AddComplexLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1050 CLAM_ASSERT(
false,
"AddComplexLinLog: Not implemented");
1052 void SpectrumAdder2::AddPolarLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1054 CLAM_ASSERT(
false,
"AddPolarLog: Not implemented");
1056 void SpectrumAdder2::AddPolarLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1058 CLAM_ASSERT(
false,
"AddPolarLinLog: Not implemented");
1060 void SpectrumAdder2::AddBPFComplexLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1062 CLAM_ASSERT(
false,
"AddBPFComplexLog: Not implemented");
1064 void SpectrumAdder2::AddBPFComplexLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1066 CLAM_ASSERT(
false,
"AddBPFComplexLinLog: Not implemented");
1068 void SpectrumAdder2::AddBPFPolarLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1070 CLAM_ASSERT(
false,
"AddBPFPolarLog: Not implemented");
1072 void SpectrumAdder2::AddBPFPolarLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1074 CLAM_ASSERT(
false,
"AddBPFPolarLinLog: Not implemented");
1076 void SpectrumAdder2::AddBPFMagPhaseLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1078 CLAM_ASSERT(
false,
"AddBPFMagPhaseLog: Not implemented");
1080 void SpectrumAdder2::AddBPFMagPhaseLinLog(Spectrum& in1, Spectrum& in2, Spectrum& out)
1082 CLAM_ASSERT(
false,
"AddBPFMagPhaseLinLog: Not implemented");