Subversion Repositories f9daq

Compare Revisions

Ignore whitespace Rev 298 → Rev 299

/cvi/apps/l2d2_easyroc/d2r.cpp
146,27 → 146,15
//histograms
char hname[256], htitle[256];
double adc,tdc;
TH1F *hadc[NCH], *hadc_cut[NCH], *hadc_cut_2[NCH];
TH1F *htdc[NCH], *htdc_cut[NCH], *htdc_cut_2[NCH], *hctdc[NCH];
TH2F *h2d[NCH], *hcor[NCH];
TH2F *hdiffcor[NCH][NCH];
TH2F *hdiffcor_low[NCH][NCH];
TH2F *hdiffcor_hi[NCH][NCH];
TH2F *hadccor;
TH2F *htdccor;
TH2F *hcoradctdc0, *hcoradctdc1, hcoradctdc01, hcoradctdc11;
TH1F *htesttdc1, *htesttdc2;
TTree *ftt;
TH1F *htdcdiff, *htdcdiff_cut, *htdcdiff_cut_2;
TH1F *hadc[NCH], *hadc_cut[NCH];
TH1F *htdc[NCH], *htdc_cut[NCH], *hctdc[NCH];
TH2F *hcor[NCH];
TH1F *htdcdiff, *htdcdiff_cut;
double ref_cut_1_lo = qdcmi;
double ref_cut_1_hi = qdcma;
double ref_cut_2_lo = tdcmi;
double ref_cut_2_hi = tdcma;
//kobayashi
double t_adc0, t_tdc0, t_adc1, t_tdc1, t_ctdc;
//data buffer
char readbuf[READBUFFERLENGTH];
267,69 → 255,7
}
//create histograms
sprintf(hname, "htdcdiff");
htdcdiff = (TH1F*)gROOT->FindObject(hname);
if(htdcdiff) delete htdcdiff;
htdcdiff = new TH1F(hname, hname, 4096, -2048.5*TDC_BIN, 2047.5*TDC_BIN);
//~ htdcdiff = new TH1F(hname, hname, 4096, -0.5*TDC_BIN, 4095.5*TDC_BIN);
sprintf(hname, "htdcdiff_cut");
htdcdiff_cut = (TH1F*)gROOT->FindObject(hname);
if(htdcdiff_cut) delete htdcdiff_cut;
//~ htdcdiff_cut = new TH1F(hname, hname, 4096, -2048.5*TDC_BIN, 2047.5*TDC_BIN);
htdcdiff_cut = new TH1F(hname, hname, 4096, -2048.5*TDC_BIN, 2047.5*TDC_BIN);
//kobayashi
//~ htdcdiff_cut = new TH1F(hname, hname, 4096, -0.5*TDC_BIN, 4095.5*TDC_BIN);
sprintf(hname, "htdcdiff_cut_2");
htdcdiff_cut_2 = (TH1F*)gROOT->FindObject(hname);
if(htdcdiff_cut_2) delete htdcdiff_cut_2;
htdcdiff_cut_2 = new TH1F(hname, hname, 4096, -2048.5*TDC_BIN, 2047.5*TDC_BIN);
//~ htdcdiff_cut_2 = new TH1F(hname, hname, 4096, -0.5*TDC_BIN, 4095.5*TDC_BIN);
sprintf(hname, "hadccor");
hadccor = (TH2F*)gROOT->FindObject(hname);
if(hadccor) delete hadccor;
//~ hadccor = new TH2F(hname, hname, 256, 0, 4096, 256, 0, 4096);
hadccor = new TH2F(hname, hname, 256, 0, 4096, 256, -32768.5*TDC_BIN, 32767.5*TDC_BIN);
sprintf(hname, "htdccor");
htdccor = (TH2F*)gROOT->FindObject(hname);
if(htdccor) delete hadccor;
//~ htdccor = new TH2F(hname, hname, 512, 0, 1024*TDC_BIN, 512, 0, 1024*TDC_BIN);
htdccor = new TH2F(hname, hname, 512, 1024*TDC_BIN, 2048*TDC_BIN, 512, 1024*TDC_BIN, 2048*TDC_BIN);
//~ htdccor = new TH2F(hname, hname, 512, 0, 2048*TDC_BIN, 512, 0, 2048*TDC_BIN);
//~ htdccor = new TH2F(hname, hname, 11*20+1, 15.985, 27.035, 3*40+1, 15.990,19.015);
//~ htdccor = new TH2F(hname, hname, 512, 0, 2047.5*TDC_BIN, 3*40+1, 15.990,19.015);
//kobayashi
sprintf(hname, "hcoradctdc0");
hcoradctdc0 = (TH2F*)gROOT->FindObject(hname);
hcoradctdc0 = new TH2F(hname,hname,2000,0,2000,800,-10,10);
sprintf(hname, "hcoradctdc1");
hcoradctdc1 = (TH2F*)gROOT->FindObject(hname);
hcoradctdc1 = new TH2F(hname,hname,2000,0,2000,800,-10,10);
ftt = (TTree*)gROOT->FindObject("ftt");
if(ftt) delete ftt;
ftt = new TTree("ftt","ftt");
ftt->Branch("t_adc0",&t_adc0,"t_adc0/D");
ftt->Branch("t_adc1",&t_adc1,"t_adc1/D");
ftt->Branch("t_tdc0",&t_tdc0,"t_tdc0/D");
ftt->Branch("t_tdc1",&t_tdc1,"t_tdc1/D");
ftt->Branch("t_ctdc",&t_ctdc,"t_ctdc/D");
#ifdef testpulse
sprintf(hname, "htesttdc1");
htesttdc1 = (TH1F*)gROOT->FindObject(hname);
if(htesttdc1) delete htesttdc1;
htesttdc1 = new TH1F(hname, hname, 65536, -0.5*TDC_BIN, 65535.5*TDC_BIN);
sprintf(hname, "htesttdc2");
htesttdc2 = (TH1F*)gROOT->FindObject(hname);
if(htesttdc2) delete htesttdc2;
htesttdc2 = new TH1F(hname, hname, 65536, -0.5*TDC_BIN, 65535.5*TDC_BIN);
#endif
for(int i=0; i<ANALYSE_CH; i++) {
for(int i=0; i<ANALYSE_CH; i++) {
sprintf(hname, "hadc%d", i);
hadc[i] = (TH1F*)gROOT->FindObject(hname);
if(hadc[i]) delete hadc[i];
340,18 → 266,9
if(hadc_cut[i]) delete hadc_cut[i];
hadc_cut[i] = new TH1F(hname, hname, 4096, -0.5, 4095.5);
sprintf(hname, "hadc_cut_2%d", i);
hadc_cut_2[i] = (TH1F*)gROOT->FindObject(hname);
if(hadc_cut_2[i]) delete hadc_cut_2[i];
hadc_cut_2[i] = new TH1F(hname, hname, 4096, -0.5, 4095.5);
sprintf(hname, "htdc%d", i);
htdc[i] = (TH1F*)gROOT->FindObject(hname);
if(htdc[i]) delete htdc[i];
//~ htdc[i] = new TH1F(hname, hname, 4096, -2048.5*TDC_BIN, 2047.5*TDC_BIN);
//~ htdc[i] = new TH1F(hname, hname, 4096, -0.5*TDC_BIN, 4095.5*TDC_BIN); //original
//~ htdc[i] = new TH1F(hname, hname, 65536/2, -0.5*TDC_BIN, 65535.5*TDC_BIN); //koba
//~ htdc[i] = new TH1F(hname, hname, 65536/2, -32768.5*TDC_BIN, 32767.5*TDC_BIN); //koba
htdc[i] = new TH1F(hname, hname, 65536, -32768.5*TDC_BIN, 32767.5*TDC_BIN);
//~ htdc[i] = new TH1F(hname, hname, 65536, -0.5*TDC_BIN, 65535.5*TDC_BIN);
358,62 → 275,35
sprintf(hname, "htdc_cut%d", i);
htdc_cut[i] = (TH1F*)gROOT->FindObject(hname);
if(htdc_cut[i]) delete htdc_cut[i];
//~ htdc_cut[i] = new TH1F(hname, hname, 4096, -2048.5*TDC_BIN, 2047.5*TDC_BIN);
//~ htdc_cut[i] = new TH1F(hname, hname, 4096, -0.5*TDC_BIN, 4095.5*TDC_BIN);//original
//~ htdc_cut[i] = new TH1F(hname, hname, 65536/2, -0.5*TDC_BIN, 65535.5*TDC_BIN); //koba
htdc_cut[i] = new TH1F(hname, hname, 65536/2, -32768.5*TDC_BIN, 32767.5*TDC_BIN); //koba
//~ htdc_cut[i] = new TH1F(hname, hname, 65536, -32768.5*TDC_BIN, 32767.5*TDC_BIN);
htdc_cut[i] = new TH1F(hname, hname, 65536, -32768.5*TDC_BIN, 32767.5*TDC_BIN);
//~ htdc_cut[i] = new TH1F(hname, hname, 65536, -0.5*TDC_BIN, 65535.5*TDC_BIN);
sprintf(hname, "htdc_cut_2%d", i);
htdc_cut_2[i] = (TH1F*)gROOT->FindObject(hname);
if(htdc_cut_2[i]) delete htdc_cut_2[i];
//~ htdc_cut_2[i] = new TH1F(hname, hname, 4096, -2048.5*TDC_BIN, 2047.5*TDC_BIN);
//~ htdc_cut_2[i] = new TH1F(hname, hname, 4096, -0.5*TDC_BIN, 4095.5*TDC_BIN);//original
htdc_cut_2[i] = new TH1F(hname, hname, 65536, -0.5*TDC_BIN, 65535.5*TDC_BIN); //koba
sprintf(hname, "hctdc%d", i);
hctdc[i] = (TH1F*)gROOT->FindObject(hname);
if(hctdc[i]) delete hctdc[i];
//~ hctdc[i] = new TH1F(hname, hname, 4096, -2048.5*TDC_BIN, 2047.5*TDC_BIN);
//~ hctdc[i] = new TH1F(hname, hname, 65536/2, -32768.5*TDC_BIN, 32767.5*TDC_BIN);
hctdc[i] = new TH1F(hname, hname, 65536, -32768.5*TDC_BIN, 32767.5*TDC_BIN);
sprintf(hname, "h2d%d", i);
h2d[i] = (TH2F*)gROOT->FindObject(hname);
if(h2d[i]) delete h2d[i];
h2d[i] = new TH2F(hname, hname, run.nx, (run.x0-0.5*run.dx)*MIKRO_BIN, (run.x0+(run.nx-0.5)*run.dx)*MIKRO_BIN,
run.ny, (run.y0-0.5*run.dy)*MIKRO_BIN, (run.y0+(run.ny-0.5)*run.dy)*MIKRO_BIN);
//~ hctdc[i] = new TH1F(hname, hname, 65536, -0.5*TDC_BIN, 65535.5*TDC_BIN);
sprintf(hname, "hcor%d", i);
hcor[i] = (TH2F*)gROOT->FindObject(hname);
if(hcor[i]) delete hcor[i];
//~ hcor[i] = new TH2F(hname, hname, 256, 0-0.5, 1024-0.5, 200, 10-(TDC_BIN/2), 20-(TDC_BIN/2));
//~ hcor[i] = new TH2F(hname, hname, 512, 0-0.5, 1024-0.5, 4096, -32768.5*TDC_BIN, 32767.5*TDC_BIN);
//~ hcor[i] = new TH2F(hname, hname, 256, 0-0.5, 512-0.5, 160, -2-(TDC_BIN/2), 2-(TDC_BIN/2));
hcor[i] = new TH2F(hname, hname, 512, 0-0.5, 1024-0.5, 160, -1.5-(TDC_BIN/2), 2.5-(TDC_BIN/2));
for(int j=0; j<ANALYSE_CH; j++) {
sprintf(hname, "hdiffcor_%d_%d",i,j);
sprintf(htitle, "ch.%d - ch.%d",i,j);
hdiffcor[i][j] = (TH2F*)gROOT->FindObject(hname);
if(hdiffcor[i][j]) delete hdiffcor[i][j];
hdiffcor[i][j] = new TH2F(hname, htitle, 256, 0-0.5, 1024-0.5, 128, -6.4-(TDC_BIN/2), 6.4-(TDC_BIN/2));
sprintf(hname, "hdiffcor_low_%d_%d",i,j);
sprintf(htitle, "ch.%d - ch.%d",i,j);
hdiffcor_low[i][j] = (TH2F*)gROOT->FindObject(hname);
if(hdiffcor_low[i][j]) delete hdiffcor_low[i][j];
hdiffcor_low[i][j] = new TH2F(hname, htitle, 256, 0-0.5, 512-0.5, 128, -6.4-(TDC_BIN/2), 6.4-(TDC_BIN/2));
sprintf(hname, "hdiffcor_hi_%d_%d",i,j);
sprintf(htitle, "ch.%d - ch.%d",i,j);
hdiffcor_hi[i][j] = (TH2F*)gROOT->FindObject(hname);
if(hdiffcor_hi[i][j]) delete hdiffcor_hi[i][j];
hdiffcor_hi[i][j] = new TH2F(hname, htitle, 256, 0-0.5, 2048-0.5, 128, -6.4-(TDC_BIN/2), 6.4-(TDC_BIN/2));
}
//~ hcor[i] = new TH2F(hname, hname, 512, 0-0.5, 1024-0.5, 160, -1.5-(TDC_BIN/2), 2.5-(TDC_BIN/2));
hcor[i] = new TH2F(hname, hname, 512, 0-0.5, 4096-0.5, (100/TDC_BIN)/8, -50-(TDC_BIN/2), 50-(TDC_BIN/2));
//~ hcor[i] = new TH2F(hname, hname, 512, 0-0.5, 4096-0.5, 256, -32768.5*TDC_BIN, 32767.5*TDC_BIN);
//~ hcor[i] = new TH2F(hname, hname, 512, 0-0.5, 4096-0.5, 256, -0.5*TDC_BIN, 65535.5*TDC_BIN);
}
sprintf(hname, "htdcdiff");
htdcdiff = (TH1F*)gROOT->FindObject(hname);
if(htdcdiff) delete htdcdiff;
htdcdiff = new TH1F(hname, hname, 4096, -2048.5*TDC_BIN, 2047.5*TDC_BIN);
sprintf(hname, "htdcdiff_cut");
htdcdiff_cut = (TH1F*)gROOT->FindObject(hname);
if(htdcdiff_cut) delete htdcdiff_cut;
htdcdiff_cut = new TH1F(hname, hname, 4096, -2048.5*TDC_BIN, 2047.5*TDC_BIN);
break;
case POSREC_ID:
467,23 → 357,20
for(int i=0; i<ANALYSE_CH; i++) {
tdc=((double)evtrec->data[i])*TDC_BIN + tdcoffset[i];
//~ tdc=((double)evtrec->data[i])*TDC_BIN;
adc=(double)evtrec->data[i+NCH];
//~ if(i==15) printf("aaaaaaaaaaa15 norma %f\n",tdc);
tdca[i]=tdc;
adca[i]=adc;
//~ if(ceve < 100) {
//~ printf("[%3d] tdc[%2d] = %lf | adc[%2d] = %lf\n", ceve, i, tdc, i, adc);
//~ }
}
for(int i=0; i<ANALYSE_CH; i++) {
if(0 < adca[i]) hadc[i]->Fill(adca[i]);
//~ if(0 < adca[i])
hadc[i]->Fill(adca[i]);
//~ if( (qdcmi < adca[i]) && (adca[i] < qdcma) )
if(0 < tdca[i]) htdc[i]->Fill(tdca[i]-tdca[TRIGGER_CH]);
//~ if(0 < tdca[i]) htdc[i]->Fill(tdca[i]);
hcor[i]->Fill(adca[i],tdca[i]-tdca[TRIGGER_CH]);
//~ if(0 < tdca[i]) htdc[i]->Fill(tdca[i]-tdca[TRIGGER_CH]);
//~ if(0 < tdca[i])
htdc[i]->Fill(tdca[i]-tdca[TRIGGER_CH]);
//~ hcor[i]->Fill(adca[i],tdca[i]);
hcor[i]->Fill(adca[i],tdca[i]-tdca[TRIGGER_CH]);
if(adca[i] > corpar[i][2]) {
ctdca[i] = tdca[i]-tdca[TRIGGER_CH] - (corpar[i][0] + corpar[i][1]/TMath::Sqrt(adca[i] - corpar[i][2]));
491,41 → 378,14
ctdca[i] = -999.9*(i+1);
}
//~ if(tdc_noise_cut < tdca[i])
double adc_max_cut = 1000;
if(adca[i] < adc_max_cut)
//~ double adc_max_cut = 1000;
//~ if(adca[i] < adc_max_cut)
hctdc[i]->Fill( ctdca[i] );
//~ if(dbg && (i<4) && (1 < tdca[0] && (1 < tdca[1]))) printf("tdca[%d] = %lf | tdca[TRG] = %lf | ctdca[i] = %lf | adca[i] = %lf\n", i, tdca[i],tdca[TRIGGER_CH],ctdca[i],adca[i]);
if(dbg && (i<4) ) printf("[%4d] tdca[%d] = %lf | tdca[TRG] = %lf | ctdca[i] = %lf | adca[i] = %lf\n", ceve, i, tdca[i],tdca[TRIGGER_CH],ctdca[i],adca[i]);
 
if( (qdcmi < adca[i]) && (adca[i] < qdcma) && (tdcmi < tdca[i]) && (tdca[i] < tdcma)) {
h2d[i]->Fill(pos.xset*MIKRO_BIN, pos.yset*MIKRO_BIN);
}
}
//~ printf("aaaaaaaaaaa15 %f\n",((double)evtrec->data[15])); printf("aaaaaaaaaaa15 %f\n",((double)evtrec->data[15])*TDC_BIN);
//~ printf("aaaaaaaaaaa30 %d\n",evtrec->data[30]);
//~ printf("aaaaaaaaaaa31 %d\n",evtrec->data[31]);
//~ printf("aaaaaaaaaaa15 %f\n",tdca[15]);
//~ printf("aaaaaaaaaaa30 %d\n",tdca[30]);
//~ printf("aaaaaaaaaaa31 %d\n",tdca[31]);
//~
//kobayashi
ctdcdiff = ctdca[MPPC_2_CH] - ctdca[MPPC_1_CH] +deltaT_ctdcdiff;
tdcdiff = tdca[MPPC_2_CH] - tdca[MPPC_1_CH];
t_ctdc = ctdcdiff;
t_tdc0=tdca[0];
t_tdc1=tdca[1];
t_adc0=adca[15];
t_adc1=adca[1];
hcoradctdc0->Fill(adca[0],ctdcdiff);
hcoradctdc1->Fill(adca[1],ctdcdiff);
ftt->Fill();
#ifdef testpulse
htesttdc1->Fill(tdca[16]-tdca[14]);
htesttdc2->Fill(tdca[14]-tdca[15]);
#endif
//cut za timing:
#define CUT_1_CONDITION ( (qdcmi < adca[MPPC_1_CH]) && (adca[MPPC_1_CH] < qdcma) && (tdcmi < adca[MPPC_2_CH]) && (adca[MPPC_2_CH] < tdcma) )
557,9 → 417,6
htdcdiff_cut->Fill(ctdcdiff);
//~ htdcdiff_cut->Fill(tdcdiff);
}
if( CUT_2_CONDITION ) {
htdcdiff_cut_2->Fill(ctdcdiff);
}
}
for(int i=0; i<ANALYSE_CH; i++) {
574,37 → 431,9
if( (qdcmi < adca[i]) && (adca[i] < qdcma) && (adca[i] > corpar[i][2]) )
htdc_cut[i]->Fill(ctdca[i]);
if( (tdcmi < ctdca[i]) && (ctdca[i] < tdcma) )
hadc_cut[i]->Fill(adca[i]);
if( CUT_2_CONDITION ) {
htdc_cut_2[i]->Fill(tdca[i]);
hadc_cut_2[i]->Fill(adca[i]);
hadc_cut_2[i]->Fill(adca[i]);
}
hadc_cut[i]->Fill(adca[i]);
}
//~ hadccor->Fill(adca[REF_CH], adca[MPPC_1_CH]);
hadccor->Fill(adca[REF_CH], tdca[8]-tdca[31]);
htdccor->Fill(tdca[MPPC_1_CH], tdca[MPPC_2_CH]);
// --------------- corelation plots for time-walk correction ---------------
 
