#ifndef EconAna_HH #define EconAna_HH #include #include #include #include "TH1D.h" #include "TH2D.h" #include "TH1I.h" #include "Buffering/EconSim.hh" class EconAna { public: EconAna() { } void boj(const EconSim &e, unsigned nHistory=100000) { fEconSim=&e; std::ostringstream sout; sout << "EconAna" << std::setw(2) << std::setfill('0') << fEconSim->econNumber(); std::string sHgcroc[18]={"00","01","02","03","04","05","06","07","08", "09","10","11","12","13","14","15","16","17"}; hBitmapWordsVsChannels=new TH1I((sout.str()+"BitmapWordsVsChannels").c_str(), ";Number of channels per HGCROC packet;Number of words per HGCROC packet",73,-0.5,72.5); hLabelsWordsVsChannels=new TH1I((sout.str()+"LabelsWordsVsChannels").c_str(), ";Number of channels per HGCROC packet;Number of words per HGCROC packet",73,-0.5,72.5); hTotalChannels=new TH1D((sout.str()+"TotalChannels").c_str(), ";ECON total number of channels",1300,0,1300); hTotalWords=new TH1D((sout.str()+"TotalWords").c_str(), ";ECON total number of words",1000,0,1000); for(unsigned block(0);blockeconArch().numberOfBlocks();block++) { hBlockTotalChannels[block]=new TH1D((sout.str()+"Block"+sHgcroc[block]+"TotalChannels").c_str(), ";Block total number of channels",1300,0,1300); hBlockTotalWords[block]=new TH1D((sout.str()+"Block"+sHgcroc[block]+"TotalWords").c_str(), ";Block total number of words",1000,0,1000); hEventBufferUsed[block]=new TH1D((sout.str()+"Block"+sHgcroc[block]+"EventBufferUsed").c_str(), ";Number of event buffer words used",50000,0,50000); hEventBufferUsedHistory[block]=new TH1I((sout.str()+"Block"+sHgcroc[block]+"EventBufferUsedHistory").c_str(), ";BX;Number of event buffer words used",nHistory,0,nHistory); hEventBufferExceeded[block]=new TH1D((sout.str()+"Block"+sHgcroc[block]+"EventBufferExceeded").c_str(), ";Number of event buffer words used",50000,0,50000); hL1AcceptDifference[block]=new TH1D((sout.str()+"Block"+sHgcroc[block]+"L1AcceptDifference").c_str(), ";Difference in L1Accept numbers",100,0,100); hL1AcceptDifferenceHistory[block]=new TH1I((sout.str()+"Block"+sHgcroc[block]+"L1AcceptDifferenceHistory").c_str(), ";BX;Difference in L1Accept numbers",nHistory,0,nHistory); } for(unsigned c(0);c<=72;c++) { hBitmapWordsVsChannels->Fill(c,fEconSim->channelsToWords(c,true)); hLabelsWordsVsChannels->Fill(c,fEconSim->channelsToWords(c,false)); } hMeans=new TH1D((sout.str()+"Means").c_str(), ";HGCROC;Mean number of channels",18,0,18); for(unsigned h(0);heconFile().numberOfHgcrocs();h++) { hMeans->SetBinContent(h+1,fEconSim->econFile().mean(h)); } for(unsigned h(0);h<18;h++) { hChannels[h]=new TH1D((sout.str()+"Hgcroc"+sHgcroc[h]+"Channels").c_str(), ";Number of channels per HGCROC packet",73,0,73); hWords[h]=new TH1D((sout.str()+"Hgcroc"+sHgcroc[h]+"Words").c_str(), ";Number of words per HGCROC packet",60,0,60); hWordsVsChannels[h]=new TH2D((sout.str()+"Hgcroc"+sHgcroc[h]+"WordsVsChannels").c_str(), ";Number of channels per HGCROC packet;Number of words per HGCROC packet",73,-0.5,72.5,60,-0.5,59.5); } } void analyseZs(uint64_t bx) { unsigned nChannels(0),nWords(0); for(unsigned h(0);h<18;h++) { hChannels[h]->Fill(fEconSim->numberOfChannels(h)); hWords[h]->Fill(fEconSim->numberOfWords(h)); hWordsVsChannels[h]->Fill(fEconSim->numberOfChannels(h),fEconSim->numberOfWords(h)); nChannels+=fEconSim->numberOfChannels(h); nWords+=fEconSim->numberOfWords(h); } hTotalChannels->Fill(nChannels); hTotalWords->Fill(nWords); for(unsigned block(0);blockeconArch().numberOfBlocks();block++) { unsigned nBlockChannels(0),nBlockWords(0); for(unsigned i(0);ieconArch().fHgcrocNumber[block].size();i++) { unsigned h(fEconSim->econArch().fHgcrocNumber[block][i]); nBlockChannels+=fEconSim->numberOfChannels(h); nBlockWords+=fEconSim->numberOfWords(h); } hBlockTotalChannels[block]->Fill(nBlockChannels); hBlockTotalWords[block]->Fill(nBlockWords); } } void analyseBx(uint64_t bx) { for(unsigned block(0);blockeconArch().fNumberOfBlocks;block++) { hEventBufferUsed[block]->Fill(fEconSim->fEventBuffer[block].used()); hEventBufferUsedHistory[block]->Fill(bx,fEconSim->fEventBuffer[block].used()); if(fEconSim->exceededBuffer()) hEventBufferExceeded[block]->Fill(fEconSim->fEventBuffer[block].used()); hL1AcceptDifference[block]->Fill(fEconSim->l1AcceptDifference(block)); hL1AcceptDifferenceHistory[block]->Fill(bx,fEconSim->l1AcceptDifference(block)); } } void eoj() { } private: const EconSim *fEconSim; TH1I *hBitmapWordsVsChannels; TH1I *hLabelsWordsVsChannels; TH1D *hMeans; TH1D *hChannels[18]; TH1D *hWords[18]; TH2D *hWordsVsChannels[18]; TH1D *hTotalChannels; TH1D *hTotalWords; TH1D *hBlockTotalChannels[7]; TH1D *hBlockTotalWords[7]; TH1D *hEventBufferUsed[7]; TH1I *hEventBufferUsedHistory[7]; TH1D *hEventBufferExceeded[7]; TH1D *hL1AcceptDifference[7]; TH1I *hL1AcceptDifferenceHistory[7]; }; #endif