#include "honlinemonhist.h" #include "honlinehistarray.h" #include "honlinetrendhist.h" #include "hcategory.h" #include "hstartdef.h" #include "hstart2raw.h" #include "hstart2cal.h" #include "helpers.h" #include "TList.h" #include "TString.h" #include #include using namespace std; const Float_t timeCutHodo = 80.; map < TString , HOnlineMonHistAddon* > hodoMap; struct hodoP { HOnlineMonHistAddon* hHodoStrips = 0; HOnlineMonHistAddon* hHodoXY = 0; HOnlineMonHistAddon* hHodoSt1mult = 0; HOnlineMonHistAddon* hHodoSt2mult = 0; HOnlineMonHistAddon* hHodoRawTime = 0; HOnlineMonHistAddon* hHodoCalTime = 0; }; hodoP* pH; Bool_t createHistHodo(TList& histpool){ mapHolder::setMap(hodoMap); // make wallMap currentMap //####################### USER CODE ############################################## // define monitoring hists const Char_t* hists[] = { "FORMAT#mon TYPE#1F NAME#hHodoStrips TITLE#Raw_strips ACTIVE#1 RESET#1 REFRESH#10000 BIN#64:0:64:0:0.0:0.0 SIZE#0:0 AXIS#(Start2Module-3)*16+strip:counts:no DIR#no OPT#no STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#2F NAME#hHodoXY TITLE#XY_correlation ACTIVE#1 RESET#1 REFRESH#10000 BIN#16:0:16:16:0:16 SIZE#0:0 AXIS#stripX:stripY:no DIR#no OPT#colz STATS#0 LOG#0:0:1 GRID#1:1 LINE#0:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#1F NAME#hHodoSt1mult TITLE#Veto_Station1_mult ACTIVE#1 RESET#1 REFRESH#10000 BIN#16:0:16:0:0.0:0.0 SIZE#0:0 AXIS#multiplicity:counts:no DIR#no OPT#no STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#1F NAME#hHodoSt2mult TITLE#Veto_Station2_mult ACTIVE#1 RESET#1 REFRESH#10000 BIN#16:0:16.:0:0.0:0.0 SIZE#0:0 AXIS#multiplicity:counts:no DIR#no OPT#no STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#2F NAME#hHodoRawTime TITLE#RawTime_vs_strip ACTIVE#1 RESET#1 REFRESH#10000 BIN#64:0:64:400:-1500.0:500.0 SIZE#0:0 AXIS#(Start2Module-3)*16+strip:time_[channel]:no DIR#no OPT#colz STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#2F NAME#hHodoCalTime TITLE#CalTime_vs_strip ACTIVE#1 RESET#1 REFRESH#10000 BIN#64:0:64:400:-1500.0:500.0 SIZE#0:0 AXIS#(Start2Module-3)*16+strip:time_[channel]:no DIR#no OPT#colz STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" }; //############################################################################### // create hists and add them to the pool mapHolder::createHists(sizeof(hists)/sizeof(Char_t*),hists,histpool); pH = new hodoP(); pH->hHodoStrips = get("hHodoStrips"); pH->hHodoXY = get("hHodoXY"); pH->hHodoSt1mult = get("hHodoSt1mult"); pH->hHodoSt2mult = get("hHodoSt2mult"); pH->hHodoRawTime = get("hHodoRawTime"); pH->hHodoCalTime = get("hHodoCalTime"); return kTRUE; } Bool_t fillHistHodo(Int_t evtCt){ mapHolder::setMap(hodoMap); // make wallMap currentMap //####################### USER CODE ############################################## // Fill Histograms // categorys to loop HCategory* startRawCat = gHades->getCurrentEvent()->getCategory(catStart2Raw); HCategory* startCalCat = gHades->getCurrentEvent()->getCategory(catStart2Cal); if (startRawCat) { HStart2Raw *startRaw_I = NULL; HStart2Raw *startRaw_II = NULL; Int_t multSt1 = 0; Int_t multSt2 = 0; vector checkedStripX, checkedStripY; vector checkedTimeX, checkedTimeY; for (Int_t j = 0; j < startRawCat->getEntries(); j++) { startRaw_I = (HStart2Raw *)startRawCat->getObject(j); if (!startRaw_I) continue; Int_t module_I = startRaw_I->getModule(); Int_t strip_I = startRaw_I->getStrip(); Float_t time1_I = startRaw_I->getTime(1); Bool_t firstHodoX = false; Bool_t firstHodoY = false; if (module_I == 5 || module_I == 6) { firstHodoX = true; firstHodoY = false; } else if (module_I == 3 || module_I == 4) { firstHodoX = false; firstHodoY = true; } else continue; if (pH->hHodoStrips) pH->hHodoStrips->getP()->Fill((module_I - 3) * 16 + strip_I); if (pH->hHodoRawTime) pH->hHodoRawTime->getP()->Fill((module_I - 3) * 16 + strip_I, time1_I); for (Int_t k = j + 1; k < startRawCat->getEntries(); k++) { startRaw_II = (HStart2Raw *)startRawCat->getObject(k); if (!startRaw_II) continue; Int_t module_II = startRaw_II->getModule(); Int_t strip_II = startRaw_II->getStrip(); Float_t time1_II = startRaw_II->getTime(1); Bool_t secondHodoX = false; Bool_t secondHodoY = false; if (module_II == 5 || module_II == 6) { secondHodoX = true; secondHodoY = false; } else if (module_II == 3 || module_II == 4) { secondHodoX = false; secondHodoY = true; } else continue; // look for good Hodo hits if (firstHodoX && secondHodoX && (module_I != module_II) // same station but different side L/R && (strip_I == strip_II) // same scintillator && abs(time1_I - time1_II) < timeCutHodo) { checkedStripX.push_back(strip_I); checkedTimeX.push_back(0.5 * (time1_I + time1_II)); } if (firstHodoY && secondHodoY && (module_I != module_II) // same station but different side L/R && (strip_I == strip_II) // same scintillator && abs(time1_I - time1_II) < timeCutHodo) { checkedStripY.push_back(strip_I); checkedTimeY.push_back(0.5 * (time1_I + time1_II)); } // statition1 (Y) if (firstHodoY && secondHodoY && (module_I != module_II)) { if (strip_I == strip_II) multSt1++; } // statition2 (X) if (firstHodoX && secondHodoX && (module_I != module_II)) { if (strip_I == strip_II) multSt2++; } } } if (pH->hHodoSt1mult) pH->hHodoSt1mult->getP()->Fill(multSt1); if (pH->hHodoSt2mult) pH->hHodoSt2mult->getP()->Fill(multSt2); // HodoXY if (checkedStripX.size() > 0 && checkedStripY.size() > 0) { for (UInt_t ihx = 0; ihx < checkedStripX.size(); ihx++) { for (UInt_t ihy = 0; ihy < checkedStripY.size(); ihy++) { if (abs(checkedTimeX[ihx] - checkedTimeY[ihy]) < timeCutHodo) { if (pH->hHodoXY) pH->hHodoXY->getP()->Fill(checkedStripX[ihx], checkedStripY[ihy]); } } } } } if(startCalCat){ HStart2Cal* startCal = NULL; for(Int_t i = 0; i < startCalCat->getEntries(); i ++){ startCal = (HStart2Cal*) startCalCat->getObject(i); if(!startCal) continue; Int_t module = startCal->getModule(); Int_t strip = startCal->getStrip(); Float_t time1 = startCal->getTime(1); if(module>=3 && module<=6) if(pH->hHodoCalTime) pH->hHodoCalTime->getP() ->Fill( (module-3)*16+strip, time1 ); } } //############################################################################### // do reset if needed mapHolder::resetHists(evtCt); return kTRUE; }