/[PAMELA software]/PamVMC/src/CRC.cxx
ViewVC logotype

Contents of /PamVMC/src/CRC.cxx

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (show annotations) (download)
Fri Jun 12 18:39:28 2009 UTC (15 years, 5 months ago) by pam-rm2
Branch: MAIN
CVS Tags: v1r0, HEAD
Changes since 1.1: +5 -5 lines
- Introduced user-defined names of output files and random seeds number.
Users can do it use options of PamVMCApplication constructor:
PamVMCApplication(const char* name,  const char *title, const char*
filename="pamtest", Int_t seed=0).
The Random object that I use is TRandom3 object which has astronomical
large period (in case of default initialization 0). All random generators
in the code use this object by calling of gRandom singleton which keeps
it.

- Corrected TOF digitization routine. No problems with TDC hits due to
hadronic interactions anymore.

- Some small changes was done to compile code under Root 5.23. +
geant4_vmc v. 2.6 without any warnings

- Some classes of PamG4RunConfiguartion was changed for geant4_vmc v.
2.6.Some obsolete classes was deleted as soon as developers implemented
regions.

- Navigation was changed from "geomRootToGeant4" to "geomRoot", because on
VMC web page written that as soon as Geant4 has no option ONLY/MANY
translation of overlapped geometry to Geant4 through VGM could be wrong.
I'd like to stay with Root navigation:
http://root.cern.ch/root/vmc/Geant4VMC.html. This should be default
option.

- New Tracker digitization routine written by Sergio was implemented

- PamVMC again became compatible with geant4_vmc v.2.5 and ROOT 5.20.
 The problem was that ROOT developers introduced in TVirtualMC class a new
method SetMagField and new base class:TVirtualMagField from which
user-defined classes shoukd be derived

1 /****************************************************************************
2 * F i l e D a t a
3 * $Id: CRC.cxx,v 1.1 2009-02-19 17:39:49 nikolas Exp $
4 * $Revision: 1.1 $
5 * $Date: 2009-02-19 17:39:49 $
6 * $RCSfile: CRC.cxx,v $
7 *
8 ****************************************************************************
9 * S W D e v e l o p m e n t E n v i r o n m e n t
10 *
11 * $Author: nikolas $
12 * :
13 ****************************************************************************
14 * U p d a t i n g
15
16 *****************************************************************************/
17
18
19 /*============================= Include File ================================*/
20 #include "CRC.h"
21
22 /*============================ Global define ================================*/
23
24
25 /*============================== global types ==============================*/
26
27
28
29 /*****************************************************************************/
30 /*=========================== Structure define ==============================*/
31
32
33 /*****************************************************************************/
34 /*============================ Enumerate define =============================*/
35
36 /*****************************************************************************/
37
38 /*=== Common I N T E R N A L ==*/
39
40 /*****************************************************************************/
41
42 /*************************************************************************/
43 /* @Constant: Ccrc_lookup */
44 /* @Purpose : */
45 /* CRC-TABLE CRCINIT=0x0000 POLY=0x1021 CCITT V.41 */
46 /* */
47 /* @@ */
48 /*************************************************************************/
49
50 static const unsigned int Crc_lookup[256] = {
51 0x0000,0x1021,0x2042,0x3063,0x4084,0x50A5,0x60C6,0x70E7,
52 0x8108,0x9129,0xA14A,0xB16B,0xC18C,0xD1AD,0xE1CE,0xF1EF,
53 0x1231,0x0210,0x3273,0x2252,0x52B5,0x4294,0x72F7,0x62D6,
54 0x9339,0x8318,0xB37B,0xA35A,0xD3BD,0xC39C,0xF3FF,0xE3DE,
55 0x2462,0x3443,0x0420,0x1401,0x64E6,0x74C7,0x44A4,0x5485,
56 0xA56A,0xB54B,0x8528,0x9509,0xE5EE,0xF5CF,0xC5AC,0xD58D,
57 0x3653,0x2672,0x1611,0x0630,0x76D7,0x66F6,0x5695,0x46B4,
58 0xB75B,0xA77A,0x9719,0x8738,0xF7DF,0xE7FE,0xD79D,0xC7BC,
59 0x48C4,0x58E5,0x6886,0x78A7,0x0840,0x1861,0x2802,0x3823,
60 0xC9CC,0xD9ED,0xE98E,0xF9AF,0x8948,0x9969,0xA90A,0xB92B,
61 0x5AF5,0x4AD4,0x7AB7,0x6A96,0x1A71,0x0A50,0x3A33,0x2A12,
62 0xDBFD,0xCBDC,0xFBBF,0xEB9E,0x9B79,0x8B58,0xBB3B,0xAB1A,
63 0x6CA6,0x7C87,0x4CE4,0x5CC5,0x2C22,0x3C03,0x0C60,0x1C41,
64 0xEDAE,0xFD8F,0xCDEC,0xDDCD,0xAD2A,0xBD0B,0x8D68,0x9D49,
65 0x7E97,0x6EB6,0x5ED5,0x4EF4,0x3E13,0x2E32,0x1E51,0x0E70,
66 0xFF9F,0xEFBE,0xDFDD,0xCFFC,0xBF1B,0xAF3A,0x9F59,0x8F78,
67 0x9188,0x81A9,0xB1CA,0xA1EB,0xD10C,0xC12D,0xF14E,0xE16F,
68 0x1080,0x00A1,0x30C2,0x20E3,0x5004,0x4025,0x7046,0x6067,
69 0x83B9,0x9398,0xA3FB,0xB3DA,0xC33D,0xD31C,0xE37F,0xF35E,
70 0x02B1,0x1290,0x22F3,0x32D2,0x4235,0x5214,0x6277,0x7256,
71 0xB5EA,0xA5CB,0x95A8,0x8589,0xF56E,0xE54F,0xD52C,0xC50D,
72 0x34E2,0x24C3,0x14A0,0x0481,0x7466,0x6447,0x5424,0x4405,
73 0xA7DB,0xB7FA,0x8799,0x97B8,0xE75F,0xF77E,0xC71D,0xD73C,
74 0x26D3,0x36F2,0x0691,0x16B0,0x6657,0x7676,0x4615,0x5634,
75 0xD94C,0xC96D,0xF90E,0xE92F,0x99C8,0x89E9,0xB98A,0xA9AB,
76 0x5844,0x4865,0x7806,0x6827,0x18C0,0x08E1,0x3882,0x28A3,
77 0xCB7D,0xDB5C,0xEB3F,0xFB1E,0x8BF9,0x9BD8,0xABBB,0xBB9A,
78 0x4A75,0x5A54,0x6A37,0x7A16,0x0AF1,0x1AD0,0x2AB3,0x3A92,
79 0xFD2E,0xED0F,0xDD6C,0xCD4D,0xBDAA,0xAD8B,0x9DE8,0x8DC9,
80 0x7C26,0x6C07,0x5C64,0x4C45,0x3CA2,0x2C83,0x1CE0,0x0CC1,
81 0xEF1F,0xFF3E,0xCF5D,0xDF7C,0xAF9B,0xBFBA,0x8FD9,0x9FF8,
82 0x6E17,0x7E36,0x4E55,0x5E74,0x2E93,0x3EB2,0x0ED1,0x1EF0
83 };
84
85
86
87
88
89
90
91
92 /*****************************************************************************/
93 /*
94 * TRK_crc8_8
95 *
96 * calculate single 8 bit crc
97 *
98 * Input parameters:
99 * old = old value
100 * data = new value
101 * outcrc = pointer to calculated crc
102 *
103 * Output parameters: status_code
104 *
105 */
106 /*****************************************************************************/
107
108 typedef union {
109 BYTE word;
110
111 //#ifdef ERC32
112 /* ERC 32 arch is BIG endian */
113 /* struct bit_field_w
114 {
115 unsigned b7:1;
116 unsigned b6:1;
117 unsigned b5:1;
118 unsigned b4:1;
119 unsigned b3:1;
120 unsigned b2:1;
121 unsigned b1:1;
122 unsigned b0:1;
123 } bit;
124 #else*/
125 /* IA32 arch is LITTLE endian */
126 struct bit_field_w
127 {
128 unsigned b0:1;
129 unsigned b1:1;
130 unsigned b2:1;
131 unsigned b3:1;
132 unsigned b4:1;
133 unsigned b5:1;
134 unsigned b6:1;
135 unsigned b7:1;
136 } bit;
137 //#endif
138 } CM_crc8_8_word ;
139
140
141 #define CM_CRC8_8(old,data,crc,c,d,r) do { \
142 c.word = (old); \
143 d.word = (data); \
144 r.bit.b0 = c.bit.b0 ^ c.bit.b6 ^ c.bit.b7 ^ d.bit.b0 ^ d.bit.b6 ^ d.bit.b7; \
145 r.bit.b1 = c.bit.b0 ^ c.bit.b1 ^ c.bit.b6 ^ d.bit.b0 ^ d.bit.b1 ^ d.bit.b6; \
146 r.bit.b2 = c.bit.b0 ^ c.bit.b1 ^ c.bit.b2 ^ c.bit.b6 ^ d.bit.b0 ^ d.bit.b1 ^d.bit.b2 ^ d.bit.b6; \
147 r.bit.b3 = c.bit.b1 ^ c.bit.b2 ^ c.bit.b3 ^ c.bit.b7 ^ d.bit.b1 ^ d.bit.b2 ^d.bit.b3 ^ d.bit.b7; \
148 r.bit.b4 = c.bit.b2 ^ c.bit.b3 ^ c.bit.b4 ^ d.bit.b2 ^ d.bit.b3 ^ d.bit.b4; \
149 r.bit.b5 = c.bit.b3 ^ c.bit.b4 ^ c.bit.b5 ^ d.bit.b3 ^ d.bit.b4 ^ d.bit.b5; \
150 r.bit.b6 = c.bit.b4 ^ c.bit.b5 ^ c.bit.b6 ^ d.bit.b4 ^ d.bit.b5 ^ d.bit.b6; \
151 r.bit.b7 = c.bit.b5 ^ c.bit.b6 ^ c.bit.b7 ^ d.bit.b5 ^ d.bit.b6 ^ d.bit.b7; \
152 crc = r.word; \
153 } while(0)
154
155
156 BYTE CM_crc8_8(BYTE old,BYTE data) {
157 CM_crc8_8_word c,d,r;
158 BYTE Crc;
159
160 CM_CRC8_8(old,data,Crc,c,d,r);
161
162 return Crc;
163 }
164
165 /**
166 Compute a 8 CRC based over a \a buffer data of length \a length, whith a starting crc of \a oldcrc
167 and returns the 32 bit crc on the whole buffer
168 */
169 UINT32 CM_Compute_CRC8_8(UINT32 oldcrc /** the starting CRC value. changing this value also change the returning value. usually 0. */
170 ,BYTE *buffer /** the starting pointer to start crc computing */
171 ,UINT32 length /** the length in byte of the buffer */
172 )
173 {
174 UINT32 i;
175 BYTE tmpcrc,crc = oldcrc;
176 CM_crc8_8_word c,d,r;
177
178 for (i=0; i < length; i++) {
179 tmpcrc=crc;
180 CM_CRC8_8(tmpcrc,*buffer,crc,c,d,r);
181 buffer++;
182 }
183 return crc;
184 }
185
186
187 /*****************************************************************************/
188 /* @Function: CM_Crc16 */
189 /* @Purpose : */
190 /* This function calculates the CRC. */
191 /* */
192 /* @@ */
193 /* @Parameter Name @Mode @Description */
194 /* @@ */
195 /*****************************************************************************/
196
197 /* adrs_ptr: is BYTE*
198 * crc : is UINT16
199 */
200 #define CM_MACRO_CRC16(Crc16,adrs_ptr) do { \
201 Crc16 = \
202 (UINT32)(Crc16 << 8) ^ \
203 (UINT32)(Crc_lookup[ (UINT32) ( ((Crc16 >> 8) & 0xFF) ^ *adrs_ptr) ]); \
204 } while(0)
205
206 UINT16 CM_CRC16(BYTE* adrs, UINT16 Crc)
207 {
208 UINT32 Crc16Value=Crc;
209 // Calculating the CRC16 by using a LookUp table
210 CM_MACRO_CRC16(Crc16Value,adrs);
211 return ((UINT16)Crc16Value);
212 }
213
214 UINT16 CM_Compute_CRC16(UINT16 oldcrc,BYTE *buffer,UINT32 length) {
215 unsigned int i;
216 UINT32 Crc16Value=oldcrc;
217 for (i=0; i < length; i++) {
218 CM_MACRO_CRC16(Crc16Value,buffer);
219 buffer++;
220 }
221 return ((UINT16)Crc16Value);
222 }
223
224 /* BYTE* charToUnsignedChar(char *buffer, UINT32 length){ */
225 /* BYTE buff[length]; */
226 /* unsigned int i; */
227 /* for (i=0; i < length; i++){ */
228 /* buff[i] = (BYTE)buffer[i]; */
229 /* } */
230 /* return buff; */
231 /* } */

  ViewVC Help
Powered by ViewVC 1.1.23