Bug fix: AliHLTComponent::ConfigureFromArgumentString
[u/mrichter/AliRoot.git] / RAW / AliRawRFIODB.cxx
1 // @(#) $Id$
2 // Author: Fons Rademakers  26/11/99
3
4 /**************************************************************************
5  * Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
6  *                                                                        *
7  * Author: The ALICE Off-line Project.                                    *
8  * Contributors are mentioned in the code where appropriate.              *
9  *                                                                        *
10  * Permission to use, copy, modify and distribute this software and its   *
11  * documentation strictly for non-commercial purposes is hereby granted   *
12  * without fee, provided that the above copyright notice appears in all   *
13  * copies and that both the copyright notice and this permission notice   *
14  * appear in the supporting documentation. The authors make no claims     *
15  * about the suitability of this software for any purpose. It is          *
16  * provided "as is" without express or implied warranty.                  *
17  **************************************************************************/
18
19 //////////////////////////////////////////////////////////////////////////
20 //                                                                      //
21 // AliRawRFIODB                                                         //
22 //                                                                      //
23 //////////////////////////////////////////////////////////////////////////
24
25 #include <TSystem.h>
26 #include <TUrl.h>
27
28 #include "AliRawRFIODB.h"
29
30
31 ClassImp(AliRawRFIODB)
32
33
34 //______________________________________________________________________________
35 AliRawRFIODB::AliRawRFIODB(AliRawEventV2 *event,
36                            AliESDEvent *esd,
37                            Int_t compress,
38                            const char* fileName,Int_t basketsize)
39    : AliRawDB(event, esd, compress, fileName, basketsize)
40 {
41    // Create a new raw DB that will be accessed via RFIO.
42
43    static int init = 0;
44    // Set STAGE_POOL environment variable to current host
45    if (!init) {
46       // THESE ENVIRONMENT SYMBOLS ARE NOW DEFINED BY THE ALICE DATE SETUP
47       // THEREFORE WE SHALL NOT USE ANY HARDCODED VALUES BUT RATHER USE
48       // WHATEVER HAS BEEN SET IN THE DATE SITE
49       //gSystem->Setenv("STAGE_POOL", "lcg00");
50       //gSystem->Setenv("STAGE_HOST", "stage013");
51
52       // however for sanity we check if they are really set
53       if (!gSystem->Getenv("STAGE_POOL"))
54          Error("AliRawRFIODB", "STAGE_POOL not set");
55       if (!gSystem->Getenv("STAGE_HOST"))
56          Error("AliRawRFIODB", "STAGE_HOST not set");
57       init = 1;
58    }
59 #if ROOT_VERSION_CODE < ROOT_VERSION(5,99,0)
60    if (fRawDB) fRawDB->UseCache(50, 0x200000);  //0x100000 = 1MB)
61 #endif
62 }
63
64 //______________________________________________________________________________
65 const char *AliRawRFIODB::GetFileName() const
66 {
67    // Return filename based on hostname and date and time. This will make
68    // each file unique. Also the directory will be made unique for each
69    // day by adding the date to the fs. Assumes there is always enough
70    // space on the device.
71
72    static TString fname;
73
74    TString fs = fFS1;
75    TDatime dt;
76
77    // make a new subdirectory for each day
78    fs += "/adc-";
79    fs += dt.GetDate();
80
81    Long_t id, size, flags, time;
82    if (gSystem->GetPathInfo(fs, &id, &size, &flags, &time) == 1) {
83       // directory does not exist, create it
84       if (gSystem->mkdir(fs, kTRUE) == -1) {
85          Error("GetFileName", "cannot create dir %s, using %s", fs.Data(),
86                fFS1.Data());
87          fs = fFS1;
88       }
89    }
90    // FIXME: should check if fs is a directory
91
92    TString hostname = gSystem->HostName();
93    Int_t pos;
94    if ((pos = hostname.Index(".")) != kNPOS)
95       hostname.Remove(pos);
96
97    fname = fs + "/" + hostname + "_";
98    fname += dt.GetDate();
99    fname += "_";
100    fname += dt.GetTime();
101    fname += ".root";
102
103    return fname;
104 }
105
106 //______________________________________________________________________________
107 Long64_t AliRawRFIODB::Close()
108 {
109    // Close raw RFIO DB.
110
111    if (!fRawDB) return 0;
112
113    if (!fRawDB->IsOpen()) return 0;
114
115    fRawDB->cd();
116
117    // Write the tree.
118    Bool_t error = kFALSE;
119    if (fTree)
120      if (fTree->Write() == 0)
121        error = kTRUE;
122    if (fESDTree)
123      if (fESDTree->Write() == 0)
124        error = kTRUE;
125
126    // Close DB, this also deletes the fTree
127    fRawDB->Close();
128
129    fTree = NULL;
130
131    Long64_t filesize = fRawDB->GetEND();
132
133    if (fDeleteFiles) {
134       TUrl u(fRawDB->GetName());
135       gSystem->Exec(Form("rfrm %s", u.GetFile()));
136    }
137
138    delete fRawDB;
139    fRawDB = 0;
140
141    if(!error)
142      return filesize;
143    else
144      return -1;
145 }