#include "honlinemonhist.h" #include "honlinehistarray.h" #include "honlinetrendhist.h" #include "hcategory.h" #include "hitofdef.h" #include "hitofraw.h" #include "hitofcal.h" #include "hcategory.h" #include "rpcdef.h" #include "hrpcraw.h" #include "tofdef.h" #include "htofraw.h" #include "helpers.h" #include "TList.h" #include "TString.h" #include #include using namespace std; map innertofMap; struct itofP { HOnlineMonHistAddon *hInnerTofhits_raw = 0; HOnlineMonHistAddon *hInnerTofhits_withSum_raw = 0; HOnlineMonHistAddon *hInnerTofmult_raw = 0; HOnlineMonHistAddon *hInnerTofmult_temp_raw = 0; HOnlineMonHistAddon *hInnerTofmult_trend_raw = 0; HOnlineMonHistAddon *hInnerTofmultpad_raw = 0; HOnlineMonHistAddon *hInnerTof_TofRpcMultiplicity = 0; HOnlineMonHistAddon *hInnerTof_SimpMult = 0; HOnlineMonHistAddon *hInnerTof_SimpFired = 0; HOnlineMonHistAddon *hInnerTof_SimpTime = 0; HOnlineMonHistAddon *hInnerTof_SimpWidth = 0; HOnlineMonHistAddon *hTrigger_iTof_secMult = 0; HOnlineMonHistAddon *hTrigger_TofRpc_secMult = 0; HOnlineMonHistAddon *hTrigger_iTofTofRpc_secMult = 0; }; itofP *pIT; Bool_t createHistInnerTof(TList &histpool) { mapHolder::setMap(innertofMap); // make innertofMap currentMap //####################### USER CODE ############################################## // define monitoring hists const Char_t *hists[] = { "FORMAT#array TYPE#1F NAME#hInnerTofhits_raw TITLE#InnerTof_Raw_Hits ACTIVE#1 RESET#1 REFRESH#5000 BIN#36:0.0:36.0:0:0.0:0.0 SIZE#1:6 AXIS#cells: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#array TYPE#1F NAME#hInnerTofhits_withSum_raw TITLE#InnerTof_Raw_Hits_withSum ACTIVE#1 RESET#1 REFRESH#5000 BIN#48:0.0:48.0:0:0.0:0.0 SIZE#1:6 AXIS#cells: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#hInnerTofmult_raw TITLE#InnerTof_multVSsec_raw ACTIVE#1 RESET#1 REFRESH#5000 BIN#36:0.0:36.0:6:0.:6. SIZE#0:0 AXIS#pad*12+cell:sector:no DIR#no OPT#lego2 STATS#0 LOG#0:0:0 GRID#1:1 LINE#0:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#2F NAME#hInnerTofmult_temp_raw TITLE#InnerTof_multVSsec_raw ACTIVE#1 RESET#0 REFRESH#5000 BIN#36:0.0:36.0:6:0.:6. SIZE#0:0 AXIS#pad*12+cell:sector:no DIR#no OPT#colz STATS#0 LOG#0:0:0 GRID#1:1 LINE#0:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#trendarray TYPE#1F NAME#hInnerTofmult_trend_raw TITLE#InnerTof_MultTrend_raw ACTIVE#1 RESET#0 REFRESH#5000 BIN#50:0.0:50.0:0:0.:0. SIZE#1:6 AXIS#trend:multiplicity:no DIR#no OPT#l STATS#0 LOG#0:0:0 GRID#0:1 LINE#1:0 FILL#0:0 MARKER#1:20:0.5 RANGE#-99:-99" ,"FORMAT#mon TYPE#2F NAME#hInnerTofmultpad_raw TITLE#InnerTof_pad_multiplicity ACTIVE#1 RESET#1 REFRESH#5000 BIN#18:0.:18.0:12:0.5:12.5 SIZE#0:0 AXIS#pad:multiplicity:counts DIR#no OPT#COLZ STATS#0 LOG#0:0:0 GRID#1:1 LINE#0:0 FILL#30:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#2F NAME#hInnerTof_TofRpcMultiplicity TITLE#InnerTof_TofRpcMultiplicity ACTIVE#1 RESET#1 REFRESH#10000 BIN#40:0:40:80:0:80 SIZE#0:0 AXIS#InnerTOF_mult:TOF+RPC_mult:no DIR#no OPT#colz STATS#0 LOG#0:0:0 GRID#1:1 LINE#0:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#array TYPE#1F NAME#hInnerTof_SimpMult TITLE#InnerTof_SimpMult ACTIVE#1 RESET#1 REFRESH#5000 BIN#16:0.0:16.0:0:0.0:0.0 SIZE#6:3 AXIS#channel: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#array TYPE#1F NAME#hInnerTof_SimpFired TITLE#InnerTof_SimpFired ACTIVE#1 RESET#1 REFRESH#5000 BIN#15:0.0:15.0:0:0.0:0.0 SIZE#6:3 AXIS#channel: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#array TYPE#2F NAME#hInnerTof_SimpTime TITLE#InnerTof_SimpTime ACTIVE#1 RESET#1 REFRESH#5000 BIN#13:0.0:13.0:200:-650.0:550.0 SIZE#6:3 AXIS#channel:time:no DIR#no OPT#colz STATS#0 LOG#0:0:0 GRID#1:1 LINE#0:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#array TYPE#2F NAME#hInnerTof_SimpWidth TITLE#InnerTof_SimpWidth ACTIVE#1 RESET#1 REFRESH#5000 BIN#13:0.0:13.0:200:0.0:50.0 SIZE#6:3 AXIS#channel:width:no DIR#no OPT#colz STATS#0 LOG#0:0:0 GRID#1:1 LINE#0:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#array TYPE#1F NAME#hTrigger_iTof_secMult TITLE#Trigger_iTof_secMult ACTIVE#1 RESET#1 REFRESH#5000 BIN#7:0:7:0:0:0 SIZE#1:4 AXIS#InnerTof_SectorMult: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#array TYPE#1F NAME#hTrigger_TofRpc_secMult TITLE#Trigger_TofRpc_secMult ACTIVE#1 RESET#1 REFRESH#5000 BIN#7:0:7:0:0:0 SIZE#1:4 AXIS#TofRpc_SectorMult:counts:no DIR#no OPT#no STATS#0 LOG#0:0:0 GRID#1:1 LINE#4:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#array TYPE#1F NAME#hTrigger_iTofTofRpc_secMult TITLE#Trigger_iTofTofRpc_secMult ACTIVE#1 RESET#1 REFRESH#5000 BIN#7:0:7:0:0:0 SIZE#1:4 AXIS#iTof&&(Tof||Rpc)_SectorMult:counts:no DIR#no OPT#no STATS#0 LOG#0:0:0 GRID#1:1 LINE#2:0 FILL#0:0 MARKER#0:0:0 RANGE#-99:-99" }; //############################################################################### Int_t colorsSector[6] = {2, 4, 6, 8, 38, 46}; // create hists and add them to the pool mapHolder::createHists(sizeof(hists) / sizeof(Char_t *), hists, histpool); pIT = new itofP(); pIT->hInnerTofhits_raw = get("hInnerTofhits_raw"); pIT->hInnerTofhits_withSum_raw = get("hInnerTofhits_withSum_raw"); pIT->hInnerTofmult_raw = get("hInnerTofmult_raw"); pIT->hInnerTofmult_temp_raw = get("hInnerTofmult_temp_raw"); pIT->hInnerTofmult_trend_raw = get("hInnerTofmult_trend_raw"); pIT->hInnerTofmultpad_raw = get("hInnerTofmultpad_raw"); pIT->hInnerTof_TofRpcMultiplicity = get("hInnerTof_TofRpcMultiplicity"); pIT->hInnerTof_SimpMult = get("hInnerTof_SimpMult"); pIT->hInnerTof_SimpFired = get("hInnerTof_SimpFired"); pIT->hInnerTof_SimpTime = get("hInnerTof_SimpTime"); pIT->hInnerTof_SimpWidth = get("hInnerTof_SimpWidth"); pIT->hTrigger_iTof_secMult = get("hTrigger_iTof_secMult"); pIT->hTrigger_TofRpc_secMult = get("hTrigger_TofRpc_secMult"); pIT->hTrigger_iTofTofRpc_secMult = get("hTrigger_iTofTofRpc_secMult"); HOnlineMonHistAddon *addon = 0; if ((addon = pIT->hInnerTofhits_raw)) { for (Int_t s = 0; s < 6; s++) { addon->getP(0, s)->SetLineColor(colorsSector[s]); } } if ((addon = pIT->hInnerTofhits_withSum_raw)) { for (Int_t s = 0; s < 6; s++) { addon->getP(0, s)->SetLineColor(colorsSector[s]); } } if ((addon = pIT->hInnerTofmult_trend_raw)) { for (Int_t s = 0; s < 6; s++) { addon->getP(0, s)->SetLineColor(colorsSector[s]); addon->getP(0, s)->SetMarkerColor(colorsSector[s]); } } if ((addon = pIT->hInnerTof_SimpMult)) { for (Int_t s = 0; s < 6; s++) { for (Int_t p = 0; p < 3; p++) { addon->getP(s, p)->SetLineColor(colorsSector[p]); addon->getP(s, p)->SetMarkerColor(colorsSector[p]); } } } if ((addon = pIT->hInnerTof_SimpFired)) { for (Int_t s = 0; s < 6; s++) { for (Int_t p = 0; p < 3; p++) { addon->getP(s, p)->SetLineColor(colorsSector[p]); addon->getP(s, p)->SetMarkerColor(colorsSector[p]); } } } if(( addon = pIT->hTrigger_iTofTofRpc_secMult )){ for(Int_t i = 0; i < 4; i++){ addon->getP(0,i)->SetLineColor(colorsSector[i]); addon->getP(0,i)->SetLineWidth(2); } } HOnlineMonStack *stack; for (Int_t s = 0; s < 6; s++) { stack = new HOnlineMonStack(Form("hInnerTofStack_SimpMult[%i]", s)); for (Int_t p = 0; p < 3; p++) { stack->addToStack(pIT->hInnerTof_SimpMult->getP(s, p), Form("LINE#%i:2 MARKER#%i:20:0.7 OPT#no",colorsSector[p],colorsSector[p])); } mapHolder::addStack(stack, histpool); } for (Int_t s = 0; s < 6; s++) { stack = new HOnlineMonStack(Form("hInnerTofStack_SimpFired[%i]", s)); for (Int_t p = 0; p < 3; p++) { stack->addToStack(pIT->hInnerTof_SimpFired->getP(s, p), Form("LINE#%i:2 MARKER#%i:20:0.7 OPT#no",colorsSector[p],colorsSector[p])); } mapHolder::addStack(stack, histpool); } return kTRUE; } Bool_t fillHistInnerTof(Int_t evtCt) { mapHolder::setMap(innertofMap); // make innertofMap currentMap //####################### USER CODE ############################################## // Fill Histograms // categorys to loop HCategory *tofRawCat = gHades->getCurrentEvent()->getCategory(catTofRaw); HCategory *rpcRawCat = gHades->getCurrentEvent()->getCategory(catRpcRaw); HCategory *itofRawCat = gHades->getCurrentEvent()->getCategory(catiTofRaw); // for Trigger check: Int_t multRpcSec[6] = {0, 0, 0, 0, 0, 0}; Int_t multTofSec[6] = {0, 0, 0, 0, 0, 0}; Int_t multInnerTofSec[6] = {0, 0, 0, 0, 0, 0}; Int_t secMult_TofRpc = 0, secMult_iTof = 0, fullSecMult = 0; Bool_t latchPT1 = kFALSE; Bool_t latchPT2 = kFALSE; Bool_t latchPT3 = kFALSE; // Latch Info Int_t nLatchWord = gHades->getCurrentEvent()->getHeader()->getTBit(); for(Int_t i=0;i<16;i++){ if(( nLatchWord & (1<getEntries(); i++) { raw = (HRpcRaw *)rpcRawCat->getObject(i); if (raw) { lTime = raw->getLeftTime(); rTime = raw->getRightTime(); sector = raw->getSector(); if (raw->getCell() < 32 && rTime > 0 && rTime < 39900){ multRpc++; multRpcSec[sector]++; } if (raw->getCell() < 32 && lTime > 0 && lTime < 39900){ multRpc++; multRpcSec[sector]++; } } } } // TOF data Int_t multTof = 0; if (tofRawCat) { HTofRaw *raw; Float_t rtime = -1, ltime = -1; Int_t sector = -1; for (Int_t i = 0; i < tofRawCat->getEntries(); i++) { raw = (HTofRaw *)tofRawCat->getObject(i); if (raw) { rtime = raw->getRightTime(); ltime = raw->getLeftTime(); sector = raw->getSector(); if (rtime > 10){ multTof++; multTofSec[sector]++; } if (ltime > 10){ multTof++; multTofSec[sector]++; } } } // end raw loop } // InnerTof if (itofRawCat) { HiTofRaw *itofRaw = NULL; Int_t mult = 0; Int_t multPad[18] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; for (Int_t j = 0; j < itofRawCat->getEntries(); j++) { itofRaw = (HiTofRaw *)itofRawCat->getObject(j); if (!itofRaw) continue; Int_t sector = itofRaw->getSector(); Int_t pad = itofRaw->getCell(); Float_t timeSiPM[15], widthSiPM[15]; for (Int_t ich = 0; ich < 15; ich++) { timeSiPM[ich] = itofRaw->getTime(ich); widthSiPM[ich] = itofRaw->getWidth(ich); if (ich < 12) { // to leave out SUM channels if (timeSiPM[ich] > -1.e6) { mult++; multPad[sector * 3 + pad]++; multInnerTofSec[sector]++; if (pIT->hInnerTofhits_raw) pIT->hInnerTofhits_raw->fill(0, sector, ich); if (pIT->hInnerTofmult_raw) pIT->hInnerTofmult_raw->getP()->Fill(ich, sector); if (pIT->hInnerTofmult_temp_raw) pIT->hInnerTofmult_temp_raw->getP()->Fill(ich, sector); if(pIT->hInnerTof_SimpMult) pIT->hInnerTof_SimpMult->getP(sector,pad)->Fill(ich); if(pIT->hInnerTof_SimpTime) pIT->hInnerTof_SimpTime->getP(sector,pad)->Fill(ich,timeSiPM[ich]); } if (widthSiPM[ich] > -1.e6) { if(pIT->hInnerTof_SimpWidth) pIT->hInnerTof_SimpWidth->getP(sector,pad)->Fill(ich,widthSiPM[ich]); } } else { if (timeSiPM[ich] > -1.e6) { if (pIT->hInnerTofhits_withSum_raw) pIT->hInnerTofhits_withSum_raw->fill(0, sector, pad * 16 + ich); } } } } //Trigger check for(Int_t sec=0; sec < 6; sec++){ if(multInnerTofSec[sec]) secMult_iTof++; } if(pIT->hTrigger_iTof_secMult){ pIT->hTrigger_iTof_secMult->getP(0,0)->Fill(secMult_iTof); if(latchPT1) pIT->hTrigger_iTof_secMult->getP(0,1)->Fill(secMult_iTof); if(latchPT2) pIT->hTrigger_iTof_secMult->getP(0,1)->Fill(secMult_iTof); if(latchPT3) pIT->hTrigger_iTof_secMult->getP(0,1)->Fill(secMult_iTof); } if (pIT->hInnerTofmultpad_raw) { for (Int_t ipad = 0; ipad < 18; ipad++) pIT->hInnerTofmultpad_raw->getP()->Fill(ipad, multPad[ipad]); } if (pIT->hInnerTof_SimpFired) { for(Int_t isec = 0; isec < 6; isec++){ for (Int_t ipad = 0; ipad < 3; ipad++){ pIT->hInnerTof_SimpFired->getP(isec,ipad)->Fill(multPad[isec*3+ipad]); } } } //---------------Trend hists raw ---------------------------------- if (pIT->hInnerTofmult_temp_raw && pIT->hInnerTofmult_trend_raw && evtCt % pIT->hInnerTofmult_trend_raw->getRefreshRate() == 0 && evtCt > 0) { for (Int_t sec = 0; sec < 6; sec++) { pIT->hInnerTofmult_trend_raw->fill(0, sec, ((TH2 *)(pIT->hInnerTofmult_temp_raw->getP()))->Integral(1, 36, sec + 1, sec + 1) / ((Float_t)pIT->hInnerTofmult_trend_raw->getRefreshRate())); } pIT->hInnerTofmult_temp_raw->getP()->Reset(); } //----------------------------------------------------------------- // correlation to Tof+Rpc if (pIT->hInnerTof_TofRpcMultiplicity) pIT->hInnerTof_TofRpcMultiplicity->getP()->Fill(mult, multTof / 2 + multRpc / 2); } //Trigger check if(tofRawCat && rpcRawCat){ for(Int_t sec=0; sec < 6; sec++){ multTofSec[sec] /= 2; multRpcSec[sec] /= 2; if(multTofSec[sec] || multRpcSec[sec]) secMult_TofRpc++; } if(pIT->hTrigger_TofRpc_secMult){ pIT->hTrigger_TofRpc_secMult->getP(0,0)->Fill(secMult_TofRpc); if(latchPT1) pIT->hTrigger_TofRpc_secMult->getP(0,1)->Fill(secMult_TofRpc); if(latchPT2) pIT->hTrigger_TofRpc_secMult->getP(0,2)->Fill(secMult_TofRpc); if(latchPT3) pIT->hTrigger_TofRpc_secMult->getP(0,3)->Fill(secMult_TofRpc); } if(itofRawCat){ for(Int_t sec=0; sec < 6; sec++){ if(multInnerTofSec[sec] && (multTofSec[sec] || multRpcSec[sec])) fullSecMult++; } if(pIT->hTrigger_iTofTofRpc_secMult){ pIT->hTrigger_iTofTofRpc_secMult->getP(0,0)->Fill(fullSecMult); if(latchPT1) pIT->hTrigger_iTofTofRpc_secMult->getP(0,1)->Fill(fullSecMult); if(latchPT2) pIT->hTrigger_iTofTofRpc_secMult->getP(0,2)->Fill(fullSecMult); if(latchPT3) pIT->hTrigger_iTofTofRpc_secMult->getP(0,3)->Fill(fullSecMult); } } } //############################################################################### // do reset if needed mapHolder::resetHists(evtCt); return kTRUE; }