diff --git a/.gitattributes b/.gitattributes index f564c09a1120063af993145eb83ef2b39eff71f7..592b8b6526bb05d7ac2e616a80424fc2095af8e5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3498,6 +3498,8 @@ MAC/Navigator2/panels/Processes/MainCU_Processes.pnl -text MAC/Navigator2/panels/Processes/ObservationAEmbedded.pnl -text MAC/Navigator2/panels/Processes/ObservationAdders.pnl -text MAC/Navigator2/panels/Processes/ObservationControl.pnl -text +MAC/Navigator2/panels/Processes/ObservationGPUProcEmbedded.pnl -text +MAC/Navigator2/panels/Processes/ObservationGPUProcs.pnl -text MAC/Navigator2/panels/Processes/ObservationIBEmbedded.pnl -text MAC/Navigator2/panels/Processes/ObservationInputBuffers.pnl -text MAC/Navigator2/panels/Processes/ObservationWEmbedded.pnl -text @@ -3623,6 +3625,8 @@ MAC/Navigator2/panels/objects/Observations/observationFlow.pnl -text MAC/Navigator2/panels/objects/Observations/observationProgressBar.pnl -text MAC/Navigator2/panels/objects/Observations/observation_smallCEPView.pnl -text MAC/Navigator2/panels/objects/Processes/CCUSWLevelView.pnl -text +MAC/Navigator2/panels/objects/Processes/GPUProcDetail.pnl -text +MAC/Navigator2/panels/objects/Processes/GPUProcSubbandInfo.pnl -text MAC/Navigator2/panels/objects/Processes/MCUSWLevelView.pnl -text MAC/Navigator2/panels/objects/Processes/ObsSW_CEP.pnl -text MAC/Navigator2/panels/objects/Processes/ObsSW_Main.pnl -text diff --git a/MAC/Navigator2/panels/Processes/ObservationGPUProcEmbedded.pnl b/MAC/Navigator2/panels/Processes/ObservationGPUProcEmbedded.pnl new file mode 100644 index 0000000000000000000000000000000000000000..abd68ef8ac9d1e955deefb9bceab8431976111eb --- /dev/null +++ b/MAC/Navigator2/panels/Processes/ObservationGPUProcEmbedded.pnl @@ -0,0 +1,271 @@ +V 11 +1 +LANG:1 0 +PANEL,-1 -1 1200 823 N "_3DFace" 0 +"main() +{ + // Initialise the Panel + navPanel_initPanel(\"fw_viewBox\"); + baseDP = g_currentDatapoint; + dpGet(baseDP+\".observationName\",observationNr); + observationName=\"Observation\"+observationNr; + +} + +// +// Callback for dpConnect to action point. +// If there is an action required this point will tell so +// +void doAction(string aDP, string anAction) { + LOG_DEBUG(\"ObservationGPUProcEmbedded.pnl:doAction| Action required. found: \" + anAction); + // split action into essentials + dyn_string actionString; + if (!navFunct_splitAction(anAction,actionString)) { + return; + } + + LOG_DEBUG(\"ObservationGPUProcEmbedded.pnl:doAction|found actionString: \" + actionString); + + // Reload + if (actionString[1] == \"Reload\") { + reload(); + } +} + +void reload() { + + navFunct_clearGlobalLists(); + + addGPUProcs(); +} + +void addGPUProcs() { + + // get all the InputBuffers used by this observation + gpuProcs = navFunct_getGPUProcsForObservation(observationName); + +} +" 0 + E E E E 1 -1 -1 0 200 170 +""0 1 +E "#uses \"navPanel.ctl\" + +string baseDP=\"\"; +string observationNr; +string observationName; +dyn_string gpuProcs; +" 0 + 2 +"CBRef" "1" +"EClose" E +"" +DISPLAY_LAYER, 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 +LAYER, 0 +1 +LANG:1 0 +29 0 +"GPUProcModule" +"" +1 200 224.2340838334161 E E E 1 E 1 E N "_WindowText" E N "_Window" E E + E E +0 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +0 +1 +LANG:1 34 MS Shell Dlg 2,8,-1,5,50,0,0,0,0,0 +0 0 50 1199 820 +15 Canvas.Canvas.1 +0 +"main(bool enter) +{ + this.ModuleName = \"GPUProcModule\"; + + RootPanelOnModule(\"Processes/ObservationGPUProcs.pnl\",\"\",\"GPUProcModule\",\"\"); + +}" 0 +2 21 +"TopLabel" +"" +1 420 0 E E E 1 E 1 E N "_3DText" E N "_Transparent" E E + E E +21 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E U 1 E 420 0 604 20 +0 2 2 "0s" 0 0 0 192 0 0 420 0 1 +1 +LANG:1 33 MS Shell Dlg,-1,16,5,75,0,0,0,0,0 +0 1 +LANG:1 20 Observation GPUProcs +2 22 +"PRIMITIVE_TEXT2" +"" +1 51 32 E E E 1 E 1 E N "_WindowText" E N "_Window" E E + E E +22 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E U 0 E 51 32 72 45 +0 2 2 "0s" 0 0 0 192 0 0 51 32 1 +1 +LANG:1 34 MS Shell Dlg 2,8,-1,5,75,0,0,0,0,0 +0 1 +LANG:1 3 Obs +2 23 +"PRIMITIVE_TEXT3" +"" +1 360.1754385964912 32 E E E 1 E 1 E N "_WindowText" E N "_Window" E E + E E +23 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E 1.087719298245614 0 1 -31.40350877192984 2 0 E 360 30 477 43 +0 2 2 "0s" 0 0 0 192 0 0 360 30 1 +1 +LANG:1 34 MS Shell Dlg 2,8,-1,5,75,0,0,0,0,0 +0 1 +LANG:1 19 subband information +2 31 +"PRIMITIVE_TEXT4" +"" +1 95 32 E E E 1 E 1 E N "_WindowText" E N "_Window" E E + E E +25 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E U 0 E 95 32 166 45 +0 2 2 "0s" 0 0 0 192 0 0 95 32 1 +1 +LANG:1 34 MS Shell Dlg 2,8,-1,5,75,0,0,0,0,0 +0 1 +LANG:1 11 DataProduct +2 32 +"PRIMITIVE_TEXT5" +"" +1 182 32 E E E 1 E 1 E N "_WindowText" E N "_Window" E E + E E +26 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E U 0 E 182 32 233 45 +0 2 2 "0s" 0 0 0 192 0 0 182 32 1 +1 +LANG:1 34 MS Shell Dlg 2,8,-1,5,75,0,0,0,0,0 +0 1 +LANG:1 8 Dropping +2 33 +"PRIMITIVE_TEXT6" +"" +1 2 32 E E E 1 E 1 E N "_WindowText" E N "_Window" E E + E E +27 0 0 0 0 0 +E E E +0 +1 +LANG:1 6 Status + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E U 0 E 2 32 9 45 +0 2 2 "0s" 0 0 0 192 0 0 2 32 1 +1 +LANG:1 34 MS Shell Dlg 2,8,-1,5,75,0,0,0,0,0 +0 1 +LANG:1 1 S +2 34 +"PRIMITIVE_TEXT7" +"" +1 18 32 E E E 1 E 1 E N "_WindowText" E N "_Window" E E + E E +28 0 0 0 0 0 +E E E +0 +1 +LANG:1 8 CBT Node + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E U 0 E 18 32 25 45 +0 2 2 "0s" 0 0 0 192 0 0 18 32 1 +1 +LANG:1 34 MS Shell Dlg 2,8,-1,5,75,0,0,0,0,0 +0 1 +LANG:1 1 N +2 35 +"PRIMITIVE_TEXT8" +"" +1 30 32 E E E 1 E 1 E N "_WindowText" E N "_Window" E E + E E +29 0 0 0 0 0 +E E E +0 +1 +LANG:1 11 GPU Proc Nr + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E U 0 E 30 32 38 45 +0 2 2 "0s" 0 0 0 192 0 0 30 32 1 +1 +LANG:1 34 MS Shell Dlg 2,8,-1,5,75,0,0,0,0,0 +0 1 +LANG:1 1 G +0 +LAYER, 1 +1 +LANG:1 0 +0 +LAYER, 2 +1 +LANG:1 0 +0 +LAYER, 3 +1 +LANG:1 0 +0 +LAYER, 4 +1 +LANG:1 0 +0 +LAYER, 5 +1 +LANG:1 0 +0 +LAYER, 6 +1 +LANG:1 0 +0 +LAYER, 7 +1 +LANG:1 0 +0 +0 diff --git a/MAC/Navigator2/panels/Processes/ObservationGPUProcs.pnl b/MAC/Navigator2/panels/Processes/ObservationGPUProcs.pnl new file mode 100644 index 0000000000000000000000000000000000000000..bd7b77bdd92e3ac0f02415290df5715d7f68cfcf --- /dev/null +++ b/MAC/Navigator2/panels/Processes/ObservationGPUProcs.pnl @@ -0,0 +1,260 @@ +V 11 +1 +LANG:1 0 +PANEL,-1 -1 1200 7500 N "_3DFace" 0 +"main() +{ + // Initialise the Panel + navPanel_initPanel(\"fw_viewBox\"); + strModuleName = myModuleName(); + baseDP = \"LOFAR_PermSW\"; + database=dpSubStr(baseDP,DPSUB_SYS); + + + // This panel needs to act on active observations, in running status so we connect to the MACScheduler te be updated + + activeObsDP =MainDBName+\"LOFAR_PermSW_MACScheduler.activeObservations\"; + // check if MACScheduler pointenabled and accessible + if (dpExists(activeObsDP)) { + if (dpConnect(\"updateActiveObservations\", activeObsDP+\":_online.._value\", + activeObsDP+\":_online.._invalid\") == -1) { + LOG_ERROR(\"ObservationGPUProcs.pnl:main|Couldn't connect to: \"+activeObsDP); + } + } else { + if (!isStandalone()) LOG_ERROR(\"ObservationGPUProcs.pnl:main|Couldn't find DP to connect to: \"+activeObsDP); + } +} + +void updateActiveObservations(string dp1, dyn_string obs, + string dp2, bool invalid) +{ + + // remove pipelines from the list + for (int i=dynlen(obs);i > 0; i--) if (!navFunct_isObservation(obs[i])) dynRemove(obs,i); + + activeObservations = obs; + // if there are selected observation check the observationsList if those selected observations still are active + // remove the unactive observations from the list + + // replace old observations if there are no observations selected + if (selectedObservations) { + for (int i=dynlen(observationsList); i < 1; i--) { + int idx = dynContains(activeObservations,observationsList[i]); + if (i <= 0) dynRemove(observationsList,i); + } + if (dynlen(observationsList) ==0) { + selectedObservations=false; + } + } + + if (!selectedObservations) { + observationsList = activeObservations; + } + // because CobaltProcesses claim their datapoints when the observation is actually running we need to connect to all these observations + // and give a signal when the runstate of one of them changes to running to trigger the Cobalt point collection + + LOG_DEBUG(\"ObservationGPUProcs.pnl:updateActiveObservations|observationList: \"+observationsList); + + obsConnections = makeDynString(); + for (int i = 1; i <= dynlen(observationsList) ; i++) { + // compose the WinCC OA DP name + string obsName = \"LOFAR_ObsSW_\"+observationsList[i]; + + // Ask the claimmanager for the temp obs representation + string obsDP=MainDBName+claimManager_nameToRealName(obsName); + + // add DP to list with all connects + if (! dynContains(obsConnections,obsDP+\".runState\")) dynAppend(obsConnections,obsDP+\".runState\"); + } + + if (dynlen(oldObsConnections) > 0) { + // disconnect old observations + dpDisconnect(\"monitorRunStates\",oldObsConnections); + dynClear(oldObsConnections); + } + + // connect to runState for all active observations + if (dynlen(obsConnections) > 0 && dpConnect(\"monitorRunStates\",obsConnections) == -1) { + LOG_ERROR(\"ObservationGPUProcs.pnl:updateActiveObservations|ERROR: couldn't connect to : \"+obsConnections+ \" \" + getLastError()); + } else if (dynlen(obsConnections) > 0) { + oldObsConnections = obsConnections; + } +} + +void monitorRunStates(dyn_string dpList,dyn_string runStates) { + for (int i=1; i<= dynlen(runStates); i++) { + if (runStates[i] == \"Running\" || runStates[i] == \"Quiting\") { + reload(); + break; + } + } +} + +void prepareProcesses() { + dyn_string result; + + g_processesList = gpuProcs; + + // write result to the db so various panels can reset themselves + dpSet(DPNAME_NAVIGATOR + g_navigatorID + \".processesList\",result); + + LOG_DEBUG(\"ObservationGPUProcs.pnl:prepareProcesses|processList found: \"+ g_processesList); +} + +// +// Callback for dpConnect to action point. +// If there is an action required this point will tell so +// +void doAction(string aDP, string anAction) { + LOG_DEBUG(\"ObservationGPUProcs.pnl:doAction| Action required. found: \" + anAction); + // split action into essentials + dyn_string actionString; + if (!navFunct_splitAction(anAction,actionString)) { + return; + } + + LOG_DEBUG(\"ObservationGPUProcs.pnl:doAction|found actionString: \" + actionString); + + // Reload + if (actionString[1] == \"Reload\") { + reload(); + } +} + +void reload() { + + navFunct_clearGlobalLists(); + + addGPUProcs(); + + // set the observation selectable items + prepareProcesses(); + + redraw(); + + // set panel to ready + g_objectReady=true; + + // trigger that the panel values are calculated and ready + navPanel_setEvent(\"ObservationGPUProcs.pnl\",\"Update\"); +} + +void addGPUProcs() { + + // get all the GPUProcs used for all active observations + dynClear(gpuProcs); + for (int i =1; i <= dynlen(obsConnections); i++) { + + string observation = claimManager_realNameToName(obsConnections[i]); + + dyn_string ib = navFunct_getGPUProcsForObservation(navFunct_observationNameToNumber(observation)); + + dynAppend(gpuProcs,ib); + } + dynSort(gpuProcs); +} + +" 0 + E E E E 1 -1 -1 0 0 0 +""0 1 +E "#uses \"navPanel.ctl\" + +string baseDP=\"\"; +dyn_string observationsList; +dyn_string obsConnections; +dyn_string oldObsConnections; // keep copy latest observations to be disconnected when the list changes +dyn_string activeObservations; + +string activeObsDP = \"\"; +string database; +bool selectedObservations=false; + +dyn_string gpuProcs; +bool connected = false; +dyn_string GPURefNames; +string strModuleName; + + +void clearGPURefNames() { + // remove all symbols because new ones will be added + for (int i=1; i <= dynlen(GPURefNames); i++) { + removeSymbol(strModuleName,\"\",GPURefNames[i]); + } + dynClear(GPURefNames); +} + +void redraw() { + string barColor = \"_3DFace\"; + if (dynlen(GPURefNames) > 0) { + clearGPURefNames(); + } + int xPos_AddSymbol = 0; + int yPos_AddSymbol = 0; + int ref = 1; + string addPanelName = \"objects/Processes/GPUProcDetail.pnl\"; + //loop over list and prepare panel with all gpuProc objects + for (int i=1; i<= dynlen(gpuProcs); i++) { + if ((float)i/2. != floor(i/2.)) { + barColor = \"lightgrey\"; + } else { + barColor = \"_3DFace\"; + } + GPURefNames[ref]=\"GPU\"+(ref); + + if ( addSymbol( strModuleName, // Stay in this modul + \"\", // Name of this panel + addPanelName, // Panel to add + GPURefNames[ref], // Ref of the addedPanel + makeDynString( \"$gpuProc:\" + gpuProcs[i], + \"$yPos_AddSymbol:\" + yPos_AddSymbol, + \"$barColor:\" + barColor) , // Define all $values + xPos_AddSymbol, // Xpos of the AddedSymbol + yPos_AddSymbol, // Ypos of the AddedSymbol + 0, // angle + 1 ,1 // zoomX , zoomY + ) < 0 ) { + LOG_ERROR(\"ObservationGPUProcs.pnl:redraw|Error Appending inputBuffer for: \" + gpuProcs[i] + \" in this panel.\"); + } + yPos_AddSymbol += 14; + ref++; + } + +}" 0 + 2 +"CBRef" "1" +"EClose" E +"" +DISPLAY_LAYER, 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 +LAYER, 0 +1 +LANG:1 0 +0 +LAYER, 1 +1 +LANG:1 0 +0 +LAYER, 2 +1 +LANG:1 0 +0 +LAYER, 3 +1 +LANG:1 0 +0 +LAYER, 4 +1 +LANG:1 0 +0 +LAYER, 5 +1 +LANG:1 0 +0 +LAYER, 6 +1 +LANG:1 0 +0 +LAYER, 7 +1 +LANG:1 0 +0 +0 diff --git a/MAC/Navigator2/panels/Processes/ObservationInputBuffers.pnl b/MAC/Navigator2/panels/Processes/ObservationInputBuffers.pnl index d12d0f54a4ceb3b614c66a3cac34e6e4e984e7bb..48334101b74c6b9598a65ebd2e3ab53e7c06b5b9 100644 --- a/MAC/Navigator2/panels/Processes/ObservationInputBuffers.pnl +++ b/MAC/Navigator2/panels/Processes/ObservationInputBuffers.pnl @@ -93,115 +93,6 @@ void monitorRunStates(dyn_string dpList,dyn_string runStates) { -// connect to stationInputStreams from the active observations -void connectStationInputStreams(string runState) { - stationInputs = \"\"; - string obsDP=\"\"; - dyn_string stream0DPList; - dyn_string stream1DPList; - dyn_string stream2DPList; - dyn_string stream3DPList; - - // change all found DP's to contain all the elements that contain the stream.percBad - if (connected0) { - dpDisconnect(\"streamCB0\",connectTo0); - dynClear(connectTo0); - connected0 = false; - } - if (connected1) { - dpDisconnect(\"streamCB1\",connectTo1); - dynClear(connectTo1); - connected1 = false; - } - if (connected2) { - dpDisconnect(\"streamCB2\",connectTo2); - dynClear(connectTo2); - connected2 = false; - } - if (connected3) { - dpDisconnect(\"streamCB3\",connectTo3); - dynClear(connectTo3); - connected3 = false; - } - - if (dynlen(observationsList) == 1 && runState == \"Quiting\") { - setValue(\"streamObject0\", \"foreCol\", \"Lofar_off\"); - setValue(\"streamObject1\", \"foreCol\", \"Lofar_off\"); - setValue(\"streamObject2\", \"foreCol\", \"Lofar_off\"); - setValue(\"streamObject3\", \"foreCol\", \"Lofar_off\"); - return; - } - - - //collect all active observations and their stationInputStreams - if (dynlen(observationsList) > 0) { - // prepare connectList - for(int i=1; i <= dynlen(observationsList); i++) { - dynClear(stream0DPList); - dynClear(stream1DPList); - dynClear(stream2DPList); - dynClear(stream3DPList); - // For all observations collect the PermSW streamInfo - stationInputs = navFunct_getStationInputForObservation(observationsList[i]); - - - for (int i=1; i<= dynlen(stationInputs); i++) { - if (! dynContains(connectTo0,stationInputs[i]+\".stream0:_online.._value\")) dynAppend(connectTo0,stationInputs[i]+\".stream0.rejected:_online.._value\"); - if (! dynContains(connectTo1,stationInputs[i]+\".stream1:_online.._value\")) dynAppend(connectTo1,stationInputs[i]+\".stream1.rejected:_online.._value\"); - if (! dynContains(connectTo2,stationInputs[i]+\".stream2:_online.._value\")) dynAppend(connectTo2,stationInputs[i]+\".stream2.rejected:_online.._value\"); - if (! dynContains(connectTo3,stationInputs[i]+\".stream3:_online.._value\")) dynAppend(connectTo3,stationInputs[i]+\".stream3.rejected:_online.._value\"); - } - if (dynlen(stationInputs) > 0) baseDP = stationInputs[1]; - } - - - // check if the required datapoint for this view are enabled and accessible - if (dynlen(connectTo0)>0 && navFunct_dpReachable(CEPDBName) ){ - if (dpConnect(\"streamCB0\", connectTo0) == -1) { - setValue(\"streamObject0\", \"foreCol\", \"Lofar_dpdoesnotexist\"); - } else { - connected0 = true; - } - } else { - - setValue(\"streamObject0\", \"foreCol\", \"Lofar_off\"); - } - if (dynlen(connectTo1)>0 && navFunct_dpReachable(CEPDBName) ){ - if (dpConnect(\"streamCB1\", connectTo1) == -1) { - setValue(\"streamObject1\", \"foreCol\", \"Lofar_dpdoesnotexist\"); - } else { - connected1 = true; - } - } else { - setValue(\"streamObject1\", \"foreCol\", \"Lofar_off\"); - } - if (dynlen(connectTo2)>0 && navFunct_dpReachable(CEPDBName) ){ - if (dpConnect(\"streamCB2\", connectTo2) == -1) { - setValue(\"streamObject2\", \"foreCol\", \"Lofar_dpdoesnotexist\"); - } else { - connected2 = true; - } - } else { - setValue(\"streamObject2\", \"foreCol\", \"Lofar_off\"); - } - if (dynlen(connectTo3)>0 && navFunct_dpReachable(CEPDBName)){ - if (dpConnect(\"streamCB3\", connectTo3) == -1) { - setValue(\"streamObject3\", \"foreCol\", \"Lofar_dpdoesnotexist\"); - } else { - connected3 = true; - } - } else { - setValue(\"streamObject3\", \"foreCol\", \"Lofar_off\"); - } - } else { - setValue(\"streamObject0\", \"foreCol\", \"Lofar_off\"); - setValue(\"streamObject1\", \"foreCol\", \"Lofar_off\"); - setValue(\"streamObject2\", \"foreCol\", \"Lofar_off\"); - setValue(\"streamObject3\", \"foreCol\", \"Lofar_off\"); - } -} - - void prepareProcesses() { dyn_string result; string connectTo=\"LOFAR_PermSW\"; @@ -211,6 +102,7 @@ void prepareProcesses() { dyn_string splitted = strsplit(inputBuffers[i],\"_\"); dynAppend(result,\"LOFAR_PermSW,\"+splitted[3]+\",\"+connectTo+\"_\"+splitted[3]); dynAppend(result,connectTo+\"_\"+splitted[3]+\",CobaltStationInput,\"+connectTo+\"_\"+splitted[3]+\"_CobaltStationInput\"); + dynAppend(g_processesList,inputBuffers[i]); } // write result to the db so various panels can reset themselves @@ -286,7 +178,6 @@ string activeObsDP = \"\"; string database; bool selectedObservations=false; -dyn_string inputBuffers; bool connected = false; dyn_string IBRefNames; string strModuleName; diff --git a/MAC/Navigator2/panels/main.pnl b/MAC/Navigator2/panels/main.pnl index ec6a360b188f69833db9f293ce62a99021e42d7b..e4b5f0f5554ee4e67cebd95f1781de1bcd43ac75 100644 --- a/MAC/Navigator2/panels/main.pnl +++ b/MAC/Navigator2/panels/main.pnl @@ -162,7 +162,7 @@ void addBackLines() { } yPos_AddSymbol += 12; ref++; - addProcesses(stationList[i]+\":\"); +// addProcesses(stationList[i]+\":\"); } dpSet(DPNAME_NAVIGATOR + g_navigatorID + \".processesList\",station_result); } @@ -779,13 +779,17 @@ LANG:1 5 AardF 0 1 182 4 "" 3 0 -1 183 5 "" 0 +1 183 4 "" 4 0 -1 184 6 "" 1 +1 184 5 "" 0 0 -1 185 6 "" 2 +1 185 5 "" 1 0 -1 186 7 "" 0 +1 186 6 "" 1 +0 +1 187 6 "" 2 +0 +1 188 7 "" 0 0 0 LAYER, 1 diff --git a/MAC/Navigator2/panels/objects/Processes/GPUProcDetail.pnl b/MAC/Navigator2/panels/objects/Processes/GPUProcDetail.pnl new file mode 100644 index 0000000000000000000000000000000000000000..54c6f6b3ee27535220834de992bf1afa60c4e3ca --- /dev/null +++ b/MAC/Navigator2/panels/objects/Processes/GPUProcDetail.pnl @@ -0,0 +1,335 @@ +V 11 +1 +LANG:1 0 +PANEL,-1 -1 1028 66 N "_3DFace" 3 +"$barColor" +"$gpuProc" +"$yPos_AddSymbol" +"main() +{ + + barColor = $barColor; + strModuleName = myModuleName(); + setValue(\"bar\",\"backCol\",barColor); + + baseDP = g_currentDatapoint; + GPUProcDP = $gpuProc; + + // connect to the gpuProcvalues + // check if the requiered datapoint for this view are enabled and accessible + if (dpExists(GPUProcDP + \".status.state\")) { + if (!dpConnect(\"updateGPUProc\", GPUProcDP + \".observationName\", + GPUProcDP + \".dataProductType\", + GPUProcDP + \".subband\", + GPUProcDP + \".dropping\", + GPUProcDP + \".written\", + GPUProcDP + \".dropped\", + GPUProcDP + \".status.state:_online.._invalid\") == -1) { + LOG_ERROR(\"GPUProcDetail.pnl:updateTrigger|Couldn't connect to: \"+GPUProcDP+\" \"+getLastError()); + } + } else { + LOG_ERROR(\"GPUProcDetail.pnl:updateTrigger|Couldn't find DP to connect to: \"+GPUProcDP); + setValue(\"observationName\", \"backCol\", \"Lofar_dpdoesnotexist\"); + setValue(\"dataProductType\", \"backCol\", \"Lofar_dpdoesnotexist\"); + setValue(\"subband\", \"backCol\", \"Lofar_dpdoesnotexist\"); + setValue(\"dropping\", \"backCol\", \"Lofar_dpdoesnotexist\"); + setValue(\"written\", \"backCol\", \"Lofar_dpdoesnotexist\"); + setValue(\"dropped\", \"backCol\", \"Lofar_dpdoesnotexist\"); + } + + // pass baseDP to selfstate Object to work with + setValue(\"selfState.light\",\"toolTipText\",GPUProcDP); + + // connect for selfUpdates + showSelfState(GPUProcDP); +} + + +updateGPUProc(string dp1, string observationName, + string dp2, string dataProductType, + string dp3, dyn_int subband, + string dp4, dyn_bool dropping, + string dp5, dyn_float written, + string dp6, dyn_float dropped, + string dp7, bool invalid) +{ + + LOG_DEBUG(\"GPUProcDetail.pnl:update|entered\"); + + observation=observationName; + string dp = dpSubStr(dp1,DPSUB_DP); + string color = \"Lofar_operational\"; + // get Node and gpu numbers out of the datapoint + int cbt = (substr(dp1,strpos(dp1,\"OSCBT\")+5,3)); + int gpu = (substr(dp1,strpos(dp1,\"CobaltGPUProc\")+13,2)); + CBTstr.text = cbt; + GPUstr.text = gpu; + + if (!invalid) { + setValue(\"observationName\", \"text\", observationName); + setValue(\"dataProductType\", \"text\", dataProductType); + if (dynContains(dropping,\"True\") ) color = \"Lofar_broken\"; + setValue(\"dropping\", \"backCol\",color); + + } else { + setValue(\"observationName\", \"text\", \"\"); + setValue(\"dataProductType\", \"text\", \"\"); + setValue(\"written\", \"text\", \"\"); + setValue(\"dropped\", \"text\", \"\"); + setValue(\"dropping\", \"backCol\",\"Lofar_invalid\"); + } + + addSubbands(subband, written, dropped, invalid); + +} +" 0 + E E E E 1 -1 -1 0 0 0 +""0 1 +E "#uses \"navPanel.ctl\" + +string GPUProc=\"\"; +string database=\"\"; +string observation=\"\"; + +string baseDP = \"\"; +string GPUProcDP=\"\"; +string barColor=\"\"; + +bool bDoubleClicked = false; + +dyn_string oldSubbandRefNames; +string strModuleName; + + +void clearOldSubbandRefNames() { + // remove all symbols because new ones will be added + for (int i=1; i <= dynlen(oldSubbandRefNames); i++) { + removeSymbol(strModuleName,\"\",oldSubbandRefNames[i]); + } + dynClear(oldSubbandRefNames); +} + +// routine for single mouse click +void click(string dp) { + // set delay in case double click was meant + delay(0, 100); + if (!bDoubleClicked) { + if (dp == stationDP) { + navPanel_setEvent(\"GPUProc\",\"EventClick\"); + } + } +} + +// routine for double mouse click +void dblClick(string dp) { + // indicate this is a doubleClick + bDoubleClicked = true; + + if (dpExists(dp) ) { + LOG_DEBUG(\"GPUProcDetail.pnl:DoubleClick|Setting currentDatapoint from : \"+g_currentDatapoint+\" to \"+dp); + g_currentDatapoint=dp; + navPanel_setEvent(\"GPUProcDetail.pnl\",\"ChangePanel\"); + } + // set delay to avoid click event will be triggered + delay(0, 500); + bDoubleClicked = false; +} + +// routine for right mouse click +void rClick(string dp) { + navPanel_setEvent(\"GPUProcDetail.pnl\",\"EventRightClick\"); +} + +// add subbandinformation +void addSubbands(dyn_int subbands, dyn_float written, dyn_float dropped, bool invalid) { + LOG_DEBUG(\"GPUProcDetail.pnl:addSubbands\"); + + dyn_string subbandRefNames; + if (dynlen(oldSubbandRefNames) > 0) { + clearOldSubbandRefNames(); + } + int xPos_AddSymbol = 220; + int ref = 1; + string addPanelName = \"objects/Processes/GPUProcSubbandInfo.pnl\"; + //loop over list and prepare panel with all subband objects + for (int i=1; i<= dynlen(subbands); i++) { + subbandRefNames[ref]=\"subband\"+(subbands[i]); + + // sometimes it is possible that the trigger for this function is faster then + // cobalt has written all the buffers, so we will get an index out of range + // to avoid this we will set the value at the index to 0 + + if (dynlen(written) < i) dynAppend(written,0); + if (dynlen(dropped) < i) dynAppend(dropped,0); + + if ( addSymbol( strModuleName, // Stay in this modul + \"\", // Name of this panel + addPanelName, // Panel to add + subbandRefNames[ref], // Ref of the addedPanel + makeDynString( \"$subband:\" + subbands[i], + \"$dropped:\" + dropped[i], + \"$written:\" + written[i], + \"$observation:\" + observation, + \"$invalid:\" + invalid), // Define all $values + xPos_AddSymbol, // Xpos of the AddedSymbol + $yPos_AddSymbol, // Ypos of the AddedSymbol + 0, // angle + 1 ,1 // zoomX , zoomY + ) < 0 ) { + LOG_ERROR(\"GPUProcDetail.pnl:addSubbandsError Appending symbol for: \" + subbands[i] + \" in this panel.\"); + } + xPos_AddSymbol += 14; + ref++; + } + oldSubbandRefNames = subbandRefNames; + + +} +" 0 + 2 +"CBRef" "1" +"EClose" E +"" +DISPLAY_LAYER, 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 +LAYER, 0 +1 +LANG:1 0 +6 16 +"bar" +"" +1 0 0 E E E 1 E 1 E N {0,0,0} E N "_3DFace" E E + E E +15 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E U 1 E 0 3 214 17 +1 25 0 "" 1 +0 +6 18 +"dropping" +"" +1 90 30 E E E 1 E 1 E N {0,0,0} E N {255,255,255} E E + E E +16 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E 1 0 1 110 -25 1 E 90 30 100 40 +2 20 +"observationName" +"" +1 50 4 E E E 1 E 1 E N "_WindowText" E N "_Window" E E + E E +17 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E U 0 E 50 4 67 17 +0 2 2 "0s" 0 0 0 192 0 0 50 4 1 +1 +LANG:1 37 MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0 +0 1 +LANG:1 3 obs +2 22 +"CBTstr" +"" +1 20 4 E E E 1 E 1 E N "_WindowText" E N "_Window" E E + E E +18 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E U 0 E 20 4 26 17 +0 2 2 "0s" 0 0 0 192 0 0 20 4 1 +1 +LANG:1 37 MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0 +0 1 +LANG:1 1 1 +2 23 +"GPUstr" +"" +1 30 4 E E E 1 E 1 E N "_WindowText" E N "_Window" E E + E E +19 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E U 0 E 30 4 36 17 +0 2 2 "0s" 0 0 0 192 0 0 30 4 1 +1 +LANG:1 37 MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0 +0 1 +LANG:1 1 0 +2 24 +"dataProductType" +"" +1 102 4 E E E 1 E 1 E N "_WindowText" E N "_Window" E E + E E +20 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E U 0 E 102 4 162 17 +0 2 2 "0s" 0 0 0 192 0 0 102 4 1 +1 +LANG:1 37 MS Shell Dlg 2,8.25,-1,5,50,0,0,0,0,0 +0 1 +LANG:1 10 beamformed +0 +LAYER, 1 +1 +LANG:1 0 +0 +LAYER, 2 +1 +LANG:1 0 +0 +LAYER, 3 +1 +LANG:1 0 +0 +LAYER, 4 +1 +LANG:1 0 +0 +LAYER, 5 +1 +LANG:1 0 +0 +LAYER, 6 +1 +LANG:1 0 +0 +LAYER, 7 +1 +LANG:1 0 +0 +3 0 "selfState" -1 +"objects\\lofar_self_state.pnl" 7 18 T 15 0.7142857142857143 0 0.7142857142857143 -4 -9.857142857142858 +0 +0 diff --git a/MAC/Navigator2/panels/objects/Processes/GPUProcSubbandInfo.pnl b/MAC/Navigator2/panels/objects/Processes/GPUProcSubbandInfo.pnl new file mode 100644 index 0000000000000000000000000000000000000000..e95a33c77d5fc007c94fe9a365e929e06be2f6dd --- /dev/null +++ b/MAC/Navigator2/panels/objects/Processes/GPUProcSubbandInfo.pnl @@ -0,0 +1,84 @@ +V 11 +1 +LANG:1 0 +PANEL,-1 -1 114 79 N "_3DFace" 5 +"$dropped" +"$invalid" +"$observation" +"$subband" +"$written" +"main() +{ + + if ($invalid) { + subbandInfo.backCol(\"Lofar_invalid\"); + subbandInfo.toolTipText = \"\"; + } else { + if ($dropped > 0) { + subbandInfo.backCol(\"Lofar_broken\"); + } else if ($written > 0) { + subbandInfo.backCol(\"Lofar_operational\"); + } + tooltip = \"Observation: \" + $observation + \"\\n\" + + \"Subband: \" + $subband + \"\\n\" + + \"Written: \" + $written + \"\\n\" + + \"Dropped: \" + $dropped; + subbandInfo.toolTipText(tooltip); + } +}" 0 + E E E E 1 -1 -1 0 0 0 +""0 1 +E "string tooltip = \"\"; + " 0 + 2 +"CBRef" "1" +"EClose" E +"" +DISPLAY_LAYER, 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 +LAYER, 0 +1 +LANG:1 0 +6 0 +"subbandInfo" +"" +1 270 20 E E E 1 E 1 E N {0,0,0} E N {255,255,255} E E + E E +0 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E E 0 1 1 2 1 E 1 0 1 -270 -17 1 E 270 20 284 34 +0 +LAYER, 1 +1 +LANG:1 0 +0 +LAYER, 2 +1 +LANG:1 0 +0 +LAYER, 3 +1 +LANG:1 0 +0 +LAYER, 4 +1 +LANG:1 0 +0 +LAYER, 5 +1 +LANG:1 0 +0 +LAYER, 6 +1 +LANG:1 0 +0 +LAYER, 7 +1 +LANG:1 0 +0 +0 diff --git a/MAC/Navigator2/panels/objects/Processes/inputBuffer.pnl b/MAC/Navigator2/panels/objects/Processes/inputBuffer.pnl index 3f3d9f5b1cf4ebe796fc0ed870c56e0fc0fab6a7..1cb1726a7bb0cdb4fa0198995da3222eb8decfcf 100644 --- a/MAC/Navigator2/panels/objects/Processes/inputBuffer.pnl +++ b/MAC/Navigator2/panels/objects/Processes/inputBuffer.pnl @@ -13,7 +13,6 @@ PANEL,-1 -1 1010 66 N "_3DFace" 2 baseDP = g_currentDatapoint; inputBufferDP = $inputBuffer; - DebugN(inputBufferDP); stationName = strsplit(inputBufferDP,\"_\")[3]; // connect to the inputBuffer values @@ -143,6 +142,7 @@ updateBuffer(string dp1, string observationName, } string getColor(int val, string color) { + if (val == 0) color = \"Lofar_operational\"; if (val > 0 && val < 10) { color = \"Lofar_test\"; } else if (val >= 10 && val < 25) { @@ -432,7 +432,7 @@ E E 0 1 1 2 1 E U 0 E 789 4 825 17 LANG:1 34 MS Shell Dlg 2,8,-1,5,50,0,0,0,0,0 0 1 LANG:1 6 000000 -1 14 0 "" 1 +1 19 0 "" 1 0 2 13 "observationName" diff --git a/MAC/Navigator2/panels/objects/Processes/observationFlow_cobaltGPUProcs.pnl b/MAC/Navigator2/panels/objects/Processes/observationFlow_cobaltGPUProcs.pnl index dec84116f16039500995305dda9f0325f9aa8c4f..af27d587e6ea96f76b734e969e5c418a32f9fac4 100644 --- a/MAC/Navigator2/panels/objects/Processes/observationFlow_cobaltGPUProcs.pnl +++ b/MAC/Navigator2/panels/objects/Processes/observationFlow_cobaltGPUProcs.pnl @@ -1,7 +1,7 @@ V 11 1 LANG:1 0 -PANEL,-1 -1 305 78 N "_3DFace" 0 +PANEL,-1 -1 177 78 N "_3DFace" 0 "main() { baseDP = \"LOFAR_PermSW\"; @@ -20,7 +20,19 @@ PANEL,-1 -1 305 78 N "_3DFace" 0 }" 0 - E E E E 1 -1 -1 0 0 0 + E "main(int x, int y) +{ + click(); +}" 0 + "main() +{ + rClick(); +}" 0 + "main(int x, int y) +{ + dblClick(); +}" 0 + 1 -1 -1 0 0 0 ""0 1 E "#uses \"navPanel.ctl\" @@ -36,6 +48,39 @@ bool connectedGPUProcs; bool selectedObservations=false; +bool bDoubleClicked = false; + +// routine for single mouse click +void click() { + // set delay in case double click was meant + delay(0, 100); + if (!bDoubleClicked && dynlen(gpuprocs) > 0) { + navPanel_setEvent(\"observationFlow_cobaltGPUProcs.pnl\",\"EventClick\"); + } +} + +// routine for double mouse click +void dblClick() { + // indicate this is a doubleClick + bDoubleClicked = true; + if (dynlen(gpuprocs) > 0) { + + LOG_DEBUG(\"observationFlow_cobaltGPUProcs.pnl:DoubleClick|Setting currentDatapoint from : \"+g_currentDatapoint+\" to \" + baseDP); + g_currentDatapoint=baseDP; + //we also have to set the tabctrl to think this was initiated from the ProcessesTab, otherwise we will get the wrong panel. + navPanel_setEvent(\"Processes\",\"ChangeTab\"); + } + // set delay to avoid click event will be triggered + delay(0, 500); + bDoubleClicked = false; +} + +// routine for right mouse click +void rClick() { + if (dynlen(gpuprocs) > 0) { + navPanel_setEvent(\"observationFlow_cobaltGPUProcs.pnl\",\"EventRightClick\"); + } +} void updateActiveObservations(string dp1, dyn_string obs, string dp2, bool invalid) @@ -221,7 +266,15 @@ LANG:1 0 "GPUProcsObject" "" 1 20 30 E E E 1 E 1 E N {0,0,0} E N {255,255,255} E E - E E + "main() +{ + rClick(); +}" 0 + "main(int x, int y) +{ + dblClick(); +}" 0 + 0 0 0 0 0 0 E E E 0 @@ -230,7 +283,37 @@ LANG:1 69 All GPUProcs involved in the currently(selected) active observations 1 "dashclr"N "_Transparent" -E E 0 4 1 2 1 E 20 30 50 30 +E "main(int x, int y) +{ + click(); +}" 0 + 0 4 1 2 1 E 20 30 50 30 +6 1 +"RECTANGLE1" +"" +1 10 10 E E E 1 E 1 E N "_Transparent" E N "_Transparent" E E + "main() +{ + rClick(); +}" 0 + "main(int x, int y) +{ + dblClick(); +}" 0 + +1 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E "main(int x, int y) +{ + click(); +}" 0 + 0 1 1 2 1 E 1 0 1 10 5 0 E 10 10 40 40 0 LAYER, 1 1 diff --git a/MAC/Navigator2/panels/objects/Processes/observationFlow_cobaltInputStreams.pnl b/MAC/Navigator2/panels/objects/Processes/observationFlow_cobaltInputStreams.pnl index 760e0d4db0932dc2fe739b68818b38696509f16c..0dc5b23ca9a0cb509265b07aa660b5aa8406fc54 100644 --- a/MAC/Navigator2/panels/objects/Processes/observationFlow_cobaltInputStreams.pnl +++ b/MAC/Navigator2/panels/objects/Processes/observationFlow_cobaltInputStreams.pnl @@ -483,6 +483,32 @@ E "main() click(); }" 0 0 4 1 2 1 E 10 30 40 30 +6 4 +"RECTANGLE1" +"" +1 10 10 E E E 1 E 1 E N "_Transparent" E N "_Transparent" E E + "main() +{ + rClick(); +}" 0 + "main() +{ + dblClick(); +}" 0 + +4 0 0 0 0 0 +E E E +0 +1 +LANG:1 0 + +1 +"dashclr"N "_Transparent" +E "main() +{ + click(); +}" 0 + 0 1 1 2 1 E U 0 E 10 10 40 40 0 LAYER, 1 1 diff --git a/MAC/Navigator2/scripts/libs/navFunct.ctl b/MAC/Navigator2/scripts/libs/navFunct.ctl index d48d586307c9d14043de5222f35c675ad19a8053..490c94445b37aab6587595587afc8bb4a580e789 100644 --- a/MAC/Navigator2/scripts/libs/navFunct.ctl +++ b/MAC/Navigator2/scripts/libs/navFunct.ctl @@ -760,12 +760,12 @@ dyn_string navFunct_dpGetFullPathAsTypes(string aDp){ dyn_string splitted = strsplit(dp,"_"); - string start; for (int i=1; i <= dynlen(splitted); i++) { start+=splitted[i]; typePath[i+index] = dpTypeName(systemName+start); start+="_"; + } return typePath; @@ -1256,6 +1256,8 @@ void navFunct_fillObservationsList() { // check all available observations for (int i = 1; i <= dynlen(g_observations["NAME"]); i++) { + // only observations!! + if (g_observations["STATIONLIST"][i] == "[]") continue; bool found=false; string shortObs=g_observations["NAME"][i]; strreplace(shortObs,"LOFAR_ObsSW_",""); @@ -1715,6 +1717,11 @@ void navFunct_fillProcessesTree() { string fullProcessPath=connectTo; for (int j=1; j <= dynlen(pathList); j++) { fullProcessPath+="_"+pathList[j]; + if (strpos(pathList[j],"TempObs") > -1) { + // Observation found, get real name in stead of Tempname + string observation = strsplit(claimManager_realNameToName("LOFAR_ObsSW_"+pathList[j]),"_")[3]; + pathList[j] = observation; + } if (!dynContains(result,connectTo+","+pathList[j]+","+fullProcessPath)) { dynAppend(result,connectTo+","+pathList[j]+","+fullProcessPath); } @@ -1722,7 +1729,7 @@ void navFunct_fillProcessesTree() { } } - LOG_DEBUG("navFunct.ctl:navFunct_fillProcessesTree|result: "+ result); + LOG_DEBUG("navFunct.ctl:navFunct_fillProcessesTree|result: "+ result); dpSet(DPNAME_NAVIGATOR + g_navigatorID + ".processesList",result); }