Changeset 11381


Ignore:
Timestamp:
07/13/11 18:39:52 (13 years ago)
Author:
tbretz
Message:
Some changes to the way filenames are determined; made MessageImp a base class of DataFileImp for simplicity; redirect debug-out to console.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/EventBuilderWrapper.h

    r11376 r11381  
    2828using namespace std;
    2929
    30 class DataFileImp
     30class DataFileImp : public MessageImp
    3131{
    3232    uint32_t fRunId;
    3333
     34    int Write(const Time &time, const std::string &txt, int qos)
     35    {
     36        return fMsg.Write(time, txt, qos);
     37    }
     38
    3439protected:
    35     MessageImp &fLog;
     40    MessageImp &fMsg;
    3641    string fFileName;
    3742
    3843public:
    39     DataFileImp(uint32_t id, MessageImp &imp) : fRunId(id), fLog(imp) { }
     44    DataFileImp(uint32_t id, MessageImp &imp) : fRunId(id), fMsg(imp) { }
    4045    virtual ~DataFileImp() { }
    4146
    4247    virtual bool OpenFile(RUN_HEAD* h) = 0;
    43     virtual bool Write(EVENT *) = 0;
     48    virtual bool WriteEvt(EVENT *) = 0;
    4449    virtual bool Close(RUN_TAIL * = 0) = 0;
    4550
     
    5560    //! @param extension a string containing the extension to be appened to the file name
    5661    //
    57     string FormFileName(uint32_t runType, string extension)
    58     {
    59         //TODO where am I supposed to get the base directory from ?
    60         //TODO also, for creating subsequent directories, should I use the functions from the dataLogger ?
    61         string baseDirectory = "./Run";
    62 
    63         ostringstream result;
    64 //        result << baseDirectory;
    65 //        result << Time::fmt("/%Y/%m/%d/") << (Time() - boost::posix_time::time_duration(12,0,0));
    66         result << setfill('0') << setw(8) << fRunId;
    67         result << ".001_";
    68         switch (runType)
    69         {
    70         case -1:
    71             result << 'T';
    72             break;
    73         case 0:
    74             result << 'D';
    75             break;
    76         case 1:
    77             result << 'P';
    78             break;
    79         case 2:
    80             result << 'C';
    81             break;
    82         case 3:
    83             result << 'N';
    84             break;
    85         default:
    86             result << runType;
    87         };
    88         result << "." << extension;
    89 
    90         return result.str();
     62    static string FormFileName(uint32_t runid, string extension)
     63    {
     64        ostringstream name;
     65        name << Time().NightAsInt() << '.' << setfill('0') << setw(3) << runid << '.' << extension;
     66        return name.str();
    9167    }
    9268};
     
    9773    DataFileNone(uint32_t id, MessageImp &imp) : DataFileImp(id, imp) { }
    9874
     75    Time fTime;
     76
    9977    bool OpenFile(RUN_HEAD* h)
    10078    {
    10179        fFileName = "/dev/null";
    102         cout << "OPEN_FILE #" << GetRunId() << " (" << this << ")" <<  endl;
    103         cout << " Ver= " << h->Version << endl;
    104         cout << " Typ= " << h->RunType << endl;
    105         cout << " Nb = " << h->NBoard << endl;
    106         cout << " Np = " << h->NPix << endl;
    107         cout << " NTm= " << h->NTm << endl;
    108         cout << " roi= " << h->Nroi << endl;
     80
     81        ostringstream str;
     82        str << this << " - "
     83            << "OPEN_FILE #" << GetRunId() << ":"
     84            << " Ver=" << h->Version
     85            << " Typ=" << h->RunType
     86            << " Nb="  << h->NBoard
     87            << " Np="  << h->NPix
     88            << " NTm=" << h->NTm
     89            << " roi=" << h->Nroi;
     90
     91        Debug(str);
     92
     93        fTime = Time();
    10994
    11095        return true;
    11196    }
    112     bool Write(EVENT *)
    113     {
     97    bool WriteEvt(EVENT *e)
     98    {
     99        const Time now;
     100        if (now-fTime<boost::posix_time::seconds(5))
     101            return true;
     102
     103        fTime = now;
     104
     105        ostringstream str;
     106        str << this << " - EVENT #" << e->EventNum;
     107        Debug(str);
     108
    114109        return true;
    115110    }
    116111    bool Close(RUN_TAIL * = 0)
    117112    {
    118         cout << "CLOSE FILE #" << GetRunId() << " (" << this << ")" << endl;
     113        ostringstream str;
     114        str << this << " - CLOSE FILE #" << GetRunId();
     115
     116        Debug(str);
     117
    119118        return true;
    120119    }
     
    126125    DataFileDebug(uint32_t id, MessageImp &imp) : DataFileNone(id, imp) { }
    127126
    128     bool Write(EVENT *e)
     127    bool WriteEvt(EVENT *e)
    129128    {
    130129        cout << "WRITE_EVENT #" << GetRunId() << " (" << e->EventNum << ")" << endl;
     
    226225    bool OpenFile(RUN_HEAD *h)
    227226    {
    228         const string name = FormFileName(h->RunType, "bin");
     227        const string name = FormFileName(GetRunId(), "bin");
    229228        if (access(name.c_str(), F_OK)==0)
    230229        {
    231             fLog.Error("File '"+name+"' already exists.");
     230            Error("File '"+name+"' already exists.");
    232231            return false;
    233232        }
     
    241240            ostringstream str;
    242241            str << "Open file " << name << ": " << strerror(errno) << " (errno=" << errno << ")";
    243             fLog.Error(str);
     242            Error(str);
    244243
    245244            return false;
     
    276275            ostringstream str;
    277276            str << "Open file " << name << ": " << strerror(errno) << " (errno=" << errno << ")";
    278             fLog.Error(str);
     277            Error(str);
    279278
    280279            return false;
     
    283282        return true;
    284283    }
    285     bool Write(EVENT *evt)
     284    bool WriteEvt(EVENT *evt)
    286285    {
    287286        const int sh = sizeof(EVENT)-2 + NPIX*evt->Roi*2;
     
    307306            ostringstream str;
    308307            str << " Writing footer: " << strerror(errno) << " (errno=" << errno << ")";
    309             fLog.Error(str);
     308            Error(str);
    310309
    311310            return false;
     
    318317            ostringstream str;
    319318            str << "Closing file: " << strerror(errno) << " (errno=" << errno << ")";
    320             fLog.Error(str);
     319            Error(str);
    321320
    322321            return false;
     
    390389            ostringstream str;
    391390            str << "Could not add header key " << name;
    392             fLog.Error(str);
     391            Error(str);
    393392        }
    394393    }
     
    412411    {
    413412        //Form filename, based on runid and run-type
    414         const string fileName = FormFileName(h->RunType, "fits");
     413        const string fileName = FormFileName(GetRunId(), "fits");
    415414        if (access(fileName.c_str(), F_OK)==0)
    416415        {
    417             fLog.Error("File '"+fileName+"' already exists.");
     416            Error("File '"+fileName+"' already exists.");
    418417            return false;
    419418        }
     
    443442            ostringstream str;
    444443            str << "Could not open FITS file " << fileName << ": " << e.message();
    445             fLog.Error(str);
     444            Error(str);
    446445            return false;
    447446        }
     
    476475            ostringstream str;
    477476            str << "Could not create FITS table 'Events' in file " << fileName << " reason: " << e.message();
    478             fLog.Error(str);
     477            Error(str);
    479478            return false;
    480479        }
     
    482481        if (fTable->rows() != 0)
    483482        {
    484             fLog.Error("FITS table created on the fly looks non-empty.");
     483            Error("FITS table created on the fly looks non-empty.");
    485484            return false;
    486485        }
     
    588587            ostringstream str;
    589588            str << "Writing FITS row " << fNumRows << ": " << text << " (file_write_tblbytes, rc=" << status << ")";
    590             fLog.Error(str);
     589            Error(str);
    591590        }
    592591
     
    600599    //! @param e the pointer to the EVENT
    601600    //
    602     virtual bool Write(EVENT *e)
     601    virtual bool WriteEvt(EVENT *e)
    603602    {
    604603        //FIXME As discussed earlier, we do not swap the bytes yet.
     
    614613            ostringstream str;
    615614            str << "Inserting row " << fNumRows << " into " << fFileName << ": " << text << " (fits_insert_rows, rc=" << status << ")";
    616             fLog.Error(str);
     615            Error(str);
    617616
    618617            return false;
     
    779778    bool fDebugLog;
    780779
    781     int Write(const Time &time, const std::string &txt, int qos)
    782     {
    783         return fMsg.Write(time, txt, qos);
    784     }
    785 
    786 
    787780    uint32_t fRunNumber;
    788781
    789782    void InitRunNumber()
    790783    {
     784        // FIXME: Add a check that we are not too close to noon!
    791785        const int night = Time().NightAsInt();
    792786
     
    795789        while (--fRunNumber>0)
    796790        {
    797             ostringstream name;
    798             name << night << '.' << setfill('0') << setw(3) << fRunNumber;
    799 
    800             if (access((name.str()+".bin").c_str(), F_OK) == 0)
     791            const string name = DataFileImp::FormFileName(fRunNumber, "");
     792
     793            if (access((name+"bin").c_str(), F_OK) == 0)
    801794                break;
    802             if (access((name.str()+".fits").c_str(), F_OK) == 0)
     795            if (access((name+"fits").c_str(), F_OK) == 0)
    803796                break;
    804797        }
     
    806799        fRunNumber++;
    807800
    808         cout << "FOUND: " << night << '.' << setfill('0') << setw(3) << fRunNumber << endl;
     801        ostringstream str;
     802        str << "Starting with run number " << fRunNumber;
     803        fMsg.Message(str);
     804
     805        fMsg.Fatal("Run-number detection doesn't work when noon passes!");
     806        fMsg.Error("Crosscheck with database!");
    809807    }
    810808
     
    858856    }
    859857
     858    uint32_t GetRunNumber() const { return fRunNumber; }
    860859
    861860    bool IsThreadRunning()
     
    11481147        DataFileImp *file = reinterpret_cast<DataFileImp*>(handler);
    11491148
    1150         if (!file->Write(e))
     1149        if (!file->WriteEvt(e))
    11511150            return -1;
    11521151
Note: See TracChangeset for help on using the changeset viewer.