#include "honlinemonhist.h" #include "honlinehistarray.h" #include "honlinetrendhist.h" #include "hcategory.h" #include "hpiontrackerdef.h" #include "hpiontrackerraw.h" #include "hpiontrackercal.h" #include "hpiontrackerhit.h" #include "hpiontrackertrack.h" #include "hpiontrackertrackfpar.h" #include "hstart2raw.h" #include "helpers.h" #include "TList.h" #include "TString.h" #include #include using namespace std; map < TString , HOnlineMonHistAddon* > piontrackerMap; typedef struct { Int_t strip; Int_t time; Int_t charge; } PtHitData; struct pionP{ HOnlineMonHistAddon* hPTRawMult = 0; HOnlineMonHistAddon* hPTRawTimeStamp = 0; HOnlineMonHistAddon* hPTRawStrip = 0; HOnlineMonHistAddon* hPTRawPileup = 0; HOnlineMonHistAddon* hPTRawOverflow = 0; HOnlineMonHistAddon* hPTRawStripADC = 0; HOnlineMonHistAddon* hPTRawStripTimeStamp = 0; HOnlineMonHistAddon* hPTRawXY = 0; HOnlineMonHistAddon* hPTRawHodoDt = 0; HOnlineMonHistAddon* hPTCalMult = 0; HOnlineMonHistAddon* hPTCalTimeStamp = 0; HOnlineMonHistAddon* hPTCalStrip = 0; HOnlineMonHistAddon* hPTCalPileup = 0; HOnlineMonHistAddon* hPTCalOverflow = 0; HOnlineMonHistAddon* hPTCalStripADC = 0; HOnlineMonHistAddon* hPTCalStripTimeStamp = 0; HOnlineMonHistAddon* hPTCalXY = 0; HOnlineMonHistAddon* hPTCalHodoDt = 0; HOnlineMonHistAddon* hPTPhys_Mom = 0; HOnlineMonHistAddon* hPTPhys_Theta_Mom = 0; HOnlineMonHistAddon* hPTPhys_Phi_Mom = 0; HOnlineMonHistAddon* hPTPhys_Hades_X_Y = 0; }; pionP* pPion; Bool_t createHistPionTracker(TList& histpool){ mapHolder::setMap(piontrackerMap); // make wallMap currentMap //####################### USER CODE ############################################## // define monitoring hists const Char_t* hists[] = { "FORMAT#array TYPE#1F NAME#hPTRawMult TITLE#Multiplicity ACTIVE#1 RESET#1 REFRESH#5000 BIN#10:0:10:0:0.0:0.0 SIZE#1:4 AXIS#mult: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#array TYPE#1F NAME#hPTRawTimeStamp TITLE#TimeStamp ACTIVE#1 RESET#1 REFRESH#5000 BIN#250:0:1000:0:0.0:0.0 SIZE#1:4 AXIS#TimeStamp_[ns]: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#array TYPE#1F NAME#hPTRawStrip TITLE#Strip ACTIVE#1 RESET#1 REFRESH#5000 BIN#128:0:128:0:0.0:0.0 SIZE#1:4 AXIS#strip: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#array TYPE#1F NAME#hPTRawPileup TITLE#Strip ACTIVE#1 RESET#1 REFRESH#5000 BIN#128:0:128:0:0.0:0.0 SIZE#1:4 AXIS#strip:pileups: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#array TYPE#1F NAME#hPTRawOverflow TITLE#Strip ACTIVE#1 RESET#1 REFRESH#5000 BIN#128:0:128:0:0.0:0.0 SIZE#1:4 AXIS#strip:overflows: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#array TYPE#2F NAME#hPTRawStripADC TITLE#StripADC ACTIVE#1 RESET#1 REFRESH#5000 BIN#128:0:128:1024:0.0:4096.0 SIZE#1:4 AXIS#strip:ADC:no DIR#no OPT#colz STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#46:0 MARKER#0:0:0 RANGE#-99:-99", "FORMAT#array TYPE#2F NAME#hPTRawStripTimeStamp TITLE#StripTimeStamp ACTIVE#1 RESET#1 REFRESH#5000 BIN#250:0:1000:128:0.0:128.0 SIZE#1:4 AXIS#TimeStamp_[ns]:strip:no DIR#no OPT#colz STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#46:0 MARKER#0:0:0 RANGE#-99:-99", "FORMAT#array TYPE#2F NAME#hPTRawXY TITLE#X_Y_correlation ACTIVE#1 RESET#1 REFRESH#5000 BIN#128:0.:128.:128:0.:128.0 SIZE#1:2 AXIS#X_strip:Y_strip: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#hPTRawHodoDt TITLE#PT_HODO_DT ACTIVE#1 RESET#1 REFRESH#5000 BIN#1000:-1000.:1000.:128:0.:128.0 SIZE#1:4 AXIS#dT_Pt-Hodo:PT_strip: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#1F NAME#hPTCalMult TITLE#Multiplicity ACTIVE#1 RESET#1 REFRESH#5000 BIN#10:0:10:0:0.0:0.0 SIZE#1:4 AXIS#mult: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#array TYPE#1F NAME#hPTCalTimeStamp TITLE#TimeStamp ACTIVE#1 RESET#1 REFRESH#5000 BIN#200:-200:200:0:0.0:0.0 SIZE#1:4 AXIS#TimeStamp_[ns]: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#array TYPE#1F NAME#hPTCalStrip TITLE#Strip ACTIVE#1 RESET#1 REFRESH#5000 BIN#128:0:128:0:0.0:0.0 SIZE#1:4 AXIS#strip: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#array TYPE#1F NAME#hPTCalPileup TITLE#Strip ACTIVE#1 RESET#1 REFRESH#5000 BIN#128:0:128:0:0.0:0.0 SIZE#1:4 AXIS#strip:pileups: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#array TYPE#1F NAME#hPTCalOverflow TITLE#Strip ACTIVE#1 RESET#1 REFRESH#5000 BIN#128:0:128:0:0.0:0.0 SIZE#1:4 AXIS#strip:overflows: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#array TYPE#2F NAME#hPTCalStripADC TITLE#StripADC ACTIVE#1 RESET#1 REFRESH#5000 BIN#128:0:128:1024:0.0:4096.0 SIZE#1:4 AXIS#strip:ADC:no DIR#no OPT#colz STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#46:0 MARKER#0:0:0 RANGE#-99:-99", "FORMAT#array TYPE#2F NAME#hPTCalStripTimeStamp TITLE#StripTimeStamp ACTIVE#1 RESET#1 REFRESH#5000 BIN#200:-200:200:128:0.0:128.0 SIZE#1:4 AXIS#TimeStamp_[ns]:strip:no DIR#no OPT#colz STATS#0 LOG#0:0:0 GRID#1:1 LINE#1:0 FILL#46:0 MARKER#0:0:0 RANGE#-99:-99", "FORMAT#array TYPE#2F NAME#hPTCalXY TITLE#X_Y_correlation ACTIVE#1 RESET#1 REFRESH#5000 BIN#128:0.:128.:128:0.:128.0 SIZE#1:2 AXIS#X_strip:Y_strip: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#hPTCalHodoDt TITLE#PT_HODO_DT ACTIVE#1 RESET#1 REFRESH#5000 BIN#200:400.:800.:128:0.:128.0 SIZE#1:4 AXIS#dT_Pt-Hodo:PT_strip: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#hPTPhys_Mom TITLE#PtPhys_Mom ACTIVE#1 RESET#1 REFRESH#5000 BIN#400:0.4:1.2 SIZE#0:0 AXIS#Mom_GEV/c:Counts:0 DIR#no OPT#no 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#hPTPhys_Theta_Mom TITLE#PtPhys_Theta_Mom ACTIVE#1 RESET#1 REFRESH#5000 BIN#70:-7:7:30:-15:15 SIZE#0:0 AXIS#DeltaMom_%:Theta_mrad:0 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#mon TYPE#2F NAME#hPTPhys_Phi_Mom TITLE#PtPhys_Phi_Mom ACTIVE#1 RESET#1 REFRESH#5000 BIN#70:-7:7:30:-60:60 SIZE#0:0 AXIS#DeltaMom_%:Phi_mrad:0 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#mon TYPE#2F NAME#hPTPhys_Hades_X_Y TITLE#PtPhys_Hades_X_Y ACTIVE#1 RESET#1 REFRESH#5000 BIN#40:-20:20:50:-20:20 SIZE#0:0 AXIS#X_mm:Y_mm:0 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", }; //############################################################################### // create hists and add them to the pool mapHolder::createHists(sizeof(hists)/sizeof(Char_t*),hists,histpool); pPion = new pionP(); pPion->hPTRawMult = get("hPTRawMult"); pPion->hPTRawTimeStamp = get("hPTRawTimeStamp"); pPion->hPTRawStrip = get("hPTRawStrip"); pPion->hPTRawPileup = get("hPTRawPileup"); pPion->hPTRawOverflow = get("hPTRawOverflow"); pPion->hPTRawStripADC = get("hPTRawStripADC"); pPion->hPTRawStripTimeStamp = get("hPTRawStripTimeStamp"); pPion->hPTRawXY = get("hPTRawXY"); pPion->hPTRawHodoDt = get("hPTRawHodoDt"); pPion->hPTCalMult = get("hPTCalMult"); pPion->hPTCalTimeStamp = get("hPTCalTimeStamp"); pPion->hPTCalStrip = get("hPTCalStrip"); pPion->hPTCalPileup = get("hPTCalPileup"); pPion->hPTCalOverflow = get("hPTCalOverflow"); pPion->hPTCalStripADC = get("hPTCalStripADC"); pPion->hPTCalStripTimeStamp = get("hPTCalStripTimeStamp"); pPion->hPTCalXY = get("hPTCalXY"); pPion->hPTCalHodoDt = get("hPTCalHodoDt"); pPion->hPTPhys_Mom = get("hPTPhys_Mom"); pPion->hPTPhys_Theta_Mom = get("hPTPhys_Theta_Mom"); pPion->hPTPhys_Phi_Mom = get("hPTPhys_Phi_Mom"); pPion->hPTPhys_Hades_X_Y = get("hPTPhys_Hades_X_Y"); Int_t colorsSector[6] = {2, 4, 6, 8, 38, 46}; return kTRUE; } Bool_t fillHistPionTracker(Int_t evtCt){ mapHolder::setMap(piontrackerMap); // make wallMap currentMap //####################### USER CODE ############################################## // Fill Histograms // categorys to loop HCategory* piontrackerRawCat = gHades->getCurrentEvent()->getCategory(catPionTrackerRaw); HCategory* piontrackerCalCat = gHades->getCurrentEvent()->getCategory(catPionTrackerCal); HCategory* piontrackerTrackCat = gHades->getCurrentEvent()->getCategory(catPionTrackerTrack); HCategory* startRawCat = gHades->getCurrentEvent()->getCategory(catStart2Raw); HCategory* startCalCat = gHades->getCurrentEvent()->getCategory(catStart2Cal); vector vraw[4], vcal[4]; Int_t nxpair[4] = { 1, 0, 3, 2 }; Char_t pileup, overflow; if(piontrackerRawCat) { HPionTrackerRaw* raw; Int_t module,nStrip; size_t dsize[4] = { 0, 0, 0, 0 }; for(Int_t i = 0; i < piontrackerRawCat->getEntries(); i ++) { raw = (HPionTrackerRaw*)piontrackerRawCat->getObject(i); if(raw){ raw->getAddress(module,nStrip); // det1 det2 // x 0 2 // y 1 3 size_t s = raw->getMultiplicity(); dsize[module] += s; for (size_t i = 0; i < s; ++i) { // most shorter notation PtHitData hit; hit.strip =(Int_t)nStrip; hit.time =(Int_t)raw->getTime(i); hit.charge=(Int_t)raw->getCharge(i); raw->getErrors(i, pileup, overflow); if (pileup) pPion->hPTRawPileup->fill(0,i,hit.strip); if (overflow) pPion->hPTRawOverflow->fill(0,i,hit.strip); vraw[module].push_back(hit); for(Int_t i = 0; i < startRawCat->getEntries(); i ++) { HStart2Raw * raw = (HStart2Raw*)startRawCat->getObject(i); if(raw&&raw->getModule()==4) { Int_t time = raw->getTime(1); Int_t strip = raw->getStrip(); //printf("t = %d, s = %d, dt = %f\n", time, strip, hit.time-time); if(strip<16) pPion->hPTRawHodoDt->fill(0,module,hit.time-time,hit.strip); } } } } } // end raw loop for (UInt_t i = 0; i < 4; ++i) { pPion->hPTRawMult->fill(0,i,dsize[i]); for (UInt_t j = 0; j < vraw[i].size(); ++j) //hits { pPion->hPTRawStrip->fill(0,i,vraw[i][j].strip); pPion->hPTRawTimeStamp->fill(0,i,vraw[i][j].time); pPion->hPTRawStripTimeStamp->fill(0,i,vraw[i][j].time, vraw[i][j].strip); pPion->hPTRawStripADC->fill(0,i,vraw[i][j].strip, vraw[i][j].charge); if (i % 2 != 1) { for (UInt_t k = 0; k < vraw[nxpair[i]].size(); ++k) // hits { pPion->hPTRawXY->fill(0,i/2,vraw[i][j].strip,vraw[nxpair[i]][k].strip); } } } } } if(piontrackerCalCat) { HPionTrackerCal* cal; Int_t module,nStrip; size_t dsize[4] = { 0, 0, 0, 0 }; for(Int_t i = 0; i < piontrackerCalCat->getEntries(); i ++) { cal = (HPionTrackerCal*)piontrackerCalCat->getObject(i); if(cal){ cal->getAddress(module,nStrip); // det1 det2 // x 0 2 // y 1 3 size_t s = cal->getMultiplicity(); dsize[module] += s; for (size_t i = 0; i < s; ++i) { // most shorter notation PtHitData hit; hit.strip =(Int_t)nStrip; hit.time =(Int_t)cal->getTime(i); hit.charge=(Int_t)cal->getCharge(i); cal->getErrors(i, pileup, overflow); // if (pileup) pPion->hPTCalPileup->fill(0,i,hit.strip); // if (overflow) pPion->hPTCalOverflow->fill(0,i,hit.strip); vcal[module].push_back(hit); //cal->getErrors(i, pileup, overflow); for(Int_t i = 0; i < startCalCat->getEntries(); i ++) { HStart2Raw * cal = (HStart2Raw*)startCalCat->getObject(i); if(cal&&cal->getModule()==4) { Int_t time = cal->getTime(1); Int_t strip = cal->getStrip(); if(strip<16) pPion->hPTCalHodoDt->fill(0,module,hit.time-time,hit.strip); } } } } } // end cal loop for (UInt_t i = 0; i < 4; ++i) { pPion->hPTCalMult->fill(0,i,dsize[i]); for (UInt_t j = 0; j < vcal[i].size(); ++j) //hits { // pPion->hPTCalStrip->fill(0,i,vcal[i][j].strip); pPion->hPTCalTimeStamp->fill(0,i,vcal[i][j].time); pPion->hPTCalStripTimeStamp->fill(0,i,vcal[i][j].time, vcal[i][j].strip); pPion->hPTCalStripADC->fill(0,i,vcal[i][j].strip, vcal[i][j].charge); if (i % 2 != 1) { for (UInt_t k = 0; k < vcal[nxpair[i]].size(); ++k) // hits { // pPion->hPTCalXY->fill(0,i/2,vcal[i][j].strip,vcal[nxpair[i]][k].strip); } } } } } /* if(piontrackerHitCat){ HPionTrackerHit* hit; for(Int_t i = 0; i < piontrackerHitCat->getEntries(); i ++){ hit = (HPionTrackerHit*)piontrackerHitCat->getObject(i); if(hit){ } } } */ if (piontrackerTrackCat) { HPionTrackerTrack* track; HPionTrackerTrackFPar * pTrackfpar = (HPionTrackerTrackFPar *) gHades->getRuntimeDb()->getContainer ("PionTrackerTrackFPar"); if (!pTrackfpar) return kFALSE; for(Int_t i = 0; i < piontrackerTrackCat->getEntries(); i ++){ track = (HPionTrackerTrack*)piontrackerTrackCat->getObject(i); if (track) { Float_t mom = track->getP(); Float_t theta = track->getTheta() * 1000.; // value stored in radians Float_t phi = track->getPhi() * 1000.; // conversion to mrad Float_t x,y; track->getPosH(x,y); Float_t ref_mom = pTrackfpar->getRefMom() * 0.001; // value stored in MeV Float_t d_mom = ( mom / ref_mom - 1. ) * 100.; // convertion to dP in % pPion->hPTPhys_Mom->getP()->Fill(mom); pPion->hPTPhys_Theta_Mom->getP()->Fill(d_mom, theta); pPion->hPTPhys_Phi_Mom->getP()->Fill(d_mom, phi); pPion->hPTPhys_Hades_X_Y->getP()->Fill(x, y); } } } //############################################################################### // do reset if needed mapHolder::resetHists(evtCt); return kTRUE; }