202{
204
205
207 std::vector<View> viewArr;
208 std::vector<Track> trackArr;
209
210
211 std::ifstream infile(
_fragFileName.c_str(),std::ios::binary);
212 for(int i=0; i<5; i++) {
213 if (infile.fail()) {
214 infile.clear();
216 } else
217 break;
218 }
219 if (infile.fail())
220 {
221 std::cout <<
"Failed to open file: " <<
_fragFileName.c_str() << std::endl;
222 return false;
223 }
224 char infoType;
225 unsigned short headerFormat;
226 int codingMode;
227 unsigned int index, startView, nViews, fitCorrectionDataSize;
228
231
232
243
249
250
251 if (!(codingMode == 0 || codingMode == 258))
252 {
253 std::cerr << "Unsupported fragment coding mode" << std::endl;
254 return -3;
255 }
256 infile.seekg(256,std::ios::cur);
257
258 if (headerFormat == 1795)
259 {
260 double readDouble;
261 int readInt;
262 char readChar;
263 for (unsigned int i = 0; i < nViews; i++)
264 {
266 Side topSide, bottomSide;
287
288 double mxx,mxy,myx,myy;
293 topSide.
setM(mxx,mxy,myx,myy);
298 bottomSide.
setM(mxx,mxy,myx,myy);
308 bottomSide.
setTopZ(readDouble);
311
316
321
324 viewArr.push_back(view);
325 }
326 for (unsigned int i = 0; i < nViews; i++)
327 {
328
329 for (int j = 0; j < viewArr.at(i).getTopSide()->getLayers(); j++)
330 {
332 double z;
333 if(headerFormat == 1794 || headerFormat == 1795)
334 {
336 }
337 else
340 viewArr.at(i).getTopSide()->addLayer(
grains,z);
341
342 }
343
344 for (int j = 0; j < viewArr.at(i).getBottomSide()->getLayers(); j++)
345 {
346
348 double z;
349 if(headerFormat == 1794 || headerFormat == 1795)
350 {
352 }
353 else
356 viewArr.at(i).getBottomSide()->addLayer(
grains,z);
357
358 }
359
360 }
361 for (unsigned int i = 0; i < nViews; i++)
362 {
364 unsigned int readUInt;
365 for (int j = 0; j < viewArr.at(i).getTopSide()->getTracks(); j++)
366 {
367
369 tr.setAreaSum(readUInt);
371 tr.setCount(
static_cast<short>(readUInt));
379 tr.setSX(readDouble);
381 tr.setSY(readDouble);
383 tr.setSZ(readDouble);
385 tr.setSigma(readDouble);
387 tr.setTopZ(readDouble);
389 tr.setBottomZ(readDouble);
390 viewArr.at(i).getTopSide()->addTrack(
tr);
391
392 }
393 for (int j = 0; j < viewArr.at(i).getBottomSide()->getTracks(); j++)
394 {
396 tr.setAreaSum(readUInt);
398 tr.setCount(
static_cast<short>(readUInt));
406 tr.setSX(readDouble);
408 tr.setSY(readDouble);
410 tr.setSZ(readDouble);
412 tr.setSigma(readDouble);
414 tr.setTopZ(readDouble);
416 tr.setBottomZ(readDouble);
417 viewArr.at(i).getBottomSide()->addTrack(
tr);
418 }
419 }
420 if (codingMode == 0)
421 {
422
423 for (unsigned int i = 0; i < nViews; i++)
424 {
425 for (int j = 0; j < viewArr.at(i).getTopSide()->getTracks(); j++)
426 {
428 Track *
tr = viewArr.at(i).getTopSide()->getTrackAt(j);
429 for (
int k = 0; k <
tr->getCount(); k++)
430 {
431 if (headerFormat == 1795)
432 {
433 unsigned int readUInt;
434 infile.read((char*)&readUInt,4);
436 }
437 else
439 infile.read((char*)&readDouble,8);
441 infile.read((char*)&readDouble,8);
443 infile.read((char*)&readDouble,8);
446 }
448 tr->evaluateEstimators();
449 }
450 for (int j = 0; j < viewArr.at(i).getBottomSide()->getTracks(); j++)
451 {
453 Track *
tr = viewArr.at(i).getBottomSide()->getTrackAt(j);
454 for (
int k = 0; k <
tr->getCount(); k++)
455 {
456 if (headerFormat == 1795)
457 {
458 unsigned int readUInt;
459 infile.read((char*)&readUInt,4);
461 }
462 else
464 infile.read((char*)&readDouble,8);
466 infile.read((char*)&readDouble,8);
468 infile.read((char*)&readDouble,8);
471 }
473 tr->evaluateEstimators();
474 }
475 }
476 }
477 }
478 else
479 {
480
481
482 float readFloat;
483 int readInt;
484
485
486
487 for (unsigned int i = 0; i < nViews; i++)
488 {
490 Side topSide, bottomSide;
495
496
497 infile.read((char*)&readFloat,4);
499 infile.read((char*)&readFloat,4);
501 infile.read((char*)&readFloat,4);
503 infile.read((char*)&readFloat,4);
505 infile.read((char*)&readFloat,4);
507 infile.read((char*)&readFloat,4);
509 infile.read((char*)&readFloat,4);
511 infile.read((char*)&readFloat,4);
513
514 float mxx4bytes,mxy4bytes,myx4bytes,myy4bytes;
515 infile.read((char*)&mxx4bytes,4);
516 infile.read((char*)&mxy4bytes,4);
517 infile.read((char*)&myx4bytes,4);
518 infile.read((char*)&myy4bytes,4);
519 topSide.
setM(mxx4bytes,mxy4bytes,myx4bytes,myy4bytes);
520
521 infile.read((char*)&mxx4bytes,4);
522 infile.read((char*)&mxy4bytes,4);
523 infile.read((char*)&myx4bytes,4);
524 infile.read((char*)&myy4bytes,4);
525 bottomSide.
setM(mxx4bytes,mxy4bytes,myx4bytes,myy4bytes);
526
531
532
533 infile.read((char*)&readFloat,4);
535 infile.read((char*)&readFloat,4);
537 infile.read((char*)&readFloat,4);
539 infile.read((char*)&readFloat,4);
541
542 unsigned int readUInt;
547
552
555 viewArr.push_back(view);
556 }
557 for (unsigned int i = 0; i < nViews; i++)
558 {
559
560 for (int j = 0; j < viewArr.at(i).getTopSide()->getLayers(); j++)
561 {
563 double z;
564 if(headerFormat == 1794 || headerFormat == 1795)
565 {
567 }
568 else
570 infile.read((char*)&readFloat,4);
571 z = readFloat;
572 viewArr.at(i).getTopSide()->addLayer(
grains,z);
573
574 }
575
576 for (int j = 0; j < viewArr.at(i).getBottomSide()->getLayers(); j++)
577 {
578
580 double z;
581 if(headerFormat == 1794 || headerFormat == 1795)
582 {
584 }
585 else
587 infile.read((char*)&readFloat,4);
588 z = readFloat;
589 viewArr.at(i).getBottomSide()->addLayer(
grains,z);
590
591 }
592
593 }
594 for (unsigned int i = 0; i < nViews; i++)
595 {
597 unsigned int readUInt;
598 for (int j = 0; j < viewArr.at(i).getTopSide()->getTracks(); j++)
599 {
600
602 tr.setAreaSum(readUInt);
604 tr.setCount(
static_cast<short>(readUInt));
605
606 infile.read((char*)&readFloat,4);
608 infile.read((char*)&readFloat,4);
610 infile.read((char*)&readFloat,4);
612 infile.read((char*)&readFloat,4);
614 infile.read((char*)&readFloat,4);
616 infile.read((char*)&readFloat,4);
618 infile.read((char*)&readFloat,4);
619 tr.setSigma(readFloat);
620 infile.read((char*)&readFloat,4);
621 tr.setTopZ(readFloat);
622 infile.read((char*)&readFloat,4);
623 tr.setBottomZ(readFloat);
624 if(headerFormat == 1793)
625 {
626 infile.read((char*)&readFloat,4);infile.read((char*)&readFloat,4);
627 infile.read((char*)&readFloat,4);infile.read((char*)&readFloat,4);
628 infile.read((char*)&readFloat,4);infile.read((char*)&readFloat,4);
630
631 }
632 viewArr.at(i).getTopSide()->addTrack(
tr);
633
634
635 }
636 for (int j = 0; j < viewArr.at(i).getBottomSide()->getTracks(); j++)
637 {
638
640 tr.setAreaSum(readUInt);
642 tr.setCount(
static_cast<short>(readUInt));
643
644 infile.read((char*)&readFloat,4);
646 infile.read((char*)&readFloat,4);
648 infile.read((char*)&readFloat,4);
650 infile.read((char*)&readFloat,4);
652 infile.read((char*)&readFloat,4);
654 infile.read((char*)&readFloat,4);
656 infile.read((char*)&readFloat,4);
657 tr.setSigma(readFloat);
658 infile.read((char*)&readFloat,4);
659 tr.setTopZ(readFloat);
660 infile.read((char*)&readFloat,4);
661 tr.setBottomZ(readFloat);
662 if(headerFormat == 1793)
663 {
664 infile.read((char*)&readFloat,4);infile.read((char*)&readFloat,4);
665 infile.read((char*)&readFloat,4);infile.read((char*)&readFloat,4);
666 infile.read((char*)&readFloat,4);infile.read((char*)&readFloat,4);
668
669 }
670 viewArr.at(i).getBottomSide()->addTrack(
tr);
671
672 }
673 }
674 if (codingMode == 0)
675 {
676 for (unsigned int i = 0; i < nViews; i++)
677 {
678 for (int j = 0; j < viewArr.at(i).getTopSide()->getTracks(); j++)
679 {
681 Track *
tr = viewArr.at(i).getTopSide()->getTrackAt(j);
682 for (
int k = 0; k <
tr->getCount(); k++)
683 {
684 if (headerFormat == 1794)
685 {
686 unsigned int readUInt;
689 }
690 else
692 infile.read((char*)&readFloat,4);
694 infile.read((char*)&readFloat,4);
696 infile.read((char*)&readFloat,4);
699 }
701 tr->evaluateEstimators();
702
703 }
704 for (int j = 0; j < viewArr.at(i).getBottomSide()->getTracks(); j++)
705 {
707 Track *
tr = viewArr.at(i).getBottomSide()->getTrackAt(j);
708 for (
int k = 0; k <
tr->getCount(); k++)
709 {
710 if (headerFormat == 1794)
711 {
712 unsigned int readUInt;
715 }
716 else
718 infile.read((char*)&readFloat,4);
720 infile.read((char*)&readFloat,4);
722 infile.read((char*)&readFloat,4);
725 }
727 tr->evaluateEstimators();
728
729 }
730 }
731
732
733 }
734 }
736
737 infile.close();
738 return true;
739
740}
void setViewsArray(std::vector< View > vArr)
Definition: Fragment.cpp:13
void setFragmentCoding(int fragmentCoding)
Definition: Fragment.h:23
void setId(HeaderInfo id)
Definition: Fragment.cpp:22
void setStartView(unsigned int startView)
Definition: Fragment.h:25
void setViews(int nViews)
Definition: Fragment.h:26
void setIndex(unsigned int index)
Definition: Fragment.h:24
void initFragment()
Definition: ProcessRawData.cpp:26
void setLayers(int nLayers)
Definition: Side.h:46
void setBottomZ(double bottomZ)
Definition: Side.h:37
void setTopZ(double topZ)
Definition: Side.h:36
void setMappedFovPosY(double posy)
Definition: Side.h:42
void setTracks(int nTracks)
Definition: Side.h:44
void setM(double mxx, double mxy, double myx, double myy)
Definition: Side.cpp:45
void setFlag(int flag)
Definition: Side.h:45
void setMappedFovPosX(double posx)
Definition: Side.h:41
void setStageFovPosX(double posx)
Definition: Side.h:39
void setStageFovPosY(double posy)
Definition: Side.h:40
void setTopSide(Side side)
Definition: View.h:39
void setId(int id)
Definition: View.h:41
void setTileY(int y)
Definition: View.h:48
void setBottomSide(Side side)
Definition: View.h:40
void setTileX(int x)
Definition: View.h:47
grains()
Definition: grains.C:3
double y
Definition: Struct.h:36
double x
Definition: Struct.h:35
unsigned short area
Definition: Struct.h:34
double z
Definition: Struct.h:37