Changeset 3640 in Sophya for trunk/AddOn/TAcq/brfitsrd.cc
- Timestamp:
- May 27, 2009, 5:15:45 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AddOn/TAcq/brfitsrd.cc
r3635 r3640 38 38 { 39 39 setRC(1); 40 BRPaqChecker pcheck; // Verification/comptage des paquets41 40 42 41 try { 43 42 TimeStamp ts; 44 Timer tm("BRFitsReader"); 43 Timer tm("BRFitsReader", false); 44 BRPaqChecker pcheck(~fgnotrl_); // Verification/comptage des paquets 45 45 46 size_t totnbytesrd = 0; 46 47 cout << " BRFitsReader::run() - Starting " << ts << " NbFiles=" << infiles_.size() … … 49 50 uint_4 nfileok = 0; 50 51 uint_8 nbytesrd = 0; 52 /* Variables pour la logique des zones memoire et numeros de paquets dans la zone memoire */ 53 int mid = -2; 54 Byte* buff = NULL; 55 int kmp = 0; 56 int kmpmax=memgr.NbPaquets(); 57 58 int paqsz = 0; 51 59 for(int ifile=0; ifile<infiles_.size(); ifile++) { 52 60 string ffname = infiles_[ifile]; … … 62 70 // Les fichier FITS contiennent l'entet (24 bytes), mais pas le trailer (16 bytes) si fgnotrl=true 63 71 int incpaqsz=0; 64 int paqsz = 0;65 72 if (fgnotrl_) { 66 73 incpaqsz=16; 67 74 cout << " Warning : FITS files without frame trailers ..." << endl; 68 75 } 69 if (paqsz == 0) { // premier passage, on fixe la taille de paquet et on alloue le buffer76 if (paqsz == 0) { // premier passage, on fixe la taille de paquet et on verifie compatibilite avec memgr 70 77 paqsz = mff.NAxis1()+incpaqsz; 71 78 if (paqsz != memgr.PaqSize()) { 72 79 cout << "BRFitsReader::run() mff.NAxis1() incompatible with memgr.PaqSize() -> exception " << endl; 73 80 throw SzMismatchError(" fits file size incompatible with memgr.PaqSize()"); 74 }75 if (mff.NAxis2() != memgr.NbPaquets()) {76 cout << "BRFitsReader::run() mff.NAxis2() <> memgr.NbPaquets() -> exception " << endl;77 throw SzMismatchError(" fits file NAxies2() <> memgr.NbPaquets()");78 81 } 79 82 } … … 83 86 continue; 84 87 } 85 if (memgr.NbPaquets() != mff.NAxis2()) { 86 cout << " PB memgr.NbPaquets() != mff.NAxis2() --> skipping " << endl; 87 continue; 88 } 89 } 90 int mid = memgr.FindMemZoneId(MemZA_Fill); 91 Byte* buff = memgr.GetMemZone(mid); 92 if (buff == NULL) { 93 cout << " BRFitsReader::run()/ERROR memgr.GetMemZone(" << mid << ") -> NULL" << endl; 94 setRC(2); 95 return; 88 } 89 if (mid < 0) { 90 mid = memgr.FindMemZoneId(MemZA_Fill); 91 buff = memgr.GetMemZone(mid); 92 if (buff == NULL) { 93 cout << " BRFitsReader::run()/ERROR memgr.GetMemZone(" << mid << ") -> NULL" << endl; 94 setRC(2); 95 return; 96 } 97 kmp=0; 96 98 } 97 99 size_t sx = mff.NAxis1(); 98 size_t sy = mff.NAxis2(); 99 100 for(int j=0; j<mff.NAxis2(); j++) { 101 mff.ReadB(buff+j*paqsz, sx, j*sx); 102 BRPaquet paq(NULL, buff+j*paqsz, paqsz); 103 pcheck.Check(paq); // Verification du paquet / FrameCounter 104 100 size_t sy = mff.NAxis2(); 101 int nprt=0; 102 for(int j=0; j<sy; j++) { 103 mff.ReadB(buff+kmp*paqsz, sx, j*sx); 104 BRPaquet paq(NULL, buff+kmp*paqsz, paqsz); 105 bool pqok = pcheck.Check(paq); // Verification du paquet / FrameCounter 106 if (!pqok && (nprt < 10)) { 107 cout << "--BUG-- i=" << ifile << " mid=" << mid << " j=" << j << " kmp=" << kmp 108 << " paqsz=" << paqsz << endl; 109 nprt++; 110 paq.Print(); 111 } 112 kmp++; 113 if (kmp >= kmpmax) { // Zone memoire rempli ! 114 memgr.FreeMemZone(mid, MemZS_Filled); 115 mid = -2; 116 if (j<sy) { 117 mid = memgr.FindMemZoneId(MemZA_Fill); 118 buff = memgr.GetMemZone(mid); 119 if (buff == NULL) { 120 cout << " BRFitsReader::run()/ERROR memgr.GetMemZone(" << mid << ") -> NULL" << endl; 121 setRC(2); 122 return; 123 } 124 kmp=0; 125 } 126 } 105 127 } 106 128 nfileok++; 107 129 size_t nbytesrd = sx*sy; 108 130 totnbytesrd += nbytesrd; 131 } // Fin de la boucle sur les fichiers 132 // Gestion d'une zone partiellement remplie 133 if (mid>=0) { 134 for(int k=kmp;k<kmpmax;k++) { 135 Byte* bp=buff+k*paqsz; 136 for(int l=0;l<paqsz;l++) bp[l]=0; 137 } 109 138 memgr.FreeMemZone(mid, MemZS_Filled); 110 } // Fin de la boucle sur les fichiers 111 139 } 112 140 113 141 // sprintf(fname,"%s/.log",path_.c_str()); … … 120 148 cout << " ------------------ BRFitsReader::run() END ----------------- " << endl; 121 149 ts.SetNow(); 122 tm.Split ();150 tm.SplitQ(); 123 151 cout << " END reading " << ts << " NFileOK=" << nfileok << endl; 124 152 cout << " TotalDiskRead= " << totnbytesrd/(1024*1024) << " MBytes Disk-Read rate= " 125 153 << (double)(totnbytesrd)/1024./tm.PartialElapsedTimems() << " MB/s" << endl; 126 154 pcheck.Print(cout); 155 cout << " BRFitsReader::run()/Timing: \n"; 156 tm.Print(); 127 157 cout << " ---------------------------------------------------------- " << endl; 128 158
Note:
See TracChangeset
for help on using the changeset viewer.