diff --git a/src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php b/src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php index 8119f6a..7eeddaa 100644 --- a/src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php +++ b/src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php @@ -81,19 +81,42 @@ class IHMInputOutputParamsDownloadClass extends IHMInputOutputParamsAbstractClas break; case 1: //Tab1D - if (isset($param->dim1) && ($param->dim1 != '') && ($param->dim1 != '*')) { - $paramInfo['indexes'] = array(); - $paramInfo['indexes'][] = $param->dim1; + if ($param->{'dim1-is-range'}) { + $template_args = array( + 'paramid' => $paramInfo['id'], + 'min' => $param->{'dim1-min-range'}, + 'max' => $param->{'dim1-max-range'}, + 'relateddim' => 0 + ); + $paramInfo = $this->paramManager->addExistingParam('sum_into_table_range', $this->paramsData, $template_args); } - else if (isset($param->dim2) && ($param->dim2 != '') && ($param->dim2 != '*')) { - $paramInfo['indexes'] = array(); - $paramInfo['indexes'][] = $param->dim2; + else { + if (($param->{'dim1-index'} != '*') && ($param->{'dim1-index'} != '')) { + $paramInfo['indexes'] = array(); + $paramInfo['indexes'][] = $param->{'dim1-index'}; + } + } + + if ($param->{'dim2-is-range'}) { + $template_args = array( + 'paramid' => $paramInfo['id'], + 'min' => $param->{'dim2-min-range'}, + 'max' => $param->{'dim2-max-range'}, + 'relateddim' => 1 + ); + $paramInfo = $this->paramManager->addExistingParam('sum_into_table_range', $this->paramsData, $template_args); + } + else { + if (($param->{'dim2-index'} != '*') && ($param->{'dim2-index'} != '')) { + $paramInfo['indexes'] = array(); + $paramInfo['indexes'][] = $param->{'dim2-index'}; + } } break; case 2: - if (($param->dim1 != '*') || ($param->dim2 != '*')) { + if (($param->{'dim1-index'} != '*') || ($param->{'dim2-index'} != '*')) { $paramInfo['indexes'] = array(); - $paramInfo['indexes'][] = "[".$param->dim1.",".$param->dim2."]"; + $paramInfo['indexes'][] = "[".$param->{'dim1-index'}.",".$param->{'dim2-index'}."]"; } break; } diff --git a/src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php b/src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php index 3300313..20df4c2 100644 --- a/src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php +++ b/src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php @@ -651,28 +651,53 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass $paramInfo = $this->paramManager->addExistingParam($paramData->{'paramid'}, $this->paramsData, $paramData->{'template_args'}); $paramInfo['indexes'] = array(); - $dim1 = $paramData->{'dim1'}; - if ($dim1 == '') - $dim1 = '*'; - $dim2 = $paramData->{'dim2'}; - if ($dim2 == '') - $dim2 = '*'; + + $dim1_index = '*'; + if (!$paramData->{'dim1-is-range'}) { + if ($paramData->{'dim1-index'} != '') + $dim1_index = $paramData->{'dim1-index'}; + } + + $dim2_index = '*'; + if (!$paramData->{'dim2-is-range'}) { + if ($paramData->{'dim2-index'} != '') + $dim2_index = $paramData->{'dim2-index'}; + } + switch ($paramData->{'type'}) { case 0: //scalar - nothing to do break; case 1: //Tab1D - if (isset($dim1) && ($dim1 != '*')) { - $paramInfo['indexes'][] = $dim1; + if ($paramData->{'dim1-is-range'}) { + $template_args = array( + 'paramid' => $paramInfo['id'], + 'min' => $paramData->{'dim1-min-range'}, + 'max' => $paramData->{'dim1-max-range'}, + 'relateddim' => 0 + ); + $paramInfo = $this->paramManager->addExistingParam('sum_into_table_range', $this->paramsData, $template_args); + } + else if ($paramData->{'dim2-is-range'}) { + $template_args = array( + 'paramid' => $paramInfo['id'], + 'min' => $paramData->{'dim2-min-range'}, + 'max' => $paramData->{'dim2-max-range'}, + 'relateddim' => 1 + ); + $paramInfo = $this->paramManager->addExistingParam('sum_into_table_range', $this->paramsData, $template_args); + } + else if (isset($dim1_index) && ($dim1_index != '*')) { + $paramInfo['indexes'][] = $dim1_index; } - else if (isset($dim2) && ($dim2 != '*')) { - $paramInfo['indexes'][] = $dim2; + else if (isset($dim2_index) && ($dim2_index != '*')) { + $paramInfo['indexes'][] = $dim2_index; } break; case 2: - if (($dim1 != '*') || ($dim2 != '*')) { - $paramInfo['indexes'][] = "[".$dim1.",".$dim2."]"; + if (($dim1_index != '*') || ($dim2_index != '*')) { + $paramInfo['indexes'][] = "[".$dim1_index.",".$dim2_index."]"; } break; } diff --git a/src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php b/src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php index 79384ca..8432ed0 100644 --- a/src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php +++ b/src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php @@ -45,13 +45,17 @@ class IHMExpressionParserClass private $functionsArray; private $templatedParamMgr = NULL; + + private $isTest = FALSE; /* * @brief Constructor */ - function __construct() + function __construct($isTest = FALSE) { - $this->templatedParamMgr = new IHMParamTemplateClass(); + $this->isTest = $isTest; + if (!$isTest) + $this->templatedParamMgr = new IHMParamTemplateClass(); } /* @@ -61,18 +65,19 @@ class IHMExpressionParserClass { //tests $tests = array( - "dst>3" => array ("expression" => "greater_than(\$dst,3)", "params" => array("dst")), - "@const_1<dst" => array("expression" => "(lower_than(1.0E-10,\$dst))", "params" => array("dst")), - "dst^#alias_2" => array("expression" => "(pow(\$dst,\$imf[1]))", "params" => array("dst","imf")), - "dst^2+@const_2" => array("expression" => "(pow(\$dst,2))+-2.8", "params" => array("dst")), - "atan(imf(2)/imf(1))+speed/100.0" => array("expression" => "atan((\$imf[2]/\$imf[1]))+(\$speed/100.0)", "params" => array("imf","speed")), - "shiftT_(clust1_hia_pad,60)" => array("expression" => "#timeShift(\$clust1_hia_pad;60)", "params" => array("clust1_hia_pad")), - "smooth_(density,1200)" => array("expression" => "#boxcar(\$density;1200)", "params" => array("density")), - "shiftT_(density,-600)" => array("expression" => "#timeShift(\$density;-600)", "params" => array("density")), - "deriv(density)" => array("expression" => "#deriv(\$density)", "params" => array("density")), - "abs(dst)" =>array("expression" => "abs(\$dst)", "params" => array("dst")), - "density*speed+(density^2-1.0)/speed" => array("expression" => "(\$density*\$speed)+((pow(\$density,2))-1.0)/\$speed", "params" => array("density","speed")), - "(-7<dst)&(dst<-3)" => array("expression" => "And((lower_than(-7,\$dst)),(lower_than(\$dst,-3)))", "params" => array("dst")) + "dst>3" => array ("expression" => "greater_than(\$dst,3)", "params" => array(array("paramid" => "dst"))), + "@const_1<dst" => array("expression" => "(lower_than(1.0E-10,\$dst))", "params" => array(array("paramid" =>"dst"))), + "dst^#alias_2" => array("expression" => "(pow(\$dst,\$imf[1]))", "params" => array(array("paramid" => "dst"),array("paramid" => "imf"))), + "dst^2+@const_2" => array("expression" => "(pow(\$dst,2))+-2.8", "params" => array(array("paramid" => "dst"))), + "atan(imf(2)/imf(1))+speed/100.0" => array("expression" => "atan((\$imf[2]/\$imf[1]))+(\$speed/100.0)", "params" => array(array("paramid" => "imf"), array("paramid" => "speed"))), + "shiftT_(clust1_hia_pad,60)" => array("expression" => "#timeShift(\$clust1_hia_pad;60)", "params" => array(array("paramid" => "clust1_hia_pad"))), + "smooth_(density,1200)" => array("expression" => "#boxcar(\$density;1200)", "params" => array(array("paramid" => "density"))), + "shiftT_(density,-600)" => array("expression" => "#timeShift(\$density;-600)", "params" => array(array("paramid" => "density"))), + "deriv(density)" => array("expression" => "#deriv(\$density)", "params" => array(array("paramid" => "density"))), + "abs(dst)" =>array("expression" => "abs(\$dst)", "params" => array(array("paramid" => "dst"))), + "density*speed+(density^2-1.0)/speed" => array("expression" => "(\$density*\$speed)+((pow(\$density,2))-1.0)/\$speed", "params" => array(array("paramid" => "density"),array("paramid" => "speed"))), + "(-7<dst)&(dst<-3)" => array("expression" => "And((lower_than(-7,\$dst)),(lower_than(\$dst,-3)))", "params" => array(array("paramid" => "dst"))), + "cass_caps_elssec4(range[0,10])" => array("expression" => "\$sum_into_table_range_cass_caps_elssec4_0_0_10", "params" => array(array("paramid" => "sum_into_table_range_cass_caps_elssec4_0_0_10"))) ); //init constants, aliases and functions for test @@ -146,13 +151,19 @@ class IHMExpressionParserClass //keep only params id $params = array(); foreach ($params_full as $param_full) { - if (($templated_param_info = $this->templatedParamMgr->parseTemplatedParam($param_full["id"])) !== FALSE) { + if (array_key_exists("template_args", $param_full)) { + $params[] = array( + "paramid" => $param_full['id'], + "fullparamid" => $param_full['fullparamid'], + "template_args" => $param_full['template_args'] + ); + } + else if (!$this->isTest && (($templated_param_info = $this->templatedParamMgr->parseTemplatedParam($param_full["id"])) !== FALSE)) { $params[] = $templated_param_info; } else $params[] = array("paramid" => $param_full["id"]); } - return array("expression" => $translated, "params" => $params); } @@ -303,6 +314,14 @@ class IHMExpressionParserClass $this->loadFunctions(); return array_key_exists($element,$this->functionsArray); } + + /* + * @brief detect if the element is "range" + */ + private function isRange($element) + { + return ($element == "range"); + } /* * @brief detect if the element is an operator @@ -534,7 +553,8 @@ class IHMExpressionParserClass !$this->isDecimal($element) && !$this->isOperator($element) && !$this->isFunction($element) && - ($element != ",") && ($element != ";") && ($element != "(") && ($element != ")")); + !$this->isRange($element) && + ($element != ",") && ($element != ";") && ($element != "(")); } /* @@ -551,6 +571,21 @@ class IHMExpressionParserClass (count($tree[$i] == 1)) && $this->isInteger($tree[$i][0])); } + + /* + * @brief detect if the element is a range for a parameter + */ + private function isParameterRange($tree, $i) + { + $paramId = ""; + if ($i <= 0) + return false; + if (!$this->isParameter($tree[$i-1])) + return false; + return (is_array($tree[$i]) && + (count($tree[$i] == 1)) && + $this->isRange($tree[$i][0])); + } /* * @brief add a parameter @@ -575,6 +610,29 @@ class IHMExpressionParserClass return; } } + + /* + * @brief add a parameter range + */ + private function addParameterRangeInParameterArray($paramId, $range, &$params) + { + $sum_parameter_id = ""; + if ((count($range) == 2) && (count($range[1]) == 3) && ($this->isInteger($range[1][0])) && ($this->isInteger($range[1][2])) & ($range[1][1] == ",")) { + $sum_parameter_id = "sum_into_table_range_".$paramId."_0_".$range[1][0]."_".$range[1][2]; + $params[] = array("id" => "sum_into_table_range", + "fullparamid" => $sum_parameter_id, + "indexes" => array(), + "calib_infos" => array(), + "template_args" => array( + "paramid" => $paramId, + "relateddim" => 0, + "min" => $range[1][0], + "max" => $range[1][2] + ) + ); + } + return $sum_parameter_id; + } /* * @brief process used to treat parameter components @@ -592,16 +650,29 @@ class IHMExpressionParserClass else if ($this->isParameter($tree[$i])) { $param = $tree[$i]; - $this->addParameterIdInParameterArray($param,$params); + if ($i < count($tree) - 1) { - if ($this->isParameterComponent($tree,$i+1)) + if ($this->isParameterRange($tree,$i+1)) { - $this->addParameterComponentInParameterArray($param, $tree[$i+1][0], $params); - $param .= ("[".$tree[$i+1][0]."]"); + $sum_parameter_id = $this->addParameterRangeInParameterArray($param, $tree[$i+1], $params); + $param = $sum_parameter_id; ++$i; } + else + { + $this->addParameterIdInParameterArray($param,$params); + if ($this->isParameterComponent($tree,$i+1)) + { + $this->addParameterComponentInParameterArray($param, $tree[$i+1][0], $params); + $param .= ("[".$tree[$i+1][0]."]"); + ++$i; + } + } } + else + $this->addParameterIdInParameterArray($param,$params); + $result[] = $param; } else @@ -733,7 +804,7 @@ class IHMExpressionParserClass } else if ($tree[$i] == ";") { - //echo "DOT COMA".PHP_EOL; + echo "DOT COMA".PHP_EOL; $translated .= ";"; } else if ($this->isFunction($tree[$i])) @@ -752,12 +823,19 @@ class IHMExpressionParserClass { //echo "TEST ".$param["id"].PHP_EOL; - if ($param["id"] == $tree[$i]) + if (array_key_exists("template_args", $param)) + { + $founded = true; + $translated .= "\$".$param["fullparamid"]; + break; + } + else if ($param["id"] == $tree[$i]) { $founded = true; $translated .= ("\$".$tree[$i]); break; } + foreach ($param["indexes"] as $index) { $temp = ""; @@ -801,7 +879,7 @@ class IHMExpressionParserClass } } -/*$parser = new IHMExpressionParserClass(); +/*$parser = new IHMExpressionParserClass(TRUE); try { $parser->test(); } catch (Exception $e) { diff --git a/src/Request/ParamInfoRequestClass.php b/src/Request/ParamInfoRequestClass.php index 07405f5..df5d9c2 100644 --- a/src/Request/ParamInfoRequestClass.php +++ b/src/Request/ParamInfoRequestClass.php @@ -125,15 +125,18 @@ class ParamInfoRequestClass extends RequestAbstractClass 'relatedDim' => ($tableNode->getAttribute("relatedDim") == "dim_1" ? "dim1" : "dim2"), 'name' => $tableNode->getAttribute("name"), 'units' => $tableNode->getAttribute("units"), + 'variable' => ($tableNode->getAttribute("variable") === "true"), 'channels' => array() ); - $channelNodes = $tableNode->getElementsByTagName("channel"); - foreach ($channelNodes as $channelNode) { - $tableResult['channels'][] = array( - 'min' => $channelNode->getAttribute("min"), - 'max' => $channelNode->getAttribute("max") - ); + if (!$tableResult['variable']) { + $channelNodes = $tableNode->getElementsByTagName("channel"); + foreach ($channelNodes as $channelNode) { + $tableResult['channels'][] = array( + 'min' => $channelNode->getAttribute("min"), + 'max' => $channelNode->getAttribute("max") + ); + } } $result['tables'][] = $tableResult; -- libgit2 0.21.2