From e16cda9509d9190397612766d6efe0088ed893f7 Mon Sep 17 00:00:00 2001 From: Gemma Tinti Date: Wed, 17 Jun 2015 17:30:41 +0200 Subject: [PATCH 1/4] fix a typo and makefile --- slsDetectorCalibration/energyCalibration.cpp | 2 +- slsDetectorCalibration/makefile | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 slsDetectorCalibration/makefile diff --git a/slsDetectorCalibration/energyCalibration.cpp b/slsDetectorCalibration/energyCalibration.cpp index 691122095..a4c78ffcf 100644 --- a/slsDetectorCalibration/energyCalibration.cpp +++ b/slsDetectorCalibration/energyCalibration.cpp @@ -524,4 +524,4 @@ TGraphErrors* energyCalibration::calibrate(int nscan, Double_t *en, Double_t *ee -Fit data is empty + diff --git a/slsDetectorCalibration/makefile b/slsDetectorCalibration/makefile new file mode 100644 index 000000000..daed15c56 --- /dev/null +++ b/slsDetectorCalibration/makefile @@ -0,0 +1,8 @@ +CC=gcc +CFLAGS= -g -c -W -lstdc++ + +ROOTINCLUDE=$(ROOTSYS)/include + +energyCalibration.o: energyCalibration.cpp + $(CC) $(CFLAGS) energyCalibration.cpp -I $(ROOTINCLUDE) + From 23a21b373eb912c9e09f75f06c6994ce3bcb2846 Mon Sep 17 00:00:00 2001 From: Anna Bergamaschi Date: Thu, 18 Jun 2015 14:16:43 +0200 Subject: [PATCH 2/4] modified readMoench03 by Marco --- slsDetectorCalibration/moench03ReadData.C | 918 ++++++++++++++++++++-- slsDetectorCalibration/readMoench03Data.C | 249 +++++- 2 files changed, 1068 insertions(+), 99 deletions(-) diff --git a/slsDetectorCalibration/moench03ReadData.C b/slsDetectorCalibration/moench03ReadData.C index c54a7655e..0235231c2 100644 --- a/slsDetectorCalibration/moench03ReadData.C +++ b/slsDetectorCalibration/moench03ReadData.C @@ -9,11 +9,14 @@ #include #include #include +#include #include //#include //#include //#include +#include #include +#include #include "moench03CtbData.h" #include "moench03CommonMode.h" #define MYROOT1 @@ -27,7 +30,7 @@ using namespace std; #define NR 400 -//#define MY_DEBUG 1 +#define MY_DEBUG 1 #ifdef MY_DEBUG #include @@ -47,7 +50,7 @@ TH2F *readImage(ifstream &filebin, TH2F *h2=NULL, TH2F *hped=NULL) { h2=new TH2F("h2","",400,0,400,400,0,400); h2->SetStats(kFALSE); } - // cout << "." << endl; + cout << "." << endl; for (int ix=0; ix<400; ix++) { for (int iy=0; iy<400; iy++) { // cout << decoder->getDataSize() << " " << decoder->getValue(buff,ix,iy)<< endl; @@ -77,7 +80,7 @@ TH2F *readImage(char *fname, int iframe=0, TH2F *hped=NULL) { if (hh==NULL) break; hh=readImage(filebin, h2, hped ); if (hh) - ;// cout << "="<< endl; + cout << "="<< endl; else { delete h2; return NULL; @@ -114,7 +117,7 @@ TH2F *calcPedestal(char *fformat, int runmin, int runmax){ } } delete [] buff; - //cout << "="<< endl; + cout << "="<< endl; ii++; } if (filebin.is_open()) @@ -134,7 +137,400 @@ TH2F *calcPedestal(char *fformat, int runmin, int runmax){ return h2; } +/******************************************************************************/ +TH2F * calcNoiseRMS(char *fformat, int runmin, int runmax){ + ifstream filebin; + char fname[10000]; + moench03CtbData *decoder=new moench03CtbData(); + singlePhotonDetector *filter=new singlePhotonDetector(decoder, 3, 5, 1, NULL); + char *buff; + int ix,iy; + int ii=0; + TH2F* h2=NULL; + for (int irun=runmin; irun<=runmax; irun++) { + sprintf(fname,fformat,irun); + + + filebin.open((const char *)(fname), ios::in | ios::binary); + while ((buff=decoder->readNextFrame(filebin))) { + for (ix=0; ix<400; ix++) { + for (iy=0; iy<400; iy++) { + filter->addToPedestal(decoder->getValue(buff,ix,iy), ix, iy); + } + } + delete [] buff; + cout << "="<< endl; + ii++; + } + if (filebin.is_open()) + filebin.close(); + + } + if (ii>0) { + h2=new TH2F("hped","",400,0,400,400,0,400); + + for (ix=0; ix<400; ix++) { + for (iy=0; iy<400; iy++) { + h2->SetBinContent(ix+1, iy+1,filter->getPedestalRMS(ix,iy)); + } + } + + } + return h2; + +} + +/**********************************************************************************/ +THStack * calcNoise(char *fformat,std::string flag, int runmin, int runmax, int nfiles){ + std::map pixelMap; + cerr<<"Creating pedestal map for frames: "< *filter=new singlePhotonDetector(decoder, 3, 5, 1, NULL); + char *buff; + int ix,iy; + int ii=0; + TH2F* hped=NULL; + TH2F* hnoise=NULL; + int ibin(0); + int iframe(0); + Float_t sigma(0.); + int filefound(0); + pixelMap.clear(); + for (int irun=runmin; irun<=runmax; irun++) { + sprintf(fname,fformat,irun); + if( access(fname,F_OK) != -1){ + if(filefoundreadNextFrame(filebin))) { + iframe=decoder->getFrameNumber(buff); + if(iframe%n==r){ + for (ix=0; ix<400; ix++) { + for (iy=0; iy<400; iy++) { + ibin = ix*NR+iy; + if(pixelMap.find(ibin)!=pixelMap.end()){ + pixelMap[ibin]->Fill(decoder->getValue(buff,ix,iy)); + }else{ + pixelMap[ibin] = new TH1F(Form("h_%d",ibin),Form("h_%d",ibin),8000,-0.5,15999.5); + } + } + } + } + delete [] buff; + if(ii%1000==0)cout << "="<0){ + + hped=new TH2F("hped","",400,-0.5,399.5,400,-0.5,399.5); + hnoise=new TH2F("hnoise","",400,-0.5,399.5,400,-0.5,399.5); + hs->Add(hped); + hs->Add(hnoise); + Float_t p(0.); + Float_t perr(0.); + Float_t amp(0.); + Float_t sigmaerr(0.); + for(ix=0; ix<400; ix++){ + for (iy=0; iy<400; iy++){ + sigma=0.; + sigmaerr=0.; + p=0.; + perr=0.; + ibin = ix*NR+iy; + if(ibin%1000==0)cerr<GetBinCenter(pixelMap[ibin]->GetMaximumBin()); + // cerr<<"peak: "<GetBinContent(pixelMap[ibin]->GetMaximumBin()); + sigma=pixelMap[ibin]->GetRMS(); + + TF1 * g = new TF1("g","gaus(0)",p-sigma,p+sigma); + g->SetParameters(amp,p,sigma); + g->SetParLimits(1,p-sigma,p+sigma); + g->SetParLimits(2,0.1*sigma,2.*sigma); + + pixelMap[ibin]->Fit(g,"RQN0"); + p=g->GetParameter(1); + perr=g->GetParError(1); + sigma=g->GetParameter(2); + sigmaerr=g->GetParError(2); + // cerr<<"sigma: "<SetBinContent(ix+1,iy+1,p); + hped->SetBinError(ix+1,iy+1,perr); + hnoise->SetBinContent(ix+1,iy+1,sigma); + hnoise->SetBinError(ix+1,iy+1,sigmaerr); + + } + } + + } + + return hs; + +} +/****************************************************/ +THStack * DrawFrames(char *fformat,int framemin, int framemax){ + + int nbins(400); + int xmin(0); + int xmax(400); + + THStack * hs = new THStack(); + ifstream filebin; + char fname[10000]; + moench03CtbData *decoder=new moench03CtbData(); + char *buff; + int ix,iy; + int iframe(0); + if(access(fformat,F_OK) != -1){ + filebin.open((const char *)(fformat), ios::in | ios::binary); + while ((buff=decoder->readNextFrame(filebin))) { + iframe=decoder->getFrameNumber(buff); + if(iframe>=framemin && iframeSetBinContent(ix+1,iy+1,decoder->getValue(buff,ix,iy)); + } + }//end loop on pixels + hs->Add(h); + }//end check on frames + delete [] buff; + } + }else{//check if file exists + cerr<readNextFrame(filebin))){ + iframe=decoder->getFrameNumber(buff); + if(iframe%1000==0) cerr<Fill(decoder->getValue(buff,x0,y0)); + delete [] buff; + + }//end readout of frame + }else{//end check on file + cerr< *filter=new singlePhotonDetector(decoder, 3, 5, sign, cmSub, 1000, 100); + char *buff; + char fname[10000]; + + float pix1(0.); + float pix2(0.); + ifstream filebin; + int iframe(0); + + for (int irun=runmin; irun<=runmax; irun++){//loop on files + sprintf(fname,fformat,irun); + iframe=0; + pix1=0.; + pix2=0.; + if( access(fname,F_OK) != -1){//check if file exists + filebin.open((const char *)(fname), ios::in | ios::binary); + while ((buff=decoder->readNextFrame(filebin))){//loop on frames + iframe=decoder->getFrameNumber(buff); + if(iframe%n==r){//check if frame is even or odd + for(int ix=xmin; ixgetValue(buff,ix,iy); + pix2=decoder->getValue(buff,ix+1,iy); + + hcorr->Fill(pix1,pix2); + }//end check on s_c edge + + } + }//end loop on pixels + }//edn check on frame number + delete [] buff; + + }//end loop on frames + + }else{//end check if file exists + cerr< *filter=new singlePhotonDetector(decoder, 3, 5, sign, cmSub, 1000, 100); + char *buff; + char fname[10000]; + + float pix1(0.); + float pix2(0.); + ifstream filebin; + int ii=0; + int iframe(0); + + for (int irun=runmin; irun<=runmax; irun++){//loop on files + sprintf(fname,fformat,irun); + pix1=0.; + pix2=0.; + iframe=0; + if( access(fname,F_OK) != -1){//check if file exists + + filebin.open((const char *)(fname), ios::in | ios::binary); + while ((buff=decoder->readNextFrame(filebin))){//loop on frames + iframe=decoder->getFrameNumber(buff); + if(iframe%n==r){ + + + pix1=decoder->getValue(buff,px,py); + pix2=decoder->getValue(buff,px+1,py); + + h1->Fill(pix1); + h2->Fill(pix2); + hcorr->Fill(pix1,pix2); + delete [] buff; + + } + if(ii%1000==0)cerr<<"reading frame "< *filter=new singlePhotonDetector(decoder, 3, 5, sign, cmSub, 100, 10); + singlePhotonDetector *filter=new singlePhotonDetector(decoder, 3, 5, sign, cmSub, 1000, 100); cout << "filter allocated " << endl; char *buff; @@ -197,13 +595,235 @@ THStack *moench03ReadData(char *fformat, char *tit, int runmin, int runmax, int hs->Add(h1); cout << "h1 allocated " << endl; - TH2F *h2; - TH2F *h3; + // TH2F *h2=NULL; + // TH2F *h3=NULL; + if (hitfinder) { + // h2=new TH2F("h2",tit,nbins,hmin-0.5,hmax-0.5,NC*NR,-0.5,NC*NR-0.5); + // cout << "h2 allocated " << endl; + // h3=new TH2F("h3",tit,nbins,hmin-0.5,hmax-0.5,NC*NR,-0.5,NC*NR-0.5); + // cout << "h3 allocated " << endl; + // // hetaX=new TH2F("hetaX",tit,nbins,-1,2,NC*NR,-0.5,NC*NR-0.5); + // // hetaY=new TH2F("hetaY",tit,nbins,-1,2,NC*NR,-0.5,NC*NR-0.5); + // hs->Add(h2); + // hs->Add(h3); + // hs->Add(hetaX); + // hs->Add(hetaY); + } + if (hs->GetHists()) { + for (int i=0; i<1; i++) + if (hs->GetHists()->At(i)) cout << i << " " ; + cout << " histos allocated " << endl; + } else + cout << "no hists in stack " << endl; + + + + + + int ix=20, iy=20, ir, ic; + int adc(0); + + ifstream filebin; + Int_t iFrame; + TTree *tall; + + if (hitfinder){ + tall=filter->initEventTree(tit, &iFrame); + + } + + +#ifdef MY_DEBUG + + cout << "debug mode " << endl; + + TCanvas *myC; + TH2F *he; + TCanvas *cH1; + // TCanvas *cH2; + // TCanvas *cH3; + cH1=new TCanvas("ch1"); + cH1->SetLogz(); + h1->Draw("colz"); + if (hitfinder) { + myC=new TCanvas("myc"); + he=new TH2F("he","Event Mask",xmax-xmin, xmin, xmax, ymax-ymin, ymin, ymax); + he->SetStats(kFALSE); + he->Draw("colz"); + + // cH2=new TCanvas("ch2"); + // cH2->SetLogz(); + // h2->Draw("colz"); + // cH3=new TCanvas("ch3"); + // cH3->SetLogz(); + // h3->Draw("colz"); + } +#endif + + filter->newDataSet(); + + + for (int irun=runmin; irunreadNextFrame(filebin))) {//getting frames on the buffer + + + if (hitfinder) { + filter->newFrame(); + + //calculate pedestals and common modes + if (cmsub) { + // cout << "cm" << endl; + for (ix=xmin; ixgetEventType(buff, ix, iy,0); + }//loop on pixels + }//end if cmsub + }//end if hitfinder + + // cout << "new frame " << endl; + + for (ix=xmin; ixgetEventType(buff, ix, iy, cmsub); + iFrame=decoder->getFrameNumber(buff); + +#ifdef MY_DEBUG + if (hitfinder) { + // if (iev%10==0) + he->SetBinContent(ix+1-xmin, iy+1-ymin, (int)thisEvent); + } +#endif + + // if (nf>10) { + h1->Fill(filter->getClusterTotal(1), iy+NR*ix); + if (hitfinder) { + + if (thisEvent==PHOTON_MAX ) { + nph++; + + // h2->Fill(filter->getClusterTotal(2), iy+NR*ix); + // h3->Fill(filter->getClusterTotal(3), iy+NR*ix); + + tall->Fill(); + }//end if PHOTON_MAX + }//end if hitfinder + }//end loop on pixels + ////////////////////////////////////////////////////////// + +#ifdef MY_DEBUG + // cout << iev << " " << h1->GetEntries() << " " << h2->GetEntries() << endl; + // if (iev%10==0) { + // myC->Modified(); + // myC->Update(); + // cH1->Modified(); + // cH1->Update(); + // cH2->Modified(); + // cH2->Update(); + // cH3->Modified(); + // cH3->Update(); + // } + iev++; +#endif + nf++; + + cout << "=" ; + delete [] buff; + }//end frame + cout << nph <<" Photons found"<< endl; + if (filebin.is_open()) + filebin.close(); + else + cout << "could not open file " << fname << endl; + }else{ + cerr<<"File does not exist"<Write(tall->GetName(),TObject::kOverwrite); + } + ////////////////////////////////////////////////////////// + +#ifdef MY_DEBUG + if(hitfinder){ + myC->Modified(); + myC->Update(); + } + cH1->Modified(); + cH1->Update(); + // cH2->Modified(); + // cH2->Update(); + // cH3->Modified(); + // cH3->Update(); +#endif + + delete decoder; + cout << "Read " << nf << " frames" << endl; + return hs; +} +/*********************************************************************************************/ +THStack *moench03ReadDataEvenOdd(char *fformat, char *tit, int runmin, int runmax, int nbins=1500, int hmin=-500, int hmax=1000, int xmin=1, int xmax=NC-1, int ymin=1, int ymax=NR-1, int cmsub=0, int hitfinder=1){ + + double hc(0); + int sign(1); + moench03CtbData *decoder=new moench03CtbData(); + cout << "decoder allocated " << endl; + + moench03CommonMode *cmSub=NULL; + if (cmsub) { + cmSub=new moench03CommonMode(100); + cout << "common mode allocated " << endl; + + } else { + + cout << "non allocating common mode " << endl; + } + int iev=0; + int nph=0; + + singlePhotonDetector *filterEven=new singlePhotonDetector(decoder, 3, 5, sign, cmSub, 1000, 100); + cout << "filter for even frames allocated " << endl; + singlePhotonDetector *filterOdd=new singlePhotonDetector(decoder, 3, 5, sign, cmSub, 1000, 100); + cout << "filter for odd frames allocated " << endl; + + char *buff; + char fname[10000]; + int nf=0; + + eventType thisEvent=PEDESTAL; + + // int iframe; + // double *data, ped, sigma; + + // data=decoder->getCluster(); + + + THStack *hs=new THStack("hs",fformat); + + cout << "hstack allocated " << endl; + + + TH2F *h1=new TH2F("h1",tit,nbins,hmin-0.5,hmax-0.5,NC*NR,-0.5,NC*NR-0.5); + hs->Add(h1); + cout << "h1 allocated " << endl; + + TH2F *h2=NULL; + TH2F *h3=NULL; if (hitfinder) { h2=new TH2F("h2",tit,nbins,hmin-0.5,hmax-0.5,NC*NR,-0.5,NC*NR-0.5); - cout << "h2 allocated " << endl; + cout << "h2 allocated " << endl; h3=new TH2F("h3",tit,nbins,hmin-0.5,hmax-0.5,NC*NR,-0.5,NC*NR-0.5); - cout << "h3 allocated " << endl; + cout << "h3 allocated " << endl; // hetaX=new TH2F("hetaX",tit,nbins,-1,2,NC*NR,-0.5,NC*NR-0.5); // hetaY=new TH2F("hetaY",tit,nbins,-1,2,NC*NR,-0.5,NC*NR-0.5); hs->Add(h2); @@ -211,9 +831,12 @@ THStack *moench03ReadData(char *fformat, char *tit, int runmin, int runmax, int // hs->Add(hetaX); // hs->Add(hetaY); } + + + if (hs->GetHists()) { for (int i=0; i<3; i++) - if (hs->GetHists()->At(1)) cout << i << " " ; + if (hs->GetHists()->At(i)) cout << i << " " ; cout << " histos allocated " << endl; } else cout << "no hists in stack " << endl; @@ -223,14 +846,18 @@ THStack *moench03ReadData(char *fformat, char *tit, int runmin, int runmax, int int ix=20, iy=20, ir, ic; + Int_t iFrame; - TTree *tall; - if (hitfinder) - tall=filter->initEventTree(tit, &iFrame); - - + TTree *tEven; + TTree *tOdd; + if (hitfinder){ + tEven=filterEven->initEventTree(Form("%s_Even",tit), &iFrame); + cout<< "TTree for even frames initialized"<initEventTree(Form("%s_Odd",tit), &iFrame); + cout<< "TTree for odd frames initialized"<SetLogz(); h3->Draw("colz"); + + cout<<"Canvas allocated"<newDataSet(); + filterEven->newDataSet(); + filterOdd->newDataSet(); + for (int irun=runmin; irunreadNextFrame(filebin))) { - - filter->newFrame(); + iFrame=decoder->getFrameNumber(buff); + if (hitfinder) { + if(iFrame%2==0){ + filterEven->newFrame(); + }else{ + filterOdd->newFrame(); + } + + //calculate pedestals and common modes if (cmsub) { - // cout << "cm" << endl; + // cout << "cm" << endl; for (ix=xmin-1; ixgetEventType(buff, ix, iy,0); + if(iFrame%2==0){ + thisEvent=filterEven->getEventType(buff, ix, iy,0); + }else{ + thisEvent=filterOdd->getEventType(buff, ix, iy,0); + } } + } } - // if (hitfinder) { - - // //calculate pedestals and common modes - // } // cout << "new frame " << endl; for (ix=xmin-1; ixgetEventType(buff, ix, iy, cmsub); - // if (nf>10) { - h1->Fill(filter->getClusterTotal(1), iy+NR*ix); + if(iFrame%2==0){ + thisEvent=filterEven->getEventType(buff, ix, iy, cmsub); + }else{ + thisEvent=filterOdd->getEventType(buff, ix, iy,cmsub); + } + + + #ifdef MY_DEBUG - // if (iev%10==0) + if (hitfinder) { + he->SetBinContent(ix+1-xmin, iy+1-ymin, (int)thisEvent); + } #endif + if(iFrame%2==0){ + h1->Fill(filterEven->getClusterTotal(1), iy+NR*ix); + }else{ + h1->Fill(filterOdd->getClusterTotal(1), iy+NR*ix); + } if (hitfinder) { - if (thisEvent==PHOTON_MAX ) { - nph++; - - h2->Fill(filter->getClusterTotal(2), iy+NR*ix); - h3->Fill(filter->getClusterTotal(3), iy+NR*ix); - iFrame=decoder->getFrameNumber(buff); - - tall->Fill(); - + if (thisEvent==PHOTON_MAX ) { + nph++; + if(iFrame%2==0){ + h2->Fill(filterEven->getClusterTotal(2), iy+NR*ix); + h3->Fill(filterEven->getClusterTotal(3), iy+NR*ix); + tEven->Fill(); + }else{ + h2->Fill(filterOdd->getClusterTotal(2), iy+NR*ix); + h3->Fill(filterOdd->getClusterTotal(3), iy+NR*ix); + tOdd->Fill(); + } - } - - - } // else { - // filter->addToPedestal(decoder->getValue(buff,ix,iy, cmsub)); - - // } - + } + } - // } + + // } } - ////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////// #ifdef MY_DEBUG - // cout << iev << " " << h1->GetEntries() << " " << h2->GetEntries() << endl; -// if (iev%10==0) { -// myC->Modified(); -// myC->Update(); -// cH1->Modified(); -// cH1->Update(); -// cH2->Modified(); -// cH2->Update(); -// cH3->Modified(); -// cH3->Update(); -// } + // cout << iev << " " << h1->GetEntries() << " " << h2->GetEntries() << endl; + // if (iev%10==0) { + // myC->Modified(); + // myC->Update(); + // cH1->Modified(); + // cH1->Update(); + // cH2->Modified(); + // cH2->Update(); + // cH3->Modified(); + // cH3->Update(); + // } iev++; #endif nf++; - // cout << "=" ; + cout << "=" ; delete [] buff; } - // cout << nph << endl; + cout << nph << endl; if (filebin.is_open()) - filebin.close(); + filebin.close(); else cout << "could not open file " << fname << endl; - } - if (hitfinder) - tall->Write(tall->GetName(),TObject::kOverwrite); - + } + + if (hitfinder){ + tEven->Write(tEven->GetName(),TObject::kOverwrite); + tOdd->Write(tOdd->GetName(),TObject::kOverwrite); + } ////////////////////////////////////////////////////////// #ifdef MY_DEBUG - myC->Modified(); - myC->Update(); - cH1->Modified(); - cH1->Update(); - cH2->Modified(); - cH2->Update(); - cH3->Modified(); - cH3->Update(); + myC->Modified(); + myC->Update(); + cH1->Modified(); + cH1->Update(); + cH2->Modified(); + cH2->Update(); + cH3->Modified(); + cH3->Update(); #endif delete decoder; cout << "Read " << nf << " frames" << endl; return hs; } + +/***********************************************************************************/ +Int_t moench03DrawPedestals(char *fformat, char *tit, int runmin, int runmax, int nbins=1500, int hmin=-500, int hmax=1000, int xmin=1, int xmax=NC-1, int ymin=1, int ymax=NR-1, int cmsub=0, int hitfinder=1){ + + double hc(0); + int sign(1); + moench03CtbData *decoder=new moench03CtbData(); + cout << "decoder allocated " << endl; + + moench03CommonMode *cmSub=NULL; + if (cmsub) { + cmSub=new moench03CommonMode(100); + cout << "common mode allocated " << endl; + + } else { + + cout << "non allocating common mode " << endl; + } + int iev=0; + int nph=0; + + singlePhotonDetector *filter=new singlePhotonDetector(decoder, 3, 5, sign, cmSub, 1000, 100); + cout << "filter allocated " << endl; + + char *buff; + char fname[10000]; + int nf=0; + eventType thisEvent=PEDESTAL; + int iFrame(0); + + // int iframe; + // double *data, ped, sigma; + + // data=decoder->getCluster(); + + int nChx(xmax-xmin+2); + int nChy(ymax-ymin+2); + TH1F * HistoMap_All[nChx][nChy]; + TH1F * HistoMap_Even[nChx][nChy]; + TH1F * HistoMap_Odd[nChx][nChy]; + for(Int_t ix=0; ixnewDataSet(); + float adc(0.); + ifstream filebin; + for (int irun=runmin; irunreadNextFrame(filebin))) { + iFrame=decoder->getFrameNumber(buff); + filter->newFrame(); + + for(Int_t ix=0; ixgetEventType(buff, ix+xmin, iy+ymin,cmsub); + adc=decoder->getValue(buff,ix+xmin,iy+ymin); + HistoMap_All[ix][iy]->Fill(adc); + if(iFrame%2==0){ + HistoMap_Even[ix][iy]->Fill(adc); + }else{ + HistoMap_Odd[ix][iy]->Fill(adc); + } + } + }//end loop on pixels + + } + if (filebin.is_open()) + filebin.close(); + else + cout << "could not open file " << fname << endl; + + + + }//end loop on files + + for(Int_t ix=0; ixWrite(); + HistoMap_Even[ix][iy]->Write(); + HistoMap_Odd[ix][iy]->Write(); + } + } + + delete decoder; + return 1; + +} diff --git a/slsDetectorCalibration/readMoench03Data.C b/slsDetectorCalibration/readMoench03Data.C index 8bbee83b3..591fe7437 100644 --- a/slsDetectorCalibration/readMoench03Data.C +++ b/slsDetectorCalibration/readMoench03Data.C @@ -2,48 +2,271 @@ -void readMoench03Data(char *tit, int sign=1){ - - +void readMoench03Data(std::string path,char* tit, std::string phase, std::string wtime,int sign=1,int runmin=0, int runmax=100, int sc_num=0,int hitfinder=1){ + // int runmin(150); + // int runmax(200); + int nbins(2000); + int hmin(-1000); + int hmax(3000); + int xmin(1); + int xmax(399); + int ymin(1); + int ymax(399); + int cmsub(0); + + char fname[1000]; TFile *fout; + // TFile *fouth1; THStack *hs; - - sprintf(fname,"/mnt/moenchnas/big_moench_xbox_20150223/Mo.root"); + sprintf(fname,"%s/%s_%s_%s_%d_%d_Csub%d_HF%d.root",path.c_str(),tit,phase.c_str(),wtime.c_str(),runmin,runmax-1,cmsub,hitfinder); fout=new TFile(fname,"RECREATE"); + cerr<<"creating output file:"<cd(); + hs=moench03ReadData(fname,tit,runmin,runmax,nbins,hmin,hmax,xmin,xmax,ymin,ymax, cmsub,hitfinder); - sprintf(fname,"/mnt/moenchnas/big_moench_xbox_20150223/Mo_f0_%%d.raw"); - hs=moench03ReadData(fname,"Mo",25133,25187,1500,-500,2500,1,399,1,399, 0,1); cout << "returned" << endl; hs->SetName(tit); hs->SetTitle(tit); cout << "name/title set" << endl; - + + Int_t nH=1; + + TH2F * h=NULL; + + if (hs->GetHists()) { - for (int i=0; i<3; i++) { + for (int i=0; iGetHists()->At(i)) { - cout << i << " " ; (TH2F*)(hs->GetHists()->At(i))->Write(); + // h->SetName(Form("h%d",i+1)); + // h->SetTitle(Form("h%d",i+1)); + // cerr<GetEntries()<<" entries"<cd(i+1); + // h->Draw("colz"); + // fout->cd(); + // h->Write(); + cout << i << " " ; } } + cout << " histos written " << endl; } else cout << "no hists in stack " << endl; + if(fout->IsOpen())fout->Close(); + + + return; + +} +/**********************************************************/ +void readPixelCharge(std::string path,char* tit, std::string phase, std::string wtime, float OD, int sign,int runmin, int runmax, int x0, int y0){ + char fname[1000]; + sprintf(fname,"%s/%s_%s_%2.0fumSi_%s_f0_%%d.raw",path.c_str(),tit,phase.c_str(),OD,wtime.c_str()); + char fnameout[1000]; + sprintf(fnameout,"%s/%s_%s_%2.0fumSi_%s.root",path.c_str(),tit,phase.c_str(),OD,wtime.c_str()); + // sprintf(fnameout,"%s/%s_phase%s_wtime%s_period0.2_OD%1.1f.root",path.c_str(),tit,phase.c_str(),wtime.c_str(),OD); + TFile * fout = new TFile(fnameout,"recreate"); + + for(int i=0; i<12; i++){ + TH1F * hpix = SinglePixelHisto(fname,15000,-0.5,29999.5,runmin,runmax,x0+i,y0); + hpix->SetName(Form("h_%d_%d",x0+i,y0)); + fout->cd(); + hpix->Write(); + } + + + return; +} +/*************************************************/ +void LoopOnPixelCharge(std::string path,char* tit, std::string phase, std::string wtime, int sign,int runmin, int runmax, int x0, int y0){ + float OD=700; + + for(int i=0; i<6; i++){ + readPixelCharge(path,tit,phase,wtime,OD,sign,runmin,runmax,x0,y0); + OD += 200; + } + return; +} + +/**********************************************************/ +void readPixelCorrelation(std::string path,char* tit, std::string frame, std::string phase, std::string wtime,int sign,int runmin, int runmax,int supercolumn){ + + int npx(400); + int npy(400); + + char fname[1000]; + int sc_width(25); + int sc_height(200); + int sc_number=supercolumn; + int xmin(0); + int xmax(0); + int ymin(0); + int ymax(0); + + + ADCMap * map = new ADCMap(npx,npy,sc_width,sc_height); + int ret = map->Init(); + + xmin=map->getXmin(sc_number); + xmax=map->getXmax(sc_number); + ymin=map->getYmin(sc_number); + ymax=map->getYmax(sc_number); + + cerr<<"/**********************************/"<getXmin(sc_number)<<" - "<getXmax(sc_number)<getYmin(sc_number)<<" - "<getYmax(sc_number)<GetXaxis()->SetTitle("ADC"); + // h2->GetXaxis()->SetTitle("ADC"); + + fout->cd(); + // h1->Write(); + // h2->Write(); + hcorr->Write(); + } + return; fout->Close(); - - - } +/****************************************************/ +void readNoise(std::string path, char *tit, std::string flag, std::string phase, std::string wtime,float OD,int sign,int runmin, int runmax){ + TFile * fout = new TFile(Form("%s/%s_%s_%s_noiseMap%s.root",path.c_str(),tit,phase.c_str(),wtime.c_str(),flag.c_str()),"recreate"); + char fname[1000]; + int nfiles=runmax-runmin; + // int runmin(382); + // int runmax(442); + // std::string target("Cu"); + + + // THStack * hsnoise = NULL; + TH2F * hped=NULL; + TH2F * hnoise=NULL; + // for(int i=0; i<25; i++){ + // phase.clear(); + // phase=(std::string)Form("%d",i*5); + // sprintf(fname,"%s/%s_phase%s_wtime%s_period0.2_OD%1.1f_f0_%%d.raw",path.c_str(),tit,phase.c_str(),wtime.c_str(),OD); + // sprintf(fname,"%s/%s_phase%s_wtime%s_period0.2_f0_%%d.raw",path.c_str(),tit,phase.c_str(),wtime.c_str()); + sprintf(fname,"%s/%s_%s_%s_f0_%%d.raw",path.c_str(),tit,phase.c_str(),wtime.c_str()); + THStack * hsnoise=calcNoise(fname,flag,runmin,runmax,nfiles); + hsnoise->SetName(Form("%s_noiseMap_ph%s",tit,phase.c_str())); + + fout->cd(); + + if (hsnoise->GetHists()) { + hped=(TH2F*)(hsnoise->GetHists()->At(0)); + hped->SetName(Form("hped_ph%s",phase.c_str())); + hped->Write(); + hnoise=(TH2F*)(hsnoise->GetHists()->At(1)); + hnoise->SetName(Form("hnoise_ph%s",phase.c_str())); + hnoise->Write(); + cout << " histos written for ADC Phase " << phase.c_str()<Close(); + return; + + +} +/************************************************************************/ +void readFrames(std::string path, char *tit, std::string phase, std::string wtime,int sign,int runnum, int framemin, int framemax){ + char fformat[1000]; + char fname[1000]; + sprintf(fformat,"%s/%s_phase%s_wtime%s_period0.075_f0_%d.raw",path.c_str(),tit,phase.c_str(),wtime.c_str(),runnum); + THStack * hs = DrawFrames(fformat,framemin,framemax); + int nframes=framemax-framemin; + TFile * fout = new TFile(Form("%s/Frames_phase%s_wtime%s_period0.075_f0_%d_fr%d-%d.root",path.c_str(),phase.c_str(),wtime.c_str(),runnum,framemin,framemax),"recreate"); + + TCanvas * c1= new TCanvas("c1","",800,600); + c1->Print(Form("%s/Frames_phase%s_wtime%s_period0.075_f0_%d_fr%d-%d.pdf[",path.c_str(),phase.c_str(),wtime.c_str(),runnum,framemin,framemax)); + TH2F * h=NULL; + + for(int hnum=0; hnumGetHists()->At(hnum); + h->SetName(Form("h_%d",hnum+framemin)); + h->SetTitle(Form("h_%d",hnum+framemin)); + h->GetZaxis()->SetRangeUser(5000.,10000.); + h->Draw("colz"); + + + c1->Print(Form("%s/Frames_phase%s_wtime%s_period0.075_f0_%d_fr%d-%d.pdf",path.c_str(),phase.c_str(),wtime.c_str(),runnum,framemin,framemax)); + fout->cd(); + h->Write(); + + + } + + c1->Print(Form("%s/Frames_phase%s_wtime%s_period0.075_f0_%d_fr%d-%d.pdf]",path.c_str(),phase.c_str(),wtime.c_str(),runnum,framemin,framemax)); + + fout->Close(); + + return; + +} +/************************************************************************************/ +void PlotSinglePixelHisto(std::string path, char *tit, std::string flag, std::string phase, std::string wtime,float OD,int sign,int runmin, int runmax, int x0, int y0){ + char fname[1000]; + sprintf(fname,"%s/%s_%s_%s_f0_%%d.raw",path.c_str(),tit,phase.c_str(),wtime.c_str()); + + int nbins(8000); + float xmin(-0.5); + float xmax(15999.5); + + TH1F * h1 = SinglePixelHisto(fname,nbins,xmin,xmax,runmin,runmax,x0,y0); + h1->Draw("hist"); + + + return; + +} // void raedNoiseDataN(char *tit, int sign=1){ From 1941ecb3c36442d369fc769273533cff5e3e21af Mon Sep 17 00:00:00 2001 From: Anna Bergamaschi Date: Tue, 23 Jun 2015 09:15:23 +0200 Subject: [PATCH 3/4] Adedde sturctures for moench03 10Gb data --- slsDetectorCalibration/moench03Ctb10GbData.h | 225 +++++++++ slsDetectorCalibration/moench03ReadData10Gb.C | 455 ++++++++++++++++++ slsDetectorCalibration/slsDetectorData.h | 66 +-- slsDetectorCalibration/slsReceiverData.h | 4 +- slsDetectorCalibration/viewMoenchDRXRays.C | 178 +++++++ 5 files changed, 894 insertions(+), 34 deletions(-) create mode 100644 slsDetectorCalibration/moench03Ctb10GbData.h create mode 100644 slsDetectorCalibration/moench03ReadData10Gb.C create mode 100644 slsDetectorCalibration/viewMoenchDRXRays.C diff --git a/slsDetectorCalibration/moench03Ctb10GbData.h b/slsDetectorCalibration/moench03Ctb10GbData.h new file mode 100644 index 000000000..68ab2e167 --- /dev/null +++ b/slsDetectorCalibration/moench03Ctb10GbData.h @@ -0,0 +1,225 @@ +#ifndef MOENCH03CTB10GBDATA_H +#define MOENCH03CTB10GBDATA_H +#include "slsReceiverData.h" + + + +class moench03Ctb10GbData : public slsReceiverData { + + private: + + int iframe; + int nadc; + int sc_width; + int sc_height; + public: + + + + + /** + Implements the slsReceiverData structure for the moench02 prototype read out by a module i.e. using the slsReceiver + (160x160 pixels, 40 packets 1286 large etc.) + \param c crosstalk parameter for the output buffer + + */ + + + // moench03Ctb10GbData(int ns=5000): slsDetectorData(400, 400, 8208*40, NULL, NULL) , nadc(32), sc_width(25), sc_height(200) { + moench03Ctb10GbData(int ns=5000): slsReceiverData(400, 400, 40, 8208), nadc(32), sc_width(25), sc_height(200) { + + int adc_nr[32]={200,225,250,275,300,325,350,375,\ + 0,25,50,75,100,125,150,175,\ + 175,150,125,100,75,50,25,0,\ + 375,350,325,300,275,250,225,200}; + int row, col; + + int isample; + int iadc; + int ix, iy; + + int npackets=40; + int i; + + + for (int ip=0; ip=8208*40) + cout << "Error: pointer " << dataMap[row][col] << " out of range "<< endl; + } + } + } + } + + int ipacket; + int ibyte; + int ii=0; + for (int ipacket=0; ipacket0) { */ +/* iframe++; */ +/* // cout << ib << "-" << endl; */ +/* return (char*)afifo_cont; */ +/* } else { */ +/* delete [] afifo_cont; */ +/* return NULL; */ +/* } */ +/* } */ +/* return NULL; */ +/* }; */ + + + virtual char *readNextFrame(ifstream &filebin, int& fnum) { + char *data=new char[packetSize*nPackets]; + char *retval=0; + int np=0, nd; + fnum = -1; + int pn; + char aa[8224]; + char *packet=(char *)aa; + + if (filebin.is_open()) { + + + + + while(filebin.read((char*)packet, 8208) && np=0) { + if (getFrameNumber(packet) !=fnum) { + + if (np==0){ + delete [] data; + return NULL; + } else + return data; + } + + memcpy(data+(pn-1)*packetSize, packet, packetSize); + np++; + + } + } + + } + + if (np==0){ + delete [] data; + return NULL; + } + + }; + + + virtual char *readNextFrame(ifstream &filebin) { + int fnum; + return readNextFrame(filebin, fnum); + }; + +}; + + + + +#endif diff --git a/slsDetectorCalibration/moench03ReadData10Gb.C b/slsDetectorCalibration/moench03ReadData10Gb.C new file mode 100644 index 000000000..2b67f35f9 --- /dev/null +++ b/slsDetectorCalibration/moench03ReadData10Gb.C @@ -0,0 +1,455 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +//#include +//#include +#include +#include "moench03Ctb10GbData.h" +#include "moench03CommonMode.h" +#define MYROOT1 +#include "singlePhotonDetector.h" + +//#include "MovingStat.h" + +using namespace std; + +#define NC 400 +#define NR 400 + + +//#define MY_DEBUG 1 + +#ifdef MY_DEBUG +#include +#endif + + + +TH2F *readImage(ifstream &filebin, TH2F *h2=NULL, TH2F *hped=NULL) { + moench03Ctb10GbData *decoder=new moench03Ctb10GbData(); + char *buff=decoder->readNextFrame(filebin); + + +// TH1F *h1=new TH1F("h1","",400*400,0,400*400); +// int ip=0; + if (buff) { + if (h2==NULL) { + h2=new TH2F("h2","",400,0,400,400,0,400); + h2->SetStats(kFALSE); + } + // cout << "." << endl; + for (int ix=0; ix<400; ix++) { + for (int iy=0; iy<400; iy++) { + // cout << decoder->getDataSize() << " " << decoder->getValue(buff,ix,iy)<< endl; + h2->SetBinContent(ix+1,iy+1,decoder->getValue(buff,ix,iy)); + // h1->SetBinContent(++ip,decoder->getValue(buff,ix,iy)); + } + } + if (hped) h2->Add(hped,-1); + return h2; + } + return NULL; +} + + +TH2F *readImage(char *fname, int iframe=0, TH2F *hped=NULL) { + ifstream filebin; + filebin.open((const char *)(fname), ios::in | ios::binary); + TH2F *h2=new TH2F("h2","",400,0,400,400,0,400); + TH2F *hh; + hh=readImage(filebin, h2, hped ); + if (hh==NULL) { + + delete h2; + return NULL; + } + for (int i=0; i0) { + h2=new TH2F("hped","",400,0,400,400,0,400); + + for (ix=0; ix<400; ix++) { + for (iy=0; iy<400; iy++) { + h2->SetBinContent(ix+1, iy+1,filter->getPedestal(ix,iy)); + } + } + + } + return h2; + +} + + +TH1D *calcSpectrum(char *fformat, int runmin, int runmax, TH2F *hped=NULL){ + ifstream filebin; + char fname[10000]; + moench03Ctb10GbData *decoder=new moench03Ctb10GbData(); + TH1D *hspectrum=new TH1D("hsp","hsp",2500,-500,10000); + char *buff; + int ix,iy; + int ii=0; + TH2F* h2=NULL; + int ich=0; + Double_t ped=0; + + for (int irun=runmin; irun<=runmax; irun++) { + sprintf(fname,fformat,irun); + + cout << fname << endl; + filebin.open((const char *)(fname), ios::in | ios::binary); + while ((buff=decoder->readNextFrame(filebin))) { + for (ix=0; ix<200; ix++) { + for (iy=200; iy<400; iy++) { + if (decoder->getValue(buff,ix,iy)>1000) { + if(hped) ped=hped->GetBinContent(ix+1,iy+1); + hspectrum->Fill(decoder->getValue(buff,ix,iy)-ped); + } + ich++; + } + } + delete [] buff; + //cout << "="<< endl; + ii++; + } + if (filebin.is_open()) + filebin.close(); + + } + return hspectrum; + +} +TH2F *drawImage(char *fformat, int runmin, int runmax, TH2F *hped=NULL){ + ifstream filebin; + char fname[10000]; + moench03Ctb10GbData *decoder=new moench03Ctb10GbData(); + TH2F *hspectrum=new TH2F("hsp","hsp",400,0,400,400,0,400); + char *buff; + int ix,iy; + int ii=0; + TH2F* h2=NULL; + int ich=0; + Double_t ped=0; + + for (int irun=runmin; irun<=runmax; irun++) { + sprintf(fname,fformat,irun); + + cout << fname << endl; + filebin.open((const char *)(fname), ios::in | ios::binary); + while ((buff=decoder->readNextFrame(filebin))) { + for (ix=0; ix<400; ix++) { + for (iy=0; iy<400; iy++) { + if (decoder->getValue(buff,ix,iy)>1000) { + if(hped) ped=hped->GetBinContent(ix+1,iy+1); + hspectrum->Fill(ix, iy, decoder->getValue(buff,ix,iy)-ped); + } + ich++; + } + } + delete [] buff; + //cout << "="<< endl; + ii++; + } + if (filebin.is_open()) + filebin.close(); + + } + return hspectrum; + +} + + + + + +/** + +Loops over data file to find single photons, fills the tree (and writes it to file, althoug the root file should be opened before) and creates 1x1, 2x2, 3x3 cluster histograms with ADCu on the x axis, channel number (160*x+y) on the y axis. + + \param fformat file name format + \param tit title of the tree etc. + \param runmin minimum run number + \param runmax max run number + \param nbins number of bins for spectrum hists + \param hmin histo minimum for spectrum hists + \param hmax histo maximum for spectrum hists + \param xmin minimum x coordinate + \param xmax maximum x coordinate + \param ymin minimum y coordinate + \param ymax maximum y coordinate + \param cmsub enable commonmode subtraction + \returns pointer to histo stack with cluster spectra +*/ + +THStack *moench03ReadData(char *fformat, char *tit, int runmin, int runmax, int nbins=1500, int hmin=-500, int hmax=1000, int xmin=1, int xmax=NC-1, int ymin=1, int ymax=NR-1, int cmsub=0, int hitfinder=1) { + double hc=0; + int sign=1; + + moench03Ctb10GbData *decoder=new moench03Ctb10GbData(); + cout << "decoder allocated " << endl; + + moench03CommonMode *cmSub=NULL; + if (cmsub) { + cmSub=new moench03CommonMode(100); + cout << "common mode allocated " << endl; + + } else { + + cout << "non allocating common mode " << endl; + } + int iev=0; + int nph=0; + + singlePhotonDetector *filter=new singlePhotonDetector(decoder, 3, 5, sign, cmSub, 100, 10); + cout << "filter allocated " << endl; + + char *buff; + char fname[10000]; + int nf=0; + + eventType thisEvent=PEDESTAL; + + // int iframe; + // double *data, ped, sigma; + + // data=decoder->getCluster(); + + + THStack *hs=new THStack("hs",fformat); + + cout << "hstack allocated " << endl; + + + TH2F *h1=new TH2F("h1",tit,nbins,hmin-0.5,hmax-0.5,NC*NR,-0.5,NC*NR-0.5); + hs->Add(h1); + cout << "h1 allocated " << endl; + + TH2F *h2; + TH2F *h3; + if (hitfinder) { + h2=new TH2F("h2",tit,nbins,hmin-0.5,hmax-0.5,NC*NR,-0.5,NC*NR-0.5); + cout << "h2 allocated " << endl; + h3=new TH2F("h3",tit,nbins,hmin-0.5,hmax-0.5,NC*NR,-0.5,NC*NR-0.5); + cout << "h3 allocated " << endl; + // hetaX=new TH2F("hetaX",tit,nbins,-1,2,NC*NR,-0.5,NC*NR-0.5); + // hetaY=new TH2F("hetaY",tit,nbins,-1,2,NC*NR,-0.5,NC*NR-0.5); + hs->Add(h2); + hs->Add(h3); + // hs->Add(hetaX); + // hs->Add(hetaY); + } + if (hs->GetHists()) { + for (int i=0; i<3; i++) + if (hs->GetHists()->At(1)) cout << i << " " ; + cout << " histos allocated " << endl; + } else + cout << "no hists in stack " << endl; + + + ifstream filebin; + + + int ix=20, iy=20, ir, ic; + + + Int_t iFrame; + TTree *tall; + if (hitfinder) + tall=filter->initEventTree(tit, &iFrame); + + + + +#ifdef MY_DEBUG + + cout << "debug mode " << endl; + + TCanvas *myC; + TH2F *he; + TCanvas *cH1; + TCanvas *cH2; + TCanvas *cH3; + + if (hitfinder) { + myC=new TCanvas("myc"); + he=new TH2F("he","Event Mask",xmax-xmin, xmin, xmax, ymax-ymin, ymin, ymax); + he->SetStats(kFALSE); + he->Draw("colz"); + cH1=new TCanvas("ch1"); + cH1->SetLogz(); + h1->Draw("colz"); + cH2=new TCanvas("ch2"); + cH2->SetLogz(); + h2->Draw("colz"); + cH3=new TCanvas("ch3"); + cH3->SetLogz(); + h3->Draw("colz"); + } +#endif + + filter->newDataSet(); + + + for (int irun=runmin; irunreadNextFrame(filebin))) { + + filter->newFrame(); + + if (cmsub) { + // cout << "cm" << endl; + for (ix=xmin-1; ixgetEventType(buff, ix, iy,0); + } + } + // if (hitfinder) { + + // //calculate pedestals and common modes + // } + + // cout << "new frame " << endl; + + for (ix=xmin-1; ixgetEventType(buff, ix, iy, cmsub); + // if (nf>10) { + h1->Fill(filter->getClusterTotal(1), iy+NR*ix); + +#ifdef MY_DEBUG + // if (iev%10==0) + he->SetBinContent(ix+1-xmin, iy+1-ymin, (int)thisEvent); +#endif + + if (hitfinder) { + + if (thisEvent==PHOTON_MAX ) { + nph++; + + h2->Fill(filter->getClusterTotal(2), iy+NR*ix); + h3->Fill(filter->getClusterTotal(3), iy+NR*ix); + iFrame=decoder->getFrameNumber(buff); + + tall->Fill(); + + + } + + + } // else { + // filter->addToPedestal(decoder->getValue(buff,ix,iy, cmsub)); + + // } + + + // } + } + ////////////////////////////////////////////////////////// + +#ifdef MY_DEBUG + // cout << iev << " " << h1->GetEntries() << " " << h2->GetEntries() << endl; +// if (iev%10==0) { +// myC->Modified(); +// myC->Update(); +// cH1->Modified(); +// cH1->Update(); +// cH2->Modified(); +// cH2->Update(); +// cH3->Modified(); +// cH3->Update(); +// } + iev++; +#endif + nf++; + + // cout << "=" ; + delete [] buff; + } + // cout << nph << endl; + if (filebin.is_open()) + filebin.close(); + else + cout << "could not open file " << fname << endl; + } + if (hitfinder) + tall->Write(tall->GetName(),TObject::kOverwrite); + + ////////////////////////////////////////////////////////// + +#ifdef MY_DEBUG + myC->Modified(); + myC->Update(); + cH1->Modified(); + cH1->Update(); + cH2->Modified(); + cH2->Update(); + cH3->Modified(); + cH3->Update(); +#endif + + delete decoder; + cout << "Read " << nf << " frames" << endl; + return hs; +} + diff --git a/slsDetectorCalibration/slsDetectorData.h b/slsDetectorCalibration/slsDetectorData.h index 3da6a0407..b46f59f38 100644 --- a/slsDetectorCalibration/slsDetectorData.h +++ b/slsDetectorCalibration/slsDetectorData.h @@ -40,8 +40,8 @@ class slsDetectorData { slsDetectorData(int npx, int npy, int dsize, int **dMap=NULL, dataType **dMask=NULL, int **dROI=NULL): nx(npx), ny(npy), dataSize(dsize) { - xmap=new int[nx*ny]; - ymap=new int[nx*ny]; + xmap=new int[dsize/sizeof(dataType)]; + ymap=new int[dsize/sizeof(dataType)]; dataMask=new dataType*[ny]; for(int i = 0; i < ny; i++) { @@ -228,42 +228,44 @@ class slsDetectorData { virtual dataType getChannel(char *data, int ix, int iy, int dr) { dataType m=0; uint64_t t; - int numBytes,divFactor,newix,pixelval; -//cout <<"ix:"<=0 && ix=0 && iy=0 && dataMap[iy][ix]=0 && ix=0 && iy=0 && dataMap[iy][ix]> (pixelval*4); cout <<"value:"<< value << endl; - return ((t >> (pixelval*4)) & 0xf)^m; - else if(dr == 8) - //uint8_t value = t >> (pixelval*8); cout <<"value:"<< value << endl; - return ((t >> (pixelval*8)) & 0xff)^m; - else if(dr == 16){ - //uint16_t value = t >> (pixelval*16); cout <<"value:"<< value << endl; - return ((t >> (pixelval*16)) & 0xffff)^m; - }else{ - //uint32_t value = t >> (pixelval*32); cout <<"value:"<< value << endl; - return ((t >> (pixelval*32)) & 0xffffffff)^m; - } +/* }/\* else *\/ */ +/* /\* cprintf(RED,"outside limits\n"); *\/ */ + +/* if(dr == 4) */ +/* //uint8_t value = t >> (pixelval*4); cout <<"value:"<< value << endl; */ +/* return ((t >> (pixelval*4)) & 0xf)^m; */ +/* else if(dr == 8) */ +/* //uint8_t value = t >> (pixelval*8); cout <<"value:"<< value << endl; */ +/* return ((t >> (pixelval*8)) & 0xff)^m; */ +/* else if(dr == 16){ */ +/* //uint16_t value = t >> (pixelval*16); cout <<"value:"<< value << endl; */ +/* return ((t >> (pixelval*16)) & 0xffff)^m; */ +/* }else{ */ +/* //uint32_t value = t >> (pixelval*32); cout <<"value:"<< value << endl; */ +/* return ((t >> (pixelval*32)) & 0xffffffff)^m; */ +/* } */ }; /** diff --git a/slsDetectorCalibration/slsReceiverData.h b/slsDetectorCalibration/slsReceiverData.h index bfe7a88c5..c62e79ec7 100644 --- a/slsDetectorCalibration/slsReceiverData.h +++ b/slsDetectorCalibration/slsReceiverData.h @@ -67,10 +67,10 @@ public: while (dd<=(dsize-packetSize)) { pnum=getPacketNumber(p); fn=getFrameNumber(p); - //cout <<"pnum:"<nPackets) { - cout << "Bad packet number " << pnum << " frame "<< fn << endl; + cout << "Bad packet number " << pnum << " frame "<< fn << endl; retval=NULL; np=0; } else if (pnum==1) { diff --git a/slsDetectorCalibration/viewMoenchDRXRays.C b/slsDetectorCalibration/viewMoenchDRXRays.C new file mode 100644 index 000000000..7df5b926e --- /dev/null +++ b/slsDetectorCalibration/viewMoenchDRXRays.C @@ -0,0 +1,178 @@ + +#define MYROOT1 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "moench03CtbData.h" +//#include "moench03CommonMode.h" +//#include "singlePhotonDetector.h" + + +using namespace std; + + +THStack *viewMoenchDRXRays(int ix=70, int iy=88){ + + TF1 *poiss = new TF1("poiss", "[0]*TMath::Power(([1]/[2]),(x/[2]))*(TMath::Exp( ([1]/[2])))/TMath::Gamma((x/[2])+1)", 0, 5); + + + int thick[]={1700,1500,1300,1100,900,700}; + int nt=6; + int nf=5; + char fname[1000]; + char *data; + char tit[100]; + TH1F *hh[nt], *hh3[nt], *hh5[nt]; + TH2F *h2[nt], *hpix[nt]; + Double_t val, val3, val5, val1; + int it=0; + Double_t ped[25]; + TH1D *p; + + THStack *hs=new THStack(); + cout << nt << endl; + ifstream filebin; + moench03CtbData *decoder=new moench03CtbData(); + + sprintf(tit,"hpix_%dumSi_g1",thick[it]); + cout << tit << endl; + + + hpix[it]=new TH2F(tit,tit,2500,6000,16000,25,0,25); + hs->Add(hpix[it]); + + sprintf(tit,"%dumSi_g1",thick[it]); + cout << tit << endl; + + for (int iff=0; iffreadNextFrame(filebin))) { + + for (int iiy=-2; iiy<3; iiy++) + for (int iix=-2; iix<3; iix++) + hpix[it]->Fill(decoder->getChannel(data,ix+iix,iy+iiy), (iiy+2)*5+iix+2); + + delete [] data; + } + filebin.close(); + cout << endl; + + + + } + + + for (int iix=-2; iix<3; iix++) { + for (int iiy=-2; iiy<3; iiy++) { + cout << iix << " " << iiy << " " ;// <ProjectionX("p",(iiy+2)*5+iix+2+1,(2+iiy)*5+iix+2+1); + + ped[(iiy+2)*5+iix+2]=p->GetBinCenter(p->GetMaximumBin()); + + cout << ped[(iiy+2)*5+iix+2] <Add(hh[it]); + sprintf(tit,"hh3_%dumSi_g1",thick[it]); + hh3[it]=new TH1F(tit,tit,5000,0,30000); + hs->Add(hh3[it]); + + sprintf(tit,"hh5_%dumSi_g1",thick[it]); + hh5[it]=new TH1F(tit,tit,5000,0,50000); + hs->Add(hh5[it]); + + sprintf(tit,"%dumSi_g1",thick[it]); + cout << tit << endl; + hs->Add(hh[it]); + for (int iff=0; iffreadNextFrame(filebin))) { + cout << "-" ; + // for (int iy=0; iy<40; iy++) + // for (int ix=0; ix<350; ix++){ + + + + + val1=0; + val3=0; + val5=0; + + + for (int iix=-2; iix<3; iix++) { + for (int iiy=-2; iiy<3; iiy++) { + // cout << iix << " " << iiy << " " ;// <ProjectionX("p",(iiy+2)*5+iix+2+1,(2+iiy)*5+iix+2+1); + + // ped[it]=p->GetBinCenter(p->GetMaximumBin()); + + // cout << ped[it] <getChannel(data,ix+iix,iy+iiy)-ped[(iiy+2)*5+iix+2]; + if ((iix<-1 || iix>1) || (iiy<-1 || iiy>1)) + val5+=val; + else if (iix!=0 || iiy!=0) { + val5+=val; + val3+=val; + } else { + val5+=val; + val3+=val; + val1+=val; + } + // if (iiy==1 && iix==0) + // h2[it]->Fill(val1,val); + + } + } + hh5[it]->Fill(val5); + hh3[it]->Fill(val3); + hh[it]->Fill(val1); + + + + delete [] data; + } + filebin.close(); + cout << endl; + + } + + + } + + + + return hs; + +} From b820ae0cad9e5cb301543fd51bf44c86e82c4071 Mon Sep 17 00:00:00 2001 From: Anna Bergamaschi Date: Tue, 23 Jun 2015 11:03:49 +0200 Subject: [PATCH 4/4] checkFrameNumber added to moench03 read data --- slsDetectorCalibration/moench03ReadData10Gb.C | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/slsDetectorCalibration/moench03ReadData10Gb.C b/slsDetectorCalibration/moench03ReadData10Gb.C index 2b67f35f9..44af13623 100644 --- a/slsDetectorCalibration/moench03ReadData10Gb.C +++ b/slsDetectorCalibration/moench03ReadData10Gb.C @@ -9,6 +9,7 @@ #include #include #include +#include #include //#include //#include @@ -453,3 +454,37 @@ THStack *moench03ReadData(char *fformat, char *tit, int runmin, int runmax, int return hs; } +TGraph* checkFrameNumber(char *fformat, int runmin, int runmax, int ix, int iy){ + ifstream filebin; + char fname[10000]; + moench03Ctb10GbData *decoder=new moench03Ctb10GbData(); + char *buff; + int ii=0; + + TGraph *g=new TGraph(); + + + + for (int irun=runmin; irun<=runmax; irun++) { + sprintf(fname,fformat,irun); + + cout << fname << endl; + + filebin.open((const char *)(fname), ios::in | ios::binary); + + if (filebin.is_open()) { + while ((buff=decoder->readNextFrame(filebin))) { + g->SetPoint(ii,decoder->getFrameNumber(buff),decoder->getValue(buff,ix,iy)); + ii++; + delete [] buff; + } + //cout << "="<< endl; + filebin.close(); + } else + cout << "Could not open file " << fname << endl; + + } + + return g; + +}