Reading SMA and TMA calibrations

From: Christian Holm Christensen (cholm@hehi03.nbi.dk)
Date: Thu Oct 31 2002 - 13:49:02 EST

  • Next message: Stephen Sanders: "Re: Reading SMA and TMA calibrations"
    Hi all (in particular Steve and Hiro), 
    
    Is there any reason why some of the calibration files in 
    
      <prefix>/share/brat/params/mult  
    
    are not used?  In 
    
       data/calib/Br{Tile,Si}Calibration.cxx 
    
    the methods 
    
      Br{Tile,Si}TmpCalibration::ReadAsciiFile(Int_t runno)
    
    as series of `if' statements selects one of the files from
    
      <prefix>/share/brat/params/mult   
    
    but not all are used.  Another way to do all this, is to utilise
    ROOT's `TSystemDirectory', like 
    
      // Open the directory 
      TSystemDirectory dir(Form("%s/params/mult", pathMan->GetDataDir());
    
      // get a list of files (inodes) in that directory 
      TList* files = dir->GetListOfFiles(); 
      if (!list) {
        Error("ReadASCIIFile", "Couldn't open the calib directory");
        return;
      }
      
      // Make an array to store the runnumbers in 
      TArrayI runNos(10); 
      Int_t current = 0;
    
      // Loop over the inodes 
      TSystemFile* sfile = 0; 
      files.Sort();
      TIter next(files); 
      while ((sfile = (TSystemFile*)next())) { 
        // If it's a folder (directory) or doesn't contain `BrCalibr' in
        //   it's name, then continue 
        if (sfile->IsFolder()) continue; 
        TString name(sfile->GetName());
        if (!name.Contains("BrCalibr")) continue; 
    
        // Find the `_' that seperates the run number from the rest, and
        // remove everything up to and including that `_'
        Ssiz_t idx = name.Index('_');
        name.Remove(0, idex+1);
    
        // Find the `.' that starts the last part of the file, and remove
        // everything after that 
        idx = name.Index('.');
        name.Remove(idx);
    
        // Expand the array if needed 
        if (runNos.fN <= current + 1 ) 
          runNos.Set(runNos.fN * 2);
    
        // Add the runnumber to the list. 
        runNos[current++] = strtol(name.Data(), NULL, 0);
      }
    
      // Search through the array, looking for the closest match (less
      // than or equal).
      Int_t real = TMath::BinarySearch(runNos.fN, runNos.fArray, runno);
    
      // Make the filename, and open the file 
      sprintf(fname, "%s/params/mult/BrCalibrMult_%d.dat",
                          pathMan->GetDataDir(), runNos[real]);  
      file.open(fname);
    
    In this way, you don't have to change the code each time a new file is
    added.  If you like this idea, then I'll commit to CVS for both the
    TMA and SMA code (I've already implemented it in my working directory). 
    
    Yours, 
    
     ____ |  Christian Holm Christensen 
      |_| |	 -------------------------------------------------------------
        | |	 Address: Sankt Hansgade 23, 1. th.  Phone:  (+45) 35 35 96 91
         _|	          DK-2200 Copenhagen N       Cell:   (+45) 24 61 85 91
        _|	          Denmark                    Office: (+45) 353  25 305
     ____|	 Email:   cholm@nbi.dk               Web:    www.nbi.dk/~cholm
     | |
    


    This archive was generated by hypermail 2.1.5 : Thu Oct 31 2002 - 12:50:49 EST