00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include <stdio.h>
00013 #include <stdlib.h>
00014 #include <string>
00015 #include <map>
00016 #include <utility>
00017
00018
00019 #include "midas.h"
00020
00021
00022 #include <TH1.h>
00023 #include <TH2.h>
00024 #include <TDirectory.h>
00025
00026
00027 #include "TGlobalData.h"
00028 #include "TSetupData.h"
00029
00030 using std::string;
00031 using std::map;
00032 using std::vector;
00033 using std::pair;
00034
00035
00036 INT MDQ_MuPC_init(void);
00037 INT MDQ_MuPC_BOR(INT run_number);
00038 INT MDQ_MuPC_EOR(INT run_number);
00039 INT MDQ_MuPC(EVENT_HEADER*, void*);
00040
00041 extern HNDLE hDB;
00042 extern TGlobalData* gData;
00043 extern TSetupData* gSetup;
00044
00045 static TH2* hDQ_MuPC_XvsT;
00046 static TH2* hDQ_MuPC_YvsT;
00047 static TH2* hDQ_MuPC_XvsY_Total;
00048 static TH2* hDQ_MuPC_XvsY_ExclHotWires;
00049 static TH2* hDQ_MuPC_XvsY_Fraction;
00050 static int n_total_clusters;
00051
00052 ANA_MODULE MDQ_MuPC_module =
00053 {
00054 "MDQ_MuPC",
00055 "Joe Grange",
00056 MDQ_MuPC,
00057 MDQ_MuPC_BOR,
00058 MDQ_MuPC_EOR,
00059 MDQ_MuPC_init,
00060 NULL,
00061 NULL,
00062 0,
00063 NULL,
00064 };
00065
00068 INT MDQ_MuPC_init()
00069 {
00070
00071 if (!gDirectory->Cd("DataQuality_LowLevel")) {
00072
00073 std::string dir_name("DataQuality_LowLevel/");
00074 gDirectory->mkdir(dir_name.c_str());
00075 gDirectory->Cd(dir_name.c_str());
00076 }
00077
00078
00079 char key_name[80];
00080 int size,run_number;
00081 sprintf(key_name, "Runinfo/Run number");
00082 size=sizeof(int);
00083 db_get_value(hDB,0,key_name, &run_number, &size, TID_INT,1);
00084
00085
00086 hDQ_MuPC_XvsT = new TH2F(
00087 "hDQ_MuPC_XvsT",
00088 Form("X wire vs MIDAS block time, run %d",run_number),
00089 1000,-10000000, 120000000, 24, 0.5, (24+0.5));
00090
00091
00092 hDQ_MuPC_XvsT->GetXaxis()->SetTitle("time (ns)");
00093 hDQ_MuPC_XvsT->GetXaxis()->CenterTitle(1);
00094 hDQ_MuPC_XvsT->GetYaxis()->SetTitle("X wire hit");
00095 hDQ_MuPC_XvsT->GetYaxis()->CenterTitle(1);
00096
00097 hDQ_MuPC_YvsT = new TH2F(
00098 "hDQ_MuPC_YvsT",
00099 Form("X wire vs MIDAS block time, run %d",run_number),
00100 1000,-10000000, 120000000, 24, 0.5, (24+0.5));
00101
00102
00103 hDQ_MuPC_YvsT->GetXaxis()->SetTitle("time (ns)");
00104 hDQ_MuPC_YvsT->GetXaxis()->CenterTitle(1);
00105 hDQ_MuPC_YvsT->GetYaxis()->SetTitle("Y wire hit");
00106 hDQ_MuPC_YvsT->GetYaxis()->CenterTitle(1);
00107
00108 hDQ_MuPC_XvsY_Total = new TH2F(
00109 "hDQ_MuPC_XvsY_Total",
00110 Form("X wire vs Y wire, each cluster and run %d",run_number),
00111 24, 0.5, (24+0.5), 24, 0.5, (24+0.5));
00112
00113 hDQ_MuPC_XvsY_Total->GetXaxis()->SetTitle("X wire hit");
00114 hDQ_MuPC_XvsY_Total->GetXaxis()->CenterTitle(1);
00115 hDQ_MuPC_XvsY_Total->GetYaxis()->SetTitle("Y wire hit");
00116 hDQ_MuPC_XvsY_Total->GetYaxis()->CenterTitle(1);
00117
00118 hDQ_MuPC_XvsY_ExclHotWires = new TH2F(
00119 "hDQ_MuPC_XvsY_ExclHotWires",
00120 Form("X wire vs Y wire, each cluster and run %d",run_number),
00121 24, 0.5, (24+0.5), 24, 0.5, (24+0.5));
00122
00123 hDQ_MuPC_XvsY_ExclHotWires->GetXaxis()->SetTitle("X wire hit");
00124 hDQ_MuPC_XvsY_ExclHotWires->GetXaxis()->CenterTitle(1);
00125 hDQ_MuPC_XvsY_ExclHotWires->GetYaxis()->SetTitle("Y wire hit");
00126 hDQ_MuPC_XvsY_ExclHotWires->GetYaxis()->CenterTitle(1);
00127
00128 hDQ_MuPC_XvsY_Fraction = new TH2F(
00129 "hDQ_MuPC_XvsY_Fraction",
00130 Form("Fraction of cluster position in X wire vs Y wire, run %d",run_number),
00131 24, 0.5, (24+0.5), 24, 0.5, (24+0.5));
00132
00133
00134 hDQ_MuPC_XvsY_Fraction->GetXaxis()->SetTitle("X wire hit");
00135 hDQ_MuPC_XvsY_Fraction->GetXaxis()->CenterTitle(1);
00136 hDQ_MuPC_XvsY_Fraction->GetYaxis()->SetTitle("Y wire hit");
00137 hDQ_MuPC_XvsY_Fraction->GetYaxis()->CenterTitle(1);
00138
00139 gDirectory->Cd("/MidasHists/");
00140
00141 return SUCCESS;
00142 }
00143
00147 INT MDQ_MuPC_BOR(INT run_number)
00148 {
00149
00150
00151 return SUCCESS;
00152 }
00153
00157 INT MDQ_MuPC(EVENT_HEADER *pheader, void *pevent)
00158 {
00159
00160 int midas_event_number = pheader->serial_number;
00161
00162
00163 double* raw;
00164
00165 int bankSize = bk_locate(pevent,"MPC1",&raw);
00166
00167 bankSize = bankSize*sizeof(DWORD)/sizeof(double);
00168
00169 double timestamp = 0.;
00170 double wire_number_x = 0.;
00171 double wire_number_y = 0.;
00172
00173 for (int i=0; i<bankSize; i+=3){
00174
00175 wire_number_x = 0.;
00176 wire_number_x = (double)*(raw+i);
00177
00178 wire_number_y = 0.;
00179 wire_number_y = (double)*(raw+i+1);
00180
00181 timestamp = 0.;
00182 timestamp = (double)*(raw+i+2);
00183
00184 if (wire_number_y>1 && (wire_number_y<22)) hDQ_MuPC_XvsY_ExclHotWires->Fill(wire_number_x,wire_number_y);
00185
00186 hDQ_MuPC_XvsY_Total->Fill(wire_number_x,wire_number_y);
00187 hDQ_MuPC_XvsY_Fraction->Fill(wire_number_x,wire_number_y);
00188 hDQ_MuPC_XvsT->Fill(timestamp,wire_number_x);
00189 hDQ_MuPC_YvsT->Fill(timestamp,wire_number_y);
00190
00191
00192
00193 n_total_clusters++;
00194
00195 }
00196
00197 return SUCCESS;
00198 }
00199
00200 INT MDQ_MuPC_EOR(INT run_number)
00201 {
00202
00203 hDQ_MuPC_XvsY_Fraction->Scale(1.0 / (double)n_total_clusters);
00204
00205 return SUCCESS;
00206 }
00207