/** @class BalanceAlgorithm.cpp @author Brian Magill @creation date 11/15/2006 $Date:$ $Revision:$ @copyright (©) Copyright 2006 by GATS Inc. 11864 Canon Blvd., Suite 101, Newport News, VA 23606 All Rights Reserved. No part of this software or publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise without the prior written permission of GATS Inc. @brief Performs a balance correction on a SOFIE difference signal */ #include #include #include #include #include #include "SOFIE_namespace.h" //#include "GATS_Utilities.hpp" #include "BalanceAlgorithm.h" #include "ChannelSignals.h" using namespace std; //using namespace GATS_Utilities; ChannelSignals BalanceAlgorithm::operator()(std::valarray const &time, ChannelSignals const &in, DriftParam const ¶m) const { int gasId = in.getID(); double strong_atten = in.getAttenuation(SOFIE::Strong); double weak_atten = in.getAttenuation(SOFIE::Weak); std::valarray strong = in.getSignal(SOFIE::Strong); std::valarray weak = in.getSignal(SOFIE::Weak); std::valarray diff = in.getSignal(SOFIE::Diff); double v_0 = param.getSigRef(SOFIE::Strong); double dv_0 = param.getSigRef(SOFIE::Diff); double B = (dv_0/v_0 + 1.0); assert(B != 0.0); diff = (diff + (1. - B)*strong)/B; return ChannelSignals(gasId, strong_atten, weak_atten, strong, weak, diff); }