Analysis Software
Documentation for
sPHENIX
simulation software
Home page
Related Pages
Modules
Namespaces
Classes
Files
Examples
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
PHRawOManager.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file PHRawOManager.cc
1
//-----------------------------------------------------------------------------
2
//
3
// The PHOOL's Software
4
// Copyright (C) PHENIX collaboration, 1999
5
//
6
// Implementation of class PHRawOManager
7
//
8
// Author: Matthias Messer
9
//-----------------------------------------------------------------------------
10
#include "
PHRawOManager.h
"
11
12
#include "
PHRawDataNode.h
"
13
14
#include <
phool/PHCompositeNode.h
>
15
#include <
phool/phool.h
>
16
17
#include <Event/EventTypes.h>
18
#include <Event/oBuffer.h>
19
#include <Event/ospBuffer.h>
20
#include <Event/phenixTypes.h>
21
22
#include <fcntl.h>
23
#include <sys/stat.h>
24
#include <unistd.h>
// for close
25
#include <iostream>
26
27
using namespace
std;
28
29
PHRawOManager::PHRawOManager
(
const
string
&
newFile
,
const
int
run
,
const
int
bufl,
const
int
evtl,
const
int
complvl)
30
:
filedesc
(-1)
31
, runNumber(0)
32
, bufferSize(0)
33
, eventLength(0)
34
{
35
if
(!
setFile
(newFile, run, bufl, evtl, complvl))
36
{
37
filename
=
"file open failed"
;
38
filedesc
= -1;
39
memBuffer
=
nullptr
;
40
fileBuffer
=
nullptr
;
41
compressionLevel
= 0;
42
}
43
}
44
45
PHRawOManager::PHRawOManager
()
46
:
filedesc
(-1)
47
, memBuffer(nullptr)
48
, fileBuffer(nullptr)
49
, runNumber(0)
50
, bufferSize(0)
51
, eventLength(0)
52
, compressionLevel(0)
53
{
54
}
55
56
PHRawOManager::~PHRawOManager
()
57
{
58
closeFile
();
59
}
60
61
void
PHRawOManager::closeFile
()
62
{
63
if
(
fileBuffer
)
64
{
65
delete
fileBuffer
;
66
}
67
if
(
memBuffer
)
68
{
69
delete
memBuffer
;
70
}
71
fileBuffer
=
nullptr
;
72
memBuffer
=
nullptr
;
73
if
(
filedesc
>= 0)
74
{
75
close(
filedesc
);
76
filedesc
= -1;
77
}
78
}
79
80
bool
PHRawOManager::setFile
(
const
string
& setFile,
const
int
setRun,
const
int
setBufl,
const
int
setEvtl,
const
int
complvl)
81
{
82
filename
=
setFile
;
83
runNumber
= setRun;
84
bufferSize
= setBufl;
85
compressionLevel
= complvl;
86
87
if
(setEvtl == -1)
88
{
89
eventLength
=
bufferSize
/ 4;
90
}
91
else
92
{
93
eventLength
= setEvtl;
94
}
95
96
if
(
filedesc
>= 0)
97
{
98
closeFile
();
// close the file if it is open (originally unprotected close)
99
}
100
101
// open file
102
filedesc
=
open
(
filename
.c_str(),
103
O_WRONLY | O_CREAT | O_TRUNC | O_LARGEFILE,
104
S_IRWXU | S_IROTH | S_IRGRP);
105
106
if
(
filedesc
< 0)
107
{
108
PHMessage
(
"PHRawOManager::setFile"
,
PHError
,
"could not open file"
);
109
return
false
;
110
}
111
memBuffer
=
new
PHDWORD
[
bufferSize
];
112
fileBuffer
=
new
ospBuffer
(
filedesc
,
memBuffer
,
bufferSize
,
runNumber
);
113
114
return
true
;
115
}
116
117
bool
PHRawOManager::write
(
PHCompositeNode
* topNode)
118
{
119
//
120
// The write function of the PHCompositeNode topNode will
121
// recursively call the write functions of its subnodes.
122
// The PHRawDataNodes among them call the write function found
123
// below.
124
//
125
if
(
filedesc
>= 0 &&
fileBuffer
)
126
{
127
fileBuffer
->
nextEvent
(
eventLength
,
DATAEVENT
);
128
topNode->
write
(
this
);
129
eventNumber
++;
130
return
true
;
131
}
132
return
false
;
133
}
134
135
bool
PHRawOManager::write
(
PHRawDataNode
*
node
)
136
{
137
if
(
filedesc
>= 0 &&
fileBuffer
)
138
{
139
int
bytesAddedToBuffer =
fileBuffer
->
addUnstructPacketData
(node->
getData
(), node->
getLength
(), node->
getID
(),
140
node->
getWordLength
(), node->
getHitFormat
());
141
if
(bytesAddedToBuffer <= 0)
142
{
143
PHMessage
(
"PHRawOManager::write"
,
PHError
,
"Zero bytes added to buffer"
);
144
return
false
;
145
}
146
return
true
;
147
}
148
return
false
;
149
}
150
151
void
PHRawOManager::print
()
const
152
{
153
cout <<
"File attached : "
<<
filename
<< endl;
154
cout <<
"Buffer size : "
<<
bufferSize
<< endl;
155
cout <<
"Event Length : "
<<
eventLength
<< endl;
156
cout <<
"Run number : "
<<
runNumber
<< endl;
157
cout <<
"Events written: "
<<
eventNumber
<< endl;
158
}
coresoftware
blob
master
offline
framework
phoolraw
PHRawOManager.cc
Built by
Jin Huang
. updated:
Sat Feb 17 2024 22:18:05
using
1.8.2 with
sPHENIX GitHub integration