Merge branch 'master' of gitorious.psi.ch:sls_det_software/sls_detector_calibration

This commit is contained in:
Dhanya Maliakal 2015-06-29 16:53:37 +02:00
commit ceba5b8331
2 changed files with 307 additions and 0 deletions

View 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

View 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;
}