#include "honlinemonhist.h" #include "honlinehistarray.h" #include "honlinetrendhist.h" #include "hcategory.h" #include "hemcdetector.h" #include "emcdef.h" #include "hemcraw.h" #include "hemccal.h" #include "hemccluster.h" #include "helpers.h" #include "TList.h" #include "TString.h" #include #include using namespace std; map < TString , HOnlineMonHistAddon* > emcMap; struct emcP{ HOnlineMonHistAddon* hEmc_raw_sec = 0; HOnlineMonHistAddon* hEmc_raw_nhits_sec = 0; HOnlineMonHistAddon* hEmc_raw_slowtot_sec = 0; HOnlineMonHistAddon* hEmc_raw_slowtime_sec = 0; HOnlineMonHistAddon* hEmc_raw_fasttot_sec = 0; HOnlineMonHistAddon* hEmc_raw_fasttime_sec = 0; HOnlineMonHistAddon* hEmc_raw_tfls_sec = 0; HOnlineMonHistAddon* hEmc_width_module= 0; HOnlineMonHistAddon* hEmc_leadTime_module = 0; HOnlineMonHistAddon* hEmc_mult_raw_total = 0; HOnlineMonHistAddon* hEmc_mult_raw_sec = 0; HOnlineMonHistAddon* hEmc_mult_raw_total_trend = 0; HOnlineMonHistAddon* hEmc_mult_raw_sec_trend = 0; HOnlineMonHistAddon* hEmc_CellHits = 0; }; emcP* pE; Bool_t createHistEmc(TList& histpool){ mapHolder::setMap(emcMap); // make tofMap currentMap //####################### USER CODE ############################################## // define monitoring hists const Char_t* hists[] = { "FORMAT#mon TYPE#2F NAME#hEmc_raw_sec TITLE#Emc_Raw_Sec ACTIVE#1 RESET#1 REFRESH#5000 BIN#163:0.0:163.0:6:0.0:6.0 SIZE#0:0 AXIS#position: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#array TYPE#2F NAME#hEmc_raw_nhits_sec TITLE#Emc_Raw_nhits_Sec ACTIVE#1 RESET#1 REFRESH#5000 BIN#163:0.0:163.0:10:0.0:10.0 SIZE#1:6 AXIS#position: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#hEmc_raw_slowtot_sec TITLE#Emc_Raw_slowTot_Sec ACTIVE#1 RESET#1 REFRESH#5000 BIN#1200:0.0:1200.0:50:0.0:1000.0 SIZE#0:0 AXIS#sec*200+mod:tot: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#hEmc_raw_slowtime_sec TITLE#Emc_Raw_slowTime_Sec ACTIVE#1 RESET#1 REFRESH#5000 BIN#1200:0.0:1200.0:250:-250.0:2750.0 SIZE#0:0 AXIS#sec*200+mod:leading_time: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#hEmc_raw_fasttot_sec TITLE#Emc_Raw_fastTot_Sec ACTIVE#1 RESET#1 REFRESH#5000 BIN#1200:0.0:1200.0:400:0.0:800.0 SIZE#0:0 AXIS#sec*200+mod:tot: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#hEmc_raw_fasttime_sec TITLE#Emc_Raw_fastTime_Sec ACTIVE#1 RESET#1 REFRESH#5000 BIN#1200:0.0:1200.0:250:-250.0:2750.0 SIZE#0:0 AXIS#sec*200+mod:leading_time: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#hEmc_raw_tfls_sec TITLE#Emc_Raw_faTr-slLe_Sec ACTIVE#1 RESET#1 REFRESH#5000 BIN#1200:0.0:1200.0:250:-2500.0:2500.0 SIZE#0:0 AXIS#sec*200+mod:trFast-leSlow: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#hEmc_width_module TITLE#Emc_width_module ACTIVE#1 RESET#1 REFRESH#5000 BIN#1200:0.0:1200.0:100:0.0:2000.0 SIZE#0:0 AXIS#sec*200+mod:width: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#hEmc_leadTime_module TITLE#Emc_leadTime_module ACTIVE#1 RESET#1 REFRESH#5000 BIN#1200:0.0:1200.0:250:-250.0:2750.0 SIZE#0:0 AXIS#sec*200+mod:leading_time: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#hEmc_mult_raw_total TITLE#Emc_mult_raw 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#array TYPE#1F NAME#hEmc_mult_raw_sec TITLE#Emc_mult_raw_Sec ACTIVE#1 RESET#1 REFRESH#5000 BIN#100:-0.5:99.5:0:0.0:0.0 SIZE#1:6 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#trend TYPE#1F NAME#hEmc_mult_raw_total_trend TITLE#Emc_mult_raw ACTIVE#1 RESET#0 REFRESH#5000 BIN#50:0.0:50.0:0:0.:0. SIZE#0:0 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#trendarray TYPE#1F NAME#hEmc_mult_raw_sec_trend TITLE#Emc_mult_raw_Sec 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#pl 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#1F NAME#hEmc_CellHits TITLE#Emc_CellHits ACTIVE#1 RESET#1 REFRESH#5000 BIN#1200:0:1200:0:0.0:0.0 SIZE#0:0 AXIS#sec*200+mod: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); HOnlineMonHistAddon* addon=0; pE = new emcP(); pE->hEmc_raw_sec = get("hEmc_raw_sec"); pE->hEmc_raw_nhits_sec = get("hEmc_raw_nhits_sec"); pE->hEmc_raw_slowtot_sec = get("hEmc_raw_slowtot_sec"); pE->hEmc_raw_slowtime_sec = get("hEmc_raw_slowtime_sec"); pE->hEmc_raw_fasttot_sec = get("hEmc_raw_fasttot_sec"); pE->hEmc_raw_fasttime_sec = get("hEmc_raw_fasttime_sec"); pE->hEmc_raw_tfls_sec = get("hEmc_raw_tfls_sec"); pE->hEmc_width_module= get("hEmc_width_module"); pE->hEmc_leadTime_module = get("hEmc_leadTime_module"); pE->hEmc_mult_raw_total = get("hEmc_mult_raw_total"); pE->hEmc_mult_raw_sec = get("hEmc_mult_raw_sec"); pE->hEmc_mult_raw_total_trend = get("hEmc_mult_raw_total_trend"); pE->hEmc_mult_raw_sec_trend = get("hEmc_mult_raw_sec_trend"); pE->hEmc_CellHits = get("hEmc_CellHits"); if( (addon = pE->hEmc_mult_raw_sec )) { for(Int_t s = 0; s < 6; s ++){ addon->getP(0,s)->SetLineColor(colorsSector[s]); } } if( (addon = pE->hEmc_mult_raw_sec_trend )) { for(Int_t s = 0; s < 6; s ++){ addon->getP(0,s)->SetLineColor(colorsSector[s]); addon->getP(0,s)->SetMarkerColor(colorsSector[s]); } } return kTRUE; } Bool_t fillHistEmc(Int_t evtCt){ mapHolder::setMap(emcMap); // make tofMap currentMap //####################### USER CODE ############################################## // Fill Histograms // categorys to loop HCategory* emcRawCat = gHades->getCurrentEvent()->getCategory(catEmcRaw); HCategory* emcCalCat = gHades->getCurrentEvent()->getCategory(catEmcCal); if(emcRawCat){ HEmcRaw* raw; Int_t sec,cell; Char_t row,col; Int_t rawMult = 0; Int_t rawMultSec[6] = {0,0,0,0,0,0}; Float_t t1,tot; Float_t t2,totFast; UInt_t pos ; for(Int_t i = 0; i < emcRawCat->getEntries(); i ++){ raw = (HEmcRaw*)emcRawCat->getObject(i); if(raw){ raw->getAddress(sec,cell,row,col); pos = HEmcDetector::getPositionFromCell(cell); //module number (0-168) from cell number (0-250 with gaps) Int_t pos1 = sec*200+pos; // all sectors in one pos1 raw->getSlowTimeAndWidth(0,t1,tot); raw->getFastTimeAndWidth(0,t2,totFast); if(pE->hEmc_raw_slowtot_sec) pE->hEmc_raw_slowtot_sec->getP()->Fill(pos1,tot); if(pE->hEmc_raw_slowtime_sec) pE->hEmc_raw_slowtime_sec->getP()->Fill(pos1,t1); if(pE->hEmc_raw_fasttot_sec) pE->hEmc_raw_fasttot_sec->getP()->Fill(pos1,totFast); if(pE->hEmc_raw_fasttime_sec) pE->hEmc_raw_fasttime_sec->getP()->Fill(pos1,t2); if(pE->hEmc_raw_tfls_sec) pE->hEmc_raw_tfls_sec->getP()->Fill(pos1,t2+totFast-t1); if(pE->hEmc_raw_sec && tot>350) pE->hEmc_raw_sec->getP()->Fill(pos,sec); if(pE->hEmc_CellHits && tot>350) pE->hEmc_CellHits->getP()->Fill(pos1); rawMult++; rawMultSec[sec]++; } } // end raw loop if(pE->hEmc_mult_raw_total) pE->hEmc_mult_raw_total ->getP()->Fill((Float_t)rawMult); if(pE->hEmc_mult_raw_sec){ for(Int_t sec = 0; sec < 6; sec ++) { if(rawMultSec[sec]>0)pE->hEmc_mult_raw_sec->getP(0,sec)->Fill((Float_t)rawMultSec[sec]); } } if(pE->hEmc_mult_raw_total_trend && pE->hEmc_mult_raw_total && evtCt%pE->hEmc_mult_raw_total_trend->getRefreshRate() == 0 && evtCt > 0 ){ pE->hEmc_mult_raw_total_trend ->fill(pE->hEmc_mult_raw_total->getP()->GetMean()); } if(pE->hEmc_mult_raw_sec_trend && pE->hEmc_mult_raw_sec && evtCt%pE->hEmc_mult_raw_sec_trend->getRefreshRate() == 0 && evtCt > 0 ){ for(Int_t sec = 0; sec < 6; sec ++) { pE->hEmc_mult_raw_sec_trend->fill(0,sec,pE->hEmc_mult_raw_sec->getP(0,sec)->GetMean()); } } } if(emcCalCat){ HEmcCal* cal; Char_t sec,row,col; UChar_t cell; Int_t calMult = 0; UInt_t pos ; for(Int_t i = 0; i < emcCalCat->getEntries(); i ++){ cal = (HEmcCal*)emcCalCat->getObject(i); if(cal){ cal->getAddress(sec,cell,row,col); pos = HEmcDetector::getPositionFromCell(cell); //module number (0-168) from cell number (0-250 with gaps) Int_t pos1 = sec*200+pos; // all sectors in one pos1 if(pE->hEmc_width_module) pE->hEmc_width_module->getP()->Fill(pos1,cal->getWidth()); if(pE->hEmc_leadTime_module) pE->hEmc_leadTime_module->getP()->Fill(pos1,cal->getLead()); calMult++; } } // end raw loop } //############################################################################### // do reset if needed mapHolder::resetHists(evtCt); return kTRUE; }