From 10209b75df3125108a5f72aa6cb8f1c9879905a0 Mon Sep 17 00:00:00 2001 From: Anna Bergamaschi Date: Thu, 15 Mar 2018 12:26:45 +0100 Subject: [PATCH 1/5] some changes in slsCalibration for moench --- slsDetectorCalibration/analogDetector.h | 130 ++++++-- .../gotthard25umZmqAnalysis.C | 126 +++++--- .../etaInterpolationAdaptiveBins.h | 76 +++-- .../interpolations/etaInterpolationBase.h | 291 ++---------------- .../interpolations/etaInterpolationPosXY.h | 42 ++- .../interpolations/noInterpolation.h | 36 ++- .../interpolations/slsInterpolation.h | 217 ++++++++++--- .../moenchExecutables/Makefile.cluster_finder | 14 +- .../moench03ClusterFinder.cpp | 91 +----- .../moench03Interpolation.cpp | 199 ++++++++++-- .../moenchExecutables/moench03MakeEta.cpp | 70 ++++- .../moench03OnTheFlyAnalysis.C | 160 ---------- .../moenchExecutables/readClusters.C | 267 ---------------- slsDetectorCalibration/pedestalSubtraction.h | 7 +- slsDetectorCalibration/singlePhotonDetector.h | 91 +++--- slsDetectorCalibration/single_photon_hit.h | 23 +- slsDetectorCalibration/tiffIO.cpp | 3 +- .../mythenDetectorServer/Makefile | 4 +- .../mythenDetectorServer/firmware_funcs.c | 17 +- .../mythenDetectorServer/gitInfo.txt | 16 +- .../mythenDetectorServer/gitInfoMythen.h | 12 +- .../mythenDetectorServer/mythenDetectorServer | Bin 389587 -> 390567 bytes 22 files changed, 842 insertions(+), 1050 deletions(-) delete mode 100644 slsDetectorCalibration/moenchExecutables/moench03OnTheFlyAnalysis.C delete mode 100644 slsDetectorCalibration/moenchExecutables/readClusters.C diff --git a/slsDetectorCalibration/analogDetector.h b/slsDetectorCalibration/analogDetector.h index 548a5e181..abd019948 100644 --- a/slsDetectorCalibration/analogDetector.h +++ b/slsDetectorCalibration/analogDetector.h @@ -253,16 +253,54 @@ template class analogDetector { \param iy pixel y coordinate \param cm 1 adds the value to common mod, 0 skips it. Defaults to 0. - not properly implemented */ - virtual void addToPedestal(double val, int ix, int iy=0){ - if (ix>=0 && ix=0 && iy=0 && ix=0 && iy0) { + val-= getCommonMode(ix, iy); + } stat[iy][ix].addToPedestal(val); - if (cmSub) { - if (det) if (det->isGood(ix, iy)==0) return; - cmSub->addToCommonMode(val, ix, iy); - }; + /* if (cmSub && cm>0) { */ + /* if (det) if (det->isGood(ix, iy)==0) return; */ + /* cmSub->addToCommonMode(val, ix, iy); */ + /* }; */ }; } - + + double getCommonMode(int ix, int iy) { + if (cmSub) return cmSub->getCommonMode(ix, iy); + else return 0; + } + + virtual void addToCommonMode(double val, int ix, int iy=0){ + + if (ix>=0 && ix=0 && iyisGood(ix, iy)==0) return; + if (getNumpedestals(ix,iy)>0) + cmSub->addToCommonMode(val-getPedestal(ix,iy), ix, iy); + }; + + } + } + + virtual void addToCommonMode(char *data){ + if (cmSub) { + for (int ix=xmin; ix0) + addToCommonMode(data, ix, iy); + } + } + cout << "cm " << getCommonMode(0,0) << " " << getCommonMode(1,0) << endl; + } + } + virtual void addToCommonMode(char *data, int ix, int iy=0){ + if (cmSub) { + if (det) if (det->isGood(ix, iy)==0) return; + if (getNumpedestals(ix,iy)>0) + cmSub->addToCommonMode(subtractPedestal(data,ix,iy,0), ix, iy); + } + } /** gets pedestal (and common mode) \param ix pixel x coordinate @@ -270,7 +308,13 @@ template class analogDetector { \param cm 0 (default) without common mode subtraction, 1 with common mode subtraction (if defined) \returns pedestal value */ - virtual double getPedestal(int ix, int iy, int cm=0){if (ix>=0 && ix=0 && iy0) return stat[iy][ix].getPedestal()-cmSub->getCommonMode(); else return stat[iy][ix].getPedestal(); else return -1;}; + virtual double getPedestal(int ix, int iy, int cm=0){ + if (ix>=0 && ix=0 && iy0) + return stat[iy][ix].getPedestal()+getCommonMode(ix,iy); + else return stat[iy][ix].getPedestal(); + else return -1; + }; /** gets pedestal rms (i.e. noise) @@ -278,9 +322,17 @@ template class analogDetector { \param iy pixel y coordinate \returns pedestal rms */ - virtual double getPedestalRMS(int ix, int iy){if (ix>=0 && ix=0 && iy=0 && ix=0 && iy=0 && ix=0 && iy class analogDetector { gm=new float[nx*ny]; for (int ix=0; ixgetCommonMode(); - else gm[iy*nx+ix]=stat[iy][ix].getPedestal(); } } @@ -538,17 +587,18 @@ template class analogDetector { \param data pointer to the data */ - virtual void addToPedestal(char *data) { + virtual void addToPedestal(char *data, int cm=0) { newFrame(); - - + if (cmSub) { + addToCommonMode(data); + } + for (int ix=xmin; ix class analogDetector { */ - virtual void addToPedestal(char *data, int ix, int iy=0) { + virtual void addToPedestal(char *data, int ix, int iy=0, int cm=0) { double val; @@ -618,7 +668,8 @@ template class analogDetector { val=dataSign*det->getValue(data, ix, iy); else val=((double*)data)[iy*nx+ix]; - + if (cm && cmSub) + val-=getCommonMode(ix,iy); addToPedestal(val,ix,iy); } return ; @@ -634,7 +685,7 @@ template class analogDetector { */ - virtual double *subtractPedestal(char *data, double *val=NULL) { + virtual double *subtractPedestal(char *data, double *val=NULL, int cm=0) { newFrame(); @@ -643,7 +694,7 @@ template class analogDetector { for (int ix=xmin; ix class analogDetector { - virtual double subtractPedestal(char *data, int ix, int iy=0) { + virtual double subtractPedestal(char *data, int ix, int iy=0, int cm=0) { double g=1.; if (ix>=0 && ix=0 && iygetValue(data, ix, iy)-getPedestal(ix,iy))/g; + + if (det) { + // cout << det->getValue(data, ix, iy) << " " << getPedestal(ix,iy) << " " << (dataSign*det->getValue(data, ix, iy)-getPedestal(ix,iy))/g << endl; + return (dataSign*det->getValue(data, ix, iy)-getPedestal(ix,iy, cm))/g; + } else - return (((double*)data)[iy*nx+ix]-getPedestal(ix,iy))/g; + return (((double*)data)[iy*nx+ix]-getPedestal(ix,iy,cm))/g; } }; @@ -700,15 +753,22 @@ template class analogDetector { virtual int getNPhotons(char *data, int ix, int iy=0) { int nph=0; - double v; + double v; + int cm=0; + if (cmSub) cm=1; if (ix>=0 && ix=0 && iy0) { v+=0.5*thr; nph=v/thr; return nph; - } else - return v; + } else { + // cout << v << endl; + //if (v>0) + return v; + //else + //return 0; + } } return 0; }; @@ -721,10 +781,14 @@ template class analogDetector { */ int *getNPhotons(char *data, int *nph=NULL) { - double val; + // double val; if (nph==NULL) nph=image; newFrame(); + + + addToCommonMode(data); + for (int ix=xmin; ix *filter=new analogDetector(det, 1, cm, 1000); filter->setROI(0,2560,0,1); char *buff;//[2*(48+1280*2)]; char *buff0; char *buff1; multiThreadedAnalogDetector *mt=new multiThreadedAnalogDetector(filter,nthreads,fifosize); - mt->setFrameMode(eFrame); + // mt->setFrameMode(eFrame); + mt->setFrameMode(ePedestal); mt->StartThreads(); mt->popFree(buff); buff0=buff; @@ -297,39 +289,44 @@ int main(int argc, char *argv[]){ cout << "************************************************************************** END OF FRAME" << end_of_acquisition << " !*****************************"<< endl; // return 0; - while (mt->isBusy()) {;} - image=filter->getImage(); - if (image) { - //fout=fopen(ofname,"w"); - cout << nf << "*****************" << endl; - for (int i=0; i<2560; i++) { - // // fprintf(fout,"%d %d\n",i,image[i]); - dout[i]=image[i]; - } - // // fclose(fout);; - } + // while (mt->isBusy()) {;} + // image=filter->getImage(); + // if (image) { + // fout=fopen(ofname,"w"); + // cout << nf << "*****************" << endl; + // for (int i=0; i<2560; i++) { + // fprintf(fout,"%d %d\n",i,image[i]); + // dout[i]=image[i]; + // if (image[i]<0) + // dout[i]=0; + // } + // fclose(fout); + // } - if (send) { - strcpy(fname0,filename0.c_str()); - strcpy(fname1,filename1.c_str()); - // zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,16,fileindex,400,400,400*400, acqIndex,frameIndex,fname, acqIndex, 0,0,0,0,0,0,0,0,0,0,0,1); - zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fname0, 0, 0,0,0,0,0,0,0,0,0,0,0,1); - zmqsocket3->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fname1, 0, 0,0,0,0,0,0,0,0,0,0,0,1); + if (send) { + // strcpy(fname0,filename0.c_str()); + // strcpy(fname1,filename1.c_str()); + // // zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,16,fileindex,400,400,400*400, acqIndex,frameIndex,fname, acqIndex, 0,0,0,0,0,0,0,0,0,0,0,1); + // zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fname0, 0, 0,0,0,0,0,0,0,0,0,0,0,1); + // zmqsocket3->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fname1, 0, 0,0,0,0,0,0,0,0,0,0,0,1); - zmqsocket2->SendData((char*)dout,size/2); - zmqsocket3->SendData(((char*)dout)+size/2,size/2); - // cprintf(GREEN, "Sent Data\n"); + // zmqsocket2->SendData((char*)dout,size/2); + // zmqsocket3->SendData(((char*)dout)+size/2,size/2); + // // cprintf(GREEN, "Sent Data\n"); - zmqsocket2->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); - zmqsocket3->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); + // zmqsocket2->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); + // zmqsocket3->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); - cprintf(RED, "Received %d frames\n", nf); + // cprintf(RED, "Received %d frames\n", nf); - } + zmqsocket2->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); + zmqsocket3->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); + } + mt->setFrameMode(eFrame); filter->clearImage(); // std::time(&end_time); // cout << std::ctime(&end_time) << " " << nf << endl; @@ -352,16 +349,61 @@ int main(int argc, char *argv[]){ irun=fileindex0; sprintf(ofname,"%s_%d.ph",filename0.c_str(),fileindex0); + + while (mt->isBusy()) {;} + image=filter->getImage(); + if (image) { + for (int i=0; i<2560; i++) { + // fprintf(fout,"%d %d\n",i,image[i]); + dout[i]=det->getChannel(buff,i,0);//image[i]+1000;//filter->getPedestal(i,0);// + // if (image[i]<0) + // dout[i]=0; + // cout << i << " " << image[i] << " " << dout[i] << endl; + } + } + + + + + + if (send) { + strcpy(fname0,filename0.c_str()); + strcpy(fname1,filename1.c_str()); + // zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,16,fileindex,400,400,400*400, acqIndex,frameIndex,fname, acqIndex, 0,0,0,0,0,0,0,0,0,0,0,1); + zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fname0, 0, 0,0,0,0,0,0,0,0,0,0,0,1); + zmqsocket3->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fname1, 0, 0,0,0,0,0,0,0,0,0,0,0,1); + + zmqsocket2->SendData((char*)dout,size/2); + zmqsocket3->SendData(((char*)dout)+size/2,size/2); + // cprintf(GREEN, "Sent Data\n"); + + + // zmqsocket2->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); + // zmqsocket3->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); + + // cprintf(RED, "Received %d frames\n", nf); + + } + + + if (nf>100) + mt->setFrameMode(eFrame); + filter->clearImage(); + + #endif - - + mt->pushData(buff); mt->nextThread(); + + mt->popFree(buff); buff0=buff; buff1=buff+offset*2+1280*2; + + nf++; diff --git a/slsDetectorCalibration/interpolations/etaInterpolationAdaptiveBins.h b/slsDetectorCalibration/interpolations/etaInterpolationAdaptiveBins.h index 2100380f5..3a785f8f2 100644 --- a/slsDetectorCalibration/interpolations/etaInterpolationAdaptiveBins.h +++ b/slsDetectorCalibration/interpolations/etaInterpolationAdaptiveBins.h @@ -181,53 +181,73 @@ class etaInterpolationAdaptiveBins : public etaInterpolationPosXY { double avg=tot_eta/((double)(nSubPixels*nSubPixels)); cout << "total eta entries is :"<< tot_eta << " avg: "<< avg << endl; cout << "Start " << endl; - double old_diff=calcDiff(avg, hhx, hhy), new_diff=old_diff+1; - cout << " diff= " << new_diff << endl; + double old_diff=calcDiff(avg, hhx, hhy), new_diff=old_diff+1, best_diff=old_diff; + cout << " diff= " << old_diff << endl; int iint=0; float *newhhx=new float[nbeta*nbeta]; //profile x float *newhhy=new float[nbeta*nbeta]; //profile y + float *besthhx=hhx; //profile x + float *besthhy=hhy; //profile y while (iint1 || etah[ii]<0 ) cout << "***"<< ii << etah[ii] << endl; */ - } - sprintf(tit,"/scratch/neweta_hhx_%d.tiff",iint); - WriteToTiff(etah, tit, etabins, etabins); +/* } */ +/* sprintf(tit,"/scratch/neweta_hhx_%d.tiff",iint); */ +/* WriteToTiff(etah, tit, etabins, etabins); */ - for (int ii=0; ii1 || etah[ii]<0 ) cout << "***"<< ii << etah[ii] << endl; +/* for (int ii=0; ii1 || etah[ii]<0 ) cout << "***"<< ii << etah[ii] << endl; */ +/* } */ +/* sprintf(tit,"/scratch/neweta_hhy_%d.tiff",iint); */ +/* WriteToTiff(etah, tit, etabins, etabins); */ +/* #endif */ + if (new_diff=etamax) { + cout << "aaa:" <2) - calcEta(totquad, sDum, etax, etay); - getInterpolatedPosition(x,y,etax,etay,corner,int_x,int_y); + /* virtual void getInterpolatedPosition(int x, int y, int *data, double &int_x, double &int_y)=0; */ + /* virtual void getInterpolatedPosition(int x, int y, double *data, double &int_x, double &int_y)=0; */ + /* virtual void getInterpolatedPosition(int x, int y, double totquad,int quad,double *cl,double &int_x, double &int_y)=0; */ + /* virtual void getInterpolatedPosition(int x, int y, double totquad,int quad,int *cl,double &int_x, double &int_y)=0; */ + /* virtual void getInterpolatedPosition(int x, int y, double etax, double etay, int corner, double &int_x, double &int_y)=0; */ - return; - }; + + /* virtual int addToFlatField(double totquad,int quad,int *cl,double &etax, double &etay)=0; */ + /* virtual int addToFlatField(double totquad,int quad,double *cl,double &etax, double &etay)=0; */ + /* virtual int addToFlatField(double *cluster, double &etax, double &etay)=0; */ + /* virtual int addToFlatField(int *cluster, double &etax, double &etay)=0; */ - virtual void getInterpolatedPosition(int x, int y, double totquad,int quad,double *cl,double &int_x, double &int_y) { - - double cc[2][2]; - double *cluster[3]; - int xoff, yoff; - cluster[0]=cl; - cluster[1]=cl+3; - cluster[2]=cl+6; - - switch (quad) { - case BOTTOM_LEFT: - xoff=0; - yoff=0; - break; - case BOTTOM_RIGHT: - xoff=1; - yoff=0; - break; - case TOP_LEFT: - xoff=0; - yoff=1; - break; - case TOP_RIGHT: - xoff=1; - yoff=1; - break; - default: - ; - } - double etax, etay; - if (nSubPixels>2) { - cc[0][0]=cluster[yoff][xoff]; - cc[1][0]=cluster[yoff+1][xoff]; - cc[0][1]=cluster[yoff][xoff+1]; - cc[1][1]=cluster[yoff+1][xoff+1]; - calcEta(totquad,cc,etax,etay); - } - return getInterpolatedPosition(x,y,etax, etay,quad,int_x,int_y); - - } - - - - - - - virtual void getInterpolatedPosition(int x, int y, double etax, double etay, int corner, double &int_x, double &int_y) - { - - - double xpos_eta=0,ypos_eta=0; - double dX,dY; - int ex,ey; - switch (corner) - { - case TOP_LEFT: - dX=-1.; - dY=0; - break; - case TOP_RIGHT: - ; - dX=0; - dY=0; - break; - case BOTTOM_LEFT: - dX=-1.; - dY=-1.; - break; - case BOTTOM_RIGHT: - dX=0; - dY=-1.; - break; - default: - cout << "bad quadrant" << endl; - dX=0.; - dY=0.; - } - - - if (nSubPixels>2) { - -#ifdef MYROOT1 - xpos_eta=(hhx->GetBinContent(hhx->GetXaxis()->FindBin(etax),hhy->GetYaxis()->FindBin(etay)))/((double)nSubPixels); - ypos_eta=(hhy->GetBinContent(hhx->GetXaxis()->FindBin(etax),hhy->GetYaxis()->FindBin(etay)))/((double)nSubPixels); -#endif -#ifndef MYROOT1 - ex=(etax-etamin)/etastep; - ey=(etay-etamin)/etastep; - if (ex<0) { - ex=0; - cout << "x*"<< ex << endl; - } - if (ex>=nbeta) { - ex=nbeta-1; - cout << "x?"<< ex << endl; - - } - if (ey<0) { - ey=0; - cout << "y*"<< ey << endl; - } - if (ey>=nbeta) { - ey=nbeta-1; - cout << "y?"<< ey << endl; - - } - - - - xpos_eta=(((double)hhx[(ey*nbeta+ex)]))+dX ;///((double)nSubPixels); - ypos_eta=(((double)hhy[(ey*nbeta+ex)]))+dY ;///((double)nSubPixels); - //else - //return 0; - -#endif - } else { - xpos_eta=0.5*dX+0.25; - ypos_eta=0.5*dY+0.25; - } - - int_x=((double)x) + xpos_eta+0.5; - int_y=((double)y) + ypos_eta+0.5; - - - } - - - - - - - ///////////////////////////////////////////////////////////////////////////////////////////////// - virtual void getPositionETA3(int x, int y, double *data, double &int_x, double &int_y) - { - double sDum[2][2]; - double tot, totquad; - double eta3x,eta3y; - double ex,ey; - - calcQuad(data, tot, totquad, sDum); - calcEta3(data,eta3x, eta3y,tot); - - double xpos_eta,ypos_eta; - -#ifdef MYROOT1 - xpos_eta=((hhx->GetBinContent(hhx->GetXaxis()->FindBin(eta3x),hhy->GetYaxis()->FindBin(eta3y))))/((double)nSubPixels); - ypos_eta=((hhy->GetBinContent(hhx->GetXaxis()->FindBin(eta3x),hhy->GetYaxis()->FindBin(eta3y))))/((double)nSubPixels); - -#endif -#ifndef MYROOT1 - ex=(eta3x-etamin)/etastep; - ey=(eta3y-etamin)/etastep; - - if (ex<0) ex=0; - if (ex>=nbeta) ex=nbeta-1; - if (ey<0) ey=0; - if (ey>=nbeta) ey=nbeta-1; - - xpos_eta=(((double)hhx[(int)(ey*nbeta+ex)]))/((double)nSubPixels); - ypos_eta=(((double)hhy[(int)(ey*nbeta+ex)]))/((double)nSubPixels); -#endif - - int_x=((double)x) + xpos_eta; - int_y=((double)y) + ypos_eta; - - return; - }; - - virtual int addToFlatField(double totquad,int quad,double *cl,double &etax, double &etay) { - double cc[2][2]; - double *cluster[3]; - int xoff, yoff; - cluster[0]=cl; - cluster[1]=cl+3; - cluster[2]=cl+6; - - switch (quad) { - case BOTTOM_LEFT: - xoff=0; - yoff=0; - break; - case BOTTOM_RIGHT: - xoff=1; - yoff=0; - break; - case TOP_LEFT: - xoff=0; - yoff=1; - break; - case TOP_RIGHT: - xoff=1; - yoff=1; - break; - default: - ; - } - cc[0][0]=cluster[yoff][xoff]; - cc[1][0]=cluster[yoff+1][xoff]; - cc[0][1]=cluster[yoff][xoff+1]; - cc[1][1]=cluster[yoff+1][xoff+1]; - - /* cout << cl[0] << " " << cl[1] << " " << cl[2] << endl; */ - /* cout << cl[3] << " " << cl[4] << " " << cl[5] << endl; */ - /* cout << cl[6] << " " << cl[7] << " " << cl[8] << endl; */ - /* cout <<"******"<Fill(etax,etay); #endif #ifndef MYROOT1 + int ex,ey; ex=(etax-etamin)/etastep; ey=(etay-etamin)/etastep; - // cout << etax << " " << ex << " " << etay << " " << ey << " " << ey*nbeta+ex << endl; if (ey=0 && ey>=0) heta[ey*nbeta+ex]++; - // cout << "*"<< etax << " " << etay << endl; - /* cout << etax << " " << etay << " " << ex << " " << ey << " " << ey*nbeta+ex << endl; */ - /* cout <<"********"<< endl << endl ; */ #endif return 0; -}; + }; + + // virtual void prepareInterpolation(int &ok)=0; + protected: #ifdef MYROOT1 diff --git a/slsDetectorCalibration/interpolations/etaInterpolationPosXY.h b/slsDetectorCalibration/interpolations/etaInterpolationPosXY.h index 5417f165c..e730d2df6 100644 --- a/slsDetectorCalibration/interpolations/etaInterpolationPosXY.h +++ b/slsDetectorCalibration/interpolations/etaInterpolationPosXY.h @@ -2,24 +2,27 @@ #define ETA_INTERPOLATION_POSXY_H -#include "tiffIO.h" +//#include "tiffIO.h" #include "etaInterpolationBase.h" +#include "eta2InterpolationBase.h" +#include "eta3InterpolationBase.h" -class etaInterpolationPosXY : public etaInterpolationBase{ +class etaInterpolationPosXY : public virtual etaInterpolationBase{ public: - etaInterpolationPosXY(int nx=400, int ny=400, int ns=25, int nb=-1, double emin=1, double emax=0) : etaInterpolationBase(nx,ny,ns, nb, emin,emax){}; + etaInterpolationPosXY(int nx=400, int ny=400, int ns=25, int nb=-1, double emin=1, double emax=0) : etaInterpolationBase(nx,ny,ns, nb, emin,emax){ + // cout << "epxy " << nb << " " << emin << " " << emax << endl; cout << nbeta << " " << etamin << " " << etamax << endl; + }; - etaInterpolationPosXY(etaInterpolationPosXY *orig): etaInterpolationBase(orig){}; + etaInterpolationPosXY(etaInterpolationPosXY *orig): etaInterpolationBase(orig) {}; - virtual etaInterpolationPosXY* Clone() { + virtual etaInterpolationPosXY* Clone()=0;/** { return new etaInterpolationPosXY(this); - }; + };*/ virtual void prepareInterpolation(int &ok) { - cout <<"?"<< endl; ok=1; #ifdef MYROOT1 if (hhx) delete hhx; @@ -114,10 +117,6 @@ class etaInterpolationPosXY : public etaInterpolationBase{ // cout << "y " << nbeta << " " << (ii+1)*tot_eta_x*bsize << " " << ii << endl; - - - - } #ifdef SAVE_ALL @@ -150,4 +149,25 @@ class etaInterpolationPosXY : public etaInterpolationBase{ }; +class eta2InterpolationPosXY : public virtual eta2InterpolationBase, public virtual etaInterpolationPosXY { + public: + eta2InterpolationPosXY(int nx=400, int ny=400, int ns=25, int nb=-1, double emin=1, double emax=0) : etaInterpolationBase(nx,ny,ns, nb, emin,emax),eta2InterpolationBase(nx,ny,ns, nb, emin,emax),etaInterpolationPosXY(nx,ny,ns, nb, emin,emax){ + // cout << "e2pxy " << nb << " " << emin << " " << emax << endl; + }; + eta2InterpolationPosXY(eta2InterpolationPosXY *orig): etaInterpolationBase(orig), etaInterpolationPosXY(orig) {}; + + virtual eta2InterpolationPosXY* Clone() { return new eta2InterpolationPosXY(this);}; + +}; +class eta3InterpolationPosXY : public virtual eta3InterpolationBase, public virtual etaInterpolationPosXY { + public: + eta3InterpolationPosXY(int nx=400, int ny=400, int ns=25, int nb=-1, double emin=1, double emax=0) : etaInterpolationBase(nx,ny,ns, nb, emin,emax),eta3InterpolationBase(nx,ny,ns, nb, emin,emax), etaInterpolationPosXY(nx,ny,ns, nb, emin,emax){ + cout << "e3pxy " << nbeta << " " << etamin << " " << etamax << " " << nSubPixels<< endl; + }; + + eta3InterpolationPosXY(eta3InterpolationPosXY *orig): etaInterpolationBase(orig), etaInterpolationPosXY(orig) {}; + + virtual eta3InterpolationPosXY* Clone() { return new eta3InterpolationPosXY(this);}; +}; + #endif diff --git a/slsDetectorCalibration/interpolations/noInterpolation.h b/slsDetectorCalibration/interpolations/noInterpolation.h index c5036a9f4..6c199399f 100644 --- a/slsDetectorCalibration/interpolations/noInterpolation.h +++ b/slsDetectorCalibration/interpolations/noInterpolation.h @@ -38,13 +38,31 @@ class noInterpolation : public slsInterpolation{ return ; }; + + virtual void getInterpolatedPosition(int x, int y, int *data, double &int_x, double &int_y) + { + return getInterpolatedPosition(x, y, (double*)NULL, int_x, int_y); + } + + virtual void getInterpolatedPosition(int x, int y, double etax, double etay, int corner, double &int_x, double &int_y) { - getInterpolatedPosition(x, y, NULL, int_x, int_y); + getInterpolatedPosition(x, y, (double*)NULL, int_x, int_y); }; + + + + virtual void getInterpolatedPosition(int x, int y, double totquad,int quad,double *cl,double &etax, double &etay){ - getInterpolatedPosition(x, y, NULL, etax, etay); + getInterpolatedPosition(x, y, (double*)NULL, etax, etay); }; + + + virtual void getInterpolatedPosition(int x, int y, double totquad,int quad,int *cl,double &etax, double &etay){ + getInterpolatedPosition(x, y, (double*)NULL, etax, etay); + }; + + ////////////////////////////////////////////////////////////////////////////////////// virtual void getPositionETA3(int x, int y, double *data, double &int_x, double &int_y) @@ -55,13 +73,27 @@ class noInterpolation : public slsInterpolation{ return ; }; + + virtual void getPositionETA3(int x, int y, int *data, double &int_x, double &int_y) + { + return getPositionETA3(x, y, (double*)NULL, int_x, int_y); + }; + + + ////////////////////////////////////////////////////////////////////////////////////// virtual int addToFlatField(double *cluster, double &etax, double &etay){return 0;}; + + virtual int addToFlatField(int *cluster, double &etax, double &etay){return 0;}; + virtual int addToFlatField(double etax, double etay){return 0;}; virtual int addToFlatField(double totquad,int quad,double *cl,double &etax, double &etay){return 0;}; + virtual int addToFlatField(double totquad,int quad,int *cl,double &etax, double &etay){return 0;}; + + protected: ; // TRandom *eventGenerator; diff --git a/slsDetectorCalibration/interpolations/slsInterpolation.h b/slsDetectorCalibration/interpolations/slsInterpolation.h index 559f33597..ea79eb639 100644 --- a/slsDetectorCalibration/interpolations/slsInterpolation.h +++ b/slsDetectorCalibration/interpolations/slsInterpolation.h @@ -8,7 +8,10 @@ #endif #include +#ifndef MY_TIFF_IO_H #include "tiffIO.h" +#endif + #ifndef DEF_QUAD #define DEF_QUAD enum quadrant { @@ -88,7 +91,7 @@ hint=new TH2F("hint","hint",ns*nx, 0, nx, ns*ny, 0, ny); void *writeInterpolatedImage(const char * imgname) { - cout << "!" <=0 && ix<(nPixelsX*nSubPixels) && iy<(nSubPixels*nPixelsY) && iy>=0 )(*(hint+ix+iy*nPixelsX*nSubPixels))+=1; return hint; @@ -147,9 +154,10 @@ hint=new TH2F("hint","hint",ns*nx, 0, nx, ns*ny, 0, ny); virtual int addToFlatField(double *cluster, double &etax, double &etay)=0; - virtual int addToFlatField(double etax, double etay)=0; - + virtual int addToFlatField(int *cluster, double &etax, double &etay)=0; + virtual int addToFlatField(double totquad,int quad,int *cl,double &etax, double &etay)=0; virtual int addToFlatField(double totquad,int quad,double *cluster,double &etax, double &etay)=0; + virtual int addToFlatField(double etax, double etay)=0; #ifdef MYROOT1 virtual TH2D *getFlatField(){return NULL;}; @@ -167,6 +175,14 @@ hint=new TH2F("hint","hint",ns*nx, 0, nx, ns*ny, 0, ny); //virtual void Streamer(TBuffer &b); + static int calcQuad(int *cl, double &sum, double &totquad, double sDum[2][2]){ + double cli[3*3];//=new int[3*3]; + for (int i=0; i<9; i++) + cli[i]=cl[i]; + return calcQuad(cli, sum, totquad, sDum); + + } + static int calcQuad(double *cl, double &sum, double &totquad, double sDum[2][2]){ @@ -175,48 +191,64 @@ hint=new TH2F("hint","hint",ns*nx, 0, nx, ns*ny, 0, ny); cluster[0]=cl; cluster[1]=cl+3; cluster[2]=cl+6; + + sum=0; + double sumBL=0; + double sumTL=0; + double sumBR=0; + double sumTR=0; + int xoff=0, yoff=0; + for (int ix=0; ix<3; ix++) { + for (int iy=0; iy<3; iy++) { + sum+=cluster[iy][ix]; + if (ix<=1 && iy<=1) sumBL+=cluster[iy][ix]; + if (ix<=1 && iy>=1) sumTL+=cluster[iy][ix]; + if (ix>=1 && iy<=1) sumBR+=cluster[iy][ix]; + if (ix>=1 && iy>=1) sumTR+=cluster[iy][ix]; + } + } - sum = cluster[0][0] + cluster[1][0] + cluster[2][0] + cluster[0][1] + cluster[1][1] + cluster[2][1] + cluster[0][2] + cluster[1][2] + cluster[2][2]; - - double sumBL = cluster[0][0] + cluster[1][0] + cluster[0][1] + cluster[1][1]; //2 ->BL - double sumTL = cluster[1][0] + cluster[2][0] + cluster[2][1] + cluster[1][1]; //0 ->TL - double sumBR = cluster[0][1] + cluster[0][2] + cluster[1][2] + cluster[1][1]; //3 ->BR - double sumTR = cluster[1][2] + cluster[2][1] + cluster[2][2] + cluster[1][1]; //1 ->TR - double sumMax = 0; - double t, r; - - // if(sumTL >= sumMax){ - sDum[0][0] = cluster[0][0]; sDum[1][0] = cluster[1][0]; - sDum[0][1] = cluster[0][1]; sDum[1][1] = cluster[1][1]; + /* sDum[0][0] = cluster[0][0]; sDum[1][0] = cluster[1][0]; */ + /* sDum[0][1] = cluster[0][1]; sDum[1][1] = cluster[1][1]; */ corner = BOTTOM_LEFT; - sumMax=sumBL; - // } - - if(sumTL >= sumMax){ - sDum[0][0] = cluster[1][0]; sDum[1][0] = cluster[2][0]; - sDum[0][1] = cluster[1][1]; sDum[1][1] = cluster[2][1]; + totquad=sumBL; + + if(sumTL >= totquad){ + /* sDum[0][0] = cluster[1][0]; sDum[1][0] = cluster[2][0]; */ + /* sDum[0][1] = cluster[1][1]; sDum[1][1] = cluster[2][1]; */ + corner = TOP_LEFT; - sumMax=sumTL; + totquad=sumTL; + xoff=0; + yoff=1; } - if(sumBR >= sumMax){ - sDum[0][0] = cluster[0][1]; sDum[1][0] = cluster[1][1]; - sDum[0][1] = cluster[0][2]; sDum[1][1] = cluster[1][2]; + if(sumBR >= totquad){ + /* sDum[0][0] = cluster[0][1]; sDum[1][0] = cluster[1][1]; */ + /* sDum[0][1] = cluster[0][2]; sDum[1][1] = cluster[1][2]; */ + xoff=1; + yoff=0; corner = BOTTOM_RIGHT; - sumMax=sumBR; + totquad=sumBR; } - if(sumTR >= sumMax){ - sDum[0][0] = cluster[1][1]; sDum[1][0] = cluster[2][1]; - sDum[0][1] = cluster[1][2]; sDum[1][1] = cluster[2][2]; - + if(sumTR >= totquad){ + xoff=1; + yoff=1; + /* sDum[0][0] = cluster[1][1]; sDum[1][0] = cluster[2][1]; */ + /* sDum[0][1] = cluster[1][2]; sDum[1][1] = cluster[2][2]; */ corner = TOP_RIGHT; - sumMax=sumTR; + totquad=sumTR; } - totquad=sumMax; + + for (int ix=0; ix<2; ix++) { + for (int iy=0; iy<2; iy++) { + sDum[iy][ix] = cluster[iy+yoff][ix+xoff]; + } + } return corner; @@ -235,7 +267,6 @@ hint=new TH2F("hint","hint",ns*nx, 0, nx, ns*ny, 0, ny); } - static int calcEta(double *cl, double &etax, double &etay, double &sum, double &totquad, double sDum[2][2]) { int corner = calcQuad(cl,sum,totquad,sDum); calcEta(totquad, sDum, etax, etay); @@ -244,6 +275,14 @@ hint=new TH2F("hint","hint",ns*nx, 0, nx, ns*ny, 0, ny); } + static int calcEta(int *cl, double &etax, double &etay, double &sum, double &totquad, double sDum[2][2]) { + int corner = calcQuad(cl,sum,totquad,sDum); + calcEta(totquad, sDum, etax, etay); + + return corner; + } + + static int calcEtaL(double totquad, int corner, double sDum[2][2], double &etax, double &etay){ double t,r, toth, totv; if (totquad>0) { @@ -294,6 +333,13 @@ hint=new TH2F("hint","hint",ns*nx, 0, nx, ns*ny, 0, ny); return corner; } + static int calcEtaL(int *cl, double &etax, double &etay, double &sum, double &totquad, double sDum[2][2]) { + int corner = calcQuad(cl,sum,totquad,sDum); + calcEtaL(totquad, corner, sDum, etax, etay); + + return corner; + } + static int calcEtaC3(double *cl, double &etax, double &etay, double &sum, double &totquad, double sDum[2][2]){ @@ -306,23 +352,95 @@ hint=new TH2F("hint","hint",ns*nx, 0, nx, ns*ny, 0, ny); + static int calcEtaC3(int *cl, double &etax, double &etay, double &sum, double &totquad, double sDum[2][2]){ + + int corner = calcQuad(cl,sum,totquad,sDum); + calcEta(sum, sDum, etax, etay); + return corner; + + } + + + static int calcEta3(double *cl, double &etax, double &etay, double &sum) { - double l,r,t,b; - sum=cl[0]+cl[1]+cl[2]+cl[3]+cl[4]+cl[5]+cl[6]+cl[7]+cl[8]; + double l=0,r=0,t=0,b=0, val; + sum=0; + // int quad; + for (int ix=0; ix<3; ix++) { + for (int iy=0; iy<3; iy++) { + val=cl[iy+3*ix]; + sum+=val; + if (iy==0) l+=val; + if (iy==2) r+=val; + if (ix==0) b+=val; + if (ix==2) t+=val; + } + } if (sum>0) { - l=cl[0]+cl[3]+cl[6]; - r=cl[2]+cl[5]+cl[8]; - b=cl[0]+cl[1]+cl[2]; - t=cl[6]+cl[7]+cl[8]; etax=(-l+r)/sum; etay=(-b+t)/sum; } + /* if (etax<-1 || etax>1 || etay<-1 || etay>1) { */ + /* cout << "**********" << etax << " " << etay << endl; */ + /* for (int ix=0; ix<3; ix++) { */ + /* for (int iy=0; iy<3; iy++) { */ + /* cout << cl[iy+3*ix] << "\t" ; */ + + /* } */ + /* cout << endl; */ + /* } */ + /* cout << sum << " " << l << " " << r << " " << t << " " << b << endl; */ + + /* } */ + + + if (etax>=0 && etay>=0) + return TOP_RIGHT; + if (etax<0 && etay>=0) + return TOP_LEFT; + if (etax<0 && etay<0) + return BOTTOM_LEFT; + return BOTTOM_RIGHT; + } + + + static int calcEta3(int *cl, double &etax, double &etay, double &sum) { + double cli[9]; + for (int ix=0; ix<9; ix++) cli[ix]=cl[ix]; + + return calcEta3(cli, etax, etay, sum); + } + + + static int calcMyEta(double totquad, int quad, double *cl, double &etax, double &etay) { + double l,r,t,b, sum; + int yoff; + switch (quad) { + case BOTTOM_LEFT: + case BOTTOM_RIGHT: + yoff=0; + break; + case TOP_LEFT: + case TOP_RIGHT: + yoff=1; + break; + default: + ; + } + l=cl[0+yoff*3]+cl[0+yoff*3+3]; + r=cl[2+yoff*3]+cl[2+yoff*3+3]; + b=cl[0+yoff*3]+cl[1+yoff*3]*cl[2+yoff*3]; + t=cl[0+yoff*3+3]+cl[1+yoff*3+3]*cl[0+yoff*3+3]; + sum=t+b; + if (sum>0) { + etax=(-l+r)/sum; + etay=(+t)/sum; + } return -1; } - - static int calcMyEta(double totquad, int quad, double *cl, double &etax, double &etay) { + static int calcMyEta(double totquad, int quad, int *cl, double &etax, double &etay) { double l,r,t,b, sum; int yoff; switch (quad) { @@ -367,6 +485,21 @@ hint=new TH2F("hint","hint",ns*nx, 0, nx, ns*ny, 0, ny); } + static int calcEta3X(int *cl, double &etax, double &etay, double &sum) { + double l,r,t,b; + sum=cl[0]+cl[1]+cl[2]+cl[3]+cl[4]+cl[5]+cl[6]+cl[7]+cl[8]; + if (sum>0) { + l=cl[3]; + r=cl[5]; + b=cl[1]; + t=cl[7]; + etax=(-l+r)/sum; + etay=(-b+t)/sum; + } + return -1; + } + + diff --git a/slsDetectorCalibration/moenchExecutables/Makefile.cluster_finder b/slsDetectorCalibration/moenchExecutables/Makefile.cluster_finder index 9b4c27588..b8414b77f 100644 --- a/slsDetectorCalibration/moenchExecutables/Makefile.cluster_finder +++ b/slsDetectorCalibration/moenchExecutables/Makefile.cluster_finder @@ -11,23 +11,29 @@ MAIN=moench03ClusterFinder.cpp #-lhdf5 #DESTDIR?=../bin -all: moenchClusterFinder moenchMakeEta moenchInterpolation moenchNoInterpolation +all: moenchClusterFinder moenchMakeEta moenchInterpolation moenchNoInterpolation moenchPhotonCounter moenchAnalog moenchClusterFinder: $(MAIN) $(INCS) clean - g++ -o moenchClusterFinder $(MAIN) $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL -DOLDDATA + g++ -o moenchClusterFinder $(MAIN) $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL -DOLDDATA #-DNEWRECEIVER moenchMakeEta: moench03MakeEta.cpp $(INCS) clean g++ -o moenchMakeEta moench03MakeEta.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL moenchInterpolation: moench03Interpolation.cpp $(INCS) clean - g++ -o moenchInterpolation moench03Interpolation.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL + g++ -o moenchInterpolation moench03Interpolation.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL moenchNoInterpolation: moench03NoInterpolation.cpp $(INCS) clean g++ -o moenchNoInterpolation moench03NoInterpolation.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL +moenchPhotonCounter: moenchPhotonCounter.cpp $(INCS) clean + g++ -o moenchPhotonCounter moenchPhotonCounter.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL -DNEWRECEIVER + +moenchAnalog: moenchPhotonCounter.cpp $(INCS) clean + g++ -o moenchAnalog moenchPhotonCounter.cpp $(LDFLAG) $(INCDIR) $(LIBHDF5) $(LIBRARYCBF) -DSAVE_ALL -DNEWRECEIVER -DANALOG + clean: - rm -f moenchClusterFinder moenchMakeEta moenchInterpolation moenchNoInterpolation + rm -f moenchClusterFinder moenchMakeEta moenchInterpolation moenchNoInterpolation moenchPhotonCounter diff --git a/slsDetectorCalibration/moenchExecutables/moench03ClusterFinder.cpp b/slsDetectorCalibration/moenchExecutables/moench03ClusterFinder.cpp index f6f8d470c..8a58566db 100644 --- a/slsDetectorCalibration/moenchExecutables/moench03ClusterFinder.cpp +++ b/slsDetectorCalibration/moenchExecutables/moench03ClusterFinder.cpp @@ -119,53 +119,11 @@ int main(int argc, char *argv[]) { cout << "input directory is " << indir << endl; cout << "output directory is " << outdir << endl; cout << "fileformat is " << fformat << endl; - // cout << "pedestal file is " << fformat << endl; std::time(&end_time); cout << std::ctime(&end_time) << endl; - // filter->setFrameMode(eFrame); - // mt->setFrameMode(ePedestal); - // cout << pedfname<< endl; - - // filebin.open((const char *)(pedfname), ios::in | ios::binary); - // //filebin.open((const char *)(fname), ios::in | ios::binary); - - // // //open file - // if (filebin.is_open()){ - // // //while read frame - // cout << "pedestal file " << endl; - // while (decoder->readNextFrame(filebin, ff, np,data)) { - // // cout << ff << " " << np << endl; - // // //push - // // mt->pushData(buff); - // // // //pop - // //mt->nextThread(); - // // // // cout << " " << (void*)buff; - // //mt->popFree(buff); - // filter->processData(data); - // } - // filebin.close(); - // // //close file - // // //join threads - // // while (mt->isBusy()) {;}//wait until all data are processed from the queues - // // cout << outfname << endl; - // // filter->writePedestals(outfname); - // // sprintf(outfname,"%s/%s_pedimg.tiff",outdir,fn); - - // // cout << outfname << endl; - - // // filter->writeImage(outfname); - // // //mt->clearImage(); - // } else - // cout << "Could not open "<< pedfname << " for reading " << endl; - - - - // // for (int ix=0; ix<400; ix++) - // // for (int iy=0; iy<400; iy++) - // // cout << ix << " " << iy << " " << filter->getPedestal(ix,iy) << " " << filter->getPedestalRMS(ix,iy) << endl; - + @@ -176,9 +134,7 @@ int main(int argc, char *argv[]) { char* buff; multiThreadedAnalogDetector *mt=new multiThreadedAnalogDetector(filter,nthreads,fifosize); - - // mt->setFrameMode(eFrame); //need to find a way to switch between flat and frames! - // mt->prepareInterpolation(ok); + mt->setFrameMode(eFrame); mt->StartThreads(); mt->popFree(buff); @@ -187,46 +143,7 @@ int main(int argc, char *argv[]) { cout << "mt " << endl; int ifr=0; - // //loop on files - // mt->setFrameMode(eFrame); - //mt->setFrameMode(eFlat); - - - - - - - // for (int irun=runmin; irunreadNextFrame(filebin, ff, np,buff)) { - // // cout << "*"<pushData(buff); - // // // //pop - // mt->nextThread(); - // // // // cout << " " << (void*)buff; - // mt->popFree(buff); - - // } - // // cout << "--" << endl; - // filebin.close(); - - - // } - - // } - - // while (mt->isBusy()) {;}//wait until all data are processed from the queues - // mt->clearImage(); + for (int irun=runmin; irunnextThread(); // // // cout << " " << (void*)buff; mt->popFree(buff); + ifr++; + if (ifr%10000==0) cout << ifr << " " << ff << endl; ff=-1; } cout << "--" << endl; diff --git a/slsDetectorCalibration/moenchExecutables/moench03Interpolation.cpp b/slsDetectorCalibration/moenchExecutables/moench03Interpolation.cpp index 87ce84af0..2d852a164 100644 --- a/slsDetectorCalibration/moenchExecutables/moench03Interpolation.cpp +++ b/slsDetectorCalibration/moenchExecutables/moench03Interpolation.cpp @@ -2,53 +2,101 @@ #include "ansi.h" #include -#include "moench03T1ZmqData.h" -#include "single_photon_hit.h" +//#include "moench03T1ZmqData.h" +//#define DOUBLE_SPH +//#define MANYFILES -// #include "etaInterpolationPosXY.h" -#include "etaInterpolationAdaptiveBins.h" +#ifdef DOUBLE_SPH +#include "single_photon_hit_double.h" +#endif + +#ifndef DOUBLE_SPH +#include "single_photon_hit.h" +#endif + +#include "etaInterpolationPosXY.h" +#include "noInterpolation.h" +//#include "etaInterpolationAdaptiveBins.h" +//#include "etaInterpolationRandomBins.h" using namespace std; #define NC 400 #define NR 400 +#define XTALK + int main(int argc, char *argv[]) { /** * trial.o [socket ip] [starting port number] [outfname] * */ - if (argc<7) { - cout << "Wrong usage! Should be: "<< argv[0] << " infile " << " etafile outfile runmin runmax ns" << endl; + if (argc<9) { + cout << "Wrong usage! Should be: "<< argv[0] << " infile " << " etafile outfile runmin runmax ns cmin cmax" << endl; return 1; } char infname[10000]; + char fname[10000]; char outfname[10000]; int runmin=atoi(argv[4]); int runmax=atoi(argv[5]); int nsubpix=atoi(argv[6]); + float cmin=atof(argv[7]); + float cmax=atof(argv[8]); int etabins=1000;//nsubpix*2*100; double etamin=-1, etamax=2; + double eta3min=-2, eta3max=2; int quad; double sum, totquad; double sDum[2][2]; double etax, etay, int_x, int_y; + double eta3x, eta3y, int3_x, int3_y, noint_x, noint_y; int ok; - + int f0=-1; int ix, iy, isx, isy; - - + int nframes=0, lastframe=-1; + double d_x, d_y, res=5, xx, yy; +#ifdef MANYFILES + int ff=1000; +#endif + int nph=0, badph=0, totph=0; FILE *f=NULL; +#ifdef DOUBLE_SPH + single_photon_hit_double cl(3,3); +#endif + +#ifndef DOUBLE_SPH single_photon_hit cl(3,3); - // etaInterpolationPosXY *interp=new etaInterpolationPosXY(NC, NR, nsubpix, etabins, etamin, etamax); - etaInterpolationAdaptiveBins *interp=new etaInterpolationAdaptiveBins (NC, NR, nsubpix, etabins, etamin, etamax); +#endif + +#ifdef XTALK + int old_val[3][3]; + int new_val[3][3]; + double xcorr=0.04; + + // int ix=0; +#endif + + + eta2InterpolationPosXY *interp=new eta2InterpolationPosXY(NC, NR, nsubpix, etabins, etamin, etamax); + eta3InterpolationPosXY *interp3=new eta3InterpolationPosXY(NC, NR, nsubpix, etabins, eta3min, eta3max); + noInterpolation *dummy=new noInterpolation(NC, NR, nsubpix); + noInterpolation *nointerp=new noInterpolation(NC, NR, nsubpix); + noInterpolation *mult=new noInterpolation(NC, NR, nsubpix); + //etaInterpolationAdaptiveBins *interp=new etaInterpolationAdaptiveBins (NC, NR, nsubpix, etabins, etamin, etamax); + //etaInterpolationRandomBins *interp=new etaInterpolationRandomBins (NC, NR, nsubpix, etabins, etamin, etamax); //#ifndef FF cout << "read ff " << argv[2] << endl; - interp->readFlatField(argv[2]); + sprintf(fname,"%s_eta2.tiff",argv[2]); + interp->readFlatField(fname); interp->prepareInterpolation(ok); + + sprintf(fname,"%s_eta3.tiff",argv[2]); + interp3->readFlatField(fname); + interp3->prepareInterpolation(ok); //#endif int *img; @@ -70,20 +118,99 @@ int main(int argc, char *argv[]) { #endif - - for (int irun=runmin; iruncalcQuad(cl.get_cluster(), sum, totquad, sDum); - if (sum>200 && sum<580) { - interp->getInterpolatedPosition(cl.x,cl.y, totquad,quad,cl.get_cluster(),int_x, int_y); - interp->addToImage(int_x, int_y); + totph++; + if (lastframe!=cl.iframe) { + lastframe=cl.iframe; + // cout << cl.iframe << endl; + // f0=cl.iframe; + if (nframes==0) f0=lastframe; + nframes++; +#ifdef MANYFILES + if (nframes%ff==0) { + sprintf(outfname,argv[3],irun,nframes-ff); + cout << outfname << endl; + interp->writeInterpolatedImage(outfname); + interp->clearInterpolatedImage(); } +#endif + + } +#ifdef XTALK + if ((cl.x+1)%25!=0) { + for (int ix=-1; ix<2; ix++) { + for (int iy=-1; iy<2; iy++) { + old_val[iy+1][ix+1]=cl.get_data(ix,iy); + if (ix>=0) { + new_val[iy+1][ix+1]=old_val[iy+1][ix+1]-old_val[iy+1][ix]*xcorr; + cl.set_data(new_val[iy+1][ix+1],ix,iy); + } + } + } + } +#endif + quad=interp->calcQuad(cl.get_cluster(), sum, totquad, sDum); + if (sum>cmin && totquad/sum>0.8 && totquad/sum<1.2 && totquad200 && sum<580) { + // interp->getInterpolatedPosition(cl.x,cl.y, totquad,quad,cl.get_cluster(),int_x, int_y); + interp->getInterpolatedPosition(cl.x,cl.y, cl.get_cluster(),int_x, int_y); + interp->addToImage(int_x, int_y); + interp3->getInterpolatedPosition(cl.x,cl.y, cl.get_cluster(),int3_x, int3_y); + interp3->addToImage(int3_x, int3_y); + nointerp->getInterpolatedPosition(cl.x,cl.y, cl.get_cluster(),noint_x, noint_y); + nointerp->addToImage(noint_x, noint_y); + + + d_x= (int_x-int3_x)*25.; + d_y= (int_y-int3_y)*25.; + dummy->calcEta(totquad, sDum, etax, etay); + xx=int_x; + yy=int_y; + if (etax<0.1 || etax>0.9) xx=int3_x; + if (etay<0.1 || etay>0.9) yy=int3_y; + dummy->addToImage(xx,yy); + + if (d_x>res || d_x<-res || d_y>res || d_y<-res) { + badph++; + // cout << "delta (um): "<< d_x << " " << d_y << " " << cl.x << " " << cl.y << endl; + // cout << sum << " " << totquad << " " << etax << " "<< etay << endl; + // //cout<< int_x << " " << int_y << " " << int3_x << " " << int3_y << endl; + } + mult->addToImage(noint_x, noint_y); + + if (nph%1000000==0) cout << nph << endl; + if (nph%100000000==0) { + sprintf(outfname,"%s_inteta2.tiff", argv[3]); + interp->writeInterpolatedImage(outfname); + sprintf(outfname,"%s_inteta3.tiff", argv[3]); + interp3->writeInterpolatedImage(outfname); + sprintf(outfname,"%s_mix.tiff", argv[3]); + dummy->writeInterpolatedImage(outfname); + sprintf(outfname,"%s_noint.tiff", argv[3]); + nointerp->writeInterpolatedImage(outfname); + sprintf(outfname,"%s_mult.tiff", argv[3]); + mult->writeInterpolatedImage(outfname); + } + + } else { + mult->getInterpolatedPosition(cl.x,cl.y, cl.get_cluster(),int_x, int_y); + for (int imult=0; imult<2.*sum/(cmax+cmin); imult++) mult->addToImage(int_x, int_y); + } + + } fclose(f); #ifdef FF @@ -147,8 +274,22 @@ int main(int argc, char *argv[]) { } #endif #ifndef FF + +#ifdef MANYFILES + sprintf(outfname,argv[3],irun,nframes-ff); + cout << outfname << endl; +#endif + sprintf(outfname,"%s_inteta2.tiff", argv[3]); interp->writeInterpolatedImage(outfname); - img=interp->getInterpolatedImage(); + sprintf(outfname,"%s_inteta3.tiff", argv[3]); + interp3->writeInterpolatedImage(outfname); + sprintf(outfname,"%s_mix.tiff", argv[3]); + dummy->writeInterpolatedImage(outfname); + sprintf(outfname,"%s_mult.tiff", argv[3]); + mult->writeInterpolatedImage(outfname); + +#ifndef MANYFILES + img=interp->getInterpolatedImage(); for (ix=0; ixclearInterpolatedImage(); + interp3->clearInterpolatedImage(); + dummy->clearInterpolatedImage(); + mult->clearInterpolatedImage(); - } + } else + cout << "could not open file " << infname << endl; } - - + cout << irun << " " << runmax << endl; +#ifndef MANYFILES sprintf(outfname,argv[3],11111); WriteToTiff(totimg, outfname,NC*nsubpix,NR*nsubpix); - +#endif + cout << "Filled " << nph << " (/"<< totph <<") of which " << badph << " badly interpolated " << endl; return 0; } diff --git a/slsDetectorCalibration/moenchExecutables/moench03MakeEta.cpp b/slsDetectorCalibration/moenchExecutables/moench03MakeEta.cpp index 4f1119471..c2f2f92cd 100644 --- a/slsDetectorCalibration/moenchExecutables/moench03MakeEta.cpp +++ b/slsDetectorCalibration/moenchExecutables/moench03MakeEta.cpp @@ -11,6 +11,7 @@ using namespace std; #define NC 400 #define NR 400 +#define XTALK int main(int argc, char *argv[]) { /** @@ -20,6 +21,7 @@ int main(int argc, char *argv[]) { int nsubpix=10; int etabins=nsubpix*100; double etamin=-1, etamax=2; + double eta3min=-2, eta3max=2; int quad; double sum, totquad; double sDum[2][2]; @@ -27,16 +29,29 @@ int main(int argc, char *argv[]) { double etax, etay; int runmin, runmax; single_photon_hit cl(3,3); - - if (argc<5) { - cout << "Wrong usage! Should be: "<< argv[0] << " infile " << " outfile runmin runmax" << endl; +int iph=0; + + if (argc<7) { + cout << "Wrong usage! Should be: "<< argv[0] << " infile " << " outfile runmin runmax cmin cmax" << endl; return 1; } - etaInterpolationPosXY *interp=new etaInterpolationPosXY(NR, NC, nsubpix, etabins, etamin, etamax); + eta2InterpolationPosXY *interp2=new eta2InterpolationPosXY(NR, NC, nsubpix, etabins, etamin, etamax); + cout << "###########"<< endl; + eta3InterpolationPosXY *interp3=new eta3InterpolationPosXY(NR, NC, nsubpix, etabins, eta3min, eta3max); + // cout << eta3min << " " << eta3max << endl; runmin=atoi(argv[3]); runmax=atoi(argv[4]); + double cmin=atof(argv[5]); //200 + double cmax=atof(argv[6]); //3000 +#ifdef XTALK + int old_val[3][3]; + int new_val[3][3]; + double xcorr=0.04; + + // int ix=0; +#endif FILE *f; for (int i=runmin; icalcQuad(cl.get_cluster(), sum, totquad, sDum); - if (sum>200 && sum<580 && cl.y<350) - interp->addToFlatField(cl.get_cluster(),etax, etay); +#ifdef XTALK + if ((cl.x+1)%25!=0) { + for (int ix=-1; ix<2; ix++) { + for (int iy=-1; iy<2; iy++) { + old_val[iy+1][ix+1]=cl.get_data(ix,iy); + if (ix>=0) { + new_val[iy+1][ix+1]=old_val[iy+1][ix+1]-old_val[iy+1][ix]*xcorr; + cl.set_data(new_val[iy+1][ix+1],ix,iy); + } + } + } + } +#endif + quad=interp2->calcQuad(cl.get_cluster(), sum, totquad, sDum); + + if (sum>cmin && totquad/sum>0.8 && totquad/sum<1.2 && totquadaddToFlatField(cl.get_cluster(),etax, etay); + // if (etax>0.49 && etax<0.51 && etay>0.49 && etay<0.51 ) { + // cout << cl.y << " " << cl.x << " " << quad << " "<< totquad << " " <addToFlatField(cl.get_cluster(),etax, etay); + iph++; + if (iph%1000000==0) cout << iph << endl; + if (iph%100000000==0) { + sprintf(fname,"%s_eta2.tiff",argv[2]); + interp2->writeFlatField(fname); + sprintf(fname,"%s_eta3.tiff",argv[2]); + interp3->writeFlatField(fname); + } + // if (iph>1E8) break; + } + // } + } fclose(f); - interp->writeFlatField(argv[2]); } else cout << "could not open file " << fname << endl; } - interp->writeFlatField(argv[2]); + sprintf(fname,"%s_eta2.tiff",argv[2]); + interp2->writeFlatField(fname); + sprintf(fname,"%s_eta3.tiff",argv[2]); + interp3->writeFlatField(fname); return 0; } diff --git a/slsDetectorCalibration/moenchExecutables/moench03OnTheFlyAnalysis.C b/slsDetectorCalibration/moenchExecutables/moench03OnTheFlyAnalysis.C deleted file mode 100644 index b247a9892..000000000 --- a/slsDetectorCalibration/moenchExecutables/moench03OnTheFlyAnalysis.C +++ /dev/null @@ -1,160 +0,0 @@ -#include -#include -#include -#include -#include -#include -//#include -//#include -//#include -#include - -#include "moench03Ctb10GbT1Data.h" - -#include "interpolatingDetector.h" -#include "etaInterpolationPosXY.h" -#include "linearInterpolation.h" -#include "noInterpolation.h" -#include "multiThreadedDetector.h" - -#include - -#define NC 400 -#define NR 400 - -#include "tiffIO.h" - - -void *moenchProcessFrame() { - char fname[10000]; - strcpy(fname,"/mnt/moench_data/m03-15_mufocustube/plant_40kV_10uA/m03-15_100V_g4hg_300us_dtf_0.raw"); - - int nthreads=3; - - int nph, nph1; - single_photon_hit clusters[NR*NC]; - // cout << "hits "<< endl; - int etabins=550; - double etamin=-1, etamax=2; - int nsubpix=4; - float *etah=new float[etabins*etabins]; - // cout << "etah "<< endl; - cout << "image size "<< nsubpix*nsubpix*NC*NR << endl; - float *image=new float[nsubpix*nsubpix*NC*NR]; - int *heta, *himage; - - moench03Ctb10GbT1Data *decoder=new moench03Ctb10GbT1Data(); - // cout << "decoder "<< endl; - etaInterpolationPosXY *interp=new etaInterpolationPosXY(NC, NR, nsubpix, etabins, etamin, etamax); - // cout << "interp "<< endl; - //linearInterpolation *interp=new linearInterpolation(NC, NR, nsubpix); - //noInterpolation *interp=new noInterpolation(NC, NR, nsubpix); - interp->readFlatField("/scratch/eta_100.tiff",etamin,etamax); - interpolatingDetector *filter=new interpolatingDetector(decoder,interp, 5, 1, 0, 1000, 10); - filter->readPedestals("/scratch/ped_100.tiff"); - cout << "filter "<< endl; - - - - char *buff; - int nf=0; - int ok=0; - ifstream filebin; - std::time_t end_time; - - int iFrame=-1; - int np=-1; - - - filter->newDataSet(); - - - multiThreadedDetector *mt=new multiThreadedDetector(filter,nthreads,100); - nph=0; - nph1=0; - //int np; - int iph; - - cout << "file name " << fname << endl; - filebin.open((const char *)(fname), ios::in | ios::binary); - if (filebin.is_open()) - cout << "Opened file " << fname<< endl; - else - cout << "Could not open file " << fname<< endl; - mt->setFrameMode(eFrame); - mt->prepareInterpolation(ok); - mt->StartThreads(); - mt->popFree(buff); - - while ((decoder->readNextFrame(filebin, iFrame, np, buff)) && nf<1.5E4) { - if (nf<9E3) - ; - else { - - // if (nf>1.1E4 && ok==0) { - // mt->prepareInterpolation(ok); - // mt->setFrameMode(eFrame); - // //ok=1; - // } - - mt->pushData(buff); - mt->nextThread(); - // cout << " " << (void*)buff; - mt->popFree(buff); - - // if (ok==0) { - // cout << "**************************************************************************"<< endl; - // heta=interp->getFlatField(); - // // for (int ii=0; iiprepareInterpolation(ok); - // cout << "**************************************************************************"<< endl; - // std::time(&end_time); - // cout << std::ctime(&end_time) << " " << nf << endl; - // } - // filter->processData(buff,eFrame); - // } - - // nph+=nph1; - } - if (nf%1000==0) { - std::time(&end_time); - cout << std::ctime(&end_time) << " " << nf << endl; - } - - nf++; - //delete [] buff; - iFrame=-1; - } - - if (filebin.is_open()) - filebin.close(); - else - cout << "could not open file " << fname << endl; - - mt->StopThreads(); - - char tit[10000]; - sprintf(tit,"/scratch/int_image_mt%d.tiff",nthreads); - - mt->writeInterpolatedImage(tit); - // delete [] etah; - - // delete interp; - //delete decoder; - //cout << "Read " << nf << " frames" << endl; - return NULL; -} - -int main(int argc, char *argv[]){ - - moenchProcessFrame(); - -} diff --git a/slsDetectorCalibration/moenchExecutables/readClusters.C b/slsDetectorCalibration/moenchExecutables/readClusters.C deleted file mode 100644 index f28cb95e0..000000000 --- a/slsDetectorCalibration/moenchExecutables/readClusters.C +++ /dev/null @@ -1,267 +0,0 @@ -#include "../single_photon_hit.h" -//#include "etaVEL/etaInterpolationPosXY.h" -#include -#include -#include -#include -using namespace std; - -TH2F *readClusters(char *fname, int nx, int ny, TH2F *h2=NULL) { - FILE *f=fopen(fname,"r"); - int iph=0; - int ns=4; - double px, py; - double left, right, top, bottom; - if (f) { - int x1,y1; - if (h2==NULL) - h2=new TH2F("h2",fname,nx, -0.5, nx-0.5, ny, -0.5, ny-0.5); - //h2mult=new TH2F("h2mult",fname,nx, -0.5, nx-0.5, ny, -0.5, ny-0.5); - // TH2F *hint=new TH2F("hint",fname,nx*ns, -0.5, nx-0.5, ny*ns, -0.5, ny-0.5); - TH1F *hf=new TH1F("hf","hf",1000,0,10E6); - //TH2F *hff=new TH2F("hff","hff",ns, -0.5, 0.5, ns, -0.5, +0.5); - TH1F *hsp=new TH1F("hsp",fname,500,0,10000); - // TH1F *hsp1=new TH1F("hsp1",fname,500,0,10000); - // TH1F *hsp2=new TH1F("hsp2",fname,500,0,1000); - // TH1F *hsp3=new TH1F("hsp3",fname,500,0,1000); - // hsp1->SetLineColor(2); - // hsp2->SetLineColor(3); - // hsp3->SetLineColor(4); - TCanvas *c=new TCanvas(); - h2->Draw("colz"); - TCanvas *c1=new TCanvas(); - hsp->Draw(); - c1->SetLogy(kTRUE); - // hsp1->Draw("same"); - // hsp2->Draw("same"); - // hsp3->Draw("same"); - TCanvas *c2=new TCanvas(); - hf->Draw(); - // hint->Draw("colz"); - //c2->SetLogz(kTRUE); - single_photon_hit cl(3,3); - double tot; - int w; - double phw=340, phs=62; - int f0=-1; - double tl, bl, tr, br, qt; - int iimage=0; - - while (cl.read(f)) { - //cl.get_pixel(x1, y1); - //cout << cl.iframe << " " << cl.x << " " << cl.y << endl; - //if (cl.x>80 && cl.x<280 && cl.y>80 && cl.y<300) { - tot=0; /* - left=0; - right=0; - top=0; - bottom=0;*/ - tl=0; tr=0; bl=0; br=0; - for (int ix=-1; ix<2; ix++) - for (int iy=-1; iy<2; iy++){ - tot+=cl.get_data(ix,iy); - if (ix<=0 && iy<=0) bl+=cl.get_data(ix,iy); - if (ix<=0 && iy>=0) tl+=cl.get_data(ix,iy); - if (ix>=0 && iy<=0) br+=cl.get_data(ix,iy); - if (ix>=0 && iy>=0) tr+=cl.get_data(ix,iy); - - //if (ix<0) left+=cl.get_data(ix,iy); - // if (ix>0) right+=cl.get_data(ix,iy); - // if (iy<0) bottom+=cl.get_data(ix,iy); - // if (iy>0) top+=cl.get_data(ix,iy); - - } - qt=bl; - if (br>qt) qt=br; - if (tl>qt) qt=tl; - if (tr>qt) qt=tr; - /* - px=(-left+right)/tot; - py=(-bottom+top)/tot;*/ - //max at 340 - //if (tot>200) { - w=1; - if (qt>1000) { - if (qt/tot>0.8 && qt/tot<1.2){ - if (f0<0) - f0=cl.iframe; - hf->Fill(cl.iframe-f0); - // if (qt>540) w++; - // if (qt>820) w++; - //(tot+3.5*phs)/phw; - //} else - //w=0; - // if (w) { - // if (cl.y<350) { - // if (cl.y<100 || cl.y>300) { - // if (cl.x>150 && cl.x<250 && cl.y>200 && cl.y<250) - // hsp1->Fill(qt); - // else - hsp->Fill(qt); - - // hsp2->Fill(cl.get_data(0,0)); - // } else { - // hsp1->Fill(qt); - // hsp3->Fill(cl.get_data(0,0)); - // } - //if (cl.x>160 && cl.x<260 && cl.y>30 && cl.y<80 && tot>0) - //if (w==1) { - // if (w==2) - h2->Fill(cl.x,cl.y,w); - // } - //} - // hint->Fill(px+cl.x,py+cl.y,w); - // if (cl.y<350) - // hff->Fill(px,py,w); - - // } - - //h2mult->Fill(cl.x,cl.y,w); - - } - iph+=w; - if (iph%100000==0) { - c->Modified(); - c->Update(); - c1->Modified();; - c1->Update(); - c2->Modified();; - c2->Update(); - } - // if (iph>1E7) - // break; - //} - // if (iph>0.5E7) break; - } - } - fclose(f); - // hff->Scale(hff->GetNbinsX()*hff->GetNbinsY()/hff->Integral()); - // TH2F *hint2=(TH2F*)hint->Clone("hint2"); - // double ff; - // for (int ibx=0; ibxGetNbinsX(); ibx++) { - // for (int iby=0; ibyGetNbinsY(); iby++) { - // ff=hff->GetBinContent(ibx%ns+1, iby%ns+1); - // // cout << ibx << " " << iby << " " << ibx%ns << " " << iby%ns << " " << ff << endl; - // if (ff>0) - // hint2->SetBinContent(ibx+1, iby+1,hint->GetBinContent(ibx+1,iby+1)/ff); - // } - // } - - - - - - - return h2; - -} else - cout << "could not open file " << fname << endl; - return NULL; - - -} - -// TH2F *getEta(char *fname, int nx, int ny, TH2F *h2=NULL) { -// int ns=10; -// slsInterpolation *inte=new etaInterpolationPosXY(nx,ny,ns, - -// FILE *f=fopen(fname,"r"); -// int iph=0; -// int ns=4; -// double px, py; -// double left, right, top, bottom; -// if (f) { -// int x1,y1; -// if (h2==NULL) -// h2=new TH2F("h2",fname,nx, -0.5, nx-0.5, ny, -0.5, ny-0.5); -// h2mult=new TH2F("h2mult",fname,nx, -0.5, nx-0.5, ny, -0.5, ny-0.5); -// TH2F *hint=new TH2F("hint",fname,nx*ns, -0.5, nx-0.5, ny*ns, -0.5, ny-0.5); -// // TH2F *hff=new TH2F("hff","hff",ns, -0.5, 0.5, ns, -0.5, +0.5); -// TH1F *hsp=new TH1F("hsp",fname,500,0,2000); -// TCanvas *c=new TCanvas(); -// c->SetLogz(kTRUE); -// h2->Draw("colz"); -// TCanvas *c1=new TCanvas(); -// hsp->Draw(); -// TCanvas *c2=new TCanvas(); -// hint->Draw("colz"); -// c2->SetLogz(kTRUE); -// single_photon_hit cl(3,3); -// double tot; -// int w; -// double phw=340, phs=62; -// while (cl.read(f)) { -// //cl.get_pixel(x1, y1); -// //cout << cl.iframe << " " << cl.x << " " << cl.y << endl; -// //if (cl.x>80 && cl.x<280 && cl.y>80 && cl.y<300) { -// tot=0; -// left=0; -// right=0; -// top=0; -// bottom=0; -// for (int ix=-1; ix<2; ix++) -// for (int iy=-1; iy<2; iy++){ -// tot+=cl.get_data(ix,iy); -// if (ix<0) left+=cl.get_data(ix,iy); -// if (ix>0) right+=cl.get_data(ix,iy); -// if (iy<0) bottom+=cl.get_data(ix,iy); -// if (iy>0) top+=cl.get_data(ix,iy); - -// } -// px=(-left+right)/tot; -// py=(-bottom+top)/tot; -// //max at 340 -// if (tot>200) { -// w=(tot+3.5*phs)/phw; -// } else -// w=0; -// if (w) { -// hsp->Fill(tot); -// if (w==1) { -// h2->Fill(cl.x,cl.y,w); -// hint->Fill(px+cl.x,py+cl.y,w); -// } - -// h2mult->Fill(cl.x,cl.y,w); - -// // if (cl.y<350) -// // hff->Fill(px,py,w); -// //} -// iph+=w; -// if (iph%100000==0) { -// // c->Modified(); -// // c->Update(); -// c1->Modified();; -// c1->Update(); -// // c2->Modified();; -// // c2->Update(); -// } -// } -// // if (iph>0.5E7) break; -// } -// fclose(f); -// // hff->Scale(hff->GetNbinsX()*hff->GetNbinsY()/hff->Integral()); -// // TH2F *hint2=(TH2F*)hint->Clone("hint2"); -// // double ff; -// // for (int ibx=0; ibxGetNbinsX(); ibx++) { -// // for (int iby=0; ibyGetNbinsY(); iby++) { -// // ff=hff->GetBinContent(ibx%ns+1, iby%ns+1); -// // // cout << ibx << " " << iby << " " << ibx%ns << " " << iby%ns << " " << ff << endl; -// // if (ff>0) -// // hint2->SetBinContent(ibx+1, iby+1,hint->GetBinContent(ibx+1,iby+1)/ff); -// // } -// // } - - - - - - -// return h2; - -// } else -// cout << "could not open file " << fname << endl; -// return NULL; - - -// } diff --git a/slsDetectorCalibration/pedestalSubtraction.h b/slsDetectorCalibration/pedestalSubtraction.h index d05f9cfca..062b0d84e 100644 --- a/slsDetectorCalibration/pedestalSubtraction.h +++ b/slsDetectorCalibration/pedestalSubtraction.h @@ -51,8 +51,11 @@ class pedestalSubtraction { /** sets the moving average */ virtual void setPedestalRMS(double rms) {stat.SetRMS(rms);} - - + /**sets/gets the number of samples for the moving average + \returns actual number of samples for the moving average + */ + virtual int getNumpedestals() {return stat.NumDataValues();}; + private: MovingStat stat; /**< approximated moving average struct */ diff --git a/slsDetectorCalibration/singlePhotonDetector.h b/slsDetectorCalibration/singlePhotonDetector.h index 7bc09ebd4..f634ebdbd 100644 --- a/slsDetectorCalibration/singlePhotonDetector.h +++ b/slsDetectorCalibration/singlePhotonDetector.h @@ -58,7 +58,7 @@ public analogDetector { int sign=1, commonModeSubtraction *cm=NULL, int nped=1000, - int nd=100, int nnx=-1, int nny=-1, double *gm=NULL) : analogDetector(d, sign, cm, nped, nnx, nny, gm), nDark(nd), eventMask(NULL),nSigma (nsigma), clusterSize(csize), clusterSizeY(csize), cluster(NULL), quad(UNDEFINED_QUADRANT), tot(0), quadTot(0) { + int nd=100, int nnx=-1, int nny=-1, double *gm=NULL) : analogDetector(d, sign, cm, nped, nnx, nny, gm), nDark(nd), eventMask(NULL),nSigma (nsigma), clusterSize(csize), clusterSizeY(csize), clusters(NULL), quad(UNDEFINED_QUADRANT), tot(0), quadTot(0) { @@ -74,7 +74,7 @@ public analogDetector { // cluster=new single_photon_hit(clusterSize,clusterSizeY); clusters=new single_photon_hit[nx*ny]; - cluster=clusters; + // cluster=clusters; setClusterSize(csize); nphTot=0; nphFrame=0; @@ -82,7 +82,7 @@ public analogDetector { /** destructor. Deletes the cluster structure, the pdestalSubtraction and the image array */ - virtual ~singlePhotonDetector() {delete cluster; for (int i=0; i { // cluster=new single_photon_hit(clusterSize,clusterSizeY); clusters=new single_photon_hit[nx*ny]; - cluster=clusters; + // cluster=clusters; setClusterSize(clusterSize); @@ -147,8 +147,8 @@ public analogDetector { if (n%2==0) n+=1; clusterSize=n; - if (cluster) - delete cluster; + // if (clusters) + // delete [] clusters; if (ny>clusterSize) clusterSizeY=clusterSize; else @@ -192,29 +192,37 @@ public analogDetector { double max=0, tl=0, tr=0, bl=0,br=0, v; - if (thr>=0) { + int cm=0; + if (cmSub) cm=1; + + if (thr>0) { cy=1; cs=1; ccs=1; ccy=1; } - if (iframe0) { - + newFrame(); + if (cmSub) { + addToCommonMode(data); + } for (int ix=xmin; ix::getNPhotons(data,ix,iy); + nn=val/tthr;//analogDetector::getNPhotons(data,ix,iy); nph[ix+nx*iy]+=nn; rest[iy][ix]=(val-nn*tthr); + nphFrame+=nn; + nphTot+=nn; } } // } @@ -235,10 +243,10 @@ public analogDetector { for (int ir=-(clusterSizeY/2); ir<(clusterSizeY/2)+1; ir++) { for (int ic=-(clusterSize/2); ic<(clusterSize/2)+1; ic++) { if ((iy+ir)>=0 && (iy+ir)=0 && (ix+ic)set_data(rest[iy+ir][ix+ic], ic, ir); + //clusters->set_data(rest[iy+ir][ix+ic], ic, ir); - v=rest[iy+ir][ix+ic];//cluster->get_data(ic,ir); + v=rest[iy+ir][ix+ic];//clusters->get_data(ic,ir); tot+=v; if (ir<=0 && ic<=0) @@ -278,14 +286,15 @@ public analogDetector { if (max>tthr || tot>sqrt(ccy*ccs)*tthr || quadTot>sqrt(cy*cs)*tthr) { eventMask[iy][ix]=PHOTON; nph[ix+nx*iy]++; - nphFrame+=nph[ix+nx*iy]; - nphTot+=nph[ix+nx*iy]; + nphFrame++; + nphTot++; } } } } - cout << iframe << " " << nph << endl; + // cout << iframe << " " << nphFrame << " " << nphTot << endl; + //cout << iframe << " " << nph << endl; } else return getClusters(data, nph); } return NULL; @@ -329,10 +338,10 @@ public analogDetector { eventMask[iy][ix]=PEDESTAL; - cluster->x=ix; - cluster->y=iy; - cluster->rms=getPedestalRMS(ix,iy); - cluster->ped=getPedestal(ix,iy, cm); + clusters->x=ix; + clusters->y=iy; + clusters->rms=getPedestalRMS(ix,iy); + clusters->ped=getPedestal(ix,iy, cm); for (int ir=-(clusterSizeY/2); ir<(clusterSizeY/2)+1; ir++) { @@ -341,8 +350,8 @@ public analogDetector { v=subtractPedestal(data, ix+ic, iy+ir); - cluster->set_data(v, ic, ir); - // v=cluster->get_data(ic,ir); + clusters->set_data(v, ic, ir); + // v=clusters->get_data(ic,ir); tot+=v; if (ir<=0 && ic<=0) bl+=v; @@ -357,7 +366,7 @@ public analogDetector { max=v; } if (ir==0 && ic==0) { - if (v<-nSigma*cluster->rms) + if (v<-nSigma*clusters->rms) eventMask[iy][ix]=NEGATIVE_PEDESTAL; } } @@ -378,8 +387,8 @@ public analogDetector { quadTot=tr; } - if (max>nSigma*cluster->rms || tot>sqrt(clusterSizeY*clusterSize)*nSigma*cluster->rms || quadTot>cy*cs*nSigma*cluster->rms) { - if (cluster->get_data(0,0)>=max) { + if (max>nSigma*clusters->rms || tot>sqrt(clusterSizeY*clusterSize)*nSigma*clusters->rms || quadTot>cy*cs*nSigma*clusters->rms) { + if (clusters->get_data(0,0)>=max) { eventMask[iy][ix]=PHOTON_MAX; } else { eventMask[iy][ix]=PHOTON; @@ -447,7 +456,7 @@ int *getClusters(char *data, int *ph=NULL) { (clusters+nph)->rms=getPedestalRMS(ix,iy); - cluster=clusters+nph; + // cluster=clusters+nph; for (int ir=-(clusterSizeY/2); ir<(clusterSizeY/2)+1; ir++) { @@ -473,7 +482,7 @@ int *getClusters(char *data, int *ph=NULL) { if (ir==0 && ic==0) { - if (*v<-nSigma*cluster->rms) + if (*v<-nSigma*(clusters+nph)->rms) eventMask[iy][ix]=NEGATIVE_PEDESTAL; } @@ -494,7 +503,7 @@ int *getClusters(char *data, int *ph=NULL) { (clusters+nph)->quadTot=tr; } - if (max>nSigma*cluster->rms || tot>sqrt(clusterSizeY*clusterSize)*nSigma*cluster->rms || ((clusters+nph)->quadTot)>sqrt(cy*cs)*nSigma*cluster->rms) { + if (max>nSigma*(clusters+nph)->rms || tot>sqrt(clusterSizeY*clusterSize)*nSigma*(clusters+nph)->rms || ((clusters+nph)->quadTot)>sqrt(cy*cs)*nSigma*(clusters+nph)->rms) { if (val[iy][ix]>=max) { eventMask[iy][ix]=PHOTON_MAX; (clusters+nph)->tot=tot; @@ -559,7 +568,7 @@ int *getClusters(char *data, int *ph=NULL) { \param ir y coordinate (center is (0,0)) \returns cluster element */ - double getClusterElement(int ic, int ir=0){return cluster->get_data(ic,ir);}; + double getClusterElement(int ic, int ir=0){return clusters->get_data(ic,ir);}; /** returns event mask for the given pixel \param ic x coordinate (center is (0,0)) @@ -581,25 +590,25 @@ int *getClusters(char *data, int *ph=NULL) { if (iFrame) tall->Branch("iFrame",iFrame,"iframe/I"); else - tall->Branch("iFrame",&(cluster->iframe),"iframe/I"); + tall->Branch("iFrame",&(clusters->iframe),"iframe/I"); - tall->Branch("x",&(cluster->x),"x/I"); - tall->Branch("y",&(cluster->y),"y/I"); + tall->Branch("x",&(clusters->x),"x/I"); + tall->Branch("y",&(clusters->y),"y/I"); char tit[100]; sprintf(tit,"data[%d]/D",clusterSize*clusterSizeY); - tall->Branch("data",cluster->data,tit); - tall->Branch("pedestal",&(cluster->ped),"pedestal/D"); - tall->Branch("rms",&(cluster->rms),"rms/D"); - tall->Branch("tot",&(cluster->tot),"tot/D"); - tall->Branch("quadTot",&(cluster->quadTot),"quadTot/D"); - tall->Branch("quad",&(cluster->quad),"quad/I"); + tall->Branch("data",clusters->data,tit); + tall->Branch("pedestal",&(clusters->ped),"pedestal/D"); + tall->Branch("rms",&(clusters->rms),"rms/D"); + tall->Branch("tot",&(clusters->tot),"tot/D"); + tall->Branch("quadTot",&(clusters->quadTot),"quadTot/D"); + tall->Branch("quad",&(clusters->quad),"quad/I"); return tall; }; #else /** write cluster to filer \param f file pointer */ - void writeCluster(FILE* f){cluster->write(f);}; + void writeCluster(FILE* f){clusters->write(f);}; /** write clusters to file @@ -643,7 +652,7 @@ void writeClusters(FILE *f){for (int i=0; iwrite(f double nSigma; /**< number of sigma parameter for photon discrimination */ int clusterSize; /**< cluster size in the x direction */ int clusterSizeY; /**< cluster size in the y direction i.e. 1 for strips, clusterSize for pixels */ - single_photon_hit *cluster; /**< single photon hit data structure */ + // single_photon_hit *cluster; /**< single photon hit data structure */ single_photon_hit *clusters; /**< single photon hit data structure */ quadrant quad; /**< quadrant where the photon is located */ double tot; /**< sum of the 3x3 cluster */ diff --git a/slsDetectorCalibration/single_photon_hit.h b/slsDetectorCalibration/single_photon_hit.h index c992123d8..696868b87 100644 --- a/slsDetectorCalibration/single_photon_hit.h +++ b/slsDetectorCalibration/single_photon_hit.h @@ -1,5 +1,7 @@ #ifndef SINGLE_PHOTON_HIT_H #define SINGLE_PHOTON_HIT_H +#include +#include typedef double double32_t; typedef float float32_t; @@ -26,7 +28,7 @@ class single_photon_hit { \param nx cluster size in x direction \param ny cluster size in y direction (defaults to 1 for 1D detectors) */ - single_photon_hit(int nx=3, int ny=3): dx(nx), dy(ny) {data=new double[dx*dy];}; + single_photon_hit(int nx=3, int ny=3): dx(nx), dy(ny) {data=new int[dx*dy];}; ~single_photon_hit(){delete [] data;}; /**< destructor, deletes the data array */ @@ -35,8 +37,9 @@ class single_photon_hit { */ size_t write(FILE *myFile) { //fwrite((void*)this, 1, 3*sizeof(int)+4*sizeof(double)+sizeof(quad), myFile); - if (fwrite((void*)this, 1, 3*sizeof(int), myFile)) - return fwrite((void*)data, 1, dx*dy*sizeof(double), myFile); + + if (fwrite((void*)this, 1, sizeof(int)+2*sizeof(int16_t), myFile)) + return fwrite((void*)data, 1, dx*dy*sizeof(int), myFile); return 0; }; @@ -47,8 +50,8 @@ class single_photon_hit { size_t read(FILE *myFile) { //fread((void*)this, 1, 3*sizeof(int)+4*sizeof(double)+sizeof(quad), myFile); - if (fread((void*)this, 1, 3*sizeof(int), myFile)) - return fread((void*)data, 1, dx*dy*sizeof(double), myFile); + if (fread((void*)this, 1, sizeof(int)+2*sizeof(int16_t), myFile)) + return fread((void*)data, 1, dx*dy*sizeof(int), myFile); return 0; }; @@ -60,7 +63,7 @@ class single_photon_hit { */ void set_data(double v, int ix, int iy=0){data[(iy+dy/2)*dx+ix+dx/2]=v;}; - void set_cluster_size(int nx, int ny) {if (nx>0) dx=nx; if (ny>0) dy=ny; delete [] data; data=new double[dx*dy];}; + void set_cluster_size(int nx, int ny) {if (nx>0) dx=nx; if (ny>0) dy=ny; delete [] data; data=new int[dx*dy];}; void get_cluster_size(int &nx, int &ny) {nx=dx; ny=dy;}; void get_pixel(int &x1, int &y1) {x1=x; y1=y;}; @@ -71,11 +74,11 @@ class single_photon_hit { \returns value of the cluster element */ double get_data(int ix, int iy=0){return data[(iy+dy/2)*dx+ix+dx/2];}; - double *get_cluster() {return data;}; + int *get_cluster() {return data;}; int iframe; /**< frame number */ - int x; /**< x-coordinate of the center of hit */ - int y; /**< x-coordinate of the center of hit */ + int16_t x; /**< x-coordinate of the center of hit */ + int16_t y; /**< x-coordinate of the center of hit */ double rms; /**< noise of central pixel l -- at some point it can be removed*/ double ped; /**< pedestal of the central pixel -- at some point it can be removed*/ double tot; /**< sum of the 3x3 cluster */ @@ -83,7 +86,7 @@ class single_photon_hit { double quadTot; /**< sum of the maximum 2x2cluster */ int dx; /**< size of data cluster in x */ int dy; /**< size of data cluster in y */ - double *data; /**< pointer to data */ + int *data; /**< pointer to data */ }; diff --git a/slsDetectorCalibration/tiffIO.cpp b/slsDetectorCalibration/tiffIO.cpp index b0dd03b71..6521df159 100644 --- a/slsDetectorCalibration/tiffIO.cpp +++ b/slsDetectorCalibration/tiffIO.cpp @@ -1,5 +1,6 @@ - +#ifndef MY_TIFF_IO_H #include "tiffIO.h" +#endif #include using namespace std; // #undef cbf_failnez diff --git a/slsDetectorSoftware/mythenDetectorServer/Makefile b/slsDetectorSoftware/mythenDetectorServer/Makefile index da0c0f291..b72e33681 100755 --- a/slsDetectorSoftware/mythenDetectorServer/Makefile +++ b/slsDetectorSoftware/mythenDetectorServer/Makefile @@ -13,7 +13,7 @@ INSTMODE= 0777 SRCS= server.c server_funcs.c communication_funcs.c firmware_funcs.c mcb_funcs.c trimming_funcs.c sharedmemory.c OBJS= $(SRCS:%.c=%.o) -VFLAGS= +VFLAGS= #-DVERBOSE #-DVERYVERBOSE CFLAGS+= -Wall -DC_ONLY -DMCB_FUNCS -DDACS_INT $(VFLAGS) @@ -32,7 +32,7 @@ versioning: $(PROGS): $(OBJS) echo $(OBJS) - $(CC) $(LDFLAGS) $^ $(LDLIBS) $(CFLAGS) -o $@ + $(CC) $(LDFLAGS) $^ $(LDLIBS) $(CFLAGS) -o $@ -DVERBOSE install: $(PROGS) $(INSTALL) -d $(INSTDIR) diff --git a/slsDetectorSoftware/mythenDetectorServer/firmware_funcs.c b/slsDetectorSoftware/mythenDetectorServer/firmware_funcs.c index 49cbdb982..6e90105cb 100755 --- a/slsDetectorSoftware/mythenDetectorServer/firmware_funcs.c +++ b/slsDetectorSoftware/mythenDetectorServer/firmware_funcs.c @@ -17,6 +17,7 @@ #include #include +//#define VERBOSE //for memory mapping u_int64_t CSP0BASE; @@ -702,9 +703,9 @@ int setNMod(int n) { shiftfifo=SHIFTFIFO; -#ifdef VERBOSE + //#ifdef VERBOSE printf("SetNMod called arg %d -- dr %d shiftfifo %d\n",n,dynamicRange,shiftfifo); -#endif + //#endif if (n>=0 && n<=ntot) { nModX=n; @@ -713,12 +714,16 @@ int setNMod(int n) { reg=bus_r(FIFO_COUNTR_REG_OFF+(ififo<>FIFO_NM_OFF, (reg&FIFO_NC_MASK)>>FIFO_NC_OFF, FIFO_COUNTR_REG_OFF+(ififo<>FIFO_NM_OFF, (reg&FIFO_NC_MASK)>>FIFO_NC_OFF, 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 $?tfYMT(A zmZ3*IlkyOPhe$1F;Zp1H%dj}1=7%@Su|??co;X>IT=s+Y$3;l>cv%40C0*Z*;0>M; zfUhJjt)kDyWnbsb;jZ$5QcuYs>IBTuGtgrD<>;#$G6Xws)(uiBECn33PpU`GCbl|a zAt(UlWGSWZF{WT|mhiMWCMpeOIoVqkgK}5ozlG+Mn&9PBi8EtR<+L+YVKXI^Q z4MXONk}6)S{M-|cwV{9)RVqr}(?*R=a38f=`iZ%Wtdsr}0pEXOw;jBrdVFDqxg$C< z7L6Ghw6MrAp|&DsMsfHtPDHCDFWFR@S4DQF(Sjm)i}iB8sY31a<3PQLW2;_dy^}cJ zAeZ{~fY0PkHFm8qvvHSNvw=!0T)>ywCbci>tNUTwminaw`!3waq3x5pnVK3*$F3H& zmSn5FTf?*DRK|v<6>v1Fmhr=bv;agULM}qwXEH;V31i%Z2h**D9o@fX-TQk!0e!O| zy-w}CLG0=z!*{++cc1Pd?85EQ^WDie3vSgmLnm2yzx zRpVPD_?Gx#-eTrW6tj+?wY}TcE_0W3-5s=H&UpuQ$a#PmzNFSDYby*jc4q-fzL`D( zZ#BrZLcli(tA4GGasNZ^36fT_6g|W=O(ngH8fpFU!@=v%7vvtXt|-#%xnpceRrbEOW1YNZ}J4DRApqdu5S;WkV$@7qi$y7DHWI%R`7+*}Odqm7eXA}*AY zsC1xzL{vI7`zU{+I};1R`AQ;7&`F2EL?IHmg^sD^tn8 z;c2PxGN45EgFB<#e&wo>WuvnkVejub4GfO;GMR+)Klk9=-)o>Q^^JS~R?aP*$SGq! zRbyHsF|BIM7a~_Jnmr>rQ_w3! zjN^z7VjUxSXz59%{sGr<6?JtP=GvJE{T(*s|$*|zf!4sYjf5)_M{WV*Z7Yg`FFuvm9xueCUBThn~q+07P z>TN{{!l4}kS~9e4SpBTcK56~eASNP)c81F5bY^LLlThh7rp6aDo-#5&vO@f!m^GS! zO*v~QeUB5fF_QBtnK+mX9YvenEfmrcC2bgEeX=^SGcVW3_R|$7rs!PdI1`Z1 zHLB9_JX>%dt`Jj z3!0wJ-9r;ZiHoKSIM!5UxET}lzoYjP|T!WUunlWSmASS%y<(W|9vET>CcNeM+x zyAQog2A{omB0MfPz?xG(8!Lfeg~f_~zK^Rro&uLG*4E;A$W09(84_Guktava9=Wmu z7Gv9gSm?PTN+t z=9arV&4%U_mM0v>HfHmbL^_~zCC(kEdBIGqimG9)*e^~{6!mf?e(e;l#IK#gmH4$& zxDvm13RmLSPT@+NDO$_s0Y92NNHMQ5xTCu9*Z zOeyM|iyI7*G%Ccdl<0N5lw7TPhsb$YTis_nwQMjIsD2VHvK>AAy38qpXeby$2XmCo>+j9aIxKFzBfBO zYSypzmHJA$*16%=0^Wd)qz#@_!g4HURHb7ZFd?PuzlH4n5<}xqna9>$8cZJi82T6Y za(O#PsqkF=7wjD`_NI2N`T8PQ(wa7>4gU*f58l>6$Qb3SO`0%m-JG!{WN)ZBy=!oKa}gwf-t(U4f31Jy3A^`qTkYMG_XoGa=CqS3^{pSh z)$ojRj%6-wZ#b?Gj;fw}AKyaz`X1D`_${2yLf+w97RPCpC*mSBAp`x=S{6V~o^O)v zvirHK#+kdhJG`4KFL+A*Xw&&cp5_@sOY((#ljEwqO5&%0%o&%hsW`D77^8=R(z@RJ zEVMw@OPd~MORpK&)BD!BA8}^^L)aE>dt-sR(NmbxDtcSduiL6f0+9AM`s%QxiZP=%ETDwohkue zc<(`jtMC=*t*n)8k(w}C)TjIZu-$W+9IhJA!9XMaMwxc*b_-R8Iv|oq`ewR>xxN}t$i($ z=8Z{{{X7v#TN{%m%e@szqdum!g(tI>jw+(&tmL^{)T{wOqU0UAv#Y(2a(J~_B@He^L-=mGZ+T7LM}BgPlsJi7Jop4m8~HT2u<)h)F{ zN8fyL>-6_@VO@CobNHjHeY>ImlOqFf*1x@J#@f&aXPn35>uyFc6C;BCl0y0tFt zom=a>8~n9jtv6oS@9@63yY89kKWE9K(iQWqNm{o*H=HB5N990<*^wiM_g%O#em%C0M{H{S0K zSeiPUeSzSN0b%_}HV)YOD^KW>tGcHMyB}}O!Z{UlyD`^@Go`Ren7}gu!<&IzoH0#B zDW!vYmC{EJD(a&{J!hH{Zs<)0TU9qj7KO^ZT;=JF#&LK3-MgM(u!RLxtKXm@` zKPK$6w^}iqnfBRQ^YBdFSJhhYRvs1oSwgR|vS9K)M=Sc}q?Pp-JvH5~a%!0+gHHc1 zdUDHUKjph!v`oHJ`_}SQMc!+=bIZANqNQZsU3bulJ<_^xpEXx`L8?&u7SRb*CS!!MeC$6zj6+ljX4mKQ`q z+_?*G%`KO0sO>Kq#7cEzI@*vUQe;bHylhDUTHy2-i1xFFz{VNYYQI(FuEkEf)*|+< zvnNl5FIy$yywWP=oKL2xrQa#im zt1<@1ajik0+7G`Qoa-uFey|$&B-E;IoA!nr^u{dl^)=6#=FVIFu+{HZ}az2`-CMUBfMHM&tF z_t%2oWQ|pk8t0*=j6kka$g8=_{j~=2%kwOw+k;zqmZi48;o#CS zEm(R*3zkM&5Qi2xA?K1VEmHk-Dd}+LZIaZTD|oBS9BJR3{lDnVp>!<3v+|H3nJd^% z%)en@D%VjROA*f%to=0oElRM)UBuEIO`=?*cO*$UhYO3gz$>T^mvAMmb% zr=KLu&YP#R4&184_0`93#DVLTzE0$ueiGL?eZq9YwztE-{P^^fxU&u3N$XJer8ktm z6UY}$u_9%ansPRhGWmqA824m}c&@T8A*HittsAGzig+gz`%&9+*9#y0lDCFL!>)Gi zUMAicgu9rGMZLTO@|17JmWSQa^MV?bRYzZo&jD4AVjJqPevWqatKJws-m>$EyChih z+q+s$wSGfqG}n7aw@vNV51tzQ2>clwHywB7B@3GpPlUqygc6k2!QIn4aEl)x^He3Y zN8IZtQ$(AL$|T0)goSNi&swAF2HX~ccX_T<#?F6UgC$d#fBy5=gMk`835So4yB4JB zKiA}N zN~GP)$2+TH^XYJf+NIqFU^3}awTgjjrGG)ca4Fb3*X-A4*XYq_yT1sMEi*Z2Y$j|9P+Y zZxg~w>k5>rZTX4kuxH*D8!Y=py_bJz(yhSlT3Xs+kJ0*?hu&9q+&UxE=f$K4J&CX= zX(jWKV)sAnmif%g*HMi+DB)>)OBCrE99oNciv#rS$#eROCh|TDa&Lflm}NKm>x>CL zoUg`AQ*ojIyiBW)L-b$v{)8cWOYkcdJBoGr-r%^Y#tP5ywiEiggRrOkZ1{ld7sQn0 zX?hwEdf)T{tQ?Q{lDA;=>{j*?YjV6ccQ^Z3_p8D)uMyTJ6GkTMjYBJ0Gob~?$(k!X zp>0!t7W&xHTI?a3HsfN=jR;*nn5^{a(DNh_im(En|n5hfy&i79B zpV$R&a;$WkeSJx63+se$Qyt|hB{3~(OUd>9QVQ6-%`fQrJLOLgLPi=MB}*(%gnya~9d-xR4yVkl`mdXZ0RIlv{Qpp7z#G~CzoYac1K z50o>SZT_5)ZOJ~|geK#HA}%##E8o|1M2&mR7l+Yla}w_Ufk0_;XPF`3i0=$6<}UNR zkgYIKn%EYNDGZg&KujlM+GL)r&|Jna4`VR1q=ZUEOqD<2Fd;6k?E##1?^7hd;^v7? z7bWka$c(XwUAjM7A_XHLU`Q~3J0>ogf5YxsuV^-ft6`-9 zmhvm!VIGA?KX=puJWT&pIQ*aCXi607))=TyUOK9~{G%=Bm5!s}Ab3ULFT7$gdpzjo zorap79yTq(VSgLZiJLudL54LN8?%!VN@3mol;!8}4(NHIT#Gh_)v@cZ#!gniX9YbQ zy$P0)>6TIvAgf)={6@fihh^iD(l;heW7khH^3q z|E?@6`}cDL`3T+LW z&eICYJAzzGihAj1>hgEqT-QC%e3wOO<$i4~Y?-HaCX4-neBALq1HK~sI|Fx2$fx$# zf^c$Zo+Tml9g8VcZix$(S?;oYe7kI=a*oi%Oog`E`ne8eTLXsGoxd}#49p*_@xnU? z?VGk!y*+F~z;o}w+RY7V=C8R5UFEgLs`m5GQ%5ZZR>)T_Z&mxSKcg++d3I}d+xh29 zyO?T4DmB}*P<2Z(Vr5(@cC#2;%~J{9S2{m{t(g1O54e957!E-B@Shhguj&d~NisR?tq6X6fH>u3C~@a4|= zo}%9DdT?V0YZa%%nk5}HdpO6W((xFuBj+Jd&RV9{xYjN6^85={2if(7;S~6@TT-nJ zg^Rd<4I8y@Ynu)z|au-J+5xY znxi1fkQ~kK;7XyfQ8SB!NR-53YAa0?+sBNWoN1qg&X!LRByw`uoM@c=M;uj1uSgaSho^z$g|la5-_br>_3GA$e-x zOY{-`P53rS}au$$PLKivzJ13Gl;Mg3d8Y#&I|KeK&pqJ5qJ#r6e6`v$&j`+$d# zsOJ-u5S&Ch83dgSF*p`{X>9h@rAe<|SD_pw8+@nsnst>g6n(Z3zM_lao5sJ3@eKy~ z)c%%U5!T{kpUI(8$fUWDNo9~pcUnp;Hq2x8v{{|-r`r?8t>+8ZP$E^H4Tl|Al^6AH z-U5C+1W&t;=f!C3$Ee}S7kUxP_F<%ObU|KL?5Wl@cR!4M68El7kb4$&g~~#HA7K4%Q(OHKzQ&DC+G3H3Pm`w_Vvb=Dzz1ISd<2_?waWK!Ysw+w~e`-Fi*G z1%&moXMg6L>cO1q!JO*Boa(vDGosCc5gefg6_Z%~uh&Pd7BR7!HHVsp)T@+yt{&;x zsr9}L@)@wU?1Khc2FuzHgAU9|uSVu1d7ji|lzCjxMc+c2qg`8h!kPrVLxb=V=0Ny_ zf>z2Tq0#hFqp`KykJH%o7=nFhUY*gp)}fgK>s;IU;dwAE%; zce9*5{r2(oL%}!g-o4Kxq3lP`9S;6Mls)f%_lmMjtk<}wt+wAabm#cHp4A&J8UM3$ z^f?v&N%mOwzWz8)^~-+$rr~sxd)jX<8CSK{J1f?Oar(}cR?~k!?%8$}KJ3mM?;5J# zapcXfKQoHU2@m`Jb)fbadc*s_jI(@b{FlzSls^S~+HV5E%z;XhM1DPTU2U95`wy z^T@c7?K48P#^k_&VO}K09GYuL48WU5l)_F>sMJug!wfzll#%UC?ih*PZ5J|Ilh{&P zQ*IaaQetZ-MZigr)zrOI=^P^oKixWc>qgH9yJ`QL{&UJiX#=z3YdTi(Uyk~eAuGO$ zW!0sG77Zqb<_*S&$_9<0lEI3zS_?fFn+!ZIPb&p`ZT@CH2 zI0(JVDfRBU)zrB^1*EF}>YWAI0^zdCuFkTYWWJw04ju_FkEw#qHiI#~Y#zbAx_;_%eTv^%TaT*r%I3I7qDj70M!8n#H zuQ~j(lf9iQ@D!ZtmNN}cN}Qh{a@|LXY3r{6HWqMPCi29D#D{JE;nIbWnbqBQ1#3<# zjdEY49=W=E=t)gF+v4rGF_X~K&BHHOcUPSFTOIOtJS1{qM-?s6>P!ut#|n=rGM8Kx z$UMXitsF`srKPQ%_CvWJCVYDlCvMzNlDtCQ;;?U?^{_875cIKUN#nz#36OIyT1yAR zqXxV+Pqc|rnmtfh|6ogswQPL^%hnJ$m?zVjd-P0f?nR)2rrSr)7NldHSfHB&`=SOZ z7Zxv@|2v>5ZG@R3be9@R6rt~`AzG(iK%EZMc~yd)qjj|4|-dLloV{S|x z`v=%^_K2&Jbld`+5D0n#p4m8c^A_rE1int-iQcx-`c`}H)Zjg4*ftGU_cs~#bE|HL z4s@D4XCieVTIgQ)&HC%u@UbhxZ>ZrThTUjOY&{FFTaN{IJr?Ln$JBEea1M(-0j=gE zkr=ttbHwlxd)vX@(&t}t2&MR`y*Lj7jXNG^v^MDmb(ydfbEVd_88^TuvfnmZgw0V~ zy*}kg3V6bB0l48Ad*&Y59-Etc08z{)n}Z&Eg!0KDeF~vzbRo1i0IdbkO20HTjdL_; z5xT0-7697ZtD%8=uGKb;^R5l;YW}{AFB2|4m>Pl%4(pe34e z#OFW?;oS>(y&>Bec%p^ZfcJ)vw{B`Rjcp-zK-3nRLS^*@C!CQ~TasH5 za{)$ZA-j?$ zemoC1NMs>w7h&Zjp&)lQ&LJSyp~ey(VhfeNWr(d(V+pVRI3@ln#MTcrxx0HV7xb&Sd7gs7OB2>S@yHW;L+atC&1-Of zMmnAsjJ2I;nb@J{iL>a*x5v?Xd|Lwg)G@JUYMyuq+Bm;|(TQgW-yqtfK3`Rz0rh!6 zJY!c|U0iL6wR7S#+S|2OU?p91#a{dlQMX(>OI;4$9bI?IeR`2bdByd$#v$C*--Z4J7b9ieW>>wjoDL-e6Vx=yRhl7a-TQ(hJn|57(O89(HHlyqSXJPQ0Xq<)1ae>xTl-su6G;4C630&S zM2?)M&F|%f!$$MS?T-$QoB;W2_I3VqZ5z;5qdRXogtC@I&HcNwtyLdf2|!60J-hS4@!-dUH-35p4O zA!$b(Q>sRAJeG2*)^)v_7X24$iej7f0o$kv*uF(zTdhZ62OP)#$QDOAt{QPsjw6gO ziS6vVv^vOaN`2}u84qJcW=R>a`yEE&NQ4dl1GMMJ>p`S8!riU9?2q4Yt-cZTqx7$HJBCh-t54&M{SbP-ygzuWvQY5L*X1e> zx_4t6@pK=@XLVu4VB1iMXLOt8nGD=OIA`YPv`V-T)m}xso=_^}|bb1L(f7a16^n_Jfolb8t zy$jzdab?rnHBZFiE6}Bk?JTMD*B8=zekOheNUMf_IM0G%cYlzU;m_X07+=UeE#>6r zFa7JFa_)PMMMVd2M%DBlEGY2hsaJh@Ed6AW=zUDQ5r3pYD&F}G33@pd>w;VJhj`b@G;duR?_1$* z6FiH^`&eAr7oKvp4?IKIeV`spE34ayR=(OZm-AStk&YC8_{yguQs3}Ki4ns6`da^&)+FX%XcJD+dY%_r&?`L3O3Y#SxjY1JXs?;)kt z_j%&|7mz45{<=bq=A7+G=U+&fQ~YGHlv876%nacHK*<#sa&^~q!$;kxFO~8uLWSOq zm*HRD%yTq#;I5*He0kzhbH>6>&2s%N)k~UD??J(N?)GuCSjL-(EF*kB| zHgTQQ8<@g2$}&-nBw7Mrfqf*J7n*s6oDYR}MR{HJ18#@E+9)BI|GG5Ab}*sSWPpa> zFKco5H>9X7NO`|4X}o^M;Tfj}D4khnX$s$1!v^st>P;DijEdIOIefXI0;8eg>aR_=(?Hx6+Wkn17gf~kXddgOOY!-hH5pkdY) z8zk-`buRi8ex>|!Or!q--co&MpTeHQp>UWIjH9Kfw{#QN+vH++gCV;%8o z9Y$-?c(y?wf&OwQzEgo1=F}wHDOfmo7rX4+2jA63L0`q}81LD~&nN7%#k%Xs`tN*6{R^C^+ zYn%x&(ms+HvbUSCx-9BF1dZ6<&h(`5GM!eF#89JGrn``i9hT`M6HHiTbA(h4IsGO< znUu#czpMK_@{arHzE^a=`^p`!1hgUn-?NEwvyx8>k|Wn;G(j%K?W&p;uq?H@=1bZP zXDn#LIm*rwU&W5ux+$u?YHCXY=HrhF^V;A?hS|BO_d>{|yI7vlHs3S#YqzGo{*|mW z2lfPKJ=p$2f*yNxdhU;K48e|~jwG%gl}W7Io9m$|E4Ui)*bGh6Q|!OErD$l9<^TZu5GI=&%(X(AEvDUXU*^8 z$)c>@*Tw0cDcv)N9ovt-`TBn4QDVR0>p8=>ALLC@zw_s})j@jHwjA5)FxK8sEY2ex z-`db$djrp2)p*}{v)%jk;|({|`ZxIgXug!BPf0qoUiV?zVNgn6dZGLu@#G1pQ)i2G znd@=qU&N#FELJ^o^%Nf6GLEN~aQmONDzZ9G9mh2$!W}u{P26gvuAFH#;L3S6QmU|W z=FNfGEIWxQ>S`6%5te2i*h!$ncJ`1q$|OP_n@83l^YE0{-@`MI(7rgQg!aWXvhP26 z^DhUjwq@gAv~3&yqHSCM7i(MIUzDN^r#Jn@`dJ)l*?*rqlzdtdU_H1`z*r51^C6KjdVRFKS(bIP5NhmW6kxf3?j;*Nn`TjO>uU#ovpXcO%w z#8KOzZVh{G+j5+Cl`~p=h;N+Dmit$`rNzfO{GqF<&52V)$s4A&Xwq4e&9(8dve}hw zOS6^RmTa)Je}#}}88Uyp(Q7Mwaqdgs*MH?_<3=XG{7oC?znYsn|g<7 z`1cPN^>QX;ZBKVPy)z-l3UFF+c|Ux@p1`d<8^nC~WCCV&XrBTJP=sQtnPY zo{SXkEHrnQh!a2J^o_HwTw=PuyFU9a=%msXNQyYd*a;oo${ZnEgk_R8kU;6d0mLSf zS9op%??N`hIs!ZLzMjPfhp?3}o>C9C66&8w2^fCg=IB0LnlXTzS%nOx1zMAh%+uKu zEX@?q*&b=99-DsTPo%&0C(;9sY%A)#LZ)hcpoC^Ct|e2WEtPpB{v22_3fx^~kB-i+ zCd{r6VwRkbZ!;bD#0PNZ!eatuA9R~S&6e8i+9i5;tka$ynOP@sW_`qM3E`_&)<;xZ z*+@%DpgASr;W-zSOsP$)9nz=ZBqs8{G@-ycJY>Z_!hAz@_q2(%g@^awW<0+nt<6zx z^E&&3TVE)zd;Qjy>Y)vTe>9JrlAd7kpgg^cFw#`b>qU&SI`_tnEAU0Ri!aj`0(Wy1 zu5v%+&FLZ~cg3e5|~g%$cfS*^G8W|yDxYB_GV)Z`WRP$8GPg}sk^9-6$;W@EkORGvlm^8u|*W9X^rS&K)0 zG?t#LV(7U_rROS*p5=d8dah9EnPog*4tg%JL3TaA1Q`A0tt~azqvw;_eQRQ6ScrYS z83Ub=a>70;CBBkajqzCx*^V1kB7gY>Mx3Xcfs2PRHXlNct{(B_uSCAfd@Li=m=~V^ zw7HHQ39$1*Llyfy5w7l&`l2~hcaVNOnzl%7ljC8H+Zbx@s_oX}9v!(SJ_%kdA9>T; zUh1wmJ6kvP-Mpdn!8$K)sJY{RnP(4g3c& zGqF-_@YbFzL%6nO9#TyIT-(AsArk(%{`exqrXqX~!j1mqe{MLvygO-6nT}Rrxtitt z!u!@ms_qe z{?hZ<1t)cA)=O*#w`TqG)Rx-zlCI_bdU&vMMq|6V&%r!;53K;8K+AVJm;2eu^uw<9 z<=~KI9S3?gxSBKRaK`UC zEk@cKXg`%60Ma(5)qoY`lX>boS?ME`x`VFMfvyzXgU)$$>buj>2129%hg@q$ce0|I z2ep&O!R=S=nT^#>uG$N0Lm4SQ2;smrAw=_lfByu8qhA^VSFHhG{s2y_%sGova)i5# zcFe^b-?%ppv0Y*=7USFSd$XPXgX(&dJ}m_CIO-_Yt3djri;3 z*IVAt-VeT!bEPIBqP5~=qo_yXO!GyLQiMH;;xq56n%S>to@?PVn##5pe`yFpODeq5 za?$s+^cY#{z)gEzp)-peIOV>302w!zp}n+It#r#)O9^*Aw-^?*l9W&?tjm83pGfFw zmUq{=Zyll^XwvvcHh=y+@pt_`jXQ=#UhPb$FmLGr$HA&Wlik4_EuAED45Qvk&FHoi`Aefv>cBM=C~ew@}{O zCd`^qT$BNBELA>9E$l2AZ18@t?Y3v~1{%Ggx9t5R71Lh7?QQKF+$>MZTv?Ko`6qli zLg`@d9o@A0Q@ek=^zQ3YVm)ei2v72>DM7C)ju(v*&x^bfO3Wc_hgg}C7F>ZJMGj>l zy&bC3){n~o_PIY#9Gyi9_vd+AF!$}{h`@al$Qv06hEoa6y4OWp882JkM!}V(^eM+u#3&Fw0Im(PZS2AKMGvCwjndj`B(|Lz-#Y}~H%q?%eE8!h z8{M!J0O#6C1^Q=B+4<>)k3aexzn4D5xpdEG8?Xmas3a2Sb^bahZFs`JuJ0Z|cfyvf zQHXnlw0t*u*E}(D$0Kf@IyDV{SjTf4T-`f?)u?RYD0tZI>}M)9B9^9)3H=|lciLBT z74-?~&VGa`v?Y87D?m}N2iB3hET3$ca_?sw%xgolGOhOhkMD@~c@tV?JFUu`(hZiR z%=Oq&db=&opkI7yS+j2cfYTo+jmP&EKHt!IkvnL7u62KkzmN*eD?V&|LSjfgH(e-U zSM}qoe1NU>mX;dggirQb+A%ddj+E|I!f%XgCE5z)8fujrJ1lw4uz_mpt9JmED=mgM zSW0}f`jle63|QX9s*Vte7p6;^qh6eo<9S5wL>s?Ohp&j@FFb0;&v&?1Kj^-7+N}*v z<88)cx)*{pjTe%boPNqOsa#}*$Rpq82g z*&QgIbsM}%RL&t@9y^coChAD#c*gDOH$-v6GbTmier|d0m!~-RrrgKVMe>YCaAmxC zmAi6TI6Mh7ID*h?D=U_Tak4yVywUvYm8MX|V$Sy^i?7rx#`>hLbuY(BES~9<=Q&rq zV`poQUFNUAIEh+Xh;d42T4**HN_?FERh%2nK#H(NJ+u~T=*Jw8%Kj_cAUGAJNFBpj!#d~3Z^-;kQ1=k>)0=8VzvPzdQaCY&!j5?JkKO!|g`hA( zuQ@6bA{2Ij!a}1fFF8xY+Y>81P=AhpU*oFcYK~*L8 z9M(M3jqs?i(KM*V^F28`Z}Y;ERe0o|18F@jnf`{>{M34C{*ij~|Xwcpb`W zlHWQ^sU=3Ts{3g6jyMEL-BrSx@uUbp5nV+*lXAeg1Lh4S+9G17irvBl!>CfT94js5x+;_lvnR*w$ z4oxc5nq82o+*jKhfaE-ih89@m)a@Xd){3=Zz#f>S?#XUgxFm z90X&`iF>Js7I4{{9{0%d@DhI-;xN5WQ&V)X86U0eJ13+22vgDb5+2e;tMJEDZEot{-vK4~MLvhV-y$j=hHY5(BShXn`KMjlOWQy79Vj;8HnYWX9fMW`6jS<)@^+e%Q!rlU^SK}RIKo>aILP# zuGk@zDCy!?BYE1GbD*^13};lgC5>N+p3;uRJ;f%syzxbP!#IZ4Jn{OQYc`vQs(+n_06#Xn_q7^W_bmASk%LFH*7fft9w1e8R5ONa67E> z1aEl2y^qUuI3-K#X_I@(-_>}{-s-}Y?pvRZwuUzRqF&jSHBYSB%(|;YJ9rlptqnB~`~ovotI&nGnuK0ouCbocmPh1HPS@81YQL(7E zu+@{7vE}T?G5BYLk0PG2PXTYyP`G#CGVrFJJK{Mkp4QUt4qoeywGkhP;Q;D~xI3id zEkS>Nd4X2EDE-gpHny#TeVv>}I^6H(d@4C%6=JJ_E8>PDf%wH;SArw5hSqGZiExCz zl((VDewQ8^41vdcblJ%wjf$R zb;~uIOS)K(t$m%lZb+p*Jo+XlM5v$g>oGO{tW(pB_#`LrDLLU6&@omZBsqa0t*?!K ztB+WU(*JyJJ?LLCn-pKFt4u&^zn$;3Oq^Png%-a!12=WI7T56hdJT6m&_v6Nf1r&X zeG2;^+brmwBIs_>tg1gH-AjqZ@VoC^j-E@CXYa;RJO{f1@~mf|D?U&Ux_S1S;17=7 z{zH7yb5q!zjrD2hX$SN_A5Nr-F~yv;)WbUqf0>hKJ|u_X+girDwEFClu6tlLx&Yph zJj2oA=+_|Sn495wFL!9<{!FZw!3H03!FITY8pNs8*w%3OVvQSL0SnWU5IpuO@_7R| zf!pje8+jg`@`$C`Iv4J_Q98sIP4}){y=(Wcw!Y*~+H(N+{3MOfec`!1hj8wj_u}wQ zoL}v3_cr4mJl3`YBf+&~CZu4!k?UHi>2a0IlSaZrQFwc;!0s1)!r_x6)sHS-#ymEeG!bOZ-6dpwqj- z@<;Q?d(9s1kuAcnaz{A4l+P17eWQ07cF<;fuooV*K}Q@p#rvs8-dl>jrIAz1#Jdge zjsB50X8Wks=eg1LmGVv$c@K|uxO)DD@?!939(J9k+*#t|jT6D2fYvK{)AR7l^yHwQ zcw@5(H)ZHc$73bUI2l7vvNt;8Qsmn1iqoSpxAE|6<5;8PFTQjRn#JDK6SZr|)~sxU z#xf_0!KzucEmOaZ6Q6w|?j&!Hc|WZTZLU9^^=@6u)OV-gZkF%e_Pcx2bV=jCS7U1p zdlJmio`hbGEm_x6e_Ee1ZRbeZuRF8eW&2;in8BR0Qm&nVpWgHET9<7J?>%p*#@;gL z+G==`0Yi&7B|_5dtK^V>P|lhEB~~eHLFJoo7(QjtnbLJZ^_zOcY4~+ zDPHH(ws`vNl|CJcp9y)L130C>4#nrSah~Go6!=!-jb}H^6L|}y7Ry^CP$BMfqrRVyb zkZW}wT1SoJu3uwCkjU17UzgnJsq{_Vi?`KM2dx(8rFD_>(k0jdzVrrtdt^Jf!zpWH z&tz>pN$}pD@VFW4UB)cnku`nq*YIL8N|@nsT!WYav$}t(QR=8AgS*CYB}Cp+?jtvr z_+IIe_3-=*?@xpN^S{}96Zoi#Y=6AE`=-+*T}cxRWXw{8PM@!8dMzMY;1Xn%^Gp7{}{n@VSl zZ-2_&_g3+!IGb-@{B2W^B2T;134W~RY`_WPQr}xwt{(kx@0%)Btcg)PH#tYEosn!< z>3H8;UEjTXq^vR7pdXiWd(Nmt^3y4|r23Da-^rJ_CytV{ zmtQu{*|@O5*OOB0-PGH)guQgH?Q?T>de+?B_Xpg3OM2O?0Uru$d8-FjGS)V*A#d%a zN=qqjsLpMjLMuE9>{849I(@V8i(LyFbbYAQ*I-+ub<|~Ee>yOD)cz`~?ZanaJ2h^P zZp2CrdOe-tD8|_hvI%sKql8myUzq5XAd zczTYQ-V^06fqm_e{cROC+fQ**R@JnfX7oC-jw5|Q@}BH((M%+zUYmtzCA!!TF2DJiyB}x?^>Zh8)Mmzd(2Kc*6O0pohj>ce%*=*XJhDom;~@o zC*=BL{*!<+BXqxWKS+Y!r~@w7y3oD}(B?(($@hu#m*oG5UGZe>2F1%K6s4>i@ob^I z50vcV{yuY#W*Qwa_6;^0=?K}}03KOmIiB=yEYp9pfmV%s+yF0NZ_D)i^}i4p;%PG@ zt==!JLz~oKZzKfVjg#Ico#4WaaPiH?WSq_L-9fU*r6&c`7t*&e^DR7m0{ctjU*OqH z`3zfG)G1qz5pP~npKeh1$eMmA@kP*Stc7_0&~faH(GJWi`*$&oKm&*;zQ*r z73a&Yth-i*`#At_#IL-=YGK%n9X58ltTFrqJ~w{Sqy4J)KVuV$aZB2_I$s3sF9h!e z(K~#M)$e7)?lyhyYpxn`qmqn@NfHm z2tWK?6T1w^_~Ng&yK2V2j5|D3|K@5L#$S4O25X`8H}KTb%eeDO*il#A_+ol{u5aHv zu&2~t$OiX`q0-mwQuL3MUqUD0=Gneh8(2-ltYd=wA)AA)A#u@ddl)o zxV@?or5>(m+j$XTlBkrVwC4Z4Hdd1=`JmU!Gcekm2j7ilp2Jh>3(L=o)}|VqE;~26 zZD*9uQ7LU$?W(Mtma;x;`{udRF=vMCbGF5+GIv+2KB&0&5ciV2KR|7PG)O=Dp1hMJ zwPocw_q3iO$qjs2$}X+g-mNO!V%vr{q8X2-RGAvjZZD}ndn%>M1??t3J@fG2YnLbG z7^%(D-pJjsyJ2tTm4-P-Q|fmZF;6krj$%*KKW-}FG#exCQ|hs2W4Kn4=9Gq>T*$kc1JrR;_tJEt51q@YUkqz)tHX5cM|^x-9yO%@7%K9`Z&j zt%Wus_P?vgXnjTAud4N!Z&6=qft*vWs&#j6bmD#rlAUISoW_6^x{7+m!wO~jteYKtJkkmzI-FR1!rJ0~v8mj-hur!~cpPYc!$etp1`e18%3hS~j0h+#W+wQ%W z(b9DD`xwN}qYqyz%R4Dsis-cMdUh!?xFB)1zENcVxLl@&z9&DHWI#u>)S_|IopD9ab9&#K6+&H2hs;yh^HdY z-z9x8bsY}R-I2CHz8_Y>9_R}E?eSs34^Esp5^eS2T%=JO>T175yPrqD)@%z|zg=kS zjo~q{E$7k3uxuyWKK#=)w3e9Nv}>3QwdoPz}a?xDoO$;fL^~0>SS{dbGY)Khg&4irf;T zea;?9kJR5Nr;_w=Jx*weH)+xtP@)JgvuYd{@4ehWaommd(pTGQ-OA^W%Ximkapk)7 zlA0^qWxeS1rqB3x#HaZ(!F#tUBcx(bx6A5A9=6Tjw{Ymjnh`4#+8pg zlel34LVNe(j7y~CX(MK|gpmdKRLu2eHhr~y4m|it@ZhJyJD-Hrv6)TT%jaOtet%Tk z;4k&(V$P*sE!{ui%+$8Fh?S8cXQndUs1SEUMB~9@-%KZuNhzIKe{a3BvUQD*Ujugo z*3S6M#yXwwl)k4RC*dNug%-A zQ;B!sw1h?l?}R;;Q!{UMUVLN-Xx!2qZ$++t@#o_~qpCTc&VQCw^^12@9$n?0o4Gh= z9-XysYu%^YzBmG_X*iRi@{^PPuhhQNi5a-@*Nxi8*tTG=Bc)=_q1Th?EIh419B#Zi z`*ND2VI<;?tjoupbFXBNZ1NnwIy<{EFL}=KmNnXqBw4802%I@}-xe$--1-nCB?q3+ zL0(8{;BVbsFBi3toU&9oWwuB;W%i5N5kt?Nk!)0X$7^vZagtRMD9whnK=INs^E+3Dl_R^Zp-5$t6?;cb> zryP3Zpu3AiKj;zE4|)drfjy`n1T^pk)d<DSuMqS$8V3%4DNkdt{U89qiSasG%5it2aU=S?VsJ8Mg6aLR#TSfe_5gr zSM|=KIXU&foO$;ga#hb+eRZ=ZetVX)A*W`*;H$?5e3)4o88Y~{S62EeE>*^$Rp~ZzlJOOiarM^fvRR%=O}?X( zvg@*Hw$^Q{xl}jy<=o_*$qvX8?Y#Q($BqWin#*5Ey`j4+uGbrSQ|GcW_>*CqB0`*~a2?!9JcrvRN)?=QV;83scrwjQnUYKmb&sESn9?9 zqbxOA|36`;BSSPx{Xf-C)9Nbu#gAgeHs@qc%z^rWrJnR$+@{{AG`IRtz0GzAdk6Mv zx(`>`jdh2ycc5K;9Isl%oTUVBtNL3~Zgp)%lC8Er9&fC@a>m}E)Qh`*)%$*x&e(<8 zo$#r%T1jd7lycas>H8q^(d{}W+y|UfxubG#r5ShUns;XoJX0}pe@k`j(VT`I4S98$ z4Vjg?V@(*H%WD5@bKjCv_f=iLqvT0ABs^JH^;O*;_q%V4Xv9f#q!=3u%01PE<>2{C zWq0ez1xeWTt=wO4v~8|*R94~iK-4ZgL!Q$7wmGHcH6qB zH($atDzTL2RW_~C9dmz?i&e6gQ_bs~qV6;*;`Gf7lKgkCVN6VqZMyRImf1me3V6X(D*+n`?_&~t$w9w) zWN{k8BXIK$m77-$xu9(Q9;Gwdw{z=9;tkd%*3#TcT}A2Uu#K(jnhyGoKq#e6n?>5V z9xJD;&V%N(uG?R$Y&@_zMTIw)9ymB{{=Y!g}Z3nUY0VIFimL&S{getAo6G)Sism;^TjE2|jX&`h`d;a;wX%3B(Y7I>%c?r3OQ z^=I4QhP(XIu-fjbvFzGkZzfs%3bOc!WMNKe{(#EYbUbi|NvrR$&F$+OtZ&Ymp!!1F ztfeJYq;=*}2hMN#xFY7;`(_Z;U>TPGOEmFp&ri^VZ4IX$eiAfOD-`sx96WJm!Y`g9 zu{}^fpP~zWybk%rfS|>D$i*+ zdn~u|%T;+b?su)|l~ikz!-Rr|5GR(+Jo0{CGW$as4pHwGAGj&#G4J+9($fKg!3y1@)Y5ZLP70wT+Dec5THN zSe9Xs3C-TFoXH9v?X(fkF3$|nsHc41@@ZS^30)p+TRm>BY#WPrR#%%)j%oKIv2VPE zMn1c9ipB1lPotk@w`25?_2XF4e%iUc{LHY8^y@jirOs3Ch{>$WtU1%gQLQ`pNO{vQ z?3KA|nlNk3OD=oNearsG&e(Ep>(@kdFF!NoDCNWbU@^LSXPpzdT-CI~(k^Fu-dy*c zg#B;(bLP=Ijwnn|V;7W%H5Ouz`|`8&+@503+n_vnWo>m5jT^7yO`~tr?8nI~dY6`~ zrV8=RHS+zVJ$I#4$h~IIVbe>Oj+kG%__p#={xgcb`GfezM~Bf_DymIhmhw5>5dn-$ zAD1hC7q=7Eqr-f(x)#~9F{@kK!OVsOc%!WyZ?rwI>f$=Zjvcg>=*7Q99rMV z8mQPEqrVw~65Dn~e{%k2_)9o!94?6HbXJ_`k zsLfficQuZ*?UOg_A1#N*c5CnR2&le(U^Eahd2f{q(KtT&hQ)-0l7{zp3@)m^c?w!t_@@ zjS(I}f*Ad^-b(w*R`>)%pr3(0d>YVL)hlRULM?m_vU2UI@6cWO)Y+8VQ`w!fZE2JH z4h1)y)p>fFVBV|GRNiysU)o$aKv^mKC|oeMdKl=JZs z%$~liJf(_GiO}j&A)b=WZs=QwTn!iTeW@XqQP0cS)*s%7t_pA4+C%pb^#`TA^djhK zX63@B!6%oOCo~OMyDK`WY2dbeS~02b*VG&F{!M+hDR(!&KPt{tcHxXthP#{_J;^RS zQKVbdGwH%9x}VZnedb`(F;8XF=Dam{`=59-r8_wHy9ro5)?f&Ax!DZ!mZz0AiPmH{OC@d*2-cy;f z${mvzPkRJy2OX8vgQ@?z@h;$Yv?I5d+G|o)FE2l`zLf2X-d~kqORczjb+6Z$PEzZE zxFdO2v@@OVqoF5%A)7w-%4J4(416W*>RQUq4!XQ<5k~audJ9goEl_)lwwjc=9r}sW zUQ^+5ezhGQ5}vne{(wdWH&y~$Pf`0MRRwzINc7JBqIXi;MG5C&F&3xfY~-S0O)mq$1^B=*0qj=HPPzaI-C~mR5Rms}DCee~NRx z8^*(vYF&3Pb|MyFS0WA1fK6)3%DDhJTuis(F@bZ z(@*(H{_!N2@aLo8L#0+&p_Sw}VqOKmG0Zlhp6q)$yhgeeitYs7U(r9QWSI0B&9-eX z(^>n*0|ku_m&@D1=+0oWCzi&NVL9TyFbyI{TAO-0tp~I)1{#@(UTY8ZT4+bv9%;!g zV0@)kvf*?YohtKITj6D1*Yjp*{vB@O5Ps%K)Pwv?a1cdaYx4)DD)Kh>i*_S#bCK{i zGgWWX+RodY3XWniUZs(@S<Y!_xfBrW9dR(osARaW@KQd)G1klHH~X9?^LKfr3+(UTL8 zp#J0V&QFXcc@0$4lvP&9AQm#{fqscIxqO$9#J)sXf6M^}?cZa@x%KAiQFy1|T%Egm ze^vjD1?Btqw2e*Il~m+b-u^}F>aQvzN>ifBaPL^_>Q<|%acgy}b!#-wWaY&zg(=HY^_e|$|G!4Kb{>#spc@EMCgK^^~UTW7pjN@lWb{l+bmns_RkEb?g7Xb-g!qT}py# zE8iJHwq{>1lJv^6UvF2)Zmq>?Dm>Sn|Ax15#_ed(a+rW=hE*b5>J$5Gr{aEbdJpf8 z25BprKiFR%vmfgQ|33*ze^_*=qerfGZ zHW@Z9SIqx^sh&fbo0}ClheEU5W#xzQRvz^<%vd_l;^TBaCJAe+zY@Q=DGy$&>Vxj0 z)ifX9AyRT;k{Wa4otP=w>zY^qoI=?x$$_%i8wXm z<7P3p`)5waNIo7a-v%FUdwOi61FOI^5^3;(fDcM{R6473uzEsgaKveD+>J~3#%B&Z zP+?hFSUzJ+8}s#olgM^Jj)!pPd2I#3HZ(q1ZnW)>s>E*v#tphV@|zuxwWV)NsrRja ztZiH6mE&dgy}uX}ccts^E0m+2t`C-{_*d?5S|r8{IY#yvkGDnORCtu|@5d>n7=eaO zXuQgb~I%*l{E}y}2#`|uyJz}RsI4UP-CSBzAIBIy!KmMK-zz!Y44bB%xP)2CrDKy<)7V(Tunzz~ zX{2p`t;sf_q8WDr@9RbNORf6&plNsOYv241w8mLhHg7+0P=@~lcA#~gdAHcJ=yha0 zoo7$2!ZY2r)m_q53Zs76?8o@{;EU@^m{<)SZ`yrjUGsJ=Zw_X!mrGMBat|MyRq7|Y3th0Ah|>JSaYpaHf;>2`(c#ElB$%dcN%jlF^{cRc56`FF<-R- zP@}E3wi3@p)*@GJZTs{`MJ~{2M{5zF$|l^hjQtRE5^kr!^OGr6vj8=1!b%M|xl$K# z^h%wUG7>4~jTECY2T}~0Vcw1R3sgsxHdkwS7D~Z=k{V`?c&1XWzxmfc-@}{DFb;Wf z8W5*;;S*WVV*~4x!E2N7$wZ%x*o!qg=&)n7Ws`G?vMDPEe*enia;)8AzKQ2=7PN)7 zwLYNBNk4>}|7$BKURX{xy{J44vZe5Ngk{fd8#@9PpLDxzhyGgiM%=!dpue^){z$?| zW;&W#S6Du>5l{7tlTTYjZ!N99CTJ+7PIin zo88GP8gcdt&&`>SrmmKCD*%T%bC;L*TF_?D=F9(y@_NOhJO}3d&cK`>7EU*dpzV3c zNw>k?IvWztfK8V88e>=6^48GY;hu&*P4}(sb*3%!(6L^xMV9_-O`oRUuj|`1d2M>b z$H%CLPg~Qs={M_au+xs}yqbMJS|!66d_UHrdm1xe`|KcCfs8Y!+d_w6ok1(lQ?2&y z47s*}v$$)<#x>);rO2~e=6UUOo55ZOyK(9}tWbV}^^N9rd2iY)KUqcE$t-5n!m^vr zZ|=)rOuQoxHlXc!rju5{wDM5Bo2*tM^?D2RRkH;WdLwIa2tBQ%HFyh9vIf;ZVhvsp zxvsYcO9Aa@4Ke|}u{D^4lz=rDjhF?ywlu<6Fv19{fYpPRcyp;{7h-_ZEMe`egRGzQ zhkt79x6s(XT6(Z@>?a7u{*P(r;oR|at36)?Jid-&zj#I+bE&x>(%3I%#3}L|s!5Ez znCt9{3{g`K$n&Ohoc8gf!U80Uy^g?XR0*Xx`4)8M)EDvH5PF8Ft%7#(lJ>69Q<$E4 z)=r(?!B?F9y8DAQc)B5yJdyL@X55GG;q52hh@my!o^-yK&U5KmT%j$_X^UsRe3#el z&9*sw-l77Z$5!YnSnMjW`MkD#UqKOY!WfHlGUo6Vdz?0}ugFF@Y=uR>d=+=Jt=OCE z^(~P(fbORmgw&3pT868jz*o>48SeD?oSDm96l8N2xeIOhZ?{dmZ_cEN(``;yk;_r! zE3hqb7cC;59gE!gg|>V!ndfsBdt6~Gv$)VU*ltT&nwcd3Y=f5|=0s#9NHVwAU1S6C zY*!I@E-FHO3n^aYDlD=U*z-i#okwCI7FeFWun6QuxNw=*L7|DWX3dyoD{$GJgqBs{ z%d-{w9J!zv=S(2BgrtB+m9n{(x*Ww+j;&~s%a&E_briWF(y@dX#_sVJxE#K0uY0-6 zX-iiVQHI0gE2KP9K0~gHYqW2`1MaPAeEq>MKUK$bu?? zd0@2$d;Cp3V>Dz#B6S_)3sEzB6L>vMVr&^Ao=)P5D|^9xGbBWtGKN8Jf)<8 z_?;>ZyR!ogwTi)QP5R|^dHi%phXSyGjk9~ub?lG}Sd;pDgESQRqiMoOkt}YIj|vnS z+v^dGUXjmd^Vkc}14P4W@+n$W;3{0?gZ;gsh|s~chEw%{dXY3Fsn^W?v8WOBZ!i^I=G6mu)r;5*xeHz{2-iqj530EZ;4 zg=gFq#=Ji0N|D_L3u==*`ttK#&|_rI!WiQ!w0T@vvW{eogT+!vw!5$}tJvdNX3N58 zRk+ASmPVB;N-Ki>ll@tQ)Lx{S7vhC1nM{)%n<^845fiHMzp+lvN||QM!oU^hftE>r z!_@LgB7yR?n5az<(EzW`WnO!p+u^r{l8<)KpnQR`$lvEQUTElSpRLg4fiG~KY-Y`v z+)h?`z5*K1>|WbY8`6ZQpg9p?j38*=f+DyWMYbf-<^-dWM0C9ZnODn!QDZsT^g#Uz z^D)la7TXKlWTJ^cAkDA07-OVupf+d+{fBiYxqD#y18#%#CQzvYcOH2u?aS<#N<$Y4 z6+=7eksQy73o;79zDs{X9YFM8b%L|}R34xfiaeTK*Z87wTa1~0|AJDe2dFj{BKZkk z$XgL~y*{rCEMa^QzNp`Z#ro{sTl86`qK2qt$xDb>X}HDl)V8FOaeGjk^NX8Mc?_oUAz zFoma0oF-tiX8|&C=BycWW`r@#9ts%&-u?a&L-S;XJ2Lj<&5w5!*b5hh zb-zC;kIH~sguW8+Wi<`tf_XU5AV*%1@>XH-y^bM`@^@$B(9~-UlX^;*Wmy z_!#g}@WC{X8S%kF2Uf2b?&V{QgcpvF86W!lSMyA>=jW3J$#cQRE(>FcPS@f@M2J>c zs&E1@dO2+xoHS7ji)o`&1r0aPo=>ERmJMU7y*J^f&YqbBV@zWwu}kq86H;bR94pM0 z7>21UioqHRRO~7o>mR$b+*uB2mq&xhaU5Q%3b4Unu;mvQk-IK*WHbg+hpzxKF0$p@ zi)fyJam|~JJ^)lvK6;IC+<#<_8MjoOWd0*pWT4-flM_v0qvM>Sv;Nb0vtc>B*&9X-n|39Qu{Q~3H-_FGw)2XVI@IK+Q_ek`$}1p(Q@t5RFZzUvp6qr z8G4zV!`Ni9^vy)R>(c$DE=60yB4YLeXE$kSdXoG{jrXtQQ?sR0KAMI&eEDt&0IEe= zN5g>Beu|K5pqfIO%S@lE`ZW>Nuz6TGsIpI_}ZH0^6Sw)hF)a!I2C>9`SO~sv; z?{Q&@3uB4am5UgGZ)!XEm%=TBmsX4}HW<@ZIXy?3bWWuQOUoHVQS+v#G%AMrE$J|L zA!m+E4?}pg4Wfq3qy-ZlO8UA%!u0nq;T$@aIXrM?$>$B|n^qc;&s>J`h&*gtQNc14 zOp$ar#~!WM!Lx&pmRF4BmrNIydQ_2mT=ra8<2=_AO7CsE&sPk2(wc*xzH2cSpWq%y zVL(=;piT72*3lo?v>&j{O@9-7_5vp@CJE2h*={`o{SRwLNTQV-G5bZ+(l3a~6{Z`d zP#Pw0H_U~nCooyOQ4*Qz8^JXmoTw1h!HI#<3m}E3`&Uu?BMGkWS8Rf=jWFqstnr0C?RQRJD5ts4+|NdBoE0u>1GDro#C zxYg<^dGJf{I*#Y4kGL~v%=UXc*U4LBJPkg`WbX|0hazeL2_`;W?W7~SAuOlt zfVA=#+y$kdCHMwGNiU!oTIL_)-*$sMH^L1-dN!UK+Y;5icWJm-I$jJ zOHrU*564tkwB=mMu?_n{BrV!C8;(t#EcziKI7A(>hXg@j2J@r!%ai2_KZ5e9JYjz} zKv+z-RG!htX_La~&O%X6+ZdbIwZtE@5ooYj!<6Hjwl+pm@wWzW{5?qSvH=3mTp+2% zP&5AYpH8ng;7?KiLazHW{)4~J|KgwN|KmShcf;*lY;qlF0nQ@+3gJ@x9>?#s_uJa8 z;djUfZEdl=*^mAyiL_!Q|7b21i=d67jWok*|JM;B(+N)NQ9tz;Sc}q?Sj-X33S|0> zufC2qDl1f@rnAx#OD754WNj5B=Jw53HT77BXCa}9`$66Ehe$XHdAL3>ud`` zaC-8ov7hQ-o!gKITYjso>NuPc( zm-SfzM-%uc?^XQ%%1BuM+8?zc<+PUB|fj?^Bz8*;nRrExA>TFZ(R?3lJH5x=U#j~_>|(a8lNrr{0g6= z_?*Y*JABMIqhiBn1U{4SS%6PIKHoK)*vtbacH)wW(OvAjPJ@RQ6KlBwKF*pL-2*)J zBGQp|?HtlBfG&Q|e`R7zzcjH!_|Tog`*C;RQGD(_Pi1yuOV8jJ`DTJ1-4SfQEM-bM zqGw;A`4k}@YU?P3sO{-j`|E*#o=ry+NxTu<#2z4JQU7Fm*D+f9>Ile0oJNrdGJQpv zmcA<;vX9VmGbYow{z^-C-eY3jdS0JCC^_L9nuRnY3WCiKDR@9$_H9H_2(7nbK0M*-ycqD>C|7J>yTdl zy_R13TN4{d9YFn)`QK~P(&;w*tPb*DsOZ)D({0UPYnkz@mT%J1lW@y3*$wSarrXV0 zI^B@nG5tcMmQJ@sS8AE@EAtQUqNUTF(@%9s|6PohPPbb>&>=nTW-a~R<0dvM$e2p{ z<$bht((#QQC28r@PdcV=8?L2OzwDSk`Zg_{ z`tBzk=&v5FrBnai&>{WyJG6A_%Tqg~f10ADQ$L^3A${INEuC%@_jXAC{w^(@?18s~ ze4d}KrC)9|u}3?kKYO>9PPS-Khx9IUv~;pb2_4G+Q=XPiwrhTe^pl&kbh2C5I;7Wq zprw=D`}Yp%r5|bOWFueckp3UFS~}UnKXpidqE1UE`%B}g_9yjEIjp6V{cP+||Hj{H z>13}v^5^(mODB6B)gk}ik89~P4s?`HuWz(;8WR?3%;8ts@xPc1YXAQZ>Ey%Cf*ltV z0Ts75er2~IoBt6$8IxyZ6c%BtJcG761sXM+H1@wqWbAYtwkGMAAJfItVL`W-6#z`T zmRS=2sDbdw_~%Vz?BiSH5yTAbOac2E5GQs>ovsY+Y#NX1w3HK`Q0bPRC`)({mZLt2OI#(D5F& zLqL7`?SNPPs8nmr^4W+Hk{z5Lg8tFjB(@45Ar!Io!}e)WY=^Kbh^S?GNoo)sfvvZy z%+iS=_9S9dMcVSopz}wpSxr|D)?|n?i)?zb%vIoXv%extc_`fPHVGGJUf3EnrgAKF zp^$~bt5MIOWY9E?mblr=0MfYtOX+F&e>)-JZ|iJWuSRp0~phK zXGU>8R(M?OrqPVapo+w110otw9MEO&s?qCCRScE+AYx1s|evr&wzi1n3yNgi04 zC~U)2faD2^RR8%2b`U^1{pI!oaadp_2Q?Ce>JKqMm4h=_U|K*Uqf zi?qZUUe7XC2|y5nfQ5=)?kUx5?=+ztRJ&9g&KAQx95TO(0|ARkJcIllJ9 zzmbU7gQGD*f+E0a#YM|fX;+us2^e^52g{Rq6PFgv7U!qgHVL3jbrljDC$a@lQY0V< zWiudDnmGKxIL1xH&d=&yr>09N!$4=f{J6^%WP+LQ`Vxk-ZK$_?+e_ zl-rSPECy5wm@AJQusMLxSVK#S?0GeUlZ9-*M5WDou|LfI9RM&x0G5wIRpg=tZT1vm zNJ$7c%8apr3W)}D| zp+EzKZ7D)5n~r+0@ra{#{`fo@PjM7solx-am5^yJJ5`B}D+q9vKO>R-0x__Sv)=v| zolAD9*gK)Pa2fL=OlEi{$^-#cF4Kfkvz>^DF-=6L*|8LelYoZ=)R*55cuGUnbix4R zMf(u5K(~l>7pAOeI$Exf%|rw>laXvcp53YLRj?gFFe(K@??Dv=2Mwd@DJ@3EB!dni z6fr%Fpz6d?h1g2zm!!$#ue0b`0M-N;N^S=m2GdA7263?U(pSMj=>peeFRACR0ntu7 zP`nd-7IaN}0Yz-mfte?I7NWTz&i%$~?LBjR*r7H4PWvtLpeoFe!! zf>{OZ1b&vlqzL~&EFX{r#ThDg4QXPBx{yV{TB2DX7PxE7hL{(fxiQj>&ruSKNDhf^d% z>5d~N_SB)ekVh`N2!LB`M3Do=z6(Ts`78`3TupT4vmRQE4I!H^q=^c-*my+AnGlg# zh!hEXC89-?CM=-z2mYea_&^IVV&%tF7OcG=+Ihm5|sS@4*7#Tis1Yok4b;9(?AE#mcv0%V#IK&>-s)EvBJ;YWk z^I_sdxh86Se|a4M8;I;pOpXZ2pN)V^F!doIilS&N<~bBqHyzn~i2HXEeVBuZ9Y%I1 zCOyGmj7jYfp@b(X1o5$-QvgKSb_#$d`w#&P5fG1f7=j%^oQ}-<0ZjmCYYnmm3fZ57 zV5FFZEM!6eOID?85JXgCKoCIGhT$(%M~079mcK)zli{OTUxqjg3Zbb};deARohZi| zhMP1DR!rau7;VY291VmMkOjWQ80-OnxE+{mXV3|}jKzqt?^GzlDirA~p*L_B`7oWz zSS%;!8F>5#VerE?!9)cL^I**Ou$3@LxnQR-5As9Pvpz6La+i}WN6-!iKEZE$qHGFm zOMsM$&+zv&K6*xr=-sg%w!Mq!zJ+=00zz_qLk^oLkcC+_7|c73r34%dpl~UIV5xpY zdVZF$viuNuQR+etze-b}VH%vjhh4fkA8b zM*^U$e`j6B$(cFDAS|A;>soM_42MD9Oe^?n5i z%iP&Tg;}r`_>-x$b{|Of_*12vXytyoKd+Eep}R0xPPBHvE`Z@)T9{QR=VSkDv9p)!gd0V1>^unLWJ4zY}k zdmuznLaa!n-GCqbiD_z@%t$){Px;gCL9Y-QW%Xzq;Ecb^QT5zXQ)Q2$U4R~F2HE30 zg^LQb9wpNwK=?Cc{{=o7SPNTD>%)S)tU2uxwD`%x5Epw3{heBJKpO?`qt>#kQwAgvkc|NiJx+ z;55=@6Ny5km?RgpTkyC)S>-|^NG@o*V67h^m$0og_9c4pMqY-7~P#fA0J}H3S)mU;!J>k3{p(`>4tCdtDii76qbVgOr00WnN8oIr{pop33mX#)cLOb9654Qo-7(t{vKGAu!P%FPl{ zVa6{|dyq;3&XZuXpEA&pNF)cTqzp$vMM+Tc4SJ$Ac)p-zGLY^nLu8uS(33C|Wz1r@ zi^@qNy86CW!*t|OhRU>9!+nG~>^70s!|*Fg8!j8r~+hCdk47J_>NGGTZPS32(XzHoQs|pCMz4 zp_uACQ>AK1=!DqaGRJoGRu{*9!&obiZCffhH+F> zfy#y9Rf-kLn8NhGLe#3188%Vv9?|%DiRAgHL^2s>Q(B3PnGKz(lv0%+rawmXlyXV; z3AGev{u6;irtlZh79o=;#^WH|kjZ~VkQt|uphJ~Ts11FD@*0@&U8L!Z`da}qh1_Lm z1#ZYhm8Ri)B!*0(^7MVdIazVR!HOkq#7e% zLuzQ`GN79xzXwhy7I8@sxh+zUBwgedFr{av(WrDI60D&q1{zaCv;K&0;v|b=+1;s> zzKWq0OouKSEMg|Zt!V#Hx9kaK!zPdl%^5DzEX-&h02A{P44ZV~HYFj0+EeX<$)Qf*6R3H=N- zVuzN=SbxJHZml3Ge6qIP9$_@jQ{X)kX{!ZvGTmXbb+?N=7 zQN|QQcZ#jjs)Zqhg|3k?v*7^P3|%K<76Tpd2z~WkwOXWJp&O*i#2T>w&qAwYW7xpL zZ$UMx9$&_{APk);Tp@nK6)H7cp#ErKlCZW)JIxG_Q*0Y4CTX?MN;vwMaL!)~Wqz|D-ze{+1pQFTZu&abd=MdL%8wg@V&=eZ| z7ebHUMG!I(rjY3E2U!iSpJ$$@Rm}P~v`~9ul2EBu5Yj(fz5) zx02waGbu4ya50(ajieHyAE3fUQSs69NEWyE2W5zz0Ea2Z*i{s~nMmHTn1Xjx(c?t$ zP0BpJjG#j(bBchTKwLjT1j#DuQ)#%5wiBCag6=8GCai7rOhOQ@LUcI^|4u>d0pfa+ zD0ng9P8P&Cu`@l6i1j1{F(^jgMRaG8ZHR_&xpF6 zK{b`Wryv69c0`XsP#N(Cz|m2lql_7a;-YWGmy()8!AoFDNf(*jlzBEeD$%zQbUryJ z(N|DeMT+1NBIY3rgqrX6L##`(Zyb6TSJNKd_X)mH_ zUJ*LwumF&$h|b1W=v}7-fGkCHH?SN!r$qqB^hG~OH17Mm0FZ@??uw#9e-;5<30JK6 zwhY0SG(t2Kb*88`fQ=AX1dbk!yrByx3cy|Xwk*V#%toQkganFYU!y|^*Z!cuB^w%j z4$#mYj|l)7lju|+8%L2TijJlF-cH>&8bD?oBZPVn>R}u!RPHm9%^f7M*vF7p*XMI8 zImDo};!qJGvqF6IEF6RsT|T}Ov6qopSl~#+HBF1`MTrycnLITuk!F^IaraWu;Gsj3 zMI7gJ_6AqNA{w-8uapTgq(PupvY7 zpXo|zH%HHI62%(P<`p;vN+(61?$6kkLH}BrbM90 z=_6d~UfOtO!eR$Ig$bz1m}>|b4b>Iak{qM7TM)}5GeB;&DI18(adO5KI$j`#rVxY> z6Mz^x!7E~Lt)cF4t&L>I;bA`qaH%QHP>wwUQwqfdH|r6gkH*c{5rl2}44}q-!0a^0 zumUsWP6^VFV}_S|A~slh5DGK@9f*I!yjlqx$TP7juH&DBf}T$X%)m2|RpASqv{#t0aKuon#1Adj#Y2}11e1~hEtU=h5I}GB zVeHYc*9;q?ka43%W+zGx+eGR5zIp>UBUbg8h#8rY26IenD)8ecx`ahsBXHOjzM%`% zVBjdK!ERJv;ccjaiPze|FtEw*XL1tkM1tMlL-kz33;@I2&V<5*n3@)CVCRQ&^(TdJHlTOA-SL=vjRvwxMbion}zIZ3`c?PQ;*X(&bdPBTltbwJo9!aV2~hza71X@rSV+q~i-NhKM|q+ABy^w?e}l$$egWKbUey~jX?{0U zHJYCu3V(y|LEGKLi+~@;JEKhp@pI-0Q=d=>O*9v_~7 z&K>zo97@$k-UJ49`p91BHF$ORA~0mqNB#-=iL~|TL`ch}-ldORNS#B8B#ZS_7iPL0 z+@6EP6!VjYo57j+DT1KUm~lDSh4b%0++zN9%p~wb?l^+55^5q>;tmMJV*bd`)e7Rj zo&X3jWTM5EC(vdV^Y0BWp&iX9H9PbO#ZFN=*`c$jkNGsU1NH7oRKt8WR-{4A-ySAP zrzwPA`9hhA+}e?#-NSsza5G1a%Np$&uzcn#8tqwN&HNSdO|-{Sta-PHnG9P8Al4$& zVwvf6kbJ8@CUxdN8nPj7^PeRmGc3CWv45v@eP4?sk zAN=vzDx%>XNSn`5jS^&oZ28bvGr!O90W_JrY*Rrjkv;{H-zwb?C8xIw> znsap4#eqwhyGcz+i z1|l=MfM-jA;d}gA3N<1J(2*@g8j;md3QMs@q!41TES52|VK2p&NK6Y>VLb=J4h|1Hrvm5lW$aTcRf z=~$aEKw7%0W*N=!6teyvJlHJjbk=MtWWC>nKS&(Bs+n->lMtI_gO=6$IhFI88Z}$Z zP%+C!ogDov)`vmUvPnnev0`n_ATFv@reduJ&?J`4x)(%h56n8qc?nmj9ub{TH>Gno z?txk}J{iVJ$JYX;=R+YU1AhZbqwq$!kM1}4FSp%oz zMGBvct%MLh8b;X2BLNTP^I#NA{1eE&6CViChVehb*o5;q8x+^E<6Jr)5;fMD2nFWz*r1FkBWEY7ZNdP;uB(M2)Gp`cH>{8 z`rY|LC}t175tia+J_a_sC;u}l)r&s?3EKD-Kzj3o5MUpE9N&F;K3cXPpM>u?P6xN+ z`FwD73*U$S-k*PtQU>tT5Y9lp2!a~Ke*onKZb5wq^Fffq5S|V`6Zu0BX%hbh_#Da~ zg_aNFgMmMs{|t0S@T+L1TlrbkE}0L5*l*)2V53L!p93V0k;P|9MSfLbr%v5?qO9toK&k1n?*MLC|@MA3>*nn*Sc{@(lk2B=9W% z9W?nlz8r1(Jl_Giy}%zF!q|)aeel1M{{YQ=iLXZ93jPeJt>VuO$NDIL1(+}MZjebO ze*x6i@Yhl9E1W~;f6hyxjcfTc(9d-|40P7>iICf?JRTC;z;AtHIuYV5;oHChbMqgH9wfXQQwP)K7_8%>MwfFpg(~ zQP?o3pPs)2z6^X4nh%Ac>xJ;?!%#yk1tTFT>NUer2qmh5Vl;OD1%#qj$-&iRSQ?Jl zYIUeJ{DERGOH7O55O|2Hl(AStJ%~oFA)is-*Jdb#4n(~oV|@(OU@+?EGS<(qp2}M* zWATQ|5NOmoSwerqPQqL-(-I7SgKVN+CHGX{cZlI4m9Rm^5}9!!1}9Uf`Cjn76pg4v zz0tKBs#n6pptYE4K%zSS26)tS1$`BbV()@RK?5jV!g%IL>P*8?*)mSgrai_FLwO(P zjZnH3{2^dH0pE%`)2#?U$x|Wrr}!&i;b~rj0-oWYA@y0_hQ@l1e~Tu5o-dD}&eY7Q zGi5=?R`Nj**h_plSgGJo!w|0G`w(8u=fOz4%rjtSDmmV#fzISX>MMK)c=$R03?f;} zccN13_#kwn_53~<^;daMwBZKsLzQ0R2f)=vu1Bs-TnB+x@iHh@ zvRkb`Gdy+&ezo0U!x7ZOs(P7A%$YqKoRPQw8?b0yBx5Qaw~Uz$4zz|fm#C0S9#n^k{rrpPMvGZv?B3Bgn4L=Q*8Fvg3MSTh2d9bBe zzw0^`ov(y*5Mw-AF#HkZujiZ5&IUdV*%ZDJ;SipPu#v~2zM=dN=qo1vDH!R*XM$1~ z{{-Q1J`G_rzZb=Do`+5x!SM<@SnF;vsDD0C6lvxb`2|s-+m6@7MmF$D^^*jW9 z(!d9bei#iJA*|aRSfqxAC6n>3z@H}vDaVLN_z;CXxGIv_c5~6g(MOw`$~D3}zJT2pzvB z@qk0FAEWwLsVNU&AyR_yjbH!l&Rngs%j3ObftUD5s}% zp;c()PP`uog>f%(h4ZN>!OSOv4(IQ8CaH}A&fyCcX~gZoCTL-T790_u#wmeKUU--#vL>Q0T>XpI--G#JScDW8)r}3S~FQfIn zyeDemW8Lad)er;~>yx^!|ABlZd;?U8@w`#gVne}^o_io~13!p%SNH&w6T$}rZsd=G z>rnnGI5P2p(6vtd=O7ivuR?#q`49Lu^N)~=^A~{s3EvC)zhT|JL7B}EnPT0by)ZZ5_`*SkG%wIRhUH5h(mPa)j_IbQmMwf<_AEFM>f6A10H zBL&G=$+m$lHop6Iba7&}`xX(pPrw;iE!h{ z)Nr$vgs>FVFme;Zun6TqT?Q1z`X4$zmzd^x&>|f#MT)(K#_U^o@4QQvhhsFd(GL51=2=vO)}#x?$=O*HhMfcrbBx?+vc^Qo{R zSRjM=(VPRp-(bz_2{wqd@n*mUw z!}%UT&?uNoMM--83h!c2AIhrvb|Ux3tb zz5!ZtntV(rbd(b#=> zF7W&EPH60Y{2kOKj?Y8$$MXni%Po96!u|OcDCz({1*H$PUO!(4oUp;STaFNAhTh78aN-$kK9Hk=&PY*f|5ZYnO{QcZJeHz9?7c^9>vE& zbw_hAn&Ec73Ggxei5OZQ_#NtU2Oof3<9KgC#`8VkB!w?U=@a-j;4PIugVZ$s6fh@p z3wTK9??Rq;@_N)_5?=uxCi5D|t%OC;T|G)n7ycdu!uS(lNynFgte)orVqnpu2%+ng zm={C-7kh6W9anL*58r#IG-_#Pq_H%zW~7lkT0E8|*<*RUW4z#f!N?27I|dsAX0rjC zEy1i|hnOWm0JDS57LxELgoGW!5<(z>KnO_)t09CXB!uwhh3|Q)t}H9(J?HnG^E>DJ z<2&{_9(8qBS5;T{?YmTU6*N4PP=7k*)y|rPqSxb;*9~Bo^(q3l3Baz_yzy$)KZGwj zU!q6tY_jAB+Tgn=#M9=Dm(CF)(ng0#Y$8D-^?2j`9B?vi-gxPOgm&TP4Y$`DuZovY zW?(|S@e=Bdmr!rK#FkPn&);Jx*l#0Tp6ZR4p!ZT~;v|UY5}`NVASE(7q273j?GOsy zcqgOs4fIQ8%o{JWt{sbtlB@&G%%O`EGH<-hVe1q!Z@f$&Z@kQUzI^ZzI(s)r>bJuN zmKx5=;fHp#hEiZORPjek41(6c?>l&4{UI9sO!%a4-guetY2Li?GP`->osSVY4pzPKGUkn!xwui8nm1nN5`)YeFVn{xFVn{x zFVn{xFLT`oN+qSsE3?g(jCtc_ZnDY9L9+>9HPYY_6ABU&vWuyOvBwRMYaq*swpr_) zE1f3dH}D6&hT+cuE&^X?6gB+T7!xk79yh#WwdO4RHuCz(Qv3h89R8O@pq|$H1A2VT z&2pl8JEHb6R1DyR`MR=D^D2OtaOiFjc7n?xq|2BCUZ#%&Ugi$2MZOEt0WWhWvDE=@ z6bhWB}^)8>Ge9`y;xbNR7PdNk44r{-iu8rz=^cx$Pw#`YYOG!EBn=N^2>N1YE$={^fo1Quj zf9sn4Zzwn;MgO+CynmsBGgIFsa>2J9LMok7dCKO{u zDnhl7^DkCXt1&S@hHB&FTLC>u-Q$UW7BOjw+pr#Bht^xmTYO6Baex#`vFqM}M+1>< zyVn%G;Bmk%dvN3>+y}F(Z4F?DJLD)Ydyql6o9tAi^@eoVHeDzo(%}Y)S9Rb(-0^Xz z%w})(Q#&AO_BNk&Trt;RoY~t$P*S6zqwMw&bg8}BYezWjc64Q1~L!DQ-5EQ0Kv zA(%?d$HQ>;uCQ+!N;w2PqA!4=lvF*5@@aUINN3;ls}DTzL@)c6&pOKRN*o>E4#6l| z*Lc}?!by#%9spMM-4Lum>p@=jJ^y9xoAiVQ&cB+9;Xq(cs5u``LjDs_ydU@J)HM$O z{Z&mz9e1eb$GG?V%e>|@iKO?UemV*w(F@F9)p9JBgP)|H{rN4wfExTHjcERg*71Y! zM;+IKt?_{ehh@Ke;F_b>dVV!&23wP@$4mfPN(n3&cpO@4w7hiSx?SaNPc8%Yu4S;s z%OB`tCw+#d&%C+ha$C-uOD;#5H(y*uFkf7{Fy+k&m#WB{_w5^?8+za7&HI*%GjDFU zO4HnK-5}sSf;~7W$#;TPFhaRtYYN?N^X7J|49)G9r1R!>s|?NUc0LHjvg-$W4(IjcAGc1TP}orjJ4`^n}3?cMLO7@lCHYl=6l_4^Sy4j`Chl% ze6QPWzSr$GPc;XJsXlw%Zu2)&balJUo7=69?O|Lc!6qGrx!u|*hV*x?R+>p ztJ`h9*X=gn>vo$r*I8wM9#&Rk(>BiZJ6NZU%{y3ZVX;Lg=O;vH)e#;Ibu|uDZ5+vB zUPo9-ghB6egljNajqN(v9i%YyMAkk>gmDM3NWY}UiAS+GEQ;dPGg*AC6vbH=vq=A? z#(4*`xR%5gUCkn$n;KVtkHsTN;gH|6xB$9uT>k)zIgGgRm`_>Um)$n}o5hdG;`l{v zDB{h-i%u_P@la5RE||dLevmA>Y8H#nu-ms)B^`LhY22!-q7LsZjhCuY5rEHYykD=; zrNsRSFU&mm&Z;VIqj`SHZv3fUdw;~%)cBBI#Eh%a_^=XNf{ncK5hXSO`)uQ*dU0L> zGL4UO=gFTA#wE2{d>^;#k^yv#&i@5Pm;V>q@^m?LUE7Ge7Oe6HS$z8f7Eh$2cHYP$z1+%MKVp$yg992U*&zB)H<;w z;?7sPlZd-m=?=z+n%qjI`w!f$b8A#52jM1^TdTzrQ1f_^-A~e#NA**5_h8( zA1Cf{O7{mCXHMS;@+XZz@k~Xyp&7-Cl-TtwUZS}4G>R`hm0G1MRs8JpSiBnDs*?Pc zk)MxUsjA=Yxc5i5;4UVTZ^x`wT~8Zaz6P(-$Q6!8c^N;vfwaxVyuBCk@;^jHs_6~3 zeTp9v(>CZh&(Hm-ypHkw!6>ezfhPYL#+W*4CyU%6Q3G!8egSz2Y-VpVSJzaOCL~ zpIP}^t#}>3+0XH#_wXY1KQ?ZCwIkT`qV-rCD1JzR z*84QDXJ_=m_40J^t6xIr;*PVhs_HK~kO(+!Rb*8+K6%w&Y*n3tHSD{EkP!y}CJig| z^1s01&K}HX-~6*IuIFR#ps(>=ExRMQ4TNHH7nwe~iz!PD{6W)G_%p;id>U?(-W*&7 z;$HzRFkCZ3I?IIJ9r;f~54F+<6C-M+7q!xhTIoft^rBXJQ7gTum0r|JFKVTiDLHI~ zqE>oQE4`SNzT^gwmSAC&R(eq@y{MI5%t{|5uo~1#AFL9!(u-Q@MXmIrR(eq@y{MI5 z)JiXEr5Cl*i(2VLt@NT+dQmIAsFhySN-t)m52k{dTIqw$qE>oQE4`?dUero2YNZ#o z(u-N?OCte3+XdG0Z=yFK<-BbT4YUmxWjo-x4+5i<<65P4}XvdwCA67l@kfMNRjjrh8G- zy{PG4)O0Uuy4UUSGEvjL9Dr;13Q^O&sOet#!R9Ja)4izaUet6iYPuIS-HV#;MNRjj zrh5s{>qhaR<(ouJ_oAkIQPaINH^X! z3x4S^++b32lo43hLrw`C+Cz>Od^xNSxx)>LJ6iDN2vXta$GEV*ltIGA%Oxhq7DM$M zE%|DR3%;CTP~6diFJ~H*bhO~hSq7zSG-n%>cC_HjIU1C#CF^Lxmvaru zIa=`LJQJUXaolF-;lq|Ecj(+!7t?j(4<`JXu+4O zjJ@Y*!I!HI5=RTZeAgi7Xu+3j42pZfgCL+5eEE^61z*&HFKWRTwcv|d@I@{7q85Bn z3%;lYU(|vxYQYz^;EP)DMJ@QE7JN|)zL*8S4qd@&1t;%xL*3%<1Zq85ByIoL-4q zd{GO&s0Cllf}gk^{nUalBYaT{zL*6+!FTOLFl{2^eYs!fPc8VO7JN|)zNiIX)PgT+ z!56jQi(2qSE%?%kCzf(i3%;lYU(|vxYQdMWpj;_x!56jQi(2qSE%>4qd{GO&s0Clt zf-h>p7q#GvTJS|J_@WkkQ47AP1z*&HFKWRTwcv|d@I@{7q85Bn3%;lYU(|vxYQYz^ z;EP)DMJ@QE7JN|)zNiIX)PgT+!I!xhOP8nxU(|vxYQYz^;ERu~Zj`76U(|vxYQYz^ z;EP)DMJ@QE7JN|)zWf8zuwK-HFKWRTwcv|d@Wm|niHCut7JNC!kEjJ-)PgT+!56jQ zi(2qSE%>4qd{GO&oC>K+MJ@QE7JN|)zNiIX)PgT+!56jQi&^j!JHb;e__EE%8u9S_ zVix=gv*1^R7W_m|9$N6_4qw!QFJ{3{(3GtfeEGgFYQYz?;3t?fR4w@OfG=vn7q#Ha zfrGKFidyhRE%>4qd{GO&s0Cltf-h>p7q#GvTJXgz_=$gjwp#Gzc|W2Sd{GO&s0Clt zf-h>p7q#G5m<7MWEcg{>!LRJG;8*ro@GE;P_?0~t{K_5+e&sF;exeDFUuwaZH+@kH zzNiIX)PgT+!56dOCk_Pe3_Qn+eCUf>@I@{7^5j@5;cZ-35m5`is0Cltf-h#lPi#SN zwcyJ?eNhX(s0Cllf}gk*?P|f7ul$Hw@I@{7q85BH3x0yfe$|36(IBE0d{GO&s0Clt zf-mP_1x38XUx2F?e4Nr0wcv|c@Dp(BGYh`72BH>xQ47AP1z+A{e^Cp*s0Cllf*<@X zfwu-cQb|cn)PgT+!56jQi(2qSE%>4qd{GO&s0Cltf-h>p7q#GvTJS|J_@WkkQ47AP z1z*&HFKWRTwcv|d@I@{7q85Bn3%;lYU(|vxYQYz^;EP)DWjY=(vZ5AzQ47AP1z*&H zFKWRTwcv|d@I@{7q85Bn3%;lYU(|vxYQYz^;EP)DMJ@QE7JN|)zNiIX)PgT+!56jQ zi(2qSE%>4qd{GO&s0Cltf-h>p7q#Ha(U^w4L@oHD7JN|)zNiIX)PgT+!56jQi(2qS zE%>4qd{GO&s0Cltf-h>p7qj4(mf^|BMd!J{W3!0vO9;=GUNVCMpJn>7;Cp3BJR;$w z;$DD0#O+B+r#S|9DxGc*Jouop7EKS~HNm-h$KXyb%Njnco`4&^YcNFd%3c9k*fBmw z>p6IzXm#zb0FtgFB;^>~$#sVKj=`PWket$T?km2X47IknYb0jDpro5aKEp^CM`heR z49Im^TiPup=J5Z~wygUZ+lq#n^U7!|kkV=?ZN(#G+>Lh(?&QXCu$2E6JT|$#+R;Ya zVQLY^?Z<_JU!JXW^u-aXRfxG<-635_9t~;da7~ILt zx3;(|Be?~}Kk1d;tz4El26u8j?*LxSbF3~i--@!Cgw(g9Y}Rj3^vd`xNlKG%0pNd~ z$%t3>W3>6v(#j-gmCbPscvLp6N5n7LaW?tUd!lp%kmBXd?jY!+JV%K7po>L$(+43^ z8Ep(wQo0(g$?`#lJCM*W+`QpBuZ*ABT}jDZXqDJNQ5OqQ7Yk7r3sDyfQ5OqQ7Yi8- z0i&WW7IG5jP0YojWD{Wa)1auMffTS^8VVv%c-2ld|-;i0Aw) zJ{klqQ?vB9h&TBy3Qo_`-y+`Zw<|a!OMi=a-XEvn%q;ya;sxKf*tuEyTf|5Dc9ky5 z(%&LJDg>8g>2DDq6N<4SOMi>_IDfp7T8$Z4#p$CM>TeN$T-4t}Zp&dMiuzlK`CF7d zfu$CdmfeeG;75}bX4h>6UX_xZyL(O1D_sNlw2A@xWKq#b2osI7z9{g&-j4=&Wih=? zRo#rL-{a}oRUY9OEu`|up2vr&SXh-u83Z4U=YXiuLXwjdF*%tvT!EcHOz!g=h47q# zCtuu`%4mMZ?delgpVn`xW3-TdlL@IbKGq%o_ef*WLaMq@rO`sFIvk^gRCStqJ$D7x zPt_2+{NOfnFc39bNOiktv=Dg_i!+c}nC^&Zv=HG3{Sx6dTJBX{fDRfhr21m_Z|I}? z64p?BMhmI__N591UK#CvL22?Pz`OLE@Tz_X_#Rvir&eF@w&9|!zM-f8-C$XLBinI2 z-!V)`^-XUm6!pq1Oi1#R-Km}6l`O;Zm+I}JVM3%`-(kLw#V4X+LgXlQJL{Kp3=>lQn)OS$oiK=0ziyamuZ#v% zDUFN6fUD}Ut~5+Y^`9NXgjB!Tvwbp5NcG#+OWdotD68KIH!U{}6IuN(`|=1>vKTyMU7gtZrl#Rq9T9c_Px=Hk^Y{s6`Ysc!XIhglxL_#o8-{c{zR z0gMk)o%b(M5D!Q+p<~fne2_BQ;ia_kF|=xYkm`b;Wqgq8VY@a?#s{hH3PD^Re?hax z2T2Xq^_6P3J;v5os)OxVA71jmQQ&xV8*jF?# zh-hFCDPj#DSYd%dDl9Nag#`wwu)rV{78s<$0)tdoV33N{yd0z=3=C3r0i@NyAP7&! zz#ui}vW7cT8Lim}4DvI;$r=j`Qu7!g4GdEA_;V~yD5B33ucPQCSwSm~PH3fr^=}UB&>Zd6Q;2K1q~W43Oj+z`NF2saN$Qz+*r=Tl1b{43L_gJ+$|0 z2K0Up?FE>Ynh(r?C5|ybYW~6@@OhmvKx#g;wzOCECy>+_AT^&l#sI1L%n&`t7$7yD zvz_LOp10Ua2zok1@9aOtF$PHgsWt@9v9|v-wqrnElFtsiHs3*B)l9%cx^R=~Kie?| zNdGxK9k0Yl`p*qD;Z|M`Zvpa+pLK>9BX5glWI^j{S2IM5BcX$+A5OC4i? z^bbuuo?{G<{>yv1F$PHg6$Ux4@lAA_gw>j=S?^~V1El5%Kh!{$F+ggL^m|lLl>wm( z$3e2%f@2Jj+F|z0X(LXXZ;gg@2W%Q3se?O#?W%Q3sZMf-T0v<$HjsB6j#?LbPN9NjH8#JSTWUlMk zptFqrk=fSMHTxp@Tpxn*Y#fU#bAxX;wPcpjKQcG^B#%!TSw{cJ+!P9x&NBK(=4StK zZOvl8<-B(qR~I(BU~-@qR~G@qko7-{}7G-A!lRx=Hz{B z)lH(&KSZN{$Og=8tIWjjK*>Pbyn5sh5{>>L8vR2w`iE%r5BUnaPp4?~57Fo!G97Xj zM5BL*M*k3v{vktf9TY{Qe~3o^5RLvJ!!ehmMWcU+M*k3v{vjIuL%zZ&#*0S(5RLvJ z8vR2w`iE%r4_OE~CyPe^5RLvJ8vR2w`iE%r51E2zh#As~`_D{y2fwpKqkqV^u`uR{ zM*k3v{vp?6rEmQu4WfTYIo94L(dZwd(LW@O zo7Rb<(LY3^e~3o^5RLvJ_u{(#rrdys!Ba(}e~3o^5RLvJ@1XA)@+kCkrfBpJxiN`b zto#=E-x7`fAsYQdH2R194tw$WqR~G@qko7-{}7G-AscaZTp|xZ{%?y${}7G-AsYQd zF2qK7xoGqc(dZv?F{oWBw_ta;N;LY1X!H-!=pUldKSZN{h(`Yqjs77T{X;bRhkOai zZxW6EAr9Pc5uWtCRW$mCd;(qFE*kwq;&`*#AsYQdH2Q~V^bffRb8)xCaP8b97X71v z&Jt4hkT1i=c=%UB-zBN9mixiL6Fp2OdYDY?Fj;Bn$nVUN-|ht-JOt>-ZxFs&hK~G( zbXfQjX-J3nyhJwc?#Q3*>&Tz&>&Tz&>&TxC9r?o>Q8sksH!ztE9r+DRW&gvGKdz4a zWpqZBlE&Q~`3LlM9k!;fkJ-kVpBY#x^ zyTt_)ag%H~&;4|N7;(;L4c|O3oB-$og97(+?9UAs*@p^omreq7u|du)Cv@2;?HBjT z%-_9?{^az|UR zAg~O;#Q}0SehBuyY=O9eoQ>azoC9G+9!GtNm*d;0-ydT5L-o;uK789N_1p%IS*ZEM z?}m3Uo_77;f}p>@q7h|yl4#9GXf4+n6qRit!U6{)oz?)k?m)>1FW4B!5d#M+@uiSnwV8Pgp`&S>9B0H;H|+>7jX8wTm$ zr`_0PRCTYc`mNDlVBP*}SGT?K^yR-!Z9S;n*kwVgx7<Z9%IZIeCcKk*!~pwj9PD z4->=*6r=e_NVDZ-wmqu-=2IDuX>pmCWNLE0E#&#R6&}PnW+nIUY&*u>nGOZOmluze#G}?Gh`^Cn7nejUyWDqxgOF}Sd!Y%dbd=zX=d2P(N?hhf4%WR0G|9ovPkIRg% z4)O9H9y-J;!Xc)N<#&2`bR17|SBAJ9lL=kr(=o|kZsHikMb^e_?tXSMeqJ&DbD zEqhe_iqYw&ieK%+|93w9nlK9E-vfq2eyv9wuZ?Nq{WoyU`n7@9l73@dFOS+lm&JUO zE)%FH-_~U3v4?E-d;>d?4y~tb{OYt52GQ{*uaWu?OjFRT5nMK8DVrJ;GSxQ*^o$C& zX1%s^@r>ZFBEm)!iy~c{?G$;Fb&c=I~*yN--PAC7vt?R;$ zceyo%P&oP!(xtNA@UT?+<5|bQir9CVG?b)bV6QZHh0=6vCDJ|eXG~pW>n+m0<}lCy zp0Gd0%K_f2m^N}N2V0$~>HFHmZ84cghh5XZ#cR8b0z69L|7rq|`A546@K+OHfl>OT zhm!I6ROQ(<{eKgi{-i13GwV9vray#K0e`m^C}18wPxv*Qj?NOjI?21dtyck^CE?Zi zZz2^+M&VkCY<unEsEJIP}cwK2kYkp3ARy*x%(&rsVV!=B-$F)9Q@ z<&2KnMU*AWG1hTe#}bZUtU=)l3ZaEVKH`Lqi_(SGYdZ|@$o>p2jtwRY<+!%9SC$Pu zM0C8zhRnme-Ekq9vJ3k7sI6eV+ikLr;qW&bw4g(|pP=0F_g+@-D!Lh(zuK?4yNW4rMh<5|LsDr90@(d;D@_Gr9ya6;#iUj*uGF@Xx;6{ z;R&~tCw=s>_aTzsOcAFUd6Ir(crW>B)^DNL_C8UCvwDxA678$qQ11y@cx@?si15GU z_V|dQ5^Zy_m+B+CsGdXAXDPsYhDx-mQN5_|8R`PNf9)*20V|Am=HrjXNZv2C=Qmxb z9~kB`8}MJkrf^k#sEybcy|%xQ=PI`VqEtq+Ua!={kM_7KDs|2|nf zPbI%-EJ%LyxLy`78lm}i9laFx)cy5k1v(yL@83F7;^U0oz+VaR(x%2&U0DfRbNa&a znvv}8IGHOlgcfxCo%3f9N1yx`2(p_#(X8>>T1TV(2SiGhsm3YhH+B;>Ri+xp-RDZ8 z-blGJhDx;Y<9kPyG1PEW^=0%e#$Cgnv9j98yB`#3fFHglHH1wm8&_ipLXoBTK;}Qj z^{~NMl3n?PUX~k-Ww>=7TSi}PK91@G)^Q=2BFp0qGi14`hsTf$sIJWldTm#b-+Qci z*7%Xvm`T0-o;50qjKOndwi&mQ!7r_;+ve)|kU@A8`&HQ3QOmtAgqC&uklGBPlwbvygG4l z0?+F=%~!fSuivES^$R?&-?UQc^1Oc28YRZ_`b}%K$n*M5>y$3f>o=`ex;(Gnw84ZV z?nW*0ynd6O*DvtAev`VF7EZz~xamwq;CcO~io@6n{le8i2$DQ|SK!I~px=qO z2FvVZet{?RgX?+jw!oA5lH(V+!VmFjLYnALm*gWV`|2k)D6gQW_VOw`58}(pOQ|0o z#FwM^+Ed6kqId~k0EY1(zFf;)zd(=g+%qcXIlzkMbf9lx3ZhM_z$O-(6@k%VqAmP@ zTVQmU=s+Ls<=5rtK3b%&c65raVa9`rPF1@6ejlBtLNOjp)D{`z!9-^$u~n3MrZQ$cnCL7e z#&|H%c{~qNfReqax~~_w(L@)}s$RhSdeMc-?P(SlsXpnD7u{cL84o79Sc{AY6J4Uk zLpUHk&RSqRnCL2%jPYQihiH*eB%+7uJnHko~*UcP_l1ok&f!o)BZwD9?lV;sdO0+CVG}G1;&Gko}=P09!&In z9owHUOxH38yPX{nD2#_T+=wH%X)qp)8~-(nj0fYU48tldFdmGXuAL8O=Y>2{P#DeH zWjsbuU_2OSD)$r1NHh;Uf|gSsY52|J-DC_9)~bYuOyS4;L6dqP&?N z{{@DRC?B*Ji=O}?HshZvD}9m+ct7)Ev)v>LPj}=3!$-vCWVC|b$OVRvh%IW@3c6Pp z7(ODllwU^7i@Lz@5wVqXwPFE&YmdZ_Zpmr7yQc~EILRNYSgbBEd_-*ZnObokervbk z$GWkkeZhjRe+7n*h#mAj#igHi;Vq0QcGn|XL5JnS6c2+OOLyl2!$*|wrB@*;z4Gxo zWBX$q<$LP_V)%&i395gFk7(|2lj%y3((n;o3?C8SK9o+&@rgcloYL?SLm56IzStiL z)pl;IE~|ZKG+A>D=>USVhQaz!x=szanZ{}z)_VQtYY|x#Kl%sU^tA)i(cCdC)Coa7YM@%wG7mY=|~pydVw&UP|Khp7Gg zLm%d4!*D_^K55UZqR;(aVKoKVZuXIXp=; z{+vaI6KXl6ncNsosAWCXUC2SlEys*uk>P||HcVmhW3o8@8WyoNd6m=WvB+>jl?%>h zk>P|YSACmBh7)S}wq8*k?I>>5HNkK~Etl$=_#S*9FE9K^3)Hd>^Z-V!&M9J{TgXUw+{f6zON&uS+)-h6w66^)(`V!rD29 z6M-RuTHg2>g=C1JmbZV+B0~hV?A*!XMATNdj>Oa!=qlXWppwz)u4d^Wd@`T|Va?ea zSY+Ip`ZVqBMFtKTn51N3;E+OZ;E+OZ;E+Upa+sC6R8#FByIeI{T?}S>tE0 z%CTaJlTlIq;qSA#J_Md7kPU&wMAPGCzCZkHsK!^%Gv81C5yW=6?^SxkPi42<^U7lQ zEUYWPDFkj{OLIu@I<^edZ-jpF2olWmnuegAL(073o#Z!2aZ4gIA$qaM4m~wv<_bI z0;`w_DsF)%_ODy}Z$*5Ru6`&PsSa65B!nOwuibOtS+d~FPWDcQ+4JyfAOUy?IA!K*Z63srsi3=;hCmLyC z#bY+FrIBZd|F}W1NI;36FsL$eHYq=8P<5o6%6!V8+Q^SEwA!Z)s*g-(+cO3Yh^%GX zvj(+9){@FE3>p+!Ob*W*)Da1Y`7478kql*d!JuN~5Yl|npwW@{3B6>{UXg8tUN&fA zq?051twB>FPm|v(2F-}9C%;z>niH8oe!nwlzepR~UNdN6Au+>(|xl&rtb>-GTUPVc=Tj@{3gnp?J*r@drZIOvyL(_ zNJRSW5VUNM>Au+>(|xl&rr-0K-h!d9gazhL>YMGc=7*@3jKvhr%p{~Sg)_4rKoJ3= z1n&e%{YJ(KpjH@6xc=BL6taBH^~c*ncaeWXyY+qYHP`pa*Ia*+ z#qzLx&GjcULVVC-`I_rbS*4KWYp&m7G%a6q{b>fZMsAOQ!|4WDzUKNf46=O9^?mX+ z*YB3ESs=0FU~%%wYpu6@&Gi>wr30~i&GnZUWcixwFEhd}!eGMneeyNe_sQ2>f8AOY z-SRcpZ?h$1`I_r*vdPFnv*&kj;B z;v(>MMp5$;fS7P;_2g@&`({kO!f%e(Pb0PepUdHYSp)+(aQ#8=2>LW~qIx@`c04MY zIAOl7EYvIj5YtQ5-H77lAmQpQUvqt*e9iTDa4qud3gckc-$`sn@RNH{;4CHQqOTV) zqhx2Dv*t9D1t;vBqiJqtT zI1YOa{1P1fL2UEq=f4DB{%bw(Kt$}Ar=6D$VuU9Hytbo3{8ao0257Fh#i8HQ!7q{5 z3JSvumpMb5=TfpuA-jK)N=B(ZH_4RciOLcQm>(zNe$()?MG=YAHdlwBh`M|G%Uaia zzHZO{f`NY|*|Ti~Z38ue%(s->!q(#<_c^Mbt+|0|_!0Z(YD@RPZ5;N6M+k?V_1brm z?MAZw+$Xzb#!`uWZe3v2?Lhm-)X-Nx5w6-zuCGF*juVOWGt4&9O#8&xyf3Bi)F2&k zO&{(r8*&@j$907M!XZ}~I`e7z2MmQK6WTI#jptYRBslaSI2r4c)lkGeO8RG`4yrvB zf1*6N6(EPnpR3^@{RX-Jl?oZ`D-Cl0hDtC*2Q%1sF6%sa(>fyYKHx7mdBV08CeL7B ztn_ z7)PNXQG`UFU zi`{5lXdRXf*_#Y6^tHosbZ6Sv!VN=FIg;JCT6cCmxw}`7Tdn(I>%P^x??2>G5)0dw zs9={G;-aq6oa*l=gu~EX<<#nxA=ue9gdML6!M3i8$olFKY#n|s#JOod=iP_@!;Zii zZvPJ5yT*8Joe*jQ{^6c|l{%EE6Z7is6Z1Q3nvVk= z_(th}P08OhDx`2e4z2a9r#B6CflbMqHYMG|HXM(Gs&D(F`Bt}3_3%ze(+2*oLET-S zaNHrZsA~r=;t*Qs6|N)qLpX+tKs%80rMq#j2y_PuC$S<3C$aD~zB%~kQS2(~$WC<8 z?-9GoIv!xtS7jadAJUJLVr`MFA9^ZywV^KVT1`7 z4>;z?*4MqRdAq}}dbR*+joQMljg-!y$kvySL7MYKp(`5JcAiD@t#@a8O)$r5qJhOXkps#BF|t3 z1Nr(|q zBe@8QJdqh__Us~0WCmkMy10s5#wtUe$PD&+5VbLx%r>6L4E7$yB2Q!n6LKtKrFg+a zE%HQWFsXyJJdqhp)>@v(4EE6?PhC0z`XXKAiOfLLbQgIdGnk>o zR-r>MQyKF_W-v>MB`D6kfh5*Q1U;!x)T7@EnANx#W9>ra_B4x&RJ%Np8SJmMJdqhJ z)*?@221~Ta6Pdws)zQ9Wu}X_Pkr^DKMXEVCOlOTJGJ_+v8&6~g8@0$2nZdC-HlD}~ zHt8sMA~V=*qaf}{TFVoe!O2?76Pdv`wa62h!D&g@!izkS8Jwwfc_K47OBV)DWCrJ` zI6RRVoUdd16NV`*8;YDVo*OChM5c_m71hNm(2?$P<}jD)JgK3|hbu@T<_F!eRml(doyrcqk}D7u><(evmA>>c3dzk-FTsRV6%9m)okVf=B9dm#R{Ecs_T( zUZZ>l%l(8GW|4>ItE%|vt9TGc{8PR5_)RbOkY2?67My!niSc`I?hz%%<9E47_2T65 zyWHbC|2%$IQmaKCzbhHQqd7$$zjOIR(4)xXcdkoU5Rc!vseIZl^7x&ba|#i7{4V## zpE)2NzstS-PZoLnF1Is*#Z=_+yYkj$Eb{nWQv)R%!5{$x^1c%0iT~!J%FYx2&9>d} z#DBBxF+B0#ytm5E6aURqRVO_0-#krq!V~|^cIorPfAbvG2~Yet@27Nm;=j3Db;1+> z&GS_!lZd-m>GH&X^Gc=r4?HC|uUUxcEAqsD^I9$P#DDWTrOOll&FhsePy9D;P-3fz zyHSfg@!x!$(&dT&X8i_Kc3=EJuijQ|i1_nr7!bi1H3=ELEHc44{QnG)V zPw+*ai%cK9xCup`i%hTQm*o*W7n$A>JPLlunvUPb*YTr|76Vw)A2hv*^5`OuX*Z1I zJ93f7v>PU}ID%hM2Tb-=XFR5znZplMMIO_xYyOzUSFq6P2GzHq_z4i|XLMnv?bA;Y z>h$Vo@1qs`>Qm$~?fN+jwSpggiae%Wzi6#i@cUKq9MV|2Nh|o7s>oy7^(()n6&K>S z@izR}AihBR0D?WAAMa8uRu_3pyMFb9TJbo38(+nbbz^A&ksu~tj*2D3J?MSK<%h5$ zk7?K6^`%zuyHIfokn6_st5T82wCncLMUP6aZoEz$k7?KKt;?IQsdW=nV?3ta(yvee4=$cYFqDQR z%&9Y$$Fv(Rs>GV}{g}LkB{P=Cv>PtAsv?s}H#VIInTvm#hT?=VK#l1KlVas`RBWaU zvJ|zuKB-iC+j;-T9#l-pjLt<|bF$Y=v%(rmW@^C9_p549X@2ojzDq8D8^22bDcHDc! z>8bgIIB)KQnuZW(1aQ3T^pNa(Sij;g!j*CAarP9xc+T#JWKV-w4`HK{U}9t%F3>G< zM-f%h%GY}7#(PX4w__L)d8HNA@+;Jo$g6eOapaFsc&SXuVe6M#jG#{B9D zxJ{JEWyQbPP8ppW)3jF1J9`gj@h>6*3=mD!qV_Q7SM# z2{y|gV8TQaMQFyC;kbtdvK4YgWF}S-nBlT7k$G4-QLi)-Ao@vgy?X&l2`(jsk6`W} zAQW6?X*rxb5u0#ud6=Zb{ejRGhM9CvK!)Hu2BqDvK{U9MnPq~OoI4#?V{ny0&F;2- zfUY*E)m=+|-!&-jc0!@SHO8UM-A&AEt*z7jH*^zR$Luvh%TV_&Iczhi;Fa+{iICa6 zb0RGE5-1I6$ar^!wQn}sPQ=VgaBHLvW8Na=yrkuRsM(iWDYyu3HJGV|5zG{3MIz;L zFs{DSqzDb1F0VuLXUMbIG|rSaaDO;UP65{0vM>k3uZ%?b9GQZ-I9INMT<6J;z~Fp& z4y_l+*AV7H`8($QA~_j%oQvfzxI14W>#*>?EgjI}Ryi4>Tq@^bZ@Nq#Liutz0Q=1q za$vdVeMi0q$1CMXv|c55L58d4Iq2!TayJHbjdWx@?^;>fj0-^;F|pg^7!2upc@$FJ zAOU*aC_c1&lMDp4o8^F{huHi-sAg>bX7svEcCTt{w4Q9F?pGLx zgz0L;@%2MAgbR!U<;Na!s3$8lvJ^6D#STCEcm_7-W1cH1oIyuioYc)YH zFsRLK!fKI=7|SSV>2%j%w&h}jm}ry1eakeqQArseqMVe@25M5SbvF_9Dr4`tnV5XJ z+8}ZNrY^o~kaI6$zT_H%;$Fa;$)7k%`H_5$_2bD{tWu ziu_XE!3OBbU|fg3d=nA}auqhTh*$D2MR*}H9;=~x&-x05!iGYYyu?= z{4Mgaybh5)S%dokSiOSEx2Z_^A~F}(;1)@M7}AKTzz;+Jf!vIFj>vFy6S)E95-Fe@ zl{Cg%Du2KwN$Y-D) zk*ByO<=^ZfM?w0i`~Y&4dWo~q`#Bv#n=jP~_C8`5dryL{0=W#ASw#MOj@Cxayc5kVlo#T;xY?#67oPlYHchiSIQ>nIw?N|em_|Z zI#rT@wyNb?P)muAa*h144iE5h5vbM5<@im@0hq;%T!V6*+=SnH*@54z+>74^`7wSQ zr3DlQ$i3j3ll!2!4{cc;UVu&8qyAwz44ouMksNRd<`A7Ng4D%Snfox zb~zgN@(y_(%d%5`ir*nJ1Ute|WMabiRQaeD_hFffv2@8e^cpVD;SN!hI{c21)4_41 z_?UxHG67>8E#3GXBa1MuwXzDohsa_0T_?xl_fWYN(jF$aV04GeKQImJr4iTd5wZmo zj+FE8dz9?N>>n+S7{xJO;$a|_peS;VANeQxZINwQN{Ey;mNV7`i2^wi`i{usn0JxE z;8P+)P#=|3A$6%-2Z@}tW383R)gV15pk{y<=r>s6gZ;^eB;=aKS`nJ0_`AE`fkf ziaL}-syLLHD97aY5Gd{?7=7{#j8^1%Ke7+{VN<~LdGZ2=?aThk;qG=KybqPRifPy! zy=28?G<&&<9K`Y_Ro;n9oT654*FxY`jzbr8@+xOz389}?c{WDP-Lf(YNzoTNY{G)z zutnbVrJfp+FCerpKf>?>xd?iWNGI5emteff8LHtAeMv)4p1g=(U!Fw2K;F&}cc5-H z@f4MCB8Cwahcb2q23tG{C?fy#Wif@8qp*s6ISn%kiB)tb|6n6_^9$Unu8fFx1*4hhkjKas=>OqzseYD)(V51LXir ze_krES_a9TD7VRWEY!g=8{FGv5qfpVW=Pm6SE1Jsc?aBwN-HQA6*iCDVhm&oF+-gFkOBOea?_yV-z#xEXXiR zegwU3@k+~}Vi%pKd4r?-62b!^Qv0F6XBmwvwuW*`tcl zwH|UH=IY&def-U`hEJC#L;-2YC_0^$y#lhxU-UUz&k3Ms*X{}+={oG$$#XA|N~b~M z0@50iQ(De_g&s~*>cF|xH4?L6m`OK>e1?%O()YP}SkbP_+R|<*F^4mv9UmNj#;Q+i+ zh7wG>h3*Te$ju9@-E|na+s`0z40YtXL#mFUj+};c$SpAbNw4&7<+98%)RF6X z2k>g1V|AH%50=d&q~3#Nvwnl3S7zRWNrvR&f1SyQSN3DH`O#9wCv;_V++V?}Orue9 zs9&<O^kJ@^GTZuQa&?5cCvhs;SRKP*&%M; zaFL~yW(8MLau;wVHc;*Z=*f>Ef-f(CM<82J6OrFTrit)+4j(4Bk< zoHDP3`QjxuS^_lrvK>MNUKQgczJY$J*kpGysKnO&0{aYyMkm79q0CUv*O9+M=-6SU z*cmaWmdX8aTODzCBS^*8C$uf;)iRZ|g;ZlH-3SU6E>JVu|1bIHv6bx$%qn846JczE zyMo*|W|XGq=tLMhmO%+A%gY#5?08!j&e4f5wwWQ&xDxor9Xr9Gr2B}NC#})8l$%c~ zC!eHH+ASjHDa>il74EQ9V&SV;&b4r~;j37yqZ45)d=+bR{FD_7U&T7z0ffTWtzo8@ zb4)LMQDWZuDh^wn2xAl7{}BD+hfzZnw@{!<3=&sQ=(3(+(TOm2r9pA`DCR5{zAPo( zI*NDQ)^J!{Ua@VqWYX@Bgl@9Q$U%hL!7IZEfo1nV8NQ1P<-yaC{<0x1ys+b%7qgc0 zZIj1Qq;<;lhxlp!0P{usspDGkbz)J&NSATp3QOGs;rzH%qd6`E@tfh*6c_&1aw`6F zZTv4QLW4^7M3!Xq&sxq}Z%2@02+%sto}cD2L(LWdaiJcncn7~6l`gj3RZ>|yZ13{i znS}0O53VG76vpl(Hg~GzA5h?wSrYA1hUn}pALFjVRFscm>`qP^`;?C+8vE2VDUx{< zmKTYn9);y&NX)BRf@bw7jNjuPN6+~8SVKDWD2(6xDemW#gdT-)%@RhcaUt0%Hu9_S z<%yBmU+&G(sS40L`xx%K@v<=4s$}DMT!@#4pv!*N3@{dg@$5RzZ#)E(*#&q+iYG!a zm8AnzydnhCS!NZESB79VI}SI+crpZY*|oSg$E!lHHTyE8i&uwWTlTLQb37G-o!NR) z?(f@(hrvA%VA{7KkH`)h53nvA(U>eFD97tVaD4Vg3Yqn751o{~l$3K}Qo*U&%Q)U9 zpHYp2mg(8!@H7)|_S+Slk-ZfgUOexQQ*dVXyF@Pdw#ClPGTmQ%q;FU0qAYXs#YctU zlI*C-0LO%4tjI>F_Hq7rCAAtez$mK$gITIaVf=CVXA$!(x8<-Bj} zRQIi+SkjXTsWfv?;Qtm?GTKjb&Xf?PPi^D_hrSd+?QxQ$g6nIpQwG4UXlf_9UXIT?#ruDeZfTN zy4rGIR-exrDweq~t1mFfa$i>W$$eSfC--IbWjAQQ|IB?^lEw5&>i^?>%X6@iNNP{M z<@P=KmiOda-ji?n|B!Eaz;fL#cI8{HIt>pVZIh6%x5o1I*5p~kO_4Y7nm+k@YX+aA zZI-XMX6VHVS-#$y!W9ZxzTTQ)*D7TBdTY9FR><=8)(kfeman&_PrlxoKKXiU#@(U) zEMITU-rrZq^7Yn)cSXzBTeA=ExIOuLYo^#8)AIG!Otm)4*IP5q+ALph&2($Ce7!X@ z4YGW_HM0!*zsT3C7Nq|F@ACClU5M``!7Mx)*LJ#XbMP=eL~B~S@=b@Y^=gNjMy32v zLIu;PbBWo&47DA1ZZ4ou+eyb9I<>=jC*+q0&S!1Wp#JVpGXRCUPiyAn+L6{)rx}oI zN7?AJn)A4Jv_Uy!>A<@czLPA*lh`OoyC~i1J_fDy5Du2>rr%6JL+wqV)!l-Tqzk6= zHl>^%X0$rp*^oBfWo^ThPkOkujc}J?T9?W(E_g~a|dWL(IBMDc5=MJI_;VKX}ozQIS z?c6CGk zZd!*lMzdLmOh36F5N`;$_#1qdiSr}HYo?Xb-=GM~nm;1G0n1y?f`a^wKLNT|W~a5| zLcH8(q}D)crzka2`uT3uPBCgm;2TOHHyiI({-KogOzlJbNe58UR=E71sj=ASH}Aw? zeKpbg-Ay?Aq4rsSWzz@!dgpIk>;a7bkLFF2Arv^%?AXi`CacbNK`aP;I(8YeMdZJ0hZd#$Fe|;>ImFtDOT>Rt z=@Mnd64m3{E>tSv6%_gBMz{$Bc}i>NH?27ez%wL)>{(v&N)&dzO0Dto50ds64&yiM zOR}4lv`O%iN$@eT1`_Kvm4GPsgc6{xcVxde0la(--ZT9w_V_cai2TTIbl)_(Gl+FD zN48Vx66LF1ba(dBeZPn9QS5ODt``4eRuQ>BzQE#ymul=2qk9LjKA+AXrAw5r6s;B7 z_}o;}tog}4*A&v-1EIbD*3NBiAo^WJ7M;HKX3v9{k;!26?$oOeSrD~*r=_6o?)W)J zQSjLr38^|kuBe@H*y)&cIBGOPyLrhp5XfI&Y>>ZfGPxzlZ68ZjO-?88;>7!kU%R)pGWQ9-kV5=DORoZ9?*$(WXn7sKvL`md9{49>+RO3ME+g9qp zkH?jHs`c!)q-3WXw6GI-$=qvB&g6`*))M*yRQOf)swB6N_%Qu-iTyN!rp*v&-sT-O`50 zfuNhE-1e7yLz9EhBSsYu4_Ic8vkoM)&UG6wg+VP5=A#?-uaS!4cX!-J@kRv=Xp3xp z%|Iyo6<%_0z`GVniC6F+nE@UP z0xnPrbg>H6b`jA0BAb>3y4YC%&}tP}x4fm=!(Y*%XaAO&AV{$J2s^&Qedj#u$WHwa zV#i^MdcL9#!K7WFC2#2G>~bhodb!pRdzkj}i>-<4AH(RG}%Q1VqK?^&6Hys_e8^jcNn4}#BEgf<+uBAH^=;-83-DwRAI%ZIc zyA0aj>+re(EG~a7GlPvC|CMFsSl3%jhcqSSd9MJPysG=zf6JwoXwLM7+ zeB_sS5V49gTI zMz>LzMGB{o_$s5o`UiHSu*xW`fD9j#(cuac;}fHB0V%x5c|FP~uznd1y!6cLQN0u{ zCWTE36XV;8)%HtL_z`6|$tbY?rrjufErpgA?~dt!C9j zT0Qh8O0tSV{#ct>ojsI-bmBF#5$Q$|!`^30>f37veAFq8nt|XhnLuf&#-b-ILD)Vubf572?YF9bgKB26;{Oc+4Kdhd0&ue|#-4ypVYVu#! z#`;&aZ3y=CFO@Ln;7XEB=%X)N+YY1Z3VxhZ)1uX^ny1x6BSTPIM;(mRCRQJ*O~cmX zQ@uY*Ya#4e6l$92mPCXz6sfJ7{hP^gp0%-lo3;(cCOJ>L`^$&vwz%K_!`^#G$5mbX z;5s{h8t?y5N=xXnC_SvW3x%cj~ zKUmE9t5g@$KbE}F53z~;a(>v)J%~^@=zru!Y z7u_sdzLDL>EtPFNSM@S2Bk5y8_+0HSVx5^GiE zIm&E1S$0Q1r{vcj4^_I|ZJR0dThZnAjrCdUn;wg|i!s`^;PJIis)EeDO3$y9jN<`ptg4YWCslI-&eEpcceVa)}F@lnWa?y2vxtYZD9ITSZpyLDF1%Y2KM$t zr4h~c3Kpv5M%b=l&sl)31t^5=ygj1#9v0fEbhneEZ&!^5fbIO958J2&fbFCYTWy90 z1o2@DmDA24K5VsPzJYpz0I;3!u!sbJ?c@>mTKNFe`NJs4iNB{@DHgF8?OYo|$~4+B zI_VWwD{){u=@nLcl+;46uv$6g(n+td+J&s8lU`x95(l=EUSYKo2ey-5VYS^<-$}2q z+GV1bUSYKo2ey-5VYTbnUGWO5T`wfP!fHYLUHuJRWo<4y^cph05L?hcOuB|D|zY#sAA| zD9XWhQ;!RucE|H5(18D!muz9)WL$WBTJkWc;{W9}OK<4^rGa6^|4ReIivO1ehMkZP z3@c8_HQ$zY(c=#(5u^8<@GB}ba1V{}T6G)s5$fnmiPSp&n0 zH*%y?rm`JVu7P324Os)jiW_o7)`YkrM<$E1W2kqERIxk)^6*hGi^jY!qT}L*9GP}E zNev9Umt;3qTx7bCbVH8JxRI$E7*FszU~GNXZE#SJ+!TlD4w!-^ZS28IiT(G6Jx!-^ZS28IE!%8aMkRzWKlIMjYyUxJaiyN{AhV9(RmR%%EAs-mFQv<_F-(EvE{q&Eq z==GeIxFKs`SaCzvz_8+mtbt+04cVU~g*URW1cntiWDN`}Zpa!Kw)3wT4gV^sJ|7rX zJPtK5Y>p?dYG%5ktr>0Az_8+RsDWX{<4^;`ipOEm+;j1w8S{8FL_7|Q7F;a}JQX4y zheZo-lLQ_L5s$;7zAs7w4?Ky-VbRKONWzcGk)VNLe|go_pR5E#~<1gR7*+HW~FM0Vi#&R(pl z96b&Z7YcQ&lG%&1uk8me-VUUXVC?oE!CCBr~gt)twY~pE&PI|T1 zC(lBo#jCwObuq~_ZYT9=+3WObuWytML$CJwCfQt@NjA%dp;vo-%cB?t@oKLhEqjMv z?e$~kFqK~I^@lZ)?8VZopME$=dbQWj?k4#vW}<%nYLfJ7uU|5jB)!_}`%WTBulD-2 zbSx3C_WBdPDeZ|d zm0sh%&Rwv*q&>z@_@ez>WB zM(*GARIfiMzfJU1w-P9}lb-5!6px>Xr+Rtw@1b2h)ypMNY$rX{%V#%MA(fu$Ai1)uvb+ngMXW0EIKjULl)wj_$_ckTQcQ5?8h< zNSVzP2@KmD)IN_XK!&_5G7 zf5ejZ%u$9%yNy60u%LenvYy07^}Ra7qupLTQ;=nNwA&j&r8xBGMD%F4KNd1_wA&kP zI;gTuB^<+}-ClbjZ+NuZ%l1oY-|%R+H%9YfW+Wv$lq)qn+U<>{UKm)-5|r@9X}Ctl2)NU~A5JU;9V;7cPdhR47o zP2>*AHmhtNANDQedeJ5;N4u>Y?Y45X+se^yD@VJn9PPGpwA;$jZo3oB^Q|83F8QY@ znPlZ?x4jpQ0>I!B+|T4_cU19VqbCydfGy$C?&wJ!!YMv%bi+*H6dyJ^1RplKX|Ckq z{Mz}vMRI`3NR_R?5SMWwmHnL5pLh}KucZEk3w%}hqT*9hj&?^CA2xb=ujq6HA2xc% z%AhSjLy_nZeAwu=^^zAeJlY-Iu3V{kmy$bgmORCWjh^+0aEcEbJ^MM~6dyKvo=&Uc z!$t)gB$QTs*y#D1r}(hZ3zSoQ*yzQ|jTP|G=pcO9W6&d?ot2~AQN@Ri?)eZY9AX~r zj$W;t;=@J{s4B&WjSj(wjozqvrG`hlqc?vy=oXh(^cGz*iVqvTLnosFBl~OARsI$( zk%urCt`F}pFhw3~E%KOA3?WMfoybAXx;VIM;$J6N{7yV2V7h zumPCZ#gcL?uI1cKfP}`ilvDAa*T#RdBFflPxuD=Clquz`Mm>j}hB|=k*dHy@nNugqnVPrCuIsSfJa~a$fdO%J_d9>Rv3|POCN4x!^fQ?o1Xty5= z*wRWK?e>cUwxW_pyZw@Yt*+$JZk&f#&GnT$+U=JHY(piFcKhW4+gQn?-F`e^GnG8r z?N>6*Zol5ud+3Zx9_{uU zTpXjoaLumd(QZHK!XgTGP9=|a`zaS@53qA9d9>SacDD*UuaZZ*{SH@ev5P8slE^;< z7F)@q-Too4*h(Jl_78!@R`O`Kf0(;XRISDOx(*YQU^C=sw|~&e(QbQp16HDyquo}I zc1QGRcjRF#12^KaF^7Iu@b>C?mkdtnbV3h+_X`#Ey>PAWb*Ji#6Hajok5dl6Fyh8l zsHpFS1E}vRbO`l5^fol@DjFq^Dn%p7VZk}x`yluyzigwNh#u|sTd<(zXm{*n!=v3X zK|bRW<CQ~TLqus?vE*B2JaCnl!4{bz`c8AVH@~)EE zhDWv<$YMkg?GD5Lz&7OF;#{41guv%3DaD7 zZ@~JM(@?7LKDkN2$*1yZbh+>lVtwUvSjUBj5bG#H|{mZRN; zzj14Lw7c-PF4Ncs9_=oCBVZ%QUFQ_O8LZ1#<>O7reJfx~kb9g{__n)K$^x;T1lNxA zIpjnlxQqDF5<2R7w$^UWVBqZh@mxwbpq`K&*NJCF`?+T3&%<}aupNQD9I;Q1#y#Ke zL5gn)R#jl1Dn-rqF1#oe+27zSUd%4XmMOL$K)%GD40&s-AX#cVF)(FL3ElEMJInH0 zhhtyHJF#nBY}kjpOc`TFyI~sR`Li=Y-Y>{nh zV5Q|S!W7#t;6EA3}er-Hk4m*;YuF+qckwxIGqow!*H)eXP>nkA@}e8|ZkI zeX|4aY4%9Gr`6aAsIk_*i|*Iiwe?sO_BO1v5q4@V+)eFY(Wz1PVyw0X`#Yp0?LiD+ z%KjABwB3T2)kZrH*Ctzo);8OIw5r8ESpzeT{Sj(uwZFjNjJ6vvP;K@TXl}Qq=x^4x zVI0QTIcR5xJsU$h);@xEjCQEd;*^T_ED5N z&DNtOTP#sWPq)8<@AOy4=2kdAY*=5+iV>C0gNC_AJclZu=m{ZI3;DjN@EwA4mK5 z+E1`D_t|SucE7y>+78&OI`O1puY=@gY%Rv*vvv=(U2E?`z1P`dtoiHhF095I>=js_ zH`+qzxyc@dal6?zW5jN;lQ2HF+Kte2n_UU|cKZ=pc!$lRzjs<6wclma*d3pixh4BAztM?lrAlCSprX1l@p<|)CO#6cZmKE46E3jEsV6&{iX4zR758n!GmKE46tFT!m6QSBG>#Zkjmc0)%=URcy zvim_BCvhk89|P%?9b*MH%L;6k71%7>h6yzG8BC^U1vbkHY?c++EGw{CR$#NNz-C#2 z&9VZUW$(g76sAiy6XZm3>AfOATSO%08=HwIOU)*|qmb zxdubntg`ErOBupum0hn~qq&Lo-Jo2vA#7IJjaoy-5H_pqCe3R%gv~0u`61Cc#=ONE zZc(no2?EDPXkqjaLkYVLp_FKabfbyaQAA*~%05>ouvxZnEEl1`W?6yFvI?7(_#K8v zV6(~#t-xkkfz7hNz(%>i3T&2r9n0<_E3jF%7fa$2E3jEsV6&{iW?6yFvfo4Ql~!Q0 ztiWbjfz7f4n`H$y%L;6k71%5*uvu1Mv#h{o*<*1F{Hzt&EV~)E@ayb@*xc7!fz7f4 zn`H$y%L;6k71%5*uvu1Mv#h{oS%J;60-I$8Hp>cZmKE46E3jEsV6*He*tGXKC7Cz| zGQQXfY?c++EGw{Cwhhx@tiWbjfz7f4n`H$y%PMSEh=!Aj_!>jltoX`aj5b#jVYA}> z%6W$7viK_Hd_0(*h~j01o&sMHKSfKPsIrchJV`mv5HBmfLAgNBM&)9L zcvU-&ezhT9R{T=d$8TfA%Zgv7T!SHAR{U~pTBA1fO64+!cv-%@1r4wR)Dgs0A*PL z%CZ8KWd$h9Do|F*iKxblf8PpFmKC5ZD?nLRfwD@@7l9Y*1Src^V;4DAfwB@$B1?d> z;xAhP%CZ8KWd$h93Q(5)P;R9Hlx26~wi~eul$Cf1g#{=p{#N}8JR<@qtDZnvC4ZC( z|J@2umQ|pv#IYDC0m_PhP`3!X?mSxzWsVh~Ec+B5@IqFAvaA4QSpmwj0+eM1D9Z{^ zmKC5Z+l479v;vf61t`l3P?i;-EUQ3SBd$f20+bcEZk+&SSpmwj0+eM_s6S){D9Z{^ zmQ|pv5kEsY0m_QkxmJL(tN>+M0m`xhlw}1d%YKZX`LGqBEc+$2De8+M0m`x~#<8>lWsPV-IRVOwk9VyAWmyHv8u1g{@K3PeN5(0 zfU>LrWmy5rvI3N47vK&TwgQx81t`m|Loa-%akztq ztN>+M0m`xhlw}1d%btr?N38&5Spmwj0+eM1D9Z{^mKC5ZD?nNHYvT!&HDU|u6rim5 zEv^-ytdR(k0+eM1D9e6Be!m1L%l;Ji;II{-EGs}+R)Df>C+?;N_5?f(6j}kw zvI>+n;?vMAKw0r0xOD=QWd$h93Q(36pe!puSyq6uMk-L&NCnCo*?_@xW{esD${IBQ zlr?GqC~MRJP}ZmcpsZ1cfU-v1hsp&gEB+hT3Q(5)01xD@6`(9DKv`CSvPQfO*|}Jn zUi^=)6`(9DKv`CRvaA4QSpmwj0+eM1D9b8P)`%#6sRSr1{=RDkD9Z{^mfeLP!jLn9 z%U6K1;-9#60+eM1D9Z{^mOWmjRzgaEvf`0Yod9K70m`xhlw}1d%U+5Vgo*wXWC@(% z#Y;j~fU@jS7=G6o@c?oj!B+6%jUg*QSyq6utN>-%w^`oa%C6cheuKhRfwB^W-xi>( ziXtmOSyq6utN>+M0m`xhlw}1d%L-7I6`(A8Iqqz}oqz|f0xLjSR)DhXMVP;st(AxF zZ(%8ySOLni0+eM1D9d(WO3JMOWmy5rvI3N41t`l3P?miOx29?+M0m`xhlw}1d%L-7I6`(9DKv`CRvaA4Q*;6qMhg$*4 zvI3N41t`l3P?i;-EGs}+R)Dgs0A*PL%CZ8KWd$h93Q(36pe!puSyq9v{O@Br1=OJO za`VJedEhR_9*9@Rpbu*RLbEQ^JxPG;Rw%t zd12qdn`{OGeTgRXI8-K@nZgSA890&A56ZsjgG{0|DtU$G-f7^*ln7U1){yI{6t3J{ zNy)MG!X?Zy=8a1WS8HBIGZQ(jVWi=g<-~Zcq1iOB+yrfO#@s^5!$wQFcJl*r)5Zxm z*8F)oxZvCBc=G}Cj^uY+I0&0|_FFc+2wIGFI;j08thfY z?PE~q*kV-g+Vjxdki8gJV=qNxJ$n%8VW;6b2)mQJaT(8tRvOsfI+Mp$lX4(_0u$Y? z6pryu5^{x;{sD_Lv&aSVS(ox9+gPUY%r2&iK!4-+jy}XNb`jrl(v1yBdy^SgN?De> zK+FDd2~$O&zp-9Kgjto8bJV+~`jsgODz!(LZfM;?t+!L_R(z;%ZxyZ7*tbJkbPu)O zDgs@N|6=o$=}x|d;c;&lMXQqH88E;|eFIDz%P7;YmES34mZS3LSosUAJi_7lz-10A zzE>-kA^bqZdz_|!Qt+2-Pl?7WqSOZ>*({PJQXWUQo0@SqbbX4BP*I94!C64}7!@6% zqR`q+(Tmyl@hVEO2M392OfR>~X*!3ZDfTA_z(ui-2Z;tjw$OlkDEbXfLZ51-*u1my z4d~MbKAR;g{LQ&$5jtgd~ye`;N9zmgxy0Sia#gWyB^re=Q1?ERrH3ftHwUO(4_ZUftL#tAscf1}Xuik36r zx_px|%UaIJ!FNKL<&JkFr1>WnqOeoW(m_a(a&{+wX_|#MclRg`>D}5p_UwpV`QF_f z^lr4YX)Ac7-U48(DEn*|Z9yO>1Yvn6?0I8|4vj#b*wYUP5a)hLIx z`FS>_my3Uqk+sQYd{3I9Yjcr`_Un8F+-j$(1RpKjZ?mF)?E?!Pd6D$tO-fm zx$evvc(iu|uD1>9m3ErO;*s9{JDa&*l~Zv$OyS&;Ow=8(V|QSHdlwH9Zou`mY{a4r zm^GOYhwvIhy^QjfIgk8j%nb0MeUmenko~Ob61F{qA165V47BpxL0nJf;z3+L?_1ZK zwNk92MQ#>1Xt9-mcSkbY87wQ0+6VJ2HkjWsm=8NmAA@)A=Is1V2Y~}ndZ|p|+wAJ^ z44+{_r}M^vmH7K$99mAq>i&Z=%UaeQcY@>oQMsipWd5W~U(34Fz`d(nZ|3K`Fa5i6 zJ(+jd&G(eUYAGQ=QLeM zrT4Si5vr65%P*4-%JvEsKRik-kLF+uaAQZyXbiCJ%`zOyGS*+S49EcgtfN~)dAC=8Zbk>q)t{Sy!;hZh z9?IblV8Hb0-~?Q^4o<-JXI|jWY71JP$$XvNQ`TLY8OwRYMh5?3Lvt z{XRkqE*s5m2TX9E3%DN6`E(WQlApjC%Jgex0k=jca;D}j)p-oK9-YU4Tch(BaCjcx zltue4=b|{MjbsB?@6R{#pePOPYm`3_JHSrX<*lr{OxJ$Et&j$7&<1sDgOm&H8?O^Oz>bxD zu~9{XeW9G}i-44Up|tLcpg^!M0xsAW0Tv97ZL)$-7Osu!ce9ZE9Xln$A0+-d zI!%oo=;LL)Gk;6RhhuZjpz--ugIkYc|bRP2pI#lFpAKVz|XwHS*WIjGpXgNpt8p<<<+ z!2|qZ{ihaVkqflg-E8|mRWx|03b^jf?acf5keYQ=^BQZ9MrD;!#Rr4bM5BY3X}|?) ze9e&I1;tw6gdNbUTM!gC zpnJI50=hqQGI!w-S^^Kex3HpjSkduX5i7Y@Dry!Wtm6liOSS8i!*>VTT->QFxLFIb z(2^VSL$^5)ZIObfC?}&6(7kMLKzFgd0lh3Eh%W)R+-bUiRehO5f2UT(YF@rEU)7xh zRpFL;m(qPy9?)Idgn;X2RRJAT6>!V-F8Mjtu+(Y#6DzLffW4v>v(h;?=PQ0Cs90P4 zs&dP;x}Pg2GZfHWY*au?GXfe_t?fiDYgko@FN>SiY`6tgtr&eO@7*Q-;KdzqK~>gg zakFnnL>ppN7SH7CHaKpna!d8b8gM<1cN)r2r=F{B`W0CBaZYH5wt%(ox;5X~j-Unn z;To%SkKT?0E_nP5xTV^bfa}XFM_ukXUzRN<^&WiEcVA|8$7*$~>X_T})g2pDAwQ@A zvz&Dwrx{&ZcfhUE-UVDRuL0NBCT|MLW!Ceq66ADc#1rgzZB=*6HhcmIn3b7o3a-=2 zR`Pp;(wUps==GY8ncF@A>;shjl6HihSafH;BVSU{71EJ_S*DX3aKXdqqXQk2$M1j( zhB4rlYx4sRcQbx33Ai=d;xDU~KJNN}Uaf8Z%7A|9^jD?R2=^|%R?c1NG*!dc>272n zKi2-RFLUn6_vd3()1wdJ|DoJ6&WzIdwbdOEWMNnbvfMS?0YQ3Krj4}>6dKEY8D#b8 z+WACvFK-j*y?=>wmeceY8#tClpD56+g2rvTFWq(at;k$1eg zAgEtngA4G(#pZmA!?jVH!=})gZlF0EwU!lZ&PHjDyG&aXa7(o{n^Z1%j|#YMZB4-8 zr-rRLIcUvTC(C#v)!%*rZ3ukuvUDm6HPFQ+``Zx6T$(|($LTKC?%Dsh4C?`5KBs(osS%M&h#L|<^aB{?$k=0o2Qj^AF zr_L-v5JFR=rsc4-gbu$DsYPB1^E4K_AxXPS=!ieDncb{&x{x%{gl2reRE@jF%Sb zp?^pgUwIsj#h!hhWS?}F=l(Sodo~}7J)4iko+Su^#$wOrW3gxRvDmZUW9K)>bkX9Z zvDmY;I%zESEI|-LXGq@&f)F}WdO;9`&^GM_Wp_%d#$uOLf*^!GEhIq@Lc4g@DZ7!Q zBeB@Cust}Ti)2OQW3gv77Q6KAHFVQUPdtoM##rpxsTd87#h%T_V$V)Mmd0YwYAkjs zype?^7JGIQnyRtbv-w!;*}q~zdRIyH1VJd6KyQ=mot+@3lN>_;mud~pJ!UZmsd}a> znw!z?@Iv}NWv@lYA}P8nW?w=pA}x#yo_!Aj(YfzRyXjEHgC0(F!M`MdzEoL;V2&;< zJ)AwGD^->un4^73NuY077T<83=*pZV&;=|@K!oU;S&}dx*V1*k$c?CszItV32R!^} zC@=DuoMi~+=-RU+VHd8YpTR|ok&?2Ir2|@)-iXoT?iN`(nPq>A)aZj>l>~ZQWoMxy zkty`m%2u<#hs%ycq7#u2%-N;rM`W5TCITWvj*t-}AVN*szo2Iz1arqtO^)N=JBA)t z{&bh)ts$7lG-3k$Wo|n@HJ8re_vSxh*{Dw=w?P?ie9jmGBKXI;J(Su!R7yrer3i@N zpXBbK)P72FPpK}l15R&$n*xmlMDRDccTx7yA+k>P26Uxh#rH9PV+n{*u={%yKnUh* zm_%5Ff<2m)Wfbtj z5f-7gNwynd5o()d3lSEfwxt>^&91{3*N&FmbRRX0xt|-0un4t>T~4wWRn|_wl_X&i zYG;3$Bw-P1=RZx7un4tFt|7Ue%KE-blCTK1Yky4=2vAP#3B|09un4uAI0@MXj9%?& zX{Ih_u`Odr5*DF$>m?+MArPB0h2%-l5bN1OlCTJ|W6mZ?ScKZWvgZhkP`gi73Skjy z_sdEVprps-?!S_ljKuk0T{mNfGqM3&A`CFA(RpCyDs$?Rj$k}M$< zN*3NhfrA{$*Y9D62%%8>#=nsyghK5*KLI(05DJC&h2Dd3k@pW=ON(fhmeoh9j2C2; z;orC{VUX(Ht3(&F)1j{J{RWcT@$6ap{&)+Lhp_8ArK3ESU9UfWJg8kiQ98O7gHk_D zI!X+v`q?so#DJr7QHhlyG-;F z1FC+F=p_bJ{W=-I<6G8%)jqcOE*xALHVwh~(@-mrQG?&hc9LchNp zK6(-HDf>t}@{&84cR4Q9B6%3QERX-jo2BhUe2TBhptsp?KqP(&zusn>M}oZiIgp)1 ze2U++4+}0!z>Atw|Au?nSiy-%P=o7^6&MLwR$!h-Wp0h;j2AG3S}`O8a^hdUGhPr8 z>VlM?GG+H{6sQkUUS>-6D5Q)CQhvdd)2MXhqM5jc&Fe@he*%pi|EZ&qFpB3zk^FU_ zI*iZpwIwOFht0!Gc?Sb>DCI$>+}AZI|v0|Lz;O@i0-G_s_ z<6(3-xO-#;-bsdoyW_2HIJo<8aQETh?!&>|t8hac4(>i2++BQD{y!JoJv@ppdy)UM zuxQbV5cZ=Q2|l`*9DGmk6%hmh7RyNFBf)O~CvbtjMuPVRBbz14_aW;^e01>(G!lG4 zJyVb+k>CsdOC zaq$W?5`4jt959YW^dOR}3p5gZ!H`Js1xKrpMuIQs3baZj_<|vk;0t=Renf(QRcg^l z@CEru@Ee<{Bf(Eal3%Ei;0uomS}u{`3m33H z!UaZ;gHWtUBf%FnkmGoqj#(~BRtbkVxwPmYK<;kvr9~PEzNm@ZA=ze?%}0WN1-V}A ze;5h=T~YF%BEior3*Z7{8VNpjBK?`!62b+>PDjcd%tQcR4S4ysp^H$S549CACP*T7opxF^%q=#^LiE}%PA>vfiaB)A3J@H=+sE? zu`?D0ZTT6C42c9E+eU1pfk^PN?aFB+_}I?9lBbd2V`tqhoJN9=o&A__8VNo&Bocf~ zK;r=yD3Rb}=j)VfB>30`%4sC{*u~0eB>32+IxdU^-;ExXv$Fyh7}H4bu|0o83Wu0* zfw8NV(@5~KA(7x?Ln6V)hD3so-TY+GEiSLvExKeh5`63qos0%F;issp<`rBHMS^F0 zVjgRadCZ7;+}JUXOQDMMt&^9ZGMO#PSMvhNPw=mnYr&O?MG8M_#yqaDfk^QDtQ+%s zaIN8P0#Y`vRh)|dyf*%u6)_|d{2G+0;;iKhLfvPPP|MkKtGUdO@*tR)$8jkCC&+7% z=*Kh?eC$5GcWET}*!?WQRXqV8{9+GKn$Ulxh4?baDXZg6+=+I8Z7_~KZ=Y9#pL;(*mi@Wmwo ztC8S~ZNO?I_~O!l)kyHgBzXH)z?MiPc>A`yS;_)Qmju_2^f@01{+md?5@x#63XKF`aRpO2u(TCcT&bK! zg0I-ETf+1A&p_TD<$Qk?xdY#qa{na~{QMd`KUDr-js(90W;w5NI1>DDB>2AJNbtjv z;Qx1#;4hQgMLrVz=V2Mo;HCzk2Va36n8KT)0zK%XfbaJ~Ceiw+C?!zb%|bf=`TlK{$;BpU7zq8VNozUTbLf8(6~xz0qcT1$uZ%%4sC{#I#=t zr;*?j!LOo5f=?XDU)+I6@QGRai>Z;|6SFl>Bf%$*(mag>pO~Y08Z$gGPdSYlo|v!P z{~!{4Y!vRzRev@D_UH-NqbFdGo`5}i3iddHcn|{iSXJcK6YQ}nCJ*8KAv}q%3jK_9;8k_l^`VdeH2kf)hXSb z?qj7I$D%*IXb|HxY@%)+S#WzrH}zIL#51tk)E;SSpj(-4X{ypas(YD8t!xzC!Z;1j zQuA|c(st2ItxHt%kD0nH&@6+XjJ8_opw&AEYZk_7_<))tZ1ZPDGqr9~&2dSUGX0G& zvl@BHbQ;=|p#R>D%gs`T@)u~C5XEi|%7}tn$T$te>~s&Z%$-t(^7|jjkIkJ@W~q+5 zFz`W?!O@&9oyWTd_x7;IQU5#7WIAI#k z$&-^v-p8;g>0hvY4@gs&rsptSndRy0$UI1)(7yKc{y|)(89}c<&oa#j8u*Y9h=u$G z66u$y@L?8nmo>?0>n}=MdeY(mrA%L1d|#F6PQOOwUlOt2^lmbbT*JZZNk2_S-u&F< zX>k_*@_r15+4lk-NHz9c%)0@yK@j_vy=fF^VX4Kgj5$t{U>Zm70Dy_B z3uX)+sGZSpP5!>BScw*$#TKn&&tG*Vm8}{1*g%V34Tgg)dR0sHuo1sdx~meFJP)+ic!U{1B@$ z`?f^dEVKR42;nzJMxSy5d`t>L?chV(owmD}T@X54vNuH9CLbld?27KT8Ja5`BA}8h z4BEK9Z4=p|fL)udAsZ7mEBm`x=(bOoULrIicXIt(&5)&8Ds*Vy>Z~kHWk>VQGLW;P zP1a&rNLF;WQ_8NeMfypolsy^5vL}Ps1w+`Dd+=85u4Id@(176_ex4_DS7iROK$2M) zQy@E4eTHErf#cF-2l5qr*6OW zGqi8B&fEYyTPN;-*11~eDd2i_W;AemXx|2%8I718+P5Ah@uL%B*Ui4wTme|(pACIQ z_!SYoMO+*7txs}^V3C+$9-#B z_^Bwj65so3GJKuR@wjiOoNxU(9`~&o^B>R<#6`{VFlj7`8?p1#>(MTQji< zU-N>vs5zdAt(nHR`W(;1*36b#cqX>yD5-^KVr#_aljE7#nuV+-$1|}tM~nJzQMQXu znmL|{t?8!v96z4cEEByv6I-)J^zuw>%{q2E$1|}t5*IbcGqE)%ie8?Ht=S}cc_y}I zizs7U)SA-@%ezLIrR*Z2Gb=d+8|w~OHec^LzyI*5&^mdMbms>&e0_(+9W;t zI|Z7hpY#Qaj*|hVFHkfm%IFIe?UXsBFHlrh0OrPtPLTG}7bq%=AxB@J=wwkwU!dp| zse-;h(ZhRjxI5;(iH_&!3lyF9DoOeRMUQxvBz=LR(}kojP;|x*nMz-v=uAnaFHrPI zA!#{^&XPq_eWNc>^i1gmeSxCev=@}!DXH`Y zik>B@^aYB3T1ff=MR(nevCq*LD0-pjr7uwQB3TOb1&UrO&7m()^a|7l%xMo?7_1of##FkEOex33XLy0`u`LiF1rwkPSI4EG5Y@$O_K#g|DU2GWW?zI zQ`>eBdIkcbPN4r!@x9|{LMfi^a*QjE#+Oic9Q}Wam$~mjxTQ4A2N&5fPZQ>;48Zh#8r~Q@WViw!-2}%0@)NNgcG0YW1plnV7N&5ek^~@ki|DUpB z7Lug@Pu*VGXY~K6+b1i9{y%m5Wu?%kr|wC)&GUqR-BTh!pPss>MSwm%b9iHqUPw+Q#y*am>hk2;?0dHoTCLJK2B~m>~?&1H=i!((-U9FfIB(*^whn+ zosFbVPu&~4Nz$jM?wvb9j-yYHy)Sebgkv5NCaUhlMOPH5YF?0aAO20s(MzQE)W@)h zbM)z{fB!wIqfbxO`vkwAD83`bY`p7E6c3ToH>poQoJ})K<@2z|8 zEX0|42A;=wR$bjY*zW-@X~Quy@qw$siSQxBixzkxdX2`sspc`PQSY!bF+%t}W_Sq3 zJA6IzXeKV~!@7qrA7w-5v!pl6d;uHFI}+o|0#4`!Bv*UA<^za&OM+x`GiJ{_S~<_0 ziFx+A0Hp=RoEPJr*DDiaZ2UHYD0fS?e>Br_oNz#yl^aMms6%_@Qtb?WAn% zi^6HNld^HY6i%a^l;yMrjdoHtB-%;YkZ31mhrJ=?G}=kov_A-^(N4;SL^~-P678gH zNVJo(A<<6ChD19l8xrlLY)G_|vj1_k6JMfW&WA@$dAqq~Ax^MnH7=%8b>_zPPWc!e zB(LfuaveHIzA0V+$zT9u#$N<37{F39X(qTF5l-MyBU4n~sa(RmHWzupa8^qwneqvm zS1Tc5$|n-Ch5-l}1g3nFa`@1|Pv;1HvkqSXC!)1|@pkj?&=t@AMF!k4W%Iy|87t3j zjpi=&B;KJxV=|&SK2~+Ln~Txf_&CiQEA_;4nm67YK)>Rhnm1X3&BVuR-c<8%)Hy+a zS7(?h^JC^UD(9O`_|8_*#IlUC={*4AP^kI1Q}-r#_iPBe ziYU$RbPm4PxyRIBA*s0FSjLF+$wbM7&D6042(eA41ovbnk8oL{TuZS&cLbrY+*Qs< z#^-Y1pit7KKuUy0;dFr_x8T5)`&nj7dzqUPiIFF=;MbUwahY_a7Q_*S3=(mk%Ncn& zMee3ZyUT2TW^|7k1(EhZB*_nJmEXPwf&uPdGLQS0q>)c?|B^KFg;JDD=5ha$dECDw zjeMczUsBPJv4{L{GLQS0q^(bJ|B|%zg*y3snWU{xasQGTewUlTMkN*ZPij)!Kk7{8 zasQHv`!~0eUlSPWGpV?L-y*5Fe_tf2xPL+_?%&s$s zJnmmoasNaaZGEA6QnBLxiLyNIUy`;y#r;d>asQGJnmmoasQ-mwDo!EkMId!zse@_xPQq!?q4#G`buFF6ak#@g=-FqnjTfqt@Dej*pCG)s{ zN!tAs_b*AiUsdu(-b!fqt4iHXl6JqUwCsM`{i+&e3(@XZ)g;@EcE74-*+R7YRki$r zTZneQs?oBWX!olcb1GA5_p3T=F-h9}s-~|aNxNUw?42ZO_p6$J5lPzps+O!ENxNTF z-_;~(_p4g_Ig+&dRh{r7lC=9(ZQ>*(8!+-!r@c**cE74Ee<4Y`U)9zH=xma9zu27r zU@Gl?v7YfvRouVnBx(1n65PKe?S55)``U2shW41s`0 zdlpb^MIN7zoS$JqhMW~3J+~j?FW@)33x7}aInLiPL2l?+NL{-W`JpOfK18x(%9l~u z9wdg0i>omfDW3Tb=&;#}Ys4G@$*AL<1Nl!Q!3&+^g-^o$4F8!%t5{^?sax^%8~OtH z&x=e|)Kp0gOK^3~7+gbU53a^6qJR_qCS-l1F8XFMIch3+5d_s1l5m}(QY=X?8v6j8 zxafQ8qVLTas5_R#sEdn!SY7nP^-O^>anTQtP(jZrdI|f(3&$QouDIxj)kQzt7O3(G z{}^r$B=3kECRWa_XWV9!tFgF8bkdnpf?wq-5@K$x|2o zaHmQ(I7MomEcT+mMt&@;F8bla*jcup*2(bUG!fD|St8a+>rpo9p*dbyUG&38YGp|7 zMRIjmUG&3Cf@Gi8$?(z2sf&KNE6^$~`r&TPi}|!phI_Prxae<^TGT~9ymFwH(#x3~ zSx|O0+83EeuB-{u6q&ylq*KISO4wX)1H(U=N#hiK6?twX`aLB15p~gz95v9ykB}Kz z!1}~R|IZ*|QFYOeHjv|Z(1$vjl!r3-@fQUy`XkW0(x|%VN1MnUl5JL5-znnrhaWEA z$R*%6nMc7o=Bv=_nisG+LgqZA81r-V$TO`RFVl+Lh`ANHQL_``zWE3;1y1?7qGXZ@ zAhn|qVKDVzJL0Q$YonrTErZL+nbB*Kn2i>Z0%8r}r*((f9A?!W?kX_aC4%?^FdhfZ&u>@h0v>p90$+ zRTur}#6FQy7yalYim^=TuS94{*>$Kl+DW0Z4m3DAnaZ44CH7t}1EN4(^b5Yg6s~Ey z=odT;pB8BeUGxhc4JIGmpxPKS#YMkxLiqdmZd2gN5TJDU8+d*zC~$S5xciE0$UWYvG9pFB~%a#*wS!ME!g6Ktq2#lfh`Hx>hLHW?k%tZTOU3Q?{o#F0oxE> zk01Mj@_=m&|11eM9jHLa_;xn3-qm~PjPQPHZg5|b;hG&j!2TxP*M*%E{!}B_l>4@@bHktG4X@eN?(yx)m=Hg`8*C7Q<*m`(HBdL%eS&tfBlqD2oQ+l>^kF^7Iua8S=HD8OUlp%l32 zH-O(&q>lAPBgtW+odSMZ;h+2-jdF^Lu=4O^u@*_;KCR4Zq+aXwdd;av;b&gydZ%>R4Yglbp2XNf7)SXpK77 zM}Lo`JiLG|W2Z*p1(d_1lf_36-wwbF1kF{UjRVc~E`iX1i+=b%tYf(7GmVS>Mobl4 z^p*9(lQ0!<(O1?FPs8ytxaezjvGCIvJhliNj%2tHCJHS2|l&!|RUWGb} z__*$cy+48;aM7(gF^G? zF|4$yft8lyz+kcYB5n&M=9)@Y`XTg}n%(GmnQ4V&xp@l>h?`@vXDiHV+{Y@-{b*Ri zyn&8anKwJI!OW4^Ni}8yYOFQyqWg7bZ9PsQn%l5uN0_O&IgB(s$2rPejKOO#ze7sW z9K-;o%ujJmn=KRYhHK{G+GJ|b+Gf*_R<)QX@xqZYKSC|7<`)>8(Pje%s?B@?&F!WX z{mq&-jKdf+2kq=IXJbgmnn%#iapqjC$DGMRzSFFMp7G{AOw$DO8}x3X$zj+h8R9)p zHrFF%im5~k4>MoG9rbYY33@Tr@bv0ba|gz4n)w8+I>IbPAE%oP7S0UQin~ zxf`|2GDkvkw%LM|qs+*5$C+bhVT9+JM)YN#c@x+9CW4V%VD_Rf3(XJF=0)Z*lv-?V zMZHVR57F|Y%?{MwWjdz-gT{2Ak3D8CYV0+8k=|#TF;h#;0rYg4X@s`r<`uMah4~xw ztTZ1@a-4p1Eyj73shQ|FtIeOWHrAK}SaQdhFeHyPHLZ@b);xu>$C;NQbG&&Q*LCI} zxUM%}!Sw`l561jN(^Kd;Cz*>eZX3+sFoqk=XE0)$%wI5iC!3qGO*fnASP7>XzJs4? z9!06sOg&n%#e59O)6K8&wtj~BF6#Z1xdkoXY6`LT&NTO;mTjgTz20uBF=9K6#hC0g zIb6>&J1}l%oAHo2$2^Rle%joIRei2G0kxcG)}Y>9<{|XxeDfyCUSOWV_*`hFWArXE zwHU}f$z*P!fva|N^=FjsZrNyS_T$k_o9XOni%?ipLq@S-fw=3zC2(qLfalRyP^5>rU-lIA@d&k^#!Ny zt0>@=KIxjVlX1UrVjqKd`mnXjdVP9pmo5E8SniPigr(qCor7#XV$GZmZZ)OxxKzV1 zJY{P%FNV7=srq{{x?4|i+GE@O2ca>xL-QSf8Z^ar4rtm;?kwee{|ri=tz69i3-iuV zuGC*o?$gRu_}?IRu5#6W3Ax}wzuvD~1}=EeZ}88e&I|RYsL{WKk{4;OGI&!$EC1e$ z4#%$ce>?|SdnaMU_&a*eOmO>@gB#?3K=5}c>z9voYd4>^9Z*Xy)A;KVLVbr={O0=L zz3_-M2GB2Wbw_^6DQ|IE)5y)6o$`#!417#LyZrE|HDKJ^q1mnVTr&Jl!tW*SF%4(J zVcny&+nt14WSz%+r|36qhgUM2g;Hm1-QmQeXCecy1-O=MfL=HK5;EfjS4r~OxHcvz zo&F`0i|&-<{kW!&fpmqupQQN#pyJz4AvO5W(Zo;A70oWkF3pdom2JO7Zn2lUGz~6hywrk?=a>mx1Zf&v%tWb>1{X7#s?#*Mm?=^r z4KC*Jn~`e0B=cx+G1C$xX>c(|I3#IsG1GJFGpz_S)wf;kff2tpUa;zeYZ{LP`|&RxRMEctxeO& z;x8O234E(f)5zlYbw~nV)6+Dv_$y~f0^i2dG_v?>x+P&buJO}xk*D1X-oYx!4t#9c zE>cWR)5zkly-X7J;2OUZ7cE9g%A!?#S4z{!;ve^@$nt$ZO(To{;B%6|7vJeMAk{uu2Q(-=MZb5U8QjM_bGtS9uF~zc9p_Cnv|vm zC6W9+?{BoABvOATNefCME!&wEltiQK30hDRO|pMzK}j^ro}dLK(UL>2)3l%@M$7iN zj~d22%MqppC2`oDBxylOO#d25T2K@r>NgX+cRG6b))Y5mGHEd(8)5w4fy3c!?w}D2aFY^&_qBbI-9D&1iNLUyYjr->W}Eh4tRYH6FuC z)YV6-f)`|!<6kDtk8oA*(Md5)V@lQghmm{@gB?5kJXBKh;ZhWCJs#*GB@HCgkM`lY zVwQ~EBP3_b(6o>|N`|qSa2GPsuH5*fQj3aq>rttwKq zkTjnt%KIN@3LUk5FMSck<+-dWO0w1UxFf#{k&v^b5)U{MLb~}I`mi!=*umh?S}<(b zk#X?pb~bF-!J-&8>|hXv4LiezongaHU_u!->@?yTeAuwVA4rya*Mr` znsc6~g1k8=l{e?4lK4nxQq+~on{!fmb52UlIVpT<49q#Hyg4V8H|M0(oU?#(YR*aJ z%{i$IUzf$4lTvezRH)`0s!rw2IVm;g96+k|s+gzdoES+p=lp}MRdbGzYR+*fpynJ& zRdbGzd2>!m%{ihsZ_Y{O%{eJG=ZG>j=SanB&JksKb51I6&PnCXIjOukC-pr0-6x&R zn{!fmb51I6&PnCXIjOukCzUtnr1IvRRNkDE%A0diYR-|qsX0e_q2?Uz1-^Tlosz2N z97$Dkj*x23VKAmt-kg)#i7&ls&PnCXIVm;gNZ-_)GpB-6MsrRoZ_Y{O%{i&OIVYv& z94WjJW2EMsRNkDE%A0did2>!GZ_Y{O%{h&MIY+eR%{i&OIVY7j=cLq}^A~9=k1D2e z{ED%_;KQeyb5d%~sgMMkb5d%~X_5q*b5d%~nJ5V~=cLq}L!U3}(K8}`5-x+xIb;XS zIj4vejT|X8=bS4E^p}WVkBb%~HQ1b!QghDzB1>~lO3gV>NCM3{safcVnsZWW&f#Xn zH{StsPAYHCNvS!9Bc|q@CN<|Y{ugsjV_?onC(yiUxVRrf>mYN^{m|hw2Id@sr^VL| zl@fD~N(JVe(lQ-w2)SM%C>%2K9 zl{e?4)SM&A^5&dW-kg)ln{!fmb52UlIj6wLlFFNNQh9SuO3gVJQb5f)UuB2Xob!E> zYR>sB$-Fryl{e=!2Iic%#hmjensY+1cIfIORly6ku8)5$DK+ObVJW55oHLfBnsd%X zC2G#e zDQeD1<;^*bgUvbD;Yd)(nS^6Wp8KVxj`Qrdd}jt8QHISqnCW42&aj`(u%FJbpU$wK z&aj^j9Y%)zbnu23N)P+#4EyP%hy8Sh{d9)?bcX$OhW&Jg{dE5S;iq#fz6iRfEyJb4 zxMcX9WWAbm5MB+gj}+){fS*o4uXc*~mBx=IufwOI2`q{zZ4?WoBp@5f6y!gY#MBvE zNK!VveLLf_@x*QVREU18k;Vkih8> z_?H$t9RdM~!^ciYbRCZvXG%8C!pFs?3)%io&7%iwKs$|escGtF?sUm*x^@t~Xb?Sj z5PjqzdRd-MAA2mSRXtAQ6Nl<}2Y7o7D5Pj1idQ+Zu8ZYBwm5x3!&{5$ID#wqk+#5wv6!M}i9==bW2%fu*Unmi^ zatBzqKSP74yE;QRH?!{zr}bJPUUpjV5aI==_47hJ@3cN9#M4geK@e_V>ks&^yY&_R zTi*Hx|Mj;1JO3?f{fPgTwuZ6(5C*fgRQ^wHt;K(L#b};>zXMHq8Gmh~k=8nq8Ec%; zyOHxAQZG5^JFWAWxU`iA^`UYt|Mj+R=D+^d9sJkbdJ+HiwC?4Bm$+ovYl~;E~DHNf2vO;ip-+k_kPnN&Z{inw9L8{RwA@cunkrhb$idBb~0-tgX`hWEcwP7UuJdBb~02E(9+_YO6@ONDB9r|OQp z;k`o*@6*Ic@(lCT@ctE&YIwhmq#E9ZRKxoNOjX0Xq^jXv$h_gbLk;huH*a|F$Q#}} z)bK9K)bK79tKnUglj=bT$BX4-`$Q#}}@`m@0 zyy3kgZ+P#>8{RwehW8FNyi4EI@GiYj!@KrE4DXVvhIdI-!@H1bc;Ab$@5me8JMxD2 zj=bT$Lk;iJH#NM!2Xl}b-aGymdtU+=M{%Xytsdc#Wm~c&OQUNvnnSjwk!E~ikK}{P z9?3R`kC87zY>j+?FC?k1ZHST;*`31O3L zt{-whlFjjd-+SGv9&EF=A;+4*sOQz|>gwvM_v-py)ic0*$^h>v1H7jcc$bF_@SZZj zd&&UsDFeKx4Dg;Zz`Ho9!#+w$%>eHy1H7jU@SalO{RppsfVbktF>?=E3*A7x5` z_fHFhzZZQ2{>Sok0(HuLE5XARL`i z;C+fPx^S(&02h6XlplCcDe%5h;u3gIDeyih3d1H7jcc&9R^@OAD!%9H`#QwqGZ z#1wd+uE4war7PG+DSqj&kMb*cPxbe4vEL8r@B!~Dk%s!E!#>KNGZv2@@Wm3~U1Pbx zdp#ml&tRUbEslfZiBo%mnElCC5-$qh__XkKS@Xq2+MNm$)JHJg*f%hMfRN#Ff zN-L$n`_IYU4B;HNyq#PH-e-|CzJglq{jg7DFxo8wKl+e$^h>v z1>Pkw1H7jU@SZZjd&&UsDFxo^(3YkQ@SZZjdrE=#PDW7ReFHy8f%knR6?lImNdvs6 z4Djyxuse(-Dgtl8wfe)jsPvJl;RUxohM$=!1>V2P

=S7D)x(TRUp3&|Tm?rNH}Iauj$^8Q^`I4|p%T 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

-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 literal 389587 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%0ArEAEzu&Lw%Cd5vbKdWq_nhy1f7s`E)YV;G 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

rNCu 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 Date: Mon, 26 Mar 2018 09:07:27 +0200 Subject: [PATCH 2/5] Common mode added, working for gotthard double modules --- slsDetectorCalibration/analogDetector.h | 34 +- .../gotthardDoubleModuleDataNew.h | 10 +- ...hardDoubleModuleCommonModeSubtractionNew.h | 30 ++ .../gotthard25umZmqAnalysis.C | 185 ++++---- .../interpolations/eta2InterpolationBase.h | 436 ++++++++++++++++++ .../interpolations/eta3InterpolationBase.h | 294 ++++++++++++ .../etaInterpolationRandomBins.h | 417 +++++++++++++++++ slsDetectorCalibration/singlePhotonDetector.h | 15 +- .../single_photon_hit_double.h | 98 ++++ .../single_photon_hit_old.h | 93 ++++ slsDetectorCalibration/slsDetectorData.h | 2 +- slsDetectorGui/gitInfo.txt | 10 +- slsDetectorGui/include/gitInfoGui.h | 8 +- slsDetectorSoftware/gitInfo.txt | 10 +- slsDetectorSoftware/slsDetector/gitInfoLib.h | 8 +- slsReceiverSoftware/gitInfo.txt | 10 +- slsReceiverSoftware/include/gitInfoReceiver.h | 8 +- 17 files changed, 1540 insertions(+), 128 deletions(-) create mode 100644 slsDetectorCalibration/gotthardDoubleModuleCommonModeSubtractionNew.h create mode 100644 slsDetectorCalibration/interpolations/eta2InterpolationBase.h create mode 100644 slsDetectorCalibration/interpolations/eta3InterpolationBase.h create mode 100644 slsDetectorCalibration/interpolations/etaInterpolationRandomBins.h create mode 100644 slsDetectorCalibration/single_photon_hit_double.h create mode 100644 slsDetectorCalibration/single_photon_hit_old.h diff --git a/slsDetectorCalibration/analogDetector.h b/slsDetectorCalibration/analogDetector.h index abd019948..7f5f6d352 100644 --- a/slsDetectorCalibration/analogDetector.h +++ b/slsDetectorCalibration/analogDetector.h @@ -271,34 +271,37 @@ template class analogDetector { else return 0; } - virtual void addToCommonMode(double val, int ix, int iy=0){ + /* virtual void addToCommonMode(double val, int ix, int iy=0){ */ - if (ix>=0 && ix=0 && iyisGood(ix, iy)==0) return; - if (getNumpedestals(ix,iy)>0) - cmSub->addToCommonMode(val-getPedestal(ix,iy), ix, iy); - }; + /* if (ix>=0 && ix=0 && iyisGood(ix, iy)==0) return; */ + /* if (getNumpedestals(ix,iy)>0) { */ + /* cmSub->addToCommonMode(val-getPedestal(ix,iy), ix, iy); */ + /* } */ + /* }; */ - } - } + /* } */ + /* } */ virtual void addToCommonMode(char *data){ if (cmSub) { for (int ix=xmin; ix0) + // if (getNumpedestals(ix,iy)>0) addToCommonMode(data, ix, iy); } } - cout << "cm " << getCommonMode(0,0) << " " << getCommonMode(1,0) << endl; + //cout << "cm " << getCommonMode(0,0) << " " << getCommonMode(1,0) << endl; } } virtual void addToCommonMode(char *data, int ix, int iy=0){ if (cmSub) { if (det) if (det->isGood(ix, iy)==0) return; - if (getNumpedestals(ix,iy)>0) + if (getNumpedestals(ix,iy)>0){ cmSub->addToCommonMode(subtractPedestal(data,ix,iy,0), ix, iy); + // cout << ix << " " < class analogDetector { val=dataSign*det->getValue(data, ix, iy); else val=((double*)data)[iy*nx+ix]; - if (cm && cmSub) - val-=getCommonMode(ix,iy); - addToPedestal(val,ix,iy); + /* if (cm && cmSub) */ + /* val-=getCommonMode(ix,iy); */ + addToPedestal(val,ix,iy, cm); } return ; @@ -722,7 +725,6 @@ template class analogDetector { } if (det) { - // cout << det->getValue(data, ix, iy) << " " << getPedestal(ix,iy) << " " << (dataSign*det->getValue(data, ix, iy)-getPedestal(ix,iy))/g << endl; return (dataSign*det->getValue(data, ix, iy)-getPedestal(ix,iy, cm))/g; } else diff --git a/slsDetectorCalibration/dataStructures/gotthardDoubleModuleDataNew.h b/slsDetectorCalibration/dataStructures/gotthardDoubleModuleDataNew.h index 5aea9c75f..9cf11c540 100644 --- a/slsDetectorCalibration/dataStructures/gotthardDoubleModuleDataNew.h +++ b/slsDetectorCalibration/dataStructures/gotthardDoubleModuleDataNew.h @@ -34,6 +34,9 @@ public: +#ifdef BCHIP074_BCHIP075 + cout << "This is a bchip074-bchip075 system " << endl; +#endif uint16_t **dMask; @@ -59,6 +62,11 @@ public: dMap[0][ix] = 1280*2+2*offset+ipix*2;//dataSize-2-ix;//+2*offset; // dMap[0][ix] = 2*ipix+offset*(imod+1)+1280*2*imod; dMask[0][ix] = 0x0; +#ifdef BCHIP074_BCHIP075 + int ibad=ix/2+1280*imod; + if ((ibad>=128*4 && ibad<128*5) || (ibad>=9*128 && ibad<10*128) || (ibad>=(1280+128*4) && ibad=(1280+128*6))) + dataROIMask[0][ix]=0; +#endif } setDataMap(dMap); @@ -78,7 +86,7 @@ public: int getFrameNumber(char *buff){if (offset>=sizeof(sls_detector_header)) return ((sls_detector_header*)buff)->frameNumber; return iframe;};//*((int*)(buff+5))&0xffffff;}; - + /** gets the packets number (last packet is labelled with 0 and is replaced with 40) diff --git a/slsDetectorCalibration/gotthardDoubleModuleCommonModeSubtractionNew.h b/slsDetectorCalibration/gotthardDoubleModuleCommonModeSubtractionNew.h new file mode 100644 index 000000000..2960cabd4 --- /dev/null +++ b/slsDetectorCalibration/gotthardDoubleModuleCommonModeSubtractionNew.h @@ -0,0 +1,30 @@ +#ifndef GOTTHARDDOUBLECOMMONMODESUBTRACTION_H +#define GOTTHARDDOUBLECOMMONMODESUBTRACTION_H + + +#include "commonModeSubtractionNew.h" + +class gotthardDoubleModuleCommonModeSubtraction : public commonModeSubtraction { + + /** @short class to calculate the common mode of the pedestals based on an approximated moving average*/ + + public: + + /** constructor + \param nn number of samples for the moving average to calculate the average common mode + \param iroi number of regions on which one can calculate the common mode separately. Defaults to 1 i.e. whole detector + + */ + gotthardDoubleModuleCommonModeSubtraction(int ns=3) : commonModeSubtraction(2, ns) {}; + + /** + gets the common mode ROI for pixel ix, iy + */ + virtual int getROI(int ix, int iy){return ix%2;}; + + +}; + + + +#endif diff --git a/slsDetectorCalibration/gotthardExecutables/gotthard25umZmqAnalysis.C b/slsDetectorCalibration/gotthardExecutables/gotthard25umZmqAnalysis.C index 2576a4892..274131edd 100644 --- a/slsDetectorCalibration/gotthardExecutables/gotthard25umZmqAnalysis.C +++ b/slsDetectorCalibration/gotthardExecutables/gotthard25umZmqAnalysis.C @@ -14,6 +14,8 @@ #include #include +//#define BCHIP074_BCHIP075 + #include "gotthardModuleDataNew.h" #include "gotthardDoubleModuleDataNew.h" #include "gotthardDoubleModuleCommonModeSubtractionNew.h" @@ -34,7 +36,6 @@ - #define SLS_DETECTOR_JSON_HEADER_VERSION 0x2 int main(int argc, char *argv[]){ //void *gotthardProcessFrame() { @@ -57,20 +58,22 @@ int main(int argc, char *argv[]){ offset=48; #endif - commonModeSubtraction *cm=NULL; + //commonModeSubtraction *cm=NULL; - cm=new gotthardDoubleModuleCommonModeSubtraction(); + gotthardDoubleModuleCommonModeSubtraction *cm=new gotthardDoubleModuleCommonModeSubtraction(); gotthardModuleDataNew *decoder=new gotthardModuleDataNew(); gotthardDoubleModuleDataNew *det=new gotthardDoubleModuleDataNew(offset); - // singlePhotonDetector *filter=new singlePhotonDetector(det,3, 5, 1, 0, 1000, 100); - analogDetector *filter=new analogDetector(det, 1, cm, 1000); + singlePhotonDetector *filter=new singlePhotonDetector(det,3, 5, 1, cm, 1000, 100); + // analogDetector *filter=new analogDetector(det, 1, cm, 1000); + // analogDetector *filter_nocm=new analogDetector(det, 1, NULL, 1000); filter->setROI(0,2560,0,1); char *buff;//[2*(48+1280*2)]; char *buff0; char *buff1; multiThreadedAnalogDetector *mt=new multiThreadedAnalogDetector(filter,nthreads,fifosize); + mt->setFrameMode(eFrame); // mt->setFrameMode(eFrame); - mt->setFrameMode(ePedestal); + // mt->setFrameMode(ePedestal); mt->StartThreads(); mt->popFree(buff); buff0=buff; @@ -222,6 +225,7 @@ int main(int argc, char *argv[]){ char ofname[10000]; + char fn0[10000], fn1[10000]; FILE *fout=NULL; for (int i=0; iReceiveHeader(0, acqIndex0, frameIndex0, subframeIndex0, filename0, fileindex0)) { - cout << "************************************************************************** packet0!*****************************"<< endl; + // cout << "************************************************************************** packet0!*****************************"<< endl; end_of_acquisition++; } if (!zmqsocket1->ReceiveHeader(0, acqIndex1, frameIndex1, subframeIndex1, filename1, fileindex1)) { - cout << "************************************************************************** packet1!*****************************"<< endl; + //cout << "************************************************************************** packet1!*****************************"<< endl; end_of_acquisition++; } // if ((!zmqsocket0->ReceiveHeader(0, acqIndex0, frameIndex0, subframeIndex0, filename0, fileindex0)) && (!zmqsocket1->ReceiveHeader(0, acqIndex1, frameIndex1, subframeIndex1, filename1, fileindex1))){ + if (end_of_acquisition==0) { + if (acqIndex0!=acqIndex1) + cout << "different acquisition indexes " << acqIndex0 << " and " << acqIndex1 << endl; + if (frameIndex0!=frameIndex1) + cout << "different frame indexes " << frameIndex0 << " and " << frameIndex1 << endl; + + + while (frameIndex0ReceiveData(0, buff0, size/2); + if (!zmqsocket0->ReceiveHeader(0, acqIndex0, frameIndex0, subframeIndex0, filename0, fileindex0)) { + end_of_acquisition++; + } + } + + while (frameIndex1ReceiveData(0, buff1, size/2); + if (!zmqsocket1->ReceiveHeader(0, acqIndex1, frameIndex1, subframeIndex1, filename1, fileindex1)) { + end_of_acquisition++; + } + } + } + if (end_of_acquisition) { cout << "************************************************************************** END OF FRAME" << end_of_acquisition << " !*****************************"<< endl; // return 0; - - // while (mt->isBusy()) {;} - // image=filter->getImage(); - // if (image) { - // fout=fopen(ofname,"w"); - // cout << nf << "*****************" << endl; - // for (int i=0; i<2560; i++) { - // fprintf(fout,"%d %d\n",i,image[i]); - // dout[i]=image[i]; - // if (image[i]<0) - // dout[i]=0; - // } - // fclose(fout); - // } - - - if (send) { - // strcpy(fname0,filename0.c_str()); - // strcpy(fname1,filename1.c_str()); - // // zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,16,fileindex,400,400,400*400, acqIndex,frameIndex,fname, acqIndex, 0,0,0,0,0,0,0,0,0,0,0,1); - // zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fname0, 0, 0,0,0,0,0,0,0,0,0,0,0,1); - // zmqsocket3->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fname1, 0, 0,0,0,0,0,0,0,0,0,0,0,1); + + sprintf(ofname,"%s_%d.ph",fn0,irun); + while (mt->isBusy()) {;} + image=filter->getImage(); + if (image) { + // fout=fopen(ofname,"w"); + cout << nf << "*****************" << endl; + for (int i=0; i<2560/2; i++) { + // fprintf(fout,"%d %d\n",i,image[i]); + dout[i]=image[i/2]; + dout[i+1280]=image[i/2+1]; - // zmqsocket2->SendData((char*)dout,size/2); - // zmqsocket3->SendData(((char*)dout)+size/2,size/2); + if (dout[i]<0) + dout[i]=0; + } + // fclose(fout); + } + + + if (send) { + + zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fn0, 0, 0,0,0,0,0,0,0,0,0,0,0,1); + zmqsocket3->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fn1, 0, 0,0,0,0,0,0,0,0,0,0,0,1); + + zmqsocket2->SendData((char*)dout,size/2); + zmqsocket3->SendData(((char*)dout)+size/2,size/2); // // cprintf(GREEN, "Sent Data\n"); - // zmqsocket2->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); - // zmqsocket3->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); - - // cprintf(RED, "Received %d frames\n", nf); - zmqsocket2->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); zmqsocket3->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); } - mt->setFrameMode(eFrame); + //mt->setFrameMode(eFrame); filter->clearImage(); // std::time(&end_time); // cout << std::ctime(&end_time) << " " << nf << endl; @@ -336,59 +360,23 @@ int main(int argc, char *argv[]){ continue; } - if (acqIndex0!=acqIndex1) - cout << "different acquisition indexes " << acqIndex0 << " and " << acqIndex1 << endl; - if (frameIndex0!=frameIndex1) - cout << "different frame indexes " << frameIndex0 << " and " << frameIndex1 << endl; + strcpy(fn0,filename0.c_str()); + strcpy(fn1,filename1.c_str()); // cout << "Receive data " << nf << endl; length = zmqsocket0->ReceiveData(0, buff0, size/2); length += zmqsocket1->ReceiveData(0, buff1, size/2); irun=fileindex0; - sprintf(ofname,"%s_%d.ph",filename0.c_str(),fileindex0); - while (mt->isBusy()) {;} - image=filter->getImage(); - if (image) { - for (int i=0; i<2560; i++) { - // fprintf(fout,"%d %d\n",i,image[i]); - dout[i]=det->getChannel(buff,i,0);//image[i]+1000;//filter->getPedestal(i,0);// - // if (image[i]<0) - // dout[i]=0; - // cout << i << " " << image[i] << " " << dout[i] << endl; - } - } - - - - if (send) { - strcpy(fname0,filename0.c_str()); - strcpy(fname1,filename1.c_str()); - // zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,16,fileindex,400,400,400*400, acqIndex,frameIndex,fname, acqIndex, 0,0,0,0,0,0,0,0,0,0,0,1); - zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fname0, 0, 0,0,0,0,0,0,0,0,0,0,0,1); - zmqsocket3->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fname1, 0, 0,0,0,0,0,0,0,0,0,0,0,1); - - zmqsocket2->SendData((char*)dout,size/2); - zmqsocket3->SendData(((char*)dout)+size/2,size/2); - // cprintf(GREEN, "Sent Data\n"); - - - // zmqsocket2->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); - // zmqsocket3->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); - - // cprintf(RED, "Received %d frames\n", nf); - - } - - if (nf>100) - mt->setFrameMode(eFrame); - filter->clearImage(); + // // if (nf>100) + // // mt->setFrameMode(eFrame); + // //filter->clearImage(); #endif @@ -396,7 +384,42 @@ int main(int argc, char *argv[]){ mt->pushData(buff); mt->nextThread(); + cout << "==" << nf << endl; + // while (mt->isBusy()) {;} + // image=filter->getImage(); + // if (image) { + // for (int i=0; i<2560; i++) { + // // if (i<512) + + // // fprintf(fout,"%d %d\n",i,image[i]); + // dout[i]=filter->subtractPedestal(buff,i,0,1);//image[i];//filter->getPedestal(i,0);// + // if (dout[i]<0) + // dout[i]=0; + // // cout << i << " " << image[i] << " " << dout[i] << endl; + // } + // } + + + // if (send) { + // strcpy(fname0,filename0.c_str()); + // strcpy(fname1,filename1.c_str()); + // // zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,16,fileindex,400,400,400*400, acqIndex,frameIndex,fname, acqIndex, 0,0,0,0,0,0,0,0,0,0,0,1); + // zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fname0, 0, 0,0,0,0,0,0,0,0,0,0,0,1); + // zmqsocket3->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fname1, 0, 0,0,0,0,0,0,0,0,0,0,0,1); + + // zmqsocket2->SendData((char*)dout,size/2); + // zmqsocket3->SendData(((char*)dout)+size/2,size/2); + // // cprintf(GREEN, "Sent Data\n"); + + + // // zmqsocket2->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); + // // zmqsocket3->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); + + // // cprintf(RED, "Received %d frames\n", nf); + + // } + mt->popFree(buff); buff0=buff; @@ -412,6 +435,8 @@ int main(int argc, char *argv[]){ #ifndef ZMQ + + while (mt->isBusy()) {;} image=filter->getImage(); if (image) { @@ -420,7 +445,7 @@ int main(int argc, char *argv[]){ for (int i=0; i<512; i++) { fprintf(fout,"%d %d\n",i,image[i]); } - fclose(fout);; + fclose(fout); } filter->clearImage(); diff --git a/slsDetectorCalibration/interpolations/eta2InterpolationBase.h b/slsDetectorCalibration/interpolations/eta2InterpolationBase.h new file mode 100644 index 000000000..55ed32e2a --- /dev/null +++ b/slsDetectorCalibration/interpolations/eta2InterpolationBase.h @@ -0,0 +1,436 @@ +#ifndef ETA2_INTERPOLATION_BASE_H +#define ETA2_INTERPOLATION_BASE_H + +#ifdef MYROOT1 +#include +#include +#include +#include +#endif + +#include "etaInterpolationBase.h" + +class eta2InterpolationBase : public virtual etaInterpolationBase { + + public: + eta2InterpolationBase(int nx=400, int ny=400, int ns=25, int nb=-1, double emin=1, double emax=0) : etaInterpolationBase(nx,ny, ns, nb, emin, emax) { + // cout << "e2ib " << nb << " " << emin << " " << emax << endl; + + if (nbeta<=0) { + nbeta=nSubPixels*10; + } + if (etamin>=etamax) { + etamin=-1; + etamax=2; + cout << ":" <2) + calcEta(totquad, sDum, etax, etay); + getInterpolatedPosition(x,y,etax,etay,corner,int_x,int_y); + + return; + }; + + + virtual void getInterpolatedPosition(int x, int y, double *data, double &int_x, double &int_y) + { + double sDum[2][2]; + double tot, totquad; + double etax,etay; + + int corner; + corner=calcQuad(data, tot, totquad, sDum); + if (nSubPixels>2) + calcEta(totquad, sDum, etax, etay); + getInterpolatedPosition(x,y,etax,etay,corner,int_x,int_y); + + return; + }; + + + + + + + + + + virtual void getInterpolatedPosition(int x, int y, double totquad,int quad,double *cl,double &int_x, double &int_y) { + + double cc[2][2]; + double *cluster[3]; + int xoff, yoff; + cluster[0]=cl; + cluster[1]=cl+3; + cluster[2]=cl+6; + + switch (quad) { + case BOTTOM_LEFT: + xoff=0; + yoff=0; + break; + case BOTTOM_RIGHT: + xoff=1; + yoff=0; + break; + case TOP_LEFT: + xoff=0; + yoff=1; + break; + case TOP_RIGHT: + xoff=1; + yoff=1; + break; + default: + ; + } + double etax, etay; + if (nSubPixels>2) { + cc[0][0]=cluster[yoff][xoff]; + cc[1][0]=cluster[yoff+1][xoff]; + cc[0][1]=cluster[yoff][xoff+1]; + cc[1][1]=cluster[yoff+1][xoff+1]; + calcEta(totquad,cc,etax,etay); + } + return getInterpolatedPosition(x,y,etax, etay,quad,int_x,int_y); + + } + + + + virtual void getInterpolatedPosition(int x, int y, double totquad,int quad,int *cl,double &int_x, double &int_y) { + + double cc[2][2]; + int *cluster[3]; + int xoff, yoff; + cluster[0]=cl; + cluster[1]=cl+3; + cluster[2]=cl+6; + + switch (quad) { + case BOTTOM_LEFT: + xoff=0; + yoff=0; + break; + case BOTTOM_RIGHT: + xoff=1; + yoff=0; + break; + case TOP_LEFT: + xoff=0; + yoff=1; + break; + case TOP_RIGHT: + xoff=1; + yoff=1; + break; + default: + ; + } + double etax, etay; + if (nSubPixels>2) { + cc[0][0]=cluster[yoff][xoff]; + cc[1][0]=cluster[yoff+1][xoff]; + cc[0][1]=cluster[yoff][xoff+1]; + cc[1][1]=cluster[yoff+1][xoff+1]; + calcEta(totquad,cc,etax,etay); + } + return getInterpolatedPosition(x,y,etax, etay,quad,int_x,int_y); + + } + + + + + + + virtual void getInterpolatedPosition(int x, int y, double etax, double etay, int corner, double &int_x, double &int_y) + { + + + double xpos_eta=0,ypos_eta=0; + double dX,dY; + int ex,ey; + switch (corner) + { + case TOP_LEFT: + dX=-1.; + dY=0; + break; + case TOP_RIGHT: + ; + dX=0; + dY=0; + break; + case BOTTOM_LEFT: + dX=-1.; + dY=-1.; + break; + case BOTTOM_RIGHT: + dX=0; + dY=-1.; + break; + default: + cout << "bad quadrant" << endl; + dX=0.; + dY=0.; + } + + + if (nSubPixels>2) { + +#ifdef MYROOT1 + xpos_eta=(hhx->GetBinContent(hhx->GetXaxis()->FindBin(etax),hhy->GetYaxis()->FindBin(etay)))/((double)nSubPixels); + ypos_eta=(hhy->GetBinContent(hhx->GetXaxis()->FindBin(etax),hhy->GetYaxis()->FindBin(etay)))/((double)nSubPixels); +#endif +#ifndef MYROOT1 + ex=(etax-etamin)/etastep; + ey=(etay-etamin)/etastep; + if (ex<0) { + cout << "x*"<< ex << endl; + ex=0; + } + if (ex>=nbeta) { + cout << "x?"<< ex << endl; + ex=nbeta-1; + + } + if (ey<0) { + cout << "y*"<< ey << endl; + ey=0; + } + if (ey>=nbeta) { + cout << "y?"<< ey << endl; + ey=nbeta-1; + + } + + + + xpos_eta=(((double)hhx[(ey*nbeta+ex)]))+dX ;///((double)nSubPixels); + ypos_eta=(((double)hhy[(ey*nbeta+ex)]))+dY ;///((double)nSubPixels); + //else + //return 0; + +#endif + } else { + xpos_eta=0.5*dX+0.25; + ypos_eta=0.5*dY+0.25; + } + + int_x=((double)x) + xpos_eta+0.5; + int_y=((double)y) + ypos_eta+0.5; + + + } + + + + virtual int addToFlatField(double totquad,int quad,int *cl,double &etax, double &etay) { + double cc[2][2]; + int *cluster[3]; + int xoff, yoff; + cluster[0]=cl; + cluster[1]=cl+3; + cluster[2]=cl+6; + + switch (quad) { + case BOTTOM_LEFT: + xoff=0; + yoff=0; + break; + case BOTTOM_RIGHT: + xoff=1; + yoff=0; + break; + case TOP_LEFT: + xoff=0; + yoff=1; + break; + case TOP_RIGHT: + xoff=1; + yoff=1; + break; + default: + ; + } + cc[0][0]=cluster[yoff][xoff]; + cc[1][0]=cluster[yoff+1][xoff]; + cc[0][1]=cluster[yoff][xoff+1]; + cc[1][1]=cluster[yoff+1][xoff+1]; + + /* cout << cl[0] << " " << cl[1] << " " << cl[2] << endl; */ + /* cout << cl[3] << " " << cl[4] << " " << cl[5] << endl; */ + /* cout << cl[6] << " " << cl[7] << " " << cl[8] << endl; */ + /* cout <<"******"<Fill(etax,etay); +#endif +#ifndef MYROOT1 + int ex,ey; + ex=(etax-etamin)/etastep; + ey=(etay-etamin)/etastep; + if (ey=0 && ey>=0) + heta[ey*nbeta+ex]++; +#endif + return 0; + }; + +/* protected: */ + +/* #ifdef MYROOT1 */ +/* TH2D *heta; */ +/* TH2D *hhx; */ +/* TH2D *hhy; */ +/* #endif */ +/* #ifndef MYROOT1 */ +/* int *heta; */ +/* float *hhx; */ +/* float *hhy; */ +/* #endif */ +/* int nbeta; */ +/* double etamin, etamax, etastep; */ + +}; + +#endif diff --git a/slsDetectorCalibration/interpolations/eta3InterpolationBase.h b/slsDetectorCalibration/interpolations/eta3InterpolationBase.h new file mode 100644 index 000000000..7264dd95e --- /dev/null +++ b/slsDetectorCalibration/interpolations/eta3InterpolationBase.h @@ -0,0 +1,294 @@ +#ifndef ETA3_INTERPOLATION_BASE_H +#define ETA3_INTERPOLATION_BASE_H + +#ifdef MYROOT1 +#include +#include +#include +#include +#endif + +#include "etaInterpolationBase.h" + +class eta3InterpolationBase : public virtual etaInterpolationBase { + + public: + eta3InterpolationBase(int nx=400, int ny=400, int ns=25, int nb=-1, double emin=1, double emax=0) : etaInterpolationBase(nx, ny, ns, nb, emin, emax) { + // cout << "e3ib " << nb << " " << emin << " " << emax << endl; + if (nbeta<=0) { + nbeta=nSubPixels*10; + } + if (etamin>=etamax) { + etamin=-1; + etamax=1; + } + + etastep=(etamax-etamin)/nbeta; +#ifdef MYROOT1 + delete heta; + delete hhx; + delete hhy; + heta=new TH2D("heta","heta",nbeta,etamin,etamax,nbeta,etamin,etamax); + hhx=new TH2D("hhx","hhx",nbeta,etamin,etamax,nbeta,etamin,etamax); + hhy=new TH2D("hhy","hhy",nbeta,etamin,etamax,nbeta,etamin,etamax); +#endif +#ifndef MYROOT1 + delete [] heta; + delete [] hhx; + delete [] hhy; + + heta=new int[nbeta*nbeta]; + hhx=new float[nbeta*nbeta]; + hhy=new float[nbeta*nbeta]; + +#endif + // cout << nbeta << " " << etamin << " " << etamax << endl; +}; + + eta3InterpolationBase(eta3InterpolationBase *orig): etaInterpolationBase(orig){ }; + + virtual eta3InterpolationBase* Clone()=0; + + + + + // virtual void prepareInterpolation(int &ok){}; + + + ////////////////////////////////////////////////////////////////////////////// + //////////// /*It return position hit for the event in input */ ////////////// + virtual void getInterpolatedPosition(int x, int y, int *data, double &int_x, double &int_y) + { + double tot, totquad; + double etax,etay; + + int corner=calcEta3(data,etax,etay, totquad); + + getInterpolatedPosition(x,y,etax,etay,corner,int_x,int_y); + + return; + }; + + + virtual void getInterpolatedPosition(int x, int y, double *data, double &int_x, double &int_y) + { + double sDum[2][2]; + double tot, totquad; + double etax,etay; + + int corner=calcEta3(data,etax,etay, totquad); + + getInterpolatedPosition(x,y,etax,etay,corner,int_x,int_y); + + return; + }; + + + virtual void getInterpolatedPosition(int x, int y, double totquad,int quad,double *cl,double &int_x, double &int_y) { + + + double etax, etay; + if (nSubPixels>2) { + calcEta3(cl,etax,etay, totquad); + } + return getInterpolatedPosition(x,y,etax, etay,quad,int_x,int_y); + + } + + + + virtual void getInterpolatedPosition(int x, int y, double totquad,int quad,int *cl,double &int_x, double &int_y) { + + + double etax, etay; + if (nSubPixels>2) { + calcEta3(cl,etax,etay, totquad); + } + return getInterpolatedPosition(x,y,etax, etay,quad,int_x,int_y); + + } + + + + virtual void getInterpolatedPosition(int x, int y, double etax, double etay, int corner, double &int_x, double &int_y) + { + + + double xpos_eta=0,ypos_eta=0; + int ex,ey; + + if (nSubPixels>2) { + +#ifdef MYROOT1 + xpos_eta=(hhx->GetBinContent(hhx->GetXaxis()->FindBin(etax),hhy->GetYaxis()->FindBin(etay)))/((double)nSubPixels); + ypos_eta=(hhy->GetBinContent(hhx->GetXaxis()->FindBin(etax),hhy->GetYaxis()->FindBin(etay)))/((double)nSubPixels); +#endif +#ifndef MYROOT1 + ex=(etax-etamin)/etastep; + ey=(etay-etamin)/etastep; + if (ex<0) { + /* cout << etax << " " << etamin << " "; */ + /* cout << "3x*"<< ex << endl; */ + ex=0; + } + if (ex>=nbeta) { + /* cout << etax << " " << etamin << " "; */ + /* cout << "3x?"<< ex << endl; */ + ex=nbeta-1; + } + if (ey<0) { + /* cout << etay << " " << etamin << " "; */ + /* cout << "3y*"<< ey << endl; */ + ey=0; + } + if (ey>=nbeta) { + /* cout << etay << " " << etamin << " "; */ + /* cout << "3y?"<< ey << endl; */ + ey=nbeta-1; + + } + xpos_eta=(((double)hhx[(ey*nbeta+ex)]));///((double)nSubPixels); + ypos_eta=(((double)hhy[(ey*nbeta+ex)]));///((double)nSubPixels); + +#endif + + } else { + switch (corner) { + case BOTTOM_LEFT: + xpos_eta=-0.25; + ypos_eta=-0.25; + break; + case BOTTOM_RIGHT: + xpos_eta=0.25; + ypos_eta=-0.25; + break; + case TOP_LEFT: + xpos_eta=-0.25; + ypos_eta=0.25; + break; + case TOP_RIGHT: + xpos_eta=0.25; + ypos_eta=0.25; + break; + default: + xpos_eta=0; + ypos_eta=0; + } + + } + int_x=((double)x) + xpos_eta; + int_y=((double)y) + ypos_eta; + // int_x=5. + xpos_eta; + // int_y=5. + ypos_eta; + + + } + + + + + + +/* ///////////////////////////////////////////////////////////////////////////////////////////////// */ +/* virtual void getPositionETA3(int x, int y, double *data, double &int_x, double &int_y) */ +/* { */ +/* double sDum[2][2]; */ +/* double tot, totquad; */ +/* double eta3x,eta3y; */ +/* double ex,ey; */ + +/* calcQuad(data, tot, totquad, sDum); */ +/* calcEta3(data,eta3x, eta3y,tot); */ + +/* double xpos_eta,ypos_eta; */ + +/* #ifdef MYROOT1 */ +/* xpos_eta=((hhx->GetBinContent(hhx->GetXaxis()->FindBin(eta3x),hhy->GetYaxis()->FindBin(eta3y))))/((double)nSubPixels); */ +/* ypos_eta=((hhy->GetBinContent(hhx->GetXaxis()->FindBin(eta3x),hhy->GetYaxis()->FindBin(eta3y))))/((double)nSubPixels); */ + +/* #endif */ +/* #ifndef MYROOT1 */ +/* ex=(eta3x-etamin)/etastep; */ +/* ey=(eta3y-etamin)/etastep; */ + +/* if (ex<0) ex=0; */ +/* if (ex>=nbeta) ex=nbeta-1; */ +/* if (ey<0) ey=0; */ +/* if (ey>=nbeta) ey=nbeta-1; */ + +/* xpos_eta=(((double)hhx[(int)(ey*nbeta+ex)]))/((double)nSubPixels); */ +/* ypos_eta=(((double)hhy[(int)(ey*nbeta+ex)]))/((double)nSubPixels); */ +/* #endif */ + +/* int_x=((double)x) + xpos_eta; */ +/* int_y=((double)y) + ypos_eta; */ + +/* return; */ +/* }; */ + + virtual int addToFlatField(double totquad,int quad,int *cl,double &etax, double &etay) { + + calcEta3(cl, etax, etay, totquad); + return addToFlatField(etax,etay); + } + + virtual int addToFlatField(double totquad,int quad,double *cl,double &etax, double &etay) { + + + calcEta3(cl, etax, etay, totquad); + return addToFlatField(etax,etay); + } + + + + ////////////////////////////////////////////////////////////////////////////////////// + virtual int addToFlatField(double *cluster, double &etax, double &etay){ + double totquad; + calcEta3(cluster, etax, etay, totquad); + return addToFlatField(etax,etay); + + }; + + virtual int addToFlatField(int *cluster, double &etax, double &etay){ + + double totquad; + + calcEta3(cluster, etax, etay, totquad); + return addToFlatField(etax,etay); + + }; + + + virtual int addToFlatField(double etax, double etay){ +#ifdef MYROOT1 + heta->Fill(etax,etay); +#endif +#ifndef MYROOT1 + int ex,ey; + ex=(etax-etamin)/etastep; + ey=(etay-etamin)/etastep; + if (ey=0 && ey>=0) + heta[ey*nbeta+ex]++; +#endif + return 0; + }; + + +/* protected: */ + +/* #ifdef MYROOT1 */ +/* TH2D *heta; */ +/* TH2D *hhx; */ +/* TH2D *hhy; */ +/* #endif */ +/* #ifndef MYROOT1 */ +/* int *heta; */ +/* float *hhx; */ +/* float *hhy; */ +/* #endif */ +/* int nbeta; */ +/* double etamin, etamax, etastep; */ + +}; + +#endif diff --git a/slsDetectorCalibration/interpolations/etaInterpolationRandomBins.h b/slsDetectorCalibration/interpolations/etaInterpolationRandomBins.h new file mode 100644 index 000000000..e3a3591a4 --- /dev/null +++ b/slsDetectorCalibration/interpolations/etaInterpolationRandomBins.h @@ -0,0 +1,417 @@ +#ifndef ETA_INTERPOLATION_RANDOMBINS_H +#define ETA_INTERPOLATION_RANDOMBINS_H + + +#include "tiffIO.h" +//#include "etaInterpolationBase.h" +#include "etaInterpolationPosXY.h" +#include +#include +//#include +#include // std::abs + +#define PI 3.14159265 +#define TWOPI 2.*PI + +using namespace std; + +class etaInterpolationRandomBins : public etaInterpolationPosXY { + + private: + double calcDiff(double avg, float *hx, float *hy) { + double p_tot=0; + double diff=0; + double bsize=1./nSubPixels; + + for (int ipx=0; ipx=((ipx)*bsize) && hx[ibx+iby*nbeta]<((ipx+1)*bsize) && hy[ibx+iby*nbeta]>=((ipy)*bsize) && hy[ibx+iby*nbeta]<((ipy+1)*bsize)) { + p_tot+=heta[ibx+iby*nbeta]; + } + } + } + + // cout << p_tot << " \t "; + + + + diff+=(p_tot-avg)*(p_tot-avg); + + } + // cout << "\n"; + } + return diff; + } + + double iterate(float *newhhx, float *newhhy, double avg) { + + double bsize=1./nSubPixels; + + double hy[nbeta]; //profile y + double hx[nbeta]; //profile x + double hix[nbeta]; //integral of projection x + double hiy[nbeta]; //integral of projection y + + double tot_eta_x=0; + double tot_eta_y=0; + + int p0; + int vx[(nSubPixels+1)*(nSubPixels+1)], vy[(nSubPixels+1)*(nSubPixels+1)]; + + int arrx[nSubPixels+1], arry[nSubPixels+1]; + + int bad=1; + + + int isby, isbx; + int ii=0; + + + // using default comparison (operator <): + // std::sort (myvector.begin(), myvector.begin()+4); //(12 32 45 71)26 80 53 33 + + for (isby=0; isby<(nSubPixels+1)/2+1; isby++) { + + for (isbx=0; isbx<(nSubPixels+1)/2+1; isbx++) { + p0=isby*(nSubPixels+1)+isbx; + // for (int iv=0; iv<(nSubPixels+1)*(nSubPixels+1); iv++) { + if (isbx==0) { + vy[p0]=isby*nbeta/nSubPixels; + vx[p0]=0; + } else if ( isby==0 ) { + vy[p0]=0; + vx[p0]=isbx*nbeta/nSubPixels; + } + else { + vy[p0]=rand()%(nbeta/2); + vx[p0]=rand()%(nbeta/2); + if (nSubPixels%2==0 && isbx==nSubPixels/2) + vx[p0]=nbeta/2; + if (nSubPixels%2==0 && isby==nSubPixels/2 ) + vy[p0]=nbeta/2; + } + // cout << "(" << vx[p0] << " , " << vy[p0] << " ) \t" ; + // } + } + //cout << endl; + } + // cout << "rand" << endl; + + + while (bad) { + + for (isby=0; isby<(nSubPixels+1)/2+1; isby++) { + + + for (isbx=0; isbx<(nSubPixels+1)/2+1; isbx++) { + arrx[isbx]=vx[isby*(nSubPixels+1)+isbx]; + arry[isbx]=vy[isbx*(nSubPixels+1)+isby]; + //cout << isbx << " " << arrx[isbx] << " " << isby << " " << arry[isbx] << endl; + } + + sort(arrx,arrx+(nSubPixels+1)/2+1); + sort(arry,arry+(nSubPixels+1)/2+1); + + // cout << "*****"<< endl; + // cout << endl; + + for (int isbx=0; isbx<(nSubPixels+1)/2+1; isbx++) { + vx[isby*(nSubPixels+1)+isbx]=arrx[isbx]; + vy[isbx*(nSubPixels+1)+isby]=arry[isbx]; + + + vx[(nSubPixels-isby)*(nSubPixels+1)+(nSubPixels-isbx)]=nbeta-arrx[isbx]; + vy[(nSubPixels-isbx)*(nSubPixels+1)+(nSubPixels-isby)]=nbeta-arry[isbx]; + + vx[isby*(nSubPixels+1)+(nSubPixels-isbx)]=nbeta-arrx[isbx]; + vy[isbx*(nSubPixels+1)+(nSubPixels-isby)]=arry[isbx]; + + + vx[(nSubPixels-isby)*(nSubPixels+1)+(isbx)]=arrx[isbx]; + vy[(nSubPixels-isbx)*(nSubPixels+1)+(isby)]=nbeta-arry[isbx]; + + + } + + + + } + + /* for (isby=0; isbynSubPixels-1) isbx=nSubPixels-1; */ + + /* if (iby==0) */ + /* isby=0; */ + /* else */ + /* isby= (newhhx[ibx+(iby-1)*nbeta])/bsize-1; */ + + /* if (isby<0) isbx=0; */ + /* if (isby>nSubPixels-1) isby=nSubPixels-1; */ + /* // cout << isbx << " " << isby << endl; */ + + for (isby=0; isby PI) + dtheta -= TWOPI; + while (dtheta < -PI) + dtheta += TWOPI; + + angle += dtheta; + } + + if (abs((double)angle) < PI) + in_quad=0; + else + in_quad=1; + + if (in_quad) { + newhhx[ibx+iby*nbeta]=bsize*((double)isbx); + newhhy[ibx+iby*nbeta]=bsize*((double)isby); + break; + } + + + + + } + if (in_quad) break; + } + + } + } + + // cout << "hist" << endl; + return calcDiff(avg, newhhx, newhhy); + } + + + public: + etaInterpolationRandomBins(int nx=400, int ny=400, int ns=25, int nb=-1, double emin=1, double emax=0) : etaInterpolationPosXY(nx,ny,ns, nb, emin,emax){}; + + etaInterpolationRandomBins(etaInterpolationRandomBins *orig): etaInterpolationPosXY(orig){}; + + virtual etaInterpolationRandomBins* Clone() { + + return new etaInterpolationRandomBins(this); + + }; + + + + virtual void prepareInterpolation(int &ok) + { + ok=1; + cout << "Adaptive bins" << endl; + + ///*Eta Distribution Rebinning*/// + double bsize=1./nSubPixels; //precision + // cout<<"nPixelsX = "<1 || etah[ii]<0 ) cout << "***"<< ii << etah[ii] << endl; */ +/* } */ +/* sprintf(tit,"/scratch/randeta_hhx_%d.tiff",iint); */ +/* WriteToTiff(etah, tit, etabins, etabins); */ + +/* for (int ii=0; ii1 || etah[ii]<0 ) cout << "***"<< ii << etah[ii] << endl; */ +/* } */ +/* sprintf(tit,"/scratch/randeta_hhy_%d.tiff",iint); */ +/* WriteToTiff(etah, tit, etabins, etabins); */ +/* #endif */ + + if (new_diff=iy && (iy+ir)=ix && (ix+ic)set_data(val[iy+ir][ix+ic],ic,ir); } } + // cout << (clusters+nph)->iframe << " " << ix << " " << nph << " " << tot << " " << (clusters+nph)->quadTot << endl; nph++; image[iy*nx+ix]++; @@ -523,7 +532,7 @@ int *getClusters(char *data, int *ph=NULL) { eventMask[iy][ix]=PHOTON; } } else if (eventMask[iy][ix]==PEDESTAL) { - addToPedestal(data,ix,iy); + addToPedestal(data,ix,iy,cm); } diff --git a/slsDetectorCalibration/single_photon_hit_double.h b/slsDetectorCalibration/single_photon_hit_double.h new file mode 100644 index 000000000..7019b4149 --- /dev/null +++ b/slsDetectorCalibration/single_photon_hit_double.h @@ -0,0 +1,98 @@ +#ifndef SINGLE_PHOTON_HIT_H +#define SINGLE_PHOTON_HIT_H +#include +#include + +typedef double double32_t; +typedef float float32_t; +typedef int int32_t; + +#ifndef DEF_QUAD +#define DEF_QUAD + enum quadrant { + TOP_LEFT=0, + TOP_RIGHT=1, + BOTTOM_LEFT=2, + BOTTOM_RIGHT=3, + UNDEFINED_QUADRANT=-1 + }; +#endif + + +class single_photon_hit_double { + + /** @short Structure for a single photon hit */ + + public: + /** constructor, instantiates the data array -- all class elements are public! + \param nx cluster size in x direction + \param ny cluster size in y direction (defaults to 1 for 1D detectors) + */ + single_photon_hit_double(int nx=3, int ny=3): dx(nx), dy(ny) { + data=new double[dx*dy]; + }; + + ~single_photon_hit_double(){delete [] data;}; /**< destructor, deletes the data array */ + + /** binary write to file of all elements of the structure, except size of the cluster + \param myFile file descriptor + */ + size_t write(FILE *myFile) { + //fwrite((void*)this, 1, 3*sizeof(int)+4*sizeof(double)+sizeof(quad), myFile); + if (fwrite((void*)this, 1, sizeof(int)+2*sizeof(int), myFile)) + return fwrite((void*)data, 1, dx*dy*sizeof(double), myFile); + return 0; + }; + + /** + binary read from file of all elements of the structure, except size of the cluster. The structure is then filled with those args + \param myFile file descriptor + */ + size_t read(FILE *myFile) { + //fread((void*)this, 1, 3*sizeof(int)+4*sizeof(double)+sizeof(quad), myFile); + + if (fread((void*)this, 1, sizeof(int)+2*sizeof(int), myFile)) + return fread((void*)data, 1, dx*dy*sizeof(double), myFile); + return 0; + }; + + /** + assign the value to the element of the cluster matrix, with relative coordinates where the center of the cluster is (0,0) + \param v value to be set + \param ix coordinate x within the cluster (center is (0,0)) + \param iy coordinate y within the cluster (center is (0,0)) + */ + void set_data(double v, int ix, int iy=0){data[(iy+dy/2)*dx+ix+dx/2]=v;}; + + void set_cluster_size(int nx, int ny) { + + if (nx>0) dx=nx; if (ny>0) dy=ny; delete [] data; data=new double[dx*dy]; + }; + void get_cluster_size(int &nx, int &ny) {nx=dx; ny=dy;}; + void get_pixel(int &x1, int &y1) {x1=x; y1=y;}; + + /** + gets the value to the element of the cluster matrix, with relative coordinates where the center of the cluster is (0,0) + \param ix coordinate x within the cluster (center is (0,0)) + \param iy coordinate y within the cluster (center is (0,0)) + \returns value of the cluster element + */ + double get_data(int ix, int iy=0){return data[(iy+dy/2)*dx+ix+dx/2];}; + double *get_cluster() {return data;}; + + int iframe; /**< frame number */ + int x; /**< x-coordinate of the center of hit */ + int y; /**< x-coordinate of the center of hit */ + double rms; /**< noise of central pixel l -- at some point it can be removed*/ + double ped; /**< pedestal of the central pixel -- at some point it can be removed*/ + double tot; /**< sum of the 3x3 cluster */ + quadrant quad; /**< quadrant where the photon is located */ + double quadTot; /**< sum of the maximum 2x2cluster */ + int dx; /**< size of data cluster in x */ + int dy; /**< size of data cluster in y */ + double *data; /**< pointer to data */ +}; + + + +#endif diff --git a/slsDetectorCalibration/single_photon_hit_old.h b/slsDetectorCalibration/single_photon_hit_old.h new file mode 100644 index 000000000..587a09c1f --- /dev/null +++ b/slsDetectorCalibration/single_photon_hit_old.h @@ -0,0 +1,93 @@ +#ifndef SINGLE_PHOTON_HIT_H +#define SINGLE_PHOTON_HIT_H +#include +#include + +typedef double double32_t; +typedef float float32_t; +typedef int int32_t; + +#ifndef DEF_QUAD +#define DEF_QUAD + enum quadrant { + TOP_LEFT=0, + TOP_RIGHT=1, + BOTTOM_LEFT=2, + BOTTOM_RIGHT=3, + UNDEFINED_QUADRANT=-1 + }; +#endif + + +class single_photon_hit { + + /** @short Structure for a single photon hit */ + + public: + /** constructor, instantiates the data array -- all class elements are public! + \param nx cluster size in x direction + \param ny cluster size in y direction (defaults to 1 for 1D detectors) + */ + single_photon_hit(int nx=3, int ny=3): dx(nx), dy(ny) {data=new int[dx*dy];}; + + ~single_photon_hit(){delete [] data;}; /**< destructor, deletes the data array */ + + /** binary write to file of all elements of the structure, except size of the cluster + \param myFile file descriptor + */ + size_t write(FILE *myFile) { + //fwrite((void*)this, 1, 3*sizeof(int)+4*sizeof(double)+sizeof(quad), myFile); + if (fwrite((void*)this, 1, sizeof(int)+2*sizeof(int16_t), myFile)) + return fwrite((void*)data, 1, dx*dy*sizeof(int), myFile); + return 0; + }; + + /** + binary read from file of all elements of the structure, except size of the cluster. The structure is then filled with those args + \param myFile file descriptor + */ + size_t read(FILE *myFile) { + //fread((void*)this, 1, 3*sizeof(int)+4*sizeof(double)+sizeof(quad), myFile); + + if (fread((void*)this, 1, sizeof(int)+2*sizeof(int16_t), myFile)) + return fread((void*)data, 1, dx*dy*sizeof(int), myFile); + return 0; + }; + + /** + assign the value to the element of the cluster matrix, with relative coordinates where the center of the cluster is (0,0) + \param v value to be set + \param ix coordinate x within the cluster (center is (0,0)) + \param iy coordinate y within the cluster (center is (0,0)) + */ + void set_data(double v, int ix, int iy=0){data[(iy+dy/2)*dx+ix+dx/2]=v;}; + + void set_cluster_size(int nx, int ny) {if (nx>0) dx=nx; if (ny>0) dy=ny; delete [] data; data=new int[dx*dy];}; + void get_cluster_size(int &nx, int &ny) {nx=dx; ny=dy;}; + void get_pixel(int &x1, int &y1) {x1=x; y1=y;}; + + /** + gets the value to the element of the cluster matrix, with relative coordinates where the center of the cluster is (0,0) + \param ix coordinate x within the cluster (center is (0,0)) + \param iy coordinate y within the cluster (center is (0,0)) + \returns value of the cluster element + */ + double get_data(int ix, int iy=0){return data[(iy+dy/2)*dx+ix+dx/2];}; + int *get_cluster() {return data;}; + + int iframe; /**< frame number */ + int16_t x; /**< x-coordinate of the center of hit */ + int16_t y; /**< x-coordinate of the center of hit */ + double rms; /**< noise of central pixel l -- at some point it can be removed*/ + double ped; /**< pedestal of the central pixel -- at some point it can be removed*/ + double tot; /**< sum of the 3x3 cluster */ + quadrant quad; /**< quadrant where the photon is located */ + double quadTot; /**< sum of the maximum 2x2cluster */ + int dx; /**< size of data cluster in x */ + int dy; /**< size of data cluster in y */ + int *data; /**< pointer to data */ +}; + + + +#endif diff --git a/slsDetectorCalibration/slsDetectorData.h b/slsDetectorCalibration/slsDetectorData.h index 79da36b3a..16b1c9767 100644 --- a/slsDetectorCalibration/slsDetectorData.h +++ b/slsDetectorCalibration/slsDetectorData.h @@ -298,7 +298,7 @@ class slsDetectorData { */ virtual int getFrameNumber(char *buff)=0; - + /** Returns the packet number for the given dataset. purely virtual func diff --git a/slsDetectorGui/gitInfo.txt b/slsDetectorGui/gitInfo.txt index 4ded3c165..1bbd95ac6 100644 --- a/slsDetectorGui/gitInfo.txt +++ b/slsDetectorGui/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorGui URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: b58c3e8951625ed9124669404f6b68aca340a1b8 -Revision: 491 +Repsitory UUID: ab06c33107ecfeb4741d49407903ff80286cf75b +Revision: 492 Branch: developer -Last Changed Author: Dhanya_Thattil -Last Changed Rev: 3727 -Last Changed Date: 2018-03-14 15:24:03.000000002 +0100 ./src/qTabMeasurement.cpp +Last Changed Author: Anna_Bergamaschi +Last Changed Rev: 3731 +Last Changed Date: 2018-03-15 12:27:06.000000002 +0100 ./src/qTabMeasurement.cpp diff --git a/slsDetectorGui/include/gitInfoGui.h b/slsDetectorGui/include/gitInfoGui.h index 997240797..23872fbe7 100644 --- a/slsDetectorGui/include/gitInfoGui.h +++ b/slsDetectorGui/include/gitInfoGui.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "b58c3e8951625ed9124669404f6b68aca340a1b8" -#define GITAUTH "Dhanya_Thattil" -#define GITREV 0x3727 -#define GITDATE 0x20180314 +#define GITREPUUID "ab06c33107ecfeb4741d49407903ff80286cf75b" +#define GITAUTH "Anna_Bergamaschi" +#define GITREV 0x3731 +#define GITDATE 0x20180315 #define GITBRANCH "developer" diff --git a/slsDetectorSoftware/gitInfo.txt b/slsDetectorSoftware/gitInfo.txt index e94fe0436..fbb660bd3 100644 --- a/slsDetectorSoftware/gitInfo.txt +++ b/slsDetectorSoftware/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: b58c3e8951625ed9124669404f6b68aca340a1b8 -Revision: 1842 +Repsitory UUID: ab06c33107ecfeb4741d49407903ff80286cf75b +Revision: 1846 Branch: developer -Last Changed Author: Dhanya_Thattil -Last Changed Rev: 3727 -Last Changed Date: 2018-03-14 16:10:22.000000002 +0100 ./multiSlsDetector/multiSlsDetector.cpp +Last Changed Author: Anna_Bergamaschi +Last Changed Rev: 3731 +Last Changed Date: 2018-03-15 12:30:34.000000002 +0100 ./threadFiles/ThreadPool.o diff --git a/slsDetectorSoftware/slsDetector/gitInfoLib.h b/slsDetectorSoftware/slsDetector/gitInfoLib.h index 997240797..23872fbe7 100644 --- a/slsDetectorSoftware/slsDetector/gitInfoLib.h +++ b/slsDetectorSoftware/slsDetector/gitInfoLib.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "b58c3e8951625ed9124669404f6b68aca340a1b8" -#define GITAUTH "Dhanya_Thattil" -#define GITREV 0x3727 -#define GITDATE 0x20180314 +#define GITREPUUID "ab06c33107ecfeb4741d49407903ff80286cf75b" +#define GITAUTH "Anna_Bergamaschi" +#define GITREV 0x3731 +#define GITDATE 0x20180315 #define GITBRANCH "developer" diff --git a/slsReceiverSoftware/gitInfo.txt b/slsReceiverSoftware/gitInfo.txt index abab2e22b..9df6e54a1 100644 --- a/slsReceiverSoftware/gitInfo.txt +++ b/slsReceiverSoftware/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsReceiverSoftware URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: b58c3e8951625ed9124669404f6b68aca340a1b8 -Revision: 764 +Repsitory UUID: ab06c33107ecfeb4741d49407903ff80286cf75b +Revision: 765 Branch: developer -Last Changed Author: Dhanya_Thattil -Last Changed Rev: 3727 -Last Changed Date: 2018-03-13 10:29:32.000000002 +0100 ./src/slsReceiverTCPIPInterface.cpp +Last Changed Author: Anna_Bergamaschi +Last Changed Rev: 3731 +Last Changed Date: 2018-03-15 12:27:06.000000002 +0100 ./src/slsReceiverTCPIPInterface.cpp diff --git a/slsReceiverSoftware/include/gitInfoReceiver.h b/slsReceiverSoftware/include/gitInfoReceiver.h index 0d471e36c..23872fbe7 100644 --- a/slsReceiverSoftware/include/gitInfoReceiver.h +++ b/slsReceiverSoftware/include/gitInfoReceiver.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "b58c3e8951625ed9124669404f6b68aca340a1b8" -#define GITAUTH "Dhanya_Thattil" -#define GITREV 0x3727 -#define GITDATE 0x20180313 +#define GITREPUUID "ab06c33107ecfeb4741d49407903ff80286cf75b" +#define GITAUTH "Anna_Bergamaschi" +#define GITREV 0x3731 +#define GITDATE 0x20180315 #define GITBRANCH "developer" From 593f5b6c6515d690f8372e71d85ff6fcb936766a Mon Sep 17 00:00:00 2001 From: Anna Bergamaschi Date: Mon, 26 Mar 2018 10:12:04 +0200 Subject: [PATCH 3/5] Working for gotthard double modules --- .../gotthard25umOnTheFlyAnalysis.C | 215 ------------------ .../gotthard25umZmqAnalysis.C | 125 ++++++---- 2 files changed, 86 insertions(+), 254 deletions(-) delete mode 100644 slsDetectorCalibration/gotthardExecutables/gotthard25umOnTheFlyAnalysis.C diff --git a/slsDetectorCalibration/gotthardExecutables/gotthard25umOnTheFlyAnalysis.C b/slsDetectorCalibration/gotthardExecutables/gotthard25umOnTheFlyAnalysis.C deleted file mode 100644 index 30c8d1793..000000000 --- a/slsDetectorCalibration/gotthardExecutables/gotthard25umOnTheFlyAnalysis.C +++ /dev/null @@ -1,215 +0,0 @@ -#include -#include -#include -#include -#include -#include -//#include -//#include -//#include -#include -#include - -#include "gotthardModuleDataNew.h" -#include "gotthardDoubleModuleDataNew.h" - -#include "singlePhotonDetector.h" -//#include "interpolatingDetector.h" -//#include "linearInterpolation.h" -#include "multiThreadedAnalogDetector.h" - -#include - -#define NC 1280 -#define NR 1 - -#include "tiffIO.h" - - -void *gotthardProcessFrame() { - - - - - - if (argc < 3 ) { - cprintf(RED, "Help: ./trial [receive socket ip] [receive starting port number] [send_socket ip] [send starting port number]\n"); - return EXIT_FAILURE; - } - - // receive parameters - bool send = false; - char* socketip=argv[1]; - uint32_t portnum = atoi(argv[2]); - int size = 32*2*5000;//atoi(argv[3]); - - // send parameters if any - char* socketip2 = 0; - uint32_t portnum2 = 0; - if (argc > 3) { - send = true; - socketip2 = argv[3]; - portnum2 = atoi(argv[4]); - } - cout << "\nrx socket ip : " << socketip << - "\nrx port num : " << portnum ; - if (send) { - cout << "\nsd socket ip : " << socketip2 << - "\nsd port num : " << portnum2; - } - cout << endl; - - - - - - - - - - - - - - - - - - - - char fname0[10000], fname1[10000]; - char fformat[10000]; - int fifosize=1000; - strcpy(fformat,"/external_pool/gotthard_data/datadir_gotthardI/bchip074075/20170731/Xray/xray_15kV_200uA_5us_d%d_f000000000000_0.raw"); - sprintf(fname0,fformat,0,0); - sprintf(fname1,fformat,1,1); - - - int nthreads=3; - - int nph, nph1; - // single_photon_hit clusters[NR*NC]; - // cout << "hits "<< endl; - int etabins=550; - double etamin=-1, etamax=2; - int nsubpix=1; - float *etah=new float[etabins*etabins]; - // cout << "etah "<< endl; - cout << "image size "<< nsubpix*nsubpix*NC*NR << endl; - - int *heta, *himage; - - gotthardModuleDataNew *decoder=new gotthardModuleDataNew(); - gotthardDoubleModuleDataNew *det=new gotthardDoubleModuleDataNew(); - // cout << "decoder "<< endl; - // etaInterpolationPosXY *interp=new etaInterpolationPosXY(NC, NR, nsubpix, etabins, etamin, etamax); - // cout << "interp "<< endl; - // linearInterpolation *interp=new linearInterpolation(NC, NR, nsubpix); - //noInterpolation *interp=new noInterpolation(NC, NR, nsubpix); - // interp->readFlatField("/scratch/eta_100.tiff",etamin,etamax); - // interpolatingDetector *filter0=new interpolatingDetector(decoder,interp, 5, 1, 0, 1000, 10); - // interpolatingDetector *filter1=new interpolatingDetector(decoder,interp, 5, 1, 0, 1000, 10); - //filter->readPedestals("/scratch/ped_100.tiff"); - //cout << "filter "<< endl; - - singlePhotonDetector *filter=new singlePhotonDetector(det,3, 5, 1, 0, 1000, 200); - - filter->setFrameMode(eFrame); - - char *buff;//[2*(48+1280*2)]; - - - char *buff0; - char *buff1; - - - multiThreadedAnalogDetector *mt=new multiThreadedAnalogDetector(filter,nthreads,fifosize); - mt->setFrameMode(eFrame); - mt->StartThreads(); - mt->popFree(buff); - buff0=buff; - buff1=buff+48+1280*2; - - - int photons[1280*2]; - - int nf=0; - int ok=0; - ifstream filebin0,filebin1; - std::time_t end_time; - int16_t dout[1280*2]; - int iFrame=-1; - int np=-1; - - nph=0; - nph1=0; - //int np; - int iph; - int data_ready=1; - int *image; - - // filter->setROI(0,512,0,1); - - filebin0.open((const char *)(fname0), ios::in | ios::binary); - filebin1.open((const char *)(fname1), ios::in | ios::binary); - if (filebin0.is_open() && filebin1.is_open()) { - cout << "Opened file " << fname0<< endl; - cout << "Opened file " << fname1<< endl; - // mt->setFrameMode(eFrame); - // mt->prepareInterpolation(ok); - // mt->StartThreads(); - // mt->popFree(buff); - nf=0; - iFrame=-1; - while ((decoder->readNextFrame(filebin0, iFrame, np, buff0)) && (decoder->readNextFrame(filebin1, iFrame, np, buff1))) { - //filter->processData(buff, photons); - // cout << nf << " " << decoder->getFrameNumber(buff0) << " " << decoder->getFrameNumber(buff1) << " " << filter->getPhFrame() << " " << filter->getPhTot() << endl; - // for (int i=0; i<1280*2; i++) { - // filter->addToPedestal(buff,i,0); - // dout[i]=filter->subtractPedestal(buff,i,0); - // if (nf>10 && i<512) - // if (i%2) - // cout << nf << " " << i << " " << filter->getPedestal(i,0) << " " << det->getValue(buff,i,0) << " " << decoder->getValue(buff1,1280-1-i/2,0)<< " " << dout[i] << endl; - // else - // cout << nf << " " << i << " " << filter->getPedestal(i,0) << " " << det->getValue(buff,i,0) << " " << decoder->getValue(buff0,i/2,0)<< " " << dout[i] << endl; - - // } - mt->pushData(buff); - mt->nextThread(); - mt->popFree(buff); - buff0=buff; - buff1=buff+48+1280*2; - - nf++; - - // cout << id << " " << nf << endl; - if (nf%10000==0) { - while (mt->isBusy()) {;} - image=filter->getImage(); - if (image) { - cout << nf << "*****************" << endl; - for (int i=0; i<512; i++) { - cout << image[i] << "\t"; - } - cout << endl; - } - filter->clearImage(); - std::time(&end_time); - cout << std::ctime(&end_time) << " " << nf << endl; - } - iFrame=-1; - } - - filebin0.close(); - filebin1.close(); - } - else - cout << "Could not open file " << fname0<< " or " << fname1 << endl; - return NULL; -} - -int main(int argc, char *argv[]){ - - gotthardProcessFrame(); - -} diff --git a/slsDetectorCalibration/gotthardExecutables/gotthard25umZmqAnalysis.C b/slsDetectorCalibration/gotthardExecutables/gotthard25umZmqAnalysis.C index 274131edd..2ea630ed9 100644 --- a/slsDetectorCalibration/gotthardExecutables/gotthard25umZmqAnalysis.C +++ b/slsDetectorCalibration/gotthardExecutables/gotthard25umZmqAnalysis.C @@ -205,7 +205,8 @@ int main(int argc, char *argv[]){ string filename0 = ""; - + int eoa0=0; + int eoa1=0; @@ -227,6 +228,7 @@ int main(int argc, char *argv[]){ char ofname[10000]; char fn0[10000], fn1[10000]; FILE *fout=NULL; + FILE *fclust=NULL; for (int i=0; iReceiveHeader(0, acqIndex0, frameIndex0, subframeIndex0, filename0, fileindex0)) { // cout << "************************************************************************** packet0!*****************************"<< endl; - + eoa0=1; end_of_acquisition++; } if (!zmqsocket1->ReceiveHeader(0, acqIndex1, frameIndex1, subframeIndex1, filename1, fileindex1)) { //cout << "************************************************************************** packet1!*****************************"<< endl; - + eoa1=1; end_of_acquisition++; } - + + + + + // if ((!zmqsocket0->ReceiveHeader(0, acqIndex0, frameIndex0, subframeIndex0, filename0, fileindex0)) && (!zmqsocket1->ReceiveHeader(0, acqIndex1, frameIndex1, subframeIndex1, filename1, fileindex1))){ if (end_of_acquisition==0) { + if (acqIndex0!=acqIndex1) cout << "different acquisition indexes " << acqIndex0 << " and " << acqIndex1 << endl; if (frameIndex0!=frameIndex1) @@ -300,79 +310,116 @@ int main(int argc, char *argv[]){ cout << "aligning det 0 " << endl; length = zmqsocket0->ReceiveData(0, buff0, size/2); if (!zmqsocket0->ReceiveHeader(0, acqIndex0, frameIndex0, subframeIndex0, filename0, fileindex0)) { - end_of_acquisition++; + end_of_acquisition++; + eoa0=1; + break; } } while (frameIndex1ReceiveData(0, buff1, size/2); - if (!zmqsocket1->ReceiveHeader(0, acqIndex1, frameIndex1, subframeIndex1, filename1, fileindex1)) { - end_of_acquisition++; - } + length = zmqsocket1->ReceiveData(0, buff1, size/2); + if (!zmqsocket1->ReceiveHeader(0, acqIndex1, frameIndex1, subframeIndex1, filename1, fileindex1)) { + end_of_acquisition++; + eoa1=1; + break; + } } } + + + + if (eoa0!=eoa1) { + + while (eoa0<1) { + length = zmqsocket0->ReceiveData(0, buff0, size/2); + if (!zmqsocket0->ReceiveHeader(0, acqIndex0, frameIndex0, subframeIndex0, filename0, fileindex0)) { + end_of_acquisition++; + eoa0=1; + } + } + + + while (eoa1<1) { + length = zmqsocket1->ReceiveData(0, buff1, size/2); + if (!zmqsocket1->ReceiveHeader(0, acqIndex1, frameIndex1, subframeIndex1, filename1, fileindex1)) { + end_of_acquisition++; + eoa1=1; + } + } + } + + + + + if (end_of_acquisition) { - cout << "************************************************************************** END OF FRAME" << end_of_acquisition << " !*****************************"<< endl; + // cout << "************************************************************************** END OF FRAME" << end_of_acquisition << " !*****************************"<< endl; // return 0; sprintf(ofname,"%s_%d.ph",fn0,irun); while (mt->isBusy()) {;} image=filter->getImage(); if (image) { - // fout=fopen(ofname,"w"); + fout=fopen(ofname,"w"); cout << nf << "*****************" << endl; - for (int i=0; i<2560/2; i++) { - // fprintf(fout,"%d %d\n",i,image[i]); - dout[i]=image[i/2]; - dout[i+1280]=image[i/2+1]; - + for (int i=0; i<2560; i++) { + fprintf(fout,"%d %d\n",i,image[i]); + dout[i]=image[i]; if (dout[i]<0) dout[i]=0; } - // fclose(fout); + fclose(fout); } if (send) { - zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fn0, 0, 0,0,0,0,0,0,0,0,0,0,0,1); - zmqsocket3->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fn1, 0, 0,0,0,0,0,0,0,0,0,0,0,1); - - zmqsocket2->SendData((char*)dout,size/2); - zmqsocket3->SendData(((char*)dout)+size/2,size/2); - // // cprintf(GREEN, "Sent Data\n"); - - - zmqsocket2->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); - zmqsocket3->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); - } + zmqsocket2->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fn0, 0, 0,0,0,0,0,0,0,0,0,0,0,1); + zmqsocket3->SendHeaderData(0, false, SLS_DETECTOR_JSON_HEADER_VERSION,0,0,0,0,0, 0,0,fn1, 0, 0,0,0,0,0,0,0,0,0,0,0,1); + + zmqsocket2->SendData((char*)dout,size/2); + zmqsocket3->SendData(((char*)dout)+size/2,size/2); + // // cprintf(GREEN, "Sent Data\n"); + + zmqsocket2->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); + zmqsocket3->SendHeaderData(0, true, SLS_DETECTOR_JSON_HEADER_VERSION); + } - //mt->setFrameMode(eFrame); + + //mt->setFrameMode(eFrame); filter->clearImage(); // std::time(&end_time); // cout << std::ctime(&end_time) << " " << nf << endl; - - - - + fclose(fclust); + fclust=NULL; + + + continue; } + + if (fclust==NULL) { + + strcpy(fn0,filename0.c_str()); + strcpy(fn1,filename1.c_str()); + sprintf(ofname,"%s_%d.clust",fn0,irun); + fclust=fopen(ofname,"w"); + + } strcpy(fn0,filename0.c_str()); strcpy(fn1,filename1.c_str()); - + // cout << "Receive data " << nf << endl; length = zmqsocket0->ReceiveData(0, buff0, size/2); length += zmqsocket1->ReceiveData(0, buff1, size/2); - + irun=fileindex0; - - - + // // if (nf>100) // // mt->setFrameMode(eFrame); @@ -384,7 +431,7 @@ int main(int argc, char *argv[]){ mt->pushData(buff); mt->nextThread(); - cout << "==" << nf << endl; + // cout << "==" << nf << endl; // while (mt->isBusy()) {;} // image=filter->getImage(); From 807189a4923dc257d812c9974f1a4a4d143c2f70 Mon Sep 17 00:00:00 2001 From: Anna Bergamaschi Date: Mon, 26 Mar 2018 10:30:44 +0200 Subject: [PATCH 4/5] Working for gotthard double modules --- .../gotthardExecutables/gotthard25umZmqAnalysis.C | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/slsDetectorCalibration/gotthardExecutables/gotthard25umZmqAnalysis.C b/slsDetectorCalibration/gotthardExecutables/gotthard25umZmqAnalysis.C index 2ea630ed9..49987b07b 100644 --- a/slsDetectorCalibration/gotthardExecutables/gotthard25umZmqAnalysis.C +++ b/slsDetectorCalibration/gotthardExecutables/gotthard25umZmqAnalysis.C @@ -407,11 +407,12 @@ int main(int argc, char *argv[]){ strcpy(fn1,filename1.c_str()); sprintf(ofname,"%s_%d.clust",fn0,irun); fclust=fopen(ofname,"w"); - + while (mt->isBusy()) {;} + mt->setFilePointer(fclust); } - strcpy(fn0,filename0.c_str()); - strcpy(fn1,filename1.c_str()); + // strcpy(fn0,filename0.c_str()); + // strcpy(fn1,filename1.c_str()); // cout << "Receive data " << nf << endl; length = zmqsocket0->ReceiveData(0, buff0, size/2); From 516336963ea439406fd7d137beb0665957f1e5c8 Mon Sep 17 00:00:00 2001 From: Carlos Lopez Date: Fri, 27 Apr 2018 15:11:37 +0200 Subject: [PATCH 5/5] [CTB] - Modified memory map address shift for the interface between FPGA and Blackfin SOM. Shift has to be set to 1 since the basic AMC data transfers is 8-bit and not 16-bit. --- .../jctbDetectorServer/blackfin.h | 4 +- .../jctbDetectorServer/gitInfo.txt | 8 +- .../jctbDetectorServer/gitInfoMoench.h | 6 +- .../jctbDetectorServer_developer | Bin 118524 -> 118204 bytes .../jctbDetectorServer/registers_m.h | 282 +++++++++--------- .../jctbDetectorServer/server_funcs.c | 7 +- .../jctbDetectorServer/slow_adc.c | 1 + 7 files changed, 156 insertions(+), 152 deletions(-) mode change 100755 => 100644 slsDetectorSoftware/jctbDetectorServer/registers_m.h mode change 100755 => 100644 slsDetectorSoftware/jctbDetectorServer/server_funcs.c diff --git a/slsDetectorSoftware/jctbDetectorServer/blackfin.h b/slsDetectorSoftware/jctbDetectorServer/blackfin.h index 3284fe183..975244242 100644 --- a/slsDetectorSoftware/jctbDetectorServer/blackfin.h +++ b/slsDetectorSoftware/jctbDetectorServer/blackfin.h @@ -3,8 +3,10 @@ #define CSP0 0x20200000 #define MEM_SIZE 0x100000 +#define MEM_MAP_SHIFT 1 + +#include - #include int mapCSP0(void); u_int16_t bus_r16(u_int32_t offset); diff --git a/slsDetectorSoftware/jctbDetectorServer/gitInfo.txt b/slsDetectorSoftware/jctbDetectorServer/gitInfo.txt index e76daa760..20d141abf 100644 --- a/slsDetectorSoftware/jctbDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/jctbDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/jctbDetectorServer URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: 807189a4923dc257d812c9974f1a4a4d143c2f70 -Revision: 23 +Repsitory UUID: c35203ebfb35ba605eaff601ce46e4d29c1f5690 +Revision: 24 Branch: developer Last Changed Author: Anna_Bergamaschi -Last Changed Rev: 3734 -Last Changed Date: 2018-04-17 12:35:10.000000002 +0200 ./firmware_funcs.c +Last Changed Rev: 3761 +Last Changed Date: 2018-04-27 14:46:10.176661554 +0200 ./server_funcs.h diff --git a/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h b/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h index c613be18a..3ef73212c 100644 --- a/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h +++ b/slsDetectorSoftware/jctbDetectorServer/gitInfoMoench.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "807189a4923dc257d812c9974f1a4a4d143c2f70" +#define GITREPUUID "c35203ebfb35ba605eaff601ce46e4d29c1f5690" #define GITAUTH "Anna_Bergamaschi" -#define GITREV 0x3734 -#define GITDATE 0x20180417 +#define GITREV 0x3761 +#define GITDATE 0x20180427 #define GITBRANCH "developer" diff --git a/slsDetectorSoftware/jctbDetectorServer/jctbDetectorServer_developer b/slsDetectorSoftware/jctbDetectorServer/jctbDetectorServer_developer index f0c79de231d0fcf3f37108ad2e367d80d97d0a8e..57590938c5c4a924bd5e0b2f72f021328953e85b 100755 GIT binary patch delta 50934 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
_<1X29Dh(qUBhVdXxm#|2A}NqQJuGx?V$ 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 bsIiBxlE!u?k_L8HkxF(Sq08jAro{gbDnhMU diff --git a/slsDetectorSoftware/jctbDetectorServer/registers_m.h b/slsDetectorSoftware/jctbDetectorServer/registers_m.h old mode 100755 new mode 100644 index 3351f9a8a..996d50cbc --- a/slsDetectorSoftware/jctbDetectorServer/registers_m.h +++ b/slsDetectorSoftware/jctbDetectorServer/registers_m.h @@ -20,7 +20,7 @@ #define FPGA_INIT_ADDR 0xb0000000 //#ifdef JUNGFRAU_DHANYA -#define POWER_ON_REG 0x5e<<11 +#define POWER_ON_REG 0x5e << MEM_MAP_SHIFT // Pwr_I2C_SDA <= PowerReg_s(1) when PowerReg_s(3)='1' else 'Z'; // Pwr_I2C_SCL <= PowerReg_s(0) when PowerReg_s(2)='1' else 'Z'; @@ -29,71 +29,71 @@ #define PWR_I2C_SCL_EN_BIT 2 #define PWR_I2C_SDA_EN_BIT 3 -#define POWER_STATUS_REG 41<<11 +#define POWER_STATUS_REG 41 << MEM_MAP_SHIFT #define ADCREG1 0x08 #define ADCREG2 0x14//20 #define ADCREG3 0x4 #define ADCREG4 0x5 #define ADCREG_VREFS 24 -#define DBIT_PIPELINE_REG 89<<11 //0x59 same PATTERN_N_LOOP2_REG -#define MEM_MACHINE_FIFOS_REG 79<<11 //from gotthard -#define CONFGAIN_REG 93<<11 //from gotthard -#define ADC_PIPELINE_REG 66<<11 //0x42 same as ADC_OFFSET_REG +#define DBIT_PIPELINE_REG 89 << MEM_MAP_SHIFT //0x59 same PATTERN_N_LOOP2_REG +#define MEM_MACHINE_FIFOS_REG 79 << MEM_MAP_SHIFT //from gotthard +#define CONFGAIN_REG 93 << MEM_MAP_SHIFT //from gotthard +#define ADC_PIPELINE_REG 66 << MEM_MAP_SHIFT //0x42 same as ADC_OFFSET_REG //#endif -//#define ADC_OFFSET_REG 93<<11 //same as DAQ_REG -#define ADC_INVERSION_REG 67<<11 +//#define ADC_OFFSET_REG 93 << MEM_MAP_SHIFT //same as DAQ_REG +#define ADC_INVERSION_REG 67 << MEM_MAP_SHIFT -#define DAC_REG 64<<11//0x17<<11// control the dacs +#define DAC_REG 64 << MEM_MAP_SHIFT//0x17 << MEM_MAP_SHIFT// control the dacs //ADC -#define ADC_WRITE_REG 65<<11//0x18<<11 -//#define ADC_SYNC_REG 66<<11//0x19<<11 -//#define HV_REG 67<<11//0x20<<11 +#define ADC_WRITE_REG 65 << MEM_MAP_SHIFT//0x18 << MEM_MAP_SHIFT +//#define ADC_SYNC_REG 66 << MEM_MAP_SHIFT//0x19 << MEM_MAP_SHIFT +//#define HV_REG 67 << MEM_MAP_SHIFT//0x20 << MEM_MAP_SHIFT -//#define MUTIME_REG 0x1a<<11 +//#define MUTIME_REG 0x1a << MEM_MAP_SHIFT //temperature -#define TEMP_IN_REG 0x1b<<11 -#define TEMP_OUT_REG 0x1c<<11 +#define TEMP_IN_REG 0x1b << MEM_MAP_SHIFT +#define TEMP_OUT_REG 0x1c << MEM_MAP_SHIFT //configure MAC -#define TSE_CONF_REG 0x1d<<11 -#define ENET_CONF_REG 0x1e<<11 -//#define WRTSE_SHAD_REG 0x1f<<11 +#define TSE_CONF_REG 0x1d << MEM_MAP_SHIFT +#define ENET_CONF_REG 0x1e << MEM_MAP_SHIFT +//#define WRTSE_SHAD_REG 0x1f << MEM_MAP_SHIFT //HV -#define DUMMY_REG 68<<11//0x21<<11 -#define FPGA_VERSION_REG 0<<11 //0x22<<11 -#define PCB_REV_REG 0<<11 -#define FIX_PATT_REG 1<<11 //0x23<<11 -#define CONTROL_REG 79<<11//0x24<<11 -#define STATUS_REG 2<<11 //0x25<<11 -#define CONFIG_REG 77<<11//0x26<<11 -#define EXT_SIGNAL_REG 78<<11// 0x27<<11 -//#define FPGA_SVN_REG 0x29<<11 +#define DUMMY_REG 68 << MEM_MAP_SHIFT//0x21 << MEM_MAP_SHIFT +#define FPGA_VERSION_REG 0 << MEM_MAP_SHIFT //0x22 << MEM_MAP_SHIFT +#define PCB_REV_REG 0 << MEM_MAP_SHIFT +#define FIX_PATT_REG 1 << MEM_MAP_SHIFT //0x23 << MEM_MAP_SHIFT +#define CONTROL_REG 79 << MEM_MAP_SHIFT//0x24 << MEM_MAP_SHIFT +#define STATUS_REG 2 << MEM_MAP_SHIFT //0x25 << MEM_MAP_SHIFT +#define CONFIG_REG 77 << MEM_MAP_SHIFT//0x26 << MEM_MAP_SHIFT +#define EXT_SIGNAL_REG 78 << MEM_MAP_SHIFT// 0x27 << MEM_MAP_SHIFT +//#define FPGA_SVN_REG 0x29 << MEM_MAP_SHIFT -#define CHIP_OF_INTRST_REG 0x2A<<11 +#define CHIP_OF_INTRST_REG 0x2A << MEM_MAP_SHIFT //FIFO -#define LOOK_AT_ME_REG 3<<11 //0x28<<11 -#define SYSTEM_STATUS_REG 4<<11 +#define LOOK_AT_ME_REG 3 << MEM_MAP_SHIFT //0x28 << MEM_MAP_SHIFT +#define SYSTEM_STATUS_REG 4 << MEM_MAP_SHIFT -#define FIFO_DATA_REG 6<<11 -#define FIFO_STATUS_REG 7<<11 +#define FIFO_DATA_REG 6 << MEM_MAP_SHIFT +#define FIFO_STATUS_REG 7 << MEM_MAP_SHIFT // constant FifoDigitalInReg_c : integer := 60; -#define FIFO_DIGITAL_DATA_LSB_REG 60<<11 -#define FIFO_DIGITAL_DATA_MSB_REG 61<<11 +#define FIFO_DIGITAL_DATA_LSB_REG 60 << MEM_MAP_SHIFT +#define FIFO_DIGITAL_DATA_MSB_REG 61 << MEM_MAP_SHIFT -#define FIFO_DATA_REG_OFF 0x50<<11 /////// +#define FIFO_DATA_REG_OFF 0x50 << MEM_MAP_SHIFT /////// //to read back dac registers -//#define MOD_DACS1_REG 0x65<<11 -//#define MOD_DACS2_REG 0x66<<11 -//#define MOD_DACS3_REG 0x67<<11 +//#define MOD_DACS1_REG 0x65 << MEM_MAP_SHIFT +//#define MOD_DACS2_REG 0x66 << MEM_MAP_SHIFT +//#define MOD_DACS3_REG 0x67 << MEM_MAP_SHIFT //user entered @@ -102,135 +102,135 @@ -#define GET_ACTUAL_TIME_LSB_REG 16<<11 -#define GET_ACTUAL_TIME_MSB_REG 17<<11 +#define GET_ACTUAL_TIME_LSB_REG 16 << MEM_MAP_SHIFT +#define GET_ACTUAL_TIME_MSB_REG 17 << MEM_MAP_SHIFT -#define GET_MEASUREMENT_TIME_LSB_REG 38<<11 -#define GET_MEASUREMENT_TIME_MSB_REG 39<<11 +#define GET_MEASUREMENT_TIME_LSB_REG 38 << MEM_MAP_SHIFT +#define GET_MEASUREMENT_TIME_MSB_REG 39 << MEM_MAP_SHIFT -#define SET_DELAY_LSB_REG 96<<11 //0x68<<11 -#define SET_DELAY_MSB_REG 97<<11 //0x69<<11 -#define GET_DELAY_LSB_REG 18<<11//0x6a<<11 -#define GET_DELAY_MSB_REG 19<<11//0x6b<<11 +#define SET_DELAY_LSB_REG 96 << MEM_MAP_SHIFT //0x68 << MEM_MAP_SHIFT +#define SET_DELAY_MSB_REG 97 << MEM_MAP_SHIFT //0x69 << MEM_MAP_SHIFT +#define GET_DELAY_LSB_REG 18 << MEM_MAP_SHIFT//0x6a << MEM_MAP_SHIFT +#define GET_DELAY_MSB_REG 19 << MEM_MAP_SHIFT//0x6b << MEM_MAP_SHIFT -#define SET_CYCLES_LSB_REG 98<<11//0x6c<<11 -#define SET_CYCLES_MSB_REG 99<<11//0x6d<<11 -#define GET_CYCLES_LSB_REG 20<<11//0x6e<<11 -#define GET_CYCLES_MSB_REG 21<<11//0x6f<<11 +#define SET_CYCLES_LSB_REG 98 << MEM_MAP_SHIFT//0x6c << MEM_MAP_SHIFT +#define SET_CYCLES_MSB_REG 99 << MEM_MAP_SHIFT//0x6d << MEM_MAP_SHIFT +#define GET_CYCLES_LSB_REG 20 << MEM_MAP_SHIFT//0x6e << MEM_MAP_SHIFT +#define GET_CYCLES_MSB_REG 21 << MEM_MAP_SHIFT//0x6f << MEM_MAP_SHIFT -#define SET_FRAMES_LSB_REG 100<<11//0x70<<11 -#define SET_FRAMES_MSB_REG 101<<11//0x71<<11 -#define GET_FRAMES_LSB_REG 22<<11//0x72<<11 -#define GET_FRAMES_MSB_REG 23<<11//0x73<<11 +#define SET_FRAMES_LSB_REG 100 << MEM_MAP_SHIFT//0x70 << MEM_MAP_SHIFT +#define SET_FRAMES_MSB_REG 101 << MEM_MAP_SHIFT//0x71 << MEM_MAP_SHIFT +#define GET_FRAMES_LSB_REG 22 << MEM_MAP_SHIFT//0x72 << MEM_MAP_SHIFT +#define GET_FRAMES_MSB_REG 23 << MEM_MAP_SHIFT//0x73 << MEM_MAP_SHIFT -#define SET_PERIOD_LSB_REG 102<<11//0x74<<11 -#define SET_PERIOD_MSB_REG 103<<11//0x75<<11 -#define GET_PERIOD_LSB_REG 24<<11//0x76<<11 -#define GET_PERIOD_MSB_REG 25<<11//0x77<<11 +#define SET_PERIOD_LSB_REG 102 << MEM_MAP_SHIFT//0x74 << MEM_MAP_SHIFT +#define SET_PERIOD_MSB_REG 103 << MEM_MAP_SHIFT//0x75 << MEM_MAP_SHIFT +#define GET_PERIOD_LSB_REG 24 << MEM_MAP_SHIFT//0x76 << MEM_MAP_SHIFT +#define GET_PERIOD_MSB_REG 25 << MEM_MAP_SHIFT//0x77 << MEM_MAP_SHIFT -//#define PATTERN_WAIT0_TIME_REG_LSB 114<<11 -//#define PATTERN_WAIT0_TIME_REG_MSB 115<<11 -#define SET_EXPTIME_LSB_REG 114<<11//0x78<<11 -#define SET_EXPTIME_MSB_REG 115<<11//0x79<<11 -#define GET_EXPTIME_LSB_REG 26<<11//0x7a<<11 -#define GET_EXPTIME_MSB_REG 27<<11//0x7b<<11 +//#define PATTERN_WAIT0_TIME_REG_LSB 114 << MEM_MAP_SHIFT +//#define PATTERN_WAIT0_TIME_REG_MSB 115 << MEM_MAP_SHIFT +#define SET_EXPTIME_LSB_REG 114 << MEM_MAP_SHIFT//0x78 << MEM_MAP_SHIFT +#define SET_EXPTIME_MSB_REG 115 << MEM_MAP_SHIFT//0x79 << MEM_MAP_SHIFT +#define GET_EXPTIME_LSB_REG 26 << MEM_MAP_SHIFT//0x7a << MEM_MAP_SHIFT +#define GET_EXPTIME_MSB_REG 27 << MEM_MAP_SHIFT//0x7b << MEM_MAP_SHIFT -#define SET_GATES_LSB_REG 106<<11//0x7c<<11 -#define SET_GATES_MSB_REG 107<<11//0x7d<<11 -#define GET_GATES_LSB_REG 28<<11//0x7e<<11 -#define GET_GATES_MSB_REG 29<<11//0x7f<<11 +#define SET_GATES_LSB_REG 106 << MEM_MAP_SHIFT//0x7c << MEM_MAP_SHIFT +#define SET_GATES_MSB_REG 107 << MEM_MAP_SHIFT//0x7d << MEM_MAP_SHIFT +#define GET_GATES_LSB_REG 28 << MEM_MAP_SHIFT//0x7e << MEM_MAP_SHIFT +#define GET_GATES_MSB_REG 29 << MEM_MAP_SHIFT//0x7f << MEM_MAP_SHIFT -#define DATA_IN_LSB_REG 30<<11 -#define DATA_IN_MSB_REG 31<<11 +#define DATA_IN_LSB_REG 30 << MEM_MAP_SHIFT +#define DATA_IN_MSB_REG 31 << MEM_MAP_SHIFT -#define PATTERN_OUT_LSB_REG 32<<11 -#define PATTERN_OUT_MSB_REG 33<<11 +#define PATTERN_OUT_LSB_REG 32 << MEM_MAP_SHIFT +#define PATTERN_OUT_MSB_REG 33 << MEM_MAP_SHIFT -#define FRAMES_FROM_START_LSB_REG 34<<11 -#define FRAMES_FROM_START_MSB_REG 35<<11 +#define FRAMES_FROM_START_LSB_REG 34 << MEM_MAP_SHIFT +#define FRAMES_FROM_START_MSB_REG 35 << MEM_MAP_SHIFT -#define FRAMES_FROM_START_PG_LSB_REG 36<<11 -#define FRAMES_FROM_START_PG_MSB_REG 37<<11 +#define FRAMES_FROM_START_PG_LSB_REG 36 << MEM_MAP_SHIFT +#define FRAMES_FROM_START_PG_MSB_REG 37 << MEM_MAP_SHIFT -#define SLOW_ADC_REG 43<<11 +#define SLOW_ADC_REG 43 << MEM_MAP_SHIFT -#define PLL_PARAM_REG 80<<11//0x37<<11 -#define PLL_PARAM_OUT_REG 5<<11 //0x38<<11 -#define PLL_CNTRL_REG 81<<11//0x34<<11 +#define PLL_PARAM_REG 80 << MEM_MAP_SHIFT//0x37 << MEM_MAP_SHIFT +#define PLL_PARAM_OUT_REG 5 << MEM_MAP_SHIFT //0x38 << MEM_MAP_SHIFT +#define PLL_CNTRL_REG 81 << MEM_MAP_SHIFT//0x34 << MEM_MAP_SHIFT #ifdef NEW_GBE_INTERFACE -#define GBE_PARAM_OUT_REG 40<<11 -#define GBE_PARAM_REG 69<<11 -#define GBE_CNTRL_REG 70<<11 +#define GBE_PARAM_OUT_REG 40 << MEM_MAP_SHIFT +#define GBE_PARAM_REG 69 << MEM_MAP_SHIFT +#define GBE_CNTRL_REG 70 << MEM_MAP_SHIFT #else -#define RX_UDP_AREG 69<<11 //rx_udpip_AReg_c : integer:= 69; *\/ -#define UDPPORTS_AREG 70<<11// udpports_AReg_c : integer:= 70; *\/ -#define RX_UDPMACL_AREG 71<<11//rx_udpmacL_AReg_c : integer:= 71; *\/ -#define RX_UDPMACH_AREG 72<<11//rx_udpmacH_AReg_c : integer:= 72; *\/ -#define DETECTORMACL_AREG 73<<11//detectormacL_AReg_c : integer:= 73; *\/ -#define DETECTORMACH_AREG 74<<11//detectormacH_AReg_c : integer:= 74; *\/ -#define DETECTORIP_AREG 75<<11//detectorip_AReg_c : integer:= 75; *\/ -#define IPCHKSUM_AREG 76<<11//ipchksum_AReg_c : integer:= 76; *\/ */ +#define RX_UDP_AREG 69 << MEM_MAP_SHIFT //rx_udpip_AReg_c : integer:= 69; *\/ +#define UDPPORTS_AREG 70 << MEM_MAP_SHIFT// udpports_AReg_c : integer:= 70; *\/ +#define RX_UDPMACL_AREG 71 << MEM_MAP_SHIFT//rx_udpmacL_AReg_c : integer:= 71; *\/ +#define RX_UDPMACH_AREG 72 << MEM_MAP_SHIFT//rx_udpmacH_AReg_c : integer:= 72; *\/ +#define DETECTORMACL_AREG 73 << MEM_MAP_SHIFT//detectormacL_AReg_c : integer:= 73; *\/ +#define DETECTORMACH_AREG 74 << MEM_MAP_SHIFT//detectormacH_AReg_c : integer:= 74; *\/ +#define DETECTORIP_AREG 75 << MEM_MAP_SHIFT//detectorip_AReg_c : integer:= 75; *\/ +#define IPCHKSUM_AREG 76 << MEM_MAP_SHIFT//ipchksum_AReg_c : integer:= 76; *\/ */ #endif -#define PATTERN_CNTRL_REG 82<<11 -#define PATTERN_LIMITS_AREG 83<<11 +#define PATTERN_CNTRL_REG 82 << MEM_MAP_SHIFT +#define PATTERN_LIMITS_AREG 83 << MEM_MAP_SHIFT -#define PATTERN_LOOP0_AREG 84<<11 -#define PATTERN_N_LOOP0_REG 85<<11 +#define PATTERN_LOOP0_AREG 84 << MEM_MAP_SHIFT +#define PATTERN_N_LOOP0_REG 85 << MEM_MAP_SHIFT -#define PATTERN_LOOP1_AREG 86<<11 -#define PATTERN_N_LOOP1_REG 87<<11 +#define PATTERN_LOOP1_AREG 86 << MEM_MAP_SHIFT +#define PATTERN_N_LOOP1_REG 87 << MEM_MAP_SHIFT -#define PATTERN_LOOP2_AREG 88<<11 -#define PATTERN_N_LOOP2_REG 89<<11 +#define PATTERN_LOOP2_AREG 88 << MEM_MAP_SHIFT +#define PATTERN_N_LOOP2_REG 89 << MEM_MAP_SHIFT -#define PATTERN_WAIT0_AREG 90<<11 -#define PATTERN_WAIT1_AREG 91<<11 -#define PATTERN_WAIT2_AREG 92<<11 +#define PATTERN_WAIT0_AREG 90 << MEM_MAP_SHIFT +#define PATTERN_WAIT1_AREG 91 << MEM_MAP_SHIFT +#define PATTERN_WAIT2_AREG 92 << MEM_MAP_SHIFT -//#define DAQ_REG 93<<11 //unused -#define NSAMPLES_REG 93<<11 +//#define DAQ_REG 93 << MEM_MAP_SHIFT //unused +#define NSAMPLES_REG 93 << MEM_MAP_SHIFT -#define HV_REG 95<<11 +#define HV_REG 95 << MEM_MAP_SHIFT -#define PATTERN_IOCTRL_REG_LSB 108<<11 -#define PATTERN_IOCTRL_REG_MSB 109<<11 +#define PATTERN_IOCTRL_REG_LSB 108 << MEM_MAP_SHIFT +#define PATTERN_IOCTRL_REG_MSB 109 << MEM_MAP_SHIFT -#define PATTERN_IOCLKCTRL_REG_LSB 110<<11 -#define PATTERN_IOCLKCTRL_REG_MSB 111<<11 -#define PATTERN_IN_REG_LSB 112<<11 -#define PATTERN_IN_REG_MSB 113<<11 -#define PATTERN_WAIT0_TIME_REG_LSB 114<<11 -#define PATTERN_WAIT0_TIME_REG_MSB 115<<11 -#define PATTERN_WAIT1_TIME_REG_LSB 116<<11 -#define PATTERN_WAIT1_TIME_REG_MSB 117<<11 -#define PATTERN_WAIT2_TIME_REG_LSB 118<<11 -#define PATTERN_WAIT2_TIME_REG_MSB 119<<11 +#define PATTERN_IOCLKCTRL_REG_LSB 110 << MEM_MAP_SHIFT +#define PATTERN_IOCLKCTRL_REG_MSB 111 << MEM_MAP_SHIFT +#define PATTERN_IN_REG_LSB 112 << MEM_MAP_SHIFT +#define PATTERN_IN_REG_MSB 113 << MEM_MAP_SHIFT +#define PATTERN_WAIT0_TIME_REG_LSB 114 << MEM_MAP_SHIFT +#define PATTERN_WAIT0_TIME_REG_MSB 115 << MEM_MAP_SHIFT +#define PATTERN_WAIT1_TIME_REG_LSB 116 << MEM_MAP_SHIFT +#define PATTERN_WAIT1_TIME_REG_MSB 117 << MEM_MAP_SHIFT +#define PATTERN_WAIT2_TIME_REG_LSB 118 << MEM_MAP_SHIFT +#define PATTERN_WAIT2_TIME_REG_MSB 119 << MEM_MAP_SHIFT //#define DAC_REG_OFF 120 -//#define DAC_0_1_VAL_REG 120<<11 -//#define DAC_2_3_VAL_REG 121<<11 -//#define DAC_4_5_VAL_REG 122<<11 -//#define DAC_6_7_VAL_REG 123<<11 -//#define DAC_8_9_VAL_REG 124<<11 -//#define DAC_10_11_VAL_REG 125<<11 -//#define DAC_12_13_VAL_REG 126<<11 -//#define DAC_14_15_VAL_REG 127<<11 -#define DAC_VAL_REG 121<<11 -#define DAC_NUM_REG 122<<11 -#define DAC_VAL_OUT_REG 42<<11 -#define ADC_LATCH_DISABLE_REG 120<<11 +//#define DAC_0_1_VAL_REG 120 << MEM_MAP_SHIFT +//#define DAC_2_3_VAL_REG 121 << MEM_MAP_SHIFT +//#define DAC_4_5_VAL_REG 122 << MEM_MAP_SHIFT +//#define DAC_6_7_VAL_REG 123 << MEM_MAP_SHIFT +//#define DAC_8_9_VAL_REG 124 << MEM_MAP_SHIFT +//#define DAC_10_11_VAL_REG 125 << MEM_MAP_SHIFT +//#define DAC_12_13_VAL_REG 126 << MEM_MAP_SHIFT +//#define DAC_14_15_VAL_REG 127 << MEM_MAP_SHIFT +#define DAC_VAL_REG 121 << MEM_MAP_SHIFT +#define DAC_NUM_REG 122 << MEM_MAP_SHIFT +#define DAC_VAL_OUT_REG 42 << MEM_MAP_SHIFT +#define ADC_LATCH_DISABLE_REG 120 << MEM_MAP_SHIFT @@ -241,27 +241,27 @@ /* registers defined in FPGA */ #define GAIN_REG 0 -//#define FLOW_CONTROL_REG 0x11<<11 -//#define FLOW_STATUS_REG 0x12<<11 -//#define FRAME_REG 0x13<<11 +//#define FLOW_CONTROL_REG 0x11 << MEM_MAP_SHIFT +//#define FLOW_STATUS_REG 0x12 << MEM_MAP_SHIFT +//#define FRAME_REG 0x13 << MEM_MAP_SHIFT #define MULTI_PURPOSE_REG 0 -//#define TIME_FROM_START_REG 0x16<<11 +//#define TIME_FROM_START_REG 0x16 << MEM_MAP_SHIFT -#define ROI_REG 0 // 0x35<<11 -#define OVERSAMPLING_REG 0 // 0x36<<11 -#define MOENCH_CNTR_REG 0 // 0x31<<11 -#define MOENCH_CNTR_OUT_REG 0 // 0x33<<11 -#define MOENCH_CNTR_CONF_REG 0 // 0x32<<11 +#define ROI_REG 0 // 0x35 << MEM_MAP_SHIFT +#define OVERSAMPLING_REG 0 // 0x36 << MEM_MAP_SHIFT +#define MOENCH_CNTR_REG 0 // 0x31 << MEM_MAP_SHIFT +#define MOENCH_CNTR_OUT_REG 0 // 0x33 << MEM_MAP_SHIFT +#define MOENCH_CNTR_CONF_REG 0 // 0x32 << MEM_MAP_SHIFT //image -#define DARK_IMAGE_REG 0 // 0x81<<11 -#define GAIN_IMAGE_REG 0 // 0x82<<11 +#define DARK_IMAGE_REG 0 // 0x81 << MEM_MAP_SHIFT +#define GAIN_IMAGE_REG 0 // 0x82 << MEM_MAP_SHIFT //counter block memory -#define COUNTER_MEMORY_REG 0 // 0x85<<11 +#define COUNTER_MEMORY_REG 0 // 0x85 << MEM_MAP_SHIFT //not used diff --git a/slsDetectorSoftware/jctbDetectorServer/server_funcs.c b/slsDetectorSoftware/jctbDetectorServer/server_funcs.c old mode 100755 new mode 100644 index 341310dea..acf839458 --- a/slsDetectorSoftware/jctbDetectorServer/server_funcs.c +++ b/slsDetectorSoftware/jctbDetectorServer/server_funcs.c @@ -7,8 +7,9 @@ #include "slow_adc.h" #include "registers_m.h" #include "gitInfoMoench.h" +#include "blackfin.h" -#define FIFO_DATA_REG_OFF 0x50<<11 +#define FIFO_DATA_REG_OFF 0x50 << MEM_MAP_SHIFT // Global variables @@ -866,7 +867,7 @@ int write_register(int file_des) { if(ret!=FAIL){ - address=(addr<<11); + address=(addr << MEM_MAP_SHIFT); if((address==FIFO_DATA_REG_OFF)||(address==CONTROL_REG)) ret = bus_w16(address,val); else @@ -932,7 +933,7 @@ int read_register(int file_des) { //#endif if(ret!=FAIL){ - address=(addr<<11); + address=(addr << MEM_MAP_SHIFT); if((address==FIFO_DATA_REG_OFF)||(address==CONTROL_REG)) retval=bus_r16(address); else diff --git a/slsDetectorSoftware/jctbDetectorServer/slow_adc.c b/slsDetectorSoftware/jctbDetectorServer/slow_adc.c index 34138159d..6f1b764b0 100644 --- a/slsDetectorSoftware/jctbDetectorServer/slow_adc.c +++ b/slsDetectorSoftware/jctbDetectorServer/slow_adc.c @@ -1,6 +1,7 @@ #include "firmware_funcs.h" #include "registers_m.h" #include "server_defs.h" +#include "blackfin.h" int prepareSlowADCSeq() {