#include "honlinemonhist.h" #include "honlinehistarray.h" #include "honlinetrendhist.h" #include "hcategory.h" #include "rpcdef.h" #include "hrpcraw.h" #include "hcategory.h" #include "tofdef.h" #include "htofraw.h" #include "htofhit.h" #include "helpers.h" #include "TList.h" #include "TString.h" #include #include using namespace std; map < TString , HOnlineMonHistAddon* > tofMap; struct tofP { HOnlineMonHistAddon* hTofhits_raw = 0; HOnlineMonHistAddon* hTofmulttof_raw = 0; HOnlineMonHistAddon* hTofpatternL_raw = 0; HOnlineMonHistAddon* hTofpatternR_raw = 0; HOnlineMonHistAddon* hToftdcL_raw = 0; HOnlineMonHistAddon* hToftdcR_raw = 0; HOnlineMonHistAddon* hTofadcL_raw = 0; HOnlineMonHistAddon* hTofadcR_raw = 0; HOnlineMonHistAddon* hTofmult_raw = 0; HOnlineMonHistAddon* hTofmult_temp_raw = 0; HOnlineMonHistAddon* hTofmult_trend_raw = 0; HOnlineMonHistAddon* hToftdcSum_hit = 0; HOnlineMonHistAddon* hToftdcDiff_hit = 0; HOnlineMonHistAddon* hTofadcSum_hit = 0; HOnlineMonHistAddon* hTofadcPos_hit = 0; HOnlineMonHistAddon* hTofsum_hit = 0; HOnlineMonHistAddon* hToftheta_hit = 0; HOnlineMonHistAddon* hTofphi_hit = 0; HOnlineMonHistAddon* hTofyvsx_hit = 0; HOnlineMonHistAddon* hTofmulttofrpc_raw = 0; HOnlineMonHistAddon* hTof_RpcTMultiplicity = 0; HOnlineMonHistAddon* hTofMultiplicity = 0; HOnlineMonHistAddon* hTof_RpcTofMultiplicity = 0; HOnlineMonHistAddon* hTofpattern_hit = 0; }; tofP* pT; Bool_t createHistTof(TList& histpool){ mapHolder::setMap(tofMap); // make tofMap currentMap //####################### USER CODE ############################################## // define monitoring hists const Char_t* hists[] = { "FORMAT#array TYPE#1F NAME#hTofhits_raw TITLE#Tof_Raw_Hits ACTIVE#1 RESET#1 REFRESH#5000 BIN#100:0.0:100.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#1F NAME#hTofmulttof_raw TITLE#Tof_multiplicity ACTIVE#1 RESET#1 REFRESH#5000 BIN#100:-0.5:99.5: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#30:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#1F NAME#hTofpatternL_raw TITLE#Tof_PatternL ACTIVE#1 RESET#1 REFRESH#5000 BIN#385:0.5:385.5:0:0.0:0.0 SIZE#0:0 AXIS#sec*64+mod*8+cell:counts:no DIR#no OPT#no STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#38:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#1F NAME#hTofpatternR_raw TITLE#Tof_PatternR ACTIVE#1 RESET#1 REFRESH#5000 BIN#385:0.5:385.5:0:0.0:0.0 SIZE#0:0 AXIS#sec*64+mod*8+cell:counts:no DIR#no OPT#no STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#46:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#2F NAME#hToftdcL_raw TITLE#Tof_TdcL ACTIVE#1 RESET#1 REFRESH#5000 BIN#384:0.5:384.5:100:0:1000 SIZE#0:0 AXIS#sec*64+mod*8+cell:TDC_units: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#hToftdcR_raw TITLE#Tof_TdcR ACTIVE#1 RESET#1 REFRESH#5000 BIN#384:0.5:384.5:100:0:1000 SIZE#0:0 AXIS#sec*64+mod*8+cell:TDC_units: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#hTofadcL_raw TITLE#Tof_AdcL ACTIVE#1 RESET#1 REFRESH#5000 BIN#384:0.5:384.5:50:0:500 SIZE#0:0 AXIS#sec*64+mod*8+cell:ADC_units: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#hTofadcR_raw TITLE#Tof_AdcR ACTIVE#1 RESET#1 REFRESH#5000 BIN#384:0.5:384.5:50:0:500 SIZE#0:0 AXIS#sec*64+mod*8+cell:ADC_units: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#hTofmult_raw TITLE#Tof_hits_raw ACTIVE#1 RESET#1 REFRESH#5000 BIN#64:0.0:64.0:6:0.:6. SIZE#0:0 AXIS#module*8+cell:sector:no DIR#no OPT#lego2 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#hTofmult_temp_raw TITLE#Tof_hits_raw ACTIVE#1 RESET#0 REFRESH#5000 BIN#64:0.0:64.0:6:0.:6. SIZE#0:0 AXIS#module*8+cell:sector: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#trendarray TYPE#1F NAME#hTofmult_trend_raw TITLE#Tof_hits_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#hToftdcSum_hit TITLE#Tof_TdcSum ACTIVE#1 RESET#1 REFRESH#5000 BIN#384:0.5:384.5:250:-50:100 SIZE#0:0 AXIS#sec*64+mod*8+cell:TDC_units: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#hToftdcDiff_hit TITLE#Tof_TdcDiff ACTIVE#1 RESET#1 REFRESH#5000 BIN#384:0.5:384.5:250:-5000:5000 SIZE#0:0 AXIS#sec*64+mod*8+cell:TDC_units: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#hTofadcSum_hit TITLE#Tof_AdcSum ACTIVE#1 RESET#1 REFRESH#5000 BIN#384:0.5:384.5:250:0:15 SIZE#0:0 AXIS#sec*64+mod*8+cell:ADC_units: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#hTofadcPos_hit TITLE#Tof_AdcPos ACTIVE#1 RESET#1 REFRESH#5000 BIN#384:0.5:384.5:250:-5000:5000 SIZE#0:0 AXIS#sec*64+mod*8+cell:ADC_units: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#1F NAME#hTofsum_hit TITLE#Tof_Sum ACTIVE#1 RESET#1 REFRESH#5000 BIN#1500:0.0:150.0:0:0.0:0.0 SIZE#0:0 AXIS#time[ns]:counts:no DIR#no OPT#no STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#30:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#1F NAME#hToftheta_hit TITLE#Tof_theta ACTIVE#1 RESET#1 REFRESH#5000 BIN#100:0.0:100.0:0:0.0:0.0 SIZE#0:0 AXIS#theta:counts:no DIR#no OPT#no STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#38:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#1F NAME#hTofphi_hit TITLE#Tof_phi ACTIVE#1 RESET#1 REFRESH#5000 BIN#360:0.0:360.0:0:0.0:0.0 SIZE#0:0 AXIS#phi:counts:no DIR#no OPT#no STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#46:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#mon TYPE#2F NAME#hTofyvsx_hit TITLE#Tof_y_vs_x ACTIVE#1 RESET#1 REFRESH#5000 BIN#200:-3000.0:3000.0:200:-3000.0:3000.0 SIZE#0:0 AXIS#y_[mm]:x_[mm]: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#1F NAME#hTofmulttofrpc_raw TITLE#Tof_Rpc_multiplicity ACTIVE#1 RESET#1 REFRESH#5000 BIN#89:-0.5:88.5: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#30:0 MARKER#0:0:0 RANGE#-99:-99" ,"FORMAT#array TYPE#1F NAME#hTof_RpcTMultiplicity TITLE#hTof_RpcMultiplicity ACTIVE#1 RESET#1 REFRESH#5000 BIN#200:0:250:0:0:0 SIZE#1:4 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#array TYPE#1F NAME#hTofMultiplicity TITLE#hTofMultiplicity ACTIVE#1 RESET#1 REFRESH#5000 BIN#100:0:100:0:0:0 SIZE#1:4 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#array TYPE#1F NAME#hTof_RpcTofMultiplicity TITLE#hTof_RpcTofMultiplicity ACTIVE#1 RESET#1 REFRESH#5000 BIN#250:0:250:0:0:0 SIZE#1:4 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#hTofpattern_hit TITLE#Tof_PatternHit ACTIVE#1 RESET#1 REFRESH#5000 BIN#385:0.5:385.5:0:0.0:0.0 SIZE#0:0 AXIS#sec*64+mod*8+cell:counts:no DIR#no OPT#no STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#30: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); pT = new tofP(); pT->hTofhits_raw = get("hTofhits_raw"); pT->hTofmulttof_raw = get("hTofmulttof_raw"); pT->hTofpatternL_raw = get("hTofpatternL_raw"); pT->hTofpatternR_raw = get("hTofpatternR_raw"); pT->hToftdcL_raw = get("hToftdcL_raw"); pT->hToftdcR_raw = get("hToftdcR_raw"); pT->hTofadcL_raw = get("hTofadcL_raw"); pT->hTofadcR_raw = get("hTofadcR_raw"); pT->hTofmult_raw = get("hTofmult_raw"); pT->hTofmult_temp_raw = get("hTofmult_temp_raw"); pT->hTofmult_trend_raw = get("hTofmult_trend_raw"); pT->hToftdcSum_hit = get("hToftdcSum_hit"); pT->hToftdcDiff_hit = get("hToftdcDiff_hit"); pT->hTofadcSum_hit = get("hTofadcSum_hit"); pT->hTofadcPos_hit = get("hTofadcPos_hit"); pT->hTofsum_hit = get("hTofsum_hit"); pT->hToftheta_hit = get("hToftheta_hit"); pT->hTofphi_hit = get("hTofphi_hit"); pT->hTofyvsx_hit = get("hTofyvsx_hit"); pT->hTofmulttofrpc_raw = get("hTofmulttofrpc_raw"); pT->hTof_RpcTMultiplicity = get("hTof_RpcTMultiplicity"); pT->hTofMultiplicity = get("hTofMultiplicity"); pT->hTof_RpcTofMultiplicity = get("hTof_RpcTofMultiplicity"); pT->hTofpattern_hit = get("hTofpattern_hit"); HOnlineMonHistAddon* addon = 0; if( (addon = pT->hTofhits_raw )) { for(Int_t s = 0; s < 6; s ++){ addon->getP(0,s)->SetLineColor(colorsSector[s]); } } if( (addon = pT->hTofmult_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 = pT->hTof_RpcTMultiplicity)) for(Int_t i = 0; i < 4; i++){ addon->getP(0,i)->SetLineColor(colorsSector[i]); addon->getP(0,i)->SetLineWidth(2); } if((addon = pT->hTofMultiplicity)) for(Int_t i = 0; i < 4; i++){ addon->getP(0,i)->SetLineColor(colorsSector[i]); addon->getP(0,i)->SetLineWidth(2); } if((addon = pT->hTof_RpcTofMultiplicity)) for(Int_t i = 0; i < 4; i++){ addon->getP(0,i)->SetLineColor(colorsSector[i]); addon->getP(0,i)->SetLineWidth(2); } return kTRUE; } Bool_t fillHistTof(Int_t evtCt){ mapHolder::setMap(tofMap); // make tofMap currentMap //####################### USER CODE ############################################## // Fill Histograms // categorys to loop HCategory* tofRawCat = gHades->getCurrentEvent()->getCategory(catTofRaw); HCategory* tofHitCat = gHades->getCurrentEvent()->getCategory(catTofHit); HCategory* rpcRawCat = gHades->getCurrentEvent()->getCategory(catRpcRaw); Int_t nrRpc = 0; Int_t nLatchWord = 0; Bool_t latchRpcTof1 = kFALSE; Bool_t latchRpcTof2 = kFALSE; Bool_t latchRpcTof3 = kFALSE; Bool_t latchWall = kFALSE; // Latch Info 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(); if(raw->getCell()<32 && rTime > 0 && rTime < 39900) nrRpc ++; if(raw->getCell()<32 && lTime > 0 && lTime < 39900) nrRpc ++; } } if(pT->hTof_RpcTMultiplicity) pT->hTof_RpcTMultiplicity ->fill(0,0,(Float_t)nrRpc/2.); if(pT->hTof_RpcTMultiplicity&&latchRpcTof1) pT->hTof_RpcTMultiplicity ->fill(0,1,(Float_t)nrRpc/2.); if(pT->hTof_RpcTMultiplicity&&latchRpcTof2) pT->hTof_RpcTMultiplicity ->fill(0,2,(Float_t)nrRpc/2.); if(pT->hTof_RpcTMultiplicity&&latchRpcTof3) pT->hTof_RpcTMultiplicity ->fill(0,3,(Float_t)nrRpc/2.); } if(tofRawCat){ HTofRaw* raw; Float_t rtime ,ltime ,rcharge ,lcharge ; Int_t s,m,c; Int_t rawMult = 0; for(Int_t i = 0; i < tofRawCat->getEntries(); i ++){ raw = (HTofRaw*)tofRawCat->getObject(i); if(raw){ rtime = raw->getRightTime(); ltime = raw->getLeftTime(); rcharge = raw->getRightCharge(); lcharge = raw->getLeftCharge(); s = raw->getSector(); m = raw->getModule(); c = raw->getCell(); Int_t itof2= (s*64+m*8+c+1); if(pT->hTofhits_raw) pT->hTofhits_raw ->fill(0,s,m*8+c); if(pT->hTofpatternL_raw&<ime>0) pT->hTofpatternL_raw->getP()->Fill(itof2); if(pT->hTofpatternR_raw&&rtime>0) pT->hTofpatternR_raw->getP()->Fill(itof2); if(pT->hToftdcL_raw) pT->hToftdcL_raw ->getP()->Fill(itof2,ltime); if(pT->hToftdcR_raw) pT->hToftdcR_raw ->getP()->Fill(itof2,rtime); if(pT->hTofadcL_raw) pT->hTofadcL_raw ->getP()->Fill(itof2,lcharge); if(pT->hTofadcR_raw) pT->hTofadcR_raw ->getP()->Fill(itof2,rcharge); if(rtime>10) { if(pT->hTofmult_raw) pT->hTofmult_raw ->getP()->Fill(m*8+c,s); if(pT->hTofmult_temp_raw) pT->hTofmult_temp_raw ->getP()->Fill(m*8+c,s); rawMult++; } if(ltime>10) { if(pT->hTofmult_raw) pT->hTofmult_raw ->getP()->Fill(m*8+c,s); if(pT->hTofmult_temp_raw) pT->hTofmult_temp_raw ->getP()->Fill(m*8+c,s); rawMult++; } } } // end raw loop if(pT->hTofMultiplicity) pT->hTofMultiplicity ->fill(0,0,(Float_t)rawMult/2.); if(pT->hTofMultiplicity&&latchRpcTof1) pT->hTofMultiplicity ->fill(0,1,(Float_t)rawMult/2.); if(pT->hTofMultiplicity&&latchRpcTof2) pT->hTofMultiplicity ->fill(0,2,(Float_t)rawMult/2.); if(pT->hTofMultiplicity&&latchRpcTof3) pT->hTofMultiplicity ->fill(0,3,(Float_t)rawMult/2.); if(pT->hTof_RpcTofMultiplicity) pT->hTof_RpcTofMultiplicity ->fill(0,0,(Float_t)rawMult/2.+(Float_t)nrRpc/2.); if(pT->hTof_RpcTofMultiplicity&&latchRpcTof1) pT->hTof_RpcTofMultiplicity ->fill(0,1,(Float_t)rawMult/2.+(Float_t)nrRpc/2.); if(pT->hTof_RpcTofMultiplicity&&latchRpcTof2) pT->hTof_RpcTofMultiplicity ->fill(0,2,(Float_t)rawMult/2.+(Float_t)nrRpc/2.); if(pT->hTof_RpcTofMultiplicity&&latchRpcTof3) pT->hTof_RpcTofMultiplicity ->fill(0,3,(Float_t)rawMult/2.+(Float_t)nrRpc/2.); if(pT->hTofmulttof_raw) pT->hTofmulttof_raw->getP()->Fill(rawMult/2); //---------------Trend hists raw ---------------------------------- if(pT->hTofmult_temp_raw && pT->hTofmult_trend_raw && evtCt%pT->hTofmult_trend_raw->getRefreshRate() == 0 && evtCt > 0){ for(Int_t sec = 0; sec < 6; sec ++){ pT->hTofmult_trend_raw->fill(0,sec,((TH2*)(pT->hTofmult_temp_raw->getP()))->Integral(1,64,sec+1,sec+1)); } pT->hTofmult_temp_raw->getP()->Reset(); } //----------------------------------------------------------------- } if(tofHitCat){ HTofHit* hit; for(Int_t i = 0; i < tofHitCat->getEntries(); i ++){ hit = (HTofHit*)tofHitCat->getObject(i); if(hit){ Int_t s = hit->getSector(); Int_t m = hit->getModule(); Int_t c = hit->getCell(); Float_t xpos = hit->getXpos(); Float_t tof = hit->getTof(); Float_t Edep = hit->getEdep(); Float_t xposAdc = hit->getXposAdc(); Int_t Adcflag = hit->getAdcFlag(); Float_t dist = 0; Float_t theta = 0; Float_t phi = 0; Float_t lab_x = 0; Float_t lab_y = 0; Float_t lab_z = 0; hit->getDistance(dist); hit->getTheta(theta); hit->getPhi(phi); hit->getXYZLab(lab_x,lab_y,lab_z); Int_t itof2= (s*64+m*8+c+1); Float_t corrT = ((dist-2100)/300); Float_t time = (tof - corrT); if(pT->hToftdcSum_hit) pT->hToftdcSum_hit ->getP()->Fill(itof2,time); if(pT->hToftdcDiff_hit) { pT->hToftdcDiff_hit->getP()->Fill(itof2,xpos); if(pT->hTofpattern_hit) pT->hTofpattern_hit->getP()->Fill(itof2); } if(Adcflag == 2){ if(pT->hTofadcSum_hit) pT->hTofadcSum_hit->getP()->Fill(itof2,Edep); if(pT->hTofadcPos_hit) pT->hTofadcPos_hit->getP()->Fill(itof2,xposAdc); } if(pT->hTofsum_hit) pT->hTofsum_hit ->getP()->Fill(time); if(pT->hToftheta_hit) pT->hToftheta_hit->getP()->Fill(theta); if(pT->hTofphi_hit) pT->hTofphi_hit ->getP()->Fill(phi); if(pT->hTofyvsx_hit) pT->hTofyvsx_hit ->getP()->Fill(lab_x,lab_y); } } } //############################################################################### // do reset if needed mapHolder::resetHists(evtCt); return kTRUE; }