Skip to content
Snippets Groups Projects
Commit 1e506370 authored by wudr@ihep.ac.cn's avatar wudr@ihep.ac.cn
Browse files

Add README

parent f2e6de2e
No related branches found
No related tags found
No related merge requests found
#include "NoiseAnaTool.h"
DECLARE_TOOL(NoiseAnaTool);
NoiseAnaTool::NoiseAnaTool(const string &name)
: ToolBase(name)
......
README.md 0 → 100644
# For SPMT commissioning (based on SNiPER)
The software was intentionally designed to separate the data input and analysis tools.
Similar to JUNO Offline, two main structures exist: one is named `**algorithm**`, and the other is named `**tool**`. Each of these structures has its own set of rules for definition.
1. `**algorithm**` can accept the input **arguments** and input **data** (only `ROOT` data can be accepted now). The **data** is input as a list written in a text file, **arguments** can be delivered to the `algorithm` by setting in the python script. Besides, the `**algorithm**` can call analysis `tool` to process the data.
2. `**tool**` contains the true analysis algorithm
## Create your own algorithm
Create an algorithm named `ExampleAlg` in `./Analysis`
```bash=
cd Analysis
mkdir ExampleAlg
cd ExampleAlg
mkdir src
mkdir python
mkdir python/ExampleAlg
touch CMakeLists.txt
```
In `python/ExampleAlg/__init__.py`
```python=
import Sniper as sn
sn.loadDll("libExampleAlg.so")
```
In `CMakeLists.txt`
```cmake=
PKG(ExampleAlg
DEPENDS
AnaTool
)
```
An `**algorithm**` is defined as a `c++ class` like
```c++=
// Similar to JUNO Offline, this line will register the algorithm
DECLARE_ALGORITHM(ExampleAlg);
// The *Alg class must inherit from AlgBase
class ExampleAlg : public AlgBase {
public:
// necessary
ExampleAlg(const string&);
virtual ~ExampleAlg();
// initialize, execute, finalize will be called automatically
bool initialize();
bool execute();
bool finalize();
// ...
private:
Params m_paras;
vector<Anatool*> m_tools;
//SPMTMap *m_spmtMap;
// ...
};
// The constructor of AlgBase must be called
ExampleAlg::ExampleAlg(const string &name) : AlgBase(name) {
// ...
}
```
More detail can be found in `./Analysis/CommissioningAlg/`.
## Create your own analsis tool
Similar to `ExampleAlg`, the folders, CMakeLists.txt and __init__.py should be created
A `**tool**` is defined as a `c++ class` too.
```c++=
DECLARE_TOOL(ExampleTool);
class ExampleTool : public AnaTool, public ToolBase {
public:
ExampleTool(const string&);
virtual ~ExampleTool();
bool configure(string, const SPMTMap*);
bool analyze(const Params&);
bool output();
private:
// ...
};
ExampleTool::ExampleTool(const string &name) : ToolBase(name) {}
bool ExampleTool::configure(string outputDir, const SPMTMap *map) {
// initialization
return true;
}
bool ExampleTool::analyze(const Params& paras) {
// output gcu ID
LogInfo << paras.get("GCU_ID") << endl;
return true;
}
bool ExampleTool::output() {
m_canvas->cd();
m_hist->Draw();
m_canvas->SaveAs("dir.pdf");
}
```
More detail can be found in `./Analysis/NoiseAnaTool/`
## How to compile
```bash=
source setup.sh
./build.sh
```
## How to add your own algorithm or tool
If the algorithm named `ExampleAlg` was created in `./Analysis`, the folder's name should be add in the `./Analysis/CMakeLists.txt` as
```cmake=
add_subdirectory(ExampleAlg)
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment