#include "racquproc.h" #include #include #include #include #include #include "pexceptions.h" #include "tvector.h" #include "ntuple.h" #include "datatable.h" #include "histos.h" #include "fioarr.h" #include "matharr.h" #include "timestamp.h" #include "ctimer.h" #include "fftpserver.h" #include "fftwserver.h" #include "FFTW/fftw3.h" #include "pciewrap.h" #include "brpaqu.h" #include "brproc.h" //--------------------------------------------------------------------- // Classe de traitement - calcul de visibilite pour n fibres //--------------------------------------------------------------------- /* --Methode-- */ BRVisibilityCalculator::BRVisibilityCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean, uint_4 freq1, uint_4 freq2, uint_4 nbfreq) : BRBaseProcessor(memgr), outpath_(outpath), nmean_(nmean), numfreq1_(freq1), numfreq2_(freq2), nbinfreq_(nbfreq), vpdata_(2*memgr.NbFibres()) // , dtfos_(outpath+"visdt.fits", Fits_Create), visdt_(dtfos_, 1024, true); { BRPaquet paq(memgr_.PaqSize()); vismtx_.SetSize((2*memgr_.NbFibres()+1)*memgr_.NbFibres(), paq.DataSize()/4); chanum_.SetSize(vismtx_.NRows()); sa_size_t k=0; for(size_t i=0; i<2*memgr_.NbFibres(); i++) vpdata_[i]=NULL; for(size_t i=0; i<2*memgr_.NbFibres(); i++) { for(size_t j=i; j<2*memgr_.NbFibres(); j++) { chanum_(k) = (i+1)*100+(j+1); k++; } } // visdt_.AddFloatColumn("mfc"); visdt_.AddDoubleColumn("mfc"); visdt_.AddDoubleColumn("mtt"); visdt_.AddIntegerColumn("jfreq"); visdt_.AddIntegerColumn("numch"); visdt_.AddFloatColumn("vre"); visdt_.AddFloatColumn("vim"); if (nmean_ < 1) nmean_=memgr_.NbPaquets(); if (nmean_ < 1) nmean_=1; totnbpaq_=0; numfile_=0; moyfc_=moytt_=0.; jf1_=numfreq1_; jf2_=numfreq2_; if ((jf1_<1)||(jf1_>=vismtx_.NCols())) jf1_=1; if ((jf2_<1)||(jf2_>=vismtx_.NCols())||(jf2_ Visibility Matrix in " << flnm << endl; FillVisibTable(moyfc_, moytt_); numfile_++; } vismtx_ = complex((r_4)0.,(r_4)0.); moyfc_=moytt_=0.; } sa_size_t k=0; for(size_t i=0; i > vis = vismtx_.Row(k); k++; for(sa_size_t f=1; f((r_4)vpdata_[i][f].realB(), (r_4)vpdata_[i][f].imagB()) * complex((r_4)vpdata_[j][f].realB(), -(r_4)vpdata_[j][f].imagB()); } } } moyfc_ += curfc_[0]; moytt_ += (vpaq_[0].TimeTag()-ttfirst_[0]); if (fgcktt_) CheckTimeTag(); totnbpaq_++; return 0; } /* --Methode-- */ int BRVisibilityCalculator::FillVisibTable(double fcm, double ttm) { xnt_[0]=fcm; xnt_[1]=ttm/1.25e8; if (djf_<2) { for(sa_size_t rv=0; rv vismtx_.NCols()) jjfmx=vismtx_.NCols(); for(sa_size_t jjf=jf; jjf0) { fcmtx_(fib,totnbpaq_) = curfc_[fib]; ttmtx_(fib,totnbpaq_) = vlasttt_[fib]; } } return 0; } for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { uint_8 ld = vpaq_[fib].TimeTag()-vlasttt_[fib]; uint_8 fd = vpaq_[fib].TimeTag()-ttfirst_[fib]-vpaq_[0].TimeTag()+ttfirst_[0]; /* if ( (ld < mindeltatt_) || (fd<-5) || (fd>5)) { vbadtt_[fib]++; vnsamett_[fib]++; } else { if (fd!=0) vnsamett_[fib]++; } */ if (ld < mindeltatt_) vbadtt_[fib]++; if (fd != 0) vnsamett_[fib]++; vlasttt_[fib]=vpaq_[fib].TimeTag(); if (totnbpaq_ STOP " << endl; } static inline r_4 Zmod2(complex z) { return (z.real()*z.real()+z.imag()*z.imag()); } static inline string card2name_(int card) { if (card==2) return " (Chan3,4) "; else return " (Chan1,2) "; } /* --Methode-- */ void BRProcA2C::run() { setRC(1); try { Timer tm("BRProcA2C", false); TimeStamp ts; BRPaqChecker pcheck(!fgnotrl_); // Verification/comptage des paquets size_t totnbytesout = 0; size_t totnbytesproc = 0; cout << " BRProcA2C::run() - Starting " << ts << " NMaxMemZones=" << nmax_ << " NMean=" << nmean_ << card2name_(card_) << endl; cout << " BRProcA2C::run()... - Output Data Path: " << path_ << endl; char fname[512]; // sprintf(fname,"%s/proc.log",path_.c_str()); // ofstream filog(fname); // filog << " BRProcA2C::run() - starting log file " << ts << endl; // filog << " ... NMaxMemZones=" << nmax_ << " NMean=" << nmean_ << " Step=" << step_ << endl; /*----DELETE NTuple const char* nnames[8] = {"fcs","tts","s1","s2","s12","s12re","s12im","s12phi"}; NTuple nt(8, nnames); double xnt[10]; uint_4 nmnt = 0; double ms1,ms2,ms12,ms12re,ms12im,ms12phi; ----*/ // Time sample (raw data) /FFT coeff histograms Histo* ph1=NULL; Histo* ph2=NULL; if (fghist_) { if (fgraw_) { ph1 = new Histo(-0.5, 255.5, 256); ph2 = new Histo(-0.5, 255.5, 256); } else { ph1 = new Histo(-128.5, 128.5, 257); ph2 = new Histo(-128.5, 128.5, 257); } } // Initialisation pour calcul FFT TVector< complex > cfour1; // composant TF uint_4 paqsz = memgr.PaqSize(); uint_4 procpaqsz = memgr.ProcPaqSize(); BRPaquet pq(NULL, NULL, paqsz); TVector vx(pq.DataSize()/2); int szfour = pq.DataSize()/2/2+1; cfour1.SetSize(szfour); /* vx = (r_4)(0.); FFTPackServer ffts; ffts.FFTForward(vx, cfour1); szfour = cfour1.Size(); */ bool fgtimfreq = false; // true->cartes temps<>frequences if (nfsmap_>0) fgtimfreq=true; TVector< complex > cfour2(cfour1.Size()); TVector spectreV1(cfour1.Size()); TVector spectreV2(cfour1.Size()); TVector moyspecV1(cfour1.Size()); // Moyenne des Spectres TVector moyspecV2(cfour1.Size()); TVector sigspecV1(cfour1.Size()); // Sigma des Spectres TVector sigspecV2(cfour1.Size()); TVector< complex > visiV12( cfour1.Size() ); TMatrix timfreqV1, timfreqV2; // Cartes temps<>frequences if (fgtimfreq) { timfreqV1.SetSize(nmean_, spectreV1.Size()/nfsmap_); timfreqV2.SetSize(nmean_, spectreV2.Size()/nfsmap_); } cout << " *DBG*BRProcA2C PaqSz=" << paqsz << " ProcPaqSize=" << procpaqsz << " procpaqsz/2=" << procpaqsz/2 << " cfour1.Size()=" << cfour1.Size() << " *8=" << cfour1.Size()*8 << endl; pmutfftw->lock(); fftwf_plan plan1 = fftwf_plan_dft_r2c_1d(vx.Size(), vx.Data(), (fftwf_complex*)cfour1.Data(), FFTW_ESTIMATE); fftwf_plan plan2 = fftwf_plan_dft_r2c_1d(vx.Size(), vx.Data(), (fftwf_complex*)cfour2.Data(), FFTW_ESTIMATE); pmutfftw->unlock(); uint_4 ifile = 0; uint_4 nzm = 0; // Nb de paquets moyennes pour le calcul de chaque spectre uint_4 nmoyspec = 0; // Nb de spectres moyennes uint_4 curfc=0; uint_8 curtt=0; uint_8 firsttt=0; bool fgfirst=true; double moysig[2]={0.,0.}; double sigsig[2]={0.,0.}; uint_8 nbsig[2]={0,0}; for (uint_4 kmz=0; kmz NULL" << endl; break; } Byte* procbuff = memgr.GetProcMemZone(mid); if (procbuff == NULL) { cout << " BRProcA2C::run()/ERROR memgr.GetProcMemZone(" << mid << ") -> NULL" << endl; break; } //---- DELETE nmnt=0; ms1=ms2=ms12=ms12re=ms12im=ms12phi=0.; for(uint_4 i=0; iAdd((r_8)vts); moysig[0] += (double)vts; sigsig[0] += ((double)vts)*((double)vts); nbsig[0]++; } for(sa_size_t j=0; jAdd((r_8)vts); moysig[1] += (double)vts; sigsig[1] += ((double)vts)*((double)vts); nbsig[1]++; } } if (fgraw_) { for(sa_size_t j=0; j((r_4)paq.Data1C()[j].realB(), (r_4)paq.Data1C()[j].imagB()); cfour2(j) = complex((r_4)paq.Data2C()[j].realB(), (r_4)paq.Data2C()[j].imagB()); } cfour1(0) = complex((r_4)paq.Data1C()[0].realB(), (r_4)0.); cfour1(cfour1.Size()-1) = complex((r_4)paq.Data1C()[0].imagB(), (r_4)0.); cfour2(0) = complex((r_4)paq.Data2C()[0].realB(), (r_4)0.); cfour2(cfour2.Size()-1) = complex((r_4)paq.Data2C()[0].imagB(), (r_4)0.); } for(sa_size_t j=0; j)*cfour1.Size()); if (fgtimfreq) { // Remplissage tableau temps-frequence for(sa_size_t c=1; c)*cfour2.Size()); if (fgtimfreq) { // Remplissage tableau temps-frequence for(sa_size_t c=1; c zvis = cfour1(j)*conj(cfour2(j)); ms12 += Zmod2(zvis); ms12re += zvis.real(); ms12im += zvis.imag(); ms12phi+= atan2(zvis.imag(),zvis.real()); } nmnt++; ----*/ totnbytesproc += paq.DataSize(); totnbytesout += (2*sizeof(complex)*cfour1.Size()); } // Fin de boucle sur les paquets d'une zone /*---- DELETE if (nmnt>0) { double fnorm = (double)nmnt*(2800-2700); xnt[2] = ms1 /= fnorm; xnt[3] = ms2 /= fnorm; xnt[4] = ms12 /= fnorm; xnt[5] = ms12re /= fnorm; xnt[6] = ms12im /= fnorm; xnt[7] = ms12phi /= fnorm; nt.Fill(xnt); } ----*/ if ((nzm >= nmean_) || ((kmz==(nmax_-1))&&(nzm>1))) { spectreV1 /= (r_4)(nzm); spectreV2 /= (r_4)(nzm); // pour le calcul des moyennes et sigmas de ces spectres moyspecV1 += spectreV1; moyspecV2 += spectreV2; sigspecV1 += (spectreV1 && spectreV1); sigspecV2 += (spectreV2 && spectreV2); nmoyspec++; visiV12 /= complex((r_4)nzm, 0.); spectreV1.Info()["NPaqMoy"] = nzm; spectreV2.Info()["NPaqMoy"] = nzm; visiV12.Info()["NPaqMoy"] = nzm; spectreV1.Info()["EndFC"] = curfc; spectreV2.Info()["EndFC"] = curfc; visiV12.Info()["EndFC"] = curfc; spectreV1.Info()["EndTT"] = curtt; spectreV2.Info()["EndTT"] = curtt; visiV12.Info()["EndTT"] = curtt; { sprintf(fname,"%s_%d.ppf",path_.c_str(),(int)ifile); POutPersist po(fname); string tag1="specV1"; string tag2="specV2"; string tag12="visiV12"; string tagh1="tshV1"; string tagh2="tshV2"; string tagtf1="timfreqV1"; string tagtf2="timfreqV2"; if (card_==2) { tag1 = "specV3"; tag2 = "specV4"; tagh1 = "tshV1"; tagh2 = "tshV2"; tag12="visiV34"; tagtf1="timfreqV3"; tagtf2="timfreqV4"; } po << PPFNameTag(tag1) << spectreV1; po << PPFNameTag(tag2) << spectreV2; po << PPFNameTag(tag12) << visiV12; if (fghist_) { po << PPFNameTag(tagh1) << (*ph1); po << PPFNameTag(tagh2) << (*ph2); double sspvmax[3] = {0.,0.,0.}; int_4 sspvmaxidx[3] = {-1,-1,-1}; for(int jji=1;jjisspvmax[2]) { sspvmax[2]=zmv2; sspvmaxidx[2]=jji; } } TVector& sspv = spectreV1; for(int ic=0; ic<2; ic++) { if (ic==1) sspv = spectreV2; for(int jji=1;jjisspvmax[ic]) { sspvmax[ic]=sspv(jji); sspvmaxidx[ic]=jji; } if (nbsig[ic] < 1) { moysig[ic]=sigsig[ic]=-1.; } else { moysig[ic] /= (double)nbsig[ic]; sigsig[ic] /= (double)nbsig[ic]; sigsig[ic] -= (moysig[ic]*moysig[ic]); sigsig[ic] = sqrt(sigsig[ic]); cout << "===Voie " << ic << " Moy=" << moysig[ic] << " Sig=" << sigsig[ic] << " MaxSpec Amp= " << sqrt(sspvmax[ic])/double(pq.DataSize()/2/2) << " Pos=" << sspvmaxidx[ic] << " (NPts=" << nbsig[ic] << ")" << endl; } } cout << "=== Voie1x2 MaxSpec Amp= " << sqrt(sqrt(sspvmax[2])/double(pq.DataSize()/2/2)) << " Pos=" << sspvmaxidx[2] << endl; } // fin if (fghist_) if (fgtimfreq) { timfreqV1 /= (r_4)nzm; timfreqV2 /= (r_4)nzm; po << PPFNameTag(tagtf1) << timfreqV1; po << PPFNameTag(tagtf2) << timfreqV2; } } spectreV1 = (r_4)(0.); spectreV2 = (r_4)(0.); visiV12 = complex(0., 0.); if (fghist_) { ph1->Zero(); ph2->Zero(); moysig[0]=moysig[1]=0.; sigsig[0]=sigsig[1]=0.; nbsig[0]=nbsig[1]=0; } if (fgtimfreq) { timfreqV1 = (r_4)(0.); timfreqV2 = (r_4)(0.); } nzm = 0; ifile++; // ts.SetNow(); // filog << ts << " : proc file " << fname << endl; cout << " BRProcA2C::run() created file " << fname << card2name_(card_) << endl; } memgr.FreeMemZone(mid, MemZS_ProcA); } // Fin de boucle sur les zones a traiter cout << " ------------ BRProcA2C::run() END " << card2name_(card_) << " ------------ " << endl; /*---- DELETE { nt.Info()["FirstTT"]=firsttt; cout << nt; sprintf(fname,"%s_nt.ppf",path_.c_str()); POutPersist po(fname); po << PPFNameTag("ntv12") << nt; cout << " BRProcA2C::run() created NTuple file " << fname << card2name_(card_) << endl; } ---- */ if (nmoyspec>0) { // Calcul des moyennes et sigmas des spectres r_4 fnms = nmoyspec; moyspecV1 /= fnms; moyspecV2 /= fnms; sigspecV1 /= fnms; sigspecV2 /= fnms; sigspecV1 -= (moyspecV1 && moyspecV1); sigspecV2 -= (moyspecV2 && moyspecV2); sigspecV1 = Sqrt(sigspecV1); sigspecV2 = Sqrt(sigspecV2); TVector rsbV1, rsbV2; // Rapport signal/bruit moyspecV1.DivElt(sigspecV1, rsbV1, false, true); moyspecV2.DivElt(sigspecV2, rsbV2, false, true); sprintf(fname,"%s_ms.ppf",path_.c_str()); POutPersist po(fname); po << PPFNameTag("moyspecV1") << moyspecV1; po << PPFNameTag("moyspecV2") << moyspecV2; po << PPFNameTag("sigspecV1") << sigspecV1; po << PPFNameTag("sigspecV2") << sigspecV2; po << PPFNameTag("rsbV1") << rsbV1; po << PPFNameTag("rsbV2") << rsbV2; cout << " BRProcA2C::run() created moysigspec file " << fname << card2name_(card_) << endl; } if (fghist_) { delete ph1; delete ph2; } ts.SetNow(); tm.SplitQ(); cout << " TotalProc= " << totnbytesproc/(1024*1024) << " MBytes, rate= " << (double)(totnbytesproc)/1024./tm.PartialElapsedTimems() << " MB/s" << " ProcDataOut=" << totnbytesout/(1024*1024) << " MB" << endl; cout << pcheck; cout << " BRProcA2C::run()/Timing: " << card2name_(card_) << endl; tm.Print(); cout << " ---------------------------------------------------------- " << endl; } catch (PException& exc) { cout << " BRProcA2C::run()/catched PException " << exc.Msg() << endl; setRC(3); return; } catch(...) { cout << " BRProcA2C::run()/catched unknown ... exception " << endl; setRC(4); return; } setRC(0); return; } //--------------------------------------------------------------------- // Classe thread de traitement 2 x 2 voies/frames (Apres BRProcA2C) //--------------------------------------------------------------------- /* --Methode-- */ BRProcB4C::BRProcB4C(RAcqMemZoneMgr& mem1, RAcqMemZoneMgr& mem2, string& path, bool fgraw, uint_4 nmean, uint_4 nmax, bool fgnotrl) : memgr1(mem1), memgr2(mem2) { fgraw_ = fgraw; nmax_ = nmax; nmean_ = nmean; if (fgraw_) cout << " BRProcB4C::BRProcB4C() - constructeur RAW data - NMean= " << nmean_ << endl; else cout << " BRProcB4C::BRProcB4C() - constructeur FFT data - NMean= " << nmean_ << endl; stop_ = false; path_ = path; fgnotrl_ = fgnotrl; } /* --Methode-- */ void BRProcB4C::Stop() { stop_=true; // cout <<" BRProcB4C::Stop ... > STOP " << endl; } /* --Methode-- */ void BRProcB4C::run() { setRC(1); try { Timer tm("BRProcB4C", false); TimeStamp ts; BRPaqChecker pcheck1(!fgnotrl_); // Verification/comptage des paquets BRPaqChecker pcheck2(!fgnotrl_); // Verification/comptage des paquets size_t totnbytesout = 0; size_t totnbytesproc = 0; cout << " BRProcB4C::run() - Starting " << ts << " NMaxMemZones=" << nmax_ << " NMean=" << nmean_ << endl; cout << " BRProcB4C::run()... - Output Data Path: " << path_ << endl; uint_4 paqsz = memgr1.PaqSize(); uint_4 procpaqsz = memgr1.ProcPaqSize(); if ((paqsz != memgr2.PaqSize())||(procpaqsz!= memgr2.ProcPaqSize())) { cout << "BRProcB4C::run()/ERROR : different paquet size -> stop \n ...(PaqSz1=" << paqsz << " Sz2=" << memgr2.PaqSize() << " ProcPaqSz1=" << procpaqsz << " Sz2=" << memgr2.ProcPaqSize() << " )" << endl; setRC(9); return; } TVector< complex > cfour; // composant TF BRPaquet pq(NULL, NULL, paqsz); /* TVector vx(pq.DataSize()/2); vx = (r_4)(0.); FFTPackServer ffts; ffts.FFTForward(vx, cfour); TVector< complex > visiV13( cfour.Size() ); TVector< complex > visiV14( cfour.Size() ); TVector< complex > visiV23( cfour.Size() ); TVector< complex > visiV24( cfour.Size() ); */ int szfour = pq.DataSize()/2/2+1; // int szfour = (paqsz-40)/2+1; TVector< complex > visiV13( szfour ); TVector< complex > visiV14( szfour ); TVector< complex > visiV23( szfour ); TVector< complex > visiV24( szfour ); // cout << " *DBG*AAAAA ---- Vectors OK" << endl; cout << " *DBG*BRProcB4C PaqSz=" << paqsz << " ProcPaqSize=" << procpaqsz << " procpaqsz/2=" << procpaqsz/2 << " cfour.Size()=" << szfour << " *8=" << szfour*8 << endl; DataTable dt; dt.AddLongColumn("fc1"); dt.AddLongColumn("tt1"); dt.AddLongColumn("fc2"); dt.AddLongColumn("tt2"); DataTableRow dtr = dt.EmptyRow(); uint_4 nzm = 0; uint_4 totnoksfc = 0; uint_4 totnokpaq = 0; uint_4 totnpaq = 0; uint_4 ifile = 0; uint_4 curfc=0; uint_8 curtt=0; uint_4 curfc2=0; uint_8 curtt2=0; uint_8 firsttt=0; uint_8 firsttt2=0; bool fgfirst=true; for (uint_4 kmz=0; kmz NULL" << endl; break; } Byte* procbuff1 = memgr1.GetProcMemZone(mid1); if (procbuff1 == NULL) { cout << " BRProcB4C::run()/ERROR memgr.GetProcMemZone(" << mid1 << ") -> NULL" << endl; break; } int mid2 = memgr2.FindMemZoneId(MemZA_ProcB); Byte* buff2 = memgr2.GetMemZone(mid2); if (buff1 == NULL) { cout << " BRProcB4C::run()/ERROR memgr.GetMemZone(" << mid2 << ") -> NULL" << endl; break; } Byte* procbuff2 = memgr2.GetProcMemZone(mid2); if (procbuff2 == NULL) { cout << " BRProcB4C::run()/ERROR memgr.GetProcMemZone(" << mid2 << ") -> NULL" << endl; break; } uint_4 i1,i2; i1=i2=0; // cout << " *DBG*CCCCCC " << kmz << " memgr1.NbPaquets() =" << memgr1.NbPaquets() << endl; while((i1=memgr1.NbPaquets())||(i2>=memgr1.NbPaquets())) { cout << " *BUG*BUG i1=" << i1 << " i2=" << i2 << endl; break; } // Les deux framecounters sont identiques ... noksfc++; curfc=paq1.FrameCounter(); curfc2=paq2.FrameCounter(); if (fgfirst) { firsttt=paq1.TimeTag(); firsttt2=paq2.TimeTag(); cout << " BRProcB4C()/Info First FC="< TT=" << firsttt<<" , "<* zp1 = (complex*)(procbuff1+i1*procpaqsz); complex* zp2 = (complex*)(procbuff1+i1*procpaqsz+procpaqsz/2); complex* zp3 = (complex*)(procbuff2+i2*procpaqsz); complex* zp4 = (complex*)(procbuff2+i2*procpaqsz+procpaqsz/2); for(sa_size_t j=0; j= nmean_) || ((kmz==(nmax_-1))&&(nzm>1))) { visiV13 /= complex((r_4)nzm, 0.); visiV14 /= complex((r_4)nzm, 0.); visiV23 /= complex((r_4)nzm, 0.); visiV24 /= complex((r_4)nzm, 0.); visiV13.Info()["NPaqMoy"] = nzm; visiV14.Info()["NPaqMoy"] = nzm; visiV23.Info()["NPaqMoy"] = nzm; visiV24.Info()["NPaqMoy"] = nzm; visiV13.Info()["EndFC"] = curfc; visiV14.Info()["EndFC"] = curfc; visiV23.Info()["EndFC"] = curfc; visiV24.Info()["EndFC"] = curfc; visiV13.Info()["EndTT"] = curtt; visiV14.Info()["EndTT"] = curtt; visiV23.Info()["EndTT"] = curtt; visiV24.Info()["EndTT"] = curtt; char fname[512]; { sprintf(fname,"%s_%d.ppf",path_.c_str(),(int)ifile); POutPersist po(fname); po << PPFNameTag("visiV13") << visiV13; po << PPFNameTag("visiV14") << visiV14; po << PPFNameTag("visiV23") << visiV23; po << PPFNameTag("visiV24") << visiV24; } visiV13 = complex(0., 0.); visiV14 = complex(0., 0.); visiV23 = complex(0., 0.); visiV24 = complex(0., 0.); nzm = 0; ifile++; // ts.SetNow(); // filog << ts << " : proc file " << fname << endl; cout << " BRProcB4C::run() created file " << fname << endl; } double okfrac = (nokpaq>1)?((double)noksfc/(double)nokpaq*100.):0.; cout << "BRProcB4C ["<1)?((double)totnoksfc/(double)totnokpaq*100.):0.; cout << " NOkPaq1,2=" << totnokpaq << " /TotNPaq=" << totnpaq << " TotNSameFC=" << totnoksfc << " (" << totokfrac << " %)" << endl; // cout << pcheck1; // cout << pcheck2; cout << " BRProcB4C::run()/Timing: \n"; tm.Print(); cout << " ---------------------------------------------------------- " << endl; } catch (PException& exc) { cout << " BRProcB4C::run()/catched PException " << exc.Msg() << endl; setRC(3); return; } catch(...) { cout << " BRProcB4C::run()/catched unknown ... exception " << endl; setRC(4); return; } setRC(0); return; }