/** $Id$ ----------------------------------------------------------------------- @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. ----------------------------------------------------------------------- @file SignalCorrectionNoDrift.cpp @author Brian Magill @creationdate August 6 17:01:31 2007 Special Version of SignalCorrections where all corrections other than drift are applied. ----------------------------------------------------------------------- Modification History: $Log$ ----------------------------------------------------------------------- */ //---------------------------------------------------------------------- // Include Files: //----------------------------------------------------------------------- // #include "SignalCorrectionNoDrift.h" #include "SigCorrectInput.h" #include "SigCorrectOutputNoDrift.h" #include "MultiSignal.h" #include "PerformAudit.h" #include "CheckSigInf.h" #include "AlgorithmFactory.h" #include "GenericFunctor.h" #include "DriftFunctor.h" #include "DarkFunctor.h" #include "BalanceFunctor.h" #include "SigCorrectConnEvent.h" #include "AuditEventStream.h" #include "CheckDark.h" #include "CheckDarkDiff.h" #include "SigEarthLocParam.h" #include "SetUpDrift.h" #include "DriftParam.h" #include #include #include #include "GATS_DB_mysql.h" using namespace gatsDBpp; using namespace std; // //----------------------------------------------------------------------- // Defines and Macros: //----------------------------------------------------------------------- // // //----------------------------------------------------------------------- // Global Variables: //----------------------------------------------------------------------- // // //----------------------------------------------------------------------- // Utility Routines: //----------------------------------------------------------------------- // int SignalCorrectionNoDrift(Event& L0, Event& L1, Event& Tmp, Event& SD, ConfigFile& cf) { // Use the parameters used by the actual SignalCorrections Module. // Remember, though, that this is SignalCorrectionsNoDrift version!!!! const string MODULE_NAME = "SignalCorrection"; bool badDataThrow; MultiSignal multiSignal; string strMsg; int retCode = 0; SigCorrectConnEvent dataConn(SD); AlgorithmFactory factory; SigCorrectInput correctionInput(L0, L1); SigCorrectOutputNoDrift correctionOutput; CheckDark checkDarkDet; CheckDarkDiff checkDarkDrift; DarkFunctor darkCorrection(&checkDarkDet, &checkDarkDrift) ; vector darkParamVect; SigEarthLocParam earthInfo; SetUpDrift setupParam(cf, "DriftCorrectionSetup"); SetUpDriftParam inDriftParam; DriftFunctor driftCorrection; vector driftParamVect; BalanceFunctor balCorrection; AuditEventStream auditStream(L1); PerformAudit audit; try { audit = PerformAudit(auditStream); // Initiallize function objects factory = AlgorithmFactory(dataConn); GenericFunctor GainCorr(factory.create(SigFactory::Gain)); badDataThrow = bool(cf.GetInt(MODULE_NAME, "AbortForBadData")); CheckSigInf infinityCheck(badDataThrow); // Commence Processing multiSignal = correctionInput.getMultiSignal(); if (bool(cf.GetInt(MODULE_NAME, "Correct_Gain"))) { multiSignal = GainCorr(multiSignal); } if (bool(cf.GetInt(MODULE_NAME, "Correct_DarkSig"))) { multiSignal = darkCorrection(multiSignal); darkParamVect = darkCorrection.getParam(); } else { darkCorrection(multiSignal); darkParamVect = darkCorrection.getParam(); } // No drift correction applied for this version inDriftParam = setupParam(correctionInput.getEarthLocInfo(), correctionInput.getBalanceTimes()); driftCorrection = DriftFunctor(inDriftParam); driftCorrection(multiSignal); driftParamVect = driftCorrection.getParam(); if (bool(cf.GetInt(MODULE_NAME, "Correct_Balance"))) { balCorrection = BalanceFunctor(driftParamVect); multiSignal = balCorrection(multiSignal); } if (bool(cf.GetInt(MODULE_NAME, "Check_Infinity"))) { multiSignal = infinityCheck(multiSignal); } cout << " SignalCorrectionNoDrift Processing Summary:" << endl; audit(multiSignal); correctionOutput = SigCorrectOutputNoDrift(multiSignal, darkParamVect, driftParamVect); correctionOutput.outputToEvent(L1); } catch (exception &ex) { strMsg = string("Exception caught in SignalCorrection: ") + ex.what(); L1.addLogEntry(strMsg); cerr << strMsg << endl; strMsg = "processing status at time of error:"; cerr << strMsg << endl; L1.addLogEntry(strMsg); audit(multiSignal); retCode = -300; } return retCode; }