BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
ana_raw.cxx
Go to the documentation of this file.
1#include "IRawFile/RawFileExceptions.h"
2#include "RawDataCnv/EventManagement/RawEventDef.h"
3#include "RawFile/RawFileReader.h"
4#include <iomanip>
5#include <iostream>
6#include <stdlib.h>
7#include <unistd.h>
8
9unsigned long calEts( const uint32_t* dptr ) {
10 unsigned int tmp = dptr[0] & 0xffffff;
11 unsigned long val = ( tmp >> 16 ) * 61 * 61;
12 val += ( ( tmp >> 8 ) & 0xff ) * 61;
13 val += tmp & 0xff;
14 val *= 2000000; // s -> 500ns
15 val += ( dptr[1] & 0x3fffff );
16
17 return val;
18}
19
20void dump( const uint32_t* data, uint32_t n ) {
21 std::cout << std::hex;
22 for ( uint32_t i = 0; i < n; ++i )
23 {
24 if ( i % 8 != 0 ) { std::cout << " "; }
25 else
26 {
27 if ( i != 0 ) std::cout << std::endl;
28 }
29 std::cout << "0x" << std::setw( 8 ) << std::setfill( '0' ) << data[i];
30 }
31 std::cout << std::dec << std::endl;
32}
33
34void processETS( const uint32_t* dataPtr, uint32_t dataLen ) {
35 unsigned long t1 = 0, t2 = 0;
36
37 if ( dataLen > 11 && dataPtr[1] == 0xffffffff )
38 {
39 uint32_t start = 10;
40 if ( ( dataPtr[start] >> 24 ) == 0xcf )
41 {
42 t1 = calEts( dataPtr + start );
43
44 static unsigned long _t2 = 0;
45 if ( ( start + 3 ) < dataLen && ( dataPtr[start + 2] >> 24 ) == 0xd1 )
46 { _t2 = calEts( dataPtr + start + 2 ); }
47 t2 = _t2;
48 }
49 }
50
51 std::cout << "t1 " << t1 << " t2 " << t2 << std::endl;
52
53 dump( dataPtr, dataLen );
54}
55
56int main( int argc, char* argv[] ) {
57 if ( argc != 3 )
58 {
59 std::cout << "Usage: " << argv[0] << " file.data nevts" << std::endl;
60 exit( 1 );
61 }
62
63 const uint32_t** m_sds = new const uint32_t*[64];
64 const uint32_t** m_robs = new const uint32_t*[256];
65
66 int nevts = atoi( argv[2] );
67
68 RawFileReader freader( argv[1] );
69
70 for ( int i = 0; i < nevts; ++i )
71 {
72 try
73 {
74 uint32_t* dataptr = NULL;
75
76 RawEvent f;
77 f.assign( freader.nextEvent() );
78
79 // if ( i < 43649 ) continue;
80 // if ( i > 43809 ) break;
81 std::cout << i << " >> run: " << f.run_no() << " event: " << f.global_id()
82 << std::endl;
83
84 int nrobs = 0;
85 int nsds = f.children( m_sds, 64 );
86 for ( int sdi = 0; sdi < nsds; ++sdi )
87 {
89 nrobs += eformat::get_robs( m_sds[sdi], m_robs + nrobs, 256 - nrobs );
90 }
91 for ( int robi = 0; robi < nrobs; robi++ )
92 {
93 eformat::ROBFragment<uint32_t*> rob( (uint32_t*)m_robs[robi] );
94 uint32_t source_id_number = rob.rod_source_id();
95 source_id_number <<= 8;
96 source_id_number >>= 24;
97
98 /// >>>>>>>>>>>>>>>>>>>
99 if ( ( rob.rod_detev_type() & 0x2 ) != 0 )
100 {
101 if ( source_id_number == 165 )
102 {
103 rob.rod_data( dataptr );
104 processETS( dataptr, rob.rod_ndata() );
105 break;
106 }
107 }
108 }
109
110 if ( !dataptr )
111 {
112 std::cout << "no ETS data found" << std::endl;
113 break;
114 }
115 } catch ( RawFileException& e )
116 {
117 e.print();
118 break;
119 } catch ( std::exception& ex )
120 {
121 std::cerr << std::endl << "Uncaught std exception: " << ex.what() << std::endl;
122 break;
123 } catch ( ... )
124 {
125 std::cerr << std::endl << "Uncaught unknown exception" << std::endl;
126 break;
127 }
128 }
129
130 delete[] m_sds;
131 delete[] m_robs;
132
133 return 0;
134}
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
const Int_t n
TTree * data
eformat::FullEventFragment< const uint32_t * > RawEvent
unsigned long calEts(const uint32_t *dptr)
Definition ana_raw.cxx:9
void processETS(const uint32_t *dataPtr, uint32_t dataLen)
Definition ana_raw.cxx:34
void dump(const uint32_t *data, uint32_t n)
Definition ana_raw.cxx:20
virtual void print() const
const uint32_t * nextEvent()
size_t get_robs(const uint32_t *fragment, const uint32_t **rob, size_t max_count)
Definition util.cxx:104
int main()
Definition phokhara.cc:42