mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-05-05 20:30:03 +02:00
Merge branch 'master' of gitorious.psi.ch:sls_det_software/sls_detector_calibration
This commit is contained in:
commit
ceba5b8331
113
slsDetectorCalibration/IntMap.h
Normal file
113
slsDetectorCalibration/IntMap.h
Normal file
@ -0,0 +1,113 @@
|
||||
#ifndef INTMAP_H
|
||||
#define INTMAP_H
|
||||
#define N 60
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
|
||||
|
||||
|
||||
class IntMap{
|
||||
|
||||
|
||||
public:
|
||||
|
||||
IntMap(){};
|
||||
|
||||
~IntMap(){};
|
||||
|
||||
void Init(){
|
||||
//lookup table of the output intensity for IR laser
|
||||
//measurements performed by Dominic april 2014
|
||||
//intensity[59]=intensity with 0 Optical Density
|
||||
//intensity[0]=intensity with 5.9 Optical Density
|
||||
intensity[0]=29;//5.9
|
||||
intensity[1]=21;//5.8
|
||||
intensity[2]=31;//5.7
|
||||
intensity[3]=43;//5.6
|
||||
intensity[4]=60;//5.5
|
||||
intensity[5]=91;//5.4
|
||||
intensity[6]=69;//5.3
|
||||
intensity[7]=102;//5.2
|
||||
intensity[8]=136;//5.1
|
||||
intensity[9]=196;//5.0
|
||||
intensity[10]=425;//4.9
|
||||
intensity[11]=311;//4.8
|
||||
intensity[12]=462;//4.7
|
||||
intensity[13]=653;//4.6
|
||||
intensity[14]=926;//4.5
|
||||
intensity[15]=1423;//4.4
|
||||
intensity[16]=1072;//4.3
|
||||
intensity[17]=1592;//4.2
|
||||
intensity[18]=2142;//4.1
|
||||
intensity[19]=3085;//4.0
|
||||
intensity[20]=729;//3.9
|
||||
intensity[21]=533;//3.8
|
||||
intensity[22]=793;//3.7
|
||||
intensity[23]=1121;//3.6
|
||||
intensity[24]=1588;//3.5
|
||||
intensity[25]=2439;//3.4
|
||||
intensity[26]=1842;//3.3
|
||||
intensity[27]=2730;//3.2
|
||||
intensity[28]=3663;//3.1
|
||||
intensity[29]=5271;//3.0
|
||||
intensity[30]=8102;//2.9
|
||||
intensity[31]=5933;//2.8
|
||||
intensity[32]=8789;//2.7
|
||||
intensity[33]=12350;//2.6
|
||||
intensity[34]=17358;//2.5
|
||||
intensity[35]=26300;//2.4
|
||||
intensity[36]=20029;//2.3
|
||||
intensity[37]=29414;//2.2
|
||||
intensity[38]=39202;//2.1
|
||||
intensity[39]=55724;//2.0
|
||||
intensity[40]=15697;//1.9
|
||||
intensity[41]=11541;//1.8
|
||||
intensity[42]=16976;//1.7
|
||||
intensity[43]=23866;//1.6
|
||||
intensity[44]=33478;//1.5
|
||||
intensity[45]=50567;//1.4
|
||||
intensity[46]=38552;//1.3
|
||||
intensity[47]=56394;//1.2
|
||||
intensity[48]=74897;//1.1
|
||||
intensity[49]=106023;//1.0
|
||||
intensity[50]=157384;//0.9
|
||||
intensity[51]=117677;//0.8
|
||||
intensity[52]=171101;//0.7
|
||||
intensity[53]=236386;//0.6
|
||||
intensity[54]=327248;//0.5
|
||||
intensity[55]=492781;//0.4
|
||||
intensity[56]=379641;//0.3
|
||||
intensity[57]=546927;//0.2
|
||||
intensity[58]=717203;//0.1
|
||||
intensity[59]=1000000;//0.
|
||||
return;
|
||||
};
|
||||
//_od is the total Optical Density
|
||||
int getIntensity(float _od){
|
||||
int _int(-1);
|
||||
|
||||
//these lines are to take into account rounding errors with floats
|
||||
float hun_od = 100.*_od;
|
||||
int Ihun_od = (int)round(hun_od);
|
||||
float R_od =(float) Ihun_od/10.;
|
||||
int I_od = (int)R_od;
|
||||
|
||||
if(I_od >-1 && I_od <60){
|
||||
int index=59-I_od;
|
||||
cerr<<index<<endl;
|
||||
_int=intensity[index];
|
||||
}else{
|
||||
cerr<<"Optical density out of range!"<<endl;
|
||||
}
|
||||
return _int;
|
||||
};
|
||||
|
||||
|
||||
private:
|
||||
|
||||
int intensity[N];
|
||||
|
||||
};
|
||||
|
||||
#endif
|
194
slsDetectorCalibration/PlotGifs.C
Normal file
194
slsDetectorCalibration/PlotGifs.C
Normal file
@ -0,0 +1,194 @@
|
||||
#include "moench03ReadData.C"
|
||||
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
TH2F *readExactImage(char *fname, int iframe=0, int frperfile,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);
|
||||
int framen(0);
|
||||
moench03CtbData *decoder=new moench03CtbData();
|
||||
char *buff=decoder->readNextFrame(filebin);
|
||||
framen=decoder->getFrameNumber(buff);
|
||||
|
||||
int counter(0);
|
||||
|
||||
while(framen<iframe && counter<frperfile){
|
||||
buff=decoder->readNextFrame(filebin);
|
||||
framen=decoder->getFrameNumber(buff);
|
||||
cerr<<"...";
|
||||
if(framen%1000==0) cerr<<framen;
|
||||
counter++;
|
||||
}
|
||||
if(counter<frperfile){
|
||||
h2->SetName(Form("frame_%d",framen));
|
||||
h2->SetTitle(Form("frame_%d",framen));
|
||||
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);
|
||||
|
||||
}else{
|
||||
cerr<<"frame number not found"<<endl;
|
||||
}
|
||||
|
||||
return h2;
|
||||
|
||||
|
||||
}
|
||||
|
||||
/************************************************************/
|
||||
//fnamein filename: ..._f0_%d.raw
|
||||
//runmin, runmax to calculate pedestals
|
||||
//framen0, framen1 first and last frame you want to add to the gif
|
||||
//frperfile number of frames per file
|
||||
void PlotRawFrameGif(char * fnamein, int runmin, int runmax, int framen0,int framen1, int frperfile){
|
||||
cerr<<"/***********************************/"<<endl;
|
||||
cerr<<"calculating pedestals"<<endl;
|
||||
|
||||
TH2F * hp = calcPedestal(fnamein,runmin,runmax);
|
||||
int filen = (int)(framen0/frperfile);
|
||||
char fname[1000];
|
||||
sprintf(fname,fnamein,filen);
|
||||
cerr<<"/***********************************/"<<endl;
|
||||
cerr<<"retrieving frame from"<<fname<<endl;
|
||||
|
||||
int fileframe0 = framen0%frperfile;
|
||||
int fileframe1 = framen1%frperfile;
|
||||
|
||||
TImage * img = NULL;
|
||||
TH2F * hf = NULL;
|
||||
TCanvas * c1 =NULL;
|
||||
for(int fileframe=fileframe0; fileframe<fileframe1; fileframe++){
|
||||
hf=readExactImage(fname, fileframe,frperfile,hp);
|
||||
delete img;
|
||||
delete c1;
|
||||
c1 = new TCanvas("c1","",800,600);
|
||||
c1->cd();
|
||||
|
||||
hf->SetTitle(Form("Frame_%d",fileframe+framen0));
|
||||
hf->SetName(Form("Frame_%d",fileframe+framen0));
|
||||
hf->GetXaxis()->SetRangeUser(0,50);
|
||||
hf->GetXaxis()->SetTitle("Column");
|
||||
hf->GetYaxis()->SetRangeUser(240,290);
|
||||
hf->GetYaxis()->SetTitle("Row");
|
||||
hf->GetZaxis()->SetRangeUser(-50.,1300.);
|
||||
hf->SetStats(kFALSE);
|
||||
// c1->SetLogz();
|
||||
hf->Draw("colz");
|
||||
c1->Print(Form("/afs/psi/project/mythen/Marco/Pics/Fe_Raw3_%d.png",fileframe));
|
||||
img = TImage::Open(Form("/afs/psi/project/mythen/Marco/Pics/Fe_Raw3_%d.png",fileframe));
|
||||
if(fileframe<fileframe1-1){
|
||||
img->WriteImage(Form("/afs/psi/project/mythen/Marco/Pics/Fe_Raw3_%d.gif+200",fileframe1-fileframe0));
|
||||
}else{
|
||||
img->WriteImage(Form("/afs/psi/project/mythen/Marco/Pics/Fe_Raw3_%d.gif++200++",fileframe1-fileframe0));
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
/*********************************************************************/
|
||||
TProfile2D * GetHitMap(TTree * treein, int framen,double zlow, double zup){
|
||||
TProfile2D* map = new TProfile2D("map","",400,-0.5,399.5,400,-0.5,399.5,zlow,zup);
|
||||
|
||||
|
||||
int x, y, iFrame;
|
||||
double data[9];
|
||||
|
||||
TBranch * b_x = (TBranch*)treein->GetBranch("x");
|
||||
TBranch * b_y = (TBranch*)treein->GetBranch("y");
|
||||
TBranch * b_data = (TBranch*)treein->GetBranch("data");
|
||||
TBranch * b_iFrame = (TBranch*)treein->GetBranch("iFrame");
|
||||
|
||||
b_x->SetAddress(&x);
|
||||
b_y->SetAddress(&y);
|
||||
b_data->SetAddress(data);
|
||||
b_iFrame->SetAddress(&iFrame);
|
||||
|
||||
Int_t nEnt=treein->GetEntries();
|
||||
|
||||
for(Int_t i=0; i<nEnt; i++){
|
||||
b_iFrame->GetEntry(i);
|
||||
if(iFrame==framen){
|
||||
b_x->GetEntry(i);
|
||||
b_y->GetEntry(i);
|
||||
b_data->GetEntry(i);
|
||||
map->SetBinEntries(map->FindFixBin(x-1,y-1),1);
|
||||
map->SetBinEntries(map->FindFixBin(x,y-1),1);
|
||||
map->SetBinEntries(map->FindFixBin(x+1,y-1),1);
|
||||
|
||||
map->SetBinEntries(map->FindFixBin(x-1,y),1);
|
||||
map->SetBinEntries(map->FindFixBin(x,y),1);
|
||||
map->SetBinEntries(map->FindFixBin(x+1,y),1);
|
||||
|
||||
map->SetBinEntries(map->FindFixBin(x-1,y+1),1);
|
||||
map->SetBinEntries(map->FindFixBin(x,y+1),1);
|
||||
map->SetBinEntries(map->FindFixBin(x+1,y+1),1);
|
||||
|
||||
|
||||
map->SetBinContent(map->FindFixBin(x-1,y-1),data[0]);
|
||||
map->SetBinContent(map->FindFixBin(x,y-1),data[1]);
|
||||
map->SetBinContent(map->FindFixBin(x+1,y-1),data[2]);
|
||||
|
||||
map->SetBinContent(map->FindFixBin(x-1,y),data[3]);
|
||||
map->SetBinContent(map->FindFixBin(x,y),data[4]);
|
||||
map->SetBinContent(map->FindFixBin(x+1,y),data[5]);
|
||||
|
||||
map->SetBinContent(map->FindFixBin(x-1,y+1),data[6]);
|
||||
map->SetBinContent(map->FindFixBin(x,y+1),data[7]);
|
||||
map->SetBinContent(map->FindFixBin(x+1,y+1),data[8]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return map;
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*********************************************************/
|
||||
/** creates an infinitely looping gif from clustered data
|
||||
**/
|
||||
void PlotClusterHitMapGif(std::string filename, std::string treename,int framen0,int framen1){
|
||||
|
||||
TFile * fin = new TFile(filename.c_str(),"read");
|
||||
TTree * treein = (TTree*)fin->Get(treename.c_str());
|
||||
|
||||
TCanvas * c1 = NULL;
|
||||
|
||||
|
||||
TProfile2D* hmap = NULL;
|
||||
TImage * img = NULL;
|
||||
for(int framen=framen0; framen<framen1; framen++){
|
||||
delete c1;
|
||||
c1 = new TCanvas("c1","",800,600);
|
||||
c1->cd();
|
||||
// c1->SetLogz();
|
||||
hmap=GetHitMap(treein,framen,-50.,1300.);
|
||||
hmap->SetName(Form("Frame_%d",framen));
|
||||
hmap->SetTitle(Form("Frame_%d",framen));
|
||||
hmap->GetXaxis()->SetRangeUser(0,50);
|
||||
hmap->GetXaxis()->SetTitle("Column");
|
||||
hmap->GetYaxis()->SetRangeUser(240,290);
|
||||
hmap->GetYaxis()->SetTitle("Row");
|
||||
hmap->GetZaxis()->SetRangeUser(-50.,1300.);
|
||||
hmap->SetStats(kFALSE);
|
||||
hmap->Draw("colz");
|
||||
c1->Print(Form("/afs/psi/project/mythen/Marco/Pics/Fe_Cluster3_%d.png",framen));
|
||||
img = TImage::Open(Form("/afs/psi/project/mythen/Marco/Pics/Fe_Cluster3_%d.png",framen));
|
||||
if(framen<framen1-1){
|
||||
img->WriteImage(Form("/afs/psi/project/mythen/Marco/Pics/Fe_Cluster3_%d.gif+200",framen1-framen0));
|
||||
}else{
|
||||
img->WriteImage(Form("/afs/psi/project/mythen/Marco/Pics/Fe_Cluster3_%d.gif++200++",framen1-framen0));
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user