// Pour merger des fichiers FITS cmv 19/06/2002 #include "machdefs.h" #include #include #include #include #include #include "toi.h" #include "toimanager.h" #include "fitstoirdr.h" #include "fitstoiwtr.h" #include "sophyainit.h" #include "strutilxx.h" #include "timing.h" #include struct In_TOI { string ColNameIn; string ColNameOut; bool ColFlagOut; vector FileNameIn; void Init(void) { ColNameIn=""; ColNameOut=""; ColFlagOut=false; FileNameIn.resize(0); } }; int DecodeDatac(string datacname,vector< struct In_TOI > &TOI_Merge); void PrintDatac(vector< struct In_TOI > &TOI_Merge); void usage(void); void usage(void) { cout <<"toimerge [-h] [-I] [-p lp] [-s samplemin,samplemax] [-w data_window_size]"< TOI_Merge; int ntoi = DecodeDatac(namedatacard,TOI_Merge); if(lp) PrintDatac(TOI_Merge); if(ntoi<=0) throw ParmError("Error: No Connected TOI"); // Set Pipe TOIManager* mgr = TOIManager::getManager(); if(fgsegmented) mgr->selectTOISegmented(width); else mgr->selectTOISeqBuffered(width); // Create FITS writer cout<<"> Creating FITSTOIWriter OutFitsName= "< Creating "< Connecting Processors ... "<1) cout<<"---TOI "<addFile(fname); } mgr->connect(*(rfits[i]),colin,wfits,colout,"",width,withflag); } // Start Pipe PrtTim("starting processors"); mgr->startAll(); // ------------------- Impression continu de stat ------------------------ if(lp>1) { sleep(3); // Il faut attendre que le FitsWriter ait demarre ProcSampleCounter stats(wfits); stats.InfoMessage() = "toimerge/Info"; stats.PrintStats(); } // ----------------------------------------------------------------------- // End Pipe mgr->waitForAll(); PrtTim("End threads"); // Cleaning for(int i=0;i &TOI_Merge) /* Format du fichier de datacards: @TOI nom_col_int nom_col_out flag nom_col_int : nom de la colonne a lire dans le FITS d'entree nom_col_out : nom de la colonne a ecrire dans le FITS de sortie flag_out = n'importe quoi : ecriture d'une colonne de flag pour ce TOI absent : pas de flag pour ce TOI (default) @REP nom_rep nom_rep : nom du repertoire courant pour lire les fichiers en entree. Peut etre change en cours de route. Defaut=./ @FILE nom_fichier nom_fichier : en entree (il est dans le dernier nom_rep appelle). Return: le nombre de TOI en entree qui ont ete connectees --- Exemple: ####################################################### >>> 1er TOI avec ecriture de flag @TOI boloMuV_24 bolomuv FLAG @REP $PLANCK/Kiruna_2002_02_07/TOI/Full_sampling/Bolos_optfilt @FILE b143k03_0.fits @FILE b143k03_1.fits @FILE b143k03_2.fits @REP $PLANCK/Kiruna_2002_02_07/TOI/Full_sampling/Bolos_optfilt_2 @FILE b143k03_a.fits @FILE b143k03_b.fits >>> 2sd TOI sans ecriture de flag @REP $PLANCK/Kiruna_2002_02_07/TOI/Full_sampling/Pointing_LALv3 @TOI GLON_24 glon @FILE bolo24_gal0.fits @FILE bolo24_gal1.fits @FILE bolo24_gal2.fits @FILE bolo24_gal3.fits @FILE bolo24_gal4.fits @FILE bolo24_gal5.fits @FILE bolo24_gal6.fits @TOI GLAT_24 glat @FILE bolo24_gal0.fits @FILE bolo24_gal1.fits @FILE bolo24_gal2.fits @FILE bolo24_gal3.fits @FILE bolo24_gal4.fits @FILE bolo24_gal5.fits @FILE bolo24_gal6.fits ####################################################### ############### Fin du fichier datacard ############### ####################################################### */ { #define LENLINE 4096 char line[LENLINE]; FILE* FileDatacard = fopen(datacname.c_str(),"r"); //cout<<">>> DecodeDatac:"<>>>"< vsline; FillVStringFrString(sline,vsline,' '); if(vsline.size()==0) continue; //for(int i=0;i3) TOI_Merge[ntoi].ColFlagOut = true; //cout<<"New TOI("<1) repcur = vsline[1]; if(repcur.size()>0) if(repcur[repcur.size()-1] != '/') repcur += '/'; //cout<<"repcur: "< &TOI_Merge) { int ntoi = TOI_Merge.size(); cout<<"PrintDatac: ntoi="<0) for(int j=0;j