28 #include "midiGlobal.h"
30 #include "midiControl.h"
31 #include "memoryHandling.h"
32 #include "procFrgHS.h"
33 #include "procFrgSP.h"
34 #include "procKappa.h"
36 #include "procDetLin.h"
37 #include "procDetRon.h"
38 #include "procRefPix.h"
39 #include "procDspTrn.h"
40 #include "procWavCal.h"
41 #include "errorHandling.h"
42 #include "fileHandling.h"
43 #include "midiFitsClassification.h"
44 #include "calibration.h"
45 #include "diagnostics.h"
54 int endOfTemplate = 0;
58 FILE *midiReportPtr=NULL;
59 char *midiReportName=NULL;
60 FILE *midiQcLogPtr=NULL;
61 char *midiQcLogName=NULL;
62 char outFileDir[MAX_STRING_LENGTH];
63 char outRootName[MAX_STRING_LENGTH];
64 char batchTemplate[MAX_STRING_LENGTH];
65 char givenName[MAX_STRING_LENGTH];
66 char midiMessage[MAX_STRING_LENGTH];
86 void executeDataReduction (
87 const char *calibTempDir,
88 const char *maskFileDir,
89 const char *productDir,
91 const char *inFitsList,
93 cpl_parameterlist *parlist,
94 cpl_frameset *frameset)
99 const char routine[] =
"executeDataReduction";
100 FILE *inFitsClassifiedPtr=NULL, *inFitsBatchPtr=NULL, *tempReportPtr=NULL;
101 char *stringTemp=NULL, *tempReportName=NULL, *fileNameStr=NULL,
102 *classification=NULL;
103 MidiFiles *fileNames=NULL;
104 UserOptions *options=NULL;
105 FILE *signaturePtr=NULL;
113 tempReportName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
114 options = (UserOptions *) calloc (1,
sizeof (UserOptions));
115 fileNames = callocMidiFiles (MAX_STRING_LENGTH);
118 sprintf (tempReportName,
"midiPipelineTempReport.log");
119 tempReportPtr = fopen (tempReportName,
"w");
120 sprintf (outFileDir,
"%s", productDir);
121 plotDuration = givenDispDur;
122 if (plotDuration == 0) plotFile = 1;
123 sprintf (givenName,
"%s",
"MIDI");
127 getMaskFileFromSof(fileNames,frameset);
132 getParameters (calibTempDir, maskFileDir, inFitsList, tempReportPtr, options, fileNames, error);
135 cpl_msg_info(cpl_func,
"\n");
136 fprintf (tempReportPtr,
"\n");
137 fclose (tempReportPtr);
138 free (tempReportName);
147 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
148 midiQcLogName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
149 midiReportName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
150 fileNameStr = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
151 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
155 classifyFitsFiles (options, fileNames, tempReportPtr, error,
161 sprintf (midiMessage,
"No FITS files to process. Check log file: %s", tempReportName);
162 midiReportWarning (tempReportPtr, routine, __FILE__, __LINE__, midiMessage);
164 cpl_msg_info(cpl_func,
"\n");
165 fprintf (tempReportPtr,
"\n");
166 fclose (tempReportPtr);
167 freeMidiFiles (fileNames);
170 free (tempReportName);
171 free (midiQcLogName);
172 free (midiReportName);
174 free (classification);
194 if ((inFitsClassifiedPtr = fopen (fileNames->inFitsClassified,
"r")) == NULL)
195 midiReportError (tempReportPtr, routine, __FILE__, __LINE__,
"Cannot open list of classified input FITS files");
199 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsClassifiedPtr) != NULL)
202 removeNewLine (stringTemp, batchTemplate);
205 sprintf (fileNames->inFitsBatch,
"%s",
"inputFitsBatch.log");
206 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"w")) == NULL)
207 midiReportError (tempReportPtr, routine, __FILE__, __LINE__,
"Cannot open batch FITS files");
210 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsClassifiedPtr) != NULL)
212 sprintf (classification,
"%s",
"");
213 sscanf (stringTemp,
"%s%s", fileNameStr, classification);
214 if (strcmp (fileNameStr,
"END_OF_BATCH") != 0)
215 fprintf (inFitsBatchPtr,
"%s %s\n", fileNameStr, classification);
219 fclose (inFitsBatchPtr);
225 createOutputFileNames (fileNames, tempReportPtr, error);
228 midiReportWarning (tempReportPtr, routine, __FILE__, __LINE__,
"This batch is rejected");
231 handoverReport (tempReportName, &tempReportPtr);
235 if (options->maskMode == COMPUTED)
237 createMaskFile (fileNames, error);
240 midiReportWarning (tempReportPtr, routine, __FILE__, __LINE__,
"This batch is rejected");
248 if ((strcmp (batchTemplate,
"HIGH_SENS_CALIB") == 0) ||
249 (strcmp (batchTemplate,
"HIGH_SENS_SCIENCE") == 0))
251 if (options->drsFrg) procFrgHS (fileNames, options, error, parlist, frameset);
252 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"This batch is rejected");
254 else if (strcmp (batchTemplate,
"SCI_PHOT_KAPPA") == 0)
259 signaturePtr = fopen (
"MIDI_sig_spk.log",
"w");
260 fclose (signaturePtr);
261 procKappa (fileNames, options, error);
262 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"This batch is rejected");
265 else if ((strcmp (batchTemplate,
"SCI_PHOT_CALIB") == 0) ||
266 (strcmp (batchTemplate,
"SCI_PHOT_SCIENCE") == 0))
270 if (strcmp (batchTemplate,
"SCI_PHOT_CALIB") == 0)
271 signaturePtr = fopen (
"MIDI_sig_spc.log",
"w");
273 signaturePtr = fopen (
"MIDI_sig_sps.log",
"w");
274 fclose (signaturePtr);
275 procFrgSP (fileNames, options, error, parlist, frameset);
276 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"This batch is rejected");
279 else if (strcmp (batchTemplate,
"ACQ") == 0)
282 procAcq (fileNames, error);
283 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
284 "This batch is rejected");
286 else if (strcmp (batchTemplate,
"DETLIN") == 0)
289 procDetLin (fileNames, error);
290 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
291 "This batch is rejected");
293 else if (strcmp (batchTemplate,
"DETRON") == 0)
296 procDetRon (fileNames, error);
297 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
298 "This batch is rejected");
300 else if (strcmp (batchTemplate,
"DSPTRN") == 0)
303 procDspTrn (fileNames, error);
304 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
305 "This batch is rejected");
307 else if (strcmp (batchTemplate,
"REFPIX") == 0)
310 procRefPix (fileNames, error);
311 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
312 "This batch is rejected");
314 else if (strcmp (batchTemplate,
"WAVECAL") == 0)
317 procWaveCal (options->tecWav, fileNames, error);
318 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
319 "This batch is rejected");
323 sprintf (midiMessage,
"Cannot process template: %s", batchTemplate);
324 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
329 if (*error) midiRejectBatch ();
330 else midiCloseBatch ();
332 if (strcmp (batchTemplate,
"SCI_PHOT_KAPPA") == 0)
335 remove (midiQcLogName);
345 if (diagnostic) cpl_msg_info(cpl_func,
"\nClosing temporary files \n");
346 if (diagnostic) cpl_msg_info(cpl_func,
"----------------------- \n");
347 if (diagnostic) cpl_msg_info(cpl_func,
"\n\n");
348 fclose (inFitsClassifiedPtr);
349 fclose (tempReportPtr);
350 remove (fileNames->inFitsClassified);
351 remove (fileNames->inFitsBatch);
352 remove (tempReportName);
355 freeMidiFiles (fileNames);
358 free (tempReportName);
359 free (midiQcLogName);
360 free (midiReportName);
362 free (classification);
381 void midiRejectBatch (
void)
385 const char routine[] =
"midiRejectBatch";
389 if (diagnostic > 2) cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
390 if (diagnostic > 2) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
394 if (diagnostic) cpl_msg_info(cpl_func,
"Created Log files: %s \n", midiReportName);
395 fprintf (midiReportPtr,
"Created Log files: %s \n", midiReportName);
396 if (diagnostic) cpl_msg_info(cpl_func,
"\n");
397 fprintf (midiReportPtr,
"\n");
400 fclose (midiReportPtr);
401 midiReportPtr = NULL;
405 fclose (midiQcLogPtr);
407 remove (midiQcLogName);
426 void midiCloseBatch (
void)
430 const char routine[] =
"midiCloseBatch";
434 if (diagnostic > 2) cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
435 if (diagnostic > 2) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
439 cpl_msg_info(cpl_func,
"Created Log files: %s %s \n", midiReportName, midiQcLogName);
440 fprintf (midiReportPtr,
"Created Log files: %s %s \n", midiReportName, midiQcLogName);
441 cpl_msg_info(cpl_func,
"\n\n");
442 fprintf (midiReportPtr,
"\n\n");
445 fclose (midiReportPtr);
446 midiReportPtr = NULL;
450 fclose (midiQcLogPtr);
472 const char *calibTempDir,
473 const char *maskFileDir,
474 const char *inFitsList,
476 UserOptions *options,
477 MidiFiles *fileNames,
484 const char routine[] =
"getParameters";
485 FILE *inFitsListPtr=NULL, *inFitsClassifiedPtr=NULL;
486 char *argument=NULL, *value=NULL, *tempStr=NULL;
493 tempStr = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
494 argument = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
495 value = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
499 sprintf (fileNames->inFileDir,
"%s",
"");
500 sprintf (fileNames->trfNameRead,
"%s",
"/tmp/MIDI.trf.dummy");
501 sprintf (fileNames->trfNameWrite,
"%s",
"/tmp/MIDI.trf.dummy");
502 sprintf (fileNames->wclNameRead,
"%s",
"/tmp/MIDI.wcl.dummy");
503 sprintf (fileNames->wclNameWrite,
"%s",
"/tmp/MIDI.wcl.dummy");
504 sprintf (fileNames->trrNameRead,
"%s",
"/tmp/MIDI.trr.dummy");
505 sprintf (fileNames->trrNameWrite,
"%s",
"/tmp/MIDI.trr.dummy");
506 sprintf (fileNames->calibDbDir,
"%s", calibTempDir);
507 sprintf (fileNames->maskFileDir,
"%s", maskFileDir);
508 sprintf (fileNames->inFitsList,
"%s", inFitsList);
509 options->processing = DISPERSED;
519 options->maskMode = SPECIFIED;
522 displayBanner (filePtr);
524 if (diagnostic > 2) cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
527 sprintf (fileNames->calibDbName,
"%scalibrator_database.dat", fileNames->calibDbDir);
528 sprintf (fileNames->waveCalibName,
"%swaveCalib", fileNames->calibDbDir);
529 sprintf (fileNames->transferRatiosName,
"%stransferRatios", fileNames->calibDbDir);
530 sprintf (fileNames->grismFoilName,
"%sgrism_foil_4lines.dat", fileNames->calibDbDir);
531 sprintf (fileNames->prismFoilName,
"%sprism_foil_4lines.dat", fileNames->calibDbDir);
534 strcpy (fileNames->inFitsClassified,
"inputFitsClassified.log");
538 if (((inFitsListPtr = fopen(fileNames->inFitsList,
"r")) != NULL) &&
539 (fscanf (inFitsListPtr,
"%s\n", argument) != EOF))
542 rewind (inFitsListPtr);
543 inFitsClassifiedPtr = fopen (fileNames->inFitsClassified,
"w");
545 while (fgets (tempStr, MAX_STRING_LENGTH, inFitsListPtr) != NULL)
548 sprintf (value,
"%s",
"");
549 sscanf (tempStr,
"%s%s", argument, value);
550 fprintf (inFitsClassifiedPtr,
"%s %s\n", argument, value);
552 fclose (inFitsListPtr);
553 fclose (inFitsClassifiedPtr);
557 cpl_msg_info(cpl_func,
"\n<<Error>>: List of FITS file is not given or the list is empty \n");
558 cpl_msg_info(cpl_func,
"\n");
559 fprintf(filePtr,
"\n<<Error>>: List of FITS file is not given or the list is empty\n");
560 fprintf(filePtr,
"\n");
562 if (argument) free (argument);
563 if (tempStr) free (tempStr);
564 if (value) free (value);
569 inFitsClassifiedPtr = fopen (fileNames->inFitsClassified,
"r");
570 cpl_msg_info(cpl_func,
"\n");
571 cpl_msg_info(cpl_func,
"The FITS list contains the following files:\n");
572 cpl_msg_info(cpl_func,
"-------------------------------------------\n");
573 fprintf (filePtr,
"\n");
574 fprintf (filePtr,
"Given FITS list contains the following files:\n");
575 fprintf (filePtr,
"---------------------------------------------\n");
576 while (fgets (tempStr, MAX_STRING_LENGTH, inFitsClassifiedPtr) != NULL)
579 sprintf (value,
"%s",
"");
580 sscanf (tempStr,
"%s%s", argument, value);
581 cpl_msg_info(cpl_func,
"%s %s\n", argument, value);
582 fprintf (filePtr,
"%s %s\n", argument, value);
584 fclose (inFitsClassifiedPtr);
587 if (argument) free (argument);
588 if (tempStr) free (tempStr);
589 if (value) free (value);
609 void createOutputFileNames (
610 MidiFiles *fileNames,
618 const char routine[] =
"createOutputFileNames";
619 FILE *inFitsBatchPtr=NULL;
621 char *fileTemp=NULL, *classification=NULL, *pipeFilePrefix=NULL,
622 *fileNameStr=NULL, *suffix=NULL, *pipeRootName=NULL;
626 if (diagnostic > 2) cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
627 if (diagnostic > 2) fprintf (filePtr,
"Invoking routine '%s' \n", routine);
633 fileTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
634 suffix = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
635 fileNameStr = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
636 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
637 pipeFilePrefix = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
638 pipeRootName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
641 sprintf (pipeFilePrefix,
"r.");
644 if ((inFitsBatchPtr = fopen(fileNames->inFitsBatch,
"r")) == NULL)
645 midiReportError (filePtr, routine, __FILE__, __LINE__,
"Cannot open FITS file list");
647 fgets (fileTemp, MAX_STRING_LENGTH, inFitsBatchPtr);
648 sprintf (classification,
"%s",
"");
649 sscanf (fileTemp,
"%s%s", fileNameStr, classification);
650 stringLength = strlen (fileNameStr);
651 strncpy (pipeRootName, fileNameStr, stringLength-5);
655 removePathName (pipeRootName, filePtr);
656 if (inFitsBatchPtr) fclose (inFitsBatchPtr);
657 sprintf (fileNames->archFileName,
"%s.fits", pipeRootName);
658 sprintf (fileNames->pipeFileName,
"%s%s_tpl_0000.fits", pipeFilePrefix, pipeRootName);
661 if (strcmp (batchTemplate,
"HIGH_SENS_CALIB") == 0)
663 sprintf (suffix,
"_b%d_hsc", batchNumber);
665 else if (strcmp (batchTemplate,
"HIGH_SENS_SCIENCE") == 0)
667 sprintf (suffix,
"_b%d_hss", batchNumber);
669 else if (strcmp (batchTemplate,
"SCI_PHOT_CALIB") == 0)
671 sprintf (suffix,
"_b%d_spc", batchNumber);
673 else if (strcmp (batchTemplate,
"SCI_PHOT_SCIENCE") == 0)
675 sprintf (suffix,
"_b%d_sps", batchNumber);
677 else if (strcmp (batchTemplate,
"SCI_PHOT_KAPPA") == 0)
679 sprintf (suffix,
"_b%d_spk", batchNumber);
681 else if (strcmp (batchTemplate,
"ACQ") == 0)
683 sprintf (suffix,
"_b%d_acq", batchNumber);
685 else if (strcmp (batchTemplate,
"DETLIN") == 0)
687 sprintf (suffix,
"_b%d_lin", batchNumber);
689 else if (strcmp (batchTemplate,
"DETRON") == 0)
691 sprintf (suffix,
"_b%d_ron", batchNumber);
693 else if (strcmp (batchTemplate,
"DSPTRN") == 0)
695 sprintf (suffix,
"_b%d_trn", batchNumber);
697 else if (strcmp (batchTemplate,
"REFPIX") == 0)
699 sprintf (suffix,
"_b%d_pix", batchNumber);
701 else if (strcmp (batchTemplate,
"WAVECAL") == 0)
703 sprintf (suffix,
"_b%d_wav", batchNumber);
708 sprintf (midiMessage,
"Unknown Template: %s", batchTemplate);
709 midiReportWarning (filePtr, routine, __FILE__, __LINE__, midiMessage);
712 free (classification);
714 free (pipeFilePrefix);
718 if (!rootName) sprintf (outRootName,
"%s%s", pipeRootName, suffix);
719 else sprintf (outRootName,
"%s%s", givenName, suffix);
721 sprintf (midiReportName,
"%s%s.log", outFileDir, outRootName);
722 sprintf (midiQcLogName,
"%s%s.qc.dummy", outFileDir, outRootName);
723 sprintf (fileNames->trfHistoryName,
"%s%s.trfh.dummy", outFileDir, outRootName);
724 sprintf (fileNames->wclHistoryName,
"%s%s.wclh.dummy", outFileDir, outRootName);
725 sprintf (fileNames->trrHistoryName,
"%s%s.trrh.dummy", outFileDir, outRootName);
726 sprintf (fileNames->outFitsName,
"%s%s.pro.fits", outFileDir, outRootName);
727 sprintf (fileNames->outWaterfallName,
"%s%s.waf.fits", outFileDir, outRootName);
728 sprintf (fileNames->outWaterpowerName,
"%s%s.wap.fits", outFileDir, outRootName);
729 sprintf (fileNames->outAveImageName,
"%s%s.aim.fits", outFileDir, outRootName);
730 sprintf (fileNames->outChSpectrumName,
"%s%s.chs.fits", outFileDir, outRootName);
733 if (fileTemp) free (fileTemp);
734 if (suffix) free (suffix);
735 if (classification) free (classification);
736 if (fileNameStr) free (fileNameStr);
737 if (pipeFilePrefix) free (pipeFilePrefix);
738 if (pipeRootName) free (pipeRootName);
764 const char routine[] =
"displayBanner";
766 struct tm *newTime=NULL;
767 char *currentTime=NULL;
771 if (diagnostic > 2) cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
772 if (diagnostic > 2) fprintf (filePtr,
"Invoking routine '%s' \n", routine);
775 currentTime = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
778 newTime = gmtime (&now);
779 strftime (currentTime, MIN_STRING_LENGTH,
"%a %d %b %Y at %H:%M:%S", newTime);
781 cpl_msg_info(cpl_func,
"\n\n\n\n");
782 cpl_msg_info(cpl_func,
" ,----------------------------------------------.\n");
783 cpl_msg_info(cpl_func,
" | * European Southern Observatory |\n");
784 cpl_msg_info(cpl_func,
" | *E S* VLTI DMD, Garching |\n");
785 cpl_msg_info(cpl_func,
" | O MIDI Data Reduction Program |\n");
786 cpl_msg_info(cpl_func,
" | * Version: %s\n", MIDI_PIPE_VERSION);
787 cpl_msg_info(cpl_func,
" | |\n");
788 cpl_msg_info(cpl_func,
" | For support e-mail to: |\n");
789 cpl_msg_info(cpl_func,
" | pballest@eso.org or agabasch@eso.org |\n");
790 cpl_msg_info(cpl_func,
" `----------------------------------------------'\n");
791 cpl_msg_info(cpl_func,
"\nMIDI pipeline started on: %s GMT \n", currentTime);
793 fprintf (filePtr,
"\n\n\n\n");
794 fprintf (filePtr,
" ,----------------------------------------------.\n");
795 fprintf (filePtr,
" | * European Southern Observatory |\n");
796 fprintf (filePtr,
" | *E S* VLTI DMD, Garching |\n");
797 fprintf (filePtr,
" | O MIDI Data Reduction Program |\n");
798 fprintf (filePtr,
" | * Version: %s\n", MIDI_PIPE_VERSION);
799 fprintf (filePtr,
" | |\n");
800 fprintf (filePtr,
" | For support e-mail to: |\n");
801 fprintf (filePtr,
" | pballest@eso.org or agabasch@eso.org |\n");
802 fprintf (filePtr,
" `----------------------------------------------'\n");
803 fprintf (filePtr,
"\nMIDI pipeline started on: %s GMT \n", currentTime);
806 if (currentTime) free (currentTime);
828 void handoverReport (
835 const char routine[] =
"handoverReport";
838 struct tm *newTime=NULL;
839 char *currentTime=NULL;
844 if (diagnostic > 2) cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
845 if (diagnostic > 2) fprintf(*filePtr,
"Invoking routine '%s' \n", routine);
848 tempStr = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
849 currentTime = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
852 if (stat (midiReportName, &buf) == 0)
remove (midiReportName);
853 midiReportPtr = fopen(midiReportName,
"w");
854 if (!midiReportPtr) midiReportError (*filePtr, routine, __FILE__, __LINE__,
"Cannot create output event log file");
856 if (stat (midiQcLogName, &buf) == 0)
remove (midiQcLogName);
857 midiQcLogPtr = fopen(midiQcLogName,
"w");
858 if (!midiQcLogPtr) midiReportError (*filePtr, routine, __FILE__, __LINE__,
"Cannot create output QC log file");
862 *filePtr = fopen (fileName,
"r");
863 while (fgets (tempStr, MAX_STRING_LENGTH, *filePtr) != NULL)
864 fprintf (midiReportPtr,
"%s", tempStr);
867 newTime = gmtime (&now);
868 strftime (currentTime, MIN_STRING_LENGTH,
"%a %d %b %Y at %H:%M:%S", newTime);
869 cpl_msg_info(cpl_func,
"\nMIDI Data Reduction for batch %d started on: %s GMT \n", batchNumber, currentTime);
870 fprintf (midiReportPtr,
"\nMIDI Data Reduction for batch %d started on: %s GMT \n", batchNumber, currentTime);
873 *filePtr = fopen (fileName,
"a");
876 if (tempStr) free (tempStr);
877 if (currentTime) free (currentTime);
891 void getMaskFileFromSof(MidiFiles * fileNames, cpl_frameset * frameset)
895 cpl_frame * cur_frame;
896 char * tag_firstframe=NULL;
897 char * tag_mask=NULL;
899 char gris_name[100]=
"";
900 cpl_propertylist * plist;
912 cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
913 "Identifying calib and/or raw frames failed");
917 cur_frame = cpl_frameset_get_first(frameset);
918 if (cur_frame == NULL) {
919 cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
920 "SOF does not have any file");
926 for(i=0; i<cpl_frameset_get_size(frameset);i++){
929 if((cpl_frame_get_group(cur_frame) == CPL_FRAME_GROUP_RAW)){
933 cur_frame = cpl_frameset_get_next( frameset );
939 if (cur_frame == NULL) {
940 cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
941 "SOF does not have any raw files");
942 cpl_msg_error(cpl_func,
"SOF does not have any raw files");
947 tag_firstframe = (
char*)cpl_frame_get_tag(cur_frame);
948 plist = cpl_propertylist_load(cpl_frame_get_filename(cur_frame), 0);
950 if (cpl_propertylist_has(plist,
"ESO INS GRIS NAME") == 1)
952 strcpy(gris_name,cpl_propertylist_get_string(plist,
"ESO INS GRIS NAME"));
958 if ((strcmp(tag_firstframe, MIDI_HIGH_SENS_CALIB)==0 ||
959 strcmp(tag_firstframe, MIDI_HIGH_SENS_SCIENCE)==0) && strcmp(gris_name,
"GRISM")==0) {
960 tag_mask = cpl_sprintf(
"%s",
"KAPPA_HS_MASK_GRISM");
963 else if ((strcmp(tag_firstframe, MIDI_HIGH_SENS_CALIB)==0 ||
964 strcmp(tag_firstframe, MIDI_HIGH_SENS_SCIENCE)==0) && strcmp(gris_name,
"PRISM")==0) {
965 tag_mask = cpl_sprintf(
"%s",
"KAPPA_HS_MASK_PRISM");
968 else if ((strcmp(tag_firstframe, MIDI_SCI_PHOT_CALIB)==0 ||
969 strcmp(tag_firstframe, MIDI_SCI_PHOT_SCIENCE)==0) && strcmp(gris_name,
"GRISM")==0) {
970 tag_mask = cpl_sprintf(
"%s",
"KAPPA_SP_MASK_GRISM");
973 else if ((strcmp(tag_firstframe, MIDI_SCI_PHOT_CALIB)==0 ||
974 strcmp(tag_firstframe, MIDI_SCI_PHOT_SCIENCE)==0) && strcmp(gris_name,
"PRISM")==0) {
975 tag_mask = cpl_sprintf(
"%s",
"KAPPA_SP_MASK_PRISM");
979 tag_mask = cpl_sprintf(
"%s",
"NO MASK");
983 cur_frame = cpl_frameset_get_first(frameset);
988 tag = (
char*)cpl_frame_get_tag(cur_frame);
990 if (strcmp(tag, tag_mask)==0) {
992 sprintf(fileNames->maskFileName,
"%s",cpl_frame_get_filename(cur_frame));
995 cur_frame = cpl_frameset_get_next( frameset );
1002 cpl_propertylist_delete(plist);