예제 #1
0
파일: TFile.py 프로젝트: gczzhh/uproot
    def _writeheader(self):
        cursor = uproot.write.sink.cursor.Cursor(0)
        self._fVersion = self._fVersion = 1061800
        self._fBEGIN = 100
        cursor.write_fields(self._sink, self._format1, b"root", self._fVersion,
                            self._fBEGIN)

        self._fEND = 0
        self._fSeekFree = 0
        self._fNbytesFree = 0
        self._nfree = 0
        self._endcursor = uproot.write.sink.cursor.Cursor(cursor.index)
        cursor.write_fields(self._sink, self._format_end, self._fEND,
                            self._fSeekFree, self._fNbytesFree, self._nfree)

        self._fNbytesName = 2 * len(
            self._filename
        ) + 36 + 8  # + 8 because two fields in TKey are 'q' rather than 'i'
        fUnits = 4
        cursor.write_fields(self._sink, self._format2, self._fNbytesName,
                            fUnits)

        self._compresscursor = uproot.write.sink.cursor.Cursor(cursor.index)
        cursor.write_fields(self._sink, self._format3, self._fCompress)

        self._fSeekInfo = 0
        self._seekcursor = uproot.write.sink.cursor.Cursor(cursor.index)
        cursor.write_fields(self._sink, self._format_seekinfo, self._fSeekInfo)

        self._fNbytesInfo = 0
        self._nbytescursor = uproot.write.sink.cursor.Cursor(cursor.index)
        cursor.write_fields(self._sink, self._format_nbytesinfo,
                            self._fNbytesInfo)

        cursor.write_data(self._sink, b'\x00\x01' + uuid.uuid1().bytes)
예제 #2
0
    def write(self, cursor, sink):
        self.cursor = uproot.write.sink.cursor.Cursor(cursor.index)
        self.sink = sink

        self.update()

        cursor.skip(self._format1.size)
        cursor.write_string(sink, self.fClassName)
        cursor.write_string(sink, self.fName)
        cursor.write_string(sink, self.fTitle)

        basketversion = 3
        cursor.write_fields(sink, self._format_basketkey, basketversion, self.fBufferSize, self.fNevBufSize, self.fNevBuf, self.fLast)
        cursor.write_data(sink, b"\x00")
예제 #3
0
 def write_taxis(self, cursor, sink, axis):
     cnt = numpy.int64(self.length_taxis(axis) -
                       4) | uproot.const.kByteCountMask
     vers = 10
     cursor.write_fields(sink, self._format_cntvers, cnt, vers)
     self.write_tnamed(cursor, sink, axis["_fName"], axis["_fTitle"])
     self.write_tattaxis(cursor, sink, axis)
     cursor.write_fields(sink, self._format_taxis_1, axis["_fNbins"],
                         axis["_fXmin"], axis["_fXmax"])
     self.write_tarray(cursor, sink, axis["_fXbins"])
     if axis["_fFirst"] != 0 or axis["_fLast"] != 0 or axis[
             "_fBits2"] != 0 or axis[
                 "_fTimeDisplay"] or axis["_fTimeFormat"] != b"" or axis[
                     "_fLabels"] or axis["_fModLabs"]:
         raise NotImplementedError
     cursor.write_data(sink, b"\x00" * 20)
예제 #4
0
    def _writestreamers(self):
        self._fSeekInfo = self._fSeekFree
        self._seekcursor.update_fields(self._sink, self._format_seekinfo, self._fSeekInfo)

        cursor = uproot.write.sink.cursor.Cursor(self._fSeekInfo)
        streamerkey = uproot.write.TKey.TKey32(fClassName = b"TList",
                                               fName      = b"StreamerInfo",
                                               fTitle     = b"Doubly linked list",
                                               fObjlen    = len(uproot.write.streamers.streamers),
                                               fSeekKey   = self._fSeekInfo,
                                               fSeekPdir  = self._fBEGIN)
        streamerkey.write(cursor, self._sink)
        cursor.write_data(self._sink, uproot.write.streamers.streamers)

        self._fNbytesInfo = streamerkey.fNbytes
        self._nbytescursor.update_fields(self._sink, self._format_nbytesinfo, self._fNbytesInfo)

        self._expandfile(cursor)
예제 #5
0
    def write(self, cursor, sink, isjagged=False):
        self.cursor = uproot.write.sink.cursor.Cursor(cursor.index)
        self.sink = sink

        self.update()

        cursor.skip(self._format1.size)
        cursor.write_string(sink, self.fClassName)
        cursor.write_string(sink, self.fName)
        cursor.write_string(sink, self.fTitle)

        basketversion = 3
        if isjagged:
            if self.old_fLast == 0:
                raise Exception("isjagged flag should be False")
            cursor.write_fields(sink, self._format_basketkey, basketversion,
                                self.fBufferSize, self.fNevBufSize,
                                self.fNevBuf, self.old_fLast)
        else:
            cursor.write_fields(sink, self._format_basketkey, basketversion,
                                self.fBufferSize, self.fNevBufSize,
                                self.fNevBuf, self.fLast)
            self.old_fLast = self.fLast
        cursor.write_data(sink, b"\x00")
예제 #6
0
    def write(self, cursor, sink):
        cursor.write_string(sink, self.fName)
        cursor.write_data(sink, b"\x00")

        self.cursor = uproot.write.sink.cursor.Cursor(cursor.index)
        self.sink = sink
        self.update()

        cursor.skip(self._format1.size)
        cursor.write_data(self.sink, self.fUUID)
        cursor.write_data(sink, b"\x00" * 12)  # FIXME! what is this?