# **************************************************************************** # CUI # # The Advanced Framework for Simulation, Integration, and Modeling (AFSIM) # # The use, dissemination or disclosure of data in this file is subject to # limitation or restriction. See accompanying README and LICENSE for details. # **************************************************************************** script_variables global double mMoverUpdateInterval = 1.0; # list of platforms and systems of interest global Set mPlatformNames = Set(); global Set mES_SystemNames = Set(); global Set mEA_SystemNames = Set(); # File I/O stuff global FileIO mEmitterRptFile = FileIO(); global FileIO mTrackRptFile = FileIO(); global FileIO mDetectRptFile = FileIO(); global FileIO mJamRptFile = FileIO(); global FileIO mAirFrameRptFile = FileIO(); global string mEmitterRptFilename = "emitter_reports"; global string mTrackRptFileName = "track_reports"; global string mDetectRptFilename = "detection_reports"; global string mJamRptFilename = "jam_reports"; global string mAirFrameRptFilename = "airframe_reports"; # Storage containers global Map mLastAirFrameUpdateMap = Map(); global Map mSystemNameToId = Map(); global Map mTechniqueNameToId = Map(); end_script_variables on_initialize string header; string outstr; outstr = write_str("data/", mEmitterRptFilename, ".txt"); if (! mEmitterRptFile.Open(outstr, "out")) { writeln("Could not open file: ", outstr); } header = write_str("Time(sec),Action,SensorName,TargetName,TargetIndex,ReceivedPower(dB),SignalToInterference"); mEmitterRptFile.Writeln(header); outstr = write_str("data/", mTrackRptFileName, ".txt"); if (! mTrackRptFile.Open(outstr, "out")) { writeln("Could not open file: ", outstr); } header = write_str("Time(sec),ObserverCallbackType,PlatformName,TrackStartTime(sec),SensorName,TargetName"); mTrackRptFile.Writeln(header); outstr = write_str("data/", mDetectRptFilename, ".txt"); if (! mDetectRptFile.Open(outstr, "out")) { writeln("Could not open file: ", outstr); } header = write_str("Time(sec),ObserverCallbackType,PlatformName,TrackStartTime(sec),SensorName,TargetName"); mDetectRptFile.Writeln(header); outstr = write_str("data/", mJamRptFilename, ".txt"); if (! mJamRptFile.Open(outstr, "out")) { writeln("Could not open file: ", outstr); } header = write_str("Time(sec),ObserverCallbackType,PlatformName,TrackStartTime(sec),SensorName,TargetName"); mJamRptFile.Writeln(header); outstr = write_str("data/", mAirFrameRptFilename, ".txt"); if (! mAirFrameRptFile.Open(outstr, "out")) { writeln("Could not open file: ", outstr); } header = write_str("Time(sec),ObserverCallbackType,PlatformName,TrackStartTime(sec),SensorName,TargetName"); mAirFrameRptFile.Writeln(header); #Fill in platform names of interest mPlatformNames.Clear(); mPlatformNames.Insert("100_soj"); # Fill in systems of interest mES_SystemNames.Clear(); mES_SystemNames.Insert("esm"); mEA_SystemNames.Clear(); mEA_SystemNames.Insert("fwd_vhf_jammer"); mEA_SystemNames.Insert("aft_vhf_jammer"); mEA_SystemNames.Insert("fwd_sband_jammer"); mEA_SystemNames.Insert("aft_sband_jammer"); mEA_SystemNames.Insert("fwd_xband_jammer"); mEA_SystemNames.Insert("aft_xband_jammer"); # Name Mappings for systems mSystemNameToId.Clear(); mSystemNameToId["fwd_vhf_jammer"] = 2001; mSystemNameToId["aft_vhf_jammer"] = 2002; mSystemNameToId["fwd_sband_jammer"] = 2003; mSystemNameToId["aft_sband_jammer"] = 2004; mSystemNameToId["fwd_xband_jammer"] = 2005; mSystemNameToId["aft_xband_jammer"] = 2006; mSystemNameToId["esm"] = 3001; mTechniqueNameToId["noise_jamming"] = 100; mTechniqueNameToId["random_pulse_jamming"] = 101; mTechniqueNameToId["false_target_jamming"] = 102; end_on_initialize script bool FindStr(Array aArray, string aKey) foreach (string key in aArray) { if (key == aKey) { return true; } } end_script script int FindNameId(string aName) int id = 0; if (mSystemNameToId.Exists(aName)) { id = mSystemNameToId[aName]; } return id; end_script script int FindTechniqueId(string aName) int id = 0; if (mTechniqueNameToId.Exists(aName)) { id = mTechniqueNameToId[aName]; } return id; end_script script void SensorTrackInitiated(WsfPlatform aPlatform, WsfSensor aSensor, WsfTrack aTrack) if ((! aTrack.IsStale()) && mPlatformNames.Exists(aPlatform.Name()) && mES_SystemNames.Exists(aSensor.Name())) { int trackReportId = 0; if (aTrack.BearingValid() || aTrack.LocationValid()) { trackReportId = aTrack.TargetIndex(); string mystring = write_str(TIME_NOW, ",", trackReportId, ",", FindNameId(aSensor.Name()), ",", "new", ",", aTrack.StartTime(), ",", aTrack.UpdateTime(), ",", aTrack.Latitude(), ",", aTrack.Longitude(), ",", aTrack.Altitude(), ",", aTrack.Bearing(), ",", aTrack.Elevation(), ",", aTrack.Range()); # TODO - emitter reports and id lists mTrackRptFile.Writeln(mystring); } if (aTrack.SignalToNoiseValid() || (aTrack.SignalCount() > 0)) { string mystring = write_str(TIME_NOW, ",", trackReportId, ",", aTrack.TargetIndex(), ",", FindNameId(aSensor.Name()), ",", aTrack.StartTime(), ",", aTrack.UpdateTime(), ",", aTrack.TimeSinceUpdated(), ",", "new", ",", aTrack.TargetIndex(), ",", aTrack.SignalCount()); # TODO loop over signals to get data mEmitterRptFile.Writeln(mystring); } } end_script script void SensorTrackUpdated(WsfPlatform aPlatform, WsfSensor aSensor, WsfTrack aTrack) if ((! aTrack.IsStale()) && mPlatformNames.Exists(aPlatform.Name()) && mES_SystemNames.Exists(aSensor.Name())) { int trackReportId = 0; if (aTrack.BearingValid() || aTrack.LocationValid()) { trackReportId = aTrack.TargetIndex(); string mystring = write_str(TIME_NOW, ",", trackReportId, ",", FindNameId(aSensor.Name()), ",", "update", ",", aTrack.StartTime(), ",", aTrack.UpdateTime(), ",", aTrack.Latitude(), ",", aTrack.Longitude(), ",", aTrack.Altitude(), ",", aTrack.Bearing(), ",", aTrack.Elevation(), ",", aTrack.Range()); # TODO - emitter reports and id lists mTrackRptFile.Writeln(mystring); } if (aTrack.SignalToNoiseValid() || (aTrack.SignalCount() > 0)) { string mystring = write_str(TIME_NOW, ",", trackReportId, ",", aTrack.TargetIndex(), ",", FindNameId(aSensor.Name()), ",", aTrack.StartTime(), ",", aTrack.UpdateTime(), ",", aTrack.TimeSinceUpdated(), ",", "update", ",", aTrack.TargetIndex(), ",", aTrack.SignalCount()); # TODO loop over signals to get data mEmitterRptFile.Writeln(mystring); } } end_script script void SensorTrackDropped(WsfPlatform aPlatform, WsfSensor aSensor, WsfTrack aTrack) if ((! aTrack.IsStale()) && mPlatformNames.Exists(aPlatform.Name()) && mES_SystemNames.Exists(aSensor.Name())) { int trackReportId = 0; if (aTrack.BearingValid() || aTrack.LocationValid()) { trackReportId = aTrack.TargetIndex(); string mystring = write_str(TIME_NOW, ",", trackReportId, ",", FindNameId(aSensor.Name()), ",", "drop", ",", aTrack.StartTime(), ",", aTrack.UpdateTime(), ",", aTrack.Latitude(), ",", aTrack.Longitude(), ",", aTrack.Altitude(), ",", aTrack.Bearing(), ",", aTrack.Elevation(), ",", aTrack.Range()); # TODO - emitter reports and id lists mTrackRptFile.Writeln(mystring); } if (aTrack.SignalToNoiseValid() || (aTrack.SignalCount() > 0)) { string mystring = write_str(TIME_NOW, ",", trackReportId, ",", aTrack.TargetIndex(), ",", FindNameId(aSensor.Name()), ",", aTrack.StartTime(), ",", aTrack.UpdateTime(), ",", aTrack.TimeSinceUpdated(), ",", "drop", ",", aTrack.TargetIndex(), ",", aTrack.SignalCount()); # TODO loop over signals to get data mEmitterRptFile.Writeln(mystring); } } end_script script void SensorDetectionAttempt(WsfPlatform aPlatform, WsfSensor aSensor, WsfPlatform aTarget, WsfSensorInteraction aResult) if (mPlatformNames.Exists(aPlatform.Name()) && mES_SystemNames.Exists(aSensor.Name())) { if (aResult.Succeeded() && aResult.Detected()) { string mystring = write_str(TIME_NOW, ",", "detection", ",", FindNameId(aSensor.Name()), ",", aTarget.Index(), ",", aResult.RcvdPower(), ",", aResult.SignalToInterference()); mDetectRptFile.Writeln(mystring); } } end_script script void SensorDetectionChanged(WsfPlatform aPlatform, WsfSensor aSensor, int aTargetIndex, WsfSensorInteraction aResult) if (mPlatformNames.Exists(aPlatform.Name()) && mES_SystemNames.Exists(aSensor.Name())) { if (aResult.Succeeded() && aResult.Detected()) { string mystring = write_str(TIME_NOW, ",", "update", ",", FindNameId(aSensor.Name()), ",", aTargetIndex, ",", aResult.RcvdPower(), ",", aResult.SignalToInterference()); mDetectRptFile.Writeln(mystring); } } end_script script void JammingRequestCanceled(WsfPlatform aPlatform, WsfWeapon aWeapon, double aFreq, double aBW, int aTgtIdx) if (mPlatformNames.Exists(aPlatform.Name()) && mEA_SystemNames.Exists(aWeapon.Name())) { string mystring = write_str(TIME_NOW, ",", "canceled", ",", FindNameId(aWeapon.Name()), ",", aFreq, ",", aBW, ",", aTgtIdx); mJamRptFile.Writeln(mystring); } end_script script void JammingRequestInitiated(WsfPlatform aPlatform, WsfWeapon aWeapon, double aFreq, double aBW, string aTechnique, int aTgtIdx) if (mPlatformNames.Exists(aPlatform.Name()) && mEA_SystemNames.Exists(aWeapon.Name())) { string mystring = write_str(TIME_NOW, ",", "new", ",", FindNameId(aWeapon.Name()), ",", aFreq, ",", aBW, ",", FindTechniqueId(aTechnique), ",", aTgtIdx); mJamRptFile.Writeln(mystring); } end_script script void JammingRequestUpdated(WsfPlatform aPlatform, WsfWeapon aWeapon, double aFreq, double aBW, string aTechnique, int aTgtIdx) if (mPlatformNames.Exists(aPlatform.Name()) && mEA_SystemNames.Exists(aWeapon.Name())) { string mystring = write_str(TIME_NOW, ",", "updated", ",", FindNameId(aWeapon.Name()), ",", aFreq, ",", aBW, ",", FindTechniqueId(aTechnique), ",", aTgtIdx); mJamRptFile.Writeln(mystring); } end_script script void MoverUpdated(WsfPlatform aPlatform, WsfMover aMover) if (mPlatformNames.Exists(aPlatform.Name())) { if ((! mLastAirFrameUpdateMap.Exists(aPlatform.Index())) || ((TIME_NOW - mLastAirFrameUpdateMap.Get(aPlatform.Index())) >= mMoverUpdateInterval)) { string mystring = write_str(TIME_NOW, ",", aPlatform.Name(), ",", aPlatform.Index(), ",", aPlatform.Latitude(), ",", aPlatform.Longitude(), ",", aPlatform.Altitude(), ",", aPlatform.VelocityNED().X(), ",", aPlatform.VelocityNED().Y(), ",", aPlatform.VelocityNED().Z(), ",", aPlatform.Roll(), ",", aPlatform.Pitch(), ",", aPlatform.Heading()); mAirFrameRptFile.Writeln(mystring); mLastAirFrameUpdateMap[aPlatform.Index()] = TIME_NOW; } } end_script observer enable SENSOR_TRACK_INITIATED SensorTrackInitiated enable SENSOR_TRACK_UPDATED SensorTrackUpdated enable SENSOR_TRACK_DROPPED SensorTrackDropped enable SENSOR_DETECTION_ATTEMPT SensorDetectionAttempt # duplicative when used with below enable SENSOR_DETECTION_CHANGED SensorDetectionChanged # duplicative when used with above enable JAMMING_REQUEST_INITIATED JammingRequestInitiated enable JAMMING_REQUEST_UPDATED JammingRequestUpdated enable JAMMING_REQUEST_CANCELED JammingRequestCanceled enable MOVER_UPDATED MoverUpdated end_observer