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){