Skip to content
This repository was archived by the owner on Jan 14, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@

"LICENSE": true,
"node_modules": true,
}
},
"cmake.configureOnOpen": false
}
143 changes: 143 additions & 0 deletions app/lib/database/models/run.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
/**
* @license
* Copyright CERN and copyright holders of ALICE O2. This software is
* distributed under the terms of the GNU General Public License v3 (GPL
* Version 3), copied verbatim in the file "COPYING".
*
* See http://alice-o2.web.cern.ch/license for full licensing information.
*
* In applying this license CERN does not waive the privileges and immunities
* granted to it by virtue of its status as an Intergovernmental Organization
* or submit itself to any jurisdiction.
*/

const Sequelize = require('sequelize');
const { RUN_QUALITIES, RunQualities } = require('../../domain/enums/RunQualities.js');

module.exports = (sequelize) => {
const Run = sqi.define('Run', {
runNumber: {
type: Sequelize.INTEGER,
primaryKey: true,
},
timeO2Start: {
type: Sequelize.DATE,
},
timeO2End: {
type: Sequelize.DATE,
},
timeTrgStart: {
type: Sequelize.DATE,
},
timeTrgEnd: {
type: Sequelize.DATE,
},
startTime: {
type: Sequelize.VIRTUAL,
get() {
const timeTrgStart = this.getDataValue('timeTrgStart');
const timeO2Start = this.getDataValue('timeO2Start');
const runStartString = timeTrgStart ?? timeO2Start;
return runStartString ? new Date(runStartString).getTime() : null;
},
},
endTime: {
type: Sequelize.VIRTUAL,
get() {
if (this.getDataValue('start') === null) {
return null;
}
const timeTrgEnd = this.getDataValue('timeTrgEnd');
const timeO2End = this.getDataValue('timeO2End');
const runEndString = timeTrgEnd ?? timeO2End;
return (runEndString ? new Date(runEndString) : new Date()).getTime();
},
},
runDuration: {
type: Sequelize.VIRTUAL,
get() {
const { startTime, endTime } = this;
if (!startTime) {
return null;
}
return endTime - startTime;
},
},
lhcBeamEnergy: {
type: Sequelize.FLOAT,
},
lhcBeamMode: {
type: Sequelize.CHAR(32),
},
aliceL3Current: {
type: Sequelize.FLOAT,
},
aliceDipoleCurrent: {
type: Sequelize.FLOAT,
},
aliceL3Polarity: {
type: Sequelize.CHAR(32),
},
aliceDipolePolarity: {
type: Sequelize.CHAR(32),
},
l3CurrentVal: {
type: Sequelize.VIRTUAL,
get() {
const valFN = this.getDataValue('aliceL3Current');
const polFN = this.getDataValue('aliceL3Polarity');
if (valFN && polFN) {
if (polFN == 'NEGATIVE') {
return - valFN;
} else if (polFN == 'POSITIVE') {
return valFN;
} else {
throw `incorrect polarity type: '${polFN}' for run: ${run.run_number}`;
}
} else {
return null;
}
}
},
dipoleCurrentVal: {
type: Sequelize.VIRTUAL,
get() {
const valFN = this.getDataValue('aliceDipoleCurrent');
const polFN = this.getDataValue('aliceDipolePolarity');
if (valFN && polFN) {
if (polFN == 'NEGATIVE') {
return - valFN;
} else if (polFN == 'POSITIVE') {
return valFN;
} else {
throw `incorrect polarity type: '${polFN}' for run: ${run.run_number}`;
}
} else {
return null;
}
}
},

// lhcPeriod
// pdpBeamType
});

Run.associate = (models) => {
Run.belongsTo(models.Period);
Run.belongsToMany(models.Detector, {
through: 'Runs_Detectors',
foreignKey: 'runNumber',
});
Run.belongsToMany(models.DataPasses, {
through: 'DataPasses_Runs',
foreignKey: 'runNumber',
});
Run.belongsToMany(models.SimulationPasses, {
through: 'SimulationPasses_Runs',
foreignKey: 'runNumber',
});
Run.hasMany(models.QualityControlFlags)
};

return Run;
};
42 changes: 23 additions & 19 deletions app/lib/database/views/flags_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,29 +13,33 @@
*/

const flags_view = (query) => `
SELECT
--qcf.id,
qcf.start AS flagStart,
qcf.end AS flagEnd,
ftd.flag,
qcf.comment,
dpr.data_pass_id,
ds.name
qcf.id,
qcf.time_start,
qcf.time_end,
ftd.flag,
qcf.comment,
r.run_number,
ds.name,
array_agg(v.verified_by) as by,
array_agg(v.verification_time) as ver_time


FROM quality_control_flags AS qcf
INNER JOIN data_passes_runs as dpr
ON dpr.id = qcf.pass_run_id
INNER JOIN runs_detectors as rd
ON qcf.run_detector_id = rd.id
INNER JOIN data_passes as dp
ON dp.id = qcf.data_pass_id
INNER JOIN runs as r
ON qcf.run_number = r.run_number
INNER JOIN detectors_subsystems AS ds
ON ds.id = rd.detector_id
ON ds.id = qcf.detector_id
INNER JOIN flags_types_dictionary as ftd
ON ftd.id = qcf.flag_type_id

WHERE rd.run_id = ${query.index}

LEFT OUTER JOIN verifications as v
ON qcf.id = v.qcf_id

WHERE r.run_number in (${query.run_numbers.join(",")}) AND
dp.name = ${query.data_pass_id}
GROUP BY qcf.id, qcf.time_start, qcf.time_end, ftd.flag, qcf.comment, r.run_number, ds.name

`;

module.exports = () => {
return 'NOT IMPLEMENTED PROPERLY'
};
module.exports = flags_view;
58 changes: 29 additions & 29 deletions app/lib/database/views/runs_views.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,24 @@


const queryForRunsFields = `
--p.name,
r.run_number,
r.time_start,
r.time_end,
r.time_trg_start,
r.time_trg_end,
get_center_of_mass_energy(r.energy_per_beam, p.beam_type_id) as center_of_mass_energy,
r.ir,
r.filling_scheme,
r.triggers_conf,
r.fill_number,
r.mu,
r.l3_current,
r.dipole_current,
${run_detectors_field_in_sql_query}
--p.name,
r.run_number,
r.time_start,
r.time_end,
r.time_trg_start,
r.time_trg_end,
get_center_of_mass_energy(r.energy_per_beam, p.beam_type_id) as center_of_mass_energy,
r.ir,
r.filling_scheme,
r.triggers_conf,
r.fill_number,
r.mu,
r.l3_current,
r.dipole_current
`;


const runs_per_period_view = (query) => `
const runs_per_period_view = (query) => `
SELECT
${queryForRunsFields}
FROM runs AS r
Expand All @@ -50,19 +49,20 @@ const queryForRunsFields = `
ORDER BY r.run_number DESC
`;

const runs_per_data_pass_view = (query) => `
SELECT
${queryForRunsFields}
FROM data_passes AS dp
INNER JOIN data_passes_runs AS dpr
ON dp.id=dpr.data_pass_id
INNER JOIN runs AS r
ON r.run_number=dpr.run_number
INNER JOIN periods as p
ON r.period_id = p.id
WHERE dp.name = '${query.index}'
ORDER BY r.run_number DESC
`;
const runs_per_data_pass_view = (query) => `
SELECT
${queryForRunsFields},
${run_detectors_field_in_sql_query}
FROM data_passes AS dp
INNER JOIN data_passes_runs AS dpr
ON dp.id=dpr.data_pass_id
INNER JOIN runs AS r
ON r.run_number=dpr.run_number
INNER JOIN periods as p
ON r.period_id = p.id
WHERE dp.name = '${query.index}'
ORDER BY r.run_number DESC
`;


module.exports = {runs_per_period_view, runs_per_data_pass_view};
Loading