1 package org.lcsim.lcio;
2
3 import hep.io.sio.SIOInputStream;
4 import hep.io.sio.SIOOutputStream;
5
6 import java.io.IOException;
7 import org.lcsim.event.TPCHit;
8
9
10
11
12
13
14
15 class SIOTPCHit implements TPCHit
16 {
17 private int cellID;
18 private float time;
19 private float charge;
20 private int quality;
21 private int[] rawDataArray;
22
23 SIOTPCHit(SIOInputStream in, int flags, int version) throws IOException
24 {
25 cellID = in.readInt();
26 time = in.readFloat();
27 charge = in.readFloat();
28 quality = in.readInt();
29
30 if (LCIOUtil.bitTest(flags,LCIOConstants.TPCBIT_RAW))
31 {
32 int size = in.readInt() ;
33 rawDataArray = new int[ size ] ;
34 for (int i = 0; i < size; i++)
35 {
36 rawDataArray[i] = in.readInt() ;
37 }
38 }
39
40 if( version > 1002 )
41 {
42 if ( LCIOUtil.bitTest(flags,LCIOConstants.TPCBIT_NO_PTR)) in.readPTag(this) ;
43 }
44 else
45 {
46 if ( !LCIOUtil.bitTest(flags,LCIOConstants.TPCBIT_NO_PTR)) in.readPTag(this) ;
47 }
48
49 }
50 public int getRawDataWord(int i)
51 {
52 return rawDataArray[i];
53 }
54
55 public double getTime()
56 {
57 return time;
58 }
59
60 public int getQuality()
61 {
62 return quality;
63 }
64
65 public int getNRawDataWords()
66 {
67 return rawDataArray.length;
68 }
69
70 public double getCharge()
71 {
72 return charge;
73 }
74
75 public int getCellID()
76 {
77 return cellID;
78 }
79
80 static void write(TPCHit hit, SIOOutputStream out, int flags) throws IOException
81 {
82 out.writeInt(hit.getCellID());
83 out.writeFloat((float) hit.getTime());
84 out.writeFloat((float) hit.getCharge());
85 out.writeInt(hit.getQuality());
86
87 if (LCIOUtil.bitTest(flags,LCIOConstants.TPCBIT_RAW))
88 {
89 out.writeInt( hit.getNRawDataWords() );
90 for (int i = 0; i < hit.getNRawDataWords() ; i++)
91 {
92 out.writeInt( hit.getRawDataWord(i) ) ;
93 }
94 }
95 if (!LCIOUtil.bitTest(flags,LCIOConstants.TPCBIT_NO_PTR)) out.writePTag(hit) ;
96 }
97 }