]> git.uio.no Git - u/mrichter/AliRoot.git/blame - RAW/AliRawRFIODB.cxx
support of empty sub events and new equipment header version
[u/mrichter/AliRoot.git] / RAW / AliRawRFIODB.cxx
CommitLineData
a197a4ce 1// @(#)alimdc:$Name$:$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 "AliMDC.h"
29
30#include "AliRawRFIODB.h"
31
32
33ClassImp(AliRawRFIODB)
34
35
36//______________________________________________________________________________
37AliRawRFIODB::AliRawRFIODB(AliRawEvent *event, Double_t maxsize, Int_t compress)
38 : AliRawDB(event, maxsize, compress, kFALSE)
39{
40 // Create a new raw DB that will be accessed via RFIO.
41
42#ifndef USE_RDM
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#endif
60
61 if (!Create())
62 MakeZombie();
63 else
64 fRawDB->UseCache(50, 0x200000); //0x100000 = 1MB)
65}
66
67//______________________________________________________________________________
68const char *AliRawRFIODB::GetFileName() const
69{
70 // Return filename based on hostname and date and time. This will make
71 // each file unique. Also the directory will be made unique for each
72 // day by adding the date to the fs. Assumes there is always enough
73 // space on the device.
74
75 static TString fname;
76
77 TString fs = AliMDC::RFIOFS();
78 TDatime dt;
79
80 // make a new subdirectory for each day
81 fs += "/adc-";
82 fs += dt.GetDate();
83
84 Long_t id, size, flags, time;
85 if (gSystem->GetPathInfo(fs, &id, &size, &flags, &time) == 1) {
86 // directory does not exist, create it
87 if (gSystem->mkdir(fs, kTRUE) == -1) {
88 Error("GetFileName", "cannot create dir %s, using %s", fs.Data(),
89 AliMDC::RFIOFS());
90 fs = AliMDC::RFIOFS();
91 }
92 }
93 // FIXME: should check if fs is a directory
94
95 TString hostname = gSystem->HostName();
96 Int_t pos;
97 if ((pos = hostname.Index(".")) != kNPOS)
98 hostname.Remove(pos);
99
100 fname = fs + "/" + hostname + "_";
101 fname += dt.GetDate();
102 fname += "_";
103 fname += dt.GetTime();
104 fname += ".root";
105
106 return fname;
107}
108
109//______________________________________________________________________________
110void AliRawRFIODB::Close()
111{
112 // Close raw RFIO DB.
113
114 if (!fRawDB) return;
115
116 fRawDB->cd();
117
118 // Write the tree.
119 fTree->Write();
120
121 // Close DB, this also deletes the fTree
122 fRawDB->Close();
123
124 if (AliMDC::DeleteFiles()) {
125 TUrl u(fRawDB->GetName());
126 gSystem->Exec(Form("rfrm %s", u.GetFile()));
127 }
128
129 delete fRawDB;
130 fRawDB = 0;
131}