| [1738] | 1 | // ArchTOIPipe           (C)     CEA/DAPNIA/SPP IN2P3/LAL
 | 
|---|
 | 2 | //                               Eric Aubourg
 | 
|---|
 | 3 | //                               Christophe Magneville
 | 
|---|
 | 4 | //                               Reza Ansari
 | 
|---|
| [1760] | 5 | // $Id: tgenw.cc,v 1.7 2001-11-13 16:01:39 aubourg Exp $
 | 
|---|
| [1738] | 6 | 
 | 
|---|
| [1497] | 7 | /*   Test de GenWindowTOIProcessor (generic processor with window)
 | 
|---|
 | 8 | ----------------   Exemple d'appel  ---------------------
 | 
|---|
| [1502] | 9 | csh> time ./tgenw -intoi bolo -start 1 -end 50000 -wgen 16,1,64 -wlcr 0,0,0 \
 | 
|---|
 | 10 |            -dbg 0 toto.fits xx.fits
 | 
|---|
| [1497] | 11 | */
 | 
|---|
 | 12 | 
 | 
|---|
 | 13 | #include "machdefs.h"
 | 
|---|
 | 14 | #include <math.h>
 | 
|---|
 | 15 | #include "array.h"
 | 
|---|
 | 16 | #include <unistd.h>
 | 
|---|
 | 17 | #include "toi.h"
 | 
|---|
 | 18 | #include "toiprocessor.h"
 | 
|---|
 | 19 | #include "fitstoirdr.h"
 | 
|---|
 | 20 | #include "fitstoiwtr.h"
 | 
|---|
 | 21 | #include "toimanager.h"
 | 
|---|
 | 22 | #include "genwproc.h"
 | 
|---|
 | 23 | #include "toiseqbuff.h"
 | 
|---|
 | 24 | #include "timing.h"
 | 
|---|
 | 25 | #include "sambainit.h"
 | 
|---|
| [1760] | 26 | #include <stdexcept>
 | 
|---|
| [1497] | 27 | 
 | 
|---|
 | 28 | // ----- Classe de test heritant de GenWindowTOIProcessor -----
 | 
|---|
 | 29 | class TGenWProc : public GenWindowTOIProcessor {
 | 
|---|
 | 30 | public:
 | 
|---|
| [1502] | 31 |   TGenWProc(int ntoiout, int wsz, int step, int wt);
 | 
|---|
| [1497] | 32 |   virtual void UserInit(int_8 kstart);
 | 
|---|
 | 33 |   virtual void UserProc(int_8 ks);
 | 
|---|
 | 34 |   virtual void UserEnd(int_8 kend);
 | 
|---|
| [1502] | 35 | protected:
 | 
|---|
 | 36 |   int_8 SNRunning;
 | 
|---|
| [1497] | 37 | };
 | 
|---|
 | 38 | 
 | 
|---|
| [1502] | 39 | TGenWProc::TGenWProc(int ntoiout,int wsz, int step, int wt)
 | 
|---|
 | 40 |   : GenWindowTOIProcessor(1,ntoiout,wsz,step,wt)
 | 
|---|
| [1497] | 41 | {
 | 
|---|
| [1502] | 42 |   SNRunning = 1;
 | 
|---|
| [1497] | 43 | }
 | 
|---|
 | 44 | void TGenWProc::UserInit(int_8 kstart)
 | 
|---|
 | 45 | {
 | 
|---|
 | 46 |   cout << "TGenWProc::UserInit(" << kstart << ")" << endl;
 | 
|---|
 | 47 | }
 | 
|---|
 | 48 | void TGenWProc::UserEnd(int_8 kend)
 | 
|---|
 | 49 | {
 | 
|---|
 | 50 |   cout << "TGenWProc::UserEnd(" << kend << ")" << endl;
 | 
|---|
 | 51 | }
 | 
|---|
 | 52 | 
 | 
|---|
 | 53 | void TGenWProc::UserProc(int_8 ks)
 | 
|---|
 | 54 | {
 | 
|---|
| [1502] | 55 |   if( ks==StartSampleNum() || ks>=EndSampleNum()-1 || ks%1000==0 )
 | 
|---|
 | 56 |     cout<<"TGenWProc::UserProc("<<ks<<") CenterSample="<<GetWCenterSample()<<endl;
 | 
|---|
 | 57 | 
 | 
|---|
 | 58 |   // Test pour fichier cmv toto.fits (sn=100000+i, bolo=i)
 | 
|---|
 | 59 |   r_8 * datatest = GetWDataPointer();
 | 
|---|
 | 60 |   for(int_4 i=0;i<WSize;i++) {
 | 
|---|
 | 61 |     int_8 k=ks-WSize/2+i;
 | 
|---|
 | 62 |     if(k<SNbegin || k>SNend) continue;
 | 
|---|
 | 63 |     if(datatest[i]!=k-100000) {cout<<"PROBLEME ks="<<ks<<endl; break;}
 | 
|---|
| [1497] | 64 |   }
 | 
|---|
| [1502] | 65 | 
 | 
|---|
 | 66 |   if(!NbOutput) return;
 | 
|---|
 | 67 | 
 | 
|---|
 | 68 |   if(GetWStep()==1) {
 | 
|---|
 | 69 |     // Cas ou on a un step de 1
 | 
|---|
| [1497] | 70 |     r_8 data;
 | 
|---|
| [1532] | 71 |     uint_8 flag;
 | 
|---|
| [1502] | 72 |     GetData(ks,data,flag);
 | 
|---|
 | 73 |     PutWData(ks,data,flag);
 | 
|---|
 | 74 | 
 | 
|---|
 | 75 |   } else if(GetWStep()<GetWSize()) {
 | 
|---|
 | 76 |     // Cas ou on a un step plus petit que la fenetre:
 | 
|---|
 | 77 |     // on peut donc reconstituer le TOI original en sortie
 | 
|---|
 | 78 |     // (ca marche aussi pour WStep==1 mais test different)
 | 
|---|
 | 79 |     // ATTENTION: l'ordre d'ecriture depend de la taille relative
 | 
|---|
 | 80 |     // de WSize et WStep.
 | 
|---|
 | 81 |     // Il faut en plus faire attention au premier echantillon et au dernier
 | 
|---|
 | 82 |     // Visiblement il faut ecrire autant de donnees en sortie que lues en entree (??)
 | 
|---|
 | 83 |     // ===> Conduit a une logique d'une simplicite extreme:
 | 
|---|
 | 84 |     // ATTENTION: dans certains cas ca bloque car il peut arriver que
 | 
|---|
 | 85 |     // SNend ne soit jamais atteint selon les valeurs de WSize/WStep !
 | 
|---|
 | 86 |     // et on ne peut donc pas ecrire autant de valeurs en sortie que lues en entree
 | 
|---|
 | 87 |     TVector<r_8> data;
 | 
|---|
| [1532] | 88 |     TVector<uint_8> flag;
 | 
|---|
| [1502] | 89 |     int_4 ideb,ifin,isndeb;
 | 
|---|
 | 90 |     if(GetWStep()<=GetWSize()/2+1) {
 | 
|---|
 | 91 |       //  ------|------
 | 
|---|
 | 92 |       //      ------|------
 | 
|---|
 | 93 |       //        :   :
 | 
|---|
 | 94 |       //        WStep
 | 
|---|
 | 95 |       //        :  :
 | 
|---|
 | 96 |       //        d..f
 | 
|---|
 | 97 |       ideb = GetWCenterIndex();
 | 
|---|
 | 98 |       isndeb = GetWCenterSample();
 | 
|---|
 | 99 |       ifin = ideb + GetWStep()-1;
 | 
|---|
 | 100 |     } else {
 | 
|---|
 | 101 |       //  ------|------
 | 
|---|
 | 102 |       //             ------|------
 | 
|---|
 | 103 |       //        :          :
 | 
|---|
 | 104 |       //            WStep
 | 
|---|
 | 105 |       //  :         :
 | 
|---|
 | 106 |       //  d.........f
 | 
|---|
 | 107 |       ifin = GetWSize()-1;
 | 
|---|
 | 108 |       ideb = ifin - GetWStep()+1;
 | 
|---|
 | 109 |       isndeb = GetWStartSample() + ideb;
 | 
|---|
 | 110 |     }
 | 
|---|
 | 111 |     if(isndeb<StartSampleNum()) {
 | 
|---|
 | 112 |       cout<<"........ ideb="<<ideb<<" isndeb="<<isndeb<<endl;
 | 
|---|
 | 113 |       ideb = StartSampleNum() - GetWStartSample();
 | 
|---|
 | 114 |       isndeb = StartSampleNum();
 | 
|---|
 | 115 |     }
 | 
|---|
 | 116 |     if(GetWStartSample()+ifin>EndSampleNum()) {
 | 
|---|
 | 117 |       cout<<"........ ifin="<<ifin<<endl;
 | 
|---|
 | 118 |       ifin = EndSampleNum() - GetWStartSample();
 | 
|---|
 | 119 |     }
 | 
|---|
 | 120 |     cout<<".... ideb="<<ideb<<" ifin="<<ifin<<" isndeb="<<isndeb<<endl;
 | 
|---|
 | 121 |     data = GetWData()(Range(ideb,ifin));
 | 
|---|
 | 122 |     flag = GetWFlag()(Range(ideb,ifin));
 | 
|---|
 | 123 |     PutWData(isndeb,data,flag);
 | 
|---|
 | 124 |   } else {
 | 
|---|
 | 125 |     // Cas ou on ne peut reproduire le TOI initial
 | 
|---|
 | 126 |     // On renumerote les samples
 | 
|---|
 | 127 |     // ATTENTION: faut en mettre autant en sortie que lu en entree (???)
 | 
|---|
 | 128 |     // ATTENTION: dans certains cas ca bloque car il peut arriver que
 | 
|---|
 | 129 |     // SNend ne soit jamais atteint selon les valeurs de WSize/WStep !
 | 
|---|
 | 130 |     // et on ne peut donc pas ecrire autant de valeurs en sortie que lues en entree
 | 
|---|
 | 131 |     // CA NE MARCHE PAS DANS CE CAS
 | 
|---|
 | 132 |     TVector<r_8> data;
 | 
|---|
| [1532] | 133 |     TVector<uint_8> flag;
 | 
|---|
| [1502] | 134 |     int_4 ideb=0, ifin=GetWSize()-1;
 | 
|---|
 | 135 |     int_8 ilen = EndSampleNum() - StartSampleNum() + 1;
 | 
|---|
 | 136 |     if(GetWStartSample()+ideb<StartSampleNum()) {
 | 
|---|
 | 137 |       cout<<"........ ideb="<<ideb<<endl;
 | 
|---|
 | 138 |       ideb = StartSampleNum() - GetWStartSample();
 | 
|---|
 | 139 |     }
 | 
|---|
 | 140 |     if(GetWStartSample()+ifin>EndSampleNum()) {
 | 
|---|
 | 141 |       cout<<"........ ifin="<<ifin<<endl;
 | 
|---|
 | 142 |       ifin = EndSampleNum() - GetWStartSample();
 | 
|---|
 | 143 |     }
 | 
|---|
 | 144 |     data = GetWData()(Range(ideb,ifin));
 | 
|---|
 | 145 |     flag = GetWFlag()(Range(ideb,ifin));
 | 
|---|
 | 146 |     cout<<".... ideb="<<ideb<<" ifin="<<ifin<<" SNRunning="<<SNRunning<<endl;
 | 
|---|
 | 147 |     PutWData(SNRunning,data,flag);
 | 
|---|
 | 148 |     SNRunning += ifin-ideb+1;
 | 
|---|
 | 149 |     if(SNRunning<=ilen && GetWStep()-GetWSize()>0) {
 | 
|---|
 | 150 |       for(int_4 i=0;i<GetWStep()-GetWSize() && SNRunning<=ilen;i++)
 | 
|---|
 | 151 |         {PutWData(SNRunning,0.,0); SNRunning++;}
 | 
|---|
 | 152 |       // De toute facon impossible a faire puisque
 | 
|---|
 | 153 |       // ce putwdata efface le vecteur du putwdata precedent
 | 
|---|
 | 154 |     }
 | 
|---|
 | 155 |     cout<<".................... SNRunning="<<SNRunning<<endl;
 | 
|---|
| [1497] | 156 |   }
 | 
|---|
| [1502] | 157 |   // Oh que voila une logique simple et utilisable par tout un chacun !!!
 | 
|---|
| [1497] | 158 | }
 | 
|---|
 | 159 | 
 | 
|---|
 | 160 | void Usage(bool fgerr)
 | 
|---|
 | 161 | {
 | 
|---|
 | 162 |   cout << endl;
 | 
|---|
 | 163 |   if (fgerr) {
 | 
|---|
 | 164 |     cout << " tgenw : Argument Error ! tgenw -h for usage " << endl; 
 | 
|---|
 | 165 |     exit(1);
 | 
|---|
 | 166 |   }
 | 
|---|
 | 167 |   else {
 | 
|---|
| [1502] | 168 |     cout << "\n Usage : tgenw [-prt] [-dbg dbg] [-start snb] [-end sne] [-intoi name] \n" 
 | 
|---|
| [1497] | 169 |          << "         [-wtoi sz] [-wgen sz,step,szt] inFitsName outFitsName \n"
 | 
|---|
| [1502] | 170 |          << "   -prt : sets TOISeqBuffered debug level to 1 \n"
 | 
|---|
 | 171 |          << "   -dbg : debug level for GenWProc \n"
 | 
|---|
| [1497] | 172 |          << "   -start snb : sets the start sample num \n"
 | 
|---|
 | 173 |          << "   -end sne : sets the end sample num \n"
 | 
|---|
 | 174 |          << "   -intoi toiName : select input TOI name (def boloMuV_27)\n"
 | 
|---|
 | 175 |          << "   -wtoi sz : sets TOISeqBuff buffer size (def= 8192)\n"
 | 
|---|
 | 176 |          << "   -wgen sz,step,szt : sets GenWProc window size, step total size \n"
 | 
|---|
| [1502] | 177 |          << "   -wlcr szl,szc,szr : sets LCR Window \n"
 | 
|---|
| [1497] | 178 |          << endl;
 | 
|---|
 | 179 |     exit(0);
 | 
|---|
 | 180 |   }
 | 
|---|
 | 181 | }
 | 
