def _generator(self): """ Stereo event generator. Yields DataContainer instances, filled with the read event data. Returns ------- """ counter = 0 data = DataContainer() data.meta['origin'] = "MAGIC" data.meta['input_url'] = self.input_url data.meta['is_simulation'] = True data.mcheader = self._mc_header if self.calib_M1 is not None and self.calib_M2 is not None: #Reading data from root file for Events table eventid_M1 = np.asarray( self.calib_M1["MRawEvtHeader.fStereoEvtNumber"].array()) eventid_M2 = np.asarray( self.calib_M2["MRawEvtHeader.fStereoEvtNumber"].array()) zenith = np.asarray(self.calib_M1["MMcEvt.fTheta"].array()) pointing_altitude = np.asarray( self.calib_M1["MPointingPos.fZd"].array()) azimuth = np.asarray(self.calib_M1["MMcEvt.fPhi"].array()) pointing_azimuth = np.asarray( self.calib_M1["MPointingPos.fAz"].array()) core_x = np.asarray(self.calib_M1["MMcEvt.fCoreX"].array()) core_y = np.asarray(self.calib_M1["MMcEvt.fCoreY"].array()) mc_energy = np.asarray( self.calib_M1["MMcEvt.fEnergy"].array()) / 1000.0 h_first_int = np.asarray( self.calib_M1["MMcEvt.fZFirstInteraction"].array()) #Reading data from root file for Image table charge_M1 = np.asarray( self.calib_M1["MCerPhotEvt.fPixels.fPhot"].array()) peak_time_M1 = np.asarray( self.calib_M1["MArrivalTime.fData"].array()) charge_M2 = np.asarray( self.calib_M2["MCerPhotEvt.fPixels.fPhot"].array()) peak_time_M2 = np.asarray( self.calib_M2["MArrivalTime.fData"].array()) if self.superstar is not None: #Reading data from root file for Events table eventid_M1 = np.asarray( self.superstar["MRawEvtHeader_1.fStereoEvtNumber"].array()) eventid_M2 = np.asarray( self.superstar["MRawEvtHeader_2.fStereoEvtNumber"].array()) zenith = np.asarray(self.superstar["MMcEvt_1.fTheta"].array()) pointing_altitude = np.asarray( self.superstar["MPointingPos_1.fZd"].array()) azimuth = np.asarray(self.superstar["MMcEvt_1.fPhi"].array()) pointing_azimuth = np.asarray( self.superstar["MPointingPos_1.fAz"].array()) core_x = np.asarray(self.superstar["MMcEvt_1.fCoreX"].array()) core_y = np.asarray(self.superstar["MMcEvt_1.fCoreY"].array()) mc_energy = np.asarray( self.superstar["MMcEvt_1.fEnergy"].array()) / 1000.0 h_first_int = np.asarray( self.superstar["MMcEvt_1.fZFirstInteraction"].array()) #Reading data from root file for Parameter table hillas_intensity_M1 = np.asarray( self.superstar["MHillas_1.fSize"].array()) hillas_intensity_M2 = np.asarray( self.superstar["MHillas_2.fSize"].array()) hillas_x_M1 = np.asarray( self.superstar["MHillas_1.fMeanX"].array()) hillas_x_M2 = np.asarray( self.superstar["MHillas_2.fMeanX"].array()) hillas_y_M1 = np.asarray( self.superstar["MHillas_1.fMeanY"].array()) hillas_y_M2 = np.asarray( self.superstar["MHillas_2.fMeanY"].array()) hillas_r_M1 = np.sqrt( np.power(hillas_x_M1, 2) + np.power(hillas_y_M1, 2)) hillas_r_M2 = np.sqrt( np.power(hillas_x_M2, 2) + np.power(hillas_y_M2, 2)) hillas_phi_M1 = np.arctan2(hillas_y_M1, hillas_x_M1) hillas_phi_M2 = np.arctan2(hillas_y_M2, hillas_x_M2) hillas_length_M1 = np.asarray( self.superstar["MHillas_1.fLength"].array()) hillas_length_M2 = np.asarray( self.superstar["MHillas_2.fLength"].array()) hillas_width_M1 = np.asarray( self.superstar["MHillas_1.fWidth"].array()) hillas_width_M2 = np.asarray( self.superstar["MHillas_2.fWidth"].array()) hillas_psi_M1 = np.asarray( self.superstar["MHillas_1.fDelta"].array()) hillas_psi_M2 = np.asarray( self.superstar["MHillas_2.fDelta"].array()) hillas_skewness_M1 = np.asarray( self.superstar["MHillasExt_1.fM3Long"].array()) hillas_skewness_M2 = np.asarray( self.superstar["MHillasExt_2.fM3Long"].array()) leakage_intensity_1_M1 = np.asarray( self.superstar["MNewImagePar_1.fLeakage1"].array()) leakage_intensity_1_M2 = np.asarray( self.superstar["MNewImagePar_2.fLeakage1"].array()) leakage_intensity_2_M1 = np.asarray( self.superstar["MNewImagePar_1.fLeakage2"].array()) leakage_intensity_2_M2 = np.asarray( self.superstar["MNewImagePar_2.fLeakage2"].array()) num_islands_M1 = np.asarray( self.superstar["MCerPhotEvt_1.fNumIslands"].array()) num_islands_M2 = np.asarray( self.superstar["MCerPhotEvt_2.fNumIslands"].array()) #Reading data from root file for Image table (peak time and image mask not ) charge_M1 = np.asarray( self.superstar["MCerPhotEvt_1.fPixels.fPhot"].array()) peak_time_M1 = np.zeros((charge_M1.shape[0], 1039)) image_mask_M1 = np.zeros((charge_M1.shape[0], 1039), dtype=bool) charge_M2 = np.asarray( self.superstar["MCerPhotEvt_2.fPixels.fPhot"].array()) peak_time_M2 = np.zeros((charge_M2.shape[0], 1039)) image_mask_M2 = np.zeros((charge_M2.shape[0], 1039), dtype=bool) # Get the shower primary id shower_primary_id = 1 if self.file_list[0].split("/")[-1].startswith("GA"): shower_primary_id = 1 #Iterating over all events, and saving only stereo ones total_events = min(len(charge_M1), len(charge_M2)) tels_with_data = {1, 2} for i in range(0, total_events): if eventid_M1[i] != 0: obs_id = self.run_number event_id = eventid_M1[i] i2 = np.where(eventid_M2 == eventid_M1[i]) i2 = i2[0].astype(int) data.count = counter # Setting up the Data container data.index.obs_id = obs_id data.index.event_id = event_id data.r0.tel.clear() data.r1.tel.clear() data.dl0.tel.clear() # Adding the array pointing in the pointing container data.pointing.array_altitude = u.Quantity( np.deg2rad(90.0 - pointing_altitude[i]), u.rad) data.pointing.array_azimuth = u.Quantity( np.deg2rad(pointing_azimuth[i]), u.rad) # Filling the DL1 container with the event data for tel_id in tels_with_data: #Adding telescope pointing container data.pointing.tel[tel_id].azimuth = u.Quantity( np.deg2rad(pointing_azimuth[i]), u.rad) data.pointing.tel[tel_id].altitude = u.Quantity( np.deg2rad(90.0 - pointing_altitude[i]), u.rad) #Adding MC data data.mc.alt = Angle(np.pi / 2.0 - zenith[i], u.rad) data.mc.az = Angle( np.deg2rad(180.0 - 7.0) - azimuth[i], u.rad) data.mc.x_max = u.Quantity(0, X_MAX_UNIT) data.mc.h_first_int = u.Quantity(h_first_int[i], u.m) data.mc.core_x = u.Quantity(core_x[i], u.m) data.mc.core_y = u.Quantity(core_y[i], u.m) data.mc.energy = u.Quantity(mc_energy[i], u.TeV) data.mc.shower_primary_id = shower_primary_id if self.superstar is not None: leakage_values = LeakageContainer() hillas_parameters_values = HillasParametersContainer() concentration_values = ConcentrationContainer() timing_values = TimingParametersContainer() morphology_values = MorphologyContainer() # Adding charge, peak time and parameters if tel_id == 1: data.dl1.tel[tel_id].image = charge_M1[i][:1039] data.dl1.tel[tel_id].peak_time = peak_time_M1[i][:1039] if self.superstar is not None: data.dl1.tel[tel_id].image_mask = image_mask_M1[ i][:1039] hillas_parameters_values[ "intensity"] = hillas_intensity_M1[i] hillas_parameters_values["x"] = u.Quantity( hillas_x_M1[i], unit=u.mm) hillas_parameters_values["y"] = u.Quantity( hillas_y_M1[i], unit=u.mm) hillas_parameters_values["r"] = u.Quantity( hillas_r_M1[i], unit=u.mm) hillas_parameters_values["phi"] = u.Quantity( hillas_phi_M1[i], unit=u.rad) hillas_parameters_values["length"] = u.Quantity( hillas_length_M1[i], unit=u.mm) hillas_parameters_values["width"] = u.Quantity( hillas_width_M1[i], unit=u.mm) hillas_parameters_values["psi"] = u.Quantity( hillas_psi_M1[i], unit=u.rad) hillas_parameters_values[ "skewness"] = hillas_skewness_M1[i] leakage_values[ "intensity_width_1"] = leakage_intensity_1_M1[ i] leakage_values[ "intensity_width_2"] = leakage_intensity_2_M1[ i] morphology_values["num_pixels"] = 1039 morphology_values["num_islands"] = num_islands_M1[ i] else: data.dl1.tel[tel_id].image = charge_M2[i][:1039] data.dl1.tel[tel_id].peak_time = peak_time_M2[i][:1039] if self.superstar is not None: data.dl1.tel[tel_id].image_mask = image_mask_M2[ i][:1039] hillas_parameters_values[ "intensity"] = hillas_intensity_M2[i] hillas_parameters_values["x"] = u.Quantity( hillas_x_M2[i], unit=u.mm) hillas_parameters_values["y"] = u.Quantity( hillas_y_M2[i], unit=u.mm) hillas_parameters_values["r"] = u.Quantity( hillas_r_M2[i], unit=u.mm) hillas_parameters_values["phi"] = u.Quantity( hillas_phi_M2[i], unit=u.rad) hillas_parameters_values["length"] = u.Quantity( hillas_length_M2[i], unit=u.mm) hillas_parameters_values["width"] = u.Quantity( hillas_width_M2[i], unit=u.mm) hillas_parameters_values["psi"] = u.Quantity( hillas_psi_M2[i], unit=u.rad) hillas_parameters_values[ "skewness"] = hillas_skewness_M2[i] leakage_values[ "intensity_width_1"] = leakage_intensity_1_M2[ i] leakage_values[ "intensity_width_2"] = leakage_intensity_2_M2[ i] morphology_values["num_pixels"] = 1039 morphology_values["num_islands"] = num_islands_M2[ i] if self.superstar is not None: data.dl1.tel[ tel_id].parameters.leakage = leakage_values data.dl1.tel[ tel_id].parameters.hillas = hillas_parameters_values data.dl1.tel[ tel_id].parameters.concentration = concentration_values data.dl1.tel[tel_id].parameters.timing = timing_values data.dl1.tel[ tel_id].parameters.morphology = morphology_values # Setting the telescopes with data data.r0.tels_with_data = tels_with_data data.r1.tels_with_data = tels_with_data data.dl0.tels_with_data = tels_with_data yield data counter += 1 return
def _generator(self): """ Stereo event generator. Yields DataContainer instances, filled with the read event data. Returns ------- """ counter = 0 data = DataContainer() data.meta['origin'] = "MAGIC" data.meta['input_url'] = self.input_url data.meta['is_simulation'] = True data.mcheader = self._mc_header #Reading data from root file for Events table eventid_M1 = np.asarray( self.event_M1["MRawEvtHeader.fStereoEvtNumber"].array()) eventid_M2 = np.asarray( self.event_M2["MRawEvtHeader.fStereoEvtNumber"].array()) src_pos_cam_Y = np.asarray(self.event_M1["MSrcPosCam.fY"].array()) pointing_altitude = np.asarray( self.event_M1["MPointingPos.fZd"].array()) src_pos_cam_X = np.asarray(self.event_M1["MSrcPosCam.fX"].array()) pointing_azimuth = np.asarray( self.event_M1["MPointingPos.fAz"].array()) core_x = np.asarray(self.event_M1["MMcEvt.fCoreX"].array()) core_y = np.asarray(self.event_M1["MMcEvt.fCoreY"].array()) mc_energy = np.asarray( self.event_M1["MMcEvt.fEnergy"].array()) / 1000.0 h_first_int = np.asarray( self.event_M1["MMcEvt.fZFirstInteraction"].array()) mask = r".([A-Z]+)_M\d_za\d+to\d+_\d_\d+_Y_.*" primary_id = re.findall(mask, self.file_list[0])[0] if primary_id == 'GA': shower_primary_id = 1 stereo_total = np.max(eventid_M1) #Reading data from root file for Image table charge_M1 = self.event_M1["MCerPhotEvt.fPixels.fPhot"].array() peak_time_M1 = self.event_M1["MArrivalTime.fData"].array() charge_M1 = np.asarray(charge_M1) peak_time_M1 = np.asarray(peak_time_M1) charge_M2 = self.event_M2["MCerPhotEvt.fPixels.fPhot"].array() peak_time_M2 = self.event_M2["MArrivalTime.fData"].array() charge_M2 = np.asarray(charge_M2) peak_time_M2 = np.asarray(peak_time_M2) total_events = min( len(self.event_M1["MCerPhotEvt.fPixels.fPhot"].array()), len(self.event_M2["MCerPhotEvt.fPixels.fPhot"].array())) #Iterating over all events, and saving only stereo ones tels_in_file = ["m1", "m2"] tels_with_data = {1, 2} for i in range(0, total_events): if eventid_M1[i] != 0: obs_id = self.run_number event_id = eventid_M1[i] i2 = np.where(eventid_M2 == eventid_M1[i]) i2 = i2[0].astype(int) data.count = counter # Setting up the Data container data.index.obs_id = obs_id data.index.event_id = event_id data.r0.tel.clear() data.r1.tel.clear() data.dl0.tel.clear() # Filling the DL1 container with the event data for tel_i, tel_id in enumerate(tels_in_file): #Adding telescope pointing container data.pointing.tel[tel_i + 1].azimuth = u.Quantity( np.deg2rad(pointing_azimuth[i]), u.rad) data.pointing.tel[tel_i + 1].altitude = u.Quantity( np.deg2rad(90.0 - pointing_altitude[i]), u.rad) #Adding MC data #The src_pos_cam_X/src_pos_cam_Y values are stored as alt/az to follow the generic data format. data.mc.alt = Angle(np.deg2rad(src_pos_cam_Y[i] * 0.00337), u.rad) data.mc.az = Angle(np.deg2rad(src_pos_cam_X[i] * 0.00337), u.rad) data.mc.x_max = u.Quantity(0, X_MAX_UNIT) data.mc.h_first_int = u.Quantity(h_first_int[i], u.m) data.mc.core_x = u.Quantity(core_x[i], u.m) data.mc.core_y = u.Quantity(core_y[i], u.m) data.mc.energy = u.Quantity(mc_energy[i], u.TeV) data.mc.shower_primary_id = shower_primary_id # Adding event charge and peak positions per pixel if tel_i == 0: data.dl1.tel[tel_i + 1].image = charge_M1[i][:1039] data.dl1.tel[tel_i + 1].peak_time = peak_time_M1[i][:1039] else: data.dl1.tel[tel_i + 1].image = charge_M2[i][:1039] data.dl1.tel[tel_i + 1].peak_time = peak_time_M2[i][:1039] # Setting the telescopes with data data.r0.tels_with_data = tels_with_data data.r1.tels_with_data = tels_with_data data.dl0.tels_with_data = tels_with_data yield data counter += 1 return
def _generator(self): """ Stereo event generator. Yields DataContainer instances, filled with the read event data. Returns ------- """ counter = 0 data = DataContainer() data.meta["origin"] = "MAGIC" data.meta["input_url"] = self.input_url data.meta["is_simulation"] = self.mc data.mcheader = self._header if self.calib_M1 is not None and self.calib_M2 is not None: # Reading data from root file for Events table shower_primary_id = self.magic_to_cta_shower_primary_id[int( self.superstar["MMcEvt_1.fPartId"].array()[0])] eventid_M1 = np.asarray( self.calib_M1["MRawEvtHeader.fStereoEvtNumber"].array()) eventid_M2 = np.asarray( self.calib_M2["MRawEvtHeader.fStereoEvtNumber"].array()) zenith = np.asarray(self.calib_M1["MMcEvt.fTheta"].array()) pointing_altitude = np.asarray( self.calib_M1["MPointingPos.fZd"].array()) azimuth = np.asarray(self.calib_M1["MMcEvt.fPhi"].array()) pointing_azimuth = np.asarray( self.calib_M1["MPointingPos.fAz"].array()) core_x = np.asarray(self.calib_M1["MMcEvt.fCoreX"].array()) core_y = np.asarray(self.calib_M1["MMcEvt.fCoreY"].array()) mc_energy = np.asarray( self.calib_M1["MMcEvt.fEnergy"].array()) / 1000.0 h_first_int = np.asarray( self.calib_M1["MMcEvt.fZFirstInteraction"].array()) # Reading data from root file for Image table charge_M1 = np.asarray( self.calib_M1["MCerPhotEvt.fPixels.fPhot"].array()) peak_time_M1 = np.asarray( self.calib_M1["MArrivalTime.fData"].array()) image_mask_M1 = np.asarray(self.calib_M1["CleanCharge"].array()) for i, mask in enumerate(image_mask_M1): image_mask_M1[i] = np.array(mask) != 0 charge_M2 = np.asarray( self.calib_M2["MCerPhotEvt.fPixels.fPhot"].array()) peak_time_M2 = np.asarray( self.calib_M2["MArrivalTime.fData"].array()) image_mask_M2 = np.asarray(self.calib_M2["CleanCharge"].array()) for i, mask in enumerate(image_mask_M2): image_mask_M2[i] = np.array(mask) != 0 if self.superstar is not None: # Reading data from root file for Events table # only read MC information if it exists if self.is_simulation: shower_primary_id = self.magic_to_cta_shower_primary_id[int( self.superstar["MMcEvt_1.fPartId"].array()[0])] src_pos_cam_Y = np.asarray( self.superstar["MSrcPosCam_1.fY"].array()) src_pos_cam_X = np.asarray( self.superstar["MSrcPosCam_1.fX"].array()) core_x = np.asarray(self.superstar["MMcEvt_1.fCoreX"].array()) core_y = np.asarray(self.superstar["MMcEvt_1.fCoreY"].array()) mc_energy = ( np.asarray(self.superstar["MMcEvt_1.fEnergy"].array()) / 1000.0) h_first_int = np.asarray( self.superstar["MMcEvt_1.fZFirstInteraction"].array()) eventid_M1 = np.asarray( self.superstar["MRawEvtHeader_1.fStereoEvtNumber"].array()) eventid_M2 = np.asarray( self.superstar["MRawEvtHeader_2.fStereoEvtNumber"].array()) pointing_altitude = np.asarray( self.superstar["MPointingPos_1.fZd"].array()) pointing_azimuth = np.asarray( self.superstar["MPointingPos_1.fAz"].array()) # Reading data from root file for Parameter table hillas_intensity_M1 = np.asarray( self.superstar["MHillas_1.fSize"].array()) hillas_intensity_M2 = np.asarray( self.superstar["MHillas_2.fSize"].array()) hillas_x_M1 = np.asarray( self.superstar["MHillas_1.fMeanX"].array()) hillas_x_M2 = np.asarray( self.superstar["MHillas_2.fMeanX"].array()) hillas_y_M1 = np.asarray( self.superstar["MHillas_1.fMeanY"].array()) hillas_y_M2 = np.asarray( self.superstar["MHillas_2.fMeanY"].array()) hillas_r_M1 = np.sqrt( np.power(hillas_x_M1, 2) + np.power(hillas_y_M1, 2)) hillas_r_M2 = np.sqrt( np.power(hillas_x_M2, 2) + np.power(hillas_y_M2, 2)) hillas_phi_M1 = np.arctan2(hillas_y_M1, hillas_x_M1) hillas_phi_M2 = np.arctan2(hillas_y_M2, hillas_x_M2) hillas_length_M1 = np.asarray( self.superstar["MHillas_1.fLength"].array()) hillas_length_M2 = np.asarray( self.superstar["MHillas_2.fLength"].array()) hillas_width_M1 = np.asarray( self.superstar["MHillas_1.fWidth"].array()) hillas_width_M2 = np.asarray( self.superstar["MHillas_2.fWidth"].array()) hillas_psi_M1 = np.asarray( self.superstar["MHillas_1.fDelta"].array()) hillas_psi_M2 = np.asarray( self.superstar["MHillas_2.fDelta"].array()) hillas_skewness_M1 = np.asarray( self.superstar["MHillasExt_1.fM3Long"].array()) hillas_skewness_M2 = np.asarray( self.superstar["MHillasExt_2.fM3Long"].array()) leakage_intensity_1_M1 = np.asarray( self.superstar["MNewImagePar_1.fLeakage1"].array()) leakage_intensity_1_M2 = np.asarray( self.superstar["MNewImagePar_2.fLeakage1"].array()) leakage_intensity_2_M1 = np.asarray( self.superstar["MNewImagePar_1.fLeakage2"].array()) leakage_intensity_2_M2 = np.asarray( self.superstar["MNewImagePar_2.fLeakage2"].array()) num_islands_M1 = np.asarray( self.superstar["MImagePar_1.fNumIslands"].array()) num_islands_M2 = np.asarray( self.superstar["MImagePar_2.fNumIslands"].array()) x_max = np.asarray(self.superstar["MStereoPar.fXMax"].array()) # Reading data from root file for Image table (charge, peak time and image mask) charge_M1 = np.asarray(self.superstar["UprootImageOrig_1"].array()) for i, charge in enumerate(charge_M1): charge_M1[i] = np.array(charge) peak_time_M1 = np.asarray( self.superstar["MArrivalTime_1.fData"].array()) image_mask_M1 = np.asarray( self.superstar["UprootImageOrigClean_1"].array()) for i, mask in enumerate(image_mask_M1): image_mask_M1[i] = np.array(mask) != 0 charge_M2 = np.asarray(self.superstar["UprootImageOrig_2"].array()) for i, charge in enumerate(charge_M2): charge_M2[i] = np.array(charge) charge_M2 = np.asarray( self.superstar["MCerPhotEvt_2.fPixels.fPhot"].array()) peak_time_M2 = np.asarray( self.superstar["MArrivalTime_2.fData"].array()) image_mask_M2 = np.asarray( self.superstar["UprootImageOrigClean_2"].array()) for i, mask in enumerate(image_mask_M2): image_mask_M2[i] = np.array(mask) != 0 # Iterating over all events, and saving only stereo ones total_events = min(len(charge_M1), len(charge_M2)) tels_with_data = {1, 2} for i in range(0, total_events): if eventid_M1[i] != 0: obs_id = self.run_number event_id = eventid_M1[i] i2 = np.where(eventid_M2 == eventid_M1[i]) i2 = i2[0].astype(int) data.count = counter # Setting up the Data container data.index.obs_id = obs_id data.index.event_id = event_id data.r0.tel.clear() data.r1.tel.clear() data.dl0.tel.clear() # Adding the array pointing in the pointing container data.pointing.array_altitude = u.Quantity( np.deg2rad(90.0 - pointing_altitude[i]), u.rad) data.pointing.array_azimuth = u.Quantity( np.deg2rad(pointing_azimuth[i]), u.rad) # Filling the DL1 container with the event data for tel_id in tels_with_data: # Adding telescope pointing container data.pointing.tel[tel_id].azimuth = u.Quantity( np.deg2rad(pointing_azimuth[i]), u.rad) data.pointing.tel[tel_id].altitude = u.Quantity( np.deg2rad(90.0 - pointing_altitude[i]), u.rad) # Adding MC data if self.is_simulation: data.mc.alt = Angle( np.deg2rad(src_pos_cam_Y[i] * 0.00337), u.rad) data.mc.az = Angle( np.deg2rad(src_pos_cam_X[i] * 0.00337), u.rad) data.mc.x_max = u.Quantity(x_max[i], X_MAX_UNIT) data.mc.h_first_int = u.Quantity(h_first_int[i], u.m) data.mc.core_x = u.Quantity(core_x[i], u.m) data.mc.core_y = u.Quantity(core_y[i], u.m) data.mc.energy = u.Quantity(mc_energy[i], u.TeV) data.mc.shower_primary_id = shower_primary_id if self.superstar is not None: leakage_values = LeakageContainer() hillas_parameters_values = HillasParametersContainer() concentration_values = ConcentrationContainer() timing_values = TimingParametersContainer() morphology_values = MorphologyContainer() # Adding charge, peak time and parameters if tel_id == 1: data.dl1.tel[tel_id].image = charge_M1[i][:1039] data.dl1.tel[tel_id].peak_time = peak_time_M1[i][:1039] data.dl1.tel[tel_id].image_mask = image_mask_M1[ i][:1039] if self.superstar is not None: hillas_parameters_values[ "intensity"] = hillas_intensity_M1[i] hillas_parameters_values["x"] = u.Quantity( hillas_x_M1[i], unit=u.mm) hillas_parameters_values["y"] = u.Quantity( hillas_y_M1[i], unit=u.mm) hillas_parameters_values["r"] = u.Quantity( hillas_r_M1[i], unit=u.mm) hillas_parameters_values["phi"] = u.Quantity( hillas_phi_M1[i], unit=u.rad) hillas_parameters_values["length"] = u.Quantity( hillas_length_M1[i], unit=u.mm) hillas_parameters_values["width"] = u.Quantity( hillas_width_M1[i], unit=u.mm) hillas_parameters_values["psi"] = u.Quantity( hillas_psi_M1[i], unit=u.rad) hillas_parameters_values[ "skewness"] = hillas_skewness_M1[i] leakage_values[ "intensity_width_1"] = leakage_intensity_1_M1[ i] leakage_values[ "intensity_width_2"] = leakage_intensity_2_M1[ i] morphology_values["num_islands"] = num_islands_M1[ i] else: data.dl1.tel[tel_id].image = charge_M2[i][:1039] data.dl1.tel[tel_id].peak_time = peak_time_M2[i][:1039] data.dl1.tel[tel_id].image_mask = image_mask_M2[ i][:1039] if self.superstar is not None: hillas_parameters_values[ "intensity"] = hillas_intensity_M2[i] hillas_parameters_values["x"] = u.Quantity( hillas_x_M2[i], unit=u.mm) hillas_parameters_values["y"] = u.Quantity( hillas_y_M2[i], unit=u.mm) hillas_parameters_values["r"] = u.Quantity( hillas_r_M2[i], unit=u.mm) hillas_parameters_values["phi"] = u.Quantity( hillas_phi_M2[i], unit=u.rad) hillas_parameters_values["length"] = u.Quantity( hillas_length_M2[i], unit=u.mm) hillas_parameters_values["width"] = u.Quantity( hillas_width_M2[i], unit=u.mm) hillas_parameters_values["psi"] = u.Quantity( hillas_psi_M2[i], unit=u.rad) hillas_parameters_values[ "skewness"] = hillas_skewness_M2[i] leakage_values[ "intensity_width_1"] = leakage_intensity_1_M2[ i] leakage_values[ "intensity_width_2"] = leakage_intensity_2_M2[ i] morphology_values["num_islands"] = num_islands_M2[ i] if self.superstar is not None: data.dl1.tel[ tel_id].parameters.leakage = leakage_values data.dl1.tel[ tel_id].parameters.hillas = hillas_parameters_values data.dl1.tel[ tel_id].parameters.concentration = concentration_values data.dl1.tel[tel_id].parameters.timing = timing_values data.dl1.tel[ tel_id].parameters.morphology = morphology_values # Setting the telescopes with data data.r0.tels_with_data = tels_with_data data.r1.tels_with_data = tels_with_data data.dl0.tels_with_data = tels_with_data yield data counter += 1 return
def _generator(self): with self.pyhessio.open_hessio(self.input_url) as file: # the container is initialized once, and data is replaced within # it after each yield counter = 0 eventstream = file.move_to_next_event() data = DataContainer() data.meta['origin'] = "hessio" # some hessio_event_source specific parameters data.meta['input_url'] = self.input_url data.meta['max_events'] = self.max_events for event_id in eventstream: if counter == 0: # subarray info is only available when an event is loaded, # so load it on the first event. data.inst.subarray = self._build_subarray_info(file) obs_id = file.get_run_number() tels_with_data = set(file.get_teldata_list()) data.count = counter data.r0.obs_id = obs_id data.r0.event_id = event_id data.r0.tels_with_data = tels_with_data data.r1.obs_id = obs_id data.r1.event_id = event_id data.r1.tels_with_data = tels_with_data data.dl0.obs_id = obs_id data.dl0.event_id = event_id data.dl0.tels_with_data = tels_with_data # handle telescope filtering by taking the intersection of # tels_with_data and allowed_tels if len(self.allowed_tels) > 0: selected = tels_with_data & self.allowed_tels if len(selected) == 0: continue # skip event data.r0.tels_with_data = selected data.r1.tels_with_data = selected data.dl0.tels_with_data = selected data.trig.tels_with_trigger = ( file.get_central_event_teltrg_list()) time_s, time_ns = file.get_central_event_gps_time() data.trig.gps_time = Time(time_s * u.s, time_ns * u.ns, format='unix', scale='utc') data.mc.energy = file.get_mc_shower_energy() * u.TeV data.mc.alt = Angle(file.get_mc_shower_altitude(), u.rad) data.mc.az = Angle(file.get_mc_shower_azimuth(), u.rad) data.mc.core_x = file.get_mc_event_xcore() * u.m data.mc.core_y = file.get_mc_event_ycore() * u.m first_int = file.get_mc_shower_h_first_int() * u.m data.mc.h_first_int = first_int data.mc.x_max = file.get_mc_shower_xmax() * u.g / (u.cm**2) data.mc.shower_primary_id = file.get_mc_shower_primary_id() # mc run header data data.mcheader.run_array_direction = Angle( file.get_mc_run_array_direction() * u.rad) # this should be done in a nicer way to not re-allocate the # data each time (right now it's just deleted and garbage # collected) data.r0.tel.clear() data.r1.tel.clear() data.dl0.tel.clear() data.dl1.tel.clear() data.mc.tel.clear() # clear the previous telescopes for tel_id in tels_with_data: mc = data.mc.tel[tel_id] r0 = data.r0.tel[tel_id] r1 = data.r1.tel[tel_id] pointing = data.pointing[tel_id] adc_samples = file.get_adc_sample(tel_id) if adc_samples.size == 0: adc_samples = file.get_adc_sum(tel_id)[..., None] dc_to_pe = file.get_calibration(tel_id) pedestal = file.get_pedestal(tel_id) r0.waveform = adc_samples r1.waveform, r1.selected_gain_channel = apply_simtel_r1_calibration( adc_samples, pedestal, dc_to_pe, self.gain_selector) mc.dc_to_pe = dc_to_pe mc.pedestal = pedestal r0.num_trig_pix = file.get_num_trig_pixels(tel_id) r0.trig_pix_id = file.get_trig_pixels(tel_id) # load the data per telescope/pixel hessio_mc_npe = file.get_mc_number_photon_electron(tel_id) mc.photo_electron_image = hessio_mc_npe mc.azimuth_raw = file.get_azimuth_raw(tel_id) mc.altitude_raw = file.get_altitude_raw(tel_id) azimuth_cor = file.get_azimuth_cor(tel_id) altitude_cor = file.get_altitude_cor(tel_id) # hessioeventsource pass 0 if there is no altitude/azimuth correction if azimuth_cor == 0 and mc.azimuth_raw != 0: mc.azimuth_cor = np.nan pointing.azimuth = u.Quantity(mc.azimuth_raw, u.rad) else: mc.azimuth_cor = azimuth_cor pointing.azimuth = u.Quantity(azimuth_cor, u.rad) if altitude_cor == 0 and mc.altitude_raw != 0: mc.altitude_cor = np.nan pointing.altitude = u.Quantity(mc.altitude_raw, u.rad) else: mc.altitude_cor = altitude_cor pointing.altitude = u.Quantity(mc.altitude_cor, u.rad) yield data counter += 1 return