Skip to content

[Epic] Dissolve2Do #2152

@trisyoungs

Description

@trisyoungs

The Dissolve2 ToDo!

A dynamic list of small jobs that will need doing in Dissolve2 towards the end of the transition to Nodes, but that we don't want to (or can't) do while the old system is still present.

  • Serialisable has a virtual serialise(value, context) but a non-virtual serialise(value) function which causes warnings about hidden functions in the code. Once complete, context should no longer be required?
  • Clarify usage of Molecule and LocalMolecule, particularly use of setSpecies() which also creates arrays.
  • Remove Forcefield *forcefield_ member from Species.
  • Remove Function1DWrapper in favour of an object more compatible with the new system (e.g. remove need for template specialisation when adding Parameters etc.)
  • PartialSet averaging is performed (i.e. GRNode::process) by obtaining processing module data from a GenericList item. Instead do this work on an owned PartialSet object.
  • Energy saves a flag via processingModuleData identifying the configuration as a target for the module (i.e. dissolve().processingModuleData().realise<bool>("IsEnergyModuleTarget", targetConfiguration_->niceName(), GenericItem::ProtectedFlag) = true; ) - how do we rework this in the graph/node framework? (see)
  • Testing dissolve2, previously we used keywords (see)
  • Nodes should pass on their configuration after processing for use by subsequent nodes, therefore the addition of a addPointerOutput<configuration *> is required for relevant nodes, where they don't already do this
  • Implement CollectorNode: this is a hypothetical node that exists to collect node outputs of a given type T or T* into a container member std::vector<T> or std::vector<T *>. This is particularly relevant for the GRNode which should ideally mimic the behaviour of GRModule in which a vector of Configuration becomes an input. Note: we'd require an isFinite flag for Node since we'd effectively be introducing unrestricted edge connections into a node i.e. CollectorNode<Configuration *> taking any number of configurations.
  • We are littering the code with multiple instances of getEnumOptions for the same underlying enum now that we've moved to a concept for this particular solution. We may want to revisit / tidy this a bit.
  • We can remove the unsightly operator== code in import/data1D.h (see) when we have implemented a Data1DNode
  • BoundedOptionalParameter and addBoundedOptionalParameter no longer required since the introduction of the Number type
  • feat: Generalise method for node data serialisation #2203
  • feat: Node data serialisation #2242
  • Clarify (or completely remove) the use of fingerprint_s in various classes (e.g. PartialSet)
  • Remove storage of tag_s in Data1D and friends - these previously existed to allow lazy specification / location of data in processingModuleData_ by the graphing functions, but this will no longer be relevant / possible.
  • When and where to generate cells as required
  • Check / change behaviour of IsotopologueSetModel since it allows changing of the Isotopologue to another Isotopologue for a given weight. When we had a vector of IsotopologueWeights this made sense, but now we have a map it can lead to unintentional user error.
  • Call CellArray::generate() from node process only when the box has fundamentally changed (excluding scalings) - see
  • Refactoring the ScatteringMatrix disabled saving of estimated S(Q) and g(r) to the restart file since their storage moved to DoubleKeyedMap. This needs to be reinstated.
  • Refactoring EPSRModule into EPSRNode will require some thought as it requires a lot of different bits of data for each dataset: scattering weights, unweighted and weighted structure factors (although the former can probably become a separate input)
  • Saving output files
  • File selector type
  • Implications for correct behaviour of Data1D with regards to file loading and project folder structure
  • Once old modules are removedPartialSet's initialise functions can be turned into constructors to tidy up code in various places.
  • Can / should we be passing const * as outputs and receive const * as inputs in specific places (e.g. NeutronSQ receiving the unweightedSQ and GR)?
  • Split template/algorithms.h up into more specific, smaller units so we don't bloat recompile requirements.
  • Serialisation of data to input file is handled type-specifically by SerialisableParameter<T> (in parameter.h) but is basically implementing what has been written for restart file serialisation (addSerialisable() creating SerialisableData) so merging / reusing the two should be investigated.
  • Move simple test functions out of DissolveSystemTest, and remove any test functions relying on the old processingdata object.
  • Data1DImportFileFormat should take std::optional<Number>
  • Add test case to ensure proper functioning of node edge pulling when a new, intermediary node that pulls an OptionalPointerParameter is inserted in place of an existing edge between two other nodes (this situation is already covered by a test case for parameters passed by value)
  • Specifying ranges for quantities should be done through a general QuantityRange class with specifically-named _min, _max, and _delta variables, rather than a straight Vector3. This is used in many analysis node options, as well as ctor to the HistogramND classes. The new RangedVector3 is sort of a step towards it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions