/************************************************************** --- modif vf pour utilisation cgt du toimanager --- chainage de processeurs elementaires a 3 entrees et 2 sorties --- integration d'une contrainte sur le 1er processeur >>>>>>>> usage: tstdemo [snum1,snum2] Test et demonstration du Pipe. "demo1.fits": fits table avec sampleNum,boloMuV_10,fg_boloMuV_10,boloMuV_20 samplenum=[100001,105000] "demo2.fits": fits table avec sampleNum,boloMuV_30,fg_boloMuV_30 samplenum=[100101,105100] Operation: sortir un fichier "demo.fits" ou on ecrit: Toutes les donnees des 2 fichiers d'entree ET : boloSum = boloMuV_10 + boloMuV_20 + boloMuV_30 fg_boloSum = fg_boloMuV_10 | fg_boloMuV_20 | fg_boloMuV_30 boloMul = boloMuV_10 * boloMuV_20 * boloMuV_30 fg_boloMul = fg_boloMuV_10 | fg_boloMuV_20 | fg_boloMuV_30 Structure: demo1.fits demo2.fits | | ---------- ---------- | Reader | | Reader | | rfits1 | | rfits2 | ---------- ---------- "boloMuV_10" "boloMuV_20" "boloMuV_30" | | | t| t| t| u| u| u| y| y| y| a| a| a| u| u| u| | | | b| b| b| o| o| o| l| l| l| o| o| o| | | | 1| 2| 3| 0| 0| 0| | | | | | | /| /| /| / | / | / | / | / | / | / | / | / | / | / | / | _____/ | / | / | |_________ | ____/ | / / |||_______ | __________ | ___________________/ / ||| | | / ||| | | / ||| | | / ||| | / / ||| | / / ||| | _______/ / ||| / / ___________________/_____ ||| / / ________/ | ||| / / /_________________________________| ________________________ ||| / / / | DemoPipe Processor: || | DemoPipe Processor: | ||| / / / | =================== ||__| =================== | ||| / / |---| entree_bolo_3 | | | ||| | | | sortie_bolo_sum |___| | ||| | |-------| entree_bolo_2 || | | ||| | | sortie_bolo_mul ||__| |--| ||| |---------| entree_bolo_1 ||| | | | ||| |_______________________________||| |______________________|| | ||| || | | ||| |-----------|| | | ||| --------------------------| | | ||| | | | | |||--------"boloMuv_30" | Writter | "boloMul" --------------------------- | ||---------"boloMuv_20" | rfitsw | "boloSum" ----------------------------| |----------"boloMuV_10" | | --------------- | demo.fits **************************************************************/ #include "toi.h" #include "toiprocessor.h" #include "fitstoirdr.h" #include "fitstoiwtr.h" #include "toimanager.h" #include "toisegment.h" #include "sophyainit.h" #include void crefits(void); // Juste pour le test, rien a voir avec TOI //////////////////////////////////////////////////////////////// // Le INCLUDE de la classe du processeur (peut etre mis a part) class DemoPipe : public TOIProcessor { public: DemoPipe(string n); virtual ~DemoPipe(); virtual void init(void); virtual void run(void); void PrintStatus(::ostream & os); inline int_8 ProcessedSampleCount() const {return totnscount;} protected: int_8 nread,nwrite,totnscount; }; //////////////////////////////////////////////////////////////// // Le code de la classe du processeur (peut etre mis a part) DemoPipe::DemoPipe(string n) : nread(0), nwrite(0),totnscount(0) { name = n; } DemoPipe::~DemoPipe() { } void DemoPipe::PrintStatus(::ostream & os) { os<<"DemoPipe::Print -- nread = "<1) sscanf(arg[1],"%ld,%ld",&sdeb,&sfin); if(sfin>=sdeb) mgr->setRequestedSample(sdeb,sfin); //-------------------------------------------------------------------- try { // On met tous ca dans un bloc "try" pour recuperer les exceptions //-------------------------------------------------------------------- //////////////////////////////////////////////////////// //////// Creation des lecteurs de fichiers fits //////// //////////////////////////////////////////////////////// // FITS reader du premier fichier FITSTOIReader rfits1("demo1.fits"); rfits1.setName("rdr1"); int ncol1 = rfits1.getNOut(); cout<<"Lecteur_1: Number of columns in fits : "<connect(rfits1, "boloMuV_10", wfits, "boloMuV_10", "tuyau_bolo_10", taille, writeflag); mgr->connect(rfits1, "boloMuV_20", wfits, "boloMuV_20", "tuyau_bolo_20", taille, writeflag); mgr->connect(rfits2, "boloMuV_30", wfits, "boloMuV_30", "tuyau_bolo_30", taille, writeflag); // connection des 3 colonnes des lecteurs fits avec le processeur mgr->connect(rfits1,"boloMuV_10", demo, "entree_bolo_1", "tuyau_bolo_10", taille, writeflag); mgr->connect(rfits1,"boloMuV_20", demo, "entree_bolo_2", "tuyau_bolo_20", taille, writeflag); mgr->connect(rfits2,"boloMuV_30", demo, "entree_bolo_3", "tuyau_bolo_30", taille, writeflag); // connection des 2 sorties processeurs avec le writer mgr->connect(demo, "sortie_bolo_sum", wfits, "boloSum", "tuyau_bolo_sum", taille, writeflag); mgr->connect(demo, "sortie_bolo_mul", wfits, "boloMul", "tuyau_bolo_mul", taille, writeflag); // connection des 2 sorties processeurs avec le processeur suivant mgr->connect(demo, "sortie_bolo_sum", demo1, "entree_bolo_1", "tuyau_bolo_10", taille, writeflag); mgr->connect(demo, "sortie_bolo_mul", demo1, "entree_bolo_2", "tuyau_bolo_20", taille, writeflag); // connection du 2eme fitsreader avec le 2eme processeur mgr->connect(rfits2,"boloMuV_30", demo1, "entree_bolo_3", "tuyau_bolo_30", taille, writeflag); // connection des 2 sorties du 2eme processeur avec le writer mgr->connect(demo1, "sortie_bolo_sum", wfits, "boloSum2", "tuyau_bolo_sum2", taille, writeflag); mgr->connect(demo1, "sortie_bolo_mul", wfits, "boloMul2", "tuyau_bolo_mul2", taille, writeflag); // ajout d'une contrainte sur le 1ere processeur //wfits.setRequestedSample(1001000,1001050); cout << "***** All tois connected *****" << endl; /* // Print de status avant lancement des taches: cout<<"----- FITSReaderTOI::PrintStatus() 1 : -----"<PrintStatus(cout); bolo20->PrintStatus(cout); bolo30->PrintStatus(cout); cout<<"----- DemoPipe::PrintStatus() : -----"<startAll(); // Affichage de l'avancement des TOIProcessors (optionnel) // ProcSampleCounter statr(rfits1); // statr.InfoMessage() = "tstdemopipe/Info rfits1"; // statr.PrintStats(); // ProcSampleCounter statw(wfits); // statw.InfoMessage() = "tstdemopipe/Info wfits"; // statw.PrintStats(); // ProcSampleCounter statp(demo); // statp.InfoMessage() = "tstdemopipe/Info DemoPipe"; // statp.PrintStats(); // Gestion de la re-connection des threads cout<<"***** Joining threads *****"<joinAll(); cout<<"***** End threads *****"<