Skip to content

Repository files navigation

discos2class

discos2class command line tool used to convert DISCOS spectroscopy files acquired with XARCOS into CLASS native format.

##TOC

WARNING: this project is in a very early beta version and it is not guaranteed to be working at all, neither producing correct results

##Usage

The tool operates on data directories of FITS files saved by the DISCOS system, where each directory matches a schedule SCAN

###Command line help

The command line help explains which options are available and gives hints about usage:

$ discos2class --help
usage: discos2class [-h] [-d] [-o OUTPUT_DIR] [-c DUTY_CYCLE] [-s] [--version]
source_dir [source_dir ...]
Convert discos SCANs into class files
positional arguments:
source_dir directory path(s) to scans
optional arguments:
-h, --help show this help message and exit
-d enable debug messages
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
output directory name
-c DUTY_CYCLE, --duty-cycle DUTY_CYCLE
scan duty cycle as "<on>:<off>:<cal>", elements must
be all presente but can be zeroes.
-s, --skip-calibration
skip kelvin calibration and computes only ((on - off) / off) ignoring CAL signal --version print version information and exit

As you can see, the program elaborates scans found in one ore more source directories and saves CLASS-converted spectra in corresponding directories, created in an output directory folder.

###An example session

$ ls data/xarcos_test_data_set/20160331-104808-7-15-w3oh/
20160331-104808-7-15-w3oh_002_001.fits 20160331-105255-7-15-w3oh_002_009.fits 20160331-105749-7-15-w3oh_002_017.fits
20160331-104844-7-15-w3oh_002_002.fits 20160331-105331-7-15-w3oh_002_010.fits 20160331-105825-7-15-w3oh_002_018.fits
20160331-104920-7-15-w3oh_002_003.fits 20160331-105414-7-15-w3oh_002_011.fits 20160331-105900-7-15-w3oh_002_019.fits
20160331-104956-7-15-w3oh_002_004.fits 20160331-105450-7-15-w3oh_002_012.fits 20160331-105936-7-15-w3oh_002_020.fits
20160331-105032-7-15-w3oh_002_005.fits 20160331-105525-7-15-w3oh_002_013.fits 20160331-110012-7-15-w3oh_002_021.fits
20160331-105107-7-15-w3oh_002_006.fits 20160331-105601-7-15-w3oh_002_014.fits summary.fits
20160331-105143-7-15-w3oh_002_007.fits 20160331-105637-7-15-w3oh_002_015.fits
20160331-105219-7-15-w3oh_002_008.fits 20160331-105713-7-15-w3oh_002_016.fits

As you can see the source directory contains a whole scan including the summary.fits file. In this case the w3oh source has been observed using a scan configuration of 10 spectra on-source, 10 spectra off-source and 1 spectrum off-source with calibration mark switched on (duty cycle 10-10-1), for a total of 21 subscans.

