Changeset 3792 in Sophya


Ignore:
Timestamp:
Jun 28, 2010, 6:06:00 PM (15 years ago)
Author:
ansari
Message:

Ajout du programme de calcul et sauvegarde reponse interfero, Reza 28/06/2010

Location:
trunk/Cosmo/RadioBeam
Files:
3 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cosmo/RadioBeam/README

    r3788 r3792  
    1313
    1414A.1/ (u-v) plane coverage and Noise-P(k) computation for different interferometer configuration
    15   - pknoise.cc : main program for Noise-P(k) computation
     15  - pknoise.cc , repicon.cc : main program for Noise-P(k) computation and interferometer response computation
    1616  - plpkn.pic : spiapp script for plotting pknoise.cc program output
    1717A.2/ power spectrum computation and foreground/radio source
     
    2828  - lobe.h lobe.cc : 2D (k_alpha, k_delta) beam effect on 3D sky cubes
    2929  - specpk.h specpk.cc : 3D power spectrum computation classes 
     30  - interfconfigs.h interfconfigs.c : functions creating different dish arrays / cylinder configuration
    3031  - mdish.h mdish.cc : Classes for representing Multi-Dish interferometer configurations
    3132  - radutil.h radutil.cc : utilitaire de conversion a 21 cm
  • trunk/Cosmo/RadioBeam/applobe.cc

    r3789 r3792  
    33    R. Ansari , C. Magneville - Juin 2010
    44
    5   Usage: applobe In3DPPFName Out3DPPFName [ResmapleFactor=0.5,0.333...] [TargetBeamArcmin]
     5  Usage: applobe In3DPPFName Out3DPPFName [ResmapleFactor=0.5,0.333...] [TargetBeamDoL]
    66---------------------------------------------------------------  */
    77
     
    5050
    5151  if (narg < 3) {
    52     cout << "Usage: applobe In3DPPFName Out3DPPFName [ResmapleFactor=0.5,0.333...] [TargetBeamArcmin]\n" << endl;
     52    cout << "Usage: applobe In3DPPFName Out3DPPFName [ResmapleFactor=0.5,0.333...] [TargetBeamDoL]\n" << endl;
    5353    return 1;
    5454  }
     
    6464  }
    6565  bool fgcorrbeam=false;
    66   double tbeamarcmin=15.;
     66  double tbeamDoL=135;
    6767  if (narg>4) {
    68     tbeamarcmin=atof(arg[4]);
    69     if (tbeamarcmin>1.e-3)  fgcorrbeam=true;
     68    tbeamDoL=atof(arg[4]);
     69    if (tbeamDoL>1)  fgcorrbeam=true;
    7070  }
    7171
    7272  int rc = 91;
    7373
    74   cout << " ====== applobe :   Input NVSS catalog name= " << inname << " OutName=" << outname;
     74  cout << " ====== applobe :   Input skycube name= " << inname << " OutName=" << outname;
    7575  bool fginmap=true;
    7676  try {
     
    105105
    106106    if (fgcorrbeam) {
    107       double DoL = 1.22/ArcminToRadian(tbeamarcmin);
     107      double DoL = tbeamDoL;
     108      double tbeamarcmin = RadianToDegree(1.22/DoL)*60.;
    108109      Four2DResponse tbeam(2, DoL, DoL );
    109       cout << "applobe[3]: calling Correct2RefLobe() with target beam:" << tbeamarcmin
    110            << " arcmin -> D/Lambda=" << DoL << endl;
     110      cout << "applobe[3]: calling Correct2RefLobe() with target beam D/Lambda=" << DoL
     111           << " -> arcmin " << tbeamarcmin << endl;
    111112      beam.Correct2RefLobe(tbeam, incube, dx, dy, Freq0MHz, dfreq);
    112113    }
  • trunk/Cosmo/RadioBeam/calcpk2.cc

    r3789 r3792  
    6565   
    6666    bool fgcorrbeam=true;
    67     double tbeamarcmin=15.;
     67    double tbeamDoL=135;
    6868    if (narg>7) {
    69       tbeamarcmin=atof(arg[7]);
    70       if (tbeamarcmin<1.e-6)  fgcorrbeam=false;
     69      tbeamDoL=atof(arg[7]);
     70      if (tbeamDoL<1.)  fgcorrbeam=false;
    7171    }
    7272    bool fgclnsrc=true;
     
    120120    double lambda = conv.getLambda();
    121121    Four2DResponse arep(2, InterfArrayDiametre/lambda, InterfArrayDiametre/lambda, lambda);
    122     double DoL = 1.22/ArcminToRadian(tbeamarcmin);
     122    double DoL = tbeamDoL;
     123    double tbeamarcmin = RadianToDegree(1.22/DoL)*60.;
    123124    Four2DResponse tbeam(2, DoL, DoL );
    124125    ForegroundCleaner  cleaner(arep, tbeam, skycube);
    125126    if (fgcorrbeam) {
    126       cout << "calcpk2[3.a] : calling cleaner.BeamCorrections() for target beam (" << tbeamarcmin << " arcmin)"
    127            << " Diam/Lambda=" << DoL << endl;
     127      cout << "calcpk2[3.a] : calling cleaner.BeamCorrections() for target beam D/Lambda=" << DoL
     128           << "  -> arcmin " << tbeamarcmin << endl;
    128129      cleaner.BeamCorrections();
    129130    }
  • trunk/Cosmo/RadioBeam/makefile

    r3789 r3792  
    66include $(SOPHYABASE)/include/sophyamake.inc
    77
    8 all : pknoise calcpk calcpk2 syncube srcat2cube tjyk applobe
     8all : pknoise repicon calcpk calcpk2 syncube srcat2cube tjyk applobe
    99
    1010clean :
    1111        rm Objs/*
    1212
    13 PKGOLIST =  Objs/fgndsub.o Objs/lobe.o Objs/specpk.o Objs/mdish.o Objs/qhist.o Objs/radutil.o
    14 PKGHLIST =  fgndsub.h lobe.h specpk.h mdish.h qhist.h radutil.h cubedef.h
     13PKGOLIST =  Objs/fgndsub.o Objs/lobe.o Objs/specpk.o Objs/mdish.o Objs/interfconfigs.o Objs/qhist.o Objs/radutil.o
     14PKGHLIST =  fgndsub.h lobe.h specpk.h mdish.h interfconfigs.h qhist.h radutil.h cubedef.h
    1515
    1616### les executables
    1717pknoise : Objs/pknoise
    1818        echo 'makefile : pknoise made'
     19
     20repicon : Objs/repicon
     21        echo 'makefile : repicon made'
    1922
    2023calcpk : Objs/calcpk
     
    4245Objs/pknoise.o : pknoise.cc $(PKGHLIST)
    4346        $(CXXCOMPILE) -o Objs/pknoise.o pknoise.cc
     47
     48### programme repicon  (calcul et sauvegarde de la reponse de l'interferometre dans le plan (u,v)
     49Objs/repicon : Objs/repicon.o $(PKGOLIST)
     50        $(CXXLINK) -o Objs/repicon Objs/repicon.o $(PKGOLIST)  $(SOPHYAEXTSLBLIST)
     51
     52Objs/repicon.o : repicon.cc $(PKGHLIST)
     53        $(CXXCOMPILE) -o Objs/repicon.o repicon.cc
    4454
    4555### programme calcpk
     
    96106        $(CXXCOMPILE) -o Objs/mdish.o mdish.cc
    97107
     108Objs/interfconfigs.o : interfconfigs.cc $(PKGHLIST)
     109        $(CXXCOMPILE) -o Objs/interfconfigs.o interfconfigs.cc
     110
    98111Objs/lobe.o : lobe.cc $(PKGHLIST)
    99112        $(CXXCOMPILE) -o Objs/lobe.o lobe.cc
  • trunk/Cosmo/RadioBeam/mdish.cc

    r3789 r3792  
    5959// -- Four2DRespTable : Reponse tabulee instrumentale ds le plan k_x,k_y (angles theta,phi)
    6060//---------------------------------------------------------------
    61 Four2DRespTable::Four2DRespTable(Histo2D const & hrep, double d)
    62   : Four2DResponse(0,d,d) , hrep_(hrep)
     61Four2DRespTable::Four2DRespTable()
     62  : Four2DResponse(0,1.,1.)
     63{
     64}
     65
     66Four2DRespTable::Four2DRespTable(Histo2D const & hrep, double d, double lambda)
     67  : Four2DResponse(0,d,d,lambda) , hrep_(hrep)
    6368{
    6469}
     
    7580}
    7681
     82void Four2DRespTable::writeToPPF(string flnm)
     83{
     84  DVList dvinfo;
     85  dvinfo["DoL"] = dx_;
     86  dvinfo["LambdaRef"] = lambdaref_;
     87  dvinfo["Lambda"] = lambda_;
     88  POutPersist po(flnm);
     89  po << hrep_;
     90  po << dvinfo;
     91}
     92
     93void Four2DRespTable::readFromPPF(string flnm)
     94{
     95  PInPersist pin(flnm);
     96  DVList dvinfo;
     97  pin >> hrep_;
     98  pin >> dvinfo;
     99  dx_ = dy_ = dvinfo["DoL"];
     100  setLambdaRef((double)dvinfo["LambdaRef"]);
     101  setLambda((double)dvinfo["Lambda"]);
     102}
     103
     104
     105
    77106//---------------------------------------------------------------
    78107// -- Four2DRespRatio : rapport de la reponse entre deux objets Four2DResponse
     
    87116  double ra = a_.Value(kx,ky);
    88117  double rb = b_.Value(kx,ky);
    89   if (rb<divzthr_) {
    90     if (ra<rb)  return 0.;
    91     else rb=divzthr_;
    92   }
     118  if (ra<rb) {
     119    if (rb>1.e-39)  return(ra/rb); 
     120    else return 0.;
     121  }
     122  if (rb<divzthr_)  rb=divzthr_;
    93123  return (ra/rb);
    94124}
  • trunk/Cosmo/RadioBeam/mdish.h

    r3789 r3792  
    6161class Four2DRespTable : public  Four2DResponse {
    6262public:
     63  // Constructeur sans argument, utilise pour lire depuis un fichier
     64  Four2DRespTable();
    6365  // On donne dx=D/lambda=Dx/lambda , dy=Dy/lambda
    64   Four2DRespTable(Histo2D const & hrep, double d);
     66  Four2DRespTable(Histo2D const & hrep, double d, double lambda=1.);
    6567  // Return the 2D response for wave vector (kx,ky)
    6668  virtual double Value(double kx, double ky);
     69
     70  void writeToPPF(string flnm);
     71  void readFromPPF(string flnm);
     72
    6773  Histo2D hrep_;
    6874};
  • trunk/Cosmo/RadioBeam/pknoise.cc

    r3769 r3792  
    99#include "mdish.h"
    1010#include "specpk.h"
     11#include "interfconfigs.h"
     12
    1113#include "histinit.h"
    1214// #include "fiosinit.h"
     
    5557};
    5658
    57 //-----------------------------------------------------------------------------------
    58 //  Fonctions de creation de configuration d'interfero avec des dishs
    59 //-----------------------------------------------------------------------------------
    60 
    61 vector<Dish> CreateFilledSqConfig(int nd, double Ddish=5., double Eta=0.9);
    62 vector<Dish> CreateSemiFilledSqConfig(int nd, double Ddish=5., double Eta=0.9);
    63 vector<Dish> CreateConfigA(double Ddish=5., double Eta=0.9);
    64 vector<Dish> CreateConfigB(double Ddish=5., double Eta=0.9);
    65 vector<Dish> CreateConfigC(double Ddish=5., double Eta=0.9);
    66 vector<Dish> CreateConfigD(double Ddish=5., double Eta=0.9);
    67 
    68 
    69 vector<Dish> CreateFilledCylConfig(int ncyl,  int nRL, double cylW=10., double cylRL=0.5,
    70                                    double etaW=0.9, double etaRL=0.9, bool fgscid=true);
    7159
    7260
     
    352340
    353341
    354 //-----------------------------------------------------------------------------------
    355 //-----------------------------------------------------------------------------------
    356 //  Fonctions de creation de configuration d'interfero avec des dishs
    357 //-----------------------------------------------------------------------------------
    358 /* --Fonction -- */
    359 vector<Dish> CreateFilledSqConfig(int nd, double Ddish, double Eta)
    360 {
    361   vector<Dish>  vd;
    362   int cnt=0;
    363   for(int i=0; i<nd; i++)
    364     for(int j=0; j<nd; j++) {
    365       cnt++;
    366       vd.push_back(Dish(cnt, i*Ddish, j*Ddish, Eta*Ddish));
    367     }
    368   cout << ">>>CreateFilledSqConfig(" << nd << "," << Ddish << "," << Eta << ") ---> NDishes=" << vd.size() << endl;
    369  
    370   return vd;
    371 }
    372 
    373 /* --Fonction -- */
    374 vector<Dish> CreateSemiFilledSqConfig(int nd, double Ddish, double Eta)
    375 {
    376   vector<Dish>  vd;
    377   int cnt=0;
    378   int fgst=1;
    379   for(int i=0; i<nd; i++) {
    380     fgst = (fgst+1)%2;
    381     for(int j=0; j<nd; j++) {
    382       if (j%2==fgst)  continue;
    383       cnt++;
    384       vd.push_back(Dish(cnt, i*Ddish, j*Ddish, Eta*Ddish));
    385     }
    386   }
    387   cout << ">>>CreateSemiFilledSqConfig(" << nd << "," << Ddish << "," << Eta << ") ---> NDishes=" << vd.size() << endl;
    388  
    389   return vd;
    390 }
    391 
    392 /* --Fonction -- */
    393 vector<Dish> CreateConfigA(double Ddish, double Eta)
    394 {
    395   vector<Dish>  vd;
    396   int cnt=0;
    397   for(int i=0; i<18; i++) {
    398     cnt++; vd.push_back(Dish(cnt, i*Ddish,0.,Eta*Ddish));
    399     cnt++; vd.push_back(Dish(cnt, i*Ddish, 17.*Ddish,Eta*Ddish));
    400     if ((i>0)&&(i<17)) {
    401       cnt++; vd.push_back(Dish(cnt,0.,i*Ddish,Eta*Ddish));
    402       cnt++; vd.push_back(Dish(cnt,17.*Ddish,i*Ddish,Eta*Ddish));
    403     }
    404   }
    405   cout << ">>>CreateConfigA(" << Ddish << "," << Eta << ") ---> NDishes=" << vd.size() << endl;
    406   return vd;
    407 }
    408 
    409 /* --Fonction -- */
    410 vector<Dish> CreateConfigB(double Ddish, double Eta)
    411 {
    412   vector<Dish>  vd;
    413   int cnt=0;
    414   /*
    415   for(int i=0; i<13; i++) {
    416     cnt++; vd.push_back(Dish(cnt, i*Ddish,0.,Eta*Ddish));
    417     cnt++; vd.push_back(Dish(cnt, i*Ddish, 12.*Ddish,Eta*Ddish));
    418     if ((i>0)&&(i<12)) {
    419       cnt++; vd.push_back(Dish(cnt,0.,i*Ddish,Eta*Ddish));
    420       cnt++; vd.push_back(Dish(cnt,12.*Ddish,i*Ddish,Eta*Ddish));
    421     }
    422   }
    423   for(int i=0; i<5; i++) {
    424     cnt++; vd.push_back(Dish(cnt, (i+4)*Ddish,4.*Ddish,Eta*Ddish));
    425     cnt++; vd.push_back(Dish(cnt, (i+4)*Ddish, 8.*Ddish,Eta*Ddish));
    426     if ((i>0)&&(i<4)) {
    427       cnt++; vd.push_back(Dish(cnt,4.*Ddish,(i+4)*Ddish,Eta*Ddish));
    428       cnt++; vd.push_back(Dish(cnt,8.*Ddish,(i+4)*Ddish,Eta*Ddish));
    429     }
    430   }
    431   */
    432   for(int i=0; i<11; i++) {
    433     cnt++; vd.push_back(Dish(cnt, i*Ddish,0.,Eta*Ddish));
    434     cnt++; vd.push_back(Dish(cnt, i*Ddish, 10.*Ddish,Eta*Ddish));
    435     if ((i>0)&&(i<10)) {
    436       cnt++; vd.push_back(Dish(cnt,0.,i*Ddish,Eta*Ddish));
    437       cnt++; vd.push_back(Dish(cnt,10.*Ddish,i*Ddish,Eta*Ddish));
    438     }
    439   }
    440   for(int i=0; i<7; i++) {
    441     cnt++; vd.push_back(Dish(cnt, (i+2)*Ddish, 2.*Ddish,Eta*Ddish));
    442     cnt++; vd.push_back(Dish(cnt, (i+2)*Ddish, 8.*Ddish,Eta*Ddish));
    443     if ((i>0)&&(i<6)) {
    444       cnt++; vd.push_back(Dish(cnt,2.*Ddish,(i+2)*Ddish,Eta*Ddish));
    445       cnt++; vd.push_back(Dish(cnt,8.*Ddish,(i+2)*Ddish,Eta*Ddish));
    446     }
    447   }
    448   for(int i=0; i<3; i++) {
    449     cnt++; vd.push_back(Dish(cnt, (i+4)*Ddish, 4.*Ddish,Eta*Ddish));
    450     cnt++; vd.push_back(Dish(cnt, (i+4)*Ddish, 6.*Ddish,Eta*Ddish));
    451     if ((i>0)&&(i<2)) {
    452       cnt++; vd.push_back(Dish(cnt,4.*Ddish,(i+4)*Ddish,Eta*Ddish));
    453       cnt++; vd.push_back(Dish(cnt,6.*Ddish,(i+4)*Ddish,Eta*Ddish));
    454     }
    455   }
    456 
    457 
    458   cout << ">>>CreateConfigB(" << Ddish << "," << Eta << ") ---> NDishes=" << vd.size() << endl;
    459   return vd;
    460 }
    461 
    462 
    463 /* --Fonction -- */
    464 vector<Dish> CreateConfigC(double Ddish, double Eta)
    465 {
    466   vector<int_4> lesx, lesy;
    467  
    468   int max = 16;
    469   for(int i=0; i<4; i++)
    470     for(int j=0; j<4; j++) {
    471       lesx.push_back(i); lesy.push_back(j);
    472       lesx.push_back(max-i); lesy.push_back(max-j);
    473       lesx.push_back(i); lesy.push_back(max-j);
    474       lesx.push_back(max-i); lesy.push_back(j);
    475     }
    476  
    477   for(int i=5; i<12; i+=2) {
    478     lesx.push_back(i); lesy.push_back(0);
    479     lesx.push_back(i); lesy.push_back(max);
    480     lesx.push_back(0); lesy.push_back(i);
    481     lesx.push_back(max); lesy.push_back(i);
    482   }
    483  
    484   for(int i=4; i<=12; i+=2)
    485     for(int j=4; j<=12; j+=2) {
    486       lesx.push_back(i); lesy.push_back(j);
    487     }
    488  
    489   for(int i=5; i<=11; i+=2) {
    490     lesx.push_back(i); lesy.push_back(4);
    491     lesx.push_back(i); lesy.push_back(max-4);
    492     lesx.push_back(4); lesy.push_back(i);
    493     lesx.push_back(max-4); lesy.push_back(i);
    494   }
    495  
    496   EnumeratedSequence esx,esy;
    497   esx = 2,5;
    498   esy = 5,2;
    499  
    500   for(int k=0; k<esx.Size(); k++) {
    501     int_4 ix=esx.Value(k);
    502     int_4 iy=esy.Value(k);
    503    
    504     lesx.push_back(ix); lesy.push_back(iy);
    505     lesx.push_back(max-ix); lesy.push_back(iy);
    506     lesx.push_back(ix); lesy.push_back(max-iy);
    507     lesx.push_back(max-ix); lesy.push_back(max-iy);
    508   }
    509  cout << "CreateConfigC/Debug: -checkSize/lesx=" << lesx.size() << " -Check/lesy=" << lesy.size() << endl;
    510  
    511  vector<Dish> vd;
    512  int cnt=0;
    513  for(size_t i=0; i<lesx.size(); i++) {
    514    cnt++; vd.push_back(Dish(cnt, ((double)lesx[i])*Ddish,((double)lesy[i])*Ddish,Eta*Ddish));
    515  }
    516 
    517  cout << ">>>CreateConfigC(" << Ddish << "," << Eta << ") ---> NDishes=" << vd.size() << endl;
    518 
    519  return vd;
    520 
    521 }
    522 /* --Fonction -- */
    523 vector<Dish> CreateConfigD(double Ddish, double Eta)
    524 {
    525 EnumeratedSequence es;
    526 es = 0,1,3,4,6,8,10,12,14,16,18,20,22,24,25,27,28;
    527 vector<int_4> lesx, lesy;
    528 for(int k=0; k<es.Size(); k++) {
    529   lesx.push_back(es.Value(k));   lesy.push_back(0);
    530   lesx.push_back(es.Value(k));   lesy.push_back(28);
    531 }
    532 for(int k=1; k<es.Size()-1; k++) {
    533   lesy.push_back(es.Value(k));   lesx.push_back(0);
    534   lesy.push_back(es.Value(k));   lesx.push_back(28);
    535 }
    536 for(int k=1; k<=5; k++) {
    537   lesy.push_back(k);   lesx.push_back(5);
    538   lesy.push_back(28-k);   lesx.push_back(28-5);
    539   if (k!=5) {
    540     lesx.push_back(k);   lesy.push_back(5);
    541     lesx.push_back(28-k);   lesy.push_back(28-5);
    542   }
    543 
    544   lesy.push_back(k);   lesx.push_back(28-5);
    545   lesy.push_back(28-k);   lesx.push_back(5);
    546   if (k!=5) {
    547     lesx.push_back(28-k);   lesy.push_back(5);
    548     lesx.push_back(k);   lesy.push_back(28-5);
    549   }
    550 }
    551 
    552 for(int k=6; k<=13; k++) {
    553   lesy.push_back(k);   lesx.push_back(k);
    554   lesy.push_back(28-k);   lesx.push_back(28-k);
    555   lesy.push_back(k);   lesx.push_back(28-k);
    556   lesy.push_back(28-k);   lesx.push_back(k);
    557 }
    558 
    559 
    560 lesx.push_back(14); lesy.push_back(14);
    561 
    562 EnumeratedSequence esx,esy;
    563 esx = 1,2,4;
    564 esy = 12,11,13;
    565 
    566 for(int k=0; k<esx.Size(); k++) {
    567   int_4 ix=esx.Value(k);
    568   int_4 iy=esy.Value(k);
    569   lesx.push_back(ix); lesy.push_back(iy);
    570   lesx.push_back(28-ix); lesy.push_back(iy);
    571   lesx.push_back(ix); lesy.push_back(28-iy);
    572   lesx.push_back(28-ix); lesy.push_back(28-iy);
    573  
    574   lesy.push_back(ix); lesx.push_back(iy);
    575   lesy.push_back(28-ix); lesx.push_back(iy);
    576   lesy.push_back(ix); lesx.push_back(28-iy);
    577   lesy.push_back(28-ix); lesx.push_back(28-iy);
    578  } 
    579 for(int k=5; k<=13; k+=2) {
    580   lesy.push_back(k);   lesx.push_back(14);
    581   lesy.push_back(28-k);   lesx.push_back(14);
    582   lesy.push_back(14);   lesx.push_back(k);
    583   lesy.push_back(14);   lesx.push_back(28-k);
    584 }
    585 
    586  cout << "CreateConfigB/Debug: -checkSize/lesx=" << lesx.size() << " -Check/lesy=" << lesy.size() << endl;
    587  
    588  vector<Dish> vd;
    589  int cnt=0;
    590  for(size_t i=0; i<lesx.size(); i++) {
    591    cnt++; vd.push_back(Dish(cnt, ((double)lesx[i])*Ddish,((double)lesy[i])*Ddish,Eta*Ddish));
    592  }
    593 
    594  cout << ">>>CreateConfigD(" << Ddish << "," << Eta << ") ---> NDishes=" << vd.size() << endl;
    595 
    596  return vd;
    597 }
    598 
    599 /* --Fonction -- */
    600 vector<Dish> CreateFilledCylConfig(int ncyl,  int nRL, double cylW, double cylRL, double etaW, double etaRL, bool fgscid)
    601 {
    602   vector<Dish>  vd;
    603   int cnt=0;
    604 
    605   for(int i=0; i<ncyl; i++)
    606     for(int j=0; j<nRL; j++) {
    607       cnt++;
    608       int rid = (fgscid) ? i+1 : cnt;
    609       vd.push_back(Dish(rid, i*cylW, j*cylRL, etaW*cylW, etaRL*cylRL));
    610     }
    611   cout << ">>>CreateFilledCylConfig(" << ncyl << "," << nRL << "," << cylW << "," << cylRL << ","
    612        << etaW << "," << etaRL << "," << ((fgscid)?" RId=CylNum":"Cnt")
    613        << ") ---> NDishes=" << vd.size() << endl;
    614 
    615   return vd;
    616 }
Note: See TracChangeset for help on using the changeset viewer.