---
# System prepended metadata

title: DAQ Package Code Organization
tags: [DAQ, DUNE, Software Management]

---

# DAQ Package Code Organization

###### tags: `Software Management` `DAQ` `DUNE`

## Package Structure

```
dingpf@docker-bd:~$ tree dune-daq-template/
dune-daq-template/
├── apps
│   ├── CMakeLists.txt
│   └── dune-daq-template.cc
├── CMakeLists.txt
├── doc
│   └── html
│       ├── annotated.html
│   ...
│   ...
├── include
│   └── dune-daq-template
│       ├── Bar.hh
│       └── Foo.hh
├── README.md
├── scripts
├── src
│   └── CMakeLists.txt
│   ├── Bar.cc
│   ├── Foo.cc
│   └── PrivateHeader.hh
├── test
│   └── CMakeLists.txt
└── unittest
    ├── CMakeLists.txt
    ├── bar_test.cc
    ├── foo_test.cc
    └── main_test.cc

10 directories, 100 files
```


* Public headers go to `include/package_name`;
* Private headers should be kept with source files under `src`;
* Files in `src` are compiled into a share library;
* Source files for binary executables are in `apps`;
* Doxygen-generated html files go to `doc/html`;
* Any further documentation goes to `doc`;
* Package level `README.md` is stored in the package's root directory;
* `.clang-format` is going to be stored into another place which will be shared by all packages.

## Package Name

* Contain only **English alphanumeic characters and dash**;
* Always use **lower case** as much as possible;
* Use underscores or dashes to separate words for easy readling.

## Filenames

==Different from google C++ style guide==
* Contain only **English alphanumeic characters, dash or period**;
* No spaces or funny characters are allowed;
* C++ header files should have the suffix `.hh` (`.cc` for source files);
* C header files should have the suffix `.h` (`.c` for source files.
* Public headers and their implementation source files should use **`UpperCamelCase`**;
* Initials and acronyms should be capitalized, longer (>2 letter) acronyms can also be treated as words;
* Use underscores or dashes to separate words for easy readling;
* put `_test` **after** filename for unit test files.