Probabilistic Risk Analysis Tool (fault tree analysis, event tree analysis, etc.)

Overview

SCRAM

https://travis-ci.org/rakhimov/scram.svg?branch=develop 'Build status' https://codecov.io/github/rakhimov/scram/coverage.svg?branch=develop https://api.codacy.com/project/badge/Grade/7067af3e78774325bb33894deac23b9c

SCRAM is a Command-line Risk Analysis Multi-tool.

This project aims to build a command line tool for probabilistic risk analysis. SCRAM is capable of performing event tree analysis, static fault tree analysis, analysis with common cause failure models, probability calculations with importance analysis, and uncertainty analysis with Monte Carlo simulations. This tool can handle non-coherent fault trees, containing NOT logic.

SCRAM input and report files are based on the Open-PSA Model Exchange Format. For the current status of the Open-PSA MEF features in SCRAM, please see the MEF Support documentation.

A complementary GUI front-end is under development for visualization and manipulation of risk analysis models and reports.

To explore the performance of SCRAM or research fault trees, a fault tree generator script is provided, which can create hard-to-analyze fault trees in a short time.

The documentation contains a full description of SCRAM, its current capabilities, and future additions. The latest stable release is packaged for quick installation on various platforms.

Building and Installing

Git Submodules

Some dependencies are provided with git submodules (e.g., Catch2). In order to initialize all the submodules, this repository must be cloned recursively with git clone --recursive, or the following commands must be executed after a normal clone.

git submodule update --init --recursive

Dependencies

Package Minimum Version
CMake 3.8
boost 1.61
libxml2 2.9.1
Python 3.4
Qt 5.9.1

Optional Dependencies

Package Minimum Version
TCMalloc 1.7
JEMalloc 3.6
Humanity Icons 0.6.13

Compilers

Package Minimum Version
GCC/G++ 7.1
Clang/LLVM 5.0
Intel 18.0.1

Installing Dependencies

Ubuntu

Python and GCC/G++ compiler are assumed to be available on the system. The process is tested on Ubuntu 17.10 using apt-get as the package manager:

sudo apt-get install -y cmake lib{boost-all,xml2,google-perftools,qt5{svg,opengl}5}-dev qt{base,tools}5-dev{,-tools} humanity-icon-theme

macOS

If on a Mac system, homebrew is a good package manager to use. It is assumed that some dependencies are provided by Xcode (e.g., Python, llvm/clang, make). The following instructions are tested on OS X 10.12:

brew install cmake boost libxml2 gperftools qt5

Windows

MSYS2/Mingw-w64 is the recommended platform to work on Windows. Assuming MSYS2 is installed on the system, the following instructions will install SCRAM dependencies:

pacman --noconfirm -S mingw-w64-x86_64-{gcc,make,cmake,boost,libxml2,qt5}

SCRAM installation and executables must be run inside of the MSYS2 shell.

Installing SCRAM

The project is configured with CMake scripts. CMake generates native "makefiles" or build system configurations to be used in your compiler environment. If there are dependency issues, CMake output should guide with errors. The configuration and build must happen out-of-source (e.g., in build sub-directory).

.../scram/build$ cmake .. -DCMAKE_INSTALL_PREFIX=path/to/installation/directory -DCMAKE_BUILD_TYPE=Release

For Mingw-w64 on Windows, specify -G "MSYS Makefiles" generator flag. To build tests, specify -DBUILD_TESTING=ON option.

Various other project configurations can be explored with CMake or its front-ends. For example:

.../scram/build$ cmake -L

.../scram/build$ ccmake .

.../scram/build$ cmake-gui .

An example build/install instruction with the CMake generated Makefiles:

.../scram/build$ make install

The main and test binaries are installed in installation/directory/bin. The input files and schema are copied in installation/directory/share/scram/.

Other tools, such as the fault tree generator, can be found in the scripts directory. These tools do not require compilation or installation.

Running SCRAM and Tests

This guide assumes that SCRAM installation directories are in the global path. If this is not the case, path/to/installation/directory/bin/ must be prepended to the command-line calls. However, if SCRAM executables are not in the path, some system tests and scripts cannot be initiated.

To run SCRAM

Example configuration and input files are provided in the input directory.

scram path/to/input/files

On command line, run help to get more detailed information:

scram --help

Various other useful tools and helper scripts, such as the fault tree generator, can be found in the scripts directory. Help prompts and the documentation have more details how to use these tools.

To launch the GUI

To launch the GUI front-end from the command-line:

scram-gui

The command can also take project configuration and/or input files:

scram-gui path/to/input/files

scram-gui --project path/to/project/file

scram-gui path/to/input/files --project path/to/project/file

To run tests

To run the unit and benchmark tests:

scram_tests

To test the tools in the scripts directory:

.../scram/scripts$ python -m pytest test/

To test the command-line call of SCRAM:

.../scram/tests$ python -m pytest test_scram_call.py

To run performance tests

A set of performance tests is provided to evaluate the running times on the host machine and to help developers check for regressions. More details can be found in performance test source files.

To run all performance tests (may take considerable time):

scram_tests [.perf]

To run GUI tests

Unfortunately, Qt Test does not automatically register or manage all its test cases, nor does it provide a single test driver. Each test case is a separate binary with its own commands and reports. Take a look at path/to/installation/directory/bin directory for the compiled scramgui_test${CASE_NAME} binaries to run.

All Qt Tests are also manually registered with CTest so that it is possible to run all the GUI tests at once:

.../scram/build$ ctest --verbose

To run fuzz testing

The main goal of SCRAM fuzz testing is to discover defects in its analysis code. It is recommended to build SCRAM with assertions preserved and sanitizers enabled, for example, address sanitizer in GCC and Clang -fsanitize=address.

In order to speed up the fuzz testing, SCRAM may be built with optimizations but NDEBUG undefined. Additionally, multiple SCRAM instances can be run at once.

An example command to run SCRAM 1000 times with 4 parallel instances:

fuzz_tester.py -n 1000 -j 4

The fuzz tester can be guided with options listed in its help prompt. Some options can be combined, and some are mutually exclusive. The priorities of mutually exclusive options and combinations are hard-coded in the script, and no error messages are produced; however, information messages are given to indicate the interpretation.

fuzz_tester.py --help

Fuzzing inputs and configurations are auto-generated. The fuzz tester collects run configurations, failures, and logs. The auto-generated inputs are preserved for failed runs.

Cross Validation

The Fuzz tester can check the results of qualitative analysis algorithms implemented in SCRAM. If there is any disagreement between various algorithms, the run is reported as failure.

fuzz_tester.py --cross-validate

Documentation Building

Documentation is generated with the configurations on the gh-source branch. The raw documentation files are in the doc directory.

Note to a User

The development may follow the Documentation Driven Development paradigm for some new features. Therefore, some documentation may be ahead of the actual development and describe features under current development or consideration.

For any questions, don't hesitate to ask the user support mailing list (https://groups.google.com/forum/#!forum/scram-users, [email protected]).

For latest releases and information about SCRAM, feel free to subscribe to the announcements (https://groups.google.com/forum/#!forum/scram-announce, [email protected]).

How to Contribute

Please follow the instructions in CONTRIBUTING.md.

CII Best Practices Open HUB Metrics Crowdin Zenodo DOI
Issues
  • Split Initializer into 2 source files to allow 32-bit debug build

    Split Initializer into 2 source files to allow 32-bit debug build

    There is a trouble in src/Initializer.cc. Since the class includes a giant recursive template function Initializer::DefineExternFunction. Compiling 32-bit debug version produced so huge object file that as.exe throws "too many sections & file too big" error. I have to split the class into 2 files to evade the error.

    See file src/initializer2.cc

    opened by metorm 10
  • ‘RelaxNGValidator’ in namespace ‘xmlpp’ does not name a type

    ‘RelaxNGValidator’ in namespace ‘xmlpp’ does not name a type

    On Ubuntu 14.04, after installing all the dependencies mentioned in the README, CMake still complained:

    By not providing "FindQt5LinguistTools.cmake" in CMAKE_MODULE_PATH this
      project has asked CMake to find a package configuration file provided by
      "Qt5LinguistTools", but CMake did not find one.
    

    Which I fixed via sudo apt-get install qttools5-dev

    However, running install.py throws the following error about xmlpp::RelaxNGValidator during the build process:

    $ python install.py --prefix=/home/malyuta/.scram --release
    /usr/bin/cmake
    -- Found Tcmalloc: /usr/lib/libtcmalloc_minimal.so
    -- Could NOT find JeMalloc (missing:  JEMALLOC_LIBRARY JEMALLOC_INCLUDE_DIR) 
    -- The memory allocator: TCMalloc
    -- Found glib-2.0: /usr/include/glib-2.0, /usr/lib/x86_64-linux-gnu/libglib-2.0.so
    -- Found SigC++ 
    -- Found Glibmm 
    -- checking for module 'libxml++-2.6'
    --   found libxml++-2.6, version 2.36.0
    -- Found LibXML++ 
    -- /usr/lib/libtcmalloc_minimal.so/usr/lib/libxml++-2.6.so/usr/lib/x86_64-linux-gnu/libxml2.so/usr/lib/x86_64-linux-gnu/libglibmm-2.4.so/usr/lib/x86_64-linux-gnu/libglib-2.0.so/usr/lib/x86_64-linux-gnu/libsigc-2.0.so
    -- Boost version: 1.63.0
    -- Found the following Boost libraries:
    --   program_options
    --   filesystem
    --   system
    --   date_time
    --   random
    -- Linking against boost dynamic libraries
    --     Boost Include directory: /usr/local/include
    --     Boost Library directories: /usr/local/lib
    --     Boost Program Options location: /usr/local/lib/libboost_program_options.so
    --     Boost System location: /usr/local/lib/libboost_system.so
    --     Boost Filesystem location: /usr/local/lib/libboost_filesystem.so
    --     Boost Date-Time location: /usr/local/lib/libboost_date_time.so
    -- Found Qt5
    -- Qt5 Version: 5.2.1
    -- Found Qt5 Linguist
    -- Found PythonInterp: /usr/bin/python (found version "2.7.6") 
    -- Looking for include file pthread.h
    -- Looking for include file pthread.h - found
    -- Looking for pthread_create
    -- Looking for pthread_create - not found
    -- Looking for pthread_create in pthreads
    -- Looking for pthread_create in pthreads - not found
    -- Looking for pthread_create in pthread
    -- Looking for pthread_create in pthread - found
    -- Found Threads: TRUE  
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/malyuta/Downloads/scram/scram/build
    Scanning dependencies of target scramcore
    [  1%] Building CXX object src/CMakeFiles/scramcore.dir/env.cc.o
    [  2%] Building CXX object src/CMakeFiles/scramcore.dir/version.cc.o
    [  4%] Building CXX object src/CMakeFiles/scramcore.dir/error.cc.o
    [  5%] Building CXX object src/CMakeFiles/scramcore.dir/logger.cc.o
    [  6%] Building CXX object src/CMakeFiles/scramcore.dir/xml_stream.cc.o
    [  8%] Building CXX object src/CMakeFiles/scramcore.dir/random.cc.o
    [  9%] Building CXX object src/CMakeFiles/scramcore.dir/settings.cc.o
    [ 10%] Building CXX object src/CMakeFiles/scramcore.dir/config.cc.o
    /home/malyuta/Downloads/scram/scram/src/config.cc: In constructor ‘scram::Config::Config(const string&)’:
    /home/malyuta/Downloads/scram/scram/src/config.cc:36:17: error: ‘RelaxNGValidator’ in namespace ‘xmlpp’ does not name a type
       static xmlpp::RelaxNGValidator validator(Env::config_schema());
                     ^
    /home/malyuta/Downloads/scram/scram/src/config.cc:43:5: error: ‘validator’ was not declared in this scope
         validator.validate(parser->get_document());
         ^
    make[2]: *** [src/CMakeFiles/scramcore.dir/config.cc.o] Error 1
    make[1]: *** [src/CMakeFiles/scramcore.dir/all] Error 2
    make: *** [all] Error 2
    Traceback (most recent call last):
      File "install.py", line 156, in <module>
        main()
      File "install.py", line 153, in main
        install_scram(args)
      File "install.py", line 92, in install_scram
        subprocess.check_call(make_cmd, cwd=args.build_dir, shell=(os.name == "nt"))
      File "/usr/lib/python2.7/subprocess.py", line 540, in check_call
        raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command '['make']' returned non-zero exit status 2
    
    

    How could I fix this?

    opened by dmalyuta 9
  • Probability type

    Probability type "constant" for basic event - what does it mean?

    I recently asked myself the question of what does a constant probability assigned to a basic event actually mean? From the SCRAM Wiki, I see this:

    P-model The probability of an event occurring when the time to failure is unknown or unpredictable.

    However, how does one interpret this? Could you please provide a real-life example (I'm asking here because you are surely very knowledgeable about FTA). I can't quite find a real life example where one can look at a component (let's say, an electric motor) and say "its probability of failure is 1*10^-5" - because without putting time-related units on this numeric value, this statement to me does not make sense.

    question doc 
    opened by dmalyuta 8
  • Cmake not detect catch include files

    Cmake not detect catch include files

    Please add detecting presense and directory with catch include files when build with GUI. Sources of scram contain include <catch.hpp> but in Fedora this file in /include/catch/ and need manually add -I/include/catch to CXX parameters.

    P.S. Also it will be good if you solve some simple build warnings like comparsion of signed and unsigned variables. If need I can write new issue for it.

    bug testing 
    opened by Vascom 5
  • Transition to C++17

    Transition to C++17

    System:

    • [x] Compiler versions (gcc, clang, icc)
    • [x] Compiler flags (cmake upgrade)
    • [x] Travis-CI (linux, macos)
    • [x] Appveyor-CI (windows mingw64)
    • [x] Qt

    Replace Boost:

    • [ ] filesystem
    • [x] variant
    • [x] optional
    • [x] string_ref

    Docs:

    • [x] Upgrade coding standards
    quality 
    opened by rakhimov 5
  • Units for failure rate?

    Units for failure rate?

    For the exponential distribution, parameter lambda has units of [# failures/unit time]. However, how does one specify the time units? Two main questions here:

    • In the configuration XML file, one can specify the mission time:
    <mission-time>8760</mission-time>
    

    However, what are the units?

    • In the input fault tree XML file, one can specify apprenty the unit for system-mission-time, but:
      • What is the system-mission-time tag for and why is it required for all the basic event probability distribution models? E.g.
    <exponential>
      <float value="1e-4"/>
      <system-mission-time unit="hours"/>
    </exponential>
    
    • If I understand correctly and it is up to the user to be consistent with units (i.e. specify numerical values according to a consistent set of units, SCRAM doesn't care about what units time is), then why does system-mission-time have the unit parameter? Since mission-time in the configuration XML file does not...

    I could not find an answer to this in the Open-PSA documation, except that they never use the unit attribute of system-mission-time (nor do they explain what it is for).

    question doc opsa-mef 
    opened by dmalyuta 5
  • GUI: Allow panning the active window using the left mouse button (issue #277)

    GUI: Allow panning the active window using the left mouse button (issue #277)

    As discussed in #277 : This PR allows panning the view using the mouse.

    In the end, it is done using the left mouse button (iso the middle mouse one) for the sake of simplicity (this is provided out of the box with QGraphicsView and the middle mouse button implementations I found were a bit hacky)

    There seems to be no conflict with the existing mouse pressing functionality (clicking the FTA elements). The view cannot be dragged if the user clicked on one of the FTA elements, but I didn't consider this an issue.

    opened by bavovanachte 4
  • No output for simple test on Windows

    No output for simple test on Windows

    I have Scram v0.12 installed on Windows 10 64-bit. In order to test a simple case, I used configuration and input files in this gist. I then ran scram --config-file config.xml -o output.xml. However, no output file is generated. If I remove the output flag, the program does not give any output. On Linux Mint 18.1 64-bit, the same test case successfully generates output.xml.

    On Windows, the output with --verbosity 7 follows:

    C:\_PROJECTS\scram_script>scram --config-file config.xml -o test.xml --verbosity 7
    DEBUG1:         Processing input files
    DEBUG2:                 Basic event registration time 0.0180371
    DEBUG2:                 Gate registration time 9.874e-005
    DEBUG2:                 Element definition time 0.0113598
    DEBUG1:         Input files are processed in 0.118336
    DEBUG1:         Validating the input files
    DEBUG1:         Validation is finished in 0.0144138
    DEBUG1:         Setting up for the analysis
    DEBUG2:                 Collecting top events of fault trees...
    DEBUG2:                 Top event collection is finished in 0.00372504
    DEBUG2:                 Applying CCF models...
    DEBUG2:                 Application of CCF models finished in 0.00252919
    DEBUG1:         Setup time 0.0179907
    INFO: Running analysis: top
    DEBUG2:                 PDAG is created in 2.2673e-005
    DEBUG2:                 Preprocessing...
    DEBUG2:                 Preprocessing Phase I...
    DEBUG4:                                 PDAG with root G6
    DEBUG4:                                 Total # of gates: 3
    DEBUG4:                                 # of modules: 0
    DEBUG4:                                 # of gates with negative indices: 0
    DEBUG4:                                 # of gates with positive and negative indices: 0
    DEBUG5:                                         AND gates: 2
    DEBUG5:                                         OR gates: 1
    DEBUG4:                                 Total # of variables: 4
    DEBUG4:                                 # of variables with negative indices: 0
    DEBUG4:                                 # of variables with positive and negative indices: 0
    DEBUG2:                 Finished Preprocessing Phase I in 0.0622468
    DEBUG2:                 Preprocessing Phase II...
    DEBUG4:                                 PDAG with root G6
    DEBUG4:                                 Total # of gates: 3
    DEBUG4:                                 # of modules: 0
    DEBUG4:                                 # of gates with negative indices: 0
    DEBUG4:                                 # of gates with positive and negative indices: 0
    DEBUG5:                                         AND gates: 2
    DEBUG5:                                         OR gates: 1
    DEBUG4:                                 Total # of variables: 4
    DEBUG4:                                 # of variables with negative indices: 0
    DEBUG4:                                 # of variables with positive and negative indices: 0
    DEBUG3:                         Detecting multiple definitions...
    DEBUG3:                         Finished multi-definition detection in 0.00455372
    DEBUG3:                         Detecting modules...
    DEBUG4:                                 Assigning timings to nodes...
    

    Nothing jumps out to me as being an error. I also tried running SCRAM as admin on Windows, but that crashes immediately.

    bug 
    opened by superlou 4
  • GUI: Allow easier mouse-based navigation

    GUI: Allow easier mouse-based navigation

    Hi,

    First of all: thanks a lot for this tool. It looks very promising, and I hope we can start to use it soon. We are considering using it specifically for fault tree construction and analysis.

    I've noticed that constructing and navigating the fault tree in the scram-gui is a bit awkward, when comparing it to more modern diagramming tools.

    What could already improve the experience drastically (in my opinion) is to allow:

    • Dragging the window around using the middle mouse button (https://gist.github.com/Legor/a00760b6d7af32c01357fb7ff76ad86a, haven't tested)
    • Allow zooming in and out using the scroll wheel.

    I would be open to contribute a PR for this myself, but want to check your opinion on it first.

    enhancement gui 
    opened by bavovanachte 3
  • Remove URL key from desktop file

    Remove URL key from desktop file

    URL key can present only if entry is Link type but not Application. https://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys

    opened by Vascom 3
  • An alternative implementation of ext::extract

    An alternative implementation of ext::extract

    As per this discussion, you might want to consider this implementation, which does not use const_cast:

    template <typename T, typename... Ts>
    T extract(typename boost::multi_index_container<T, Ts...>::iterator it,
              boost::multi_index_container<T, Ts...>* container) noexcept {
      assert(it != container->end());
      boost::optional<T> result;
      if(container->modify(it, [&](T& x){result = std::move(x);}))container->erase(it);
      return std::move(*result);
    }
    
    opened by joaquintides 3
  • Calculation error of RRW

    Calculation error of RRW

    I have a fault tree model as follows,. You can see that the top event would not occur if event "B1" not occur, so the RRW should be infinite. However, the result of scram is zero.

    <?xml version="1.0" encoding="UTF-8"?>
    <opsa-mef>
      <define-fault-tree name="Autogenerated">
        <define-gate name="root">
          <and>
            <basic-event name="B1"/>
            <gate name="G2"/>
            <gate name="G3"/>
          </and>
        </define-gate>
        <define-gate name="G2">
          <atleast min="2">
            <basic-event name="B3"/>
            <basic-event name="B2"/>
            <basic-event name="B1"/>
          </atleast>
        </define-gate>
        <define-gate name="G3">
          <or>
            <basic-event name="B4"/>
            <basic-event name="B2"/>
          </or>
        </define-gate>
      </define-fault-tree>
      <model-data>
        <define-basic-event name="B1">
          <float value="0.0406718"/>
        </define-basic-event>
        <define-basic-event name="B2">
          <float value="0.0890767"/>
        </define-basic-event>
        <define-basic-event name="B3">
          <float value="0.0758835"/>
        </define-basic-event>
        <define-basic-event name="B4">
          <float value="3.03e-005"/>
        </define-basic-event>
      </model-data>
    </opsa-mef>
    
    opened by johnvonlzf 0
  • mef : can't read event tree examples from open PSA

    mef : can't read event tree examples from open PSA

    I am using the following example from the open psa project :

    <?xml version="1.0"?>
    
    <!-- Simple event tree with collect-expressions instructions only -->
    <opsa-mef>
      <define-initiating-event name="I" event-tree="EventTree"/>
      <define-event-tree name="EventTree">
        <define-functional-event name="B"/>
        <define-functional-event name="C"/>
        <define-functional-event name="D"/>
        <define-sequence name="Success"/>
        <define-sequence name="Failure"/>
        <define-branch name="D-if-B">
          <fork functional-event="D">
            <path state="success">
              <collect-expression>
                <float value="0.9"/>
              </collect-expression>
              <sequence name="Success"/>
            </path>
            <path state="failure">
              <collect-expression>
                <float value="0.1"/>
              </collect-expression>
              <sequence name="Failure"/>
            </path>
          </fork>
        </define-branch>
        <initial-state>
          <fork functional-event="B">
            <path state="success">
              <collect-expression>
                <float value="0.1"/>
              </collect-expression>
              <fork functional-event="C">  <!-- Irrelevant event on the path -->
                <path state="success">
                  <collect-expression>
                    <float value="0.8"/>
                  </collect-expression>
                  <branch name="D-if-B"/>
                </path>
                <path state="failure">
                  <collect-expression>
                    <float value="0.2"/>
                  </collect-expression>
                  <branch name="D-if-B"/>
                </path>
              </fork>
            </path>
            <path state="failure">
              <collect-expression>
                <float value="0.9"/>
              </collect-expression>
              <fork functional-event="C">
                <path state="success">
                  <collect-expression>
                    <float value="0.6"/>
                  </collect-expression>
                  <fork functional-event="D">
                    <path state="success">
                      <collect-expression>
                        <float value="0.6"/>
                      </collect-expression>
                      <sequence name="Success"/>
                    </path>
                    <path state="failure">
                      <collect-expression>
                        <float value="0.4"/>
                      </collect-expression>
                      <sequence name="Failure"/>
                    </path>
                  </fork>
                </path>
                <path state="failure">
                  <collect-expression>
                    <float value="0.4"/>
                  </collect-expression>
                  <fork functional-event="D">
                    <path state="success">
                      <collect-expression>
                        <float value="0.5"/>
                      </collect-expression>
                      <sequence name="Success"/>
                    </path>
                    <path state="failure">
                      <collect-expression>
                        <float value="0.5"/>
                      </collect-expression>
                      <sequence name="Failure"/>
                    </path>
                  </fork>
                </path>
              </fork>
            </path>
          </fork>
        </initial-state>
      </define-event-tree>
    </opsa-mef>
    

    and SCRAM returns the followin error for Line 5 :

    scram::xml::ValidityError
    
    Did not expect element define-initiating-event there
    

    I am getting the same kind of error when using the provided examples with SCRAM. Any idea ?

    opened by FenryrMKIII 1
  • Calculating the failure probability without minimal cut sets

    Calculating the failure probability without minimal cut sets

    I have some big Fault Trees that I only need to get the failure probabilities from. Is there a way to only calculate the failure probabilities of these without the minimal cut sets? If not shouldn't it be possible as one can calculate the probabilities with only the BDD. Currently scram calculates every MCS even though I did not request MCS analysis.

    i.e. scram --probability ./test.xml

    I cannot use the GUI for this as it needs to run headless.

    opened by Weker01 0
  • Failed to Include XML into another XML

    Failed to Include XML into another XML

    Does SCRAM support referencing other XMLs in the input file? I tried to put the probabilities of basic events in a separate params.xml as follows:

    <?xml version="1.0"?>
    <define-basic-event name="BatteryFault">
        <float value="0.0001"/>
    </define-basic-event>
    

    In input.xml (at the same directory as params.xml), I tried to reference the params file as follows:

    <?xml version="1.0"?>
    <!DOCTYPE opsa-mef [
    <!ENTITY params SYSTEM "params.xml">
    ]>
    <opsa-mef>
      <define-fault-tree name="DroneFaultTree">
        <define-gate name="...">
        ...
        </define-gate>
        &params;
      </define-fault-tree>
    </opsa-mef>
    

    The error message that I got was:

    scram::mef::ValidityError
    
    File: /home/.../input.xml
    Line: 106
    
    Undefined event BatteryFault with base path DroneFaultTree
    

    If it helps, my current SCRAM version is

    SCRAM 0.16.2 ()
    
    Dependencies:
       Boost       1_65_1
       libxml2     2.9.4
    

    Line 106 is the event BatteryFault (one of the <or> arguments within <define-gate>). The "..." are in place for brevity.

    @rakhimov Please let me know, thank you for your time!

    opened by gcfc 0
  • floating point format mismatch between loading and saving files

    floating point format mismatch between loading and saving files

    Having a simple model with only one basic event which has a constant value of "25e-9". If you save this model to xml, close scram-gui, reopen it and load the file you get an error.

    The file i get:

    <?xml version="1.0" encoding="UTF-8"?>
    <opsa-mef>
      <model-data>
        <define-basic-event name="BE">
          <label>BE1</label>
          <float value="2,5e-08"/>
        </define-basic-event>
      </model-data>
    </opsa-mef>
    

    The error i get:

    Invalid input file
    
    File: /home/user/theses/computation/safety/testFile.xml
    Line: 6
    

    Error details:

    scram::xml::ValidityError
    
    Element float failed to validate attributes
    

    If you change the float value to 25e-9 instead of 2,5e-8 (2.5e-8 does not work as well), it now works fine.

    EDIT: SCRAM 0.16.2 on Ubuntu 18.04 64 bit

    bug probability analysis gui 
    opened by swilske 1
Releases(0.16.2)
  • 0.16.2(Jan 12, 2018)

    Release Notes

    With this release, the codebase transitions to C++17, requiring more modern compilers (gcc 7, clang 5) and dependencies.

    Minor Changes

    • Transition to C++17 (#250)
    • Replace header guards w/ '#pragma once' (#253)
    • Replace Nose w/ Pytest (#252)
    • Replace GoogleTest w/ Catch2 (#251)

    Removed Features

    • Non-MEF, API-only random deviates (use STL or Boost random directly).

    Since v0.16.1

    80 commits resulted in 193 files changed, 3321 insertions(+), 4040 deletions(-)

    • Core: 96 files changed, 1061 insertions(+), 1613 deletions(-)
    • Scripts: 1 file changed, 111 insertions(+), 88 deletions(-)
    • GUI: 39 files changed, 240 insertions(+), 443 deletions(-)
    • Tests: 40 files changed, 1724 insertions(+), 1727 deletions(-)
    • Documentation: 4 files changed, 41 insertions(+), 61 deletions(-)
    • Schemas: No change
    Source code(tar.gz)
    Source code(zip)
  • 0.16.1(Jan 4, 2018)

    Release Notes

    This release automates GUI testing with Qt Test and CI on GNU/Linux, macOS, and Windows.

    Minor Changes

    • GUI: Automated GUI Testing (#202)
    • GUI: Present interface languages in sorted order (#242)
    • GUI: Doxygen code doc generation and coverage (#243)
    • GUI: Spanish translation (thanks to @NeHoMaR)
    • GUI: Turkish translation (thanks to irfandogan)
    • GUI: Dutch translation (thanks to Omer Surer)
    • GUI: Indonesian translation (thanks to @anggaariska, @isaideureka, and Irham21)
    • GUI: Polish translation (thanks to @oschlypajac)
    • GUI: Italian translation (thanks to @aitorres)

    Removed Features

    • install.py helper script (use CMake or its front-ends directly)
    • GUI: Crash handler (requires an external process; instead, rely on the OS default)

    Bug Fixes

    • GUI: SIGSEGV on model modification with open report tree (#236)
    • GUI: Zoom box is too reactive (#240)
    • GUI: GateTable: Remove element is active w/o selected element (#241)

    Since v0.16.0

    140 commits resulted in 290 files changed, 117096 insertions(+), 5798 deletions(-)

    • Core: 95 files changed, 531 insertions(+), 582 deletions(-)
    • Scripts: 5 files changed, 236 insertions(+), 139 deletions(-)
    • GUI: 78 files changed, 6694 insertions(+), 3746 deletions(-)
    • Tests: 42 files changed, 421 insertions(+), 659 deletions(-)
    • Documentation: 5 files changed, 58 insertions(+), 20 deletions(-)
    • Schemas: No change
    Source code(tar.gz)
    Source code(zip)
  • 0.16.0(Nov 18, 2017)

    Release Notes

    This release introduces support for declarative and non-declarative Substitutions.

    Major Changes

    • Substitutions (#154)

      • Delete Terms
      • Recovery Rules
      • Exchange Events
    • Extern function (#74)

      • External dynamic libraries

    Minor Changes

    • Replace libxml++ with libxml2 (#218)

      • 2-2.5x speed improvement for initialization from MEF XML input
      • Removed dependencies: libxml++, glib, glibmm, sigc++
    • Redesign Exception classes w/ boost::exception (#219)

    • Option to omit indentation whitespace in output XML (#220) (up to 25% smaller file size and 10% speed improvement)

    • XML stream optimizations for reporting

      • stdio instead of iostream (40% speed improvement)
      • Custom indentation implementation (5% speed improvement)
      • Integer serialization optimization (4-5% speed improvement)
    • GUI: Translation and localization setup with Crowdin

    • GUI: Application Preferences (#210)

    • GUI: Fail-safe file save (#228)

    • GUI: Enable find/filter/search in Importance and Product tables

    Bug Fixes

    • GUI: EventDialog name validator allows only ASCII chars (#221)

    Since v0.15.0

    201 commits resulted in 215 files changed, 36429 insertions(+), 2372 deletions(-)

    • Core: 61 files changed, 3262 insertions(+), 1364 deletions(-)
    • Scripts: No change
    • GUI: 61 files changed, 31086 insertions(+), 471 deletions(-)
    • Tests: 64 files changed, 1566 insertions(+), 198 deletions(-)
    • Documentation: 13 files changed, 202 insertions(+), 76 deletions(-)
    • Schemas: 2 files changed, 103 insertions(+), 26 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.15.0(Aug 15, 2017)

    Release Notes

    The release adds support for alignment (i.e., analysis of a model over mission phases).

    Major Changes

    • Alignment, Mission, Phases (#153)

    Minor Changes

    • GUI: Elision of long IDs and labels in diagram (#213)

    Bug Fixes

    • GUI: QSortFilterProxyModel breaks Gate tree-table model (#214)
    • GUI: Diagram unit dimensions are coupled with character dimensions (#215)
    • GUI: SIGSEGV on exit (Windows, Wine) (#217)

    Since v0.14.0

    21 commits resulted in 68 files changed, 1516 insertions(+), 748 deletions(-)

    • Core: 19 files changed, 620 insertions(+), 234 deletions(-)
    • Scripts: 2 files changed, 97 insertions(+), 97 deletions(-)
    • GUI: 9 files changed, 308 insertions(+), 305 deletions(-)
    • Tests: 28 files changed, 300 insertions(+), 93 deletions(-)
    • Documentation: 3 files changed, 38 insertions(+)
    • Schemas: 2 files changed, 44 insertions(+)
    Source code(tar.gz)
    Source code(zip)
  • 0.14.0(Aug 1, 2017)

    Release Notes

    This is the first GUI release with features for simple fault tree analysis.

    Major Changes

    • GUI: Fault Tree Visualization (#132)
    • GUI: Fault Tree Construction (#133)
    • GUI: Analysis Configuration (#134)
    • GUI: Fault Tree Analysis (#135)
    • GUI: Probability and Importance analysis (#136)

    Minor Changes

    • GUI: Print the Diagram/Graph (#200)
    • GUI: Print Preview (#205)
    • GUI: Export the Diagram/Graph to SVG (#201)
    • GUI: Transfer In/Out symbols (#191)
    • GUI: Start Page (#196)
    • GUI: Undo/Redo mechanism (#194)

    Bug Fixes

    • GUI: Icon/Logo quality and scaling issues (#203)
    • Importance factors are not generated for low product order limit (#206)
    • LogicError: MEF Element w/ private role at model scope (#208)

    Since v0.13.0

    222 commits resulted in 108 files changed, 12550 insertions(+), 1072 deletions(-)

    • Core: 27 files changed, 985 insertions(+), 377 deletions(-)
    • Scripts: No change
    • GUI: 54 files changed, 11169 insertions(+), 450 deletions(-)
    • Tests: 11 files changed, 232 insertions(+), 48 deletions(-)
    • Documentation: 8 files changed, 72 insertions(+), 22 deletions(-)
    • Schemas: 1 file changed, 3 insertions(+), 139 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.13.0(May 12, 2017)

    Release Notes

    This release introduces limited and experimental support for event tree analysis. Only necessary and sufficient functionalities are implemented to allow the most common and basic analysis. Moreover, the release doesn't implement any optimization specific to event-tree analysis.

    Major Changes

    • Event Tree Analysis (#150)
    • Event-Tree-Fault-Tree Linking (#152)
    • Event-Tree Chaining (#151)
    • MEF 'set-house-event' Instruction (#179)
    • MEF Test-Event Expressions (#68)
    • MEF Numerical Operations (#72)
    • MEF Boolean Operations (#73)
    • MEF Conditional Operations (#67)

    Minor Changes

    • Fedora RPM Package

    • Report product-order distribution (#168)

    • XInclude support

    • The Open-PSA MEF compliance:

      • House event state expressions are optional and can be implicitly defined to False.
      • CCF level numbers are optional.
      • CCF factors can be declared in any order.
      • Multiple 'model-data' containers are allowed within a single 'opsa-mef' element.
      • Gate formulas can have literal constant args (true, false) instead of house-events.
    • Interval-based expression sample domain validation (instead of min-max)

    • Print line numbers in XML schema validation error messages

    • Report warning messages with XML attributes in the results-layer instead of XML elements.

    Bug Fixes

    • Fail to assign a label to a pass-through gate (#166)
    • Zero/One probability events (division by zero total probability) (#169)
    • Segfault with single-event fault tree importance analysis with BDD (#170)
    • Config: Input/output file path format is system dependent (#171)
    • Config: Relative paths are not resolved wrt the config file path (#172)

    Since v0.12.0

    208 commits resulted in 210 files changed, 9805 insertions(+), 3971 deletions(-)

    • Core: 65 files changed, 4552 insertions(+), 2712 deletions(-)
    • Scripts: 1 file changed, 18 insertions(+), 14 deletions(-)
    • GUI: 2 files changed, 23 insertions(+), 94 deletions(-)
    • Tests: 97 files changed, 2997 insertions(+), 557 deletions(-)
    • Documentation: 23 files changed, 363 insertions(+), 352 deletions(-)
    • Schemas: 4 files changed, 1119 insertions(+), 133 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.12.0(Mar 13, 2017)

    Release Notes

    This release introduces initial implementation and support for probability calculations over time to approximate IEC 61508 Safety Integrity Levels and its Probability of Failure on demand and hourly metrics.

    Major Changes

    • Safety Integrity Levels (#160)
    • Probability evaluation over a time period (#161)
    • Report event probability and occurrence with importance factors (#162)
    • The MEF Expression::Lognormal Deviate with 2 (mu, sigma) parameters (#163)
    • The MEF Expression::Built-in::Periodic-Test w/ 4, 5, and 11 arguments (#69)

    Minor Changes

    • Remove the constraint on the maximum product size
    • Remove '--input-files' flag and make it implicit as a default positional parameter
    • Rename the configuration file main element "config" to "scram"
    • Random Deviate Expressions always use the mean value of their parameters
    • Expression validation errors show XML file names and line numbers

    Since v0.11.6

    62 commits resulted in 78 files changed, 2544 insertions(+), 1446 deletions(-)

    • Core : 35 files changed, 1522 insertions(+), 776 deletions(-)
    • Scripts : 1 file changed, 3 insertions(+), 3 deletions(-)
    • GUI : 1 file changed, 1 insertion(+), 6 deletions(-)
    • Tests : 17 files changed, 586 insertions(+), 255 deletions(-)
    • Documentation : 15 files changed, 116 insertions(+), 76 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.11.6(Feb 12, 2017)

    Release Notes

    Analysis and post-analysis facilities work directly with a ZBDD-based product container without paying memory or speed overhead of converting ZBDD into other data structures.

    Major Changes

    • ZBDD as a fault tree analysis result (product/cut-set) container (#159)
      • Qualitative analysis speedup from 10% to 5x (the more the products, the bigger the effect)
      • Memory consumption decreases by 1.5 - 4x (noticeable only for million or more products)
      • Iteration over products is ~2x slower (graph walk vs. sequential array of products)
      • Quantitative analysis with approximations (rare-event, MCUB) is 2 - 10x slower (the fewer the products, the worse the effect)

    Minor Changes

    • Package for Windows (#157)
    • Package for macOS (#158)
    • HTTPS support for the website

    Bug Fixes

    • Incorrect formula for Histogram distribution expected value (#149)
    • Histogram distribution XML schema missing lower-boundary expression (#148)

    Since v0.11.5

    83 commits resulted in 109 files changed, 5258 insertions(+), 5303 deletions(-)

    • Core : 52 files changed, 3869 insertions(+), 4030 deletions(-)
    • Scripts : No Changes
    • GUI : No Changes
    • Tests : 23 files changed, 479 insertions(+), 490 deletions(-)
    • Documentation : 20 files changed, 229 insertions(+), 183 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.11.5(Dec 12, 2016)

    Release Notes

    This release includes patches from the initial Debian packaging at SCRAM's Alioth repository. In addition, some changes have been inspired by the Open-PSA community workshop and its new presence at GitHub.

    Minor Changes

    • Optional link against JEMalloc
    • Debian Science package
    • Parallelized fuzz testing
    • Move the Open-PSA schemas to https://github.com/open-psa/schemas
    • Move the shorthand_to_xml.py translator to https://github.com/open-psa/translators
    • Rename the shorthand format to the Aralia format
    • Improved build-times after dependency analysis and refactoring with cppdep
    • Python API documentation generation with Sphinx

    Bug Fixes

    • CCF Alpha factor wrong formula (#146)
    • Misinterpretation of Log-Normal Deviate Error Factor and Level parameters (#147)

    Since v0.11.4

    55 commits resulted in 123 files changed, 3114 insertions(+), 5925 deletions(-)

    • Core : 47 files changed, 1969 insertions(+), 1640 deletions(-)
    • Scripts : 9 files changed, 284 insertions(+), 1203 deletions(-)
    • GUI : 4 files changed, 112 insertions(+), 63 deletions(-)
    • Tests : 15 files changed, 177 insertions(+), 195 deletions(-)
    • Documentation : 25 files changed, 344 insertions(+), 279 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.11.4(Sep 15, 2016)

    Release Notes

    With this release, the codebase transitions to C++14, requiring more modern compilers and tools. The target development platform is upgraded from Ubuntu 14.04 to Ubuntu 16.04. Boost and LibXML++ dependency versions are upgraded to reflect the new target platform. The codebase is refactored, taking advantage of C++14 and upgraded libraries.

    Minor Changes

    • Transition to C++14 (#142)
    • GUI development setup with Qt5 and CMake (#48)
    • Compilation with Intel C++ compiler
    • Coding style update with the updated GCSG

    Bug Fixes

    • mef::Initializer is not exception safe (#144)
    • Memory leaks with invalid cyclic MEF constructs (#145)

    Since v0.11.3

    120 commits resulted in 130 files changed, 3596 insertions(+), 3046 deletions(-)

    • Core : 56 files changed, 2369 insertions(+), 2172 deletions(-)
    • Scripts : No Changes
    • GUI : 15 files changed, 484 insertions(+), 55 deletions(-)
    • Tests : 29 files changed, 288 insertions(+), 476 deletions(-)
    • Documentation : 12 files changed, 138 insertions(+), 63 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.11.3(Jun 30, 2016)

    Release Notes

    This release somewhat stabilizes the performance profile of analysis across platforms. The stabilization results in up to 20% analysis performance regression; however, this regression is compensated by slightly improved BDD/ZBDD variable ordering heuristics, which increases performance by around 20%.

    Major Changes

    • CacheTable for BDD (10% memory and 20% speed improvement)
    • Space-optimized container (2-3x memory efficient) for final analysis products (However, the maximum product order is limited to 32.)
    • Generic XML data streaming (25% reporting speed improvement)
    • XML streaming optimization for static string literals (10-15% reporting speed improvement)
    • Simplified role-based (private and public) element lookup in models (at least 30% speed improvement for model element initialization)
    • Continuous integration on Windows (#130)
    • Continuous integration on Mac OS X (#129)

    Minor Changes

    • Numerical operation expressions: neg, add, sub, mul, div, pi.

    Removed Features

    • Fault tree graphical representation with Graphviz

    Bug Fixes

    • Regression in detection of duplicate input files (#131)
    • Regression in handling an undefined event with mixed roles and types in Model input (#141) (The bug was introduced in version 0.11.1)

    Since v0.11.2

    139 commits resulted in 179 files changed, 6334 insertions(+), 4752 deletions(-)

    • Core : 62 files changed, 3670 insertions(+), 3401 deletions(-)
    • Scripts : 3 files changed, 29 insertions(+), 18 deletions(-)
    • GUI : 5 files changed, 70 insertions(+), 44 deletions(-)
    • Tests : 40 files changed, 864 insertions(+), 378 deletions(-)
    • Documentation : 36 files changed, 1113 insertions(+), 280 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.11.2(Apr 14, 2016)

    Release Notes

    This micro release makes model initialization and validation facilities language-agnostic. The initialization facilities preserve the original representation of names and references without normalization except for trimming leading and trailing whitespace characters, which simplifies internationalization.

    The release clarifies the support for the UTF-8, UTF-16, and other encodings in input files, and specifies the encoding for report files (UTF-8).

    Removed Features

    • Case-insensitive model initialization and validation

    Bug Fixes

    • 10 - 100x performance regression in model initialization from input (noticeable only for large models with 1000 or more events).

    Since v0.11.1

    6 commits resulted in 31 files changed, 284 insertions(+), 282 deletions(-)

    • Core : 13 files changed, 90 insertions(+), 118 deletions(-)
    • Scripts : no change
    • GUI : no change
    • Tests : 12 files changed, 168 insertions(+), 156 deletions(-)
    • Documentation : 6 files changed, 26 insertions(+), 8 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.11.1(Apr 6, 2016)

    Release Notes

    This release implements apparent, natural BDD-ZBDD optimizations that lead to simplicity or don't introduce much complexity.

    Major Changes

    • Stricter application of the set order cut-off for ZBDD
      • Increased ZBDD/MOCUS performance sensitivity to the cut-off
      • Cut-off awareness of ZBDD cut-set extraction (~2x improvement of the extraction speed)
    • Intrusive reference counting for BDD and ZBDD vertices. (around 20% speed and memory improvements)
    • Intrusive hash table for BDD and ZBDD unique tables. (10-30% speed and memory improvements)
    • BDD and ZBDD node management without garbage collectors. (10-30% speed improvement)

    Minor Changes

    • Faster and more efficient reporting of analysis results with XML streams. (200,000 cut sets per second with minimal memory overhead)
    • Cross-validation of qualitative analysis algorithms with the Fuzz tester.

    Removed Features

    • Experimental support for nested Boolean formulae and nested parentheses in the shorthand format.

    Bug Fixes

    • Missing check for negative literal approximations in application of minimal cut set order cut-offs (ZBDD/MOCUS). (#128)
    • Incorrect check for cloning constraints in common argument decomposition processing. The decomposition code fails to correctly determine if the no-clone operation has a side effect outside of the sub-graph. (#128)
    • Undefined behavior (int overflow) in probability calculations of CCF MGL and Alpha Models with many members (> 12) and high factor levels (>= (# members / 2)).
    • Missing proper error messages for int overflow or other numerical problems in XML input files.
    • InvalidArgument error is reported as unexpected when it communicates expected errors in user configurations and settings.
    • Memory leak in validating input files with RelaxNG schema.
    • The population standard deviation from Boost accumulators isn't adjusted to the sample standard deviation.

    Since v0.11.0

    163 commits resulted in 167 files changed, 7034 insertions(+), 39890 deletions(-)

    • Core : 61 files changed, 3963 insertions(+), 3230 deletions(-)
    • Scripts : 8 files changed, 1894 insertions(+), 2074 deletions(-)
    • GUI : no change
    • Tests : 68 files changed, 496 insertions(+), 33698 deletions(-)
    • Documentation : 15 files changed, 360 insertions(+), 714 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.11.0(Jan 28, 2016)

    Release Notes

    This release implements qualitative analysis with BDD and ZBDD facilities.

    Major Changes

    • Fault tree analysis with BDD (#121)
    • Fault tree analysis with ZBDD (#126)
    • ZBDD for MOCUS (#124)
      • 10-100x speed improvement
      • 3-30x better memory utilization
      • Decreased performance sensitivity on approximations
    • Calculation of Prime Implicants (#122)

    Minor Changes

    • The BDD-based algorithm is the default analysis algorithm.
    • The MOCUS and ZBDD algorithms run with the rare-event approximation by default.
    • Modules are analyzed only as needed (lazy) with adjusted cut-offs.
    • scram --validate is silent on success.
    • New web address: http://scram-pra.org

    Bug Fixes

    • Improper cut set minimization in MOCUS when modules in a cut set are Unity sets.

    Since v0.10.0

    169 commits resulted in 138 files changed, 7762 insertions(+), 4524 deletions(-)

    • Core : 51 files changed, 2993 insertions(+), 2227 deletions(-)
    • Scripts : 6 files changed, 371 insertions(+), 144 deletions(-)
    • GUI : no change
    • Tests : 36 files changed, 882 insertions(+), 831 deletions(-)
    • Documentation : 20 files changed, 908 insertions(+), 571 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.10.0(Oct 21, 2015)

    Release Notes

    This release introduces Binary Decision Diagrams (BDD) and incorporates BDD-based algorithms into analysis. For quantitative analysis, the observed performance improvement exceeds 100x.

    Major Changes

    • Probability analysis with BDD (#118)
    • Importance analysis with BDD (#119)
    • Uncertainty analysis with BDD (#120)
    • Fault tree preprocessing for BDD (#125)
    • Coherent fault tree analysis with BDD/ZBDD

    Minor Changes

    • Non-coherent fault tree analysis with BDD/ZBDD (experimental)
    • Boolean optimization for non-coherent fault trees (experimental)
    • Adjustment of invalid calculation results in quantitative analyses due to approximations (the rare-event, MCUB) or invalid ranges (random distributions) (adjustment of probability to 1 if it exceeds 1)
    • Fuzz tester for SCRAM
    • Documentation style guide

    Removed Features

    • The Sylvester-Poincaré expansion for probability calculations ('--num-sums' flag and setting are removed.)

    Bug Fixes

    • Incorrect formulas for importance factors (#127)
    • Proper calculation of minimal cut sets with positive literals only (#123)
    • Failure to calculate constant outcome (#92)
    • Fault tree generator prevents K/N root gate
    • Boolean optimization fails to properly clone modules
    • Decomposition of common nodes is not semantics preserving
    • Distributivity preprocessing steps don't register new NULL type gates
    • Preprocessor doesn't handle one-arg K/N gates in transformations
    • Preprocessor doesn't handle (K > N) cases for K/N gates in transformations
    • Preprocessor attempts to coalesce empty (constant) gates
    • Filtering step in common argument merging fails to keep arguments unique

    Since v0.9.2

    • 217 commits resulted in 128 files changed, 9185 insertions(+), 6512 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.9.2(Sep 10, 2015)

    Release Notes

    This micro release polishes the fault tree preprocessing techniques and optimizes minimal cut set generation.

    Major Changes

    • Performance optimization with hash tables and flat sets for MOCUS (2x - 20x speed improvement and 5x - 10x better memory utilization)
    • Merging common arguments of gates for non-coherent fault trees
    • Heuristics for substitution of common arguments by existing gates (Merging common arguments runs 3x-4x faster but results in ~10% performance hit for cut set generation in some cases)
    • Heuristics for reduction of the number of parents of common arguments (Modularity is favored in merging common arguments)
    • Multiple gate definition detection with hash tables (Linear complexity and 10x-100x speed improvement for the detection)
    • Better strategy for handling distributive setups (10% - 20% cut-set-generation improvement for some cases)
    • The Shannon decomposition of common nodes with less gate cloning (Makes possible to preprocess graphs with 1000s of nodes without blowup)

    Bug Fixes

    • Mishandling of duplicate arguments in K/N gate preprocessing
    • Handling of distributive setups introduces unmanageable subgraphs for other preprocessing and analysis steps. (Graph visit marks are messed up)
    • Incorrect assumption in common argument merging that if set A of common arguments is a subset of set B, group A of gates is a superset of group B.
    • Failing to properly unset module flags of gates in propagation of complements. The problem manifests itself upon creation of clones.

    Since v0.9.1

    • 71 commits resulted in 46 files changed, 2673 insertions(+), 1893 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.9.1(Aug 21, 2015)

    Release Notes

    The release removes the restriction to use C++11 features. The build scripts and system requirements are updated to support C++11. Some features of C++11 have been applied to refactor the code and fix bugs.

    Major Changes

    • Transition to C++11 (issue #116)
    • Calculation of both histograms and quantiles for uncertainty analysis (issue #104)
      • Add "--num-bins" and "--num-quantiles" arguments
    • Options to use the rare-event and MCUB approximations in uncertainty analysis
    • Calculation of the error factor in uncertainty analysis
    • Log-normal deviate expression with any level of confidence

    Bug Fixes

    • Incorrect sampling for Histogram expressions. Weights and boundaries are swapped upon passing to the generator.
    • Incorrect reporting of quantiles. (issue #104)
    • Incorrect adjustment of the number of sums in probability series for the case with very few cut sets.
    • Mishandling of 95% confidence level for the log-normal deviate expression as 90% confidence level.

    Since v0.9.0

    • 54 commits resulted in 114 files changed, 2695 insertions(+), 2602 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.9.0(Aug 16, 2015)

    Release Notes

    This release adds more fault tree preprocessing techniques that simplify a fault tree before the analysis. Depending on the structure of the fault trees, the observed gain in the analysis speed ranges from none to 50x.

    Major Changes

    • Boolean optimization
      • Failure propagation
      • Redundancy detection
    • Merging common arguments for gates
    • Multiple definition detection for gates
    • The Shannon decomposition for common nodes
    • Distributivity detection
    • Grouping non-module nodes into modules
    • Recursive normalization of K-out-of-N gates

    Other Additions

    • Optional link against TCMalloc (20-30% speed gain)
    • Capability to print the fault tree in preprocessing (the shorthand format)
    • NULL gates in the shorthand format
    • "--gates" argument for the fault tree generator script
    • Semantic Linefeeds for documentation source texts

    Bug Fixes

    • Crash on a NULL or NOT gate top event with a single non-gate child.
    • Incorrect warning when no MCS is found, which indicates NULL (guaranteed success or prob(top) = 0).

    Since v0.8.0

    • 189 commits resulted in 156 files changed, 10478 insertions(+), 4998 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.8.0(Jul 6, 2015)

    Release Notes

    This release upgrades the fault tree generator and introduces support for the shorthand notation. The release adds more support for OpenPSA MEF features. The project licenses are upgraded, and the project name uses a recursive acronym ("SCRAM is a Command-line Risk Analysis Multi-tool.").

    Major Changes

    • Complex-fault-tree generator
      • More gate types: K/N, NOT, XOR.
      • House events
      • CCF groups
      • Common gates with no cycles in the resulting fault tree
      • More factors to control the complexity of the final fault tree
      • Reproducibility (Deterministic execution)
      • Better performance (100,000-basic-event/50,000-gate tree in less than 1min)
      • Better error reporting for wrong parameters
      • XML and the shorthand format for the output
      • Nested Boolean formula for the output
      • Topological sort of the output
    • Shorthand format to XML converter
      • Logical operators: AND, OR, K/N, XOR, NOT
      • Fault tree validation: cycles, repeated children, redefined nodes.
      • Basic and House events
      • Flexible with undefined nodes
      • Multiple top events
      • Topological sort of the output
      • Nested Boolean formula, Boolean equations (Experimental support)
      • Parentheses (Experimental support)
    • OpenPSA MEF features
      • Multiple top events per fault tree container
      • Nested Boolean formula for gates
      • Components in fault trees
      • Public and Private roles
      • Optional expression for basic events
      • Optional expression for house events
    • Updated and corrected OpenPSA MEF DTD

    Bug Fixes

    • Cycle detection in parameters that takes into account expressions
    • Corrected graphing instructions for multiple-fault-tree models.

    Relicensing

    • The project under the GPLv3
    • The website materials under the CC BY-SA 4.0
    • Individual Contributor License Agreement (Harmony ICLA 1.0-beta and Apache ICLA 2.0)
    • The OIN License Agreement

    Since v0.7.0

    • 226 commits resulted in 292 files changed, 16622 insertions(+), 21351 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.7.0(Mar 30, 2015)

    Release Notes

    This release introduces analysis configuration and report in XML format.

    Major Changes

    • XML Report Layer
      • OpenPSA MEF recommended schema
      • Special format for CCF events
    • XML Configuration File
      • Incorporation of all available options
      • More options for a finer control over analysis
      • Higher priority for command-line options
    • Bash completion script
    • Removal of the implicit detection of required analyses
      • Fault tree analysis is the default.
      • Other analysis types must be requested explicitly: probability, importance, uncertainty, ccf.
    • Removal of the post-processing(grouping, sorting) of analysis results
      • Delegation of post-processing to other tools like BaseX

    Since v0.6.0

    • 64 commits resulted in 103 files changed, 4643 insertions(+), 4651 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.6.0(Nov 26, 2014)

    Release Notes

    Incorporation of Common Cause Failure.

    Major Changes

    • Common Cause Failure models:
      • Beta Factor
      • Multiple Greek Letters
      • Alpha Factor
      • Phi Factor

    Since v0.5.0

    • 42 commits resulted in 50 files changed, 2740 insertions(+), 304 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.5.0(Nov 17, 2014)

    Release Notes

    This release introduces a new cut set generation algorithm that is faster than the previous algorithm. In addition, the release adds importance analysis and initial attempts to preprocess and simplify fault trees. A new analysis engine is introduced for easier preprocessing.

    Major Changes

    • New algorithms to efficiently generate cut sets (at least 10x improvement):
      • Early set uniqueness detection
      • Local minimality detection upon cut set expansions
    • Fault tree preproccessing:
      • Constant propagation
      • Application of Boolean algebra basics for fault tree simplifications
      • Complex gate expansions for XOR and ATLEAST
      • Original module (independent sub-tree) detection
      • Simple new module creation
    • Importance analysis:
      • Fussel-Vesely
      • Birnbaum
      • Critical Importance Factor
      • Risk Reduction Worth
      • Risk Achievement Worth
    • Importance factors only for basic events in minimal cut sets. The other basic events are 0 importance.
    • Calculations without probability information assume House event state as false.
    • Separate consideration for certain basic events for uncertainty analysis:
      • Only basic events with distributions are left in probability equation.
    • Multiple input files with fault trees and model data are accepted for analysis.
    • Simple logging system for debugging or warning.

    Fixed Bugs

    • House events are treated as constant in the fault tree not as regular basic events.
    • House events are not included in minimal cut sets or reported with probability information anymore.
    • Unity is treated in Boolean algebra for minimal cut sets. The special case of Unity top gate is handled.
    • Repeated children are detected in input files. One gate cannot have the same two children in input.

    Since v0.4.0

    • 116 commits resulted in 226 files changed, 5342 insertions(+), 37071 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.4.0(Oct 21, 2014)

    Release Notes

    This release introduces uncertainty analysis and more support for OpenPSA expressions.

    Major Changes

    • Uncertainty analysis with Monte Carlo method
    • Automated performance testing
    • Probability calculation performance optimization (up to 10x faster)
    • The default number of series in probability calculations is set to 7 (conservative result with acceptable performance).
    • cppclean code problem check
    • Lowered cyclomatic complexity of the core code (CCN < 15)
    • Bug fixes of wrong output into a file
    • Bug fix in log-normal distribution
    • OpenPSA MEF support additions:
      • Expressions:
        • Constant expressions
        • System mission time
        • Parameter
        • Random deviate (normal, log-normal, histogram, uniform, gamma, beta)
        • Built-in expressions (exponential with two parameters, exponential with four parameters, Weibull)
    • More theory information in documentations.
    • Re-introduction of deprecated Inhibit gate, Conditional and Undeveloped events.

    Deprecated Features

    • Vote gate is renamed to "atleast".

    Since v0.3.1

    • 124 commits resulted in 120 files changed, 10455 insertions(+), 3244 deletions(-)
    Source code(tar.gz)
    Source code(zip)
  • 0.3.1(Sep 28, 2014)

    Release Notes

    Major Changes

    • Pre-expansion of gates (around 4x faster tree expansion).
    • Verified building for Mac OS X with macports.
    • Verified building for Windows with Cygwin.
    • Various statistical distributions for Monte Carlo Method and random number generator.
    • OpenPSA MEF support additions:
      • Several fault trees in one input file.
      • Attributes
      • Label
    • Warnings for unused primary events.
    • More example fault tree inputs.
    • KDE CMake coding style and corrected function declarations according to Google Style.
    • Start of GUI development with Qt
    • CDash reporting.

    Since v0.3.0

    • 93 commits resulted in 265 files changed, 79505 insertions(+), 31439 deletions(-)
    Source code(tar.gz)
    Source code(zip)
    scram-0.3.1-cygwin64.zip(872.62 KB)
    scram-0.3.1-mac.tgz(3.24 MB)
    scram-linux-64bit.tgz(948.68 KB)
  • 0.3.0(Sep 2, 2014)

    Release Notes

    This release introduces a refactored structure of the core code and support for XML input files.

    Major Changes

    • XML input files formatted according to OpenPSA Model Exchange Format
      • RelaxNG validation of input files.
    • Refactored code structure conceptually similar to the structure of the XML tree from the input file.
    • Three entities: Gates, Basic events, House events.
    • Performance optimization of the tree expansion (around 1.5x faster) and MCS generation (around 3x faster)
    • Cut-off probability for cut sets is introduced for faster probability calculations (around 40-50x faster)
    • Gates can be easily re-used without creating TransferIn/Out input files
    • The fault tree generator script outputs XML input file

    Deprecated Features

    • The previous custom input formats for a fault tree and event probabilities
    • L-model probability description with failure rates (This will be implemented by more broad expressions in future)
    • TransferIn and TransferOut are not gate-like types but symbols to represent the re-use of gates.
    • Undeveloped/Conditional event will be treated just like a basic event with an additional description.

    Since v0.2.0

    • 131 commits resulted in 305 files changed 15863 insertions and 22968 deletions.
    Source code(tar.gz)
    Source code(zip)
  • 0.2.0(Aug 10, 2014)

    Release Notes

    • New Gates and Event types:
      • NULL
      • NOT
      • NOR
      • NAND
      • XOR
      • VOTE
      • Inhibit
      • Conditional Event
    • Performance improvements for minimal cut set generation.
    • Initial Complexity analysis for main functions.
    • Probability calculation from failure rates.
    • MCUB Approximation for probability calculations.
    • Better output formatting.
    • Better graphing with colors.
    • Time reporting.
    • Bug fixes related to name clashes.
    • Documentation of API and publishing by Doxygen.
    • Better documentation website.
    • References and information about most used MCS algorithms: MOCUS and BDD.

    Since v0.1.2

    • SCRAM: 97 commits resulted in 89 files changed with 3782 insertions and 953 deletions.
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0-rc2(Aug 7, 2014)

  • 0.2.0-rc1(Jul 31, 2014)

  • 0.1.2(Jul 16, 2014)

    Release Notes

    • Analysis and graphing of a sub-tree without a main tree input file.
    • Bug fixes related to analysis of a sub-tree and its graphing.
    • Documentation is published on gh-pages.

    Since v0.1.1

    • SCRAM: 21 commits resulted in 50 changed files encompassing a net 4137 line insertions(+) and 665 deletions(-).
    Source code(tar.gz)
    Source code(zip)
  • 0.1.1(Jul 13, 2014)

    Release Notes

    This release introduces unit, integration, and benchmarking tests, as well as several bug fixes.

    Major changes

    • Testing suite
      • unit tests
      • integration tests
      • benchmarking tests
    • Continuous Integration by Travis-CI.
    • Automated Coverity scan for code quality and resource leak analysis.
    • Test coverage check by Coveralls.
    • Several bug fixes for input file parsing and fault tree instantiation.
    • Better memory management with boost smart pointers.

    Since v0.1

    • SCRAM: 116 commits resulted in 107 changed files encompassing a net 4799 line insertions(+) and 923 deletions(-).
    Source code(tar.gz)
    Source code(zip)
ToPS is an objected-oriented framework implemented using C++ that facilitates the integration of probabilistic models for sequences over a user defined alphabet

ToPS is an objected-oriented framework implemented using C++ that facilitates the integration of probabilistic models for sequences over a user defined alphabet

Andre Yoshiaki Kashiwabara 34 Aug 2, 2022
Sysmon event simulation utility which can be used to simulate the attacks to generate the Sysmon Event logs for testing the EDR detections and correlation rules by Blue teams.

SysmonSimulator SysmonSimulator is an Open source Windows event simulation utility created in C language, that can be used to simulate most of the att

Scarred Monk 637 Aug 8, 2022
A C++ Node.js module that helps gathering informations on segmentation fault

node-segfault-handler A C++ Node.js module that helps gathering informations on segmentation fault Supported Platforms Linux Linux Alpine Windows MacO

Shiranuit 9 Jun 17, 2022
Program that allows you to get the source code of a website's home page without doing it manually. Use it at your own risk.

Website-Homepage-Grabber Install one of the folders x64 or x32 if the program doesn't work(probably because you don't have visual studio installed) If

null 5 Feb 19, 2022
Evasive shellcode loader for bypassing event-based injection detection (PoC)

(cleaned up version here: https://github.com/xinbailu/DripLoader-Ops) DripLoader (PoC) Evasive shellcode loader for bypassing event-based injection de

Filip Olszak 520 Aug 3, 2022
Team hashcat event writeups and tools

Team hashcat event writeups and tools We're a group of people participating in the yearly repeating password cracking contests. Achievements Competiti

null 20 Jun 24, 2022
Project in the field of Advanced Programming Techniques by prof. Brian Kernighan, inspired by real event that made Ken Thompson invent grep command

ed_to_grep Project in the field of Advanced Programming Techniques by prof. Brian Kernighan, inspired by real event that made Ken Thompson invent grep

mirko 1 Oct 19, 2021
ROS1 and ROS2 messages for event based image sensors

ROS package with array messages for event based cameras This package has definitions for messages created by event based sensors. The events are kept

Bernd Pfrommer 1 Feb 22, 2022
Realtime Micro Kernel -- Event-driven Run-to-Completion RTOS with Active Objects, Timed Events, Memory Pools, and Message Queues

Realtime Micro Kernel Features Active Objects Message queues Variable sized, custom messages Periodic and single timed events Memory pools Supported P

null 2 Feb 25, 2022
Evasive shellcode loader for bypassing event-based injection detection (PoC)

DripLoader (PoC) Evasive shellcode loader for bypassing event-based injection detection, without necessarily suppressing event collection. The project

Filip Olszak 519 Jul 27, 2022
Thread-safe cross-platform event loop library in C++

Dasynq Version 1.2.2 Dasynq is an event loop library similar to libevent, libev and libuv. Like other such libraries, it is crossplatform / portable.

Davin McCall 146 Jul 24, 2022
Event-driven molecular dynamics simulations for hard spheres

Event-driven molecular dynamics code for hard spheres This is an event-driven molecular dynamics (EDMD) code for hard spheres. It uses neighbor lists

null 10 Jul 17, 2022
C++ graph based event system

Breadboard {#breadboard_readme} Overview The Breadboard scripting library is a graph based scripting system designed with games in mind. Complex behva

Google 117 May 19, 2022
Car Whispering: the AI Mechanic TinyML Audio Event Detection

CarWhispering Car Whispering: the AI Mechanic TinyML Audio Event Detection Welcome to the AI Mechanic, an ambitious project that aims to build a globa

Eoin Jordan 5 Feb 9, 2022
Cppev is a C++ event driven library

Cppev is a C++ event driven library. Architecture Nonblock IO Support disk-file / pipe / fifo / socket. Support socket protocol-type tcp / udp, protoc

null 5 Jul 21, 2022
This project shows how to interface Nokia 5110 LCD with Esp32 module to show current prices of any cryptocurrency like Bitcoin, Dogecoin, etc

ESP32 Cryptocurreny Ticker Introduction This project shows how to interface Nokia 5110 LCD with Esp32 module to show current prices of any cryptocurre

Aniket Katkar 20 Jun 16, 2022
The purpose of these streams is to be educational and entertaining for viewers to learn about systems architecture, reverse engineering, software security, etc., and NOT to encourage nor endorse malicious game hacking.

Memestream This repository holds the code that I develop during my live game "modding" ?? sessions. When I stream, I like to speedrun making a success

Stephen Tong 28 Jul 6, 2022
Quick patch to prevent fatal crashing when downloading title assets (boxart, etc) through FSD or Aurora.

Quick patch to prevent fatal crashing when downloading title assets (boxart, etc) through FSD or Aurora. As of v0.2-beta, this patch should work for everyone, regardless of geographic location (both in and outside of the US).

Stelio Kontos 26 Jun 26, 2022
A C++ library with all the online array problems and etc which I get online

cpp-Library A C++ library with all the online array problems and etc which I get online. Setup To setup it simply just download the repo and then move

Padmashree Jha 6 Dec 6, 2021