00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <stdio.h>
00012 #include <stdlib.h>
00013 #include <string>
00014 #include <map>
00015 #include <utility>
00016 #include <sstream>
00017
00018
00019 #include "midas.h"
00020
00021
00022 #include <TH2.h>
00023
00024
00025 #include "TOctalFADCIsland.h"
00026 #include "TOctalFADCBankReader.h"
00027 #include "TGlobalData.h"
00028 #include "TSetupData.h"
00029 #include "TPulseIsland.h"
00030
00031 using std::string;
00032 using std::map;
00033 using std::vector;
00034 using std::pair;
00035
00036
00037 INT MExpectedIslands_init(void);
00038 INT MExpectedIslands(EVENT_HEADER*, void*);
00039 double GetClockTickForChannel(string bank_name);
00040
00041 extern HNDLE hDB;
00042 extern TGlobalData* gData;
00043 extern TSetupData* gSetup;
00044
00045 static vector<TOctalFADCBankReader*> fadc_bank_readers;
00046 static TH2I* hExpectedNumberOfIslands;
00047
00048 ANA_MODULE MExpectedIslands_module =
00049 {
00050 "MExpectedIslands",
00051 "Andrew Edmonds",
00052 MExpectedIslands,
00053 NULL,
00054 NULL,
00055 MExpectedIslands_init,
00056 NULL,
00057 NULL,
00058 0,
00059 NULL,
00060 };
00061
00064 INT MExpectedIslands_init()
00065 {
00066
00067
00068
00069
00070 hExpectedNumberOfIslands = new TH2I("hExpectedNumberOfIslands", "Expected Number of Islands per Channel per Event", 1,0,1, 10000,0,10000);
00071 hExpectedNumberOfIslands->GetXaxis()->SetTitle("Bank Name");
00072 hExpectedNumberOfIslands->GetYaxis()->SetTitle("MIDAS Event Number");
00073 hExpectedNumberOfIslands->SetBit(TH1::kCanRebin);
00074
00075 return SUCCESS;
00076 }
00077
00081 INT MExpectedIslands(EVENT_HEADER *pheader, void *pevent)
00082 {
00083
00084 int midas_event_number = pheader->serial_number;
00085
00086
00087 typedef map<string, vector<TPulseIsland*> > TStringPulseIslandMap;
00088 typedef pair<string, vector<TPulseIsland*> > TStringPulseIslandPair;
00089 typedef map<string, vector<TPulseIsland*> >::iterator map_iterator;
00090
00091
00092
00093 TStringPulseIslandMap& pulse_islands_map =
00094 gData->fPulseIslandToChannelMap;
00095
00096
00097 for (map_iterator theMapIter = pulse_islands_map.begin(); theMapIter != pulse_islands_map.end(); theMapIter++)
00098 {
00099 std::string bankname = theMapIter->first;
00100 std::vector<TPulseIsland*> thePulses = theMapIter->second;
00101
00102 double pulse_frequency = 65;
00103 double pulse_period = (1 / pulse_frequency) * 1e3;
00104 double gate_width = 110;
00105
00106 if (thePulses.size() != 0) {
00107 double initial_pulse_time = (*(thePulses.begin()))->GetTimeStamp() * (*(thePulses.begin()))->GetClockTickInNs() * 1e-6;
00108
00109
00110 double remaining_time = gate_width - initial_pulse_time;
00111 int expected_pulses = remaining_time / pulse_period;
00112
00113
00114 if (initial_pulse_time > pulse_period) {
00115 expected_pulses += initial_pulse_time / pulse_period;
00116 }
00117
00118
00119
00120 hExpectedNumberOfIslands->Fill(bankname.c_str(), midas_event_number, expected_pulses + 1);
00121 }
00122 else {
00123 hExpectedNumberOfIslands->Fill(bankname.c_str(), midas_event_number, 0);
00124 }
00125 }
00126 return SUCCESS;
00127 }