MUSE Pipeline Reference Manual  2.1.1
muse_scipost_correct_rv.c
1 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set sw=2 sts=2 et cin: */
3 /*
4  * This file is part of the MUSE Instrument Pipeline
5  * Copyright (C) 2014 European Southern Observatory
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  */
21 
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25 
26 /*---------------------------------------------------------------------------*
27  * Includes *
28  *---------------------------------------------------------------------------*/
29 #include <string.h>
30 #include <muse.h>
31 #include "muse_scipost_correct_rv_z.h"
32 
33 /*---------------------------------------------------------------------------*
34  * Functions code *
35  *---------------------------------------------------------------------------*/
36 
37 /*----------------------------------------------------------------------------*/
46 /*----------------------------------------------------------------------------*/
47 int
48 muse_scipost_correct_rv_compute(muse_processing *aProcessing,
50 {
51  muse_rvcorrect_type rvtype = muse_rvcorrect_select_type(aParams->rvcorr_s);
52  cpl_frameset *inframes = muse_frameset_find_tags(aProcessing->inframes,
53  aProcessing->intags, 0,
54  CPL_FALSE);
55  cpl_error_code rc = CPL_ERROR_NONE;
56  cpl_size iframe, nframes = cpl_frameset_get_size(inframes);
57  for (iframe = 0; iframe < nframes; iframe++) {
58  cpl_frame *frame = cpl_frameset_get_position(inframes, iframe);
59  const char *fn = cpl_frame_get_filename(frame);
61  aParams->lambdamin,
62  aParams->lambdamax);
63  if (!pixtable) {
64  cpl_msg_error(__func__, "No pixel table loaded for \"%s\"", fn);
65  rc = CPL_ERROR_NULL_INPUT;
66  break;
67  }
68  muse_processing_append_used(aProcessing, frame, CPL_FRAME_GROUP_RAW, 1);
69 
70  /* erase pre-existing QC parameters */
71  cpl_propertylist_erase_regexp(pixtable->header, "ESO QC ", 0);
72  rc = muse_rvcorrect(pixtable, rvtype);
73  if (rc != CPL_ERROR_NONE) {
74  cpl_msg_error(__func__, "Failure while correcting radial-velocities for "
75  "\"%s\"!", fn);
76  muse_pixtable_delete(pixtable);
77  break;
78  }
79  muse_processing_save_table(aProcessing, 0, pixtable, NULL,
80  MUSE_TAG_PIXTABLE_REDUCED,
82  muse_pixtable_delete(pixtable);
83  } /* for iframe (all input frames) */
84  cpl_frameset_delete(inframes);
85 
86  return rc;
87 } /* muse_scipost_correct_rv_compute() */
const char * rvcorr_s
Correct the radial velocity of the telescope with reference to either the barycenter of the Solar Sys...
cpl_error_code muse_rvcorrect(muse_pixtable *aPixtable, muse_rvcorrect_type aType)
Correct the wavelengths of all pixels of a given pixel table for radial velocity shift.
Structure to hold the parameters of the muse_scipost_correct_rv recipe.
double lambdamin
Cut off the data below this wavelength after loading the pixel table(s).
muse_rvcorrect_type muse_rvcorrect_select_type(const char *aTypeString)
Select type of radial velocity correction to be done from type string.
double lambdamax
Cut off the data above this wavelength after loading the pixel table(s).
Structure definition of MUSE pixel table.
void muse_processing_append_used(muse_processing *aProcessing, cpl_frame *aFrame, cpl_frame_group aGroup, int aDuplicate)
Add a frame to the set of used frames.
muse_pixtable * muse_pixtable_load_restricted_wavelength(const char *aFilename, double aLambdaMin, double aLambdaMax)
Load a pixel table from file and cut down the wavelength range.
cpl_array * intags
cpl_frameset * inframes
cpl_error_code muse_processing_save_table(muse_processing *aProcessing, int aIFU, void *aTable, cpl_propertylist *aHeader, const char *aTag, muse_table_type aType)
Save a computed table to disk.
void muse_pixtable_delete(muse_pixtable *aPixtable)
Deallocate memory associated to a pixel table object.
cpl_propertylist * header
The FITS header.
cpl_frameset * muse_frameset_find_tags(const cpl_frameset *aFrames, const cpl_array *aTags, unsigned char aIFU, cpl_boolean aInvert)
return frameset containing data from an IFU/channel with the given tag(s)
Definition: muse_utils.c:253