diff --git a/CEP/ParmDB/include/ParmDB/ParmDB.h b/CEP/ParmDB/include/ParmDB/ParmDB.h index e494353f475fb4d16b026d2cb4896bee063bbec5..7aa8e43bdb99b3cc206177921d40879bdfd7eeb2 100644 --- a/CEP/ParmDB/include/ParmDB/ParmDB.h +++ b/CEP/ParmDB/include/ParmDB/ParmDB.h @@ -124,7 +124,8 @@ namespace BBS { // Put the default value. virtual void putDefValue (const string& parmName, - const ParmValueSet& value) = 0; + const ParmValueSet& value, + bool check=true) = 0; // Delete the default value records for the given parameters. virtual void deleteDefValues (const std::string& parmNamePattern) = 0; @@ -262,8 +263,9 @@ namespace BBS { { itsRep->getDefValues (result, parmNamePattern); } // Put the default value for the given parameter. - void putDefValue (const string& parmName, const ParmValueSet& value) - { itsRep->putDefValue (parmName, value); } + void putDefValue (const string& parmName, const ParmValueSet& value, + bool check=true) + { itsRep->putDefValue (parmName, value, check); } // Delete the default value records for the given parameters. void deleteDefValues (const std::string& parmNamePattern) diff --git a/CEP/ParmDB/include/ParmDB/ParmDBCasa.h b/CEP/ParmDB/include/ParmDB/ParmDBCasa.h index d258092ac975a1f0984f1039371aea5929a34d3d..9d8714839686450833fdcbd8e89d92f3a74b9f88 100644 --- a/CEP/ParmDB/include/ParmDB/ParmDBCasa.h +++ b/CEP/ParmDB/include/ParmDB/ParmDBCasa.h @@ -96,7 +96,8 @@ namespace BBS { const std::string& parmNamePattern); // Put the default value. - virtual void putDefValue (const string& name, const ParmValueSet& value); + virtual void putDefValue (const string& name, const ParmValueSet& value, + bool check=true); // Delete the default value records for the given parameters. virtual void deleteDefValues (const std::string& parmNamePattern); diff --git a/CEP/ParmDB/src/ParmDBCasa.cc b/CEP/ParmDB/src/ParmDBCasa.cc index ae2f940c2502d5c03a45ba79c3215b3c32183da9..b45ad5ac92ab6c165b0a63cd218127922b4b8d2f 100644 --- a/CEP/ParmDB/src/ParmDBCasa.cc +++ b/CEP/ParmDB/src/ParmDBCasa.cc @@ -567,33 +567,38 @@ namespace BBS { return id; } - void ParmDBCasa::putDefValue (const string& name, const ParmValueSet& pset) + void ParmDBCasa::putDefValue (const string& name, const ParmValueSet& pset, + bool check) { itsTables[2].reopenRW(); TableLocker locker(itsTables[2], FileLocker::Write); const ParmValue& pval = pset.getFirstParmValue(); // First see if the parameter name exists at all. Table& table = itsTables[2]; - Table sel = table(table.col("NAME") == String(name)); - if (sel.nrow() == 1) { - uint rownr=0; - ScalarColumn<int> typeCol (sel, "FUNKLETTYPE"); - ArrayColumn<bool> maskCol (sel, "SOLVABLE"); - ArrayColumn<double> valCol (sel, "VALUES"); - ScalarColumn<double> pertCol (sel, "PERTURBATION"); - ScalarColumn<bool> prelCol (sel, "PERT_REL"); - typeCol.put (rownr, pset.getType()); - valCol.put (rownr, pval.getValues()); - putDefDomain (pset.getScaleDomain(), sel, rownr); - if (pset.getSolvableMask().size() > 0 || maskCol.isDefined(rownr)) { - maskCol.put (rownr, pset.getSolvableMask()); - } - pertCol.put (rownr, pset.getPerturbation()); - prelCol.put (rownr, pset.getPertRel()); - } else if (sel.nrow() == 0) { + if (!check) { putNewDefValue (name, pset); } else { - ASSERTSTR (false, "Too many default parms with the same name/domain"); + Table sel = table(table.col("NAME") == String(name)); + if (sel.nrow() == 1) { + uint rownr=0; + ScalarColumn<int> typeCol (sel, "FUNKLETTYPE"); + ArrayColumn<bool> maskCol (sel, "SOLVABLE"); + ArrayColumn<double> valCol (sel, "VALUES"); + ScalarColumn<double> pertCol (sel, "PERTURBATION"); + ScalarColumn<bool> prelCol (sel, "PERT_REL"); + typeCol.put (rownr, pset.getType()); + valCol.put (rownr, pval.getValues()); + putDefDomain (pset.getScaleDomain(), sel, rownr); + if (pset.getSolvableMask().size() > 0 || maskCol.isDefined(rownr)) { + maskCol.put (rownr, pset.getSolvableMask()); + } + pertCol.put (rownr, pset.getPerturbation()); + prelCol.put (rownr, pset.getPertRel()); + } else if (sel.nrow() == 0) { + putNewDefValue (name, pset); + } else { + ASSERTSTR (false, "Too many default parms with the same name/domain"); + } } clearDefFilled(); } diff --git a/CEP/ParmDB/src/SourceDBCasa.cc b/CEP/ParmDB/src/SourceDBCasa.cc index bfe5574b10caedf0664200f1af045e765813c79c..9f50c480e0d27784d2a99e2ea44e2bd8f05a2323 100644 --- a/CEP/ParmDB/src/SourceDBCasa.cc +++ b/CEP/ParmDB/src/SourceDBCasa.cc @@ -341,7 +341,7 @@ namespace BBS { if (iter->first == "Ra") foundRa = true; if (iter->first == "Dec") foundDec = true; getParmDB().putDefValue (iter->first + ':' + sourceInfo.getName(), - iter->second); + iter->second, false); } // If Ra or Dec given and not in parameters, put it. // Use absolute perturbations for them. @@ -349,13 +349,15 @@ namespace BBS { ParmValue pval(ra); getParmDB().putDefValue ("Ra:" + sourceInfo.getName(), ParmValueSet(pval, ParmValue::Scalar, - 1e-6, false)); + 1e-6, false), + false); } if (!foundDec && dec != -1e9) { ParmValue pval(dec); getParmDB().putDefValue ("Dec:" + sourceInfo.getName(), ParmValueSet(pval, ParmValue::Scalar, - 1e-6, false)); + 1e-6, false), + false); } }