ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$
// $MpId: AliMpDataStreams.cxx,v 1.12 2006/05/23 13:09:54 ivana Exp $
// Category: basic

//-----------------------------------------------------------------------------
// Class AliMpDataStreams
// ----------------------
// Class for providing mapping data streams
// See detailed description in the header file.
// Author: Ivana Hrivnacova; IPN Orsay
//-----------------------------------------------------------------------------

#include "AliMpDataStreams.h"
#include "AliMpDataMap.h"
#include "AliMpFiles.h"

#include "AliLog.h"

#include <TMap.h>
#include <TFile.h>
#include <TObjString.h>
#include <TString.h>
#include <Riostream.h>

#include <string>

/// \cond CLASSIMP
ClassImp(AliMpDataStreams)
/// \endcond


//______________________________________________________________________________
AliMpDataStreams::AliMpDataStreams(AliMpDataMap* map) 
  : TObject(),
    fMap(map),
    fReadFromFiles(kTRUE)
{
/// Standard and default constructor

  if ( map ) fReadFromFiles = kFALSE;
}

//______________________________________________________________________________
AliMpDataStreams::AliMpDataStreams(TRootIOCtor* /*ioCtor*/) 
  : TObject(),
    fMap(0),
    fReadFromFiles()
{
/// Root IO constructor

}

//______________________________________________________________________________
AliMpDataStreams::~AliMpDataStreams() 
{
/// Destructor

  // delete fMap;
       // Do not delete data map as it is a CDB object 
       // which is cached
}

//
// private methods
//

//______________________________________________________________________________
void AliMpDataStreams::CutDataPath(string& dataPath) const
{ 
/// Cut the path defined in AliMpFiles as Top() + one more directory

  string top = AliMpFiles::GetTop().Data();
  if ( dataPath.find(top) != string::npos ) dataPath.erase(0, top.size()+1);
  dataPath.erase(0,dataPath.find('/')+1); 
}
  


//
// public methods
//

//______________________________________________________________________________
istream& AliMpDataStreams::CreateDataStream(const TString& path) const
{
/// Return the string with data in the mapping file spcified with path.
/// Both full path in the file system and a short path (without 
/// $LICE_ROOT/mapping/data string) can be used.


  if ( fReadFromFiles ) {                                                                
    AliDebugStream(2) << "Opening file " << path.Data() << endl;
    ifstream* fileBuffer = new ifstream();
    fileBuffer->open(path.Data());
    if ( ! fileBuffer->good() ) {	
       AliErrorStream() 
         << "Cannot open file " << path.Data() << endl;
    }     
    return *fileBuffer;
  }
  else {
    AliDebugStream(2) << "Opening stream " << path.Data() << endl;

    // Cut top from the path 
    string dataPath = path.Data();
    CutDataPath(dataPath);

    istringstream* stringBuffer 
      = new istringstream(fMap->Get(dataPath).Data());
    return *stringBuffer;
   }    
}

//______________________________________________________________________________
Bool_t  AliMpDataStreams::IsDataStream(const TString& path) const
{
/// Return true, if data with given path exists

  if ( fReadFromFiles ) {                                                                
    ifstream fileBuffer(path.Data());
    return fileBuffer.good();
  }
  else {
    // Cut top from the path 
    string dataPath = path.Data();
    CutDataPath(dataPath);

    return ( fMap->Get(dataPath, kFALSE) != "" );
  }
}      

//______________________________________________________________________________
void  AliMpDataStreams::SetReadFromFiles()
{
/// Set option to read data from files

  fReadFromFiles = kTRUE;
}  

