00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00020
00025
00031
00032
00033 #include <stdio.h>
00034 #include <stdlib.h>
00035 #include <string>
00036 #include <map>
00037 #include <utility>
00038
00039
00040 #include "midas.h"
00041
00042
00043 #include <TH1.h>
00044 #include <TH2.h>
00045 #include <TDirectory.h>
00046
00047
00048 #include "TOctalFADCIsland.h"
00049 #include "TOctalFADCBankReader.h"
00050 #include "TGlobalData.h"
00051 #include "TSetupData.h"
00052
00053 using std::string;
00054 using std::map;
00055 using std::vector;
00056 using std::pair;
00057
00058
00059 INT MDQ_FADCPacketLoss_init(void);
00060 INT MDQ_FADCPacketLoss_BOR(INT run_number);
00061 INT MDQ_FADCPacketLoss_EOR(INT run_number);
00062 INT MDQ_FADCPacketLoss(EVENT_HEADER*, void*);
00063
00064 extern HNDLE hDB;
00065 extern TGlobalData* gData;
00066 extern TSetupData* gSetup;
00067
00068 static TH1* hDQ_FADCPacketLoss_Total;
00069 static TH1* hDQ_FADCPacketLoss_Fraction;
00070 static TH2* hDQ_FADCPacketLoss_TotalByEvent;
00071 static int n_total_midas_events;
00072
00073
00074 ANA_MODULE MDQ_FADCPacketLoss_module =
00075 {
00076 "MDQ_FADCPacketLoss",
00077 "Andrew Edmonds",
00078 MDQ_FADCPacketLoss,
00079 MDQ_FADCPacketLoss_BOR,
00080 MDQ_FADCPacketLoss_EOR,
00081 MDQ_FADCPacketLoss_init,
00082 NULL,
00083 NULL,
00084 0,
00085 NULL,
00086 };
00087
00090 INT MDQ_FADCPacketLoss_init()
00091 {
00092
00093 if (!gDirectory->Cd("DataQuality_LowLevel")) {
00094
00095 std::string dir_name("DataQuality_LowLevel/");
00096 gDirectory->mkdir(dir_name.c_str());
00097 gDirectory->Cd(dir_name.c_str());
00098 }
00099
00100
00101 char key_name[80];
00102 int size,run_number;
00103 sprintf(key_name, "Runinfo/Run number");
00104 size=sizeof(int);
00105 db_get_value(hDB,0,key_name, &run_number, &size, TID_INT,1);
00106
00107
00108 hDQ_FADCPacketLoss_Total = new TH1F(
00109 "hDQ_FADCPacketLoss_Total",
00110 Form("Total number of MIDAS Events with FADC packet loss per board, run %d",run_number),
00111 4,128, 132);
00112 hDQ_FADCPacketLoss_Total->SetBit(TH1::kCanRebin);
00113 hDQ_FADCPacketLoss_Total->GetXaxis()->SetTitle("FADC Board Number");
00114 hDQ_FADCPacketLoss_Total->GetYaxis()->SetTitle("Number of Events with lost packets");
00115
00116 hDQ_FADCPacketLoss_Fraction = new TH1F(
00117 "hDQ_FADCPacketLoss_Fraction",
00118 Form("Fraction of MIDAS Events with FADC packet loss per board, run %d",run_number),
00119 4,128, 132);
00120 hDQ_FADCPacketLoss_Fraction->SetBit(TH1::kCanRebin);
00121 hDQ_FADCPacketLoss_Fraction->GetXaxis()->SetTitle("FADC Board Number");
00122 hDQ_FADCPacketLoss_Fraction->GetYaxis()->SetTitle("Fraction of Events with lost packets");
00123
00124 hDQ_FADCPacketLoss_TotalByEvent = new TH2F(
00125 "hDQ_FADCPacketLoss_TotalByEvent",
00126 Form("FADC packet losses by board and event, run %d",run_number),
00127 4,128, 132,5000,0,5000);
00128 hDQ_FADCPacketLoss_TotalByEvent->SetBit(TH2::kCanRebin);
00129 hDQ_FADCPacketLoss_TotalByEvent->GetXaxis()->SetTitle("FADC Board Number");
00130 hDQ_FADCPacketLoss_TotalByEvent->GetYaxis()->SetTitle("MIDAS event");
00131
00132 gDirectory->Cd("/MidasHists/");
00133
00134 return SUCCESS;
00135 }
00136
00140 INT MDQ_FADCPacketLoss_BOR(INT run_number)
00141 {
00142 n_total_midas_events = 1;
00143
00144 return SUCCESS;
00145 }
00146
00150 INT MDQ_FADCPacketLoss(EVENT_HEADER *pheader, void *pevent)
00151 {
00152
00153 int midas_event_number = pheader->serial_number;
00154
00155
00156 unsigned int* raw;
00157 int bankSize = bk_locate(pevent,"NLSS",&raw);
00158
00159 int board_number = 0;
00160 int packet_lost = 0;
00161 int n_packets_lost = 0;
00162
00163 bool Boards[256];
00164 for(int i=0; i<256; ++i) Boards[i] = false;
00165
00166 for (int i = 0; i < bankSize; i+=2) {
00167 board_number = *(raw+i);
00168
00169
00170
00171 packet_lost = *(raw+i+1);
00172
00173 if(*(raw+i) >= 0 && *(raw+i) < 255) Boards[i] = true;
00174
00175 n_packets_lost++;
00176
00177
00178
00179 hDQ_FADCPacketLoss_Total->Fill(board_number, 1);
00180 hDQ_FADCPacketLoss_Fraction->Fill(board_number, 1);
00181 hDQ_FADCPacketLoss_TotalByEvent->Fill(board_number,midas_event_number, 1);
00182
00183 }
00184
00185 ++n_total_midas_events;
00186
00187 return SUCCESS;
00188 }
00189
00190 INT MDQ_FADCPacketLoss_EOR(INT run_number)
00191 {
00192
00193 hDQ_FADCPacketLoss_Fraction->Scale(1.0 / n_total_midas_events);
00194
00195 return SUCCESS;
00196 }
00197