[[TOC]] This is an overview of the most important tables and some important remarks. Links are given to the comments and type of each column. == !RunType == [https://fact-project.org/run_db/db/printinfo.php?db=factdata&fSortBy=ColumnName+&t=RunType factdata/RunType] == Source == [https://fact-project.org/run_db/db/printinfo.php?db=factdata&fSortBy=ColumnName+&t=Source factdata/Source] == !RunInfo == [https://fact-project.org/run_db/db/printinfo.php?db=factdata&fSortBy=ColumnName+&t=RunInfo factdata/RunInfo] The !RunInfo table is the most important one. It stored run-wise information. In a first step, a lot of data is directly extracted from the header of the ''raw'' run-files. Later, values are calculated from other sources, mainly slow-control file (auxiliary data: ''aux'') and filled into the table as well. === Calculating the on-time === The best estimate for the on-time of the data acquisition is the difference between the first and last event (`fRunStop-fRunStart`). It should be precise with roughly the data rate, so better than 1s. The on-time calculated by the FTM is only precise with the FTM rate which is a few seconds, but the FTM provides accurate information on the relative on-time w.r.t. to the total time. This information can be used to calculate the on-time in seconds of a run as follows: {{{#!sql TIME_TO_SEC(TIMEDIFF(fRunStop,fRunStart))*fEffectiveOn }}} For a 1min run, the accuracy should be in the order of 1s/60s (<2%) and for a 5min run 1s/300s (<0.4%). These are upper limits, as in reality, the rate of events is usually higher than 1Hz and the timing of the Ethernet connection should be at least in the order of the average time-difference between two events as well (although this is not guaranteed). === Selection by zenith angle === Ideally, if you select events from a certain zenith angle range (e.g. 10°-50°), you don't want events outside of that range. So, ideally the lower bound is cut on `fZenithAngleMin` and the upper bound on `fZenithAngleMax` like {{{#!sql fZenithAngleMin>10 AND fZenithAngleMax<50 }}} === Threshold setting === To select data by threshold, the ideal values is usually `fThresholdMinSet`. It reflects the value obtained as minimum threshold during a run from the currents at its beginning. While some trigger patches could have a significantly higher threshold during a run (which affects the mean value over all patches) the !MinSet value reflects usually the majority of the patch thresholds and should be similar (or in most cases identical) to the average (over all events) median (over the camera). == Images == {{{#!div style="background: #d88; border: 3px ridge" ''' Some important remark about access speed! ''' The table is intentionally laid out as compressed InnoDB table. InnoDB has the advantage that the index and the row the index is pointing to is basically the same. That means that ones a row has been selected, there is no need for the disc to read the data from somewhere else anymore. Although, the access itself is not important for a SSD, the time for processing and decompression is. In particular compression is done in blocks so that more than a single index has to be read anyhow. Translated to data access that means that if you access the data by means of the index, access is optimized and fast. That also means that if you do not access your data (e.g. you just want to count entries in your index) it can be annoyingly fast because all the data has to be read from the drive. }}} --- not yet available --- == Position == --- not yet available --- == AnalysisResultsRunISDC == [https://fact-project.org/run_db/db/printinfo.php?db=factdata&fSortBy=ColumnName+&t=AnalysisResultsRunISDC factdata/AnalysisResultsRunISDC] The number of background events (`fNumBgEvts`) is already divided by the number of wobble regions (5). To calculate the significance, you can simply do `LiMa(fNumSigEvts, fNumBgEvts)`. To calculate the statistical error, use `ExcErr(fNumSigEvts, fNumBgEvts)`. Both functions assume that the number of background events given is the average number and that the scale factor is 5. == Plotting == [https://www.fact-project.org/dch/db_explorer.php?t=ISDC Database Explorer] == Status Tables == There are a few status tables which give status information on the on-going processing. They usually contain an index (one or more columns, e.g. fNight/fRunID), the columns '''fStartTime''', '''fStopTime''' and '''fReturnCode'''. The meaning is the following: ||='''Status''' =||= '''fStartTime''' =||= '''fStopTime''' =||= '''fReturnCode''' =||= '''Comment''' =|| ||=Waiting =|| NULL || NULL || [NULL] || Processing is supposed to be done (just not yet started or pre-conditions are still missing) || ||=Running =|| NOT NULL || NULL || [NULL] || Processing is supposed to be done and running already (this includes ''Scheduled'') || ||=Scheduled =|| -''marker''- || NULL || [NULL] || Pre-conditions fulfilled, scheduled for processing by job-manager (only callisto and star) || ||=Success =|| > 2000 || > 2000 || NULL || Processing was successfully finished for this index || ||=Failed =|| > 2000 || > 2000 || NOT NULL || Processing failed || ||=Blocked =|| < 2000 || < 2000 || [NULL] || Processing is not supposed to run for this index || The marker '''-''marker''-''' is the special datetime `1971-01-01 01:01:01`. A corresponding query to get an overview of all index entries in a status table '''!StatusTable''' could look like the following {{{#!sql SELECT COUNT(IF( ISNULL(fStartTime) AND ISNULL(fStopTime), 1, NULL)) AS 'WAITING', COUNT(IF(NOT ISNULL(fStartTime) AND ISNULL(fStopTime), 1, NULL)) AS 'RUNNING', COUNT(IF(fStartTime='1971-01-01 01:01:01' AND ISNULL(fStopTime), 1, NULL)) AS 'SCHEDULED', COUNT(IF(fStartTime>'2000-01-01 00:00:00' AND fStopTime>'2000-01-01 00:00:00' AND ISNULL(fReturnCode), 1, NULL)) AS 'SUCCESS', COUNT(IF(fStartTime>'2000-01-01 00:00:00' AND fStopTime>'2000-01-01 00:00:00' AND NOT ISNULL(fReturnCode), 1, NULL)) AS 'FAILED', COUNT(IF(fStartTime<'2000-01-01 00:00:00' AND fStopTime<'2000-01-01 00:00:00', 1, NULL)) AS 'BLOCKED' FROM StatusTable }}} Here is a query to give a full status overview (only data runs are included) {{{#!Spoiler {{{#!sql SELECT 'RunInfo' AS 'Type', COUNT(IF(fRunTypeKEY!=1, 1, NULL)) AS 'BLOCKED', 0 AS 'WAITING', 0 AS 'RUNNING', 0 AS 'SCHEDULED', COUNT(IF(fRunTypeKEY=1, 1, NULL)) AS 'SUCCESS', 0 AS 'FAILED' FROM RunInfo UNION ALL SELECT 'Callisto', COUNT(IF(fStartTime<'1972-01-01 00:00:00' AND fStopTime<'1972-01-01 00:00:00', 1, NULL)), COUNT(IF( ISNULL(fStartTime) AND ISNULL(fStopTime), 1, NULL)), COUNT(IF(NOT ISNULL(fStartTime) AND ISNULL(fStopTime), 1, NULL)), COUNT(IF(fStartTime='1971-01-01 01:01:01' AND ISNULL(fStopTime), 1, NULL)), COUNT(IF(fStartTime>'1972-01-01 00:00:00' AND fStopTime>'1972-01-01 00:00:00' AND ISNULL(fReturnCode), 1, NULL)), COUNT(IF(fStartTime>'1972-01-01 00:00:00' AND fStopTime>'1972-01-01 00:00:00' AND NOT ISNULL(fReturnCode), 1, NULL)) FROM CallistoStatus LEFT JOIN RunInfo USING (fNight, fSequenceID) WHERE fRunTypeKey=1 UNION ALL SELECT 'Star', COUNT(IF(fStartTime<'1972-01-01 00:00:00' AND fStopTime<'1972-01-01 00:00:00', 1, NULL)), COUNT(IF( ISNULL(fStartTime) AND ISNULL(fStopTime), 1, NULL)), COUNT(IF(NOT ISNULL(fStartTime) AND ISNULL(fStopTime), 1, NULL)), COUNT(IF(fStartTime='1971-01-01 01:01:01' AND ISNULL(fStopTime), 1, NULL)), COUNT(IF(fStartTime>'1972-01-01 00:00:00' AND fStopTime>'1972-01-01 00:00:00' AND ISNULL(fReturnCode), 1, NULL)), COUNT(IF(fStartTime>'1972-01-01 00:00:00' AND fStopTime>'1972-01-01 00:00:00' AND NOT ISNULL(fReturnCode), 1, NULL)) FROM StarStatus LEFT JOIN RunInfo USING (fNight, fSequenceID) WHERE fRunTypeKey=1 UNION ALL SELECT 'Images', COUNT(IF(fStartTime<'1972-01-01 00:00:00' AND fStopTime<'1972-01-01 00:00:00', 1, NULL)), COUNT(IF( ISNULL(fStartTime) AND ISNULL(fStopTime), 1, NULL)), COUNT(IF(NOT ISNULL(fStartTime) AND ISNULL(fStopTime), 1, NULL)), COUNT(IF(fStartTime='1971-01-01 01:01:01' AND ISNULL(fStopTime), 1, NULL)), COUNT(IF(fStartTime>'1972-01-01 00:00:00' AND fStopTime>'1972-01-01 00:00:00' AND ISNULL(fReturnCode), 1, NULL)), COUNT(IF(fStartTime>'1972-01-01 00:00:00' AND fStopTime>'1972-01-01 00:00:00' AND NOT ISNULL(fReturnCode), 1, NULL)) FROM StarEventsFilledStatus LEFT JOIN RunInfo USING (fNight, fRunID) WHERE fRunTypeKey=1 UNION ALL SELECT 'Position', COUNT(IF(fStartTime<'1972-01-01 00:00:00' AND fStopTime<'1972-01-01 00:00:00', 1, NULL)), COUNT(IF( ISNULL(fStartTime) AND ISNULL(fStopTime), 1, NULL)), COUNT(IF(NOT ISNULL(fStartTime) AND ISNULL(fStopTime), 1, NULL)), COUNT(IF(fStartTime='1971-01-01 01:01:01' AND ISNULL(fStopTime), 1, NULL)), COUNT(IF(fStartTime>'1972-01-01 00:00:00' AND fStopTime>'1972-01-01 00:00:00' AND ISNULL(fReturnCode), 1, NULL)), COUNT(IF(fStartTime>'1972-01-01 00:00:00' AND fStopTime>'1972-01-01 00:00:00' AND NOT ISNULL(fReturnCode), 1, NULL)) FROM CalcSourceStatus LEFT JOIN RunInfo USING (fNight, fRunID) WHERE fRunTypeKey=1 }}} }}}