]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONTrackerIO.cxx
- update track cuts
[u/mrichter/AliRoot.git] / MUON / AliMUONTrackerIO.cxx
index c14047ad8434675034a3102beb7844ad1ae5a3d8..3e8b6fe75e10db3d984c0c0704f1e0973fa4a274 100644 (file)
@@ -16,6 +16,7 @@
 // $Id$
 
 #include <cstdlib>
+#include <iostream>
 #include "AliMUONTrackerIO.h"
 
 /// \class AliMUONTrackerIO
 ///
 /// \author Laurent Aphecetche, Subatech
 
+using std::ostringstream;
+using std::istringstream;
+using std::cout;
+using std::endl;
 /// \cond CLASSIMP
 ClassImp(AliMUONTrackerIO)
 /// \endcond
@@ -79,17 +84,16 @@ AliMUONTrackerIO::ReadOccupancy(const char* filename,AliMUONVStore& occupancyMap
   char line[1024];
   while ( in.getline(line,1024) )
        stream << line << "\n";
-  datastring = TString(stream.str().c_str());
   
   in.close();
   
-  return DecodeOccupancy(datastring,occupancyMap);
+  return DecodeOccupancy(stream.str().c_str(),occupancyMap);
   
 }
 
 //_____________________________________________________________________________
 Int_t 
-AliMUONTrackerIO::DecodeOccupancy(TString data, AliMUONVStore& occupancyMap)
+AliMUONTrackerIO::DecodeOccupancy(const char* data, AliMUONVStore& occupancyMap)
 {
   /// Decode occupancy string created append values to the occupancyMap store.
   /// Expected format of the file is :
@@ -98,11 +102,11 @@ AliMUONTrackerIO::DecodeOccupancy(TString data, AliMUONVStore& occupancyMap)
   if ( ! AliMpDDLStore::Instance(kFALSE) )
   {
     AliErrorClass("Mapping not loaded. Cannot work");
-    return 0;
+    return kNoMapping;
   }
   
   char line[1024];
-  istringstream in(data.Data());
+  istringstream in(data);
   
   Int_t n(0);
   
@@ -118,6 +122,13 @@ AliMUONTrackerIO::DecodeOccupancy(TString data, AliMUONVStore& occupancyMap)
 
     sin >> busPatchId >> manuId >> sumn >> numberOfEvents;
     
+    if ( busPatchId == -1 && manuId == -1 && sumn == 0 && numberOfEvents == 0 )
+    {
+      /// DA could not produce information (because run failed somehow). 
+      /// That's OK, but let the world know about it
+      return kNoInfoFile;
+    }
+    
     Int_t detElemId = AliMpDDLStore::Instance()->GetDEfromBus(busPatchId);
 
     AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(detElemId);
@@ -172,22 +183,20 @@ AliMUONTrackerIO::ReadPedestals(const char* filename, AliMUONVStore& pedStore)
     return kCannotOpenFile;
   }
   
-  TString datastring;
   ostringstream stream;
   char line[1024];
   while ( in.getline(line,1024) )
        stream << line << "\n";
-  datastring = TString(stream.str().c_str());
   
   in.close();
 
-  return DecodePedestals(datastring,pedStore);
+  return DecodePedestals(stream.str().c_str(),pedStore);
   
 }
 
 //_____________________________________________________________________________
 Int_t 
-AliMUONTrackerIO::DecodePedestals(TString data, AliMUONVStore& pedStore)
+AliMUONTrackerIO::DecodePedestals(const char* data, AliMUONVStore& pedStore)
 {
   /// Read pedestal Data (produced by the MUONTRKda.exe program for instance)
   /// and append the read values into the given VStore
@@ -198,7 +207,7 @@ AliMUONTrackerIO::DecodePedestals(TString data, AliMUONVStore& pedStore)
   Int_t busPatchID, manuID, manuChannel;
   Float_t pedMean, pedSigma;
   Int_t n(0);
-  istringstream in(data.Data());
+  istringstream in(data);
   
   while ( in.getline(line,1024) )
   {
@@ -255,31 +264,29 @@ AliMUONTrackerIO::ReadGains(const char* filename, AliMUONVStore& gainStore,
     return kCannotOpenFile;
   }
   
-  TString datastring;
   ostringstream stream;
   char line[1024];
   while ( in.getline(line,1024) )
        stream << line << "\n";
-  datastring = TString(stream.str().c_str());
   
   in.close();
   
-  return DecodeGains(datastring,gainStore,comment);
+  return DecodeGains(stream.str().c_str(),gainStore,comment);
 
 }
 
 //_____________________________________________________________________________
 Int_t 
-AliMUONTrackerIO::DecodeGains(TString data, AliMUONVStore& gainStore,
-                            TString& comment)
+AliMUONTrackerIO::DecodeGains(const char* data, AliMUONVStore& gainStore,
+                              TString& comment)
 {
   /// Read gain file (produced by the MUONTRKda.exe program for instance)
   /// and append the read values into the given VStore
-  /// To be used when the input is a TString (for instance when getting data 
+  /// To be used when the input is a string (for instance when getting data 
   /// from AMORE DB).
   
   char line[1024];
-  istringstream in(data.Data());
+  istringstream in(data);
   Int_t busPatchID, manuID, manuChannel;
   Float_t a0, a1;
   Int_t thres;
@@ -290,6 +297,7 @@ AliMUONTrackerIO::DecodeGains(TString data, AliMUONVStore& gainStore,
   Int_t* runs(0x0);
   Int_t* dac(0x0);
   Int_t nDAC(0);
+  Int_t nInit(0),f1nbp(0),f2nbp(0);
   
   while ( in.getline(line,1024) )
   {
@@ -300,6 +308,8 @@ AliMUONTrackerIO::DecodeGains(TString data, AliMUONVStore& gainStore,
       if ( sline.Contains("DUMMY") )
       {
         AliDebugClass(1,"Got a dummy file here");
+        delete [] runs;
+        delete [] dac;
         return kDummyFile;
       }
       if ( sline.Contains("* Run") )
@@ -311,6 +321,7 @@ AliMUONTrackerIO::DecodeGains(TString data, AliMUONVStore& gainStore,
           runNumber = s.Atoi();
           AliDebugClass(1,Form("runNumber is %d",runNumber));
         }            
+       delete a;
       }
       if ( sline.Contains("DAC values") )
       {
@@ -320,13 +331,28 @@ AliMUONTrackerIO::DecodeGains(TString data, AliMUONVStore& gainStore,
         {
           if ( nDAC < 100 ) 
           {
+            delete[] runs;
+            delete[] dac;
             runs = new Int_t[nDAC];
             dac = new Int_t[nDAC];
             // skip two lines
             in.getline(line,1024);
+            sline = line;
+            if (!sline.Contains("*  nInit ="))
+            {
+              AliErrorClass("Improper format : was expecting nInit= line...");              
+            }
+            else
+            {
+              sscanf(line,"//   *  nInit = %d  *  f1nbp = %d  *  f2nbp = %d",&nInit,&f1nbp,&f2nbp);
+              AliDebugClass(1,Form("nInit = %d",nInit));
+              AliDebugClass(1,Form("f1nbp = %d",f1nbp));
+              AliDebugClass(1,Form("f2nbp = %d",f2nbp));
+            }
+            in.getline(line,1024);
             in.getline(line,1024);
             // then get run and dac values
-           Int_t iDAC(0);
+            Int_t iDAC(0);
             for ( Int_t i = 0; i < nDAC; ++i ) 
             {
               in.getline(line,1024);
@@ -342,6 +368,8 @@ AliMUONTrackerIO::DecodeGains(TString data, AliMUONVStore& gainStore,
           {
             AliErrorClass(Form("Something went wrong, as I get too big nDAC = %d",nDAC));
             nDAC = 0;
+            delete [] runs;
+            delete [] dac;
             return kFormatError;
           }
         }
@@ -393,6 +421,10 @@ AliMUONTrackerIO::DecodeGains(TString data, AliMUONVStore& gainStore,
   {
     comment += Form(";(RUN %d = DAC %d)",runs[i],dac[i]);
   }
+  comment += Form(";(nDAC = %d)",nDAC);
+  comment += Form(";(nInit = %d)",nInit);
+  comment += Form(";(f1nbp = %d)",f1nbp);
+  comment += Form(";(f2nbp = %d)",f2nbp);
   
   delete[] runs;
   delete[] dac;
@@ -402,20 +434,44 @@ AliMUONTrackerIO::DecodeGains(TString data, AliMUONVStore& gainStore,
 
 //_____________________________________________________________________________
 Int_t
-AliMUONTrackerIO::ReadCapacitances(const char* file, AliMUONVStore& capaStore)
+AliMUONTrackerIO::ReadCapacitances(const char* filename, AliMUONVStore& capaStore)
 {
   /// Read capacitance file
   /// and append the read values into the given VStore
   
-  ifstream in(gSystem->ExpandPathName(file));
-  if (in.bad()) return kCannotOpenFile;
+  TString sFilename(gSystem->ExpandPathName(filename));
+  
+  std::ifstream in(sFilename.Data());
+  if (!in.good()) 
+  {
+    return kCannotOpenFile;
+  }
+  
+  ostringstream stream;
+  char line[1024];
+  while ( in.getline(line,1024) )
+       stream << line << "\n";
+  
+  in.close();
+  
+  return DecodeCapacitances(stream.str().c_str(),capaStore);
+}
+
+//_____________________________________________________________________________
+Int_t
+AliMUONTrackerIO::DecodeCapacitances(const char* data, AliMUONVStore& capaStore)
+{
+  /// Read capacitances and append the read values into the given VStore
+  /// To be used when the input is a string (for instance when getting data 
+  /// from AMORE DB).
   
   Int_t ngenerated(0);
   
   char line[1024];
   Int_t serialNumber(-1);
   AliMUONVCalibParam* param(0x0);
-  
+  istringstream in(data);
+
   while ( in.getline(line,1024,'\n') )
   {
     if ( isdigit(line[0]) ) 
@@ -436,6 +492,9 @@ AliMUONTrackerIO::ReadCapacitances(const char* file, AliMUONVStore& capaStore)
       }      
       continue;
     }
+    
+    if (!param) continue;
+    
     Int_t channel;
     Float_t capaValue;
     Float_t injectionGain;
@@ -447,22 +506,17 @@ AliMUONTrackerIO::ReadCapacitances(const char* file, AliMUONVStore& capaStore)
     ++ngenerated;
   }
   
-  in.close();
-  
   return ngenerated;
 }
 
 //_____________________________________________________________________________
 Int_t 
-AliMUONTrackerIO::ReadConfig(const char* filename, AliMUONVStore& confStore, Bool_t& changed)
+AliMUONTrackerIO::ReadConfig(const char* filename, AliMUONVStore& confStore)
 {
   /// Read config file (produced by the MUONTRKda.exe program for instance)
   /// and append the read values into the given VStore
   /// To be used when the input is a file (for instance when reading data 
   /// from the OCDB).
-  /// changed must be set to kFALSE before calling this method for the first time
-  /// (then the subsequent calls must not set it !)
-  ///
   
   TString sFilename(gSystem->ExpandPathName(filename));
   
@@ -472,42 +526,35 @@ AliMUONTrackerIO::ReadConfig(const char* filename, AliMUONVStore& confStore, Boo
     return kCannotOpenFile;
   }
   
-  TString datastring;
   ostringstream stream;
   char line[1024];
   while ( in.getline(line,1024) )
        stream << line << "\n";
-  datastring = TString(stream.str().c_str());
   
   in.close();
   
-  return DecodeConfig(datastring,confStore,changed);
+  return DecodeConfig(stream.str().c_str(),confStore);
 }
 
 //_____________________________________________________________________________
 Int_t 
-AliMUONTrackerIO::DecodeConfig(TString data, AliMUONVStore& confStore, Bool_t& changed)
+AliMUONTrackerIO::DecodeConfig(const char* data, AliMUONVStore& confStore)
 {
   /// Read config data (produced by the MUONTRKda.exe program for instance)
   /// and append the read values into the given VStore
   /// To be used when the input is a TString (for instance when getting data 
   /// from AMORE DB).
-  /// changed must be set to kFALSE before calling this method for the first time
-  /// (then the subsequent calls must not set it !)
 
   char line[1024];
   Int_t busPatchID, manuID;
   Int_t n(0);
-  istringstream in(data.Data());
+  istringstream in(data);
   
   while ( in.getline(line,1024) )
   {
     AliDebugClass(3,Form("line=%s",line));
     if ( line[0] == '#' ) 
     {
-      TString sline(line);
-      sline.ToUpper();
-      if (sline.Contains("CHANGED") && !sline.Contains("UNCHANGED")) changed = kTRUE;
       continue;
     }
     std::istringstream sin(line);
@@ -537,7 +584,7 @@ AliMUONTrackerIO::DecodeConfig(TString data, AliMUONVStore& confStore, Bool_t& c
 
 //_____________________________________________________________________________
 Int_t 
-AliMUONTrackerIO::WriteConfig(ofstream& out, AliMUONVStore& confStore)
+AliMUONTrackerIO::WriteConfig(ofstream& out, const AliMUONVStore& confStore)
 {
   /// Write the conf store as an ASCII file
   /// Note that we are converting (back) the detElemId into a busPatchId