/** @file DriftFunctor.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 Removes drift from the detector and difference signals */ #include #include #include #include #include "SOFIE_namespace.h" #include "GATS_Utilities.hpp" #include "DriftFunctor.h" #include "ChannelSignals.h" #include "CalcDrift.h" #include "ApplyDrift.h" using namespace std; using namespace GATS_Utilities; MultiSignal DriftFunctor::operator() (MultiSignal const &inSignal) const { valarray timeArray; vector signalArray; Journal auditJournal; string processName = "Drift Correction"; ChannelSignals inChannel; ChannelSignals outChannel; string comments; DriftParam m_param; ApplyDrift applyCorrection; double startTime; double endTime; double balanceStart = setupParam.getStartBalance(); double balanceEnd = setupParam.getEndBalance(); const double min_interval = 3.0; if (setupParam.size() != inSignal.numberOfSignals() ) throw runtime_error("DriftFunctor::operator() Error: size of input parameter array size does not match signal array size! "); // Removed by GJP on 10/01/2010 so that independent channel // intervals can be used. //double interval = setupParam.getTimeInterv(); // double intervalUsed; double safetyMargin = 0.0; // safety margin of 0 seconds CalcDrift detDrift; inSignal.getTime(timeArray); auditJournal = inSignal.getAudit(); for(int indx = 0; indx < inSignal.numberOfSignals(); indx++) try { if (inSignal.getModeFlag() ) { // Sunset endTime = setupParam.getTimePoint(indx); // Modified by GJP on 10/01/2010 //startTime = endTime - interval; startTime = endTime - setupParam.getInterval(indx); if (startTime < balanceEnd) startTime = balanceEnd + safetyMargin; detDrift = CalcDrift(startTime, endTime, endTime, min_interval); } else { // Sunrise startTime = setupParam.getTimePoint(indx); // Modified by GJP on 10/01/2010 //endTime = startTime + interval; endTime = startTime + setupParam.getInterval(indx); if (endTime > balanceStart) endTime = balanceStart - safetyMargin; detDrift = CalcDrift(startTime, endTime, startTime, min_interval); } // detDrift = CalcDrift(startTime, endTime, endTime, min_interval); inChannel = inSignal.getChannel(indx); detDrift(timeArray, inChannel, m_param, comments); outChannel = applyCorrection(timeArray, inChannel, m_param); signalArray.push_back(outChannel); param.push_back(m_param); } catch (exception &ex) { cerr << "Exception thrown in DriftFunctor :" << endl; cerr << "Channel Gas ID: " << inChannel.getID() << endl; cerr << "Exception Message: " << ex.what() << endl; cerr << "Additional comments: " << comments << endl; cerr << "Current Audit Trail: "; inSignal.getAudit().print(cerr); cerr << endl; throw; } auditJournal.append(processName); MultiSignal outSignal(inSignal.getEventNumber(), inSignal.get150kmTime(), inSignal.getModeFlag(), timeArray, signalArray, auditJournal) ; return outSignal; };