$ discos2class -o classdata/xarcos_test/ -c 10:10:1 data/xarcos_test_data_set/20160331-104808-7-15-w3oh
E-OPEN, Open error file classdata/xarcos_test/2016091_w3oh.d2c
E-OPEN, No such file or directory (O/S errno # 2)
I-FILE, File is version 2 (record length: 1024 words)
I-NEWPUT, classdata/xarcos_test/2016091_w3oh.d2c initialized
INFO: open new file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c

We have invoked the discos2class command specifying the scan configuration (10 on 10 off 1 cal) and the input and output data directories, from the command output we can see which file have been created and succesively updated with all observations.

In the destination directory a new directory is created. It is named exactly as specified in the command line option:

$ ls classdata/xarcos_test/
2016091_w3oh.d2c

Inside the directory a new CLASS file is created for each different source per day found in the original files.

Each file contains the result of the integration and calibration of all the observation data. Different sections and polarizations are treated as different line names in different observations listed in the file.

You can now use CLASS software to inspect your data:

$ cd classdata/xarcos_test $
$ class
...
LAS> file in 2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-INPUT, 2016091_w3oh.d2c successfully opened
LAS> find /all
I-FIND, 8 observations found
LAS> list
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
1;1 W3OH SEC0-RCP MEDICINA +0.0 +0.0 Eq 2 1
2;1 W3OH SEC0-LCP MEDICINA +0.0 +0.0 Eq 2 1
3;1 W3OH SEC1-RCP MEDICINA +0.0 +0.0 Eq 2 1
4;1 W3OH SEC1-LCP MEDICINA +0.0 +0.0 Eq 2 1
5;1 W3OH SEC2-RCP MEDICINA +0.0 +0.0 Eq 2 1
6;1 W3OH SEC2-LCP MEDICINA +0.0 +0.0 Eq 2 1
7;1 W3OH SEC3-RCP MEDICINA +0.0 +0.0 Eq 2 1
8;1 W3OH SEC3-LCP MEDICINA +0.0 +0.0 Eq 2 1
LAS> get 1
I-GET, Observation 1; Vers 1 Scan 2
LAS> plot

Class screenshot

###Class Utility scripts

In the package directory class_scripts are located scripts callable from the class elaboration software. These scripts are very naive, I'm not an experienced class users and I devloped these scripts only as shortcuts for common operations I'm doing in the development process. Nevertheless if an experienced user is willing to write more complex elaboration pipelines, this is where those should be put.

At the moment we have defined:

  • average_sections : for sections 0 to 3 make an average of all observations in the current file and adds a new observation of line SECN-AVERAGE

Using the scripts is accomplished via the @ operator in a class session:

LAS> @ class_scripts/average_sections
I-FIND, 8 observations found
Consistency checks:
Checking Data type and regular x-axis sampling
...
I-WRITE, Observation #36;1 successfully written
I-FIND, 4 observations found
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
33;1 S140 SEC0-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
34;1 S140 SEC1-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
35;1 S140 SEC2-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
36;1 S140 SEC3-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1

##Data Calibration

If at least one cal subscan is present in the specified duty cycle, the software will calibrate spectra in Kelvin using the calibration mark temperature (obtained from metadata present in the original FITS files). The procedure will run as:

  1. Tcal / (CAL.mean - OFF.mean) = counts2kelvin
  2. Tsys = counts2kelvin * OFF.mean
  3. SpectrumInKelvin = (ON - OFF) * counts2kelvin = (ON - OFF) * Tsys / OFF.mean

If you skip data calibration by specifying the -s command line option, or if no cal subscan is present in the specified duty cycle, the software will just compute the resulting spectrum as:

  • (ON - OFF) / OFF

##Requirements

The software is developed in Python, using python2.7, and it depends on
external python packages:

  • astropy
  • pyclassfiller

Any astropy version >= 1.0 should be enough for the software to work, while pyclassfiller is provided by the GILDAS package that you can find at https://www.iram.fr/IRAMFR/GILDAS/ . We have installed the latest stable release that is GILDAS Version: mar16a

Installation

The command line tool can be installed via:

$ python setup.py install

Tested with Python 3.8

About

convert DISCOS fits into CLASS native format

Resources

Stars

0 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - discos/discos2class: convert DISCOS fits into CLASS native format · GitHub
Skip to content

Repository files navigation

discos2class

discos2class command line tool used to convert DISCOS spectroscopy files acquired with XARCOS into CLASS native format.

##TOC

WARNING: this project is in a very early beta version and it is not guaranteed to be working at all, neither producing correct results

##Usage

The tool operates on data directories of FITS files saved by the DISCOS system, where each directory matches a schedule SCAN

###Command line help

The command line help explains which options are available and gives hints about usage:

$ discos2class --help
usage: discos2class [-h] [-d] [-o OUTPUT_DIR] [-c DUTY_CYCLE] [-s] [--version]
source_dir [source_dir ...]
Convert discos SCANs into class files
positional arguments:
source_dir directory path(s) to scans
optional arguments:
-h, --help show this help message and exit
-d enable debug messages
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
output directory name
-c DUTY_CYCLE, --duty-cycle DUTY_CYCLE
scan duty cycle as "<on>:<off>:<cal>", elements must
be all presente but can be zeroes.
-s, --skip-calibration
skip kelvin calibration and computes only ((on - off) / off) ignoring CAL signal --version print version information and exit

As you can see, the program elaborates scans found in one ore more source directories and saves CLASS-converted spectra in corresponding directories, created in an output directory folder.

###An example session

$ ls data/xarcos_test_data_set/20160331-104808-7-15-w3oh/
20160331-104808-7-15-w3oh_002_001.fits 20160331-105255-7-15-w3oh_002_009.fits 20160331-105749-7-15-w3oh_002_017.fits
20160331-104844-7-15-w3oh_002_002.fits 20160331-105331-7-15-w3oh_002_010.fits 20160331-105825-7-15-w3oh_002_018.fits
20160331-104920-7-15-w3oh_002_003.fits 20160331-105414-7-15-w3oh_002_011.fits 20160331-105900-7-15-w3oh_002_019.fits
20160331-104956-7-15-w3oh_002_004.fits 20160331-105450-7-15-w3oh_002_012.fits 20160331-105936-7-15-w3oh_002_020.fits
20160331-105032-7-15-w3oh_002_005.fits 20160331-105525-7-15-w3oh_002_013.fits 20160331-110012-7-15-w3oh_002_021.fits
20160331-105107-7-15-w3oh_002_006.fits 20160331-105601-7-15-w3oh_002_014.fits summary.fits
20160331-105143-7-15-w3oh_002_007.fits 20160331-105637-7-15-w3oh_002_015.fits
20160331-105219-7-15-w3oh_002_008.fits 20160331-105713-7-15-w3oh_002_016.fits

As you can see the source directory contains a whole scan including the summary.fits file. In this case the w3oh source has been observed using a scan configuration of 10 spectra on-source, 10 spectra off-source and 1 spectrum off-source with calibration mark switched on (duty cycle 10-10-1), for a total of 21 subscans.

$ discos2class -o classdata/xarcos_test/ -c 10:10:1 data/xarcos_test_data_set/20160331-104808-7-15-w3oh
E-OPEN, Open error file classdata/xarcos_test/2016091_w3oh.d2c
E-OPEN, No such file or directory (O/S errno # 2)
I-FILE, File is version 2 (record length: 1024 words)
I-NEWPUT, classdata/xarcos_test/2016091_w3oh.d2c initialized
INFO: open new file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c

We have invoked the discos2class command specifying the scan configuration (10 on 10 off 1 cal) and the input and output data directories, from the command output we can see which file have been created and succesively updated with all observations.

In the destination directory a new directory is created. It is named exactly as specified in the command line option:

$ ls classdata/xarcos_test/
2016091_w3oh.d2c

Inside the directory a new CLASS file is created for each different source per day found in the original files.

Each file contains the result of the integration and calibration of all the observation data. Different sections and polarizations are treated as different line names in different observations listed in the file.

You can now use CLASS software to inspect your data:

$ cd classdata/xarcos_test $
$ class
...
LAS> file in 2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-INPUT, 2016091_w3oh.d2c successfully opened
LAS> find /all
I-FIND, 8 observations found
LAS> list
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
1;1 W3OH SEC0-RCP MEDICINA +0.0 +0.0 Eq 2 1
2;1 W3OH SEC0-LCP MEDICINA +0.0 +0.0 Eq 2 1
3;1 W3OH SEC1-RCP MEDICINA +0.0 +0.0 Eq 2 1
4;1 W3OH SEC1-LCP MEDICINA +0.0 +0.0 Eq 2 1
5;1 W3OH SEC2-RCP MEDICINA +0.0 +0.0 Eq 2 1
6;1 W3OH SEC2-LCP MEDICINA +0.0 +0.0 Eq 2 1
7;1 W3OH SEC3-RCP MEDICINA +0.0 +0.0 Eq 2 1
8;1 W3OH SEC3-LCP MEDICINA +0.0 +0.0 Eq 2 1
LAS> get 1
I-GET, Observation 1; Vers 1 Scan 2
LAS> plot

Class screenshot

###Class Utility scripts

In the package directory class_scripts are located scripts callable from the class elaboration software. These scripts are very naive, I'm not an experienced class users and I devloped these scripts only as shortcuts for common operations I'm doing in the development process. Nevertheless if an experienced user is willing to write more complex elaboration pipelines, this is where those should be put.

At the moment we have defined:

  • average_sections : for sections 0 to 3 make an average of all observations in the current file and adds a new observation of line SECN-AVERAGE

Using the scripts is accomplished via the @ operator in a class session:

LAS> @ class_scripts/average_sections
I-FIND, 8 observations found
Consistency checks:
Checking Data type and regular x-axis sampling
...
I-WRITE, Observation #36;1 successfully written
I-FIND, 4 observations found
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
33;1 S140 SEC0-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
34;1 S140 SEC1-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
35;1 S140 SEC2-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
36;1 S140 SEC3-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1

##Data Calibration

If at least one cal subscan is present in the specified duty cycle, the software will calibrate spectra in Kelvin using the calibration mark temperature (obtained from metadata present in the original FITS files). The procedure will run as:

  1. Tcal / (CAL.mean - OFF.mean) = counts2kelvin
  2. Tsys = counts2kelvin * OFF.mean
  3. SpectrumInKelvin = (ON - OFF) * counts2kelvin = (ON - OFF) * Tsys / OFF.mean

If you skip data calibration by specifying the -s command line option, or if no cal subscan is present in the specified duty cycle, the software will just compute the resulting spectrum as:

  • (ON - OFF) / OFF

##Requirements

The software is developed in Python, using python2.7, and it depends on
external python packages:

  • astropy
  • pyclassfiller

Any astropy version >= 1.0 should be enough for the software to work, while pyclassfiller is provided by the GILDAS package that you can find at https://www.iram.fr/IRAMFR/GILDAS/ . We have installed the latest stable release that is GILDAS Version: mar16a

Installation

The command line tool can be installed via:

$ python setup.py install

Tested with Python 3.8

About

convert DISCOS fits into CLASS native format

Resources

Stars

0 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - discos/discos2class: convert DISCOS fits into CLASS native format · GitHub
Skip to content

Repository files navigation

discos2class

discos2class command line tool used to convert DISCOS spectroscopy files acquired with XARCOS into CLASS native format.

##TOC

WARNING: this project is in a very early beta version and it is not guaranteed to be working at all, neither producing correct results

##Usage

The tool operates on data directories of FITS files saved by the DISCOS system, where each directory matches a schedule SCAN

###Command line help

The command line help explains which options are available and gives hints about usage:

$ discos2class --help
usage: discos2class [-h] [-d] [-o OUTPUT_DIR] [-c DUTY_CYCLE] [-s] [--version]
source_dir [source_dir ...]
Convert discos SCANs into class files
positional arguments:
source_dir directory path(s) to scans
optional arguments:
-h, --help show this help message and exit
-d enable debug messages
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
output directory name
-c DUTY_CYCLE, --duty-cycle DUTY_CYCLE
scan duty cycle as "<on>:<off>:<cal>", elements must
be all presente but can be zeroes.
-s, --skip-calibration
skip kelvin calibration and computes only ((on - off) / off) ignoring CAL signal --version print version information and exit

As you can see, the program elaborates scans found in one ore more source directories and saves CLASS-converted spectra in corresponding directories, created in an output directory folder.

###An example session

$ ls data/xarcos_test_data_set/20160331-104808-7-15-w3oh/
20160331-104808-7-15-w3oh_002_001.fits 20160331-105255-7-15-w3oh_002_009.fits 20160331-105749-7-15-w3oh_002_017.fits
20160331-104844-7-15-w3oh_002_002.fits 20160331-105331-7-15-w3oh_002_010.fits 20160331-105825-7-15-w3oh_002_018.fits
20160331-104920-7-15-w3oh_002_003.fits 20160331-105414-7-15-w3oh_002_011.fits 20160331-105900-7-15-w3oh_002_019.fits
20160331-104956-7-15-w3oh_002_004.fits 20160331-105450-7-15-w3oh_002_012.fits 20160331-105936-7-15-w3oh_002_020.fits
20160331-105032-7-15-w3oh_002_005.fits 20160331-105525-7-15-w3oh_002_013.fits 20160331-110012-7-15-w3oh_002_021.fits
20160331-105107-7-15-w3oh_002_006.fits 20160331-105601-7-15-w3oh_002_014.fits summary.fits
20160331-105143-7-15-w3oh_002_007.fits 20160331-105637-7-15-w3oh_002_015.fits
20160331-105219-7-15-w3oh_002_008.fits 20160331-105713-7-15-w3oh_002_016.fits

As you can see the source directory contains a whole scan including the summary.fits file. In this case the w3oh source has been observed using a scan configuration of 10 spectra on-source, 10 spectra off-source and 1 spectrum off-source with calibration mark switched on (duty cycle 10-10-1), for a total of 21 subscans.

$ discos2class -o classdata/xarcos_test/ -c 10:10:1 data/xarcos_test_data_set/20160331-104808-7-15-w3oh
E-OPEN, Open error file classdata/xarcos_test/2016091_w3oh.d2c
E-OPEN, No such file or directory (O/S errno # 2)
I-FILE, File is version 2 (record length: 1024 words)
I-NEWPUT, classdata/xarcos_test/2016091_w3oh.d2c initialized
INFO: open new file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c

We have invoked the discos2class command specifying the scan configuration (10 on 10 off 1 cal) and the input and output data directories, from the command output we can see which file have been created and succesively updated with all observations.

In the destination directory a new directory is created. It is named exactly as specified in the command line option:

$ ls classdata/xarcos_test/
2016091_w3oh.d2c

Inside the directory a new CLASS file is created for each different source per day found in the original files.

Each file contains the result of the integration and calibration of all the observation data. Different sections and polarizations are treated as different line names in different observations listed in the file.

You can now use CLASS software to inspect your data:

$ cd classdata/xarcos_test $
$ class
...
LAS> file in 2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-INPUT, 2016091_w3oh.d2c successfully opened
LAS> find /all
I-FIND, 8 observations found
LAS> list
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
1;1 W3OH SEC0-RCP MEDICINA +0.0 +0.0 Eq 2 1
2;1 W3OH SEC0-LCP MEDICINA +0.0 +0.0 Eq 2 1
3;1 W3OH SEC1-RCP MEDICINA +0.0 +0.0 Eq 2 1
4;1 W3OH SEC1-LCP MEDICINA +0.0 +0.0 Eq 2 1
5;1 W3OH SEC2-RCP MEDICINA +0.0 +0.0 Eq 2 1
6;1 W3OH SEC2-LCP MEDICINA +0.0 +0.0 Eq 2 1
7;1 W3OH SEC3-RCP MEDICINA +0.0 +0.0 Eq 2 1
8;1 W3OH SEC3-LCP MEDICINA +0.0 +0.0 Eq 2 1
LAS> get 1
I-GET, Observation 1; Vers 1 Scan 2
LAS> plot

Class screenshot

###Class Utility scripts

In the package directory class_scripts are located scripts callable from the class elaboration software. These scripts are very naive, I'm not an experienced class users and I devloped these scripts only as shortcuts for common operations I'm doing in the development process. Nevertheless if an experienced user is willing to write more complex elaboration pipelines, this is where those should be put.

At the moment we have defined:

  • average_sections : for sections 0 to 3 make an average of all observations in the current file and adds a new observation of line SECN-AVERAGE

Using the scripts is accomplished via the @ operator in a class session:

LAS> @ class_scripts/average_sections
I-FIND, 8 observations found
Consistency checks:
Checking Data type and regular x-axis sampling
...
I-WRITE, Observation #36;1 successfully written
I-FIND, 4 observations found
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
33;1 S140 SEC0-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
34;1 S140 SEC1-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
35;1 S140 SEC2-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
36;1 S140 SEC3-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1

##Data Calibration

If at least one cal subscan is present in the specified duty cycle, the software will calibrate spectra in Kelvin using the calibration mark temperature (obtained from metadata present in the original FITS files). The procedure will run as:

  1. Tcal / (CAL.mean - OFF.mean) = counts2kelvin
  2. Tsys = counts2kelvin * OFF.mean
  3. SpectrumInKelvin = (ON - OFF) * counts2kelvin = (ON - OFF) * Tsys / OFF.mean

If you skip data calibration by specifying the -s command line option, or if no cal subscan is present in the specified duty cycle, the software will just compute the resulting spectrum as:

  • (ON - OFF) / OFF

##Requirements

The software is developed in Python, using python2.7, and it depends on
external python packages:

  • astropy
  • pyclassfiller

Any astropy version >= 1.0 should be enough for the software to work, while pyclassfiller is provided by the GILDAS package that you can find at https://www.iram.fr/IRAMFR/GILDAS/ . We have installed the latest stable release that is GILDAS Version: mar16a

Installation

The command line tool can be installed via:

$ python setup.py install

Tested with Python 3.8

About

convert DISCOS fits into CLASS native format

Resources

Stars

0 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - discos/discos2class: convert DISCOS fits into CLASS native format · GitHub
Skip to content

Repository files navigation

discos2class

discos2class command line tool used to convert DISCOS spectroscopy files acquired with XARCOS into CLASS native format.

##TOC

WARNING: this project is in a very early beta version and it is not guaranteed to be working at all, neither producing correct results

##Usage

The tool operates on data directories of FITS files saved by the DISCOS system, where each directory matches a schedule SCAN

###Command line help

The command line help explains which options are available and gives hints about usage:

$ discos2class --help
usage: discos2class [-h] [-d] [-o OUTPUT_DIR] [-c DUTY_CYCLE] [-s] [--version]
source_dir [source_dir ...]
Convert discos SCANs into class files
positional arguments:
source_dir directory path(s) to scans
optional arguments:
-h, --help show this help message and exit
-d enable debug messages
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
output directory name
-c DUTY_CYCLE, --duty-cycle DUTY_CYCLE
scan duty cycle as "<on>:<off>:<cal>", elements must
be all presente but can be zeroes.
-s, --skip-calibration
skip kelvin calibration and computes only ((on - off) / off) ignoring CAL signal --version print version information and exit

As you can see, the program elaborates scans found in one ore more source directories and saves CLASS-converted spectra in corresponding directories, created in an output directory folder.

###An example session

$ ls data/xarcos_test_data_set/20160331-104808-7-15-w3oh/
20160331-104808-7-15-w3oh_002_001.fits 20160331-105255-7-15-w3oh_002_009.fits 20160331-105749-7-15-w3oh_002_017.fits
20160331-104844-7-15-w3oh_002_002.fits 20160331-105331-7-15-w3oh_002_010.fits 20160331-105825-7-15-w3oh_002_018.fits
20160331-104920-7-15-w3oh_002_003.fits 20160331-105414-7-15-w3oh_002_011.fits 20160331-105900-7-15-w3oh_002_019.fits
20160331-104956-7-15-w3oh_002_004.fits 20160331-105450-7-15-w3oh_002_012.fits 20160331-105936-7-15-w3oh_002_020.fits
20160331-105032-7-15-w3oh_002_005.fits 20160331-105525-7-15-w3oh_002_013.fits 20160331-110012-7-15-w3oh_002_021.fits
20160331-105107-7-15-w3oh_002_006.fits 20160331-105601-7-15-w3oh_002_014.fits summary.fits
20160331-105143-7-15-w3oh_002_007.fits 20160331-105637-7-15-w3oh_002_015.fits
20160331-105219-7-15-w3oh_002_008.fits 20160331-105713-7-15-w3oh_002_016.fits

As you can see the source directory contains a whole scan including the summary.fits file. In this case the w3oh source has been observed using a scan configuration of 10 spectra on-source, 10 spectra off-source and 1 spectrum off-source with calibration mark switched on (duty cycle 10-10-1), for a total of 21 subscans.

$ discos2class -o classdata/xarcos_test/ -c 10:10:1 data/xarcos_test_data_set/20160331-104808-7-15-w3oh
E-OPEN, Open error file classdata/xarcos_test/2016091_w3oh.d2c
E-OPEN, No such file or directory (O/S errno # 2)
I-FILE, File is version 2 (record length: 1024 words)
I-NEWPUT, classdata/xarcos_test/2016091_w3oh.d2c initialized
INFO: open new file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c

We have invoked the discos2class command specifying the scan configuration (10 on 10 off 1 cal) and the input and output data directories, from the command output we can see which file have been created and succesively updated with all observations.

In the destination directory a new directory is created. It is named exactly as specified in the command line option:

$ ls classdata/xarcos_test/
2016091_w3oh.d2c

Inside the directory a new CLASS file is created for each different source per day found in the original files.

Each file contains the result of the integration and calibration of all the observation data. Different sections and polarizations are treated as different line names in different observations listed in the file.

You can now use CLASS software to inspect your data:

$ cd classdata/xarcos_test $
$ class
...
LAS> file in 2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-INPUT, 2016091_w3oh.d2c successfully opened
LAS> find /all
I-FIND, 8 observations found
LAS> list
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
1;1 W3OH SEC0-RCP MEDICINA +0.0 +0.0 Eq 2 1
2;1 W3OH SEC0-LCP MEDICINA +0.0 +0.0 Eq 2 1
3;1 W3OH SEC1-RCP MEDICINA +0.0 +0.0 Eq 2 1
4;1 W3OH SEC1-LCP MEDICINA +0.0 +0.0 Eq 2 1
5;1 W3OH SEC2-RCP MEDICINA +0.0 +0.0 Eq 2 1
6;1 W3OH SEC2-LCP MEDICINA +0.0 +0.0 Eq 2 1
7;1 W3OH SEC3-RCP MEDICINA +0.0 +0.0 Eq 2 1
8;1 W3OH SEC3-LCP MEDICINA +0.0 +0.0 Eq 2 1
LAS> get 1
I-GET, Observation 1; Vers 1 Scan 2
LAS> plot

Class screenshot

###Class Utility scripts

In the package directory class_scripts are located scripts callable from the class elaboration software. These scripts are very naive, I'm not an experienced class users and I devloped these scripts only as shortcuts for common operations I'm doing in the development process. Nevertheless if an experienced user is willing to write more complex elaboration pipelines, this is where those should be put.

At the moment we have defined:

  • average_sections : for sections 0 to 3 make an average of all observations in the current file and adds a new observation of line SECN-AVERAGE

Using the scripts is accomplished via the @ operator in a class session:

LAS> @ class_scripts/average_sections
I-FIND, 8 observations found
Consistency checks:
Checking Data type and regular x-axis sampling
...
I-WRITE, Observation #36;1 successfully written
I-FIND, 4 observations found
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
33;1 S140 SEC0-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
34;1 S140 SEC1-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
35;1 S140 SEC2-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
36;1 S140 SEC3-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1

##Data Calibration

If at least one cal subscan is present in the specified duty cycle, the software will calibrate spectra in Kelvin using the calibration mark temperature (obtained from metadata present in the original FITS files). The procedure will run as:

  1. Tcal / (CAL.mean - OFF.mean) = counts2kelvin
  2. Tsys = counts2kelvin * OFF.mean
  3. SpectrumInKelvin = (ON - OFF) * counts2kelvin = (ON - OFF) * Tsys / OFF.mean

If you skip data calibration by specifying the -s command line option, or if no cal subscan is present in the specified duty cycle, the software will just compute the resulting spectrum as:

  • (ON - OFF) / OFF

##Requirements

The software is developed in Python, using python2.7, and it depends on
external python packages:

  • astropy
  • pyclassfiller

Any astropy version >= 1.0 should be enough for the software to work, while pyclassfiller is provided by the GILDAS package that you can find at https://www.iram.fr/IRAMFR/GILDAS/ . We have installed the latest stable release that is GILDAS Version: mar16a

Installation

The command line tool can be installed via:

$ python setup.py install

Tested with Python 3.8

About

convert DISCOS fits into CLASS native format

Resources

Stars

0 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - discos/discos2class: convert DISCOS fits into CLASS native format · GitHub
Skip to content

Repository files navigation

discos2class

discos2class command line tool used to convert DISCOS spectroscopy files acquired with XARCOS into CLASS native format.

##TOC

WARNING: this project is in a very early beta version and it is not guaranteed to be working at all, neither producing correct results

##Usage

The tool operates on data directories of FITS files saved by the DISCOS system, where each directory matches a schedule SCAN

###Command line help

The command line help explains which options are available and gives hints about usage:

$ discos2class --help
usage: discos2class [-h] [-d] [-o OUTPUT_DIR] [-c DUTY_CYCLE] [-s] [--version]
source_dir [source_dir ...]
Convert discos SCANs into class files
positional arguments:
source_dir directory path(s) to scans
optional arguments:
-h, --help show this help message and exit
-d enable debug messages
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
output directory name
-c DUTY_CYCLE, --duty-cycle DUTY_CYCLE
scan duty cycle as "<on>:<off>:<cal>", elements must
be all presente but can be zeroes.
-s, --skip-calibration
skip kelvin calibration and computes only ((on - off) / off) ignoring CAL signal --version print version information and exit

As you can see, the program elaborates scans found in one ore more source directories and saves CLASS-converted spectra in corresponding directories, created in an output directory folder.

###An example session

$ ls data/xarcos_test_data_set/20160331-104808-7-15-w3oh/
20160331-104808-7-15-w3oh_002_001.fits 20160331-105255-7-15-w3oh_002_009.fits 20160331-105749-7-15-w3oh_002_017.fits
20160331-104844-7-15-w3oh_002_002.fits 20160331-105331-7-15-w3oh_002_010.fits 20160331-105825-7-15-w3oh_002_018.fits
20160331-104920-7-15-w3oh_002_003.fits 20160331-105414-7-15-w3oh_002_011.fits 20160331-105900-7-15-w3oh_002_019.fits
20160331-104956-7-15-w3oh_002_004.fits 20160331-105450-7-15-w3oh_002_012.fits 20160331-105936-7-15-w3oh_002_020.fits
20160331-105032-7-15-w3oh_002_005.fits 20160331-105525-7-15-w3oh_002_013.fits 20160331-110012-7-15-w3oh_002_021.fits
20160331-105107-7-15-w3oh_002_006.fits 20160331-105601-7-15-w3oh_002_014.fits summary.fits
20160331-105143-7-15-w3oh_002_007.fits 20160331-105637-7-15-w3oh_002_015.fits
20160331-105219-7-15-w3oh_002_008.fits 20160331-105713-7-15-w3oh_002_016.fits

As you can see the source directory contains a whole scan including the summary.fits file. In this case the w3oh source has been observed using a scan configuration of 10 spectra on-source, 10 spectra off-source and 1 spectrum off-source with calibration mark switched on (duty cycle 10-10-1), for a total of 21 subscans.

$ discos2class -o classdata/xarcos_test/ -c 10:10:1 data/xarcos_test_data_set/20160331-104808-7-15-w3oh
E-OPEN, Open error file classdata/xarcos_test/2016091_w3oh.d2c
E-OPEN, No such file or directory (O/S errno # 2)
I-FILE, File is version 2 (record length: 1024 words)
I-NEWPUT, classdata/xarcos_test/2016091_w3oh.d2c initialized
INFO: open new file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c

We have invoked the discos2class command specifying the scan configuration (10 on 10 off 1 cal) and the input and output data directories, from the command output we can see which file have been created and succesively updated with all observations.

In the destination directory a new directory is created. It is named exactly as specified in the command line option:

$ ls classdata/xarcos_test/
2016091_w3oh.d2c

Inside the directory a new CLASS file is created for each different source per day found in the original files.

Each file contains the result of the integration and calibration of all the observation data. Different sections and polarizations are treated as different line names in different observations listed in the file.

You can now use CLASS software to inspect your data:

$ cd classdata/xarcos_test $
$ class
...
LAS> file in 2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-INPUT, 2016091_w3oh.d2c successfully opened
LAS> find /all
I-FIND, 8 observations found
LAS> list
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
1;1 W3OH SEC0-RCP MEDICINA +0.0 +0.0 Eq 2 1
2;1 W3OH SEC0-LCP MEDICINA +0.0 +0.0 Eq 2 1
3;1 W3OH SEC1-RCP MEDICINA +0.0 +0.0 Eq 2 1
4;1 W3OH SEC1-LCP MEDICINA +0.0 +0.0 Eq 2 1
5;1 W3OH SEC2-RCP MEDICINA +0.0 +0.0 Eq 2 1
6;1 W3OH SEC2-LCP MEDICINA +0.0 +0.0 Eq 2 1
7;1 W3OH SEC3-RCP MEDICINA +0.0 +0.0 Eq 2 1
8;1 W3OH SEC3-LCP MEDICINA +0.0 +0.0 Eq 2 1
LAS> get 1
I-GET, Observation 1; Vers 1 Scan 2
LAS> plot

Class screenshot

###Class Utility scripts

In the package directory class_scripts are located scripts callable from the class elaboration software. These scripts are very naive, I'm not an experienced class users and I devloped these scripts only as shortcuts for common operations I'm doing in the development process. Nevertheless if an experienced user is willing to write more complex elaboration pipelines, this is where those should be put.

At the moment we have defined:

  • average_sections : for sections 0 to 3 make an average of all observations in the current file and adds a new observation of line SECN-AVERAGE

Using the scripts is accomplished via the @ operator in a class session:

LAS> @ class_scripts/average_sections
I-FIND, 8 observations found
Consistency checks:
Checking Data type and regular x-axis sampling
...
I-WRITE, Observation #36;1 successfully written
I-FIND, 4 observations found
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
33;1 S140 SEC0-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
34;1 S140 SEC1-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
35;1 S140 SEC2-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
36;1 S140 SEC3-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1

##Data Calibration

If at least one cal subscan is present in the specified duty cycle, the software will calibrate spectra in Kelvin using the calibration mark temperature (obtained from metadata present in the original FITS files). The procedure will run as:

  1. Tcal / (CAL.mean - OFF.mean) = counts2kelvin
  2. Tsys = counts2kelvin * OFF.mean
  3. SpectrumInKelvin = (ON - OFF) * counts2kelvin = (ON - OFF) * Tsys / OFF.mean

If you skip data calibration by specifying the -s command line option, or if no cal subscan is present in the specified duty cycle, the software will just compute the resulting spectrum as:

  • (ON - OFF) / OFF

##Requirements

The software is developed in Python, using python2.7, and it depends on
external python packages:

  • astropy
  • pyclassfiller

Any astropy version >= 1.0 should be enough for the software to work, while pyclassfiller is provided by the GILDAS package that you can find at https://www.iram.fr/IRAMFR/GILDAS/ . We have installed the latest stable release that is GILDAS Version: mar16a

Installation

The command line tool can be installed via:

$ python setup.py install

Tested with Python 3.8

About

convert DISCOS fits into CLASS native format

Resources

Stars

0 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - discos/discos2class: convert DISCOS fits into CLASS native format · GitHub
Skip to content

Repository files navigation

discos2class

discos2class command line tool used to convert DISCOS spectroscopy files acquired with XARCOS into CLASS native format.

##TOC

WARNING: this project is in a very early beta version and it is not guaranteed to be working at all, neither producing correct results

##Usage

The tool operates on data directories of FITS files saved by the DISCOS system, where each directory matches a schedule SCAN

###Command line help

The command line help explains which options are available and gives hints about usage:

$ discos2class --help
usage: discos2class [-h] [-d] [-o OUTPUT_DIR] [-c DUTY_CYCLE] [-s] [--version]
source_dir [source_dir ...]
Convert discos SCANs into class files
positional arguments:
source_dir directory path(s) to scans
optional arguments:
-h, --help show this help message and exit
-d enable debug messages
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
output directory name
-c DUTY_CYCLE, --duty-cycle DUTY_CYCLE
scan duty cycle as "<on>:<off>:<cal>", elements must
be all presente but can be zeroes.
-s, --skip-calibration
skip kelvin calibration and computes only ((on - off) / off) ignoring CAL signal --version print version information and exit

As you can see, the program elaborates scans found in one ore more source directories and saves CLASS-converted spectra in corresponding directories, created in an output directory folder.

###An example session

$ ls data/xarcos_test_data_set/20160331-104808-7-15-w3oh/
20160331-104808-7-15-w3oh_002_001.fits 20160331-105255-7-15-w3oh_002_009.fits 20160331-105749-7-15-w3oh_002_017.fits
20160331-104844-7-15-w3oh_002_002.fits 20160331-105331-7-15-w3oh_002_010.fits 20160331-105825-7-15-w3oh_002_018.fits
20160331-104920-7-15-w3oh_002_003.fits 20160331-105414-7-15-w3oh_002_011.fits 20160331-105900-7-15-w3oh_002_019.fits
20160331-104956-7-15-w3oh_002_004.fits 20160331-105450-7-15-w3oh_002_012.fits 20160331-105936-7-15-w3oh_002_020.fits
20160331-105032-7-15-w3oh_002_005.fits 20160331-105525-7-15-w3oh_002_013.fits 20160331-110012-7-15-w3oh_002_021.fits
20160331-105107-7-15-w3oh_002_006.fits 20160331-105601-7-15-w3oh_002_014.fits summary.fits
20160331-105143-7-15-w3oh_002_007.fits 20160331-105637-7-15-w3oh_002_015.fits
20160331-105219-7-15-w3oh_002_008.fits 20160331-105713-7-15-w3oh_002_016.fits

As you can see the source directory contains a whole scan including the summary.fits file. In this case the w3oh source has been observed using a scan configuration of 10 spectra on-source, 10 spectra off-source and 1 spectrum off-source with calibration mark switched on (duty cycle 10-10-1), for a total of 21 subscans.

$ discos2class -o classdata/xarcos_test/ -c 10:10:1 data/xarcos_test_data_set/20160331-104808-7-15-w3oh
E-OPEN, Open error file classdata/xarcos_test/2016091_w3oh.d2c
E-OPEN, No such file or directory (O/S errno # 2)
I-FILE, File is version 2 (record length: 1024 words)
I-NEWPUT, classdata/xarcos_test/2016091_w3oh.d2c initialized
INFO: open new file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c

We have invoked the discos2class command specifying the scan configuration (10 on 10 off 1 cal) and the input and output data directories, from the command output we can see which file have been created and succesively updated with all observations.

In the destination directory a new directory is created. It is named exactly as specified in the command line option:

$ ls classdata/xarcos_test/
2016091_w3oh.d2c

Inside the directory a new CLASS file is created for each different source per day found in the original files.

Each file contains the result of the integration and calibration of all the observation data. Different sections and polarizations are treated as different line names in different observations listed in the file.

You can now use CLASS software to inspect your data:

$ cd classdata/xarcos_test $
$ class
...
LAS> file in 2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-INPUT, 2016091_w3oh.d2c successfully opened
LAS> find /all
I-FIND, 8 observations found
LAS> list
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
1;1 W3OH SEC0-RCP MEDICINA +0.0 +0.0 Eq 2 1
2;1 W3OH SEC0-LCP MEDICINA +0.0 +0.0 Eq 2 1
3;1 W3OH SEC1-RCP MEDICINA +0.0 +0.0 Eq 2 1
4;1 W3OH SEC1-LCP MEDICINA +0.0 +0.0 Eq 2 1
5;1 W3OH SEC2-RCP MEDICINA +0.0 +0.0 Eq 2 1
6;1 W3OH SEC2-LCP MEDICINA +0.0 +0.0 Eq 2 1
7;1 W3OH SEC3-RCP MEDICINA +0.0 +0.0 Eq 2 1
8;1 W3OH SEC3-LCP MEDICINA +0.0 +0.0 Eq 2 1
LAS> get 1
I-GET, Observation 1; Vers 1 Scan 2
LAS> plot

Class screenshot

###Class Utility scripts

In the package directory class_scripts are located scripts callable from the class elaboration software. These scripts are very naive, I'm not an experienced class users and I devloped these scripts only as shortcuts for common operations I'm doing in the development process. Nevertheless if an experienced user is willing to write more complex elaboration pipelines, this is where those should be put.

At the moment we have defined:

  • average_sections : for sections 0 to 3 make an average of all observations in the current file and adds a new observation of line SECN-AVERAGE

Using the scripts is accomplished via the @ operator in a class session:

LAS> @ class_scripts/average_sections
I-FIND, 8 observations found
Consistency checks:
Checking Data type and regular x-axis sampling
...
I-WRITE, Observation #36;1 successfully written
I-FIND, 4 observations found
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
33;1 S140 SEC0-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
34;1 S140 SEC1-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
35;1 S140 SEC2-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
36;1 S140 SEC3-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1

##Data Calibration

If at least one cal subscan is present in the specified duty cycle, the software will calibrate spectra in Kelvin using the calibration mark temperature (obtained from metadata present in the original FITS files). The procedure will run as:

  1. Tcal / (CAL.mean - OFF.mean) = counts2kelvin
  2. Tsys = counts2kelvin * OFF.mean
  3. SpectrumInKelvin = (ON - OFF) * counts2kelvin = (ON - OFF) * Tsys / OFF.mean

If you skip data calibration by specifying the -s command line option, or if no cal subscan is present in the specified duty cycle, the software will just compute the resulting spectrum as:

  • (ON - OFF) / OFF

##Requirements

The software is developed in Python, using python2.7, and it depends on
external python packages:

  • astropy
  • pyclassfiller

Any astropy version >= 1.0 should be enough for the software to work, while pyclassfiller is provided by the GILDAS package that you can find at https://www.iram.fr/IRAMFR/GILDAS/ . We have installed the latest stable release that is GILDAS Version: mar16a

Installation

The command line tool can be installed via:

$ python setup.py install

Tested with Python 3.8

About

convert DISCOS fits into CLASS native format

Resources

Stars

0 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - discos/discos2class: convert DISCOS fits into CLASS native format · GitHub
Skip to content

Repository files navigation

discos2class

discos2class command line tool used to convert DISCOS spectroscopy files acquired with XARCOS into CLASS native format.

##TOC

WARNING: this project is in a very early beta version and it is not guaranteed to be working at all, neither producing correct results

##Usage

The tool operates on data directories of FITS files saved by the DISCOS system, where each directory matches a schedule SCAN

###Command line help

The command line help explains which options are available and gives hints about usage:

$ discos2class --help
usage: discos2class [-h] [-d] [-o OUTPUT_DIR] [-c DUTY_CYCLE] [-s] [--version]
source_dir [source_dir ...]
Convert discos SCANs into class files
positional arguments:
source_dir directory path(s) to scans
optional arguments:
-h, --help show this help message and exit
-d enable debug messages
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
output directory name
-c DUTY_CYCLE, --duty-cycle DUTY_CYCLE
scan duty cycle as "<on>:<off>:<cal>", elements must
be all presente but can be zeroes.
-s, --skip-calibration
skip kelvin calibration and computes only ((on - off) / off) ignoring CAL signal --version print version information and exit

As you can see, the program elaborates scans found in one ore more source directories and saves CLASS-converted spectra in corresponding directories, created in an output directory folder.

###An example session

$ ls data/xarcos_test_data_set/20160331-104808-7-15-w3oh/
20160331-104808-7-15-w3oh_002_001.fits 20160331-105255-7-15-w3oh_002_009.fits 20160331-105749-7-15-w3oh_002_017.fits
20160331-104844-7-15-w3oh_002_002.fits 20160331-105331-7-15-w3oh_002_010.fits 20160331-105825-7-15-w3oh_002_018.fits
20160331-104920-7-15-w3oh_002_003.fits 20160331-105414-7-15-w3oh_002_011.fits 20160331-105900-7-15-w3oh_002_019.fits
20160331-104956-7-15-w3oh_002_004.fits 20160331-105450-7-15-w3oh_002_012.fits 20160331-105936-7-15-w3oh_002_020.fits
20160331-105032-7-15-w3oh_002_005.fits 20160331-105525-7-15-w3oh_002_013.fits 20160331-110012-7-15-w3oh_002_021.fits
20160331-105107-7-15-w3oh_002_006.fits 20160331-105601-7-15-w3oh_002_014.fits summary.fits
20160331-105143-7-15-w3oh_002_007.fits 20160331-105637-7-15-w3oh_002_015.fits
20160331-105219-7-15-w3oh_002_008.fits 20160331-105713-7-15-w3oh_002_016.fits

As you can see the source directory contains a whole scan including the summary.fits file. In this case the w3oh source has been observed using a scan configuration of 10 spectra on-source, 10 spectra off-source and 1 spectrum off-source with calibration mark switched on (duty cycle 10-10-1), for a total of 21 subscans.

$ discos2class -o classdata/xarcos_test/ -c 10:10:1 data/xarcos_test_data_set/20160331-104808-7-15-w3oh
E-OPEN, Open error file classdata/xarcos_test/2016091_w3oh.d2c
E-OPEN, No such file or directory (O/S errno # 2)
I-FILE, File is version 2 (record length: 1024 words)
I-NEWPUT, classdata/xarcos_test/2016091_w3oh.d2c initialized
INFO: open new file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c

We have invoked the discos2class command specifying the scan configuration (10 on 10 off 1 cal) and the input and output data directories, from the command output we can see which file have been created and succesively updated with all observations.

In the destination directory a new directory is created. It is named exactly as specified in the command line option:

$ ls classdata/xarcos_test/
2016091_w3oh.d2c

Inside the directory a new CLASS file is created for each different source per day found in the original files.

Each file contains the result of the integration and calibration of all the observation data. Different sections and polarizations are treated as different line names in different observations listed in the file.

You can now use CLASS software to inspect your data:

$ cd classdata/xarcos_test $
$ class
...
LAS> file in 2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-INPUT, 2016091_w3oh.d2c successfully opened
LAS> find /all
I-FIND, 8 observations found
LAS> list
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
1;1 W3OH SEC0-RCP MEDICINA +0.0 +0.0 Eq 2 1
2;1 W3OH SEC0-LCP MEDICINA +0.0 +0.0 Eq 2 1
3;1 W3OH SEC1-RCP MEDICINA +0.0 +0.0 Eq 2 1
4;1 W3OH SEC1-LCP MEDICINA +0.0 +0.0 Eq 2 1
5;1 W3OH SEC2-RCP MEDICINA +0.0 +0.0 Eq 2 1
6;1 W3OH SEC2-LCP MEDICINA +0.0 +0.0 Eq 2 1
7;1 W3OH SEC3-RCP MEDICINA +0.0 +0.0 Eq 2 1
8;1 W3OH SEC3-LCP MEDICINA +0.0 +0.0 Eq 2 1
LAS> get 1
I-GET, Observation 1; Vers 1 Scan 2
LAS> plot

Class screenshot

###Class Utility scripts

In the package directory class_scripts are located scripts callable from the class elaboration software. These scripts are very naive, I'm not an experienced class users and I devloped these scripts only as shortcuts for common operations I'm doing in the development process. Nevertheless if an experienced user is willing to write more complex elaboration pipelines, this is where those should be put.

At the moment we have defined:

  • average_sections : for sections 0 to 3 make an average of all observations in the current file and adds a new observation of line SECN-AVERAGE

Using the scripts is accomplished via the @ operator in a class session:

LAS> @ class_scripts/average_sections
I-FIND, 8 observations found
Consistency checks:
Checking Data type and regular x-axis sampling
...
I-WRITE, Observation #36;1 successfully written
I-FIND, 4 observations found
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
33;1 S140 SEC0-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
34;1 S140 SEC1-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
35;1 S140 SEC2-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
36;1 S140 SEC3-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1

##Data Calibration

If at least one cal subscan is present in the specified duty cycle, the software will calibrate spectra in Kelvin using the calibration mark temperature (obtained from metadata present in the original FITS files). The procedure will run as:

  1. Tcal / (CAL.mean - OFF.mean) = counts2kelvin
  2. Tsys = counts2kelvin * OFF.mean
  3. SpectrumInKelvin = (ON - OFF) * counts2kelvin = (ON - OFF) * Tsys / OFF.mean

If you skip data calibration by specifying the -s command line option, or if no cal subscan is present in the specified duty cycle, the software will just compute the resulting spectrum as:

  • (ON - OFF) / OFF

##Requirements

The software is developed in Python, using python2.7, and it depends on
external python packages:

  • astropy
  • pyclassfiller

Any astropy version >= 1.0 should be enough for the software to work, while pyclassfiller is provided by the GILDAS package that you can find at https://www.iram.fr/IRAMFR/GILDAS/ . We have installed the latest stable release that is GILDAS Version: mar16a

Installation

The command line tool can be installed via:

$ python setup.py install

Tested with Python 3.8

About

convert DISCOS fits into CLASS native format

Resources

Stars

0 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - discos/discos2class: convert DISCOS fits into CLASS native format · GitHub
Skip to content

Repository files navigation

discos2class

discos2class command line tool used to convert DISCOS spectroscopy files acquired with XARCOS into CLASS native format.

##TOC

WARNING: this project is in a very early beta version and it is not guaranteed to be working at all, neither producing correct results

##Usage

The tool operates on data directories of FITS files saved by the DISCOS system, where each directory matches a schedule SCAN

###Command line help

The command line help explains which options are available and gives hints about usage:

$ discos2class --help
usage: discos2class [-h] [-d] [-o OUTPUT_DIR] [-c DUTY_CYCLE] [-s] [--version]
source_dir [source_dir ...]
Convert discos SCANs into class files
positional arguments:
source_dir directory path(s) to scans
optional arguments:
-h, --help show this help message and exit
-d enable debug messages
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
output directory name
-c DUTY_CYCLE, --duty-cycle DUTY_CYCLE
scan duty cycle as "<on>:<off>:<cal>", elements must
be all presente but can be zeroes.
-s, --skip-calibration
skip kelvin calibration and computes only ((on - off) / off) ignoring CAL signal --version print version information and exit

As you can see, the program elaborates scans found in one ore more source directories and saves CLASS-converted spectra in corresponding directories, created in an output directory folder.

###An example session

$ ls data/xarcos_test_data_set/20160331-104808-7-15-w3oh/
20160331-104808-7-15-w3oh_002_001.fits 20160331-105255-7-15-w3oh_002_009.fits 20160331-105749-7-15-w3oh_002_017.fits
20160331-104844-7-15-w3oh_002_002.fits 20160331-105331-7-15-w3oh_002_010.fits 20160331-105825-7-15-w3oh_002_018.fits
20160331-104920-7-15-w3oh_002_003.fits 20160331-105414-7-15-w3oh_002_011.fits 20160331-105900-7-15-w3oh_002_019.fits
20160331-104956-7-15-w3oh_002_004.fits 20160331-105450-7-15-w3oh_002_012.fits 20160331-105936-7-15-w3oh_002_020.fits
20160331-105032-7-15-w3oh_002_005.fits 20160331-105525-7-15-w3oh_002_013.fits 20160331-110012-7-15-w3oh_002_021.fits
20160331-105107-7-15-w3oh_002_006.fits 20160331-105601-7-15-w3oh_002_014.fits summary.fits
20160331-105143-7-15-w3oh_002_007.fits 20160331-105637-7-15-w3oh_002_015.fits
20160331-105219-7-15-w3oh_002_008.fits 20160331-105713-7-15-w3oh_002_016.fits

As you can see the source directory contains a whole scan including the summary.fits file. In this case the w3oh source has been observed using a scan configuration of 10 spectra on-source, 10 spectra off-source and 1 spectrum off-source with calibration mark switched on (duty cycle 10-10-1), for a total of 21 subscans.

$ discos2class -o classdata/xarcos_test/ -c 10:10:1 data/xarcos_test_data_set/20160331-104808-7-15-w3oh
E-OPEN, Open error file classdata/xarcos_test/2016091_w3oh.d2c
E-OPEN, No such file or directory (O/S errno # 2)
I-FILE, File is version 2 (record length: 1024 words)
I-NEWPUT, classdata/xarcos_test/2016091_w3oh.d2c initialized
INFO: open new file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-OUTPUT, classdata/xarcos_test/2016091_w3oh.d2c successfully opened
INFO: append observation to file classdata/xarcos_test/2016091_w3oh.d2c

We have invoked the discos2class command specifying the scan configuration (10 on 10 off 1 cal) and the input and output data directories, from the command output we can see which file have been created and succesively updated with all observations.

In the destination directory a new directory is created. It is named exactly as specified in the command line option:

$ ls classdata/xarcos_test/
2016091_w3oh.d2c

Inside the directory a new CLASS file is created for each different source per day found in the original files.

Each file contains the result of the integration and calibration of all the observation data. Different sections and polarizations are treated as different line names in different observations listed in the file.

You can now use CLASS software to inspect your data:

$ cd classdata/xarcos_test $
$ class
...
LAS> file in 2016091_w3oh.d2c
I-CONVERT, File is [Native]
I-INPUT, 2016091_w3oh.d2c successfully opened
LAS> find /all
I-FIND, 8 observations found
LAS> list
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
1;1 W3OH SEC0-RCP MEDICINA +0.0 +0.0 Eq 2 1
2;1 W3OH SEC0-LCP MEDICINA +0.0 +0.0 Eq 2 1
3;1 W3OH SEC1-RCP MEDICINA +0.0 +0.0 Eq 2 1
4;1 W3OH SEC1-LCP MEDICINA +0.0 +0.0 Eq 2 1
5;1 W3OH SEC2-RCP MEDICINA +0.0 +0.0 Eq 2 1
6;1 W3OH SEC2-LCP MEDICINA +0.0 +0.0 Eq 2 1
7;1 W3OH SEC3-RCP MEDICINA +0.0 +0.0 Eq 2 1
8;1 W3OH SEC3-LCP MEDICINA +0.0 +0.0 Eq 2 1
LAS> get 1
I-GET, Observation 1; Vers 1 Scan 2
LAS> plot

Class screenshot

###Class Utility scripts

In the package directory class_scripts are located scripts callable from the class elaboration software. These scripts are very naive, I'm not an experienced class users and I devloped these scripts only as shortcuts for common operations I'm doing in the development process. Nevertheless if an experienced user is willing to write more complex elaboration pipelines, this is where those should be put.

At the moment we have defined:

  • average_sections : for sections 0 to 3 make an average of all observations in the current file and adds a new observation of line SECN-AVERAGE

Using the scripts is accomplished via the @ operator in a class session:

LAS> @ class_scripts/average_sections
I-FIND, 8 observations found
Consistency checks:
Checking Data type and regular x-axis sampling
...
I-WRITE, Observation #36;1 successfully written
I-FIND, 4 observations found
Current index contains:
N;V Source Line Telescope Lambda Beta Sys Sca Sub
33;1 S140 SEC0-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
34;1 S140 SEC1-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
35;1 S140 SEC2-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1
36;1 S140 SEC3-AVERAGE MEDICINA +0.0 +0.0 Eq 1 1

##Data Calibration

If at least one cal subscan is present in the specified duty cycle, the software will calibrate spectra in Kelvin using the calibration mark temperature (obtained from metadata present in the original FITS files). The procedure will run as:

  1. Tcal / (CAL.mean - OFF.mean) = counts2kelvin
  2. Tsys = counts2kelvin * OFF.mean
  3. SpectrumInKelvin = (ON - OFF) * counts2kelvin = (ON - OFF) * Tsys / OFF.mean

If you skip data calibration by specifying the -s command line option, or if no cal subscan is present in the specified duty cycle, the software will just compute the resulting spectrum as:

  • (ON - OFF) / OFF

##Requirements

The software is developed in Python, using python2.7, and it depends on
external python packages:

  • astropy
  • pyclassfiller

Any astropy version >= 1.0 should be enough for the software to work, while pyclassfiller is provided by the GILDAS package that you can find at https://www.iram.fr/IRAMFR/GILDAS/ . We have installed the latest stable release that is GILDAS Version: mar16a

Installation

The command line tool can be installed via:

$ python setup.py install

Tested with Python 3.8

About

convert DISCOS fits into CLASS native format

Resources

Stars

0 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages