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

Annotation of /PamVMC/src/CRC.cxx

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide 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 nikolas 1.1 /****************************************************************************
2     * F i l e D a t a
3 pam-rm2 1.5 * $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 nikolas 1.1 *
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 pam-rm2 1.5 * $Author: nikolas $
12 nikolas 1.1 * :
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