Commit 90a9544a authored by Pawel Sznajder's avatar Pawel Sznajder
Browse files

Merge branch 'new_channels_this_is_it' into 'master'

New channels this is it

See merge request !26
parents 1d2f2f2d 2c16fae7
**2.0**
*Updates:*
* update of architecture of services
* update of DB scheme
* standardisation of names and methods
* scales and xi converter modules now process and full-kinematic dependent
* propagation of kinematics and GPD types to integration routines
* comparison methods updated
*Bug fixes:*
* smart pointers
* minor memory leaks corrected
* problem with calling GPD evolution fixed
* dispersion relation subtraction constant
* memory leak in threads corrected
*Features:*
* new printing
* possibility to run computations with only specific GPD types
* units
* code comments
* possibility to set database server port via properties file
*Physics:*
* addition of new exclusive production channel - TCS
* neural network library added
* DVCS CCF module added based on recent neural network analysis
* unused stuff removed
* new GPD module for a selection of single parton type
------
**1.0**
*Initial version*
\ No newline at end of file
This diff is collapsed.
......@@ -6,7 +6,7 @@ See [partons.cea.fr](http://partons.cea.fr).
## Release
To checkout the released version, use the tag `v1.0` (or subsequent versions) of the branch `release-v1`.
To checkout the released version, use the tag `v1.0` or the branch `release-v1` (replace `v1` for subsequent versions).
## Licensing
......
......@@ -12,6 +12,7 @@ qt:
smfl:
eigen3:
cln:
gsl:
elementary-utils:
numa:
partons:
\ No newline at end of file
partons:
......@@ -14,13 +14,14 @@ environment.configuration.file.path = /path/to/environment_configuration.dat
grid.directory = ../partons/data/grid/
# Validation scheme used by XML parser
xml.schema.file.path = ../partons/data/xmlSchema.xsd
xml.schema.file.path = data/xmlSchema.xsd
# DATABASE #
# Database connection definition (for more information see our tutorial explaining the database usage)
database.production.type = MYSQL
database.production.url = localhost
database.production.port = 3306
database.production.dbname = partons
database.production.user = partons
database.production.passwd = partons
......@@ -39,4 +40,4 @@ computation.nb.processor = 1
# Maximum size of batch for a given type (in one task several batches may be run in separate threads)
gpd.service.batch.size = 10000
ccf.service.batch.size = 1000
observable.service.batch.size = 1000
\ No newline at end of file
observable.service.batch.size = 1000
General information
---------------------------
This folder contains the script called `create_sql_queries_for_experimental_data` that can be used to import experimental data into a MySQL database.
The script uses an input card containing the basic information about the measurement to be inserted and the experimental data itself.
It produces a set of MySQL queries that act on `laboratory`, `collaboration`, `experiment`, `observable_kinematic` and `observable_result` tables of the database `partons`.
For the three first tables, it is checked if the new data do not double the existing entries (in the case of repetition, the existing entries are used).
The script was written for and has been tested under GNU Awk 4.1.3.
Structure of the input card
---------------------------
The input card should follow the following structure (check `CLAS_ALU_asymmetries.dat` for an example):
1) provide measurement information (keep information in quotation marks where indicated):
```
LABORATORY "name"
COLLABORATION "name"
EXPERIMENT "year" "process" "type" "reference"
```
2) provide experimental points (as many as you want):
```
bin_index xB t Q2 Ebeam phi observable_name value stat- stat+ sys- sys+ err_tot
```
If you want to use single quotation marks, you must escape it, _e.g._ `"e\' + p\' + gamma"` instead of `"e' + p' + gamma"`.
Usage
---------------------------
Run the script in the following way:
```py
./create_sql_queries_for_experimental_data your_input_card.dat
```
It will produce a file `output.sql` containing MySQL queries to be inserted into the `partons` database of your MySQL server.
To insert the file do like this:
```py
# in shell, launch the MySQL client
mysql -u your_sql_user -p
```
```sql
/* in MySQL console */
use partons;
source output.sql;
```
If you are using the virtual machine provided by PARTONS team, set MySQL user to `partons` with the password `partons`.
#!/usr/bin/awk -f
BEGIN {
#check if exit without END
exit_now = 0;
#check if first experimental point
first_experimental_point = 0;
#output file name
OUTPUT_FILE="output.sql";
#check if exist
if( system( "[ -f "OUTPUT_FILE" ] " ) == 0 )
{
printf("Output file %s exists\n", OUTPUT_FILE);
printf("Overwrite? [y/N] ")
getline decision < "-"
if(decision == "y"){
printf("") > OUTPUT_FILE;
}
else if(decision == "n"){
exit_now = 1;
exit;
}
else{
exit_now = 1;
exit;
}
}
#variables to check the consistency
LABORATORY_SET = 0;
COLLABORATION_SET = 0;
EXPERIMENT_SET = 0;
#variables to print the status
LABORATORY_NAME = "";
COLLABORATION_NAME = "";
EXPERIMENT_YEAR = "";
EXPERIMENT_PROCESS = "";
EXPERIMENT_TYPE = "";
EXPERIMENT_REFERENCE = "";
}
{
#skip empty lines
if(match($0, /^$/) == 1){
next;
}
#skip lines containing white characters
if(match($0, /^ *$/) != 0){
next;
}
#skip comments
if(index($0, "#") == 1){
next;
}
#laboratory name
if($1 == "LABORATORY"){
split($0, str_array, "\"");
LABORATORY_NAME = str_array[2];
printf("INSERT INTO laboratory(laboratory_name) SELECT * FROM (SELECT '%s') AS tmp WHERE NOT EXISTS (SELECT * FROM laboratory WHERE laboratory_name = '%s') LIMIT 1;\n", LABORATORY_NAME, LABORATORY_NAME) >> OUTPUT_FILE;
printf("SELECT laboratory_id INTO @last_laboratory_id FROM laboratory WHERE laboratory_name = '%s';\n", LABORATORY_NAME) >> OUTPUT_FILE;
LABORATORY_SET = 1;
}
#collaboration name
else if($1 == "COLLABORATION"){
if(LABORATORY_SET == 0){
print("Error: Laboratory name should be set prior collaboration name");
exit_now = 1;
exit;
}
split($0, str_array, "\"");
COLLABORATION_NAME = str_array[2];
printf("INSERT INTO collaboration(collaboration_name, laboratory_id) SELECT * FROM (SELECT '%s', @last_laboratory_id) AS tmp WHERE NOT EXISTS (SELECT * FROM collaboration WHERE (collaboration_name = '%s' AND laboratory_id = @last_laboratory_id)) LIMIT 1;\n", COLLABORATION_NAME, COLLABORATION_NAME) >> OUTPUT_FILE;
printf("SELECT collaboration_id INTO @last_collaboration_id FROM collaboration WHERE (collaboration_name = '%s' AND laboratory_id = @last_laboratory_id);\n", COLLABORATION_NAME) >> OUTPUT_FILE;
COLLABORATION_SET = 1;
}
#experiment
else if($1 == "EXPERIMENT"){
if(COLLABORATION_SET == 0){
print("Error: Collaboration name should be set prior experiment information");
exit_now = 1;
exit;
}
split($0, str_array, "\"");
EXPERIMENT_YEAR = str_array[2];
EXPERIMENT_PROCESS = str_array[4];
EXPERIMENT_TYPE = str_array[6];
EXPERIMENT_REFERENCE = str_array[8];
printf("INSERT INTO experiment(experiment_year, experiment_process, experiment_type, experiment_reference, collaboration_id) SELECT * FROM (SELECT '%s', '%s', '%s', '%s', @last_collaboration_id) AS tmp WHERE NOT EXISTS (SELECT * FROM experiment WHERE experiment_year = '%s' AND experiment_process = '%s' AND experiment_type = '%s' AND experiment_reference = '%s' AND collaboration_id = @last_collaboration_id) LIMIT 1;\n", EXPERIMENT_YEAR, EXPERIMENT_PROCESS, EXPERIMENT_TYPE, EXPERIMENT_REFERENCE, EXPERIMENT_YEAR, EXPERIMENT_PROCESS, EXPERIMENT_TYPE, EXPERIMENT_REFERENCE) >> OUTPUT_FILE;
printf("SELECT experiment_id INTO @last_experiment_id FROM experiment WHERE (experiment_year = '%s' AND experiment_process = '%s' AND experiment_type = '%s' AND experiment_reference = '%s' AND collaboration_id = @last_collaboration_id);\n", EXPERIMENT_YEAR, EXPERIMENT_PROCESS, EXPERIMENT_TYPE, EXPERIMENT_REFERENCE) >> OUTPUT_FILE;
EXPERIMENT_SET = 1;
}
#points
else{
if(EXPERIMENT_SET == 0){
print("Error: Experiment information should be set prior experiment data");
exit_now = 1;
exit;
}
if($9 <= 0. || $10 <= 0.){
print("Error: One of statistic uncertainties <= 0");
exit_now = 1;
exit;
}
if($11 < 0. || $12 < 0.){
print("Error: One of systematic uncertainties < 0");
exit_now = 1;
exit;
}
printf("INSERT INTO observable_kinematic (bin_id,xB,t,Q2,E,phi,experiment_id) VALUES(%d, %.5f, %.5f, %.5f, %.5f, %.5f, @last_experiment_id);\n", $1, $2, $3, $4, $5, $6) >> OUTPUT_FILE;
printf("SET @last_observable_kinematic_id = LAST_INSERT_ID();\n") >> OUTPUT_FILE;
printf("INSERT INTO observable_result(observable_name,observable_value,stat_error_lb,stat_error_ub,syst_error_lb,syst_error_ub,total_error,observable_kinematic_id) VALUES ('%s', %.5f, %.5f, %.5f, %.5f, %.5f, %.5f, @last_observable_kinematic_id);\n", $7, $8, $9, $10, $11, $12, $13) >> OUTPUT_FILE;
if(first_experimental_point == 0){
printf("SET @first_observable_result_id = LAST_INSERT_ID();\n") >> OUTPUT_FILE;
first_experimental_point = 1;
}
}
}
END {
#check if exit without END
if(exit_now == 1) exit;
#print id of first and last inerted points in MySQL
printf("SET @last_observable_result_id = LAST_INSERT_ID();\n") >> OUTPUT_FILE;
printf("SELECT @first_observable_result_id,@last_observable_result_id;\n") >> OUTPUT_FILE;
#print status
printf("Recognized names:\n");
printf("\tlaboratory name: %s\n", LABORATORY_NAME);
printf("\tcollaboration name: %s\n", COLLABORATION_NAME);
printf("\texperiment year: %s\n", EXPERIMENT_YEAR);
printf("\texperiment process: %s\n", EXPERIMENT_PROCESS);
printf("\texperiment type: %s\n", EXPERIMENT_TYPE);
printf("\texperiment reference: %s\n", EXPERIMENT_REFERENCE);
}
......@@ -34,16 +34,15 @@ quark_flavor_id INTEGER NOT NULL PRIMARY KEY,
quark_flavor_short_name VARCHAR(10),
quark_flavor_long_name VARCHAR(255));
CREATE TABLE observable_type (
observable_type_id INTEGER NOT NULL PRIMARY KEY,
observable_type_short_name VARCHAR(10),
observable_type_long_name VARCHAR(255));
CREATE TABLE observable_channel (
observable_channel_id INTEGER NOT NULL PRIMARY KEY,
observable_channel_short_name VARCHAR(10),
observable_channel_long_name VARCHAR(255));
CREATE TABLE physical_unit_type (
physical_unit_type_id INTEGER NOT NULL PRIMARY KEY,
physical_unit_type_short_name VARCHAR(10),
physical_unit_type_long_name VARCHAR(255));
CREATE VIEW result_info_view AS
SELECT c.computation_id, c.computation_date, sc.scenario_task_index_number, ec.env_conf_hash_sum, s.scenario_hash_sum
......@@ -53,7 +52,7 @@ INNER JOIN scenario_computation sc ON sc.computation_id = c.computation_id
INNER JOIN scenario s ON sc.scenario_id = s.scenario_id
ORDER BY c.computation_id;
/* === gpd_type === */
INSERT INTO gpd_type (gpd_type_id, gpd_type_short_name, gpd_type_long_name)
VALUES ('0', 'UNDEFINED', 'UNDEFINED');
......@@ -73,7 +72,7 @@ VALUES ('4', 'Ht', 'Ht');
INSERT INTO gpd_type (gpd_type_id, gpd_type_short_name, gpd_type_long_name)
VALUES ('5', 'Et', 'Et');
/* === quark_flavor === */
INSERT INTO quark_flavor (quark_flavor_id, quark_flavor_short_name, quark_flavor_long_name)
VALUES ('0', 'UNDEFINED', 'UNDEFINED');
......@@ -96,18 +95,7 @@ VALUES ('5', 'b', 'BOTTOM');
INSERT INTO quark_flavor (quark_flavor_id, quark_flavor_short_name, quark_flavor_long_name)
VALUES ('6', 't', 'TOP');
INSERT INTO observable_type (observable_type_id, observable_type_short_name, observable_type_long_name)
VALUES ('0', 'UNDEFINED', 'UNDEFINED');
INSERT INTO observable_type (observable_type_id, observable_type_short_name, observable_type_long_name)
VALUES ('1', 'PHI', 'PHI');
INSERT INTO observable_type (observable_type_id, observable_type_short_name, observable_type_long_name)
VALUES ('2', 'FOURIER', 'FOURIER');
/* === observable_channel === */
INSERT INTO observable_channel (observable_channel_id, observable_channel_short_name, observable_channel_long_name)
VALUES ('0', 'UNDEFINED', 'UNDEFINED');
......@@ -121,5 +109,135 @@ VALUES ('2', 'DVMP', 'DVMP');
INSERT INTO observable_channel (observable_channel_id, observable_channel_short_name, observable_channel_long_name)
VALUES ('3', 'TCS', 'TCS');
/* === physical_unit === */
/* undefined */
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('0', 'UNDEFINED', 'UNDEFINED');
/* none */
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('1', 'none', 'NONE');
/* energy, mass or momentum */
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('2', 'eV', 'EV');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('3', 'keV', 'KEV');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('4', 'MeV', 'MEV');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('5', 'GeV', 'GEV');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('6', 'TeV', 'TEV');
/* energy, mass or momentum squared */
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('7', 'eV2', 'EV2');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('8', 'keV2', 'KEV2');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('9', 'MeV2', 'MEV2');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('10', 'GeV2', 'GEV2');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('11', 'TeV2', 'TEV2');
/* distance or time*/
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('12', 'eV-1', 'EVm1');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('13', 'keV-1', 'KEVm1');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('14', 'MeV-1', 'MEVm1');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('15', 'GeV-1', 'GEVm1');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('16', 'TeV-1', 'TEVm1');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('17', 'fm', 'FM');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('18', 'pm', 'PM');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('19', 'nm', 'NM');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('20', 'um', 'UM');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('21', 'mm', 'MM');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('22', 'm', 'M');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('23', 'fs', 'FS');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('24', 'ps', 'PS');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('25', 'ns', 'NS');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('26', 'us', 'US');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('27', 'ms', 'MS');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('28', 's', 'S');
/* cross section*/
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('29', 'GeVm2', 'GEVm2');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('30', 'fm2', 'FM2');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('31', 'fb', 'FB');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('32', 'pb', 'PB');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('33', 'nb', 'NB');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('34', 'ub', 'UB');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('35', 'mb', 'MB');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('36', 'b', 'B');
/* angle */
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('37', 'deg', 'DEG');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('38', 'rad', 'RAD');
INSERT INTO physical_unit_type (physical_unit_type_id, physical_unit_type_short_name, physical_unit_type_long_name)
VALUES ('39', 'mrad', 'MRAD');
/* MYSQL syntax */
CREATE TABLE ccf_kinematic (
ccf_kinematic_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
/* kinematics */
CREATE TABLE dvcs_ccf_kinematic (
dvcs_ccf_kinematic_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
xi DOUBLE NOT NULL,
xi_unit INTEGER NOT NULL,
t DOUBLE NOT NULL,
t_unit INTEGER NOT NULL,
Q2 DOUBLE NOT NULL,
Q2_unit INTEGER NOT NULL,
MuF2 DOUBLE NOT NULL,
MuF2_unit INTEGER NOT NULL,
MuR2 DOUBLE NOT NULL,
MuR2_unit INTEGER NOT NULL,
hash_sum VARCHAR(40) NOT NULL);
CREATE INDEX ccf_kinematic_index ON ccf_kinematic (hash_sum);
CREATE INDEX dvcs_ccf_kinematic_index ON dvcs_ccf_kinematic (hash_sum);
CREATE TABLE tcs_ccf_kinematic (
tcs_ccf_kinematic_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
xi DOUBLE NOT NULL,
xi_unit INTEGER NOT NULL,
t DOUBLE NOT NULL,
t_unit INTEGER NOT NULL,
Q2Prim DOUBLE NOT NULL,
Q2Prim_unit INTEGER NOT NULL,
MuF2 DOUBLE NOT NULL,
MuF2_unit INTEGER NOT NULL,
MuR2 DOUBLE NOT NULL,
MuR2_unit INTEGER NOT NULL,
hash_sum VARCHAR(40) NOT NULL);
CREATE INDEX tcs_ccf_kinematic_index ON tcs_ccf_kinematic (hash_sum);
/* result */
CREATE TABLE ccf_result (
ccf_result_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
......@@ -18,37 +42,76 @@ ccf_kinematic_id INTEGER NOT NULL,
computation_id INTEGER NOT NULL);
CREATE INDEX ccf_result_index ON ccf_result (computation_id);
CREATE TABLE ccf_result_complex (
ccf_result_complex_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
CREATE TABLE dvcs_ccf_result (
dvcs_ccf_result_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
gpd_type_id INTEGER NOT NULL,
real_part DOUBLE NOT NULL,
img_part DOUBLE NOT NULL,
ccf_result_id INTEGER NOT NULL);
CREATE INDEX ccf_result_complex_index ON ccf_result_complex (ccf_result_id);
CREATE INDEX dvcs_ccf_result_index ON dvcs_ccf_result (ccf_result_id);
CREATE TABLE tcs_ccf_result (
tcs_ccf_result_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
gpd_type_id INTEGER NOT NULL,
real_part DOUBLE NOT NULL,
img_part DOUBLE NOT NULL,
ccf_result_id INTEGER NOT NULL);
CREATE INDEX tcs_ccf_result_index ON tcs_ccf_result (ccf_result_id);
/* view */
CREATE VIEW dvcs_ccf_kinematic_view AS
SELECT ccfk.dvcs_ccf_kinematic_id, ccfk.xi, ccfk.xi_unit, ccfk.t, ccfk.t_unit, ccfk.Q2, ccfk.Q2_unit, ccfk.MuF2, ccfk.MuF2_unit, ccfk.MuR2, ccfk.MuR2_unit, ccfk.hash_sum
FROM dvcs_ccf_kinematic ccfk
ORDER BY ccfk.dvcs_ccf_kinematic_id;
CREATE VIEW tcs_ccf_kinematic_view AS
SELECT ccfk.tcs_ccf_kinematic_id, ccfk.xi, ccfk.xi_unit, ccfk.t, ccfk.t_unit, ccfk.Q2Prim, ccfk.Q2Prim_unit, ccfk.MuF2, ccfk.MuF2_unit, ccfk.MuR2, ccfk.MuR2_unit, ccfk.hash_sum
FROM tcs_ccf_kinematic ccfk
ORDER BY ccfk.tcs_ccf_kinematic_id;
CREATE VIEW dvcs_ccf_result_view AS
SELECT ccfr.ccf_result_id, ccfr.computation_module_name, ccfr.channel_id, ccfrc.gpd_type_id, ccfrc.real_part, ccfrc.img_part, ccfr.computation_id, ccfr.ccf_kinematic_id
FROM ccf_result ccfr
INNER JOIN dvcs_ccf_result ccfrc ON ccfr.ccf_result_id = ccfrc.ccf_result_id
ORDER BY ccfr.ccf_result_id;
CREATE VIEW ccf_result_view AS
SELECT ccfr.ccf_result_id, ccfr.computation_module_name, ccfr.channel_id, ccfrc.gpd_type_id, ccfrc.real_part, ccfrc.img_part, c.computation_id
CREATE VIEW tcs_ccf_result_view AS
SELECT ccfr.ccf_result_id, ccfr.computation_module_name, ccfr.channel_id, ccfrc.gpd_type_id, ccfrc.real_part, ccfrc.img_part, ccfr.computation_id, ccfr.ccf_kinematic_id
FROM ccf_result ccfr
INNER JOIN computation c ON ccfr.computation_id = c.computation_id