//______________________________________________________________________________
Bool_t AliMpDataStreams::GetReadFromFiles() const
{ 
/// Return the info where the data are loaded from

  return fReadFromFiles; 
}  
 AliMpDataStreams.cxx:1
 AliMpDataStreams.cxx:2
 AliMpDataStreams.cxx:3
 AliMpDataStreams.cxx:4
 AliMpDataStreams.cxx:5
 AliMpDataStreams.cxx:6
 AliMpDataStreams.cxx:7
 AliMpDataStreams.cxx:8
 AliMpDataStreams.cxx:9
 AliMpDataStreams.cxx:10
 AliMpDataStreams.cxx:11
 AliMpDataStreams.cxx:12
 AliMpDataStreams.cxx:13
 AliMpDataStreams.cxx:14
 AliMpDataStreams.cxx:15
 AliMpDataStreams.cxx:16
 AliMpDataStreams.cxx:17
 AliMpDataStreams.cxx:18
 AliMpDataStreams.cxx:19
 AliMpDataStreams.cxx:20
 AliMpDataStreams.cxx:21
 AliMpDataStreams.cxx:22
 AliMpDataStreams.cxx:23
 AliMpDataStreams.cxx:24
 AliMpDataStreams.cxx:25
 AliMpDataStreams.cxx:26
 AliMpDataStreams.cxx:27
 AliMpDataStreams.cxx:28
 AliMpDataStreams.cxx:29
 AliMpDataStreams.cxx:30
 AliMpDataStreams.cxx:31
 AliMpDataStreams.cxx:32
 AliMpDataStreams.cxx:33
 AliMpDataStreams.cxx:34
 AliMpDataStreams.cxx:35
 AliMpDataStreams.cxx:36
 AliMpDataStreams.cxx:37
 AliMpDataStreams.cxx:38
 AliMpDataStreams.cxx:39
 AliMpDataStreams.cxx:40
 AliMpDataStreams.cxx:41
 AliMpDataStreams.cxx:42
 AliMpDataStreams.cxx:43
 AliMpDataStreams.cxx:44
 AliMpDataStreams.cxx:45
 AliMpDataStreams.cxx:46
 AliMpDataStreams.cxx:47
 AliMpDataStreams.cxx:48
 AliMpDataStreams.cxx:49
 AliMpDataStreams.cxx:50
 AliMpDataStreams.cxx:51
 AliMpDataStreams.cxx:52
 AliMpDataStreams.cxx:53
 AliMpDataStreams.cxx:54
 AliMpDataStreams.cxx:55
 AliMpDataStreams.cxx:56
 AliMpDataStreams.cxx:57
 AliMpDataStreams.cxx:58
 AliMpDataStreams.cxx:59
 AliMpDataStreams.cxx:60
 AliMpDataStreams.cxx:61
 AliMpDataStreams.cxx:62
 AliMpDataStreams.cxx:63
 AliMpDataStreams.cxx:64
 AliMpDataStreams.cxx:65
 AliMpDataStreams.cxx:66
 AliMpDataStreams.cxx:67
 AliMpDataStreams.cxx:68
 AliMpDataStreams.cxx:69
 AliMpDataStreams.cxx:70
 AliMpDataStreams.cxx:71
 AliMpDataStreams.cxx:72
 AliMpDataStreams.cxx:73
 AliMpDataStreams.cxx:74
 AliMpDataStreams.cxx:75
 AliMpDataStreams.cxx:76
 AliMpDataStreams.cxx:77
 AliMpDataStreams.cxx:78
 AliMpDataStreams.cxx:79
 AliMpDataStreams.cxx:80
 AliMpDataStreams.cxx:81
 AliMpDataStreams.cxx:82
 AliMpDataStreams.cxx:83
 AliMpDataStreams.cxx:84
 AliMpDataStreams.cxx:85
 AliMpDataStreams.cxx:86
 AliMpDataStreams.cxx:87
 AliMpDataStreams.cxx:88
 AliMpDataStreams.cxx:89
 AliMpDataStreams.cxx:90
 AliMpDataStreams.cxx:91
 AliMpDataStreams.cxx:92
 AliMpDataStreams.cxx:93
 AliMpDataStreams.cxx:94
 AliMpDataStreams.cxx:95
 AliMpDataStreams.cxx:96
 AliMpDataStreams.cxx:97
 AliMpDataStreams.cxx:98
 AliMpDataStreams.cxx:99
 AliMpDataStreams.cxx:100
 AliMpDataStreams.cxx:101
 AliMpDataStreams.cxx:102
 AliMpDataStreams.cxx:103
 AliMpDataStreams.cxx:104
 AliMpDataStreams.cxx:105
 AliMpDataStreams.cxx:106
 AliMpDataStreams.cxx:107
 AliMpDataStreams.cxx:108
 AliMpDataStreams.cxx:109
 AliMpDataStreams.cxx:110
 AliMpDataStreams.cxx:111
 AliMpDataStreams.cxx:112
 AliMpDataStreams.cxx:113
 AliMpDataStreams.cxx:114
 AliMpDataStreams.cxx:115
 AliMpDataStreams.cxx:116
 AliMpDataStreams.cxx:117
 AliMpDataStreams.cxx:118
 AliMpDataStreams.cxx:119
 AliMpDataStreams.cxx:120
 AliMpDataStreams.cxx:121
 AliMpDataStreams.cxx:122
 AliMpDataStreams.cxx:123
 AliMpDataStreams.cxx:124
 AliMpDataStreams.cxx:125
 AliMpDataStreams.cxx:126
 AliMpDataStreams.cxx:127
 AliMpDataStreams.cxx:128
 AliMpDataStreams.cxx:129
 AliMpDataStreams.cxx:130
 AliMpDataStreams.cxx:131
 AliMpDataStreams.cxx:132
 AliMpDataStreams.cxx:133
 AliMpDataStreams.cxx:134
 AliMpDataStreams.cxx:135
 AliMpDataStreams.cxx:136
 AliMpDataStreams.cxx:137
 AliMpDataStreams.cxx:138
 AliMpDataStreams.cxx:139
 AliMpDataStreams.cxx:140
 AliMpDataStreams.cxx:141
 AliMpDataStreams.cxx:142
 AliMpDataStreams.cxx:143
 AliMpDataStreams.cxx:144
 AliMpDataStreams.cxx:145
 AliMpDataStreams.cxx:146
 AliMpDataStreams.cxx:147
 AliMpDataStreams.cxx:148
 AliMpDataStreams.cxx:149
 AliMpDataStreams.cxx:150
 AliMpDataStreams.cxx:151
 AliMpDataStreams.cxx:152
 AliMpDataStreams.cxx:153
 AliMpDataStreams.cxx:154
 AliMpDataStreams.cxx:155
 AliMpDataStreams.cxx:156
 AliMpDataStreams.cxx:157
 AliMpDataStreams.cxx:158
 AliMpDataStreams.cxx:159
 AliMpDataStreams.cxx:160
 AliMpDataStreams.cxx:161