2 /********implements functions for the mevt structure *********/
3 /* $Header: /net/local/cvsroot/siegmund/rdmc/rdmc_mevt.c,v 1.27 2004/02/19 17:10:10 wiebusch Exp $ */
9 #include "rdmc_local.h"
16 static int rdmc_add_mevt_WF(waveform **list, int *count, waveform *new, int ipos);
17 static int rdmc_del_mevt_WF(waveform **list, int *count, int ipos);
19 /****************************************************************************/
20 /* The function revt() reads an event of a mc file */
21 /* if it was not successfull, try to skip to the next event */
22 /****************************************************************************/
24 int rdmc_revt(mcfile *fp, array *ar, mevt *ev)
27 int r; /* return value */
29 if (feof(fp->fp)) /* test for end of file */
35 r = rdmc_revt_ascii(fp, ev,ar);
40 r = rdmc_revt_uwi(fp, ev, ar);
44 case BAIKAL_BIN_F: /* if it is a baikal-like format */
45 r = rdmc_revt_baikal(fp, ev, ar);
50 r = rdmc_revt_amanda(fp, ev, ar);
54 r = RDMC_UNKNOWN_FORMAT;
55 } /* switch fp->format */
57 if ((r != 0) && (r != EOF)) { /* if illegal format occured */
59 long filepos=fp->fpos; /* shows the current file position */
60 /* store the old file position */
62 fp->errline = r; /* set the source code line of the error */
64 rdmc_skipevt(fp); /* skip to the next event */
66 fp->fpos = filepos; /* restore old file position */
70 r = RDMC_ILF; /* set the return value in case of format error */
80 } /* function revt() */
83 /****************************************************************************/
84 /* skipevt skips over the next event record in a mc/data file */
85 /****************************************************************************/
86 int rdmc_skipevt(mcfile *fp)
92 case DUMAND_ASCII_F: /* for the dumand-like format */
93 r = rdmc_skipevt_ascii(fp); /* skip the event */
97 case UWI_ASCII_F: /* for the UWI-like format */
98 r = rdmc_skipevt_uwi(fp);
101 #ifdef AMANDA_ASCII_F
102 case AMANDA_ASCII_F: /* for the amanda-like format */
103 r = rdmc_skipevt_amanda(fp); /* skip the event */
107 case BAIKAL_BIN_F: /* for the baikal-like format */
108 r = rdmc_skipevt_baikal_mc(fp); /* skip the event */
112 r = RDMC_UNKNOWN_FORMAT;
116 } /* function skipevt() */
119 /****************************************************************************/
120 /* The function wevt() writes an event of a mc file */
121 /****************************************************************************/
123 int rdmc_wevt(mcfile *fp, const mevt *ev, const array *ar)
128 fprintf(stderr, "<Event(write): enr=%i nch=%i %s %s (%s)>\n",
129 ev->enr,ev->nch,(ev->gen!=NULL)?"gen":"",
130 (ev->rec!=NULL)?"rec":"",(fp->mc!=0)?"mc":"data");
134 #ifdef DUMAND_ASCII_F
135 case DUMAND_ASCII_F: /* for a dumand-like file */
136 r = rdmc_wevt_ascii(fp, ev,ar );
140 case UWI_ASCII_F: /* for a UWI file */
141 r = rdmc_wevt_uwi(fp, ev, ar);
144 #ifdef AMANDA_ASCII_F
145 case AMANDA_ASCII_F: /* for a amanda-like file */
146 r = rdmc_wevt_amanda(fp, ev, ar);
150 case BAIKAL_BIN_F: /* for a baikal-like file */
151 if (fp->info.bai.mc) /* if it is a monte carlo file */
152 r = rdmc_wevt_baikal_mc(fp, ev, ar);
153 else /* if it is a data file */
154 r = rdmc_wevt_baikal_data(fp, ev, ar);
155 fp->fpos = ftell(fp->fp);
159 r = RDMC_UNKNOWN_FORMAT;
164 } /* function wevt() */
166 /*******************************************/
167 /* Initialization functions ***********/
168 /*******************************************/
169 /**** init = set to default values ****/
170 /*** clear = free also memory *****/
171 /****************************************/
174 /****************************************************************************/
175 /* clear_mevt() frees the memory used by the pointers of a event and */
176 /* resets the mevt structure itself */
177 /****************************************************************************/
179 void rdmc_clear_mevt(mevt *ev)
181 unsigned long int event_id;
185 event_id=ev->event_id; /* save the event-id */
186 rdmc_init_mevt(ev); /* re-init the event */
187 ev->event_id = event_id+1; /* increment the event id */
189 } /* function clear_mevt() */
191 void rdmc_free_mevt(mevt *ev){
193 if (ev->h != NULL){ /* if there were hits */
194 for (i =0 ; i < ev->nhits ; i++)
195 rdmc_free_mhit(&(ev->h[i]));
196 free(ev->h); /* free them */
200 if (ev->wf != NULL){ /* if there were waveforms */
201 for (i =0 ; i < ev->nwf ; i++)
202 rdmc_free_WF(&(ev->wf[i]));
204 free(ev->wf); /* free them */
209 if (ev->gen != NULL){ /* if there were generating tracks */
210 for (i =0 ; i < ev->ntrack ; i++)
211 rdmc_free_mtrack(&(ev->gen[i]));
212 free(ev->gen); /* free it */
216 if ((ev->rec != NULL)&&(ev->fresult != NULL)){ /* if there are recos */
217 for (i =0 ; i < ev->nfit ; i++){
218 rdmc_free_mtrack(&(ev->rec[i]));
219 rdmc_free_mevt_special(&(ev->fresult[i]));
221 free(ev->rec); /* free it */
228 if (ev->user != NULL){
229 for (i =0 ; i < ev->nuser ; i++)
230 rdmc_free_mevt_special(&(ev->user[i]));
236 if (ev->status != NULL){
237 for (i =0 ; i < ev->nstat ; i++)
238 rdmc_free_mevt_special(&(ev->status[i]));
243 if (ev->ptrig != NULL){
244 for (i =0 ; i < ev->ntrig ; i++)
245 rdmc_free_mevt_special(&(ev->ptrig[i]));
250 if (ev->mcinfo != NULL){
251 for (i =0 ; i < ev->nmcinfo ; i++)
252 rdmc_free_mevt_special(&(ev->mcinfo[i]));
259 if (ev->trig_uses != NULL){
263 if (ev->fit_uses != NULL){
269 if (ev->comment != NULL){
278 } /* function free_mevt() */
281 /****************************************************************************/
282 /* init_mevt() resets the event values to start values */
283 /****************************************************************************/
285 void rdmc_init_mevt(mevt *ev)
298 ev->sort_status=RDMC_NO_SORT;
325 ev->trig_uses = NULL;
330 } /* function init_mevt() */
334 /*************************************************************************/
335 /* counts number of strings in event e */
336 /*************************************************************************/
338 int rdmc_count_nstr(const mevt *ev)
340 /* too speed up we need to do some dirty memory management ! */
341 /* there are usually less hits than MAX_CHANNELS */
344 static int do_init=1;
345 static int hitted[RDMC_MAXCHANNELS];
348 for (i = 0; i < RDMC_MAXCHANNELS; i++) /* maximum number of strings */
353 /* now fill the block */
354 for (i = 0; i < ev->nhits; i++){
355 if ((ev->h[i].str <= RDMC_MAXCHANNELS) && (ev->h[i].str > 0))
356 hitted[ev->h[i].str-1]++;
359 /* now evaluate and clean on the fly -> strange loop */
360 for (i = 0; i < ev->nhits; i++){
361 if ((ev->h[i].str <= RDMC_MAXCHANNELS) && (ev->h[i].str > 0)){
362 if(hitted[ev->h[i].str-1]){
363 hitted[ev->h[i].str-1]=0;
371 } /* rdmc_count_nstr() */
374 /*************************************************************************/
375 /* counts number of channels in event e */
376 /*************************************************************************/
377 int rdmc_count_nch(const mevt *ev)
379 /* too speed up we need to do some dirty memory management ! */
380 /* there are usually less hits than MAX_CHANNELS */
383 static int do_init=1;
384 static int hitted[RDMC_MAXCHANNELS];
387 for (i = 0; i < RDMC_MAXCHANNELS; i++)
392 /* now fill the block */
393 for (i = 0; i < ev->nhits; i++){
394 if ((ev->h[i].ch < RDMC_MAXCHANNELS) && (ev->h[i].ch >= 0))
395 hitted[ev->h[i].ch]++;
398 /* now evaluate and clean on the fly -> strange loop */
399 for (i = 0; i < ev->nhits; i++){
400 if ((ev->h[i].ch < RDMC_MAXCHANNELS) && (ev->h[i].ch >= 0)){
401 if(hitted[ev->h[i].ch]){
402 hitted[ev->h[i].ch]=0;
408 } /* rdmc_count_nch() */
410 /****************************************************************************/
411 /* ns_evt() calculates the number of strings and fills it in the nstr field */
412 /* it also fills the string number into the h[].str fields */
413 /****************************************************************************/
415 int rdmc_fill_mhit_str(mevt *ev, const array *ar)
419 int error_flag = 0; /* indicates an error */
420 int geocal; /* flag if array is a valid geometry */
422 if (ev->nch >= RDMC_MAXCHANNELS) return RDMC_INCONSISTENT_GEOMETRY;
423 /* if there are too much channels */
424 geocal = ((ar->is_calib.geo) && (ar->nch >0)) ? 1 : 0;
426 for (i = 0; i < ev->nhits; i++) { /* for all hits */
429 (ev->h[i].ch >= 0) &&
430 (ev->h[i].ch < ar->nch)) /* if ch in range */
431 ev->h[i].str = ar->str[ev->h[i].ch]; /* write string number */
432 else { /* if channel not in range */
433 ev->h[i].str = 0; /* errornous string number */
434 } /* if not (0 < ch < ar->nch) */
437 return (error_flag == 0)? ev->nstr:error_flag;/* return number of strings */
439 } /* function rdmc_fill_mhit_str() */
441 /****************************************************************************/
443 /* copy values of channel in into out */
444 /* returns 0 if OK */
445 /****************************************************************************/
446 int rdmc_cp_mevt(mevt *out,mevt *in)
452 rdmc_clear_mevt(out);
455 /* just copy everything and overwrite dynamic pointers later */
456 memcpy(out,in,sizeof(mevt));
459 out->comment = (char *) malloc(strlen(in->comment)+1);
463 strcpy(out->comment, in->comment);
469 out->h = (mhit *) malloc(in->nhits*sizeof(mhit));
476 for (i = 0 ; i < in->nhits ; i++){
477 rdmc_cp_mhit(to,from);
485 if (out->nwf){ /* copy waveforms */
488 out->wf = (waveform *) malloc(in->nwf*sizeof(waveform));
495 for (i = 0 ; i < in->nwf ; i++){
506 out->gen = (mtrack *) malloc(in->ntrack*sizeof(mtrack));
513 for (i = 0 ; i < in->ntrack ; i++){
514 rdmc_cp_mtrack(to,from);
523 mtrack *ft_from,*ft_to;
524 mevt_special_t *fr_from,*fr_to;
525 out->rec = (mtrack *) malloc(in->nfit*sizeof(mtrack));
532 out->fresult = (mevt_special_t *) malloc(in->nfit*sizeof(mevt_special_t));
533 if (!(out->fresult)){
539 fr_from = in->fresult;
540 fr_to = out->fresult;
541 for (i = 0 ; i < in->nfit ; i++){
542 rdmc_cp_mtrack(ft_to,ft_from);
543 rdmc_cp_mevt_special(fr_to,fr_from);
544 fr_to++ ; fr_from++ ; ft_to++ ; ft_from++;
552 mevt_special_t *from,*to;
553 out->user = (mevt_special_t *) malloc(in->nuser*sizeof(mevt_special_t));
560 for (i = 0 ; i < in->nuser ; i++){
561 rdmc_cp_mevt_special(to,from);
569 mevt_special_t *from=in->status,*to;
570 out->status = (mevt_special_t *) malloc(in->nstat*sizeof(mevt_special_t));
571 if (! (to=out->status)){
575 for (i = 0 ; i < in->nstat ; i++){
576 rdmc_cp_mevt_special(to,from);
583 mevt_special_t *from=in->ptrig,*to;
584 out->ptrig = (mevt_special_t *) malloc(in->ntrig*sizeof(mevt_special_t));
585 if (! (to=out->ptrig)){
589 for (i = 0 ; i < in->ntrig ; i++){
590 rdmc_cp_mevt_special(to,from);
598 mevt_special_t *from=in->mcinfo,*to;
599 out->mcinfo = (mevt_special_t *)
600 malloc(in->nmcinfo*sizeof(mevt_special_t));
601 if (! (to=out->mcinfo)){
605 for (i = 0 ; i < in->nmcinfo ; i++){
606 rdmc_cp_mevt_special(to,from);
611 if (out->ntrig_uses){
612 out->trig_uses = (mevt_uses_t *)
613 malloc(in->ntrig_uses*sizeof(mevt_uses_t));
614 if (! (out->trig_uses) ){
618 rdmc_cp_mevt_nuses(out->trig_uses,in->trig_uses,in->ntrig_uses);
622 out->fit_uses = (mevt_uses_t *)
623 malloc(in->nfit_uses*sizeof(mevt_uses_t));
624 if (! (out->fit_uses) ){
628 rdmc_cp_mevt_nuses(out->fit_uses,in->fit_uses,in->nfit_uses);
631 if (out->tmp){ /* if there is a new stack delete it */
639 /***************** Functions to add/remove mevt objects *******/
641 int rdmc_add_gen(mevt *ev, mtrack *tr, int itrack){
642 return rdmc_add_mevt_mtrack( &(ev->gen),
647 int rdmc_del_gen(mevt *ev , int itrack){
648 return rdmc_del_mevt_mtrack( &(ev->gen),
653 int rdmc_add_fit(mevt *ev, mtrack *ft, mevt_special_t *fr, int ifit){
655 rf = rdmc_add_mevt_mtrack( &(ev->rec),
660 ev->nfit--; /* set counter back for fresult */
661 rr=rdmc_add_mevt_special( &(ev->fresult),
666 ev->nfit++; /* increase to get the last track back out */
667 rdmc_del_mevt_mtrack( &(ev->rec),
675 int rdmc_del_fit(mevt *ev , int ifit){
677 rf = rdmc_del_mevt_mtrack( &(ev->rec),
681 ev->nfit++; /* set counter back for fresult */
682 rr=rdmc_del_mevt_special( &(ev->fresult),
687 /* cannot add it again */
693 int rdmc_add_user(mevt *ev, mevt_special_t *us, int iu){
694 return rdmc_add_mevt_special( &(ev->user),
700 int rdmc_del_user(mevt *ev , int iu){
701 return rdmc_del_mevt_special( &(ev->user),
706 int rdmc_add_status(mevt *ev, mevt_special_t *st, int is){
707 return rdmc_add_mevt_special( &(ev->status),
713 int rdmc_del_status(mevt *ev , int is){
714 return rdmc_del_mevt_special( &(ev->status),
719 int rdmc_add_mcinfo(mevt *ev, mevt_special_t *mci, int imci){
720 return rdmc_add_mevt_special( &(ev->mcinfo),
725 int rdmc_del_mcinfo(mevt *ev , int imci){
726 return rdmc_del_mevt_special( &(ev->mcinfo),
731 int rdmc_add_trigger(mevt *ev, mevt_special_t *tr, int itr, int idef){
735 if ((imask < 0)||(idef <0))
738 if (imask >= RDMC_MAXTRIGID)
739 ev->trigger |= ((unsigned long)1<<(RDMC_MAXTRIGID-1));
741 ev->trigger |= ((unsigned long)1<<(imask));
743 if (idef >= RDMC_MAXTRIGID)
744 ev->trigid |= ((unsigned long)1<<(RDMC_MAXTRIGID-1));
746 ev->trigid |= ((unsigned long)1<<(idef));
748 return rdmc_add_mevt_special( &(ev->ptrig),
754 int rdmc_del_trigger(mevt *ev , int itr, int idef){
756 if ((itr < 0 ) || (idef < 0) )
759 imask=ev->ptrig[itr].id;
763 if (imask < RDMC_MAXTRIGID)
764 ev->trigger &= (~(1<<(imask)));
765 /* in the else part we keep the overflow bit because it is not uniqe */
766 if (idef < RDMC_MAXTRIGID)
767 ev->trigid &= (~(1<<(idef)));
768 /* in the else part we keep the overflow bit because it is not uniqe */
770 return rdmc_del_mevt_special( &(ev->ptrig),
776 int rdmc_add_trig_uses(mevt *ev, mevt_uses_t *tu, int ituse){
777 return rdmc_add_mevt_uses( &(ev->trig_uses),
783 int rdmc_del_trig_uses(mevt *ev , int ituse){
784 return rdmc_del_mevt_uses( &(ev->trig_uses),
789 int rdmc_add_fit_uses(mevt *ev, mevt_uses_t *fu, int ifuse){
790 return rdmc_add_mevt_uses( &(ev->fit_uses),
796 int rdmc_del_fit_uses(mevt *ev , int ifuse){
797 return rdmc_del_mevt_uses( &(ev->fit_uses),
802 int rdmc_add_mhit(mevt *ev, mhit *h, int ihit){
803 return rdmc_add_mevt_mhit( &(ev->h),
809 int rdmc_del_mhit(mevt *ev , int ihit){
810 return rdmc_del_mevt_mhit( &(ev->h),
815 int rdmc_add_WF(mevt *ev, waveform *wf, int iwf){
816 return rdmc_add_mevt_WF( &(ev->wf), &(ev->nwf), wf, iwf);
819 int rdmc_del_WF(mevt *ev , int iwf){
821 if(iwf >=0 && iwf < ev->nwf){
822 rdmc_free_WF(&(ev->wf[iwf]));
824 rr = rdmc_del_mevt_WF( &(ev->wf),
831 int rdmc_add_mevt_mtrack(mtrack **list, int *count, mtrack *new, int ipos){
842 *list = (mtrack *) realloc(*list, sizeof(mtrack)*(*count));
844 for (i = (*count - 1) ; i > ipos ; i-- ){
845 rdmc_cp_mtrack( &((*list)[i]), &((*list)[i-1]) );
847 rdmc_cp_mtrack( &((*list)[ipos]), new );
852 int rdmc_add_mevt_special(mevt_special_t **list, int *count
853 ,mevt_special_t *new, int ipos){
865 *list = (mevt_special_t *) realloc( *list,
866 sizeof(mevt_special_t)*(*count));
868 for (i = (*count - 1) ; i > ipos ; i-- ){
869 rdmc_cp_mevt_special( &((*list)[i]), &((*list)[i-1]) );
871 rdmc_cp_mevt_special( &((*list)[ipos]), new );
876 int rdmc_add_mevt_mhit(mhit **list, int *count, mhit *new, int ipos){
888 *list = (mhit *) realloc( *list, sizeof(mhit)*(*count));
890 for (i = (*count - 1) ; i > ipos ; i-- ){
891 rdmc_cp_mhit( &((*list)[i]), &((*list)[i-1]) );
893 rdmc_cp_mhit( &((*list)[ipos]), new );
897 static int rdmc_add_mevt_WF(waveform **list, int *count, waveform *new, int ipos){
909 *list = (waveform *) realloc( *list, sizeof(waveform)*(*count));
911 for (i = (*count - 1) ; i > ipos ; i-- ){
912 rdmc_cp_WF( &((*list)[i]), &((*list)[i-1]) );
914 rdmc_cp_WF( &((*list)[ipos]), new );
918 int rdmc_add_mevt_uses(mevt_uses_t **list, int *count
919 ,mevt_uses_t *new, int ipos){
931 *list = (mevt_uses_t *) realloc( *list, sizeof(mevt_uses_t)*(*count));
933 for (i = (*count - 1) ; i > ipos ; i-- ){
934 rdmc_cp_mevt_nuses( &((*list)[i]), &((*list)[i-1]), 1);
936 rdmc_cp_mevt_nuses( &((*list)[ipos]), new , 1);
941 int rdmc_del_mevt_mtrack(mtrack **list, int *count, int ipos){
950 for (i = ipos ; i < (*count-1) ; i++ ){
951 rdmc_cp_mtrack( &((*list)[i]), &((*list)[i+1]) );
956 realloc(*list,sizeof(mtrack)*(*count));
964 int rdmc_del_mevt_special(mevt_special_t **list, int *count, int ipos){
973 for (i = ipos ; i < (*count-1) ; i++ ){
974 rdmc_cp_mevt_special( &((*list)[i]), &((*list)[i+1]) );
978 *list = (mevt_special_t *)
979 realloc(*list,sizeof(mevt_special_t)*(*count));
987 int rdmc_del_mevt_mhit(mhit **list, int *count, int ipos){
996 for (i = ipos ; i < (*count-1) ; i++ ){
997 rdmc_cp_mhit( &((*list)[i]), &((*list)[i+1]) );
1002 realloc(*list,sizeof(mhit)*(*count));
1012 static int rdmc_del_mevt_WF(waveform **list, int *count, int ipos){
1021 for (i = ipos ; i < (*count-1) ; i++ ){
1022 rdmc_cp_WF( &((*list)[i]), &((*list)[i+1]) );
1026 *list = (waveform *) realloc(*list,(*count)*sizeof(waveform));
1035 int rdmc_del_mevt_uses(mevt_uses_t **list, int *count, int ipos){
1044 for (i = ipos ; i < (*count-1) ; i++ ){
1045 rdmc_cp_mevt_nuses( &((*list)[i]), &((*list)[i+1]), 1 );
1049 *list = (mevt_uses_t *)
1050 realloc(*list,sizeof(mevt_uses_t)*(*count));
1059 int rdmc_del_ifit_uses(mevt *e , int fitid){
1062 for (i=0 ; i < e->nfit_uses ; ){
1063 if (e->fit_uses[i].useid == fitid )
1064 r |= rdmc_del_fit_uses(e , i);
1071 int rdmc_del_itrig_uses(mevt *e , int trigid){
1075 for (i=0 ; i < e->ntrig_uses ; ){
1076 if (e->trig_uses[i].useid == trigid )
1077 r |= rdmc_del_trig_uses(e , i);
1084 int rdmc_del_ihit_uses(mevt *e , int hitid){
1088 /* remove fit uses */
1089 for (i=0 ; i < e->nfit_uses ; ){
1090 if (e->fit_uses[i].hitid == hitid )
1091 r |= rdmc_del_fit_uses(e , i);
1096 /* remove trig uses */
1097 for (i=0 ; i < e->ntrig_uses ; ){
1098 if (e->trig_uses[i].hitid == hitid )
1099 r |= rdmc_del_trig_uses(e , i);
1106 /* in order to create objects one needs unique id's*/
1107 /* these functions return them */
1108 int rdmc_unique_mhit_id(const mevt *ev){
1109 int id = ev->nhits-1;
1116 for (i = ev->nhits-1 ; i >=0 ; i-- ){ /* downward to be faster */
1117 if (ev->h[i].id == id){
1122 } while (is_not_unique);
1127 /* give new uniqe hit ids if hit id <0 */
1128 int rdmc_repair_mhit_id(mevt *ev){
1131 for (i = 0 ; i < ev->nhits ; i++ ){
1132 if (ev->h[i].id < 0){
1133 ev->h[i].id = rdmc_unique_mhit_id(ev);
1136 else{ /* test for a double count */
1137 for (j = 0 ; j < i ; j++){
1138 if (ev->h[i].id == ev->h[j].id){
1139 ev->h[i].id = rdmc_unique_mhit_id(ev);
1145 if (repaired){ /* the ids were inconsistent */
1146 /* -> delete all uses ! */
1149 free(ev->trig_uses);
1150 ev->trig_uses = NULL;
1155 ev->fit_uses = NULL;
1161 /* in order to create objects one needs unique id's*/
1162 /* these functions return them */
1163 int rdmc_unique_gen_id(const mevt *ev){
1164 int id = ev->ntrack+1;
1171 for (i = ev->ntrack-1 ; i >=0 ; i-- ){ /* downward to be faster */
1172 if (ev->gen[i].tag == id){
1177 } while (is_not_unique);
1182 /* give new uniqe hit ids if hit id <0 */
1183 int rdmc_repair_gen_id(mevt *ev){
1186 for (i = 0 ; i < ev->ntrack ; i++ ){
1187 if (ev->gen[i].tag < 0){
1188 ev->gen[i].tag = rdmc_unique_gen_id(ev);
1190 } else{ /* test for a double count */
1191 for (j = 0 ; j < i ; j++){
1192 if (ev->gen[i].tag == ev->gen[j].tag){
1193 ev->gen[i].tag = rdmc_unique_gen_id(ev);
1199 if (repaired){ /* the ids were inconsistent */
1200 /* -> delete all track parent id's */
1201 for (i = 0 ; i < ev->ntrack ; i++)
1202 ev->gen[i].parent = RDMC_NA;
1204 /* -> delete all hit parent id's */
1205 for (i = 0 ; i < ev->nhits ; i++)
1206 ev->h[i].mt = ev->h[i].ma = RDMC_NA;
1211 /* return the index of the hit hitid */
1212 int rdmc_mevt_ihit(mevt *ev, int hitid){
1214 for (i = 0 ; i < ev->nhits ; i++){
1215 if (ev->h[i].id == hitid)