]> git.uio.no Git - u/mrichter/AliRoot.git/blame - RALICE/icepack/iceconvert/rdmc_mevt_uses.c
Removing useless const to avoid warnings on alphacxx6
[u/mrichter/AliRoot.git] / RALICE / icepack / iceconvert / rdmc_mevt_uses.c
CommitLineData
f67e2651 1
2/********implements functions for the mevt_uses structure *********/
3
4#include <string.h>
5#include <stdlib.h>
6#include <malloc.h>
7
8#include "rdmc.h"
9
10static int comp_uses(const void *h1, const void *h2);
11
12
13void rdmc_init_mevt_uses(mevt_uses_t *u){
14 u->hitid = RDMC_NA;
15 u->useid = RDMC_NA;
16 return;
17}
18
19void rdmc_free_mevt_uses(mevt_uses_t *u){
20 return;
21}
22
23void rdmc_clear_mevt_uses(mevt_uses_t *u){
24 rdmc_free_mevt_uses(u);
25 rdmc_init_mevt_uses(u);
26 return;
27}
28
29void rdmc_cp_mevt_nuses(mevt_uses_t *out, mevt_uses_t *in, int nuses){
30
31 if ((in == NULL) || (out == NULL) || (in == out))
32 return;
33 memcpy(out,in,nuses*sizeof(mevt_uses_t));
34 return;
35}
36
37
38/* sorts the uses array for a) uses id and the hit_id */
39void rdmc_sort_uses(mevt_uses_t *use, int nuse){
40 qsort(use,nuse,sizeof(mevt_uses_t),comp_uses);
41}
42
43static int comp_uses(const void *h1, const void *h2){
44 int s;
45 const mevt_uses_t *u1=h1,*u2=h2;
46 s = u1->useid - u2->useid;
47 switch (s){
48 case 0 :
49 s = u1->hitid - u2->hitid;
50 switch (s){
51 case 0 :
52 s= -1;
53 break;
54 default:
55 break;
56 }
57 break;
58 default:
59 break;
60 }
61 return s;
62}
63
64
65int rdmc_create_fit_uses(mevt *e, int ifit){
66 mevt_uses_t use;
67 int i;
68
69 rdmc_init_mevt_uses(&use);
70 use.useid=ifit;
71
72 /* loop over all hits in the old event */
73 for (i=0 ; i < e->nhits ; i++ ){
74 use.hitid=e->h[i].id;
75 rdmc_add_mevt_uses(&(e->fit_uses),&(e->nfit_uses)
76 ,&use,e->nfit_uses);
77 } /* all old hits */
78 return 0;
79}
80
81int rdmc_create_trig_uses(mevt *e, int itrig){
82 mevt_uses_t use;
83 int i;
84
85 rdmc_init_mevt_uses(&use);
86 use.useid=itrig;
87
88 /* loop over all hits in the old event */
89 for (i=0 ; i < e->nhits ; i++ ){
90 use.hitid=e->h[i].id;
91 rdmc_add_mevt_uses(&(e->trig_uses),&(e->ntrig_uses)
92 ,&use,e->ntrig_uses);
93 } /* all old hits */
94 return 0;
95}
96
97
98 /* count the number of channels which are used by fit or trigger i*/
99int rdmc_count_fit_nch_uses(mevt *e, array *a, int ifit){
100 int nch=0;
101 static int *ich=NULL;
102 int iuse;
103
104 /* first sort fit_uses data for fit number */
105 rdmc_sort_uses(e->fit_uses, e->nfit_uses);
106
107#if 1
108 /* get pointer to first element for fit i */
109 for (iuse=0 ; iuse < e->nfit_uses ; iuse++){
110 if (e->fit_uses[iuse].useid == ifit){
111 break; /* ok we found one */
112 }
113 }
114 if (iuse >= e->nfit_uses) return 0;
115#else
116 iuse=0;
117#endif
118
119 /* get temporary array for the number of channels and init to 0*/
120 ich = alloca(a->nch*sizeof(int));
121 memset(ich,0,a->nch*sizeof(int));
122
123 /* flag each channel number which was hit */
124 while (iuse < e->nfit_uses) {
125 if(e->fit_uses[iuse].useid == ifit){
126 int ihit = rdmc_mevt_ihit(e, e->fit_uses[iuse].hitid );
127 if (ihit == RDMC_NA ) {
128#if 1
129 /* consider this hit as non existent for good reason */
130#else
131 nch++; /* assume a different channel was hit */
132#endif
133#if 0
134 rdmc_warnprintf("ev=%i, fit=%i hit id=%i is not existent ",e->enr,ifit,e->fit_uses[iuse].hitid);
135#endif
136 } else if ( ich[e->h[ihit].ch] == 0){
137 nch++; /* count all newly hit channels */
138 ich[e->h[ihit].ch] += 1;
139 }
140#if 1
141 }else{
142 break;
143#endif
144 }
145 iuse++;
146 }
147
148 return nch;
149}
150
151
152
153
154
155