Ignore:
Timestamp:
08/26/04 13:58:11 (20 years ago)
Author:
tbretz
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/merpp.cc

    r4723 r4740  
    11#include <TSystem.h>
     2
     3#include <TFile.h>
     4#include <TTree.h>
    25
    36#include "MParList.h"
     
    7982//    gLog << "   --sql=mysql://user:password@url  Insert run into database" << endl << endl;
    8083    gLog << " Report File Options:" << endl;
     84    gLog << "   --auto-time               Take time automatically from MRawRunHeader" << endl;
     85    gLog << "                             (overwrites --start= and/or --stop=)" << endl;
    8186    gLog << "   --start=date/time         Start event time" << endl;
    8287    gLog << "   --stop=date/time          Stop  event time" << endl;
     
    110115}
    111116
     117void GetTimeFromFile(const char *fname, MTime &start, MTime &stop)
     118{
     119    TFile f(fname, "READ");
     120
     121    TTree *t = (TTree*)f.Get("RunHeaders");
     122    if (t->GetEntries()!=1)
     123    {
     124        gLog << warn << "WARNING - File " << fname << " contains no or more than one entry in RunHeaders... Times unchanged." << endl;
     125        return;
     126    }
     127
     128    MRawRunHeader *h = 0;
     129    t->SetBranchAddress("MRawRunHeader.", &h);
     130    t->GetEntry(0);
     131    if (!h)
     132    {
     133        gLog << warn << "WARNING - File " << fname << " did not contain RunHeaders.MRawRunHeader... Times unchanged." << endl;
     134        return;
     135    }
     136
     137    if (!start)
     138        start = h->GetRunStart();
     139    if (!stop)
     140        stop = h->GetRunEnd();
     141}
     142
    112143int main(const int argc, char **argv)
    113144{
     
    132163    const Bool_t kForceProc  = arg.HasOnlyAndRemove("-ff");
    133164    const Int_t  kRunNumber  = arg.GetIntAndRemove("--run=", -1);
     165    const Bool_t kAutoTime   = arg.HasOnlyAndRemove("--auto-time");
    134166          Int_t  kRunFile    = arg.GetIntAndRemove("--runfile=", -1);
    135167          Bool_t kUpdate     = arg.HasOnlyAndRemove("--update") || arg.HasOnlyAndRemove("-u");
     
    147179        kRunFile = 0;
    148180
     181    if (arg.GetNumOptions()>0)
     182    {
     183        gLog << warn << "WARNING - Unknown commandline options..." << endl;
     184        arg.Print("options");
     185        gLog << endl;
     186    }
     187
     188    //
     189    // check for the right usage of the program
     190    //
     191    if (arg.GetNumArguments()<1 || arg.GetNumArguments()>2)
     192    {
     193        Usage();
     194        return -1;
     195    }
     196
     197    //
     198    // This is to make argv[i] more readable insidethe code
     199    //
     200    TString kNamein  = arg.GetArgumentStr(0);
     201    TString kNameout = arg.GetArgumentStr(1);
     202
     203    const Bool_t isreport = kNamein.EndsWith(".rep");
     204    const Bool_t isdc     = kNamein.EndsWith(".txt");
     205    const Bool_t israw    = !isreport && !isdc;
     206
     207    if (!kNamein.EndsWith(".raw") && israw)
     208        kNamein += ".raw";
     209
     210    if (kNameout.IsNull())
     211        kNameout = kNamein(0, kNamein.Last('.'));
     212
     213    if (!kNameout.EndsWith(".root"))
     214        kNameout += ".root";
     215
     216//    if (!kSqlDataBase.IsNull() && !israw)
     217//        gLog << warn << "WARNING - Option '--sql=' only valid for raw-files... ignored." << endl;
     218
     219    //
     220    // Initialize Non-GUI (batch) mode
     221    //
     222    gROOT->SetBatch();
     223
     224    //
     225    // check whether the given files are OK.
     226    //
     227    if (gSystem->AccessPathName(kNamein, kFileExists))
     228    {
     229        gLog << err << "Sorry, the input file '" << kNamein << "' doesn't exist." << endl;
     230        return -1;
     231    }
     232
     233    const Bool_t fileexist = !gSystem->AccessPathName(kNameout, kFileExists);
     234    const Bool_t writeperm = !gSystem->AccessPathName(kNameout, kWritePermission);
     235
     236    if (fileexist && !writeperm)
     237    {
     238        gLog << err << "Sorry, you don't have write permission for '" << kNameout << "'." << endl;
     239        return -1;
     240    }
     241
     242    if (fileexist && !kUpdate && !kForce)
     243    {
     244        gLog << err << "Sorry, file '" << kNameout << "' already existing." << endl;
     245        return -1;
     246    }
     247
     248    if (!fileexist && kUpdate)
     249    {
     250        gLog << warn << "File '" << kNameout << "' doesn't yet exist." << endl;
     251        kUpdate=kFALSE;
     252    }
     253
     254    //
     255    // Evaluate possible start-/stop-time
     256    //
     257    if (kAutoTime && kUpdate && (isreport || isdc))
     258        GetTimeFromFile(kNameout, kTimeStart, kTimeStop);
     259
    149260    if (kTimeStart)
    150261        gLog << inf << "Start Time: " << kTimeStart << endl;
     
    152263        gLog << inf << "Stop  Time: " << kTimeStop << endl;
    153264
    154     if (arg.GetNumOptions()>0)
    155     {
    156         gLog << warn << "WARNING - Unknown commandline options..." << endl;
    157         arg.Print("options");
    158         gLog << endl;
    159     }
    160 
    161     //
    162     // check for the right usage of the program
    163     //
    164     if (arg.GetNumArguments()<1 || arg.GetNumArguments()>2)
    165     {
    166         Usage();
    167         return -1;
    168     }
    169 
    170     //
    171     // This is to make argv[i] more readable insidethe code
    172     //
    173     TString kNamein  = arg.GetArgumentStr(0);
    174     TString kNameout = arg.GetArgumentStr(1);
    175 
    176     const Bool_t isreport = kNamein.EndsWith(".rep");
    177     const Bool_t isdc     = kNamein.EndsWith(".txt");
    178     const Bool_t israw    = !isreport && !isdc;
    179 
    180     if (!kNamein.EndsWith(".raw") && israw)
    181         kNamein += ".raw";
    182 
    183     if (kNameout.IsNull())
    184         kNameout = kNamein(0, kNamein.Last('.'));
    185 
    186     if (!kNameout.EndsWith(".root"))
    187         kNameout += ".root";
    188 
    189 //    if (!kSqlDataBase.IsNull() && !israw)
    190 //        gLog << warn << "WARNING - Option '--sql=' only valid for raw-files... ignored." << endl;
    191 
    192     //
    193     // Initialize Non-GUI (batch) mode
    194     //
    195     gROOT->SetBatch();
    196 
    197     //
    198     // check whether the given files are OK.
    199     //
    200     if (gSystem->AccessPathName(kNamein, kFileExists))
    201     {
    202         gLog << err << "Sorry, the input file '" << kNamein << "' doesn't exist." << endl;
    203         return -1;
    204     }
    205 
    206     const Bool_t fileexist = !gSystem->AccessPathName(kNameout, kFileExists);
    207     const Bool_t writeperm = !gSystem->AccessPathName(kNameout, kWritePermission);
    208 
    209     if (fileexist && !writeperm)
    210     {
    211         gLog << err << "Sorry, you don't have write permission for '" << kNameout << "'." << endl;
    212         return -1;
    213     }
    214 
    215     if (fileexist && !kUpdate && !kForce)
    216     {
    217         gLog << err << "Sorry, file '" << kNameout << "' already existing." << endl;
    218         return -1;
    219     }
    220 
    221     if (!fileexist && kUpdate)
    222     {
    223         gLog << warn << "File '" << kNameout << "' doesn't yet exist." << endl;
    224         kUpdate=kFALSE;
    225     }
    226 
     265    //
     266    // Ignore TObject Streamer (bits, uniqueid) for MArray and MParContainer
     267    //
    227268    MArray::Class()->IgnoreTObjectStreamer();
    228269    MParContainer::Class()->IgnoreTObjectStreamer();
Note: See TracChangeset for help on using the changeset viewer.