QReadTXO.hh

00001 #ifndef QREADTXO_HH
00002 #define QREADTXO_HH
00003 #include <iostream>
00004 #include <fstream>
00005 #include <string>
00006 
00007 
00008 
00009 using namespace std;
00010 
00011 typedef struct Tasso {
00012   float Nblocchi;   // 4
00013   float Ndati;      // 4
00014   float m[3];      // 12
00015   float startblock;      // 4
00016   float spectrum_block_size;      // 4
00017   float n[10];      // 40
00018   float par_time_hours;      // 4
00019   float par_time_sec;      // 4
00020   float total_time;      // 4
00021   float o[4];      // 16
00022   float offset;      // 4
00023   float energy_cal;      // 4 qui siamo a 104
00024   char p[316];
00025   char comment[80];      // 80 inizia in realta' a 420
00026   char osf_mark[12];
00027 };
00028 
00029 class QReadTXO{
00030   private:
00031     char *File;
00032     int HEADERsz; // in byte
00033     int DATAsz;   // in byte
00034     int NRECORDS;
00035     int pRECORD;
00036     float *Data;
00037     ifstream fd;
00038     Tasso *Header;
00039     long inizio;
00040     long fine;
00041     int REC_LEN;
00042     char* comment;
00043   public:
00044     QReadTXO ();
00045     QReadTXO (const char *fname);
00046 /*    QReadTXO (const RdBlockData &ob) { // costruttore di copia
00047       QReadTXO *p;
00048       if (!p) {
00049         cout<<"QReadTXO: Non  posso allocare la memoria richiesta"<<endl;
00050         exit;
00051       }
00052       p=&ob;
00053     };*/
00054     ~QReadTXO(){
00055       delete [] Data;
00056       delete Header;
00057       fd.close();
00058     };
00059     int GetPos() {return pRECORD;};
00060     void Open(const char *fname);
00061     void Close(void);
00062     void Next();
00063     void Prev();
00064     int IndexSubFile(int nSUBFILE);
00065     void PrintData(int ncol=6);
00066     void PrintHeader();
00067     void PrintHeader(char *choose);
00068     void SetFileName(char *fname) {File=fname;};
00069     Tasso * GetHeader() {return Header;};
00070     float * GetStartData() {return &Data[0];};
00071     float GetData(int m) {
00072     if((m>=0) && (m < (int) Header->Ndati)) return Data[m];
00073     else {
00074     return 0;
00075     }};
00076 
00077 /*    void * GetData(int DD,int nDD){
00078       delete [] Data;
00079       Data=new char [DD*nDD];
00080       fd.read(Data,DD*nDD);
00081       return &Data[0];
00082     };*/
00083     long GetInizio(){return inizio;};
00084     long GetFine(){return fine;};
00085     int GetHeaderSize(){return HEADERsz;};
00086     int GetDataSize(){return (int) Header->Ndati;};
00087     int GetNSubFiles(){return NRECORDS;};
00088     bool IsGoodFile() {return (Header->spectrum_block_size==Header->Nblocchi);};
00089     float GetStartBlock(){return Header->startblock;};
00090     float GetSpectBlockSize(){return Header->spectrum_block_size;};
00091     float GetPartTimeSec(){return Header->par_time_sec;};
00092     float GetPartTimeHour(){return Header->par_time_hours;};
00093     float GetTotalTime() {return Header->total_time;};
00094     float GetOffset() {return Header->offset;};      // 4
00095     float GetEnergyCal() {return Header->energy_cal;};      // 4
00096     char * GetComment();      // 80
00097     char * GetOSFMark();
00098     int Rewind();
00099 };
00100 #endif

Generated on Tue Nov 16 10:50:00 2010 for CUORE Software by  doxygen 1.5.6