Ignore:
Timestamp:
11/01/19 14:18:10 (5 years ago)
Author:
tbretz
Message:
Make a public access to MCorsikaRead::CalcNumEvents possible. This allows to use it to check whether all files are valid. Added the new option '--check' to ceres for that. Copy '-tel' to the file names. This is more conevenient in reading them.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Mars/mcorsika/MCorsikaRead.cc

    r19696 r19848  
    167167// This opens the next file in the list and deletes its name from the list.
    168168//
    169 Int_t MCorsikaRead::OpenNextFile(Bool_t print)
     169Int_t MCorsikaRead::OpenNextFile(Bool_t print, Bool_t telrequired)
    170170{
    171171
     
    196196        return kERROR;
    197197
    198     *fLog << inf << "Open file: '" << name << "'" << endl;
    199 
    200     // Check if thsi is a single telescope from a CORSIKA telescope array
    201     // This is indicated by the -telXXX attached to the filename
    202     TObjArray *res = TPRegexp("(.*/)?cer([0-9]+)-tel([0-9]+)").MatchS(name, "i");
    203     if (res->GetLast()==3)
     198    *fLog << (telrequired?inf:all) << "Open file: '" << name << "'" << endl;
     199
     200    if (telrequired)
    204201    {
    205         const TString match = res->At(0)->GetName();
    206         const TString path  = res->At(1)->GetName();
    207         const UInt_t  runid = atoi(res->At(2)->GetName());
    208         const UInt_t  telid = atoi(res->At(3)->GetName());
    209 
    210         *fLog << inf2 << "Run " << runid << " detected to be for telescope #" << telid << endl;
    211 
    212         if (telid>=fNumTelescopes)
     202        // Check if thsi is a single telescope from a CORSIKA telescope array
     203        // This is indicated by the -telXXX attached to the filename
     204        TObjArray *res = TPRegexp("(.*/)?cer([0-9]+)-tel([0-9]+)").MatchS(name, "i");
     205        if (res->GetLast()==3)
    213206        {
    214             *fLog << err << "Position of telescope " << telid << " not defined." << endl;
    215             return kERROR;
     207            const TString match = res->At(0)->GetName();
     208            const TString path  = res->At(1)->GetName();
     209            const UInt_t  runid = atoi(res->At(2)->GetName());
     210            const UInt_t  telid = atoi(res->At(3)->GetName());
     211
     212            *fLog << inf2 << "Run " << runid << " detected to be for telescope #" << telid << endl;
     213
     214            if (telid>=fNumTelescopes)
     215            {
     216                *fLog << err << "Position of telescope " << telid << " not defined." << endl;
     217                return kERROR;
     218            }
     219
     220            *fLog << inf << "Telescope #" << telid << " [X/Y/Z (R)]: ";
     221            *fLog << fTelescopeX[telid] << "/";
     222            *fLog << fTelescopeY[telid] << "/";
     223            *fLog << fTelescopeZ[telid] << " (R=" << fTelescopeR[telid] << ")" << endl;
     224
     225            fNumTelescope = telid+1;
    216226        }
    217 
    218         *fLog << inf << "Telescope #" << telid << " [X/Y/Z (R)]: ";
    219         *fLog << fTelescopeX[telid] << "/";
    220         *fLog << fTelescopeY[telid] << "/";
    221         *fLog << fTelescopeZ[telid] << " (R=" << fTelescopeR[telid] << ")" << endl;
    222 
    223         fNumTelescope = telid+1;
     227        delete res;
    224228    }
    225     delete res;
    226 
    227229
    228230    if (fDisplay)
     
    288290    fNumTotalEvents = 0;
    289291
     292    MCorsikaRunHeader runheader;
     293
    290294    Bool_t rc = kTRUE;
    291295
    292296    while (1)
    293297    {
    294         switch (OpenNextFile(kFALSE))
     298        switch (OpenNextFile(kFALSE, kFALSE))
    295299        {
    296300        case kFALSE:
     
    310314               {
    311315               if (blockType == 1200)
    312                   status = fRunHeader->ReadEvt(fInFormat, blockLength / sizeof(Float_t));
     316                  status = runheader.ReadEvt(fInFormat, blockLength / sizeof(Float_t));
    313317
    314318               else if(blockType == 1201)
     
    319323                  vector<Float_t> buffer(blockLength / sizeof(Float_t));
    320324                  status = fInFormat->Read(buffer.data(), blockLength);
    321                   status = fRunHeader->ReadEventHeader(buffer.data());
     325                  status = runheader.ReadEventHeader(buffer.data());
    322326                  break;
    323327                  }
     
    325329                  fInFormat->Seek(blockLength);
    326330               }
    327                  
     331
    328332            if (status != kTRUE)
    329333               return status;
     
    331335            if (!fInFormat->SeekEvtEnd())
    332336            {
    333                *fLog << (fForceMode?warn:err) << "Error: RUNE section not found in file." << endl;
     337               *fLog << (fForceMode?warn:err) << "ERROR - RUNE section not found in file." << endl;
    334338               if (!fForceMode)
    335339                  return fForceMode ? kTRUE : kFALSE;
    336340            }
    337341
    338             if (!fRunHeader->ReadEvtEnd(fInFormat, kTRUE))
     342            if (!runheader.ReadEvtEnd(fInFormat, kTRUE))
    339343            {
    340                *fLog << (fForceMode?warn:err) << "Error: Reading RUNE section failed." << endl;
     344               *fLog << (fForceMode?warn:err) << "ERROR - Reading RUNE section failed." << endl;
    341345               if (!fForceMode)
    342346                  return kFALSE;
    343347            }
    344348
    345             fNumTotalEvents += fRunHeader->GetNumEvents()*fRunHeader->GetNumReuse()*
     349            fNumTotalEvents += runheader.GetNumEvents()*runheader.GetNumReuse()*
    346350                (fTelescopeIdx<0 && fNumTelescope==0 ? fNumTelescopes : 1);
    347351            continue;
     
    806810        *fLog << inf2 << "Reading Telecope positions from " << fname << ":" << endl;
    807811
    808         TPRegexp regexp("\\s*TELESCOPE"
    809                         "\\s+([-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?)"
    810                         "\\s+([-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?)"
    811                         "\\s+([-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?)"
    812                         "\\s+([-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?)"
    813                         "\\s+([0-9]+)\\s*");
    814 
    815812        ifstream fin(fname);
    816813
     
    823820                break;
    824821
    825             const TObjArray *res = regexp.MatchS(buf);
    826             if (res->GetLast()==9)
     822            buf = buf.Strip(TString::kBoth);
     823            if (buf(0, 9)!="TELESCOPE")
     824                continue;
     825
     826            float x, y, z, r;
     827            int idx;
     828            if (sscanf(buf.Data()+9, "%f %f %f %f %d", &x, &y, &z, &r, &idx)!=5)
     829                continue;
     830
     831            if (idx>=fNumTelescopes)
    827832            {
    828                 const UInt_t idx = atoi(res->At(9)->GetName());
    829                 if (idx>=fNumTelescopes)
    830                 {
    831                     fNumTelescopes = idx+1;
    832                     fTelescopeX.Set(fNumTelescopes);
    833                     fTelescopeY.Set(fNumTelescopes);
    834                     fTelescopeZ.Set(fNumTelescopes);
    835                     fTelescopeR.Set(fNumTelescopes);
    836                 }
    837 
    838                 fTelescopeX[idx] = atof(res->At(1)->GetName());
    839                 fTelescopeY[idx] = atof(res->At(3)->GetName());
    840                 fTelescopeZ[idx] = atof(res->At(5)->GetName());
    841                 fTelescopeR[idx] = atof(res->At(7)->GetName());
     833                fNumTelescopes = idx+1;
     834                fTelescopeX.Set(fNumTelescopes);
     835                fTelescopeY.Set(fNumTelescopes);
     836                fTelescopeZ.Set(fNumTelescopes);
     837                fTelescopeR.Set(fNumTelescopes);
    842838            }
    843             delete res;
     839
     840            fTelescopeX[idx] = x;
     841            fTelescopeY[idx] = y;
     842            fTelescopeZ[idx] = z;
     843            fTelescopeR[idx] = r;
    844844        }
    845845
Note: See TracChangeset for help on using the changeset viewer.