Changeset 3956 in Sophya for trunk/AddOn/TAcq/brviscalc.cc
- Timestamp:
- Mar 2, 2011, 3:31:39 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AddOn/TAcq/brviscalc.cc
r3923 r3956 12 12 #include "pexceptions.h" 13 13 #include "fioarr.h" 14 #include "fitsarrhand.h" 14 15 #include "matharr.h" 16 #include "arrctcast.h" 15 17 #include "timestamp.h" 16 18 #include "ctimer.h" … … 26 28 BRVisibilityCalculator::BRVisibilityCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean, size_t nthr) 27 29 : BRBaseProcessor(memgr), paralex_(*this, nthr), nparthr_(nthr), 28 outpath_(outpath), nmean_(nmean), nbcalc_(1), calcid_(0), vpdata_(2*memgr.NbFibres()) 30 outpath_(outpath), nmean_(nmean), nbcalc_(1), calcid_(0), 31 vpdata_(2*memgr.NbFibres()), vpdatar_(2*memgr.NbFibres()) 29 32 // , dtfos_(outpath+"visdt.fits", Fits_Create), visdt_(dtfos_, 1024, true); 30 33 { 34 SetFFTData(); 31 35 DefineRank(1,0); 36 SetPPFOutput(); 32 37 33 38 uint_4 maxnpairs = (2*memgr_.NbFibres()+1)*memgr_.NbFibres(); … … 35 40 chanpairnumall_.SetSize(maxnpairs); 36 41 chanpairsall_.SetSize(maxnpairs,2); 37 for(size_t i=0; i<2*memgr_.NbFibres(); i++) vpdata_[i]=NULL; 42 for(size_t i=0; i<2*memgr_.NbFibres(); i++) { 43 vpdata_[i]=NULL; vpdatar_[i]=NULL; 44 } 38 45 SelectPairs(); 39 46 … … 113 120 else 114 121 SelectPairs(calcid_*npairspth+pair1, npairspth, fgpimp); 115 MemZaction mmzas[6]={MemZA_ProcA,MemZA_ProcB,MemZA_ProcC,MemZA_ProcD,MemZA_ProcE,MemZA_ProcF}; 122 MemZaction mmzas[10]={MemZA_ProcA,MemZA_ProcB,MemZA_ProcC,MemZA_ProcD,MemZA_ProcE,MemZA_ProcF, 123 MemZA_ProcG,MemZA_ProcH,MemZA_ProcI,MemZA_ProcJ}; 116 124 SetMemZAction(mmzas[calcid_]); 117 125 setNameId("viscalc_grp", calcid_); … … 197 205 198 206 string filename; 199 filename = outpath_+"chanum.ppf";207 filename = (outpath_+"chanum.")+OutFileExtension(); 200 208 if (nbcalc_>1) { 201 209 char sbuff[32]; 202 sprintf(sbuff,"chanum_%d. ppf",(int)calcid_);210 sprintf(sbuff,"chanum_%d.%s",(int)calcid_,OutFileExtension()); 203 211 filename = outpath_+sbuff; 204 212 } 205 POutPersist poc(filename); 206 poc << PPFNameTag("chanids") << chanids_; 207 poc << PPFNameTag("chanpairs") << chanpairs_; 208 poc << PPFNameTag("chanpairnum") << chanpairnum_; 209 poc << PPFNameTag("chanpairsall") << chanpairsall_; 210 poc << PPFNameTag("chanpairnumall") << chanpairnumall_; 211 cout << "BRVisibilityCalculator[" << calcid_ << "]::UpdateChanIds() Channel Ids/Pairs saved to PPF file " 213 if (fgfitsout_) { // Ecriture au format FITS 214 FitsInOutFile foc(filename, FitsInOutFile::Fits_Create); 215 foc.SetNextExtensionName("chanids"); 216 foc << chanids_; 217 foc.SetNextExtensionName("chanpairs"); 218 foc << chanpairs_; 219 foc.SetNextExtensionName("chanpairnum"); 220 foc << chanpairnum_; 221 foc.SetNextExtensionName("chanpairsall"); 222 foc << chanpairsall_; 223 foc.SetNextExtensionName("chanpairnumall"); 224 foc << chanpairnumall_; 225 } 226 else { // Format PPF 227 POutPersist poc(filename); 228 poc << PPFNameTag("chanids") << chanids_; 229 poc << PPFNameTag("chanpairs") << chanpairs_; 230 poc << PPFNameTag("chanpairnum") << chanpairnum_; 231 poc << PPFNameTag("chanpairsall") << chanpairsall_; 232 poc << PPFNameTag("chanpairnumall") << chanpairnumall_; 233 } 234 cout << "BRVisibilityCalculator[" << calcid_ << "]::UpdateChanIds() Channel Ids/Pairs saved to file " 212 235 << filename << endl; 213 236 cout << " ... NbVisib=NbChanPairs=" << chanpairs_.NRows() << " ChannelPairs= " ; … … 266 289 267 290 size_t paqsz=memgr_.PaqSize(); 291 size_t procpaqsz=memgr_.ProcPaqSize(); 268 292 bool fgrun=true; 269 293 while (fgrun) { … … 289 313 break; 290 314 } 315 if ((procpaqsz>0)&&((fprocbuff_[fib]=memgr_.GetProcMemZone(mid,fib))==NULL)) { // cela ne devrait pas arriver non plus 316 cout << "BRVisibilityCalculator[" << calcid_ << "]::run()/ERROR memgr.GetProcMemZone(" 317 << mid << "," << fib << ") -> NULL" << endl; 318 setRC(9); fgrun=false; 319 break; 320 } 291 321 } 292 322 … … 299 329 char nfile[48]; 300 330 if (nbcalc_==1) 301 sprintf(nfile,"vismtx%d. ppf",numfile_);331 sprintf(nfile,"vismtx%d.%s",numfile_,OutFileExtension()); 302 332 else 303 sprintf(nfile,"vismtx_%d_%d. ppf",(int)calcid_,numfile_);333 sprintf(nfile,"vismtx_%d_%d.%s",(int)calcid_,numfile_,OutFileExtension()); 304 334 string flnm=outpath_+nfile; 305 POutPersist po(flnm); 306 po << vismtx_; 335 if (fgfitsout_) { // Ecriture au format FITS 336 FitsInOutFile fo(flnm, FitsInOutFile::Fits_Create); 337 TArray<r_4> arvismtx = ArrCastC2R(vismtx_); 338 arvismtx.Info()=vismtx_.Info(); 339 fo << arvismtx; 340 } 341 else { // Format PPF 342 POutPersist po(flnm); 343 po << vismtx_; 344 } 307 345 if ((prtlev_>0)&&(numfile_%prtmodulo_==0)) { 308 346 cout << numfile_ << "-BRVisCalc[" << calcid_ << "/" << nbcalc_ << "]::run() NPaqProc=" … … 324 362 vfgok_[fib] = vpchk_[fib].Check(vpaq_[fib],curfc_[fib]); 325 363 if (!vfgok_[fib]) fgallfibok[jp]=fgokallfibers_=false; 364 if (procpaqsz>0) vprocpaq_[fib] = fprocbuff_[fib]+jp*procpaqsz; 326 365 } 327 366 if (fgokallfibers_) { … … 375 414 { 376 415 if (totnbpaq_==0) UpdateChanIds(); // Appele ici pour etre sur que le thread de remplissage a mis l'info a jour. 377 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { 378 vpdata_[2*fib] = vpaq_[fib].Data1C(); 379 vpdata_[2*fib+1] = vpaq_[fib].Data2C(); 416 if (fgdataraw_) { // Donnees firmware RAW apres TF soft 417 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { 418 vpdatar_[2*fib] = reinterpret_cast< complex<r_4>* > (vprocpaq_[fib]); 419 vpdatar_[2*fib+1] = reinterpret_cast< complex<r_4>* >(vprocpaq_[fib]+memgr_.ProcPaqSize()/2) ; 420 } 421 } 422 else { // donnees firmware FFT 423 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { 424 vpdata_[2*fib] = vpaq_[fib].Data1C(); 425 vpdata_[2*fib+1] = vpaq_[fib].Data2C(); 426 } 380 427 } 381 428 … … 388 435 char nfile[48]; 389 436 if (nbcalc_==1) 390 sprintf(nfile,"vismtx%d. ppf",numfile_);437 sprintf(nfile,"vismtx%d.%s",numfile_,OutFileExtension()); 391 438 else 392 sprintf(nfile,"vismtx_%d_%d. ppf",(int)calcid_,numfile_);439 sprintf(nfile,"vismtx_%d_%d.%s",(int)calcid_,numfile_,OutFileExtension()); 393 440 string flnm=outpath_+nfile; 394 POutPersist po(flnm); 395 po << vismtx_; 441 if (fgfitsout_) { // Ecriture au format FITS 442 FitsInOutFile fo(flnm, FitsInOutFile::Fits_Create); 443 TArray<r_4> arvismtx = ArrCastC2R(vismtx_); 444 arvismtx.Info()=vismtx_.Info(); 445 fo << arvismtx; 446 } 447 else { // Format PPF 448 POutPersist po(flnm); 449 po << vismtx_; 450 } 396 451 if ((prtlev_>0)&&(numfile_%prtmodulo_==0)) { 397 452 cout << numfile_ << "-BRVisCalc[" << calcid_ << "/" << nbcalc_ << "]::Process() NPaqProc=" … … 419 474 if (fgpimp_&&(i!=j)&&((i+j)%2==0)) continue; // calcul des visib avec numero pair-impair + autocorrel 420 475 TVector< complex<r_4> > vis = vismtx_.Row(k); k++; 421 for(sa_size_t f=1; f<vis.Size(); f++) { 422 vis(f) += complex<r_4>((r_4)vpdata_[i][f].realB(), (r_4)vpdata_[i][f].imagB()) * 423 complex<r_4>((r_4)vpdata_[j][f].realB(), -(r_4)vpdata_[j][f].imagB()); 476 477 if (fgdataraw_) { // Donnees firmware RAW apres TF soft 478 for(sa_size_t f=1; f<vis.Size(); f++) { 479 vis(f) += vpdatar_[i][f] * vpdatar_[j][f]; 480 } 481 } 482 else { // donnees firmware FFT 483 for(sa_size_t f=1; f<vis.Size(); f++) { 484 vis(f) += complex<r_4>((r_4)vpdata_[i][f].realB(), (r_4)vpdata_[i][f].imagB()) * 485 complex<r_4>((r_4)vpdata_[j][f].realB(), -(r_4)vpdata_[j][f].imagB()); 486 } 424 487 } 425 488 nb_flop_ += (8.*(r_8)(vis.Size()-1)); … … 468 531 { 469 532 vector<TwoByteComplex*> pvpdata(2*memgr_.NbFibres()); 533 vector< complex<r_4>* > pvpdatar(2*memgr_.NbFibres()); 470 534 size_t paqsz=memgr_.PaqSize(); 471 535 BRPaquet ppaq(paqsz); … … 481 545 for(size_t jp=0; jp<memgr_.NbPaquets(); jp++) { // boucle sur les paquets d'une zone 482 546 if (!fgallfibok[jp]) continue; 483 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { 484 ppaq.Set(fbuff_[fib]+jp*paqsz); 485 pvpdata[2*fib] = ppaq.Data1C(); 486 pvpdata[2*fib+1] = ppaq.Data2C(); 547 if (fgdataraw_) { // Donnees firmware RAW apres TF soft 548 size_t procpaqsz=memgr_.ProcPaqSize(); 549 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { 550 pvpdatar[2*fib] = reinterpret_cast< complex<r_4>* > (fprocbuff_[fib]+jp*procpaqsz); 551 pvpdatar[2*fib+1] = reinterpret_cast< complex<r_4>* >(vprocpaq_[fib]+jp*procpaqsz+procpaqsz/2) ; 552 } 553 } 554 else { // donnees firmware FFT 555 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { 556 ppaq.Set(fbuff_[fib]+jp*paqsz); 557 pvpdata[2*fib] = ppaq.Data1C(); 558 pvpdata[2*fib+1] = ppaq.Data2C(); 559 } 487 560 } 488 561 … … 498 571 if (fgpimp_&&(i!=j)&&((i+j)%2==0)) continue; // calcul des visib avec numero pair-impair + autocorrel 499 572 TVector< complex<r_4> > vis = vismtx_.Row(k); k++; 500 for(sa_size_t f=fdeb; f<ffin; f++) { 501 vis(f) += complex<r_4>((r_4)pvpdata[i][f].realB(), (r_4)pvpdata[i][f].imagB()) * 502 complex<r_4>((r_4)pvpdata[j][f].realB(), -(r_4)pvpdata[j][f].imagB()); 573 if (fgdataraw_) { // Donnees firmware RAW apres TF soft 574 for(sa_size_t f=fdeb; f<ffin; f++) { 575 vis(f) += pvpdatar[i][f] * pvpdatar[j][f]; 576 } 577 } 578 else { // donnees firmware FFT 579 for(sa_size_t f=fdeb; f<ffin; f++) { 580 vis(f) += complex<r_4>((r_4)pvpdata[i][f].realB(), (r_4)pvpdata[i][f].imagB()) * 581 complex<r_4>((r_4)pvpdata[j][f].realB(), -(r_4)pvpdata[j][f].imagB()); 582 } 503 583 } 504 584 nb_flop_ += (8.*(r_8)(ffin-fdeb)); … … 609 689 } 610 690 /* --Methode-- */ 691 MemZStatus BRVisCalcGroup::SetMemZAction(MemZaction mmact) 692 { 693 MemZaction mmzas[10]={MemZA_ProcA,MemZA_ProcB,MemZA_ProcC,MemZA_ProcD,MemZA_ProcE,MemZA_ProcF, 694 MemZA_ProcG,MemZA_ProcH,MemZA_ProcI,MemZA_ProcJ}; 695 MemZStatus mmzss[10]={MemZS_ProcA,MemZS_ProcB,MemZS_ProcC,MemZS_ProcD,MemZS_ProcE,MemZS_ProcF, 696 MemZS_ProcG,MemZS_ProcH,MemZS_ProcI,MemZS_ProcJ}; 697 size_t ia=9999; 698 for(int i=0; i<10; i++) { 699 if (mmact==mmzas[i]) { ia=i; break; } 700 } 701 if (ia>=10) 702 throw ParmError("BRVisCalcGroup::SetMemZAction() Bad MemZaction mmact !"); 703 if ((ia+viscalcp_.size())>10) 704 throw ParmError("BRVisCalcGroup::SetMemZAction() MemZaction mmact too high !"); 705 for(size_t i=0; i<viscalcp_.size(); i++) { 706 viscalcp_[i]->SetMemZAction(mmzas[ia]); ia++; 707 } 708 return mmzss[ia-1]; 709 } 710 /* --Methode-- */ 611 711 int BRVisCalcGroup::SelectFreqBinning(uint_4 freq1, uint_4 freq2, uint_4 nbfreq) 612 712 { … … 622 722 viscalcp_[i]->ActivateVisDTable(fgfdt); 623 723 } 724 /* --Methode-- */ 725 void BRVisCalcGroup::SetFitsOutput() 726 { 727 for(size_t i=0; i<viscalcp_.size(); i++) 728 viscalcp_[i]->SetFitsOutput(); 729 } 730 /* --Methode-- */ 731 void BRVisCalcGroup::SetPPFOutput() 732 { 733 for(size_t i=0; i<viscalcp_.size(); i++) 734 viscalcp_[i]->SetPPFOutput(); 735 } 624 736 /* --Methode-- */ 625 737 void BRVisCalcGroup::SetPrintLevel(int lev, uint_8 prtmodulo)
Note:
See TracChangeset
for help on using the changeset viewer.