Changeset 295 in Sophya for trunk/SophyaPI/PIext/servnobjm.cc


Ignore:
Timestamp:
May 13, 1999, 12:12:51 PM (26 years ago)
Author:
ercodmgr
Message:

Mise aux "normes" version DPC/Planck - Gestion des objets a travers

un adaptateur/interface NTuple par NamedObjMgr.
Enregistrement d'objets et de l'adaptateur (I/O PPersist, display, ...)
par ServNobjMgr .... Reza 13/05/99

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaPI/PIext/servnobjm.cc

    r293 r295  
    33#include <ctype.h>
    44
     5#include <typeinfo>
    56#include <iostream.h>
    67#include <string>
     
    1415
    1516#include "strutil.h"
    16 #include "datatypes.h"
    1717
    1818#include "nobjmgr.h"
     
    2020#include "pistdimgapp.h"
    2121
    22 #include "pclassids.h"
    2322#include "histos.h"
    2423#include "histos2.h"
    2524#include "ntuple.h"
    2625#include "hisprof.h"
    27 #include "generaldata.h"
    28 
    29 #include "cimage.h"
    30 #include "cvector.h"
    31 #include "matrix.h"
    32 
    33 //  Si le module StarReco++ a ete compile (Pour les StarList, Transfo, etc ...
    34 #ifdef SANS_EVOLPLANCK
    35 #include "stlist.h"
    36 #include "star.h"
    37 #endif
     26
    3827
    3928
     
    5544
    5645/* --Methode-- */
    57 void Services2NObjMgr::Nobj_ComputeExpressions(PPersist* obj, string& expx, string& expy, string& expz,
     46void Services2NObjMgr::RegisterClass(AnyDataObj* o, NObjMgrAdapter* oa)
     47{
     48ObjAdaptList::iterator it;
     49for(it = objadaplist.begin(); it != objadaplist.end(); it++)
     50    if (typeid(*o) == typeid(*((*it).obj)))  THROW(dupIdErr);
     51
     52dataobj_adapter oba;
     53oba.obj = o;
     54oba.obja = oa;
     55objadaplist.push_back(oba);
     56}
     57
     58/* --Methode-- */
     59NObjMgrAdapter* Services2NObjMgr::GetAdapter(AnyDataObj* o)
     60{
     61ObjAdaptList::iterator it;
     62for(it = objadaplist.begin(); it != objadaplist.end(); it++)
     63  if (typeid(*o) == typeid(*((*it).obj)))  return((*it).obja->Clone(o));
     64return(new NObjMgrAdapter(o));
     65}
     66
     67/* --Methode-- */
     68void Services2NObjMgr::Nobj_ComputeExpressions(NObjMgrAdapter* obja, string& expx, string& expy, string& expz,
    5869                          string& expwt, string& expcut, NTuple* nt, Histo* h1, Histo2D* h2, HProf* hp)
    5970{
    60 int cid = obj->ClassId();
    61 
    62 string vardec;
    63 switch (cid) {
    64   case ClassId_Vector :
    65     vardec = "double i,val; \n";
    66     vardec += "i = _zz61qq_[0];  val = _zz61qq_[1]; \n";
    67     break;
    68 
    69   case ClassId_Matrix :
    70     vardec = "double i,j,val; \n";
    71     vardec += "i = _zz61qq_[0];  j = _zz61qq_[1];  val = _zz61qq_[2]; \n";
    72     break;
    73 
    74   case ClassId_Histo1D :
    75   case ClassId_HProf :
    76     vardec = "double i,x,val,err; \n";
    77     vardec += "i = _zz61qq_[0];  x = _zz61qq_[1];  val = _zz61qq_[2];  err = _zz61qq_[3]; \n";
    78     break;
    79 
    80   case ClassId_Histo2D :
    81     vardec = "double i,j,x,y,val,err; \n";
    82     vardec += "i = _zz61qq_[0];  j = _zz61qq_[1]; \n"; 
    83     vardec += "x = _zz61qq_[2];  y = _zz61qq_[3]; \n"; 
    84     vardec += "val = _zz61qq_[4]; err = _zz61qq_[5]; \n";
    85     break;
    86 
    87   case ClassId_Image :
    88   case ClassId_Image + kuint_1 :
    89   case ClassId_Image + kint_1 :
    90   case ClassId_Image + kr_8 :
    91   case ClassId_Image + kuint_4 :
    92   case ClassId_Image + kuint_2 :
    93   case ClassId_Image + kint_2 :
    94   case ClassId_Image + kint_4 :
    95   case ClassId_Image + kr_4 :
    96     vardec = "double x,y,pix,i,j,val; \n";
    97     vardec += "x = i = _zz61qq_[0];  y = j = _zz61qq_[1];  pix = val = _zz61qq_[2]; \n";
    98     break;
    99 
    100 #ifdef SANS_EVOLPLANCK
    101   case ClassId_StarList :
    102     vardec = "double x,y,flux,fond; \n";
    103     vardec += "x = _zz61qq_[0];  y = _zz61qq_[1];  flux = _zz61qq_[2];  fond =  _zz61qq_[3]; \n";
    104     break;
    105 #endif
    106 
    107   case ClassId_NTuple :
    108     vardec = ((NTuple*)obj)->VarList_C("_zz61qq_");
    109     break;
    110 
    111   case ClassId_GeneralFitData :
    112     vardec = ((GeneralFitData*)obj)->VarList_C("_zz61qq_");
    113     break;
    114 
    115   default :
    116     cerr << "NamedObjMgr_ComputeExpressions() Error , N/A to " << PClassIdToClassName(cid) << endl;
    117     return;
    118   }
     71if (obja == NULL) return;
     72NTupleInterface* objnt = obja->GetNTupleInterface();
     73if (objnt == NULL)  return;
     74string  vardec = objnt->VarList_C("_zz61qq_");
    11975
    12076PlotExprFunc f = LinkExprFunc(vardec, expx, expy, expz, expwt, expcut);
     
    12480  }
    12581
    126 float x[10], xnt[10];
     82double xnt[10];
     83float  fxnt[10];
    12784
    12885int i,j,k;
    129 for(i=0; i<10; i++) x[i] = xnt[i] = 0.;
    130 
    131 TRY {                                 
    132 switch (cid) {
    133   case ClassId_Vector :
    134     {
    135     Vector* vv = (Vector*)obj;
    136     for(k=0; k<vv->NElts(); k++) {
    137       x[0] = k;   x[1] = (*vv)(k);
    138       if (f(x, xnt, xnt+1, xnt+2, xnt+3) != 0) {
    139         if (nt) nt->Fill(xnt);
    140         if (h1) h1->Add(xnt[0], xnt[3]);
    141         if (h2) h2->Add(xnt[0], xnt[1], xnt[3]);
    142         if (hp) hp->Add(xnt[0], xnt[1], xnt[3]);
    143         }
     86for(i=0; i<10; i++) xnt[i] = 0.;
     87
     88TRY  {
     89  double* xn;
     90  for(k=0; k<objnt->NbLines(); k++)    {
     91    xn = objnt->GetLineD(k);
     92    if (f(xn, xnt, xnt+1, xnt+2, xnt+3) != 0) {
     93      if (nt) {
     94         for(i=0; i<4; i++) fxnt[i] = xnt[i];
     95         nt->Fill(fxnt);
     96         }
     97      if (h1) h1->Add(xnt[0], xnt[3]);
     98      if (h2) h2->Add(xnt[0], xnt[1], xnt[3]);
     99      if (hp) hp->Add(xnt[0], xnt[1], xnt[3]);
    144100      }
    145101    }
    146     break;
    147 
    148   case ClassId_Matrix :
    149     {
    150     Matrix* mm = (Matrix*)obj;
    151     for(j=0; j<mm->NCol(); j++)
    152       for(i=0; i<mm->NRows(); i++) {
    153       x[0] = i; x[1] = j;  x[2] = (*mm)(i,j);
    154       if (f(x, xnt, xnt+1, xnt+2, xnt+3) != 0) {
    155         if (nt) nt->Fill(xnt);
    156         if (h1) h1->Add(xnt[0], xnt[3]);
    157         if (h2) h2->Add(xnt[0], xnt[1], xnt[3]);
    158         if (hp) hp->Add(xnt[0], xnt[1], xnt[3]);
    159         }
    160       }
    161     }
    162     break;
    163 
    164   case ClassId_Histo1D :
    165   case ClassId_HProf :
    166     {
    167     Histo* hh = (Histo*)obj;
    168     for(k=0; k<hh->NBins(); k++) {
    169       x[0] = k;  x[1] = hh->BinCenter(k);   
    170       x[2] = (*hh)(k);  x[3] = hh->Error(k);
    171       if (f(x, xnt, xnt+1, xnt+2, xnt+3) != 0) {
    172         if (nt) nt->Fill(xnt);
    173         if (h1) h1->Add(xnt[0], xnt[3]);
    174         if (h2) h2->Add(xnt[0], xnt[1], xnt[3]);
    175         if (hp) hp->Add(xnt[0], xnt[1], xnt[3]);
    176         }
    177       }
    178     }
    179     break;
    180 
    181   case ClassId_Histo2D :
    182     {
    183     Histo2D* hh = (Histo2D*)obj;
    184     for(j=0; j<hh->NBinY(); j++)
    185       for(i=0; i<hh->NBinX(); i++) {
    186       x[0] = i;   x[1] = j;
    187       hh->BinCenter(i,j,x[2],x[3]);
    188       x[4] = (*hh)(i,j);  x[5] = hh->Error(i, j);
    189       if (f(x, xnt, xnt+1, xnt+2, xnt+3) != 0) {
    190         if (nt) nt->Fill(xnt);
    191         if (h1) h1->Add(xnt[0], xnt[3]);
    192         if (h2) h2->Add(xnt[0], xnt[1], xnt[3]);
    193         if (hp) hp->Add(xnt[0], xnt[1], xnt[3]);
    194         }
    195       }
    196     }
    197     break;
    198 
    199 
    200   case ClassId_Image :
    201   case ClassId_Image + kuint_1 :
    202   case ClassId_Image + kint_1 :
    203   case ClassId_Image + kr_8 :
    204   case ClassId_Image + kuint_4 :
    205   case ClassId_Image + kuint_2 :
    206   case ClassId_Image + kint_2 :
    207   case ClassId_Image + kint_4 :
    208   case ClassId_Image + kr_4 :
    209     {
    210     RzImage* img = (RzImage*)obj;
    211     for(j=0; j<img->YSize(); j++)
    212       for(i=0; i<img->XSize(); i++) {
    213         x[0] = i;  x[1] = j;  x[2] = img->FValue(i, j);
    214         if (f(x, xnt, xnt+1, xnt+2, xnt+3) != 0) {
    215           if (nt) nt->Fill(xnt);
    216           if (h1) h1->Add(xnt[0], xnt[3]);
    217           if (h2) h2->Add(xnt[0], xnt[1], xnt[3]);
    218           if (hp) hp->Add(xnt[0], xnt[1], xnt[3]);
    219           }
    220       }
    221     }
    222     break;
    223 
    224 #ifdef SANS_EVOLPLANCK
    225   case ClassId_StarList :
    226     {
    227     StarList* stl = (StarList*)obj;
    228     BStar *sti;
    229     for(k=0; k<stl->NbStars(); k++) {
    230       sti = stl->Star(k);
    231       if ( (!sti) || !(sti->Nice(BStar::flagOK)) )  continue;
    232       x[0] = sti->PosX();   x[1] = sti->PosY();
    233       x[2] = sti->Flux();   x[3] =  sti->Fond(); 
    234       if (f(x, xnt, xnt+1, xnt+2, xnt+3) != 0) {
    235         if (nt) nt->Fill(xnt);
    236         if (h1) h1->Add(xnt[0], xnt[3]);
    237         if (h2) h2->Add(xnt[0], xnt[1], xnt[3]);
    238         if (hp) hp->Add(xnt[0], xnt[1], xnt[3]);
    239         }
    240       }
    241     }
    242     break;
    243 #endif
    244 
    245   case ClassId_NTuple :
    246     {
    247     NTuple* ntp = (NTuple*)obj;
    248     r_4* xn;
    249     for(k=0; k<ntp->NEntry(); k++)    {
    250       xn = ntp->GetVec(k);
    251       if (f(xn, xnt, xnt+1, xnt+2, xnt+3) != 0) {
    252         if (nt) nt->Fill(xnt);
    253         if (h1) h1->Add(xnt[0], xnt[3]);
    254         if (h2) h2->Add(xnt[0], xnt[1], xnt[3]);
    255         if (hp) hp->Add(xnt[0], xnt[1], xnt[3]);
    256         }
    257       }
    258     }
    259     break;
    260 
    261   case ClassId_GeneralFitData :
    262     {
    263     GeneralFitData* data = (GeneralFitData*)obj;
    264     r_4* xn;
    265     int iok = 2*data->NVar()+2;
    266     for(k=0; k<data->NData(); k++) {
    267       xn = data->GetVecR4(k);
    268       if(xn[iok]<0.001) continue;
    269       if (f(xn, xnt, xnt+1, xnt+2, xnt+3) != 0) {
    270         if (nt) nt->Fill(xnt);
    271         if (h1) h1->Add(xnt[0], xnt[3]);
    272         if (h2) h2->Add(xnt[0], xnt[1], xnt[3]);
    273         if (hp) hp->Add(xnt[0], xnt[1], xnt[3]);
    274       }
    275     }
    276     }
    277     break;
    278 
    279   default :
    280     cout << "NamedObjMgr_ComputeExpressions() Erreur: N/A to  " << PClassIdToClassName(cid) << endl;
    281     return;
    282   }
    283 } CATCH(merr) {
     102 }
     103CATCH(merr) {
    284104  fflush(stdout);
    285105  cout << endl;
     
    318138// constitution du fichier a compiler
    319139fputs("#include <math.h> \n", fip);
    320 fputs("int expf_pia_dl_func(float* _zz61qq_, float* _rx_61qq_, float* _ry_61qq_, float* _rz_61qq_, float* _wt_61qq_) \n{\n", fip);
     140fputs("int expf_pia_dl_func(double* _zz61qq_, double* _rx_61qq_, double* _ry_61qq_, double* _rz_61qq_, double* _wt_61qq_) \n{\n", fip);
    321141fprintf(fip,"%s \n", vardec.c_str());
    322142fprintf(fip, "if (!(%s)) { *_rx_61qq_ = *_ry_61qq_ = *_rz_61qq_ = *_wt_61qq_ = 0.;  return(0); } \n", cut.c_str());
     
    465285}
    466286
    467 /* --Methode-- */
    468 char* Services2NObjMgr::PClassIdToClassName(int cid)
    469 {
    470 switch (cid) {
    471   case ClassId_Poly1 :
    472     return("Poly1");
    473   case ClassId_Poly2 :
    474     return("Poly2");
    475   case ClassId_Matrix :
    476     return("Matrix");
    477   case ClassId_Vector :
    478     return("Vector");
    479 
    480   case ClassId_DVList :
    481     return("DVList");
    482 
    483   case ClassId_Histo1D :
    484     return("Histo1D");
    485   case ClassId_Histo2D :
    486     return("Histo2D");
    487   case ClassId_HProf :
    488     return("HProf");
    489   case ClassId_NTuple :
    490     return("NTuple");
    491   case ClassId_GeneralFitData :
    492     return("GeneralFitData");
    493 
    494   case ClassId_Image :
    495     return("RzImage");
    496   case ClassId_Image + kuint_1 :
    497     return("ImageU1");
    498   case ClassId_Image + kint_1 :
    499     return("ImageI1");
    500   case ClassId_Image + kuint_2 :
    501     return("ImageU2");
    502   case ClassId_Image + kint_2 :
    503     return("ImageI2");
    504   case ClassId_Image + kuint_4 :
    505     return("ImageU4");
    506   case ClassId_Image + kint_4 :
    507     return("ImageI4");
    508   case ClassId_Image + kr_4 :
    509     return("ImageR4");
    510   case ClassId_Image + kr_8 :
    511     return("ImageR8");
    512 
    513   case ClassId_ZFidu :
    514     return("ZFidu");
    515 
    516 #ifdef SANS_EVOLPLANCK
    517   case ClassId_StarList :
    518     return("StarList");
    519   case ClassId_Transfo :
    520     return("Transfo");
    521   case ClassId_PSF :
    522     return("PSF");
    523 
    524   case ClassId_Star + BStar_Type :
    525     return("BStar");
    526   case ClassId_Star + RzStar_Type :
    527     return("RzStar");
    528   case ClassId_Star + PSFStar_Type :
    529     return("PSFStar");
    530   case ClassId_Star + MCStar_Type :
    531     return("MCStar");
    532   case ClassId_Star + CircRFixStar_Type :
    533     return("CircRFixStar");
    534   case ClassId_Star + PSFDHStar_Type :
    535     return("PSFDHStar");
    536   case ClassId_Star + PSFSEStar_Type :
    537     return("PSFSEStar");
    538   case ClassId_Star + MCDHStar_Type :
    539     return("MCDHStar");
    540 #endif
    541 
    542 // - Ajout objet PPF
    543   default:
    544     return("Unknown");
    545   }
    546 
    547 
    548 /* --Methode-- */
    549 char* Services2NObjMgr::PClassIdToShortClassName(int cid)
    550 {
    551 switch (cid) {
    552   case ClassId_Poly1 :
    553   case ClassId_Poly2 :
    554     return("Poly");
    555   case ClassId_Matrix :
    556     return("Mtx");
    557   case ClassId_Vector :
    558     return("Vec");
    559   case ClassId_DVList :
    560     return("Dvl");
    561 
    562   case ClassId_Histo1D :
    563     return("H1D");
    564   case ClassId_Histo2D :
    565     return("H2D");
    566   case ClassId_HProf :
    567     return("HPF");
    568   case ClassId_NTuple :
    569     return("NT");
    570   case ClassId_GeneralFitData :
    571     return("GFD");
    572 
    573   case ClassId_Image :
    574   case ClassId_Image + kuint_1 :
    575   case ClassId_Image + kint_1 :
    576   case ClassId_Image + kuint_2 :
    577   case ClassId_Image + kint_2 :
    578   case ClassId_Image + kuint_4 :
    579   case ClassId_Image + kint_4 :
    580   case ClassId_Image + kr_4 :
    581   case ClassId_Image + kr_8 :
    582     return("Img");
    583 
    584   case ClassId_ZFidu :
    585     return("Fidu");
    586 
    587 #ifdef SANS_EVOLPLANCK
    588   case ClassId_StarList :
    589     return("Stl");
    590   case ClassId_Transfo :
    591     return("Tr");
    592   case ClassId_PSF :
    593     return("PSF");
    594 
    595   case ClassId_Star + BStar_Type :
    596   case ClassId_Star + RzStar_Type :
    597   case ClassId_Star + PSFStar_Type :
    598   case ClassId_Star + MCStar_Type :
    599   case ClassId_Star + CircRFixStar_Type :
    600   case ClassId_Star + PSFDHStar_Type :
    601   case ClassId_Star + PSFSEStar_Type :
    602   case ClassId_Star + MCDHStar_Type :
    603     return("Star");
    604 #endif
    605 
    606 // - Ajout objet PPF
    607   default:
    608     return("U");
    609   }
    610 
     287
    611288
    612289// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Note: See TracChangeset for help on using the changeset viewer.