diff --git a/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsData.h b/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsData.h index 863ea3f71..bd68bdc58 100644 --- a/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsData.h +++ b/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsData.h @@ -57,21 +57,33 @@ class jungfrauLGADStrixelsData : public slsDetectorData { 1286 large etc.) \param c crosstalk parameter for the output buffer */ + + int groupmap[512*5][1024/5]; + + jungfrauLGADStrixelsData() : slsDetectorData(1024/5, 512*5, 512 * 1024 * 2 + sizeof(header)) { - cout << "aaa" << endl; + // cout << "aaa" << endl; #ifdef ALDO //VH cout<< "using reduced jf_header" << endl; //VH #endif //VH for (int ix = 0; ix < 1024/5; ix++) { for (int iy = 0; iy < 512*5; iy++) { dataMap[iy][ix] = sizeof(header);//+ ( 1024 * 5 + 300) * 2; //somewhere on the guardring of the LGAD + groupmap[iy][ix]=-1; #ifdef HIGHZ dataMask[iy][ix] = 0x3fff; #endif } } + + int x0=256+10, x1=256+246; + int y0=10, y1=256-10; + int ix,iy; + int ox=0, oy=0, ooy=0; + ox=2;//0; //original value is 0 + cout << "G0" << endl; //chip1 /* @@ -90,10 +102,11 @@ class jungfrauLGADStrixelsData : public slsDetectorData { ox=0; for (int ipx=x0; ipx { //3 square pixels in x on the left oy=-54; ooy=54*3; - ox=3; + ox=2;//; //original value is 3 for (int ipx=x0; ipx { ix=(ipx-x0+ox)/4; iy=(ipx-x0+ox)%4+(ipy-y0+oy)*4+ooy; dataMap[iy][ix] = sizeof(header) + (1024 * ipy + ipx) * 2; + groupmap[iy][ix]=2; } } @@ -143,8 +158,8 @@ class jungfrauLGADStrixelsData : public slsDetectorData { ix=(ipx-x0+ox)/4; iy=(ipx-x0+ox)%4+(ipy-y0+oy)*4+ooy; dataMap[iy][ix] = sizeof(header) + (1024 * ipy + ipx) * 2; - //if (ipx==x0) - // cout << ipx << " " << ipy << " " << ix << " " << iy << endl; + //if (ipx==x0) cout << ipx << " " << ipy << " " << ix << " " << iy << endl; + groupmap[iy][ix]=2; } } @@ -158,6 +173,7 @@ class jungfrauLGADStrixelsData : public slsDetectorData { ix=(ipx-x0+ox)/5; iy=(ipx-x0+ox)%5+(ipy-y0+oy)*5+ooy; dataMap[iy][ix] = sizeof(header) + (1024 * ipy + ipx) * 2; + groupmap[iy][ix]=1; } } @@ -171,6 +187,7 @@ class jungfrauLGADStrixelsData : public slsDetectorData { ix=(ipx-x0+ox)/3; iy=(ipx-x0+ox)%3+(ipy-y0+oy)*3+ooy; dataMap[iy][ix] = sizeof(header) + (1024 * ipy + ipx) * 2; + groupmap[iy][ix]=0; } } diff --git a/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsData_new.h b/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsData_new.h new file mode 100644 index 000000000..494335607 --- /dev/null +++ b/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsData_new.h @@ -0,0 +1,336 @@ +// SPDX-License-Identifier: LGPL-3.0-or-other +// Copyright (C) 2021 Contributors to the SLS Detector Package +#ifndef JUNGFRAULGADSTRIXELSDATA_H +#define JUNGFRAULGADSTRIXELSDATA_H +#ifdef CINT +#include "sls/sls_detector_defs_CINT.h" +#else +#include "sls/sls_detector_defs.h" +#endif +#include "slsDetectorData.h" + +//#define VERSION_V2 +/** + @short structure for a Detector Packet or Image Header + @li frameNumber is the frame number + @li expLength is the subframe number (32 bit eiger) or real time exposure + time in 100ns (others) + @li packetNumber is the packet number + @li bunchId is the bunch id from beamline + @li timestamp is the time stamp with 10 MHz clock + @li modId is the unique module id (unique even for left, right, top, bottom) + @li xCoord is the x coordinate in the complete detector system + @li yCoord is the y coordinate in the complete detector system + @li zCoord is the z coordinate in the complete detector system + @li debug is for debugging purposes + @li roundRNumber is the round robin set number + @li detType is the detector type see :: detectorType + @li version is the version number of this structure format +*/ + +namespace strixelSingleChip { + constexpr int nc_rawimg = 1024; //for full images //256; + constexpr int nr_rawimg = 512; + constexpr int nr_chip = 256; + constexpr int gr = 9; + + //Group 1: 25um pitch, groups of 3, 1 column of square pixels + constexpr int g1_ncols{ (nc_rawimg-(2*gr)-1)/3 }; //79 + constexpr int g1_nrows{ ( (nr_chip/4)-gr )*3 }; //165 + + //Group 2: 15um pitch, groups of 5, 3 columns of square pixels + constexpr int g2_ncols{ (nc_rawimg-(2*gr)-3)/5 }; //47 + constexpr int g2_nrows{ (nr_chip/4)*5 }; //320 + + //Group 3: 18.75um pitch, groups of 4, 2 columns of square pixels (double the size of the other groups) + constexpr int g3_ncols{ (nc_rawimg-(2*gr)-2)/4 }; //59 + constexpr int g3_nrows{ ( ((nr_chip/4)*2)-gr )*4 }; //476 + + constexpr int nc_strixel = 2*gr + 1 + g1_ncols; //group 1 is the "longest" group in x and has one extra square pixel + constexpr int nr_strixel = 2*gr + g1_nrows + g2_nrows + g3_nrows; + + + +} + +typedef struct { + uint64_t bunchNumber; /**< is the frame number */ + uint64_t pre; /**< something */ + +} jf_header; //Aldo's header + + +using namespace strixelSingleChip; + +class jungfrauLGADStrixelsData : public slsDetectorData { + + private: + int iframe; + int mchip; + int chip_x0; + int chip_y0; + + void remapGroup( const int group ) { + int ix, iy=0; + int x0, y0, x1, y1, shifty; + int multiplicator; + int shiftx; + switch (group) { + default: + case 1: + multiplicator = 3; + break; + case 2: + multiplicator = 5; + break; + case 3: + multiplicator = 4; + break; + } + + if ( mchip == 1 ) { + + chip_x0=256; + chip_y0=1; //because of bump bonding issues(+1 row) on M408 + + switch (group) { + default: + case 1: + x0 = 10+chip_x0; //9 gr + 1 sq pixel + x1 = 246+chip_x0; + y0 = 9+chip_y0; + y1 = 64+chip_y0; + shifty = 0; + break; + case 2: + x0 = 12+chip_x0; + x1 = 247+chip_x0; + y0 = 64+chip_y0; + y1 = 128+chip_y0; + shifty = g1_nrows; + break; + case 3: + x0 = 11+chip_x0; + x1 = 247+chip_x0; + y0 = 128+chip_y0; + y1 = 247+chip_y0; + shifty = g2_nrows+g1_nrows; + break; + } + } + + if ( mchip == 6 ) { + + chip_x0=512; + chip_y0=255; //should be 256 but is 255 because of bump bonding issues (+1 row) on M408 + + switch (group) { + default: + case 1: + + x0 = 9+chip_x0; //9 gr sq pixel + x1 = 246+chip_x0; + y0 = 192+chip_y0; + y1 = 244+chip_y0; + + shifty = g1_nrows+2*g2_nrows+2*g3_nrows; + break; + + case 2: + + x0 = 9+chip_x0; + x1 = 244+chip_x0; + y0 = 128+chip_y0; + y1 = 191+chip_y0; + + + shifty = g1_nrows+g2_nrows+2*g3_nrows;; + break; + case 3: + + x0 = 9+chip_x0; + x1 = 244+chip_x0; + y0 = 9+chip_y0; + y1 = 127+chip_y0; + shifty =g1_nrows+g2_nrows+g3_nrows; + + break; + } + } + + //remapping loop + for ( int ipy=y0; ipy<=y1;ipy++) { + for ( int ipx=x0; ipx<=x1; ipx++ ) { + + ix = int ((ipx-x0)/multiplicator); + for ( int m=0; m( /*nc_strixel*/g1_ncols, /*nr_strixel*/ 2*g1_nrows+2*g2_nrows+2*g3_nrows, + g1_ncols* (2*g1_nrows+2*g2_nrows+2*g3_nrows) * 2 + sizeof(header) ) { + std::cout << "Jungfrau strixels 2X single chip with full module data " << std::endl; + + + + + //Fill all strixels with dummy values + for (int ix = 0; ix != g1_ncols; ++ix) { + for (int iy = 0; iy != 2*g1_nrows+2*g2_nrows+2*g3_nrows; ++iy) { + dataMap[iy][ix] = sizeof(header); + + } + } + + cout << "sizeofheader = "<bunchNumber; //VH +#else //VH + return ((header *)buff)->detHeader.frameNumber; +#endif //VH + }; + + /** + + Returns the packet number for the given dataset. purely virtual func + \param buff pointer to the dataset + \returns packet number number + + + + */ + int getPacketNumber(char *buff) { +#ifdef ALDO //VH + //uint32_t fakePacketNumber = 1000; + //return fakePacketNumber; //VH //TODO: Keep in mind in case of bugs! //This is definitely bad! + return 1000; +#else //VH + return ((header *)buff)->detHeader.packetNumber; +#endif //VH + }; + + + + char *readNextFrame(std::ifstream &filebin) { + int ff = -1, np = -1; + return readNextFrame(filebin, ff, np); + }; + + char *readNextFrame(std::ifstream &filebin, int &ff) { + int np = -1; + return readNextFrame(filebin, ff, np); + }; + + char *readNextFrame(std::ifstream &filebin, int &ff, int &np) { + char *data = new char[dataSize]; + char *d = readNextFrame(filebin, ff, np, data); + if (d == NULL) { + delete[] data; + data = NULL; + } + return data; + }; + + char *readNextFrame(std::ifstream &filebin, int &ff, int &np,char *data) { + char *retval = 0; + int nd; + int fnum = -1; + np = 0; + int pn; + + // cout << dataSize << endl; + if (ff >= 0) + fnum = ff; + + if (filebin.is_open()) { + if (filebin.read(data, dataSize)) { + ff = getFrameNumber(data); + np = getPacketNumber(data); + return data; + } + } + return NULL; + }; + + /* Loops over a memory slot until a complete frame is found (i.e. all */ + /* packets 0 to nPackets, same frame number). purely virtual func \param */ + /* data pointer to the memory to be analyzed \param ndata reference to the */ + /* amount of data found for the frame, in case the frame is incomplete at */ + /* the end of the memory slot \param dsize size of the memory slot to be */ + /* analyzed \returns pointer to the beginning of the last good frame (might */ + /* be incomplete if ndata smaller than dataSize), or NULL if no frame is */ + /* found */ + + /* *\/ */ + virtual char *findNextFrame(char *data, int &ndata, int dsize) { + if (dsize < dataSize) + ndata = dsize; + else + ndata = dataSize; + return data; + }; + + // int getPacketNumber(int x, int y) {return dataMap[y][x]/packetSize;}; +}; + +#endif diff --git a/slsDetectorCalibration/dataStructures/slsDetectorData.h b/slsDetectorCalibration/dataStructures/slsDetectorData.h index adf26ae4a..ac32433ac 100644 --- a/slsDetectorCalibration/dataStructures/slsDetectorData.h +++ b/slsDetectorCalibration/dataStructures/slsDetectorData.h @@ -12,8 +12,7 @@ template class slsDetectorData { const int nx; /**< Number of pixels in the x direction */ const int ny; /**< Number of pixels in the y direction */ int dataSize; /** class slsDetectorData { int isOrdered; public: + + int **dataMap; /**< Array of size nx*ny storing the pointers to the data in + the dataset (as offset)*/ /** General slsDetectors data structure. Works for data acquired using the slsDetectorReceiver. Can be generalized to other detectors (many virtual diff --git a/slsDetectorCalibration/jungfrauExecutables/Makefile b/slsDetectorCalibration/jungfrauExecutables/Makefile new file mode 120000 index 000000000..bde0d5288 --- /dev/null +++ b/slsDetectorCalibration/jungfrauExecutables/Makefile @@ -0,0 +1 @@ +Makefile.zmqrootdisp \ No newline at end of file diff --git a/slsDetectorCalibration/jungfrauExecutables/Makefile.zmqrootdisp b/slsDetectorCalibration/jungfrauExecutables/Makefile.zmqrootdisp index 86db24343..5734535fd 100644 --- a/slsDetectorCalibration/jungfrauExecutables/Makefile.zmqrootdisp +++ b/slsDetectorCalibration/jungfrauExecutables/Makefile.zmqrootdisp @@ -18,7 +18,7 @@ LDFLAG= -L/usr/lib64/ -lpthread -lm -lstdc++ -lzmq -pthread -lrt -ltiff -O3 default: onlinedisp_zmq -onlinedisp_zmq: onlinedisp_zmq.cpp onlinedisp_zmq.h +onlinedisp_zmq: onlinedisp_zmq.cpp onlinedisp_zmq.h ../dataStructures/jungfrauLGADStrixelsData_new.h # flags from root-config --cflags --glibs g++ -o onlinedisp_zmq onlinedisp_zmq.cpp -I. -I$(ROOTSYS)/include -Wall -g -lm -L. -lzmq -pthread -lrt -L$(ROOTSYS)/lib -lGui -lCore -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -m64 $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) diff --git a/slsDetectorCalibration/jungfrauExecutables/onlinedisp_zmq.cpp b/slsDetectorCalibration/jungfrauExecutables/onlinedisp_zmq.cpp index d63105080..f649200a2 100644 --- a/slsDetectorCalibration/jungfrauExecutables/onlinedisp_zmq.cpp +++ b/slsDetectorCalibration/jungfrauExecutables/onlinedisp_zmq.cpp @@ -7,17 +7,23 @@ sls::zmqHeader zHeader; #define NPRO 50 #define NPRI 50 -//#define JFSTRX +#define JFSTRX #ifdef JFSTRX -#include "jungfrauLGADStrixelsData.h" -#else -#include "jungfrauModuleData.h" +#include "jungfrauLGADStrixelsData_new.h" +#include "sls/sls_detector_defs.h" +#include "slsDetectorData.h" +using header = sls::defs::sls_receiver_header; #endif - int main(int argc, char* argv[]) { + + + + + + goout=1; hasallpede=false; dophotonmap=true; if ((argc<3)) {printf("USAGE: command photon_energy_(peakinADC) [rx_ip] [port] \n"); return -1 ;} @@ -43,9 +49,19 @@ int main(int argc, char* argv[]) #ifdef JFSTRX cout << "JFSTRX" << endl; jungfrauLGADStrixelsData *decoder = new jungfrauLGADStrixelsData(); - nx = 1024/5; ny= 512*5; + + decoder->getDetectorSize(nx,ny); + + + + + cout<< decoder->dataMap[22][22] <SetOption("colz"); + his1001->SetOption("colz"); + his1002->SetOption("colz"); + his1060->SetOption("colz"); + his1061->SetOption("colz"); + his1062->SetOption("colz"); + +#else his1000= new TH2F("his1000","2d , ev. pede corrected",nx,-0.5,nx-0.5,ny,-0.5,ny-0.5); his1000->SetOption("colz"); +#endif + his2000= new TH2F("his2000","2d gain ",nx,-0.5,nx-0.5,ny,-0.5,ny-0.5); his2000->GetZaxis()->SetRangeUser(0,4); if (dophotonmap) { - his3000= new TH2F("his3000"," photon map ",nx,-0.5,nx-0.5,ny,-0.5,ny-0.5); + his3000= new TH2F("his3000"," photon map ",1024,-0.5,1024-0.5,512,-0.5,512-0.5); } else { - his3000= new TH2F("his3000"," raw adc ",nx,-0.5,nx-0.5,ny,-0.5,ny-0.5); + his3000= new TH2F("his3000"," raw adc ",1024,-0.5,1024-0.5,512,-0.5,512-0.5); } - his4500= new TH2F("his45000","L vs R",101,-50,500,101,-50,500); + his4500= new TH2F("his4500","T vs B",101,-500,MAX_POS,101,-500,MAX_POS); hchip=new TH1I*[8]; +#ifdef JFSTRX + for (i=0;i<8;i++) { + if(i<3) + sprintf(hname,"%d_hchip1group%d",i,i+1); + else if (i>4) + sprintf(hname,"%d_hchip6group%d",i, i-4); + else + sprintf(hname,"%d_",i); + hchip[i] = new TH1I(hname,hname,NBIN,MIN_POS,MAX_POS); + } +#else for (i=0;i<8;i++) { sprintf(hname,"hchip%d",i); hchip[i] = new TH1I(hname,hname,NBIN,MIN_POS,MAX_POS); } +#endif cout <<"end of histo booking" <Draw(); + p2 = new TPad("p2","p2",0.51,0.75,0.99,0.97); + p2->Draw(); + p3 = new TPad("p3","p3",0.01,0.25,0.49,0.47); + p3->Draw(); + p4 = new TPad("p4","p4",0.51,0.53,0.99,0.75); + p4->Draw(); + p5 = new TPad("p5","p5",0.01,0.03,0.49,0.25); + p5->Draw(); + p6 = new TPad("p6","p6",0.51,0.,0.99,0.5); + p6->Draw(); + //A3->Divide(2,3); + + // TVirtualPad* g=A3->cd(1); + // g->SetCanvasSize( g->GetWw(), 2*g->GetWw()); + // g=A3->cd(6); + // g->SetCanvasSize( g->GetWw(), 2*g->GetWw()); +#else + A3 = new TCanvas("A3","Plotting Canvas ADC",150,360,1200,550); +#endif + } if (A4==NULL) A4 = new TCanvas("A4","Plotting Canvas PHs",750,300,1000,800); A4->Clear(); A4->Divide(4,2,0.005,0.005); @@ -131,7 +203,14 @@ int main(int argc, char* argv[]) } { - + + + memcpy(&croi, &zHeader.detSpec1, 8); + ROIxmin=croi.xmin; + ROIxmax=croi.xmax; + ROIymin=croi.ymin; + ROIymax=croi.ymax; + cout<<" ROIymin "<< ROIymin<Reset(); + his1001->Reset(); + his1002->Reset(); + his1060->Reset(); + his1061->Reset(); + his1062->Reset(); +#else + + his1000->Reset(); +#endif + + his2000->Reset(); if (!dophotonmap) his3000->Reset(); //FOR RAW ADC DISPLAY } @@ -187,10 +278,28 @@ int main(int argc, char* argv[]) if (fill1Ds) { if (((i%1024)<1004)&&((i%1024)>20)&&((i/1024)>20)) { //skip the pix near guardring for PH plots ichip= i/(256*256*4)*4+((i/256)%4) ; - +#ifdef JFSTRX + int new_ichip=0; + //exclude border rows of each group + if (ichip==1) { + if (i<=(1024*(64-2))) new_ichip=0; //chip 1 group 1 + if (i>(1024*(64+6))&&(i<=(1024*(64*2-4)))) new_ichip=1; //chip 1 group 2 + if (i>(1024*(64*2+5))) new_ichip=2; //chip 1 group 3 + } + + if (ichip==6) { + if (i<=(1024*(256+2*64-5))) new_ichip=7; //chip 6 group 3 + if (i>(1024*(256+2*64+4))&&(i<=(1024*(256+64*3-6)))) new_ichip=6; //chip 6 group 2 + if (i>(1024*(256+64*3-4))) new_ichip=5; //chip 6 group 1 + } + + hchip[new_ichip]->Fill(adcpedecorr,1); + +#else hchip[ichip]->Fill(adcpedecorr,1); +#endif - if (((i%256)<253)&&((i%256)>2)) his4500->Fill(adcpedecorrold,adcpedecorr,1); + // if (((i%256)<253)&&((i%256)>2)) his4500->Fill(adcpedecorrold,adcpedecorr,1); adcpedecorrold=adcpedecorr; @@ -200,33 +309,110 @@ int main(int argc, char* argv[]) - if ((show2Ds)) { - factor=2.0; - value=adcpedecorr; - if ((i%256==0)||(i%256==255)) value=int(value/factor); - if ((i/1024==255)||(i/1024==256)||(i/1024==767)||(i/1024==768)) value=int(value/factor); - - his1000->Fill(float(i%1024),float(int (i/1024)),value); - - if (!dophotonmap) his3000->Fill(float(i%1024),float(int (i/1024)) ,adcvalue); - his2000->Fill(float(i%1024),float(int (i/1024)) ,gain); - - value=(int)(hchptr[i]); - - if ((i%256==0)||(i%256==255)) value=int(value/factor); - if ((i/1024==255)||(i/1024==256)||(i/1024==767)||(i/1024==768)) value=int(value/factor); - if (dophotonmap) his3000->Fill(float(i%1024),float(int (i/1024)),float(value)); - - } }// for (i=0 ;idataMap[ipy][ipx])/2 << endl; + i=int (((decoder->dataMap[ipy][ipx])-sizeof(header)) /2); + group=(decoder->groupmap[ipy][ipx]); + + // cout<Fill(float(ipx),float(ipy),value); + // if ((ipy>165)&&(ipy<320+165)){ his1000->Fill(float(ipx)*5/3.0,float(ipy),value);} + // else { his1000->Fill(float(ipx),float(ipy),value);} + +#ifdef JFSTRX + static const int mc1g1y_start = 0; + static const int mc1g2y_start = g1_nrows; + static const int mc1g3y_start = g1_nrows+g2_nrows; + + static const int mc6g3y_start = g1_nrows+g2_nrows+g3_nrows; + static const int mc6g2y_start = mc6g3y_start + g3_nrows; + static const int mc6g1y_start = mc6g3y_start + g3_nrows + g2_nrows; + + if (group==0) { + if (ipy<165){ + his1000->Fill(float(ipx),float(ipy-mc1g1y_start),value);} + if (ipy>=mc6g1y_start){ + his1060->Fill(float(ipx),float(ipy-mc6g1y_start),value);} + } + if (group==1) { + if (ipy<(165+320)){ + his1001->Fill(float(ipx),float(ipy-mc1g2y_start),value);} + if ( (ipy>=mc6g2y_start) && (ipyFill(value,oldvalue,1.0); + oldvalue=value; + his1061->Fill(float(ipx),float(ipy-mc6g2y_start),value);} + } + if (group==2) { + if (ipy<(165+320+476)) + his1002->Fill(float(ipx),float(ipy-mc1g3y_start),value); + if ( (ipy>=mc6g3y_start) && (ipyFill(float(ipx),float(ipy-mc6g3y_start),value); + } + +#else + + his1000->Fill(float(ipx),float(ipy),value); + + + +#endif + + + + his2000->Fill(float(ipx),float(ipy) ,gain); + + // if (!dophotonmap)his3000->Fill(float(ipx),float(ipy) ,value); + // value=(int)(hchptr[i]); + // if (dophotonmap) his3000->Fill(float(ipx),float(ipy),float(value)); + + }// for ipx + } //for ipy + + for (ipx=0;ipx<1024;ipx++){ + for (ipy=0;ipy<512;ipy++){ + i=ipx+ipy*1024; + value= ((image_data[i]) & 0x3fff) -fpeded[i]; + if (!dophotonmap)his3000->Fill(float(ipx),float(ipy) ,value); + value=(int)(hchptr[i]); + if (dophotonmap) his3000->Fill(float(ipx),float(ipy),float(value)); + } + } + + }// endo of show2d + + + }// /end of do something if ((show2Ds)) { - for (ipx=0;ipxGetXaxis()->UnZoom(); + his1000->GetYaxis()->UnZoom(); + his1000->GetZaxis()->UnZoom(); + his1001->GetXaxis()->UnZoom(); + his1001->GetYaxis()->UnZoom(); + his1001->GetZaxis()->UnZoom(); + his1002->GetXaxis()->UnZoom(); + his1002->GetYaxis()->UnZoom(); + his1002->GetZaxis()->UnZoom(); + his1060->GetXaxis()->UnZoom(); + his1060->GetYaxis()->UnZoom(); + his1060->GetZaxis()->UnZoom(); + his1061->GetXaxis()->UnZoom(); + his1061->GetYaxis()->UnZoom(); + his1061->GetZaxis()->UnZoom(); + his1062->GetXaxis()->UnZoom(); + his1062->GetYaxis()->UnZoom(); + his1062->GetZaxis()->UnZoom(); +#else his1000->GetXaxis()->UnZoom(); his1000->GetYaxis()->UnZoom(); his1000->GetZaxis()->UnZoom(); +#endif his2000->GetXaxis()->UnZoom(); his2000->GetYaxis()->UnZoom(); @@ -540,7 +747,6 @@ void Plot1DHistos(void){ void Plot2DHistos(void){ gStyle->SetOptStat(0); - A3->cd(); // if (bw_flag) LoadPaletteBW(1.0); @@ -553,8 +759,24 @@ void Plot2DHistos(void){ } his1000->SetMinimum(-200); - his1000->Draw(); +#ifdef JFSTRX + p5->cd(); + his1000->Draw("colz"); + p3->cd(); + his1001->Draw("colz"); + p1->cd(); + his1002->Draw("colz"); + p2->cd(); + his1060->Draw("colz"); + p4->cd(); + his1061->Draw("colz"); + p6->cd(); + his1062->Draw("colz"); +#else + A3->cd(); + his1000->Draw("colz"); +#endif A3->Update(); A2->cd(); // if (bw_flag) LoadPaletteFalse(); @@ -565,9 +787,16 @@ void Plot2DHistos(void){ A2->Update(); A5->cd(); - his3000->GetXaxis()->SetRange(his1000->GetXaxis()->GetFirst(),his1000->GetXaxis()->GetLast()); - his3000->GetYaxis()->SetRange(his1000->GetYaxis()->GetFirst(),his1000->GetYaxis()->GetLast()); + //his3000->GetXaxis()->SetRange(his1000->GetXaxis()->GetFirst(),his1000->GetXaxis()->GetLast()); + //his3000->GetYaxis()->SetRange(his1000->GetYaxis()->GetFirst(),his1000->GetYaxis()->GetLast()); his3000->Draw("colz"); + + box = new TBox(ROIxmin,ROIymin,ROIxmax,ROIymax); + box->SetLineColor(kRed); + + box->SetFillStyle(0); + box->SetLineWidth(2); + box->Draw(); A5->Update(); A6->cd(); diff --git a/slsDetectorCalibration/jungfrauExecutables/onlinedisp_zmq.h b/slsDetectorCalibration/jungfrauExecutables/onlinedisp_zmq.h index 100bac801..e53b8f8cb 100644 --- a/slsDetectorCalibration/jungfrauExecutables/onlinedisp_zmq.h +++ b/slsDetectorCalibration/jungfrauExecutables/onlinedisp_zmq.h @@ -56,6 +56,7 @@ using namespace sls; #include "TMath.h" #include "TFile.h" #include "TStyle.h" +#include "TBox.h" #include "TSystem.h" #include "TTimer.h" #include "TProfile.h" @@ -81,7 +82,7 @@ using namespace sls; #define OFFSET 0 #define NBIN 500 #define MIN_POS -500.5 // 400.5 -#define MAX_POS 3499.5 //-100.5 +#define MAX_POS 8499.5 //-100.5 #define NCH 524288 @@ -92,7 +93,7 @@ int portnum; FILE * sfilefd; short* hchptr; // photon counted map "histogram" -int value; +int value,oldvalue; float factor=1.84; int npacket=0; int totalnpacket=0; @@ -105,6 +106,7 @@ struct hostent *server; int i=0; int ipx=0; +int ipy=0; bool haveconnection; @@ -112,6 +114,12 @@ TStyle *gStyle; TApplication* rootapp; TCanvas *A2; TCanvas *A3; +TPad *p1; +TPad *p2; +TPad *p3; +TPad *p4; +TPad *p5; +TPad *p6; TCanvas *A4; TCanvas *A5; TCanvas *A6; @@ -139,6 +147,18 @@ bool fill1Ds; bool pede_flag; bool dophotonmap; + typedef struct { + uint16_t xmin; + uint16_t xmax; + uint16_t ymin; + uint16_t ymax; + } receriverRoi_compact; + receriverRoi_compact croi; +TBox *box; +uint16_t ROIxmin; +uint16_t ROIxmax; +uint16_t ROIymin; +uint16_t ROIymax; int nx, ny; int nframes; int goout; @@ -154,7 +174,8 @@ int frameIndex_old; char pedefilename[128]; int framenum,bunchid; -TH2F* his1000; +TH2F* his1000;TH2F* his1001;TH2F* his1002; +TH2F* his1060;TH2F* his1061;TH2F* his1062; TH2F* his2000; TH2F* his3000; TH2F* his4500;