if( (tdc_noise_cut<tdca[MPPC_1_CH]) && (tdc_noise_cut<tdca[MPPC_2_CH]) && (adc_cor_min<adca[MPPC_2_CH]) ) {
hdiffcor[MPPC_1_CH][MPPC_2_CH]->Fill(adca[MPPC_1_CH],tdca[MPPC_1_CH]-ctdca[MPPC_2_CH]);
hdiffcor_low[MPPC_1_CH][MPPC_2_CH]->Fill(adca[MPPC_1_CH],tdca[MPPC_1_CH]-ctdca[MPPC_2_CH]);
hdiffcor_hi[MPPC_1_CH][MPPC_2_CH]->Fill(adca[MPPC_1_CH],tdca[MPPC_1_CH]-ctdca[MPPC_2_CH]);
}
 
if( (tdc_noise_cut<tdca[MPPC_2_CH]) && (tdc_noise_cut<tdca[MPPC_1_CH]) && (adc_cor_min<adca[MPPC_1_CH]) ) {
hdiffcor[MPPC_2_CH][MPPC_1_CH]->Fill(adca[MPPC_2_CH],tdca[MPPC_2_CH]-ctdca[MPPC_1_CH]);
hdiffcor_low[MPPC_2_CH][MPPC_1_CH]->Fill(adca[MPPC_2_CH],tdca[MPPC_2_CH]-ctdca[MPPC_1_CH]);
hdiffcor_hi[MPPC_2_CH][MPPC_1_CH]->Fill(adca[MPPC_2_CH],tdca[MPPC_2_CH]-ctdca[MPPC_1_CH]);
}
// events ------------------------------------------------------------------------------------------
break;
673,11 → 502,6
 
if(dbg) return 1;
if(rootfile) {
#ifdef testpulse
printf("<<< EASIROC Disc : %f [ps]\n", htesttdc1->GetRMS()*1000);
printf("<<< TEST Disc : %f [ps]\n", htesttdc2->GetRMS()*1000);
#endif
ftt->Write();
rootfile->Write();
//cout<<"maximum x value = " << htdcdiff->GetXaxis()->GetBinCenter( htdcdiff->GetMaximumBin()) <<endl;
printf("Saved to %s\n", fnameroot);