|---|
 | 182 | 
 | 
|---|
 | 183 | int main(int narg, char** arg) {
 | 
|---|
 | 184 | 
 | 
|---|
 | 185 |   if ((narg > 1) && (strcmp(arg[1],"-h") == 0) ) Usage(false);
 | 
|---|
 | 186 | 
 | 
|---|
 | 187 |   cout << "tgenw starting - Decoding arguments " << " narg=" << narg << endl;
 | 
|---|
 | 188 | 
 | 
|---|
 | 189 |   bool fgdbg = false;
 | 
|---|
 | 190 |   bool fgsetstart = false;
 | 
|---|
| [1502] | 191 |   int dbglevel = 0;
 | 
|---|
| [1497] | 192 |   int wtoi = 8192;
 | 
|---|
 | 193 |   int wgen = 16;
 | 
|---|
 | 194 |   int stepgen = 1;
 | 
|---|
| [1502] | 195 |   int wgl = 0, wgc = 0, wgr = 0;
 | 
|---|
| [1497] | 196 |   int wtotgen = 0;
 | 
|---|
 | 197 |   int istart = 0;
 | 
|---|
 | 198 |   int iend = 0;
 | 
|---|
 | 199 |   string infile;
 | 
|---|
| [1502] | 200 |   string outfile = "";
 | 
|---|
| [1497] | 201 |   string outppfname;
 | 
|---|
 | 202 |   string intoi = "boloMuV_27";
 | 
|---|
 | 203 | 
 | 
|---|
| [1502] | 204 |   if (narg < 2) Usage(true);
 | 
|---|
| [1497] | 205 |   int ko=1;
 | 
|---|
 | 206 |   // decoding arguments 
 | 
|---|
 | 207 |   for(int ia=1; ia<narg; ia++) {
 | 
|---|
 | 208 |     if (strcmp(arg[ia],"-start") == 0) {
 | 
|---|
 | 209 |       if (ia == narg-1) Usage(true);  // -start est suivi d'un argument 
 | 
|---|
 | 210 |       istart = atoi(arg[ia+1]); ia++;
 | 
|---|
 | 211 |       fgsetstart = true;
 | 
|---|
 | 212 |     }    
 | 
|---|
 | 213 |     else if (strcmp(arg[ia],"-end") == 0) {
 | 
|---|
 | 214 |       if (ia == narg-1) Usage(true);  
 | 
|---|
 | 215 |       iend = atoi(arg[ia+1]); ia++;
 | 
|---|
 | 216 |     }    
 | 
|---|
 | 217 |     else if (strcmp(arg[ia],"-wtoi") == 0) {
 | 
|---|
 | 218 |       if (ia == narg-1) Usage(true);  
 | 
|---|
 | 219 |       wtoi = atoi(arg[ia+1]); ia++;
 | 
|---|
 | 220 |     }    
 | 
|---|
 | 221 |     else if (strcmp(arg[ia],"-wgen") == 0) {
 | 
|---|
 | 222 |       if (ia == narg-1) Usage(true);  
 | 
|---|
 | 223 |       sscanf(arg[ia+1],"%d,%d,%d",&wgen,&stepgen,&wtotgen); ia++;
 | 
|---|
 | 224 |     }    
 | 
|---|
| [1502] | 225 |     else if (strcmp(arg[ia],"-wlcr") == 0) {
 | 
|---|
 | 226 |       if (ia == narg-1) Usage(true);  
 | 
|---|
 | 227 |       sscanf(arg[ia+1],"%d,%d,%d",&wgl,&wgc,&wgr); ia++;
 | 
|---|
 | 228 |     }    
 | 
|---|
| [1497] | 229 |     else if (strcmp(arg[ia],"-intoi") == 0) {
 | 
|---|
 | 230 |       if (ia == narg-1) Usage(true);  
 | 
|---|
 | 231 |       intoi = arg[ia+1]; ia++;
 | 
|---|
 | 232 |     }    
 | 
|---|
| [1502] | 233 |     else if (strcmp(arg[ia],"-dbg") == 0) {
 | 
|---|
 | 234 |       if (ia == narg-1) Usage(true);  
 | 
|---|
 | 235 |       sscanf(arg[ia+1],"%d",&dbglevel); ia++;
 | 
|---|
 | 236 |     }    
 | 
|---|
 | 237 |     else if (strcmp(arg[ia],"-prt") == 0)  fgdbg = true;
 | 
|---|
| [1497] | 238 | 
 | 
|---|
 | 239 |     else { ko = ia; break; }  // Debut des noms
 | 
|---|
 | 240 |   }
 | 
|---|
 | 241 | 
 | 
|---|
 | 242 |   if (iend < istart) iend = istart+wtoi*10;
 | 
|---|
| [1502] | 243 |   if ((narg-ko) < 1)  Usage(true); 
 | 
|---|
| [1497] | 244 |   infile = arg[ko];
 | 
|---|
| [1502] | 245 |   if(ko+1<narg) outfile = arg[ko+1];
 | 
|---|
 | 246 |   // outppfname = arg[ko+2];
 | 
|---|
| [1497] | 247 | 
 | 
|---|
 | 248 |   cout << " Initializing SOPHYA ... " << endl;
 | 
|---|
 | 249 |   SophyaInit();
 | 
|---|
 | 250 |   InitTim();
 | 
|---|
 | 251 | 
 | 
|---|
 | 252 |   cout << ">> tgenw: Infile= " << infile << " outFile=" 
 | 
|---|
 | 253 |        << outfile << endl; 
 | 
|---|
 | 254 |   cout << ">>> Window Size WTOI= " << wtoi << " WGenSz= " << wgen
 | 
|---|
| [1502] | 255 |        << " StepGen=" << stepgen << " WTot=" << wtotgen
 | 
|---|
 | 256 |        << " Wglcr=" << wgl << "," << wgc <<  "," << wgr << endl;
 | 
|---|
| [1497] | 257 |   cout << ">>>> InTOIName= " << intoi 
 | 
|---|
 | 258 |        << "  iStart= " << istart << " iEnd= " << iend << endl;
 | 
|---|
 | 259 | 
 | 
|---|
 | 260 |   try {
 | 
|---|
 | 261 |     TOIManager* mgr = TOIManager::getManager();
 | 
|---|
 | 262 |   
 | 
|---|
 | 263 |     //  mgr->setRequestedSample(11680920,11710584);
 | 
|---|
 | 264 |     //  mgr->setRequestedSample(104121000, 104946120);
 | 
|---|
| [1502] | 265 |     if (fgsetstart)
 | 
|---|
| [1497] | 266 |       mgr->setRequestedSample(istart, iend);
 | 
|---|
 | 267 |   
 | 
|---|
 | 268 |     FITSTOIReader r(infile); 
 | 
|---|
 | 269 |     cout << "reader created" << endl;
 | 
|---|
 | 270 | 
 | 
|---|
| [1502] | 271 |     int ntoiout=0;
 | 
|---|
 | 272 |     FITSTOIWriter* w=NULL;
 | 
|---|
 | 273 |     if(outfile.size()>0) {
 | 
|---|
 | 274 |       ntoiout=1;
 | 
|---|
 | 275 |       w = new FITSTOIWriter(outfile);
 | 
|---|
 | 276 |       cout << "fits writer created" << endl;
 | 
|---|
 | 277 |     }
 | 
|---|
| [1497] | 278 | 
 | 
|---|
 | 279 |     TOISeqBuffered * toiin = new TOISeqBuffered("f2in", wtoi);
 | 
|---|
 | 280 |     if (fgdbg) toiin->setDebugLevel(1);
 | 
|---|
| [1502] | 281 | 
 | 
|---|
 | 282 |     TOISeqBuffered * toiout = NULL;
 | 
|---|
 | 283 |     if(w) {
 | 
|---|
 | 284 |       toiout = new TOISeqBuffered("genout", wtoi);
 | 
|---|
 | 285 |       if (fgdbg) toiout->setDebugLevel(1);
 | 
|---|
 | 286 |     }
 | 
|---|
 | 287 | 
 | 
|---|
 | 288 |     TGenWProc tgenp(ntoiout, wgen, stepgen, wtotgen);
 | 
|---|
 | 289 |     tgenp.SetWSizeLCR(wgl,wgc,wgr);
 | 
|---|
 | 290 |     tgenp.SetDbgLevel(dbglevel);
 | 
|---|
 | 291 | 
 | 
|---|
| [1497] | 292 |     cout << " Connecting to FitsReader ... " << endl;
 | 
|---|
 | 293 |     r.addOutput(intoi, toiin);
 | 
|---|
 | 294 | 
 | 
|---|
| [1502] | 295 |     if(w && toiout) {
 | 
|---|
 | 296 |       cout << " Connecting to FitsWriter ... " << endl;
 | 
|---|
| [1542] | 297 |       w->addInput("genout",toiout,true);
 | 
|---|
| [1502] | 298 |     }
 | 
|---|
| [1497] | 299 | 
 | 
|---|
 | 300 |     cout << " Connecting  TGenWProc ... " << endl;
 | 
|---|
 | 301 |     tgenp.addInput("in0",toiin);
 | 
|---|
| [1502] | 302 |     if(toiout) tgenp.addOutput("out0",toiout);
 | 
|---|
| [1546] | 303 |     tgenp.PrintStatus(cout);
 | 
|---|
| [1497] | 304 | 
 | 
|---|
 | 305 |     PrtTim("starting threads");
 | 
|---|
 | 306 |     r.start();
 | 
|---|
 | 307 |     tgenp.start();
 | 
|---|
| [1502] | 308 |     if(w) w->start();
 | 
|---|
| [1497] | 309 | 
 | 
|---|
 | 310 |     /*       
 | 
|---|
 | 311 |     for(int jj=0; jj<3; jj++) {
 | 
|---|
 | 312 |       cout << *toiin; 
 | 
|---|
| [1502] | 313 |       if(toiout) cout << *toiout; 
 | 
|---|
| [1497] | 314 |       sleep(1);
 | 
|---|
 | 315 |     }
 | 
|---|
 | 316 |     */
 | 
|---|
 | 317 | 
 | 
|---|
 | 318 |     mgr->joinAll();
 | 
|---|
 | 319 |     PrtTim("End threads");
 | 
|---|
 | 320 | 
 | 
|---|
 | 321 |     //    cout << " ------ FITSReaderTOI::PrintStatus() : ----- " << endl;
 | 
|---|
 | 322 |     //    r.PrintStatus(cout);  
 | 
|---|
 | 323 |     //    cout << "----- FITSWriterTOI::PrintStatus() : ----- " << endl;
 | 
|---|
| [1502] | 324 |     //    w->PrintStatus(cout);  
 | 
|---|
| [1497] | 325 | 
 | 
|---|
 | 326 |     cout << " ------ toiin, toiout Status information ------- " << endl;
 | 
|---|
 | 327 |     cout << *toiin; 
 | 
|---|
| [1502] | 328 |     if(toiout) cout << *toiout;
 | 
|---|
 | 329 |     tgenp.PrintStatus(cout);
 | 
|---|
 | 330 | 
 | 
|---|
 | 331 |     // Fermeture du fitswriter
 | 
|---|
 | 332 |     if(w) delete w;;
 | 
|---|
 | 333 | 
 | 
|---|
| [1497] | 334 |   }
 | 
|---|
 | 335 |   catch (PThrowable & exc) {
 | 
|---|
 | 336 |     cerr << "\n tgenw: Catched Exception \n" << (string)typeid(exc).name() 
 | 
|---|
 | 337 |          << " - Msg= " << exc.Msg() << endl;
 | 
|---|
 | 338 |   }
 | 
|---|
 | 339 |   catch (const std::exception & sex) {
 | 
|---|
 | 340 |     cerr << "\n tgenw: Catched std::exception \n" 
 | 
|---|
 | 341 |          << (string)typeid(sex).name() << endl; 
 | 
|---|
 | 342 |   }
 | 
|---|
 | 343 |   catch (...) {
 | 
|---|
 | 344 |     cerr << "\n tgenw: some other exception was caught ! " << endl;
 | 
|---|
 | 345 |   }
 | 
|---|
 | 346 | 
 | 
|---|
 | 347 |   return(0);
 | 
|---|
 | 348 | }
 | 
|---|