/***** header */ #include "midas.h" // midas toolbox #include // gz files toolbox gzFile pFile; // file to fill with midas data static char *buffer; EVENT_HEADER *pevent_copy; char * pbuf; EVENT_HEADER *pheader; DWORD *pdatadw; WORD *pdataw; GSIM_BANK * pgsim; /***** source */ // open midas file pFile = gzopen("file.mid.gz","w6h"); // Allocate/Initialize memory and pointers buffer = (char *) malloc(MAX_EVENT_SIZE); memset(buffer,0,MAX_EVENT_SIZE); pevent_copy = (EVENT_HEADER *) buffer; pbuf = (char *) pevent_copy; pheader = (EVENT_HEADER *) malloc ((size_t) sizeof(EVENT_HEADER)); memset(pheader,0,sizeof (EVENT_HEADER)); // Compose Event Header bm_compose_event( (EVENT_HEADER *) pheader,1,0,100,1); memcpy(pbuf,pheader,sizeof(EVENT_HEADER)); pbuf += sizeof(EVENT_HEADER); // Initialize buffer to hold bank info bk_init32(pbuf); /////////////////////// Filling TRIG bank bk_create(pbuf,(char*) "TRIG",TID_WORD,&pdataw); if(trig_hi) {*pdataw++ = TRIG_CsHI;} // TRIG_PIENU_HI else if(trig_hilo){*pdataw++ = TRIG_CsLO;} // TRIG_HILO else {*pdataw++ = TRIG_RNDM;} // TRIG_RANDOM bk_close(pbuf,pdataw); ////////////////////// Filling LTDC bank // from /common/lib/midas/include/hardware.h LRS1877_DATA *lrs1877; LRS1877_HEADER *lrs1877_header; bk_create(pbuf,(char*) "LTDC", TID_DWORD | TID_LRS1877 , &pdatadw); for(G4int i=0;i<491;i++){ if(channel_hit[i]!=-1000.){ lrs1877_header = (LRS1877_HEADER *) pdatadw; lrs1877_header[0].count = 3; pdatadw += sizeof(LRS1877_HEADER)/sizeof(DWORD); lrs1877 = (LRS1877_DATA *) pdatadw; lrs1877[0].geo_addr = channel_map_geo_addr[i]; lrs1877[0].channel = channel_map_channel[i]; lrs1877[0].data = channel_hit[i]-tdc_offset[i]-tdc_width[i] ; lrs1877[0].edge = 1; pdatadw += sizeof(LRS1877_DATA)/sizeof(DWORD); lrs1877 = (LRS1877_DATA *) pdatadw; lrs1877[0].geo_addr = channel_map_geo_addr[i]; lrs1877[0].channel = channel_map_channel[i]; lrs1877[0].data = channel_hit[i]-tdc_offset[i]; lrs1877[0].edge = 0; pdatadw += sizeof(LRS1877_DATA)/sizeof(DWORD); } } bk_close(pbuf,pdatadw); /////////////////////// Filling GSIM bank GSIM_BANK * pgsimbuf; bk_create(pbuf, "GSIM", TID_STRUCT, &pgsimbuf); memcpy(pgsimbuf,pgsim,sizeof(GSIM_BANK)); pgsimbuf->Edep_Pi_Tgt= ent_Edep_Pi_Tgt; pgsimbuf->Edep_Mu_Tgt= ent_Edep_Mu_Tgt; pgsimbuf->Edep_e_Tgt= ent_Edep_e_Tgt; pgsimbuf->Edep_PV= ent_Edep_PV; pgsimbuf->Edep_CsI= ent_Edep_CsI; pgsimbuf+=sizeof(GSIM_BANK); bk_close(pbuf, pgsimbuf); // Set Event Size and write event to file pevent_copy->data_size = bk_size(pbuf); gzwrite(pFile,pevent_copy,pevent_copy->data_size + sizeof(EVENT_HEADER)); // free up allocated memory free(pheader); free(buffer); gzclose(pFile); // close midas file