From 427b52502215c9029f7fa981d8599e1e22485f07 Mon Sep 17 00:00:00 2001 From: carulla_m_ Date: Fri, 20 Feb 2026 16:38:10 +0100 Subject: [PATCH] BP_analysis.cpp add comments on the script BP_analysis_M431 modified BP_analysis_M431.cpp modified BP_scan.sh must declare module number as argument and readout speed (full_speed or half_speed) Modified the communication interface and commands to the pulser BP_scan_both_speeds.sh Added Vb_comp 1220 at the end of the script and Modified the communication interface and commands to the pulser CS_analysis.cpp add list of new modules for analysis CS_analysis_JF11 modified CS_analysis_M431.cpp modified CS_fit.cpp add new modules in the list CS_scan.sh must declare module number as argument and readout speed (full_speed or half_speed) CS_scan_both_speeds.sh Added Vb_comp 1220 at the end of the script CuFluo_exposure.sh Change HV to 60V and I to 40mA instead of 40V and 60mV+ must declare module number as argument and readout speed (full_speed or half_speed) CuFluo_exposure_JF11.s Change HV to 60V and I to 40mA instead of 40V and 60mV CuFluo_exposure_both_speeds.sh Change HV to 60V and I to 40mA instead of 40V and 60m CuFluo_exposure_sc.sh Change HV to 60V and I to 40mA instead of 40V and 60m. Adjust the period to avoid losing packets CuFluo_fit_sc.cpp Create a new file to fit Cu and noise peak fit for the storage cells data Default_pixels_arrays.cpp Creates a default pixels system map given the module numbers of the system Fluo_analysis_Ti_In.cpp Analysis the data for Fluorecensce target: Ti, Fe, Cu, Se, Mo, or In. The target needs to be passed as an argument. Fluo_exposure_Ti_In.sh Fluorescence exposure with targets: Ti, Fe, Cu, Se, Mo, or In. Fluo_fit.cpp Function to fit the fluorescence peaks for the different targets: Ti, Fe, Cu, Se, Mo, or In. The target needs to be passed as an argument. JFMC_CalibWriter_wBP_sc.cpp change the range of the g0cutmap Multi_filename_creator.sh Bash file to create 6 different receivers, one for each JFcalib readout board filename_creator.sh add comments makefile Add new objects:Fluo_analysis_Ti_In, Fluo_fit, CuFluo_fit_sc, CS_fit, BP_fit, etc... --- BP_analysis.cpp | 86 +- BP_analysis_M431 | Bin 89816 -> 94248 bytes BP_analysis_M431.cpp | 11 +- BP_scan.sh | 352 +++++---- BP_scan_both_speeds.sh | 107 ++- CS_analysis.cpp | 108 +++ CS_analysis_JF11 | Bin 199168 -> 208184 bytes CS_analysis_M431.cpp | 1 + CS_fit.cpp | 109 ++- CS_scan.sh | 304 +++---- CS_scan_both_speeds.sh | 2 + CuFluo_exposure.sh | 221 +++--- CuFluo_exposure_JF11.sh | 6 +- CuFluo_exposure_both_speeds.sh | 28 +- CuFluo_exposure_sc.sh | 72 +- CuFluo_fit_sc.cpp | 322 ++++++++ Default_pixels_arrays.cpp | 29 +- Fluo_analysis_Ti_In.cpp | 1357 ++++++++++++++++++++++++++++++++ Fluo_exposure_Ti_In.sh | 166 ++++ Fluo_fit.cpp | 721 +++++++++++++++++ JFMC_CalibWriter_wBP_sc.cpp | 6 +- Multi_filename_creator.sh | 144 ++++ filename_creator.sh | 2 +- makefile | 10 + 24 files changed, 3667 insertions(+), 497 deletions(-) create mode 100644 CuFluo_fit_sc.cpp create mode 100644 Fluo_analysis_Ti_In.cpp create mode 100644 Fluo_exposure_Ti_In.sh create mode 100644 Fluo_fit.cpp create mode 100644 Multi_filename_creator.sh diff --git a/BP_analysis.cpp b/BP_analysis.cpp index 48cc3ad..f1a8b00 100644 --- a/BP_analysis.cpp +++ b/BP_analysis.cpp @@ -131,8 +131,8 @@ int main(int argc, char* argv[]) { mapcanvas->cd(); - TH1F* g0_grad_hist = 0; - if (module_str == "351" || + TH1F* g0_grad_hist = 0; + if (module_str == "351" || // List of 450um modules module_str == "351_fullspeed" || module_str == "352" || module_str == "352_fullspeed" || @@ -149,7 +149,11 @@ int main(int argc, char* argv[]) { module_str == "307" || module_str == "307_fullspeed" || module_str == "272_halfspeedtest" || - module_str == "272_fullspeedtest") { + module_str == "272_fullspeedtest" || + module_str == "668" || + module_str == "668_200V" || + module_str == "668_180V" || + module_str == "668_fullspeedtest") { g0_grad_hist = new TH1F("g0_grad_hist","",100,3,8); } else { g0_grad_hist = new TH1F("g0_grad_hist","",100,5,10); @@ -174,7 +178,11 @@ int main(int argc, char* argv[]) { module_str == "307" || module_str == "307_fullspeed" || module_str == "272_halfspeedtest" || - module_str == "272_fullspeedtest") { + module_str == "272_fullspeedtest" || + module_str == "668" || + module_str == "668_200V" || + module_str == "668_180V" || + module_str == "668_fullspeedtest") { g1_grad_hist = new TH1F("g1_grad_hist","",100,-0.25,-0.1); } else { g1_grad_hist = new TH1F("g1_grad_hist","",100,-0.3,-0.15); @@ -788,12 +796,35 @@ int main(int argc, char* argv[]) { mapcanvas->SetRightMargin(0.13); c1->cd(); - g0_grad_hist->GetXaxis()->SetTitle("G0 gradient"); g0_grad_hist->Draw(); sprintf(savename,"plots/M%s/%s/g0_grad_hist_M%s.png", module_str.c_str(), plotfolder_str.c_str(), module_str.c_str()); c1->SaveAs((const char *)(savename)); + TPaveText *pave1 = new TPaveText(0.6,0.8,0.94,0.94,"blNDC"); + pave1->SetBorderSize(0); + pave1->SetFillStyle(0); + pave1->SetTextSize(0.04); + pave1->SetTextAlign(32); + + + g0_grad_hist->Fit("gaus"); + g0_grad_hist->Draw(); + c1->Update(); + + TF1* g0_grad_hist_gaus = g0_grad_hist->GetFunction("gaus"); + if (g0_grad_hist_gaus) { + sprintf(savename,"Mean %0.4f #pm %0.4f", g0_grad_hist_gaus->GetParameter(1), g0_grad_hist_gaus->GetParError(1)); + pave1->AddText((const char *)(savename)); + sprintf(savename,"Sigma %0.4f #pm %0.4f", g0_grad_hist_gaus->GetParameter(2), g0_grad_hist_gaus->GetParError(2)); + pave1->AddText((const char *)(savename)); + pave1->Draw(); + } + g0_grad_hist->SetStats(kFALSE); + sprintf(savename,"plots/M%s/%s/g0_grad_histfit_M%s.png", module_str.c_str(), plotfolder_str.c_str(),module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + g0_grader_hist->GetXaxis()->SetTitle("#sigma_{G0 gradient}"); g0_grader_hist->Draw(); sprintf(savename,"plots/M%s/%s/g0_grader_hist_M%s.png", module_str.c_str(), plotfolder_str.c_str(), module_str.c_str()); @@ -804,6 +835,31 @@ int main(int argc, char* argv[]) { sprintf(savename,"plots/M%s/%s/g1_grad_hist_M%s.png", module_str.c_str(), plotfolder_str.c_str(), module_str.c_str()); c1->SaveAs((const char *)(savename)); + TPaveText *pave3 = new TPaveText(0.6,0.8,0.94,0.94,"blNDC"); + pave3->SetBorderSize(0); + pave3->SetFillStyle(0); + pave3->SetTextSize(0.04); + pave3->SetTextAlign(32); + + + g1_grad_hist->Fit("gaus"); + g1_grad_hist->Draw(); + c1->Update(); + + TF1* g1_grad_hist_gaus = g1_grad_hist->GetFunction("gaus"); + if (g1_grad_hist_gaus) { + sprintf(savename,"Mean %0.4f #pm %0.4f", g1_grad_hist_gaus->GetParameter(1), g1_grad_hist_gaus->GetParError(1)); + pave3->AddText((const char *)(savename)); + sprintf(savename,"Sigma %0.4f #pm %0.4f", g1_grad_hist_gaus->GetParameter(2), g1_grad_hist_gaus->GetParError(2)); + pave3->AddText((const char *)(savename)); + pave3->Draw(); + } + g1_grad_hist->SetStats(kFALSE); + sprintf(savename,"plots/M%s/%s/g1_grad_histfit_M%s.png", module_str.c_str(), plotfolder_str.c_str(),module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + + g1_grader_hist->GetXaxis()->SetTitle("#sigma_{G1 gradient}"); g1_grader_hist->Draw(); sprintf(savename,"plots/M%s/%s/g1_grader_hist_M%s.png", module_str.c_str(), plotfolder_str.c_str(), module_str.c_str()); @@ -843,7 +899,7 @@ int main(int argc, char* argv[]) { g0_grad_map->Draw("colz"); pave->AddText("G0 [ADU/mV]"); pave->Draw(); - if (module_str == "351" || + if (module_str == "351" || // List 450um modules module_str == "351_fullspeed" || module_str == "352" || module_str == "352_fullspeed" || @@ -860,8 +916,12 @@ int main(int argc, char* argv[]) { module_str == "307" || module_str == "307_fullspeed" || module_str == "272_halfspeedtest" || - module_str == "272_fullspeedtest") { - g0_grad_map->GetZaxis()->SetRangeUser(3,4); + module_str == "272_fullspeedtest"|| + module_str == "668" || + module_str == "668_200V" || + module_str == "668_180V" || + module_str == "668_fullspeedtest") { + g0_grad_map->GetZaxis()->SetRangeUser(3.5,6.5); } else { g0_grad_map->GetZaxis()->SetRangeUser(5,10); } @@ -894,7 +954,7 @@ int main(int argc, char* argv[]) { } else if (module_str == "021" || module_str == "022" || module_str == "044") { g1_grad_map->GetZaxis()->SetRangeUser(-0.3,-0.23); } else if (module_str == "351" || - module_str == "351_fullspeed" || + module_str == "351_fullspeed" || // List modules 450um module_str == "352" || module_str == "352_fullspeed" || module_str == "261" || @@ -910,8 +970,12 @@ int main(int argc, char* argv[]) { module_str == "307" || module_str == "307_fullspeed" || module_str == "272_halfspeedtest" || - module_str == "272_fullspeedtest") { - g1_grad_map->GetZaxis()->SetRangeUser(-0.15,-0.1); + module_str == "272_fullspeedtest" || + module_str == "668" || + module_str == "668_200V" || + module_str == "668_180V" || + module_str == "668_fullspeedtest") { + g1_grad_map->GetZaxis()->SetRangeUser(-0.2,-0.15); } else { g1_grad_map->GetZaxis()->SetRangeUser(-0.25,-0.2); } diff --git a/BP_analysis_M431 b/BP_analysis_M431 index cf3bc9865c2309bd32340750c2fdc741e4f38751..dc0ee32230d946bf4bc881865c3972ab0727165b 100755 GIT binary patch literal 94248 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 literal 89816 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 jdB511) || (i%NC<256 || i%NC>511)){ - continue; - } - avg_adcG0_map[framecounter/100]->SetBinContent((i%NC)+1,(i/NC)+1,pedestalObjectG0->pedestalOfChannel(i)); avg_adcG0er_map[framecounter/100]->SetBinContent((i%NC)+1,(i/NC)+1,pedestalObjectG0->semOfChannel(i)); @@ -382,10 +377,6 @@ int main(int argc, char* argv[]) { mapcanvas->SetRightMargin(0.05); for (int i = 0; i < NCH; i++) { - if((i/NC<256 || i/NC>511) || (i%NC<256 || i%NC>511)){ - continue; - } - vector r0_adc; vector r0_filter; diff --git a/BP_scan.sh b/BP_scan.sh index 0eb74f6..524dae2 100644 --- a/BP_scan.sh +++ b/BP_scan.sh @@ -16,160 +16,228 @@ # last data file (000002.dat) should be 2097184000 bytes - +PulseWidth=0.000040 #80us Normal measurement: #40us +PulseDelay=0.000001 #10us NOrmal measurement: #1us KILLRCV="killall ju_udp_receiver_3threads_2_0" $KILLRCV +if [[ "$0" == *"BP_scan.sh"* ]]; then + echo "script changes env. variables: should be invoked with source, not sh " + exit +fi -sls_detector_put stop #just in case +if [ ! -v $1 & ! -v $2 ]; then + echo $0 + echo "Readout speed is" $2 + echo "printing filenames for module" $1 + ROBspeed=$2 + + if [[ "$2" == "full_speed" ]]; then + source filename_creator.sh $1"_fullspeed" Y + elif [[ "$2" == "half_speed" ]]; then + source filename_creator.sh $1 Y + else + echo "Readout speed has to be specified as half_speed or full_speed" + exit + fi + + sls_detector_put stop #just in case + + sls_detector_put powerchip 1 + + sls_detector_put delay 0 + #sls_detector_put triggers 1 + #sls_detector_put frames 100 + sls_detector_put period 0.005 + sls_detector_put exptime $PulseWidth + sls_detector_put highvoltage 0 -sls_detector_put powerchip 1 + # configure for receiver on pc-jungfrau-01/pc-jungfrau-test/pc-jungfrau-02 + # source pccalib.sh with pc (pc-jungfrau-01/pc-jungfrau-test/pc-jungfrau-02) + + sls_detector_put udp_dstport 32410 + sls_detector_put udp_dstip $DSTIP #10.1.4.105 + sls_detector_put udp_dstmac $DSTMAC #3C:FD:FE:A2:14:D8 + sls_detector_put udp_srcip $SRCIP #10.1.4.9 + sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2 + + #sls_detector_put configuremac 0 + sls_detector_put readoutspeed $ROBspeed + #sls_detector_put readoutspeed full_speed + + sls_detector_put gainmode dynamic + + #CLI=/afs/psi.ch/project/sls_det_software/serial_control_software/minidelay/minidelay + + HOST=EX-6111-02 + # prepare the AGILENT 33250A + #echo $CLI" OUTP OFF " | nc pc10773 5555 + (echo OUTP OFF ) | nc -t $HOST 5000 + sleep 0.2 + + #remember to put High-Z load! + #Change load to Infinity + (echo OUTP:LOAD INF ) | nc -t $HOST 5000 + sleep 0.2 + + # Polarity normal + #echo $CLI" OUTP:POL NORM" | nc pc10773 5555 + (echo OUTP:POL NORM) | nc -t $HOST 5000 + sleep 0.2 + + # pulse + #echo $CLI" FUNC PULS" | nc pc10773 5555 + (echo FUNC PULS) | nc -t $HOST 5000 + sleep 0.2 + + # frequency 1kHz + #echo $CLI" FREQ 1000" | nc pc10773 5555 + (echo FREQ 1000) | nc -t $HOST 5000 + sleep 0.2 + + # width 40 us + #echo $CLI" PULS:WIDT 0.000040" | nc pc10773 5555 + (echo PULS:WIDT $PulseWidth) | nc -t $HOST 5000 + sleep 0.2 + + # amplitude 0.1 V" | nc pc10773 5555 + #echo $CLI" VOLT 0.1" | nc pc10773 5555 + (echo VOLT 0.1) | nc -t $HOST 5000 + sleep 0.2 + + # offset 0 V echo $CLI" VOLT:OFFS 0" | nc pc8830 5555 + # sleep 0.2 + + # VLOW 0 V + #echo $CLI" VOLT:LOW 0" | nc pc10773 5555 + (echo VOLT:LOW 0) | nc -t $HOST 5000 + sleep 0.2 + + # edge 50 ns + #echo $CLI" PULS:TRAN 0.000000050" | nc pc10773 5555 + (echo PULS:TRAN 0.000000050) | nc -t $HOST 5000 + sleep 0.2 + + # triggered burst + #echo $CLI" BURS:MODE TRIG" | nc pc10773 5555 + (echo BURS:MODE TRIG) | nc -t $HOST 5000 + sleep 0.2 + + # cycles 1 + #echo $CLI" BURS:NCYC 1" | nc pc10773 5555 + (echo BURS:NCYC 1) | nc -t $HOST 5000 + sleep 0.2 + + # external trigger source + #echo $CLI" TRIG:SOUR EXT" | nc pc10773 5555 + (echo TRIG:SOUR EXT) | nc -t $HOST 5000 + sleep 0.2 + + # delay 1 us + #echo $CLI" TRIG:DEL 0.000001" | nc pc10773 5555 + (echo TRIG:DEL $PulseDelay) | nc -t $HOST 5000 + sleep 0.2 + # delay 40 us + #echo $CLI" TRIG:DEL 0.000040" | nc pc10773 5555 + #sleep 0.2 + + # slope positive + #echo $CLI" TRIG:SLOP POS" | nc pc10773 5555 + (echo TRIG:SLOP POS) | nc -t $HOST 5000 + sleep 0.2 + + # turn on burst mode + #echo $CLI" BURS:STAT ON" | nc pc10773 5555 + (echo BURS:STAT ON) | nc -t $HOST 5000 + sleep 0.2 + + (echo VOLT:HIGH 0.02) | nc -t $HOST 5000 + sleep 0.2 + + if [ "$1" == 'Y' ]; then + echo "started with Y argument, skipping manual checks" + else + echo "It is now safe to connect the cable between the amplifier board and the readout board" + echo "Please do so and press any key to continue, or press q to exit this script" + read -n 1 -s input + + if [[ $input = "q" ]]; then + echo "Exiting script" + exit 1 + fi + fi + + # high voltage + # sls_detector_put highvoltage 200 #because it seemed more stable, we are using external HV 230V + # output on + #echo $CLI" OUTP ON" | nc pc10773 5555 + (echo OUTP ON) | nc -t $HOST 5000 + sleep 0.2 + + if [ "$1" == 'Y' ]; then + echo "started with Y argument, skipping manual checks" + else + echo "The current on the amplifier board should be ~0.035 A" + echo "Please check and press any key to continue, or press q to exit this script" + read -n 1 -s input + if [[ $input = "q" ]]; then + echo "Exiting script" + exit 1 + fi + fi + + sls_detector_put frames 20000 + sls_detector_put start + sleep 110 + + sls_detector_put stop + + sls_detector_put triggers 1 + sls_detector_put frames 100 -sls_detector_put delay 0 -sls_detector_put triggers 1 -sls_detector_put frames 100 -sls_detector_put period 0.005 -sls_detector_put exptime 0.00004 -sls_detector_put highvoltage 0 + $TKBPG0 & + sleep 1 -# configure for receiver on pc-jungfrau-01/pc-jungfrau-test/pc-jungfrau-02 -# source pccalib.sh with pc (pc-jungfrau-01/pc-jungfrau-test/pc-jungfrau-02) - -sls_detector_put udp_dstport 32410 -sls_detector_put udp_dstip $DSTIP #10.1.4.105 -sls_detector_put udp_dstmac $DSTMAC #3C:FD:FE:A2:14:D8 -sls_detector_put udp_srcip $SRCIP #10.1.4.9 -sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2 - -#sls_detector_put configuremac 0 -sls_detector_put readoutspeed half_speed -#sls_detector_put readoutspeed full_speed - -sls_detector_put gainmode dynamic - -CLI=/afs/psi.ch/project/sls_det_software/serial_control_software/minidelay/minidelay - -# prepare the AGILENT 33250A -echo $CLI" OUTP OFF " | nc pc10773 5555 - -sleep 0.2 - -#remember to put High-Z load! -#Change load to Infinity -echo $CLI" OUTP:LOAD INF " | nc pc10773 5555 - -# Polarity normal -echo $CLI" OUTP:POL NORM" | nc pc10773 5555 - -# pulse -echo $CLI" FUNC PULS" | nc pc10773 5555 -sleep 0.2 -# frequency 1kHz -echo $CLI" FREQ 1000" | nc pc10773 5555 -sleep 0.2 -# width 40 us -echo $CLI" PULS:WIDT 0.000040" | nc pc10773 5555 -sleep 0.2 -# amplitude 0.1 V" | nc pc10773 5555 -echo $CLI" VOLT 0.1" | nc pc10773 5555 -# offset 0 V echo $CLI" VOLT:OFFS 0" | nc pc8830 5555 -sleep 0.2 -# VLOW 0 V -echo $CLI" VOLT:LOW 0" | nc pc10773 5555 -sleep 0.2 -# edge 50 ns -echo $CLI" PULS:TRAN 0.000000050" | nc pc10773 5555 -sleep 0.2 -# triggered burst -echo $CLI" BURS:MODE TRIG" | nc pc10773 5555 -sleep 0.2 -# cycles 1 -echo $CLI" BURS:NCYC 1" | nc pc10773 5555 -sleep 0.2 -# external trigger source -echo $CLI" TRIG:SOUR EXT" | nc pc10773 5555 -sleep 0.2 -# delay 1 us -echo $CLI" TRIG:DEL 0.000001" | nc pc10773 5555 -# delay 40 us -#echo $CLI" TRIG:DEL 0.000040" | nc pc10773 5555 -sleep 0.2 -# slope positive -echo $CLI" TRIG:SLOP POS" | nc pc10773 5555 -sleep 0.2 -# turn on burst mode -echo $CLI" BURS:STAT ON" | nc pc10773 5555 -sleep 0.2 + # the scan + for ivpulse in {10..1000..10} + do + vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l)) + (echo VOLT:HIGH $vpulse) | nc -t $HOST 5000 + sleep 1 + sls_detector_put start + sleep 1 + done -if [ "$1" == 'Y' ]; then -echo "started with Y argument, skipping manual checks" + + for ivpulse in {1050..6000..50} + do + vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l)) + (echo VOLT:HIGH $vpulse) | nc -t $HOST 5000 + sleep 1 + sls_detector_put start + sleep 1 + done + + # Kill receiver + sls_detector_put stop + (echo VOLT:HIGH 0.010) | nc -t $HOST 5000 + (echo OUTP OFF) | nc -t $HOST 5000 + sleep 20 + $KILLRCV + + echo "Finished scan, please wait for capacitor to discharge" + sls_detector_put readoutspeed half_speed + sleep 20 + echo "It is now safe to disconnect the cable between the amplifier board and the readout board" + echo "Script finished" + else -echo "It is now safe to connect the cable between the amplifier board and the readout board" -echo "Please do so and press any key to continue, or press q to exit this script" -read -n 1 -s input -if [[ $input = "q" ]]; then - echo "Exiting script" - exit 1 -fi + echo "Specify module number as a first argument" + echo "Specify readout_speed as a second argument:half_speed,full_speed" + echo "Script finished" fi - -# high voltage -# sls_detector_put highvoltage 200 #because it seemed more stable, we are using external HV 230V -# output on -echo $CLI" OUTP ON" | nc pc10773 5555 -sleep 0.2 - - -if [ "$1" == 'Y' ]; then -echo "started with Y argument, skipping manual checks" -else - -echo "The current on the amplifier board should be ~0.035 A" -echo "Please check and press any key to continue, or press q to exit this script" -read -n 1 -s input -if [[ $input = "q" ]]; then - echo "Exiting script" - exit 1 -fi -fi - -$TKBPG0 & - - -# the scan -for ivpulse in {10..1000..10} -do - -vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l)) -echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555 -sleep 1 -sls_detector_put start -sleep 1 -done - -for ivpulse in {1050..6000..50} -do -vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l)) -echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555 -sleep 1 -sls_detector_put start -sleep 1 -done - - -# high voltage -# sls_detector_put highvoltage 0 -# output off -echo $CLI" OUTP OFF " | nc pc10773 5555 - -$KILLRCV - -echo "Finished scan, please wait for capacitor to discharge" -sleep 20 -echo "It is now safe to disconnect the cable between the amplifier board and the readout board" -echo "Script finished" diff --git a/BP_scan_both_speeds.sh b/BP_scan_both_speeds.sh index f55eeb2..46540f9 100644 --- a/BP_scan_both_speeds.sh +++ b/BP_scan_both_speeds.sh @@ -11,7 +11,8 @@ # - amplifier board is powered and unconnected. # - last file should be 2097184000 bytes big. # connect to pc10773 (RH7 machine connected to the pulser and, after klog, run the command -# nc -k -n -v -l -p 5555 -e /bin/bash +# Old (with serial cable to USB) nc -k -n -v -l -p 5555 -e /bin/bash +# Using the new serial to ethernet EX-6111-02 or EX-6111-01 # last data file (000002.dat) should be 2097184000 bytes @@ -35,8 +36,8 @@ if [ ! -v $1 ]; then sls_detector_put powerchip 1 sls_detector_put delay 0 - sls_detector_put triggers 1 - sls_detector_put frames 100 + #sls_detector_put triggers 1 + #sls_detector_put frames 100 sls_detector_put period 0.005 sls_detector_put exptime 0.00004 sls_detector_put highvoltage 0 @@ -52,75 +53,95 @@ if [ ! -v $1 ]; then sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2 #sls_detector_put configuremac 0 - sls_detector_put readoutspeed half_speed + sls_detector_put readoutspeed half_speed #sls_detector_put readoutspeed full_speed sls_detector_put gainmode dynamic - - CLI=/afs/psi.ch/project/sls_det_software/serial_control_software/minidelay/minidelay - + sls_detector_put dac vb_comp 1100 + #CLI=/afs/psi.ch/project/sls_det_software/serial_control_software/minidelay/minidelay + HOST=EX-6111-02 # prepare the AGILENT 33250A - echo $CLI" OUTP OFF " | nc pc10773 5555 + #echo $CLI" OUTP OFF " | nc pc10773 5555 + (echo OUTP OFF ) | nc -t $HOST 5000 sleep 0.2 #remember to put High-Z load! #Change load to Infinity - echo $CLI" OUTP:LOAD INF " | nc pc10773 5555 - + (echo OUTP:LOAD INF ) | nc -t $HOST 5000 + sleep 0.2 + # Polarity normal - echo $CLI" OUTP:POL NORM" | nc pc10773 5555 + #echo $CLI" OUTP:POL NORM" | nc pc10773 5555 + (echo OUTP:POL NORM) | nc -t $HOST 5000 + sleep 0.2 # pulse - echo $CLI" FUNC PULS" | nc pc10773 5555 + #echo $CLI" FUNC PULS" | nc pc10773 5555 + (echo FUNC PULS) | nc -t $HOST 5000 sleep 0.2 # frequency 1kHz - echo $CLI" FREQ 1000" | nc pc10773 5555 + #echo $CLI" FREQ 1000" | nc pc10773 5555 + (echo FREQ 1000) | nc -t $HOST 5000 sleep 0.2 # width 40 us - echo $CLI" PULS:WIDT 0.000040" | nc pc10773 5555 + #echo $CLI" PULS:WIDT 0.000040" | nc pc10773 5555 + (echo PULS:WIDT 0.000040) | nc -t $HOST 5000 sleep 0.2 # amplitude 0.1 V" | nc pc10773 5555 - echo $CLI" VOLT 0.1" | nc pc10773 5555 - - # offset 0 V echo $CLI" VOLT:OFFS 0" | nc pc8830 5555 + #echo $CLI" VOLT 0.1" | nc pc10773 5555 + (echo VOLT 0.1) | nc -t $HOST 5000 sleep 0.2 + + # offset 0 V echo $CLI" VOLT:OFFS 0" | nc pc8830 5555 + # sleep 0.2 # VLOW 0 V - echo $CLI" VOLT:LOW 0" | nc pc10773 5555 + #echo $CLI" VOLT:LOW 0" | nc pc10773 5555 + (echo VOLT:LOW 0) | nc -t $HOST 5000 sleep 0.2 # edge 50 ns - echo $CLI" PULS:TRAN 0.000000050" | nc pc10773 5555 + #echo $CLI" PULS:TRAN 0.000000050" | nc pc10773 5555 + (echo PULS:TRAN 0.000000050) | nc -t $HOST 5000 sleep 0.2 # triggered burst - echo $CLI" BURS:MODE TRIG" | nc pc10773 5555 + #echo $CLI" BURS:MODE TRIG" | nc pc10773 5555 + (echo BURS:MODE TRIG) | nc -t $HOST 5000 sleep 0.2 # cycles 1 - echo $CLI" BURS:NCYC 1" | nc pc10773 5555 + #echo $CLI" BURS:NCYC 1" | nc pc10773 5555 + (echo BURS:NCYC 1) | nc -t $HOST 5000 sleep 0.2 # external trigger source - echo $CLI" TRIG:SOUR EXT" | nc pc10773 5555 + #echo $CLI" TRIG:SOUR EXT" | nc pc10773 5555 + (echo TRIG:SOUR EXT) | nc -t $HOST 5000 sleep 0.2 # delay 1 us - echo $CLI" TRIG:DEL 0.000001" | nc pc10773 5555 - + #echo $CLI" TRIG:DEL 0.000001" | nc pc10773 5555 + (echo TRIG:DEL 0.000001) | nc -t $HOST 5000 + sleep 0.2 # delay 40 us #echo $CLI" TRIG:DEL 0.000040" | nc pc10773 5555 - sleep 0.2 + #sleep 0.2 # slope positive - echo $CLI" TRIG:SLOP POS" | nc pc10773 5555 + #echo $CLI" TRIG:SLOP POS" | nc pc10773 5555 + (echo TRIG:SLOP POS) | nc -t $HOST 5000 sleep 0.2 # turn on burst mode - echo $CLI" BURS:STAT ON" | nc pc10773 5555 + #echo $CLI" BURS:STAT ON" | nc pc10773 5555 + (echo BURS:STAT ON) | nc -t $HOST 5000 + sleep 0.2 + + (echo VOLT:HIGH 0.02) | nc -t $HOST 5000 sleep 0.2 if [ "$1" == 'Y' ]; then @@ -140,7 +161,8 @@ if [ ! -v $1 ]; then # high voltage # sls_detector_put highvoltage 200 #because it seemed more stable, we are using external HV 230V # output on - echo $CLI" OUTP ON" | nc pc10773 5555 + #echo $CLI" OUTP ON" | nc pc10773 5555 + (echo OUTP ON) | nc -t $HOST 5000 sleep 0.2 if [ "$1" == 'Y' ]; then @@ -155,6 +177,15 @@ if [ ! -v $1 ]; then fi fi + sls_detector_put frames 20000 + sls_detector_put start + sleep 110 + + sls_detector_put stop + + sls_detector_put triggers 1 + sls_detector_put frames 100 + $TKBPG0 & sleep 1 @@ -162,7 +193,8 @@ if [ ! -v $1 ]; then for ivpulse in {10..1000..10} do vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l)) - echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555 + #echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555 + (echo VOLT:HIGH $vpulse) | nc -t $HOST 5000 sleep 1 sls_detector_put start sleep 1 @@ -172,7 +204,8 @@ if [ ! -v $1 ]; then for ivpulse in {1050..6000..50} do vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l)) - echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555 + #echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555 + (echo VOLT:HIGH $vpulse) | nc -t $HOST 5000 sleep 1 sls_detector_put start sleep 1 @@ -180,7 +213,8 @@ if [ ! -v $1 ]; then # Kill receiver sls_detector_put stop - echo $CLI" VOLT:HIGH 0.010" | nc pc10773 5555 + #echo $CLI" VOLT:HIGH 0.010" | nc pc10773 5555 + (echo VOLT:HIGH 0.010) | nc -t $HOST 5000 sleep 20 $KILLRCV @@ -201,7 +235,8 @@ if [ ! -v $1 ]; then do vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l)) - echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555 + #echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555 + (echo VOLT:HIGH $vpulse) | nc -t $HOST 5000 sleep 1 sls_detector_put start sleep 1 @@ -210,7 +245,8 @@ if [ ! -v $1 ]; then for ivpulse in {1050..6000..50} do vpulse=$(printf %.3f $(echo "$ivpulse/1000" | bc -l)) - echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555 + #echo $CLI" VOLT:HIGH "$vpulse | nc pc10773 5555 + (echo VOLT:HIGH $vpulse) | nc -t $HOST 5000 sleep 1 sls_detector_put start sleep 1 @@ -221,11 +257,12 @@ if [ ! -v $1 ]; then # high voltage # sls_detector_put highvoltage 0 # output off - echo $CLI" OUTP OFF " | nc pc10773 5555 - + #echo $CLI" OUTP OFF " | nc pc10773 5555 + (echo OUTP OFF) | nc -t $HOST 5000 $KILLRCV echo "Finished scan, please wait for capacitor to discharge" + sls_detector_put dac vb_comp 1220 sleep 20 echo "It is now safe to disconnect the cable between the amplifier board and the readout board" echo "Script finished" diff --git a/CS_analysis.cpp b/CS_analysis.cpp index ffed718..8e04d24 100644 --- a/CS_analysis.cpp +++ b/CS_analysis.cpp @@ -688,7 +688,115 @@ cout << " G0->G1->G2 sequence - dynamicG0" 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 ZBPmR}Tur0tp?@qgQ}z;6Hm literal 199168 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 diff --git a/CS_analysis_M431.cpp b/CS_analysis_M431.cpp index c09e4a5..26f8cf8 100644 --- a/CS_analysis_M431.cpp +++ b/CS_analysis_M431.cpp @@ -556,6 +556,7 @@ cout << " G0->G1->G2 sequence - dynamicG0" <>>>>>> refs/remotes/origin/master scan_v6.push_back("578"); //jfcalib-0 scan_v6.push_back("578_fullspeed"); //jfcalib-0 scan_v6.push_back("588"); //jfcalib-2 @@ -677,10 +674,7 @@ int main(int argc, char* argv[]) { scan_v6.push_back("589"); //jfcalib-5 scan_v6.push_back("589_fullspeed"); //jfcalib-5 -<<<<<<< HEAD -======= ->>>>>>> refs/remotes/origin/master scan_v6.push_back("586"); //jfcalib-0 scan_v6.push_back("586_fullspeed"); //jfcalib-0 scan_v6.push_back("607"); //jfcalib-1 @@ -689,7 +683,6 @@ int main(int argc, char* argv[]) { scan_v6.push_back("609_fullspeed"); //jfcalib-2 scan_v6.push_back("625"); //jfcalib-3 scan_v6.push_back("625_fullspeed"); //jfcalib-3 -<<<<<<< HEAD scan_v6.push_back("626"); //jfcalib-4 scan_v6.push_back("626_fullspeed"); //jfcalib-4 @@ -720,11 +713,109 @@ int main(int argc, char* argv[]) { scan_v6.push_back("604"); //jfcalib-4 scan_v6.push_back("604_fullspeed"); //jfcalib-4 scan_v6.push_back("701_Vadym"); -======= scan_v6.push_back("526"); //jfcalib-4 scan_v6.push_back("526_fullspeed"); //jfcalib-4 ->>>>>>> refs/remotes/origin/master + + scan_v6.push_back("643"); //jfcalib-0 + scan_v6.push_back("643_fullspeed"); //jfcalib-0 + scan_v6.push_back("644"); //jfcalib-1 + scan_v6.push_back("644_fullspeed"); //jfcalib-1 + scan_v6.push_back("645"); //jfcalib-2 + scan_v6.push_back("645_fullspeed"); //jfcalib-2 + scan_v6.push_back("646"); //jfcalib-3 + scan_v6.push_back("646_fullspeed"); //jfcalib-3 + scan_v6.push_back("665"); //jfcalib-4 + scan_v6.push_back("665_fullspeed"); //jfcalib-4 + scan_v6.push_back("570"); //jfcalib-5 + scan_v6.push_back("570_fullspeed"); //jfcalib-5 + + + scan_v6.push_back("666"); //jfcalib-0 + scan_v6.push_back("666_fullspeed"); //jfcalib-0 + scan_v6.push_back("667"); //jfcalib-1 + scan_v6.push_back("667_fullspeed"); //jfcalib-1 + scan_v6.push_back("668"); //jfcalib-2 + scan_v6.push_back("668_fullspeed"); //jfcalib-2 + scan_v6.push_back("669"); //jfcalib-3 + scan_v6.push_back("669_fullspeed"); //jfcalib-3 + scan_v6.push_back("670"); //jfcalib-4 + scan_v6.push_back("670_fullspeed"); //jfcalib-4 + + scan_v6.push_back("412"); //jfcalib-2 + scan_v6.push_back("412_fullspeed"); //jfcalib-2 + scan_v6.push_back("424"); //jfcalib-3 + scan_v6.push_back("424_fullspeed"); //jfcalib-3 + scan_v6.push_back("475"); //jfcalib-4 + scan_v6.push_back("475_fullspeed"); //jfcalib-4 + scan_v6.push_back("413"); //jfcalib-5 + scan_v6.push_back("413_fullspeed"); //jfcalib-5 + + scan_v6.push_back("636"); //jfcalib-0 + scan_v6.push_back("636_fullspeed"); //jfcalib-0 + scan_v6.push_back("637"); //jfcalib-1 + scan_v6.push_back("637_fullspeed"); //jfcalib-1 + scan_v6.push_back("638"); //jfcalib-2 + scan_v6.push_back("638_fullspeed"); //jfcalib-2 + scan_v6.push_back("639"); //jfcalib-3 + scan_v6.push_back("639_fullspeed"); //jfcalib-3 + scan_v6.push_back("640"); //jfcalib-4 + scan_v6.push_back("640_fullspeed"); //jfcalib-4 + scan_v6.push_back("641"); //jfcalib-5 + scan_v6.push_back("641_fullspeed"); //jfcalib-5 + + scan_v6.push_back("649"); //jfcalib-0 + scan_v6.push_back("649_fullspeed"); //jfcalib-0 + scan_v6.push_back("650"); //jfcalib-1 + scan_v6.push_back("650_fullspeed"); //jfcalib-1 + scan_v6.push_back("651"); //jfcalib-2 + scan_v6.push_back("651_fullspeed"); //jfcalib-2 + scan_v6.push_back("652"); //jfcalib-3 + scan_v6.push_back("652_fullspeed"); //jfcalib-3 + scan_v6.push_back("653"); //jfcalib-4 + scan_v6.push_back("653_fullspeed"); //jfcalib-4 + scan_v6.push_back("686"); //jfcalib-5 + scan_v6.push_back("686_fullspeed"); //jfcalib-5 + + scan_v6.push_back("687"); //jfcalib-0 + scan_v6.push_back("687_fullspeed"); //jfcalib-0 + scan_v6.push_back("693"); //jfcalib-1 + scan_v6.push_back("693_fullspeed"); //jfcalib-1 + scan_v6.push_back("695"); //jfcalib-2 + scan_v6.push_back("695_fullspeed"); //jfcalib-2 + scan_v6.push_back("696"); //jfcalib-3 + scan_v6.push_back("696_fullspeed"); //jfcalib-3 + scan_v6.push_back("697"); //jfcalib-4 + scan_v6.push_back("697_fullspeed"); //jfcalib-4 + scan_v6.push_back("699"); //jfcalib-5 + scan_v6.push_back("699_fullspeed"); //jfcalib-5 + + scan_v6.push_back("698"); //jfcalib-0 + scan_v6.push_back("698_fullspeed"); //jfcalib-0 + scan_v6.push_back("703"); //jfcalib-1 + scan_v6.push_back("703_fullspeed"); //jfcalib-1 + scan_v6.push_back("704"); //jfcalib-2 + scan_v6.push_back("704_fullspeed"); //jfcalib-2 + scan_v6.push_back("708"); //jfcalib-3 + scan_v6.push_back("708_fullspeed"); //jfcalib-3 + scan_v6.push_back("709"); //jfcalib-4 + scan_v6.push_back("709_fullspeed"); //jfcalib-4 + scan_v6.push_back("744"); //jfcalib-5 + scan_v6.push_back("744_fullspeed"); //jfcalib-5 + + scan_v6.push_back("735"); //jfcalib-0 + scan_v6.push_back("741"); //jfcalib-1 + scan_v6.push_back("742"); //jfcalib-2 + scan_v6.push_back("743"); //jfcalib-3 + scan_v6.push_back("745"); //jfcalib-4 + scan_v6.push_back("746"); //jfcalib-5 + + scan_v6.push_back("748"); //jfcalib-0 + scan_v6.push_back("750"); //jfcalib-1 + scan_v6.push_back("751"); //jfcalib-2 + scan_v6.push_back("752"); //jfcalib-3 + scan_v6.push_back("753"); //jfcalib-4 + scan_v6.push_back("784"); //jfcalib-5 diff --git a/CS_scan.sh b/CS_scan.sh index ef2d032..09987f9 100644 --- a/CS_scan.sh +++ b/CS_scan.sh @@ -15,172 +15,186 @@ KILLRCV="killall ju_udp_receiver_3threads_2_0" $KILLRCV -sls_detector_put stop #just in case -sls_detector_put powerchip 1 +if [[ "$0" == *"CS_scan.sh"* ]]; then + echo "script changes env. variables: should be invoked with source, not sh " + exit +fi + +if [ ! -v $1 & ! -v $2 ]; then + echo $0 + echo "Readout speed is" $2 + echo "printing filenames for module" $1 + ROBspeed=$2 + if [[ "$2" == "full_speed" ]]; then + source filename_creator.sh $1"_fullspeed" N + + elif [[ "$2" == "half_speed" ]]; then + source filename_creator.sh $1 N + else + echo "Readout speed has to be specified as half_speed or full_speed" + exit + fi + + sls_detector_put stop #just in case + sls_detector_put powerchip 1 -sls_detector_put frames 640 -sls_detector_put period 0.005 -sls_detector_put exptime 0.000010 -sls_detector_put highvoltage 200 #200 + sls_detector_put frames 640 + sls_detector_put period 0.005 + sls_detector_put exptime 0.000010 + sls_detector_put highvoltage 200 #200 -# configure for receiver on pc-jungfrau-01/pc-jungfrau-02/pc-jungfrau-test -# source pccalib.sh [pc] (pc-jungfrau-01/pc-jungfrau-02/pc-jungfrau-test) -sls_detector_put udp_dstport 32410 -sls_detector_put udp_dstip $DSTIP #10.1.4.105 -sls_detector_put udp_dstmac $DSTMAC #3C:FD:FE:A2:14:D8 -sls_detector_put udp_srcip $SRCIP #10.1.4.9 -sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2 + # configure for receiver on pc-jungfrau-01/pc-jungfrau-02/pc-jungfrau-test + # source pccalib.sh [pc] (pc-jungfrau-01/pc-jungfrau-02/pc-jungfrau-test) -sls_detector_put readoutspeed half_speed -#sls_detector_put readoutspeed full_speed -#sls_detector_put dbitphase 125 + sls_detector_put udp_dstport 32410 + sls_detector_put udp_dstip $DSTIP #10.1.4.105 + sls_detector_put udp_dstmac $DSTMAC #3C:FD:FE:A2:14:D8 + sls_detector_put udp_srcip $SRCIP #10.1.4.9 + sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2 -sleep 3 + sls_detector_put readoutspeed $ROBspeed + #sls_detector_put readoutspeed full_speed + #sls_detector_put dbitphase 125 + + sleep 3 -sls_detector_put frames 10000 -sls_detector_put start -sleep 70 -sls_detector_put stop -sls_detector_put frames 640 + sls_detector_put frames 10000 + sls_detector_put start + sleep 70 + sls_detector_put stop + sls_detector_put frames 640 -$TKCSG0 & -sleep 3 + $TKCSG0 & + sleep 3 -echo "recording G0 pede" -sls_detector_put start -sleep 4 + echo "recording G0 pede" + sls_detector_put start + sleep 4 + echo "recording G1 pede" + sls_detector_put gainmode forceswitchg1 + sls_detector_put start + sleep 4 -echo "recording G1 pede" -sls_detector_put gainmode forceswitchg1 -sls_detector_put start -sleep 4 + echo "recording G2 pede" + sls_detector_put gainmode forceswitchg2 + sls_detector_put start + sleep 4 + sls_detector_put gainmode dynamic -echo "recording G2 pede" -sls_detector_put gainmode forceswitchg2 -sls_detector_put start -sleep 4 + # turn on current source + # bit 16 high bit 17 low = automatic cal col sweep + # bit 16 high bit 17 high = cal col selected with bits 26-20 + sls_detector_put currentsource 1 nofix 0 + sleep 1 -sls_detector_put gainmode dynamic + # loop 1 + for tint in {50..450..50} # 25 is too small here, 50 min + do + tint_sec=$(printf %.9f $(echo "$tint/1000000000" | bc -l)) + echo "setting integration time to (s) " $tint_sec + sls_detector_put exptime $tint_sec + sls_detector_put start + sleep 4 + done + # loop 2a + for tint in {50..100..5} + do + tint_sec=$(printf %.8f $(echo "$tint/100000000" | bc -l)) + echo "setting integration time to (s) " $tint_sec + sls_detector_put exptime $tint_sec + sls_detector_put start + sleep 4 + done -# turn on current source -# bit 16 high bit 17 low = automatic cal col sweep -# bit 16 high bit 17 high = cal col selected with bits 26-20 -sls_detector_put currentsource 1 nofix 0 + # loop 2b + for tint in {110..200..10} + do + tint_sec=$(printf %.8f $(echo "$tint/100000000" | bc -l)) + echo "setting integration time to (s) " $tint_sec + sls_detector_put exptime $tint_sec + sls_detector_put start + sleep 4 + done -sleep 1 + # loop 2c + for tint in {225..450..25} + do + tint_sec=$(printf %.8f $(echo "$tint/100000000" | bc -l)) + echo "setting integration time to (s) " $tint_sec + sls_detector_put exptime $tint_sec + sls_detector_put start + sleep 4 + done + # loop 3a + for tint in {50..100..5} + do + tint_sec=$(printf %.7f $(echo "$tint/10000000" | bc -l)) + echo "setting integration time to (s) " $tint_sec + sls_detector_put exptime $tint_sec + sls_detector_put start + sleep 4 + done -# loop 1 -for tint in {50..450..50} # 25 is too small here, 50 min -do -tint_sec=$(printf %.9f $(echo "$tint/1000000000" | bc -l)) -echo "setting integration time to (s) " $tint_sec -sls_detector_put exptime $tint_sec -sls_detector_put start -sleep 4 -done + # loop 3b + for tint in {110..200..10} + do + tint_sec=$(printf %.7f $(echo "$tint/10000000" | bc -l)) + echo "setting integration time to (s) " $tint_sec + sls_detector_put exptime $tint_sec + sls_detector_put start + sleep 4 + done + # loop 3c + for tint in {225..450..25} + do + tint_sec=$(printf %.7f $(echo "$tint/10000000" | bc -l)) + echo "setting integration time to (s) " $tint_sec + sls_detector_put exptime $tint_sec + sls_detector_put start + sleep 4 + done -# loop 2a -for tint in {50..100..5} -do -tint_sec=$(printf %.8f $(echo "$tint/100000000" | bc -l)) -echo "setting integration time to (s) " $tint_sec -sls_detector_put exptime $tint_sec -sls_detector_put start -sleep 4 -done + # loop 4a + for tint in {50..100..5} + do + tint_sec=$(printf %.7f $(echo "$tint/1000000" | bc -l)) + echo "setting integration time to (s) " $tint_sec + sls_detector_put exptime $tint_sec + sls_detector_put start + sleep 4 + done + # loop 4b + for tint in {110..250..10} + do + tint_sec=$(printf %.7f $(echo "$tint/1000000" | bc -l)) + echo "setting integration time to (s) " $tint_sec + sls_detector_put exptime $tint_sec + sls_detector_put start + sleep 4 + done -# loop 2b -for tint in {110..200..10} -do -tint_sec=$(printf %.8f $(echo "$tint/100000000" | bc -l)) -echo "setting integration time to (s) " $tint_sec -sls_detector_put exptime $tint_sec -sls_detector_put start -sleep 4 -done - - -# loop 2c -for tint in {225..450..25} -do -tint_sec=$(printf %.8f $(echo "$tint/100000000" | bc -l)) -echo "setting integration time to (s) " $tint_sec -sls_detector_put exptime $tint_sec -sls_detector_put start -sleep 4 -done - - -# loop 3a -for tint in {50..100..5} -do -tint_sec=$(printf %.7f $(echo "$tint/10000000" | bc -l)) -echo "setting integration time to (s) " $tint_sec -sls_detector_put exptime $tint_sec -sls_detector_put start -sleep 4 -done - - -# loop 3b -for tint in {110..200..10} -do -tint_sec=$(printf %.7f $(echo "$tint/10000000" | bc -l)) -echo "setting integration time to (s) " $tint_sec -sls_detector_put exptime $tint_sec -sls_detector_put start -sleep 4 -done - - -# loop 3c -for tint in {225..450..25} -do -tint_sec=$(printf %.7f $(echo "$tint/10000000" | bc -l)) -echo "setting integration time to (s) " $tint_sec -sls_detector_put exptime $tint_sec -sls_detector_put start -sleep 4 -done - - -# loop 4a -for tint in {50..100..5} -do -tint_sec=$(printf %.7f $(echo "$tint/1000000" | bc -l)) -echo "setting integration time to (s) " $tint_sec -sls_detector_put exptime $tint_sec -sls_detector_put start -sleep 4 -done - - -# loop 4b -for tint in {110..250..10} -do -tint_sec=$(printf %.7f $(echo "$tint/1000000" | bc -l)) -echo "setting integration time to (s) " $tint_sec -sls_detector_put exptime $tint_sec -sls_detector_put start -sleep 4 -done - - -echo "Finished scan" -sls_detector_put exptime 0.000010 -sls_detector_put period 0.002 -sls_detector_put frames 1000000 -sls_detector_put currentsource 0 -sls_detector_put highvoltage 0 -echo "Script finished" -sleep 4 -$KILLRCV + echo "Finished scan" + sls_detector_put exptime 0.000010 + sls_detector_put period 0.002 + sls_detector_put frames 1000000 + sls_detector_put currentsource 0 + sls_detector_put highvoltage 0 + sls_detector_put readoutspeed half_speed + echo "Script finished" + sleep 4 + $KILLRCV + +else + echo "Specify module number as a first argument" + echo "Specify readout_speed as a second argument:half_speed or full_speed" + echo "Script finished" +fi diff --git a/CS_scan_both_speeds.sh b/CS_scan_both_speeds.sh index e26c9d7..1a845c3 100644 --- a/CS_scan_both_speeds.sh +++ b/CS_scan_both_speeds.sh @@ -48,6 +48,7 @@ if [ ! -v $1 ]; then sls_detector_put readoutspeed half_speed #sls_detector_put readoutspeed full_speed #sls_detector_put dbitphase 125 + sls_detector_put dac vb_comp 1100 sleep 3 @@ -337,6 +338,7 @@ if [ ! -v $1 ]; then sls_detector_put frames 1000000 sls_detector_put currentsource 0 sls_detector_put highvoltage 0 + sls_detector_put dac vb_comp 1220 echo "Script finished" sleep 4 $KILLRCV diff --git a/CuFluo_exposure.sh b/CuFluo_exposure.sh index a7d209a..db7b19c 100644 --- a/CuFluo_exposure.sh +++ b/CuFluo_exposure.sh @@ -11,129 +11,158 @@ # - source pccalib.sh [pc] (mpc2012/pc-jungfrau-test) # - xray tube is on and ramped for 40 kV, 60 mA, set to Cu -shutter=1 +shutter=1 # for big X-ray box +# shutter=3 # for small X-ray box -sls_detector_put stop #just in case - -sls_detector_put powerchip 1 - - -sls_detector_put period 0.002 -sls_detector_put exptime 0.000010 -sls_detector_put highvoltage 200 #200 - -# configure for receiver on mpc2012/pc-jungfrau-test/mpc2198/mpc3282 -# source pccalib.sh [pc] (mpc2012/pc-jungfrau-test/mpc2198/mpc3282) - -sls_detector_put udp_dstport 32410 -sls_detector_put udp_dstip $DSTIP #10.1.4.105 -sls_detector_put udp_dstmac $DSTMAC #3C:FD:FE:A2:14:D8 -sls_detector_put udp_srcip $SRCIP #10.1.4.9 -sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2 - - -#sls_detector_put readoutspeed half_speed -sls_detector_put readoutspeed full_speed -#sls_detector_put reg 0x59 0x1310 #0001 0011 0001 0000 - -#sls_detector_put readoutspeed 0 -#sls_detector_put reg 0x59 0x0100 #0000 0001 0000 0000 - KILLRCV="killall ju_udp_receiver_3threads_2_0" $KILLRCV -#CLI=/afs/psi.ch/project/sls_det_software/bin/sl7_binaries_to_be_removed_soon/xrayClient_sl7 -CLI=/afs/psi.ch/project/sls_det_software/bin/xrayClient_sl8 #/vacuumClient_sl7 -$CLI setv 40 -$CLI setc 60 -$CLI HV on +if [[ "$0" == *"BP_scan.sh"* ]]; then + echo "script changes env. variables: should be invoked with source, not sh " + exit +fi -sls_detector_put clearbit 0x5d 0 +if [ ! -v $1 & ! -v $2 ]; then + echo $0 + echo "Readout speed is" $2 + echo "printing filenames for module" $1 + ROBspeed=$2 + + if [[ "$2" == "full_speed" ]]; then + source filename_creator.sh $1"_fullspeed" Y + elif [[ "$2" == "half_speed" ]]; then + source filename_creator.sh $1 Y + else + echo "Readout speed has to be specified as half_speed or full_speed" + exit + fi -$CLI shutter $shutter off #$CLI shutter 1 off -echo "warmin up the board" -sls_detector_put frames 40000 -sls_detector_put start -sleep 81 -sls_detector_put stop + sls_detector_put stop #just in case -echo "end of board warm up" + sls_detector_put powerchip 1 -sls_detector_put frames 1000 -$KILLRCV -sleep 1 -$TKPG0 & -sleep 2 -echo "recording G0 pede" -sls_detector_put start -sleep 3 -# 1000 frames at 500 frames per second takes 2s + # JF1.2 to fix saturation issue in HG0 + # sls_detector_put defaultdac vref_comp 420 highgain0 + # sls_detector_put setbit 0x58 18 + # End JF1.2 -echo "recording G1 pede" -sls_detector_put gainmode forceswitchg1 -sls_detector_put start -sleep 3 + sls_detector_put period 0.002 + sls_detector_put exptime 0.000010 + sls_detector_put highvoltage 200 #200 -echo "recording G2 pede" -sls_detector_put gainmode forceswitchg2 -sls_detector_put start -sleep 3 + # configure for receiver on mpc2012/pc-jungfrau-test/mpc2198/mpc3282 + # source pccalib.sh [pc] (mpc2012/pc-jungfrau-test/mpc2198/mpc3282) -sls_detector_put gainmode dynamic + sls_detector_put udp_dstport 32410 + sls_detector_put udp_dstip $DSTIP #10.1.4.105 + sls_detector_put udp_dstmac $DSTMAC #3C:FD:FE:A2:14:D8 + sls_detector_put udp_srcip $SRCIP #10.1.4.9 + sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2 -$KILLRCV -echo "closed G0 pede file and open the G0 CuFluo file" -sleep 1 -$TKFG0 & -sleep 3 + sls_detector_put readoutspeed $ROBspeed -sls_detector_put frames 230000 -$CLI shutter $shutter on #$CLI shutter 1 on -sleep 1 -sls_detector_put start -sleep 470 -# 200k frames at 500 frames per second takes 400s -$CLI shutter $shutter off #$CLI shutter 1 off + #sls_detector_put readoutspeed full_speed + #sls_detector_put reg 0x59 0x1310 #0001 0011 0001 0000 -$KILLRCV -echo "closed G0 CuFluo file and open HG0 pede file" -sleep 1 -$TKPHG0 & -sleep 3 + #sls_detector_put readoutspeed 0 + #sls_detector_put reg 0x59 0x0100 #0000 0001 0000 0000 -sls_detector_put settings highgain0 + #CLI=/afs/psi.ch/project/sls_det_software/bin/sl7_binaries_to_be_removed_soon/xrayClient_sl7 + CLI=/afs/psi.ch/project/sls_det_software/bin/xrayClient_sl8 #/vacuumClient_sl7 + # CLI=/afs/psi.ch/project/sls_det_software/bin/vacuumClient_sl8 # for small X-ray box -sls_detector_put frames 1000 + $CLI setv 60 + $CLI setc 40 # for big X-ray box -echo "recording HG0 pede" + # $CLI setc 55 # for small X-ray box + $CLI HV on -sls_detector_put start -sleep 3 -# 1000 frames at 500 frames per second takes 2s + sls_detector_put clearbit 0x5d 0 -$KILLRCV -echo "closed HG0 pede file and open the HG0 CuFluo file" -sleep 1 + $CLI shutter $shutter off #$CLI shutter 1 off + echo "warmin up the board" + sls_detector_put frames 40000 + sls_detector_put start + sleep 81 + sls_detector_put stop -$TKFHG0 & -sleep 3 + echo "end of board warm up" + # : ' # Uncomment to skip a G0 part + sls_detector_put frames 1000 + $KILLRCV + sleep 1 + $TKPG0 & + sleep 2 + echo "recording G0 pede" + sls_detector_put start + sleep 3 + # 1000 frames at 500 frames per second takes 2s -sls_detector_put frames 230000 + echo "recording G1 pede" + sls_detector_put gainmode forceswitchg1 + sls_detector_put start + sleep 3 -$CLI shutter $shutter on #$CLI shutter 1 on -sleep 1 + echo "recording G2 pede" + sls_detector_put gainmode forceswitchg2 + sls_detector_put start + sleep 3 -sls_detector_put start -sleep 470 -# 200k frames at 500 frames per second takes 400s + sls_detector_put gainmode dynamic + $KILLRCV + echo "closed G0 pede file and open the G0 CuFluo file" + sleep 1 + $TKFG0 & + sleep 3 + sls_detector_put frames 220000 + $CLI shutter $shutter on #$CLI shutter 1 on + sleep 1 + sls_detector_put start + sleep 450 -$CLI shutter $shutter off #$CLI shutter 1 off + # 200k frames at 500 frames per second takes 400s + $CLI shutter $shutter off #$CLI shutter 1 off + # ' # Uncomment to skip a G0 part + $KILLRCV + echo "closed G0 CuFluo file and open HG0 pede file" + sleep 1 + $TKPHG0 & + sleep 3 -$KILLRCV + sls_detector_put settings highgain0 + sls_detector_put frames 1000 -sls_detector_put highvoltage 0 + echo "recording HG0 pede" + sls_detector_put start + sleep 3 + # 1000 frames at 500 frames per second takes 2s + $KILLRCV + echo "closed HG0 pede file and open the HG0 CuFluo file" + sleep 1 -echo "Script finished" + $TKFHG0 & + sleep 3 + + sls_detector_put frames 220000 + $CLI shutter $shutter on #$CLI shutter 1 on + sleep 1 + + sls_detector_put start + sleep 450 + + # 200k frames at 500 frames per second takes 400s + $CLI shutter $shutter off #$CLI shutter 1 off + $KILLRCV + + sls_detector_put highvoltage 0 + sls_detector_put readoutspeed half_speed + echo "Script finished" + +else + echo "Specify module number as a first argument" + echo "Specify readout_speed as a second argument:half_speed,full_speed" + echo "Script finished" +fi diff --git a/CuFluo_exposure_JF11.sh b/CuFluo_exposure_JF11.sh index facca4c..2d35fa8 100644 --- a/CuFluo_exposure_JF11.sh +++ b/CuFluo_exposure_JF11.sh @@ -54,9 +54,9 @@ sls_detector_put reg 0x7f 0xff1f -CLI=/afs/psi.ch/project/sls_det_software/bin/xrayClient_sl7 -$CLI setv 40 -$CLI setc 60 +CLI=/afs/psi.ch/project/sls_det_software/bin/xrayClient_sl8 +$CLI setv 60 +$CLI setc 40 $CLI HV on diff --git a/CuFluo_exposure_both_speeds.sh b/CuFluo_exposure_both_speeds.sh index 7a58a34..7ff0a32 100644 --- a/CuFluo_exposure_both_speeds.sh +++ b/CuFluo_exposure_both_speeds.sh @@ -55,16 +55,17 @@ if [ ! -v $1 ]; then #CLI=/afs/psi.ch/project/sls_det_software/bin/sl7_binaries_to_be_removed_soon/xrayClient_sl7 #/vacuumClient_sl7 CLI=/afs/psi.ch/project/sls_det_software/bin/xrayClient_sl8 #/vacuumClient_sl7 - $CLI setv 40 - $CLI setc 60 + $CLI setv 60 + $CLI setc 40 $CLI HV on sls_detector_put clearbit 0x5d 0 #sls_detector_put vref_prech 1000 #sls_detector_put vref_ds 1100 - + sls_detector_put dac vb_comp 1100 $CLI shutter $shutter off #$CLI shutter 1 off + $CLI shutter $shutter on #$CLI shutter 1 on echo "warmin up the board" sls_detector_put frames 40000 sls_detector_put start @@ -72,6 +73,7 @@ if [ ! -v $1 ]; then sls_detector_put stop echo "end of board warm up" + $CLI shutter $shutter off #$CLI shutter 1 off sls_detector_put frames 1000 $KILLRCV @@ -101,9 +103,10 @@ if [ ! -v $1 ]; then $TKFG0 & sleep 5 - sls_detector_put frames 230000 - $CLI shutter $shutter on #$CLI shutter 1 on - sleep 1 + sls_detector_put frames 220000 + + $CLI shutter $shutter on #$CLI shutter 1 off + sleep 2 sls_detector_put start sleep 470 # 200k frames at 500 frames per second takes 400s @@ -116,6 +119,7 @@ if [ ! -v $1 ]; then $TKPHG0 & sleep 3 sls_detector_put settings highgain0 + sls_detector_put dac vb_comp 1100 #sls_detector_put vref_prech 1000 #sls_detector_put vref_ds 1100 sls_detector_put frames 1000 @@ -132,7 +136,7 @@ if [ ! -v $1 ]; then $TKFHG0 & sleep 5 - sls_detector_put frames 230000 + sls_detector_put frames 220000 $CLI shutter $shutter on #$CLI shutter 1 on sleep 1 sls_detector_put start @@ -155,7 +159,8 @@ if [ ! -v $1 ]; then sls_detector_put clearbit 0x5d 0 #sls_detector_put vref_prech 1000 #sls_detector_put vref_ds 1100 - + sls_detector_put dac vb_comp 1100 + sls_detector_put frames 1000 $TKPG0 & sleep 5 @@ -182,7 +187,7 @@ if [ ! -v $1 ]; then $TKFG0 & sleep 5 - sls_detector_put frames 230000 + sls_detector_put frames 220000 $CLI shutter $shutter on #$CLI shutter 1 on sleep 1 sls_detector_put start @@ -197,6 +202,7 @@ if [ ! -v $1 ]; then $TKPHG0 & sleep 5 sls_detector_put settings highgain0 + sls_detector_put dac vb_comp 1100 #sls_detector_put vref_prech 1000 #sls_detector_put vref_ds 1100 @@ -214,7 +220,7 @@ if [ ! -v $1 ]; then $TKFHG0 & sleep 5 - sls_detector_put frames 230000 + sls_detector_put frames 220000 $CLI shutter $shutter on #$CLI shutter 1 on sleep 1 sls_detector_put start @@ -228,7 +234,7 @@ if [ ! -v $1 ]; then sls_detector_put highvoltage 0 sls_detector_put clearbit 0x5d 0 - + sls_detector_put dac vb_comp 1220 echo "Script finished" diff --git a/CuFluo_exposure_sc.sh b/CuFluo_exposure_sc.sh index 7c48707..e894d84 100644 --- a/CuFluo_exposure_sc.sh +++ b/CuFluo_exposure_sc.sh @@ -9,6 +9,28 @@ # - detector is on # - xray tube is on and ramped for 40 kV, 60 mA, set to Cu +KILLRCV="killall ju_udp_receiver_3threads_2_0" +$KILLRCV + +if [[ "$0" == *"CuFluo_exposure_sc.sh"* ]]; then + echo "script changes env. variables: should be invoked with source, not sh " + exit + +fi + + +if [ ! -v $1 ]; then + echo $0 + echo "printing filenames for module " $1 + + source filename_creator.sh $1 N + +else + echo "Make sure you source filename_creator.sh file name" +fi + +shutter=1 + sls_detector_put stop #just in case sls_detector_put powerchip 1 @@ -16,7 +38,7 @@ sls_detector_put powerchip 1 #Effective SC period = sc_delay + exptime + 2.1us (reset preamp and CDS) #Frame period = effective SC period *16 + 840 us * 16 = 14 ms (for readout) -sls_detector_put period 0.1 #0.03 #0.002 +sls_detector_put period 0.03 #0.017 #0.1 #0.03 #0.002 sls_detector_put exptime 0.000010 #0.000010 sls_detector_put extrastoragecells 15 sls_detector_put storagecell_start 0 @@ -36,47 +58,48 @@ sls_detector_put readoutspeed half_speed #sls_detector_put readoutspeed 0 #sls_detector_put reg 0x59 0x0100 #0000 0001 0000 0000 -KILLRCV="killall ju_udp_receiver_3threads_2_0" -$KILLRCV -CLI=/afs/psi.ch/project/sls_det_software/bin/xrayClient_sl7 -$CLI setv 40 -$CLI setc 60 +CLI=/afs/psi.ch/project/sls_det_software/bin/xrayClient_sl8 #/vacuumClient_sl7 +$CLI setv 60 +$CLI setc 40 $CLI HV on sls_detector_put clearbit 0x5d 0 -$CLI shutter 1 off +$CLI shutter $shutter off #$CLI shutter 1 off +$CLI shutter $shutter on #$CLI shutter 1 on + echo "warmin up the board" -sls_detector_put frames 2500 #40000 +sls_detector_put frames 3500 #40000 sls_detector_put start -sleep 260 #81 # 2500 * 100ms = 250s # 2500 * 30ms = 75s # 2500 * 20 ms = 50s +sleep 110 #80 #81 # 2500 * 100ms = 250s # 2500 * 30ms = 75s # 2500 * 20 ms = 50s sls_detector_put stop echo "end of board warm up" +$CLI shutter $shutter off #$CLI shutter 1 off sls_detector_put frames 1000 $KILLRCV -sleep 10 #1 +sleep 10 #10 #1 $TKPG0 & - +sleep 5 echo "recording G0 pede" sls_detector_put start -sleep 105 #35 +sleep 32 #25 #105 #35 # 1000 frames (per sc) at 10 frames per second (period 100ms) takes 100s # 1000 frames (per sc) at 34 frames per second (period 30ms) takes 35s echo "recording G0 pede" #sls_detector_put gainmode forceswitchg1 #consumes too much power sls_detector_put start -sleep 105 #35 +sleep 32 #25 #105 #35 echo "recording G0 pede" #sls_detector_put gainmode forceswitchg2 #consumes too much power sls_detector_put start -sleep 105 #35 +sleep 32 #25 #105 #35 sls_detector_put gainmode dynamic @@ -91,18 +114,20 @@ sls_detector_put frames 220000 $CLI shutter 1 on sleep 10 #1 sls_detector_put start -sleep 22010 #6800 +sleep 6800 #3900 #22010 #6800 # 220k frames (per sc) at 10 frames per second (period 10ms) takes 22000s (6h 7min) # 220k frames (per sc) at 34 frames per second (period 30ms) takes 6600s (1h 50min) -$CLI shutter 1 off +$CLI shutter $shutter off #$CLI shutter 1 off #We are not interested in HG0 - #$KILLRCV #echo "closed G0 CuFluo file and open HG0 pede file" #sleep 1 #$TKPHG0 & +#sleep 5 +#sls_detector_put clearbit 0x5d 0 +#sls_detector_put period 0.002 #sls_detector_put settings highgain0 @@ -118,21 +143,24 @@ $CLI shutter 1 off #echo "closed HG0 pede file and open the HG0 CuFluo file" #sleep 1 #$TKFHG0 & - +#sleep 5 #sls_detector_put frames 220000 -#$CLI shutter 1 on +#$CLI shutter $shutter on #$CLI shutter 1 on #sleep 1 #sls_detector_put start #sleep 450 # 200k frames at 500 frames per second takes 400s -#$CLI shutter 1 off +#$CLI shutter $shutter off #$CLI shutter 1 off +sleep 2 +$KILLRCV $CLI HV off -$KILLRCV - sls_detector_put highvoltage 0 +sls_detector_put clearbit 0x5d 0 +sls_detector_put powerchip 0 +sls_detector_put free echo "Script finished" diff --git a/CuFluo_fit_sc.cpp b/CuFluo_fit_sc.cpp new file mode 100644 index 0000000..5f7181f --- /dev/null +++ b/CuFluo_fit_sc.cpp @@ -0,0 +1,322 @@ +// to analyse the backplane pulsing data per module +// changes by VH 210906: to eliminate hardcoded absolute paths, uses location of the analysis root files as additional input argument (accordingly changed in filename_creator.sh) + +#include "TApplication.h" +#include "sls_detector_calibration/jungfrauCommonHeader.h" +#include "sls_detector_calibration/jungfrauCommonFunctions.h" + +#include "sls_detector_calibration/jungfrauFile.C" +#include "sls_detector_calibration/jungfrauPixelMask.C" +#include "sls_detector_calibration/jungfrauPedestal.C" + +#include "sls_detector_calibration/energyCalibration.h" +#include "sls_detector_calibration/energyCalibration.cpp" + +#include "TGraph.h" +#include "TGraphErrors.h" +#include "TF1.h" +#include "TFile.h" +#include "TPaveStats.h" +#include "TLegend.h" +#include "TPaveText.h" + +#include +//#include + +//#define NB_ENABLE 1 +//void nonblock(int state); +//#define NB_DISABLE 0 + +//TApplication* rootapp; +//TCanvas *A2; +//TCanvas *A3; +//TCanvas *A4; +//TCanvas *A5; +//TCanvas *A6; + + +//TPaveStats *st0; + + +//void PlotCanvas(void); + +double checkRangeMaxForAmplifierPlateau(double range_max) { + + // check that the range maximum is no more than 6.4 V + // to avoid non-linearity coming from amplifier plateau + if (range_max > 6400) { + return 6400; + } else { + return range_max; + } +} + + + + +bool isHGX=false; +int main(int argc, char* argv[]) { + + //nonblock(NB_ENABLE); + cout <<"opening the rootapp" <SetBatch(1); + gStyle->SetOptFit(11); + + /* + if (argc != 3) { + cout << "Correct usage:" << endl; + cout << "arg 1: specify module number" << endl; + cout << "arg 2: specify data location" << endl; + cout << "arg 3: specify column (x)" << endl; + cout << "arg 4: specify row (y)" << endl; + exit(1); + } + */ //uncomment for SR + + if (argc != 6) { + cout << "Correct usage:" << endl; + cout << "arg 1: specify module number" << endl; + cout << "arg 2: gain settings" << endl; + cout << "arg 3: specify storage cell" << endl; + cout << "arg 4: specify pixel x position" << endl; + cout << "arg 5: specify pixel y position" << endl; + exit(1); + } //uncomment for VH 210906 + string module_str = argv[1]; + string gain_str = argv[2]; + int sc_int = atoi(argv[3]); + string str2 =("HG0G1G2"); + string str3 =("HGOG1G2"); //filename creator had this bug + + int column = atoi(argv[4]); + int row = atoi(argv[5]); + + + int pixel = column+row*1024; + + char data_loc[256]; + sprintf(data_loc,"/mnt/sls_det_storage/jungfrau_calib/jungfrau_ana_sophie/M%s_CalibAna/", module_str.c_str()); + cout << data_loc << endl; + + std::string folder_path(data_loc); + if (folder_path.find(str2) != string::npos) isHGX=true; + if (folder_path.find(str3) != string::npos) isHGX=true; + + bool isJF11=false; + if (gain_str == "HG0JF11") { + gain_str = "HG0"; + isJF11=true; + } + + // cout << data_loc.find(str2)<<" " << string::npos << " " << str2 << " " << data_loc <HG1->HG2 sequence - dynamicHG0" <G1->G2 sequence - dynamicG0" <SetLeftMargin(0.1); + A2->SetRightMargin(0.13); + A2->SetTopMargin(0.08); + A2->SetBottomMargin(0.15); + + A3->SetLeftMargin(0.1); + A3->SetRightMargin(0.13); + A3->SetTopMargin(0.08); + A3->SetBottomMargin(0.15); + + //file name + sprintf(filename,"%sCuFluo_%s_sc%i_file0to351.root",folder_path.c_str(), gain_str.c_str(),sc_int); //storage cells in burst mode + cout << "Loading file " << filename << endl; + TFile* f = new TFile((const char *)(filename),"READ"); + + int chip; + int CH = row*1024+column; + + if (CH < (65536*1)) { + chip = 1; + } else if (CH < (65536*2)) { + chip = 2; + } else if (CH < (65536*3)) { + chip = 3; + } else if (CH < (65536*4)) { + chip = 4; + } else if (CH < (65536*5)) { + chip = 5; + } else if (CH < (65536*6)) { + chip = 6; + } else if (CH < (65536*7)) { + chip = 7; + } else if (CH < (65536*8)){ + chip = 8; + } + cout<< "Chip "<< chip << " Channel number " << CH << endl; + + TH2I* hist0=(TH2I*)f->Get(Form("adc2d_%d_sc%i",chip, sc_int)); // Storage cell 1 in burst mode + cout << "Creating histogram for " << Form("adc2d_%d_sc%i",chip, sc_int) << endl; + TH1D* proj = hist0->ProjectionX("bin1",CH-(65536*(chip-1))+1,CH-(65536*(chip-1))+1); + cout << "Data for pixel "<< pixel << " is loaded" << endl; + + +if (proj->Integral(low_bin_noise,high_bin_noise)!=0 && proj->Integral(low_bin_peak,high_bin_peak)!=0) { + + A2->cd(); + cout << "Canvas Noise" << endl; + // noise + TH1D *proj_noise = dynamic_cast(proj->Rebin(4,"proj_noise")); + proj_noise->SetStats(kTRUE); + proj_noise->GetXaxis()->SetRangeUser(proj->GetBinLowEdge(low_bin_noise),proj->GetBinLowEdge(high_bin_noise+1)); + proj_noise->Fit("gaus","Q"); + TF1 *fit = proj_noise->GetFunction("gaus"); + + proj_noise->Draw(); + A2->Update(); + proj_noise->GetXaxis()->SetTitle("Pedestal corrected ADC [ADU]"); + proj_noise->GetXaxis()->SetRangeUser(-100,150); + fit->SetParNames("N_{#gamma}", "Peak pos", "Noise RMS"); + TPaveStats *st0 = (TPaveStats*)proj_noise->FindObject("stats"); + st0->SetX1NDC(0.53); + st0->SetX2NDC(0.94); + st0->SetY1NDC(0.75); + st0->SetY2NDC(0.94); + st0->SetBorderSize(0); + st0->SetTextSize(0.04); + A2->Modified(); + A2->Update(); + + A3->cd(); + + // peak + TH1D *proj_peak = dynamic_cast(proj->Rebin(4,"proj_peak")); + proj_peak->SetStats(kTRUE); + proj_peak->GetXaxis()->SetRangeUser(proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + + + Double_t mypar[8]; + mypar[0] = 0.0; + mypar[1] = 0.0; + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 29.; + } + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.14; + } + mypar[6] = 1.12; + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.14; + } + + Double_t emypar[8]; + energyCalibration *thiscalibration = new energyCalibration(); + thiscalibration->setScanSign(1); + thiscalibration->setStartParametersKb(mypar); + thiscalibration->fixParameter(0,0.); // no background + thiscalibration->fixParameter(1,0.); + TF1* fittedfun = thiscalibration->fitSpectrumKb(proj_peak,mypar,emypar); + + TF1 *gaus_Ka = new TF1("gaus_Ka","gaus",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + gaus_Ka->SetParameters(mypar[4],mypar[2],mypar[3]); + gaus_Ka->SetLineColor(kBlue); + + TF1 *erfc_Ka = new TF1("erfc_Ka","[0]/2.*(TMath::Erfc(([1]*(x-[2])/[3])/(TMath::Sqrt(2.))))",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + erfc_Ka->SetParameters(mypar[4]*mypar[5], 1, mypar[2], mypar[3]); + erfc_Ka->SetLineColor(kOrange); + + TF1 *gaus_Kb = new TF1("gaus_Kb","gaus",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + gaus_Kb->SetParameters(mypar[4]*mypar[7],mypar[6]*mypar[2],mypar[3]); + gaus_Kb->SetLineColor(kGreen+2); + + TF1 *erfc_Kb = new TF1("erfc_Kb","[0]/2.*(TMath::Erfc(([1]*(x-[2])/[3])/(TMath::Sqrt(2.))))",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + erfc_Kb->SetParameters(mypar[4]*mypar[7]*mypar[5], 1, mypar[6]*mypar[2], mypar[3]); + erfc_Kb->SetLineColor(kOrange+7); + + proj_peak->Draw(); + A3->Update(); + erfc_Kb->Draw("same"); + erfc_Ka->Draw("same"); + gaus_Kb->Draw("same"); + gaus_Ka->Draw("same"); + fittedfun->Draw("same"); + A3->Update(); + proj_peak->GetXaxis()->SetTitle("Pedestal corrected ADC [ADU]"); + fittedfun->SetParNames("Bkg height", "Bkg grad", "K_{#alpha} pos", "Noise RMS", "K_{#alpha} height", "CS", "K_{#beta}/K_{#alpha} pos", "K_{#beta} frac"); + TPaveStats *st = (TPaveStats*)proj_peak->FindObject("stats"); + st->SetX1NDC(0.15); + st->SetX2NDC(0.55); + st->SetY1NDC(0.7); + st->SetY2NDC(0.94); + st->SetBorderSize(0); + st->SetTextSize(0.04); + A3->Modified(); + A3->Update(); +} else { + std::cout << "Masked pixel"; + } + + +rootapp.Run(); +return 0; + +} + diff --git a/Default_pixels_arrays.cpp b/Default_pixels_arrays.cpp index e6f7c7a..20c8587 100644 --- a/Default_pixels_arrays.cpp +++ b/Default_pixels_arrays.cpp @@ -67,7 +67,7 @@ int main(int argc, char* argv[]) { std::vector this_g2_default_pixels(NCH,0); std::vector this_hg0_default_pixels(NCH,0); - // // CuFluo HG0 dataset + // // CuFluo HG0 dataset sprintf(savename,"data/M%s/CuFluo_gain_HG0_M%s.root", this_module.c_str(), this_module.c_str()); TFile* FL_HG0_file = new TFile((char*)savename,"READ"); TH2F* FL_HG0_gain_map = 0; @@ -129,8 +129,10 @@ int main(int argc, char* argv[]) { double this_g0 = 0; double this_g0overg1 = 0; double this_g1 = 0; + double this_g1_2 = 0; double this_g1overg2 = 0; double this_g2 = 0; + double this_g2_2 =0; // HG0 if (FL_HG0_gain_map) { @@ -149,7 +151,7 @@ int main(int argc, char* argv[]) { // G0 if (FL_G0_gain_map) { this_g0 = FL_G0_gain_map->GetBinContent((i%NC)+1,(i/NC)+1); - this_g0_default_pixels[i] = 0; + //this_g0_default_pixels[i] = 0; if (this_g0 == 0) { this_g0_default_pixels[i] = 1; } else if (this_g0 < 30 || this_g0 > 56) { @@ -163,12 +165,15 @@ int main(int argc, char* argv[]) { if (DB_ratio_map) { this_g0overg1 = DB_ratio_map->GetBinContent((i%NC)+1,(i/NC)+1); this_g1 = this_g0 / this_g0overg1; + this_g1_2 = this_g0_default_pixels[i]; this_g1_default_pixels[i] = 0; if (this_g0overg1 == 0) { this_g1_default_pixels[i] = 1; } else if (this_g0 != 0 && (this_g1 < -2.5 || this_g1 > -0.4)) { this_g1_default_pixels[i] = 1; - } + } else if (this_g1_2 == 1) { + this_g1_default_pixels[i] =1; + } } else { this_g1_default_pixels[i] = 1; } @@ -176,12 +181,16 @@ int main(int argc, char* argv[]) { if (CS_ratio_map) { this_g1overg2 = CS_ratio_map->GetBinContent((i%NC)+1,(i/NC)+1); this_g2 = this_g1 / this_g1overg2; + this_g2_2 = this_g1_default_pixels[i]; this_g2_default_pixels[i] = 0; + if (this_g1overg2 == 0) { this_g2_default_pixels[i] = 1; } else if (this_g0 != 0 && this_g1 != 0 && (this_g2 < -0.3 || this_g2 > -0.015)) { this_g2_default_pixels[i] = 1; - } + } else if (this_g2_2 == 1) { + this_g2_default_pixels[i] =1; + } } else { this_g2_default_pixels[i] = 1; } @@ -189,17 +198,17 @@ int main(int argc, char* argv[]) { if (this_module == "586") { if ( (i/NC) > 0 && (i/NC)<256 && (i%NC)> 768 && (i%NC)<1024 ) { - this_g2_default_pixels[i]=1; - this_g1_default_pixels[i]=1; - - } + this_g2_default_pixels[i]=1; + this_g1_default_pixels[i]=1; + + } } if (this_module == "454") { if ( (i/NC) > 0 && (i/NC)<256 && (i%NC)> 768 && (i%NC)<1024 ) { - this_g2_default_pixels[i]=1; - } + this_g2_default_pixels[i]=1; + } } diff --git a/Fluo_analysis_Ti_In.cpp b/Fluo_analysis_Ti_In.cpp new file mode 100644 index 0000000..6ef3dfe --- /dev/null +++ b/Fluo_analysis_Ti_In.cpp @@ -0,0 +1,1357 @@ +// file to calculate pedestal correction of fluo data +// make correction and save spectrum per pixel +// then fit fluo spectrum per pixel +// and save peak position and uncertainty +// changes by VH 210906: to eliminate hardcoded absolute paths, uses location of the analysis root files as additional input argument (accordingly changed in filename_creator.sh) + +#include "sls_detector_calibration/jungfrauCommonHeader.h" +#include "sls_detector_calibration/jungfrauCommonFunctions.h" + +#include "sls_detector_calibration/jungfrauFileSLSReceiver.C" +#include "sls_detector_calibration/jungfrauPixelMask.C" +#include "sls_detector_calibration/jungfrauPedestal.C" + +#include "sls_detector_calibration/energyCalibration.h" +#include "sls_detector_calibration/energyCalibration.cpp" + +#include "TGraph.h" +#include "TGraphErrors.h" +#include "TF1.h" +#include "TFile.h" +#include "TPaveStats.h" +#include "TLegend.h" +#include "TPaveText.h" + +#include + +int main(int argc, char* argv[]) { + + jungfrauStyle(); + gStyle->SetOptFit(11); + + /* + if (argc != 6) { + cout << "Correct usage:" << endl; + cout << "arg 1: specify module number" << endl; + cout << "arg 2: specify HG0 or G0" << endl; + cout << "arg 3: specify data location" << endl; + cout << "arg 4: specify pede file" << endl; + cout << "arg 5: specify data file" << endl; + cout << " " << endl; + exit(1); + } + */ //uncomment for SR + + if (argc != 9) { + cout << "Correct usage:" << endl; + cout << "arg 1: specify module number" << endl; + cout << "arg 2: specify HG0 or G0" << endl; + cout << "arg 3: pede starting index" << endl; + cout << "arg 4: target" << endl; + cout << "arg 5: specify data location folder" << endl; + cout << "arg 6: specify pede file prefix" << endl; + cout << "arg 7: specify data file prefix" << endl; + cout << "arg 8: specify location of analysis root files" << endl; + cout << " " << endl; + exit(1); + } //uncomment for VH 210906 + + string module_str = argv[1]; + cout << "The module number is" << module_str << endl; + string gain_str = argv[2]; + cout << "The gain is" << gain_str << endl; + + bool isJF11=false; + + string findex = argv[3]; + int index1 = atoi(argv[3]); + cout << "I'm after atoi" << endl; + cout << "Index1 value is" << findex << endl; + int indexfl = 0; + string target = argv[4]; + string data_loc = argv[5]; + string pede_file = argv[6]; + string data_file = argv[7]; + string anadata_loc = argv[8]; //uncomment for VH 210906 + cout << "I'm after declaration of strings" << endl; + int createHistoFile = 0; + + //char histoname[128]; + //char savename[128]; + char histoname[256]; // VH 210902 + char savename[256]; // VH 210902 + int filen = 22; + int gain_val[3]; + gain_val[0]=0; + gain_val[1]=1; + gain_val[2]=3; + + + + cout << "gain0=" << gain_val[0]<< endl; + cout << "gain1=" << gain_val[1]<< endl; +cout << "gain2=" << gain_val[2]<< endl; + + // create necessary directories with permissions drwxrwxr-x + // data/Mxxx + sprintf(savename,"data/M%s_%s", module_str.c_str(),target.c_str()); + mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + // plots/Mxxx + sprintf(savename,"plots/M%s_%s", module_str.c_str(),target.c_str()); + mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + // plots/Mxxx/CuFluo + sprintf(savename,"plots/M%s_%s/CuFluo", module_str.c_str(),target.c_str()); + mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + // plots/Mxxx/CuFluo/G0 + sprintf(savename,"plots/M%s_%s/CuFluo/G0", module_str.c_str(),target.c_str()); + mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + // plots/Mxxx/CuFluo/HG0 + sprintf(savename,"plots/M%s_%s/CuFluo/HG0", module_str.c_str(),target.c_str()); + mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + // /mnt/pcmoench_jungfrau_data/jungfrau_ana_sophie/Mxxx_CalibAna + //sprintf(savename,"/mnt/sls_det_storage/jungfrau_data1/jungfrau_ana_sophie/M%s_CalibAna", module_str.c_str()); //uncomment for SR + sprintf(savename,"%s", anadata_loc.c_str()); //uncomment for VH 210906 + mkdir(savename, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + + cout << "I'm after creation directories" << endl; + + jungfrauPixelMask *pixelMaskObject = new jungfrauPixelMask(); + bool pixel_mask [NCH]; + + cout << "I'm after creation pixel mask" << endl; + + TCanvas *mapcanvas = new TCanvas("mapcanvas","",150,10,800,400); + mapcanvas->SetLeftMargin(0.1); + mapcanvas->SetRightMargin(0.13); + mapcanvas->SetTopMargin(0.08); + mapcanvas->SetBottomMargin(0.15); + + TCanvas* c1 = new TCanvas("c1",""); + + if (createHistoFile == 1) { + + jungfrauFileSLS *thisfile = new jungfrauFileSLS(); + + jungfrauPedestal *pedestalObject = new jungfrauPedestal(); + pedestalObject->pedestalSetNFrames(100); + static uint16_t pedestals16_G0_start[NCH]; + static double pedeRMS16_G0[NCH]; + + TH2F* pedestalsG0 = new TH2F("pedestalsG0","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* pedestalsG1 = new TH2F("pedestalsG1","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* pedestalsG2 = new TH2F("pedestalsG2","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + + TH2F* pedeRMSG0 = new TH2F("pedeRMSG0","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + + if (gain_str == "G0") { + cout<< "I'm in G0" << endl; + + indexfl=index1+3; + cout << "Index fluorescence" << indexfl << endl; + // calculate pixel mask + pixelMaskObject->initialisePixelMask(pixel_mask); + + for (int j=index1; jopen((char*)savename, 0); + + int nevents = 0; + while (thisfile->readNextFrame()) { + nevents++; + } + thisfile->rewind(); + cout << "read " << nevents << " events" << endl; + cout << "Loop index " << j << endl; + + if (nevents == 999 || nevents == 1000) { + for (int i = 0; i < 1000; i++) { + //cout << " number" << i << endl; + thisfile->readNextFrame(); + pixelMaskObject->maskIfGainNot(gain_val[j-index1], thisfile->getFrameDataHandle(), pixel_mask); + }thisfile->close(); + + } else { + cout << "Number of frames less than 999" << endl; + thisfile->close(); + exit(1); + } + } + } else { // HG0 case + indexfl=index1+1; + cout << "I'm in HG0" << endl; + cout << "Index fluorescence" << indexfl << endl; + sprintf(savename,"%s/%s_%s__d0_f0_%i.raw", data_loc.c_str(), pede_file.c_str(),target.c_str(),index1); //VH: note, this adds a double slash in the filepath + thisfile->open((char*)savename, 0); + + // calculate pixel mask + pixelMaskObject->initialisePixelMask(pixel_mask); + + int nevents = 0; + while (thisfile->readNextFrame()) { + nevents++; + } + thisfile->rewind(); + cout << "read " << nevents << " events" << endl; + + + if (nevents == 999 || nevents == 1000) { + for (int i = 0; i < 1000; i++) { + thisfile->readNextFrame(); + pixelMaskObject->maskIfGainNot(0, thisfile->getFrameDataHandle(), pixel_mask); + }thisfile->close(); + } else { + cout << "Number of frames less than 999" << endl; + thisfile->close(); + exit(1); + } + } + + thisfile->rewind(); + + sprintf(savename,"plots/M%s_%s/CuFluo/%s/pixelmask_%s_M%s.png", module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + pixelMaskObject->plotPixelMask(pixel_mask,savename); + cout << "after chip mask, n masked pixels is " << pixelMaskObject->getNMasked(pixel_mask) << endl; + + // calculate pedestals + if (gain_str == "G0") { + sprintf(savename,"%s/%s_%s__d0_f0_%i.raw", data_loc.c_str(), pede_file.c_str(),target.c_str(),index1); //VH: note, this adds a double slash in the filepath + thisfile->open((char*)savename, 0); + + for (int i = 0; i < 1000; i++) { + thisfile->readNextFrame(); + pedestalObject->addFrameToPedestalCalculation(thisfile->getFrameDataHandle()); + } + + for (int i = 0; i < NCH; i++) { + if (pixel_mask[i] == true) { + pedestalsG0->Fill(i%NC,i/NC,pedestalObject->pedestalOfChannel(i)); + pedeRMSG0->Fill(i%NC,i/NC,pedestalObject->rmsOfChannel(i)); + } + } + + pedestalObject->pedestalClear(); + thisfile->close(); + + sprintf(savename,"%s/%s_%s__d0_f0_%i.raw", data_loc.c_str(), pede_file.c_str(),target.c_str(),index1+1); //VH: note, this adds a double slash in the filepath + thisfile->open((char*)savename, 0); + + for (int i = 0; i < 1000; i++) { + thisfile->readNextFrame(); + pedestalObject->addFrameToPedestalCalculation(thisfile->getFrameDataHandle()); + } + for (int i = 0; i < NCH; i++) { + if (pixel_mask[i] == true) { + pedestalsG1->Fill(i%NC,i/NC,pedestalObject->pedestalOfChannel(i)); + } + } + pedestalObject->pedestalClear(); + thisfile->close(); + + sprintf(savename,"%s/%s_%s__d0_f0_%i.raw", data_loc.c_str(), pede_file.c_str(),target.c_str(),index1+2); //VH: note, this adds a double slash in the filepath + thisfile->open((char*)savename, 0); + + for (int i = 0; i < 1000; i++) { + thisfile->readNextFrame(); + pedestalObject->addFrameToPedestalCalculation(thisfile->getFrameDataHandle()); + } + for (int i = 0; i < NCH; i++) { + if (pixel_mask[i] == true) { + pedestalsG2->Fill(i%NC,i/NC,pedestalObject->pedestalOfChannel(i)); + } + } + pedestalObject->pedestalClear(); + thisfile->close(); + } else { + + sprintf(savename,"%s/%s_%s__d0_f0_%i.raw", data_loc.c_str(), pede_file.c_str(),target.c_str(),index1); //VH: note, this adds a double slash in the filepath + thisfile->open((char*)savename, 0); + + for (int i = 0; i < 1000; i++) { + thisfile->readNextFrame(); + pedestalObject->addFrameToPedestalCalculation(thisfile->getFrameDataHandle()); + + } + + for (int i = 0; i < NCH; i++) { + if (pixel_mask[i] == true) { + pedestalsG0->Fill(i%NC,i/NC,pedestalObject->pedestalOfChannel(i)); + pedeRMSG0->Fill(i%NC,i/NC,pedestalObject->rmsOfChannel(i)); + } + } + pedestalObject->pedestalClear(); + thisfile->close(); + } + + // G0 calculation for pede tracking + + sprintf(savename,"%s/%s_%s__d0_f0_%i.raw", data_loc.c_str(), pede_file.c_str(),target.c_str(),index1); //VH: note, this adds a double slash in the filepath + thisfile->open((char*)savename, 0); + + while (thisfile->readNextFrame()) { + pedestalObject->addFrameToPedestalCalculation(thisfile->getFrameDataHandle()); + } + for (int i = 0; i < NCH; i++) { + if (pixel_mask[i] == true) { + pedestalsG0->Fill(i%NC,i/NC,pedestalObject->pedestalOfChannel(i)); + pedeRMSG0->Fill(i%NC,i/NC,pedestalObject->rmsOfChannel(i)); + } + } + pedestalObject->pedestalData((uint16_t*)(&pedestals16_G0_start)); + pedestalObject->pedestalRMSData(pedeRMS16_G0); + pedestalObject->pedestalResetUpdates(); + + thisfile->close(); + + + mapcanvas->cd(); + + pedestalsG0->GetXaxis()->SetTitle("Column"); + pedestalsG0->GetYaxis()->SetTitle("Row"); + pedestalsG0->GetYaxis()->SetTitleOffset(0.7); + pedestalsG0->Draw("colz"); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/pedeG0_%s_M%s.png", module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + pedestalsG1->GetXaxis()->SetTitle("Column"); + pedestalsG1->GetYaxis()->SetTitle("Row"); + pedestalsG1->GetYaxis()->SetTitleOffset(0.7); + pedestalsG1->Draw("colz"); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/pedeG1_%s_M%s.png", module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + pedestalsG2->GetXaxis()->SetTitle("Column"); + pedestalsG2->GetYaxis()->SetTitle("Row"); + pedestalsG2->GetYaxis()->SetTitleOffset(0.7); + pedestalsG2->Draw("colz"); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/pedeG2_%s_M%s.png", module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + pedeRMSG0->GetXaxis()->SetTitle("Column"); + pedeRMSG0->GetYaxis()->SetTitle("Row"); + pedeRMSG0->GetYaxis()->SetTitleOffset(0.7); + pedeRMSG0->GetZaxis()->SetRangeUser(0,30); + pedeRMSG0->Draw("colz"); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/pedeRMSG0_%s_M%s.png", module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + int adc2d_nbin= 1700; + int adc2d_maxbin=3400; + if (isJF11) adc2d_nbin= 1600; + + + TH2I* adc2d_1 = new TH2I("adc2d_1","",adc2d_nbin,-200-0.5,adc2d_maxbin-200-0.5,65536,(65536*0-0.5),(65536*1-0.5)); + TH2I* adc2d_2 = new TH2I("adc2d_2","",adc2d_nbin,-200-0.5,adc2d_maxbin-200-0.5,65536,(65536*1-0.5),(65536*2-0.5)); + TH2I* adc2d_3 = new TH2I("adc2d_3","",adc2d_nbin,-200-0.5,adc2d_maxbin-200-0.5,65536,(65536*2-0.5),(65536*3-0.5)); + TH2I* adc2d_4 = new TH2I("adc2d_4","",adc2d_nbin,-200-0.5,adc2d_maxbin-200-0.5,65536,(65536*3-0.5),(65536*4-0.5)); + TH2I* adc2d_5 = new TH2I("adc2d_5","",adc2d_nbin,-200-0.5,adc2d_maxbin-200-0.5,65536,(65536*4-0.5),(65536*5-0.5)); + TH2I* adc2d_6 = new TH2I("adc2d_6","",adc2d_nbin,-200-0.5,adc2d_maxbin-200-0.5,65536,(65536*5-0.5),(65536*6-0.5)); + TH2I* adc2d_7 = new TH2I("adc2d_7","",adc2d_nbin,-200-0.5,adc2d_maxbin-200-0.5,65536,(65536*6-0.5),(65536*7-0.5)); + TH2I* adc2d_8 = new TH2I("adc2d_8","",adc2d_nbin,-200-0.5,adc2d_maxbin-200-0.5,65536,(65536*7-0.5),(65536*8-0.5)); + + TH1D* adcpc_spec = new TH1D("adcpc_spec","",300,0,3000); + + TH2F* pede_updates = new TH2F("pede_updates","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* pede_diff = new TH2F("pede_diff","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + + for (int filei = 0; filei < filen; filei++) { + + // open data file //file name must include d0_f + sprintf(savename,"%s/%s%i_%i.raw", data_loc.c_str(), data_file.c_str(), filei, indexfl); //VH: note, this adds a double slash in the filepath + thisfile->open((char*)savename, filei); + + while (thisfile->readNextFrame()) { + + uint16_t* imagedptr = thisfile->getFrameDataHandle(); + + pedestalObject->addG0FrameToPedestalCalculationWThreshold(imagedptr, pedestalObject, pedeRMS16_G0); + + for (int i = 0; i < NCH; i++) { + + uint16_t gain = (imagedptr[i]&0xc000) >> 14; + + if (gain == 0) { + + int adcpc = (imagedptr[i]&0x3fff) - pedestalObject->pedestalOfChannel(i); + adcpc_spec->Fill(adcpc); + + if (i < (65536*1)) { + adc2d_1->Fill(adcpc,i); + } else if (i < (65536*2)) { + adc2d_2->Fill(adcpc,i); + } else if (i < (65536*3)) { + adc2d_3->Fill(adcpc,i); + } else if (i < (65536*4)) { + adc2d_4->Fill(adcpc,i); + } else if (i < (65536*5)) { + adc2d_5->Fill(adcpc,i); + } else if (i < (65536*6)) { + adc2d_6->Fill(adcpc,i); + } else if (i < (65536*7)) { + adc2d_7->Fill(adcpc,i); + } else if (i < (65536*8)) { + adc2d_8->Fill(adcpc,i); + } + } + } + } + + thisfile->close(); + + adcpc_spec->GetXaxis()->SetTitle("Pedestal corrected ADC [ADU]"); + adcpc_spec->Draw(); + mapcanvas->SetLogy(); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/adcpc_spec_file%d_%s_M%s.png", module_str.c_str(), target.c_str(), gain_str.c_str(), filei, gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + mapcanvas->SetLogy(0); + adcpc_spec->Reset(); + + pede_updates->Reset(); + pede_diff->Reset(); + + for (int i = 0; i < NCH; i++) { + pede_updates->Fill(i%NC,i/NC,pedestalObject->pedestalUpdates(i)); + pede_diff->Fill(i%NC,i/NC,pedestalObject->pedestalOfChannel(i) - pedestals16_G0_start[i]); + pedestals16_G0_start[i] = pedestalObject->pedestalOfChannel(i); + } + + pede_updates->GetXaxis()->SetTitle("Column"); + pede_updates->GetYaxis()->SetTitle("Row"); + pede_updates->GetYaxis()->SetTitleOffset(0.7); + pede_updates->GetZaxis()->SetRangeUser(0,10000); + pede_updates->Draw("colz"); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/pede_updates_file%d_%s_M%s.png", module_str.c_str(), target.c_str(), gain_str.c_str(), filei, gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + pede_diff->GetXaxis()->SetTitle("Column"); + pede_diff->GetYaxis()->SetTitle("Row"); + pede_diff->GetYaxis()->SetTitleOffset(0.7); + pede_diff->GetZaxis()->SetRangeUser(-40,40); + pede_diff->Draw("colz"); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/pede_diff_file%d_%s_M%s.png", module_str.c_str(), target.c_str(), gain_str.c_str(), filei, gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + pedestalObject->pedestalResetUpdates(); + + } // end of file loop + + //sprintf(savename,"/mnt/sls_det_storage/jungfrau_data1/jungfrau_ana_sophie/M%s_CalibAna/CuFluo_%s_file0to%d.root", module_str.c_str(), gain_str.c_str(), filen-1); + sprintf(savename,"%s/CuFluo_%s_file0to%d.root", anadata_loc.c_str(), gain_str.c_str(), filen-1); //uncomment for VH 210906 + TFile* saved_file = new TFile((const char *)(savename),"RECREATE"); + adc2d_1->Write(); + adc2d_2->Write(); + adc2d_3->Write(); + adc2d_4->Write(); + adc2d_5->Write(); + adc2d_6->Write(); + adc2d_7->Write(); + adc2d_8->Write(); + saved_file->Close(); + + } + + c1->cd(); + + //sprintf(savename,"/mnt/sls_det_storage/jungfrau_data1/jungfrau_ana_sophie/M%s_CalibAna/CuFluo_%s_file0to%d.root", module_str.c_str(), gain_str.c_str(), filen-1); + sprintf(savename,"%s/CuFluo_%s_file0to%d.root", anadata_loc.c_str(), gain_str.c_str(), filen-1); //uncomment for VH 210906 + TFile* comb_file = new TFile((const char *)(savename),"READ"); + + pixelMaskObject->initialisePixelMask(pixel_mask); + + int low_ADU_peak = 0; + int high_ADU_peak = 0; + + if (target=="Ti") { + + if (gain_str == "HG0") { + low_ADU_peak = 350; + high_ADU_peak = 600; + } else if (gain_str == "G0") { + low_ADU_peak = 180; + high_ADU_peak = 350; + } + + } + + if (target=="Fe") { + + if (gain_str == "HG0") { + low_ADU_peak = 500; + high_ADU_peak = 800; + } else if (gain_str == "G0") { + low_ADU_peak = 250; + high_ADU_peak = 400; + } + } + + if (target=="Cu") { + + if (gain_str == "HG0") { + low_ADU_peak = 700; + high_ADU_peak = 1000; + } else if (gain_str == "G0") { + low_ADU_peak = 250; + high_ADU_peak = 400; + } + + } + + if (target=="Se") { + + if (gain_str == "HG0") { + low_ADU_peak = 1050; + high_ADU_peak = 1350; + } else if (gain_str == "G0") { + low_ADU_peak = 250; + high_ADU_peak = 400; + } + } + + + if (target=="Mo") { + if (gain_str == "HG0") { + low_ADU_peak = 1650; + high_ADU_peak = 2150; + } else if (gain_str == "G0") { + low_ADU_peak = 250; + high_ADU_peak = 400; + } + } + + + + if (target=="Ag") { + if (gain_str == "HG0") { + low_ADU_peak = 2100; + high_ADU_peak = 2650; + } else if (gain_str == "G0") { + low_ADU_peak = 250; + high_ADU_peak = 400; + } + } + + if ((target=="In") || (target=="in")) { + if (gain_str == "HG0") { + low_ADU_peak = 2300; + high_ADU_peak = 2800; + } else if (gain_str == "G0") { + low_ADU_peak = 250; + high_ADU_peak = 400; + } + } + + + TH1F* fit_par3 = new TH1F("fit_par3","",100,0,50); + TH1F* fit_par4 = new TH1F("fit_par4","",100,0,500); + TH1F* fit_par5 = new TH1F("fit_par5","",100,0,0.5); + TH1F* fit_par6 = new TH1F("fit_par6","",100,1.05,1.25); + TH1F* fit_par7 = new TH1F("fit_par7","",100,0,0.4); + + TH2F* fit_par3_2d = new TH2F("fit_par3_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* fit_par4_2d = new TH2F("fit_par4_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* fit_par5_2d = new TH2F("fit_par5_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* fit_par6_2d = new TH2F("fit_par6_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* fit_par7_2d = new TH2F("fit_par7_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + + TH1F* peak_fit_pos = new TH1F("peak_fit_pos","",100,low_ADU_peak,high_ADU_peak); + TH1F* peak_fit_poserr = new TH1F("peak_fit_poserr","",100,0,2); + TH2F* peak_fit_pos_2d = new TH2F("peak_fit_pos_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* peak_fit_poserr_2d = new TH2F("peak_fit_poserr_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + + TH1F* noise_fit_pos = new TH1F("noise_fit_pos","",100,-10,10); + TH1F* noise_fit_poserr = new TH1F("noise_fit_poserr","",100,0,0.1); + TH2F* noise_fit_pos_2d = new TH2F("noise_fit_pos_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* noise_fit_poserr_2d = new TH2F("noise_fit_poserr_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + + TH1F* gain_fit = new TH1F("gain_fit","",100,low_ADU_peak,high_ADU_peak); + TH1F* gain_fiterr = new TH1F("gain_fiterr","",100,0,2); + TH2F* gain_fit_2d = new TH2F("gain_fit_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* gain_fiterr_2d = new TH2F("gain_fiterr_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + + TH1F* gain_fit_isEdge = new TH1F("gain_fit_isEdge","",100,low_ADU_peak,high_ADU_peak); + TH1F* gain_fit_isInnerEdge = new TH1F("gain_fit_isInnerEdge","",100,low_ADU_peak,high_ADU_peak); + TH1F* gain_fit_isDouble = new TH1F("gain_fit_isDouble","",100,low_ADU_peak,high_ADU_peak); + TH1F* gain_fit_isNextToDouble = new TH1F("gain_fit_isNextToDouble","",100,low_ADU_peak,high_ADU_peak); + TH1F* gain_fit_isQuad = new TH1F("gain_fit_isQuad","",100,low_ADU_peak,high_ADU_peak); + TH1F* gain_fit_isBulk = new TH1F("gain_fit_isBulk","",100,low_ADU_peak,high_ADU_peak); + + TH2F* gain_ADUper1keV_2d = new TH2F("gain_ADUper1keV_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH2F* gainerr_ADUper1keV_2d = new TH2F("gainerr_ADUper1keV_2d","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + + int low_bin_noise = 100; + int high_bin_noise = 350; + int low_bin_peak = 0; + int high_bin_peak = 0; + int nrebin = 4; + + // Do the conditionals for all targets + + if (target=="Ti") { + + if (gain_str == "HG0") { + low_bin_peak = 450; + high_bin_peak = 750; + nrebin = 15; + } else if (gain_str == "G0") { + low_bin_peak = 250; + high_bin_peak = 400; + } + + } + + if (target=="Fe") { + + if (gain_str == "HG0") { + low_bin_peak = 558; + high_bin_peak = 955; + nrebin = 4; + } else if (gain_str == "G0") { + low_bin_peak = 250; + high_bin_peak = 400; + } + + } + + if (target=="Cu") { + + if (gain_str == "HG0") { + low_bin_peak = 701; + high_bin_peak = 1200; + nrebin = 4; + } else if (gain_str == "G0") { + low_bin_peak = 250; + high_bin_peak = 400; + } + + } + + if (target=="Se") { + + if (gain_str == "HG0") { + low_bin_peak = 900; + high_bin_peak = 1500; + nrebin = 4; + } else if (gain_str == "G0") { + low_bin_peak = 250; + high_bin_peak = 400; + } + + } + +if (target=="Mo") { + + if (gain_str == "HG0") { + low_bin_peak = 1400; + high_bin_peak = 2400; + nrebin = 8; + } else if (gain_str == "G0") { + low_bin_peak = 250; + high_bin_peak = 400; + } + + } + +if (target=="Ag") { + + if (gain_str == "HG0") { + low_bin_peak = 1900; + high_bin_peak = 2900; + nrebin = 15; + } else if (gain_str == "G0") { + low_bin_peak = 250; + high_bin_peak = 400; + } + + } + +if ((target=="In") || (target=="in")) { + + if (gain_str == "HG0") { + low_bin_peak = 2000; + high_bin_peak = 3000; + nrebin = 15; + } else if (gain_str == "G0") { + low_bin_peak = 250; + high_bin_peak = 400; + } + + } + + + for (int j=1; j<9; j++) { + cout << "slice " << j << endl; + sprintf(histoname,"adc2d_%i",j); + TH2I* adc2d_j = (TH2I*)(comb_file->Get((const char *)(histoname))); + cout << adc2d_j->GetEntries() << endl; + adc2d_j->Draw("colz"); + c1->Update(); + + for (int i=(65536*(j-1)); i<(65536*(j)); i++) { + + if (i%10000==0){cout << "another 10k" << endl;} + + TH1D* proj = adc2d_j->ProjectionX("bin1",i-(65536*(j-1))+1,i-(65536*(j-1))+1); + + if (proj->Integral(low_bin_noise,high_bin_noise)!=0 && proj->Integral(low_bin_peak,high_bin_peak)!=0) { + // noise + TH1D *proj_noise = dynamic_cast(proj->Rebin(nrebin,"proj_noise")); + proj_noise->SetStats(kTRUE); + proj_noise->GetXaxis()->SetRangeUser(proj->GetBinLowEdge(low_bin_noise),proj->GetBinLowEdge(high_bin_noise+1)); + proj_noise->Fit("gaus","Q"); + TF1 *fit = proj_noise->GetFunction("gaus"); + + noise_fit_pos->Fill(fit->GetParameter(1)); + noise_fit_pos_2d->Fill(i%NC,i/NC,fit->GetParameter(1)); + noise_fit_poserr->Fill(fit->GetParError(1)); + noise_fit_poserr_2d->Fill(i%NC,i/NC,fit->GetParError(1)); + + // peak + TH1D *proj_peak = dynamic_cast(proj->Rebin(nrebin,"proj_peak")); + proj_peak->SetStats(kTRUE); + proj_peak->GetXaxis()->SetRangeUser(proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + + Double_t mypar[8]; + mypar[0] = 0.0; + mypar[1] = 0.0; + + + if (target=="Ti") { + + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 24.; + } + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.12; + } + + // Kb/Ka position ratio + mypar[6] = 1.0; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.2; + } + + } + + + if (target=="Fe") { + + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 27.; + } + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.2; + } + + // Kb/Ka position ratio + mypar[6] = 1.11; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.12; + } + + } + + if (target=="Cu") { + + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 29.; + } + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.14; + } + + // Kb/Ka position ratio + mypar[6] = 1.11; // mypar[6] = 1.12; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.14; + } + + } + + + + if (target=="Se") { + + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 29.; + } + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.14; + } + + // Kb/Ka position ratio + mypar[6] = 1.11; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.14; + } + + } + + if (target=="Mo") { + + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 29.; + } + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.14; + } + + // Kb/Ka position ratio + mypar[6] = 1.12; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.14; + } + + } + + + if (target=="Ag") { + + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 29.; + } + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.14; + } + + // Kb/Ka position ratio + mypar[6] = 1.10; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.14; + } + + } + + + if ((target=="In") || (target=="in")) { + + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 29.; + } + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.14; + } + + // Kb/Ka position ratio + mypar[6] = 1.13; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.14; + } + + } + + + Double_t emypar[8]; + energyCalibration *thiscalibration = new energyCalibration(); + thiscalibration->setScanSign(1); + thiscalibration->setStartParametersKb(mypar); + thiscalibration->fixParameter(0,0.); // no background + thiscalibration->fixParameter(1,0.); + TF1* fittedfun = thiscalibration->fitSpectrumKb(proj_peak,mypar,emypar); + + fit_par3->Fill(mypar[3]); + fit_par4->Fill(mypar[4]); + fit_par5->Fill(mypar[5]); + fit_par6->Fill(mypar[6]); + fit_par7->Fill(mypar[7]); + + fit_par3_2d->Fill(i%NC,i/NC,mypar[3]); + fit_par4_2d->Fill(i%NC,i/NC,mypar[4]); + fit_par5_2d->Fill(i%NC,i/NC,mypar[5]); + fit_par6_2d->Fill(i%NC,i/NC,mypar[6]); + fit_par7_2d->Fill(i%NC,i/NC,mypar[7]); + + peak_fit_pos->Fill(mypar[2]); + peak_fit_poserr->Fill(emypar[2]); + peak_fit_pos_2d->Fill(i%NC,i/NC,mypar[2]); + peak_fit_poserr_2d->Fill(i%NC,i/NC,emypar[2]); + + if ((i >= 58000 && i < 58000+10) || // bulk + (i >= 10 && i < 10+10) || // edge + (i >= 1024+10 && i < 1024+10+10) || // inner edge + (i >= (256*1024)+10 && i < (256*1024)+10+10) || // double + (i >= (257*1024)+10 && i < (257*1024)+10+10) || // next to double + (i == (255*1024)+255) // quad + ) { + + string pixel_type = "x"; + if (i >= 58000 && i < 58000+10) { + pixel_type = "b"; + } else if (i >= 10 && i < 10+10) { + pixel_type = "e"; + } else if (i >= 1024+10 && i < 1024+10+10) { + pixel_type = "ie"; + } else if (i >= (256*1024)+10 && i < (256*1024)+10+10) { + pixel_type = "d"; + } else if (i >= (257*1024)+10 && i < (257*1024)+10+10) { + pixel_type = "ntd"; + } else if (i == (255*1024)+255) { + pixel_type = "q"; + } + + proj_noise->Draw(); + c1->Update(); + proj_noise->GetXaxis()->SetTitle("Pedestal corrected ADC [ADU]"); + proj_noise->GetXaxis()->SetRangeUser(-100,150); + fit->SetParNames("N_{#gamma}", "Peak pos", "Noise RMS"); + TPaveStats *st0 = (TPaveStats*)proj_noise->FindObject("stats"); + st0->SetX1NDC(0.53); + st0->SetX2NDC(0.94); + st0->SetY1NDC(0.75); + st0->SetY2NDC(0.94); + st0->SetBorderSize(0); + st0->SetTextSize(0.04); + sprintf(savename,"plots/M%s/CuFluo/%s/noise_%s_%d_%s_M%s.png", module_str.c_str(), gain_str.c_str(), pixel_type.c_str(), i, gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + TF1 *gaus_Ka = new TF1("gaus_Ka","gaus",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + gaus_Ka->SetParameters(mypar[4],mypar[2],mypar[3]); + gaus_Ka->SetLineColor(kBlue); + + TF1 *erfc_Ka = new TF1("erfc_Ka","[0]/2.*(TMath::Erfc(([1]*(x-[2])/[3])/(TMath::Sqrt(2.))))",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + erfc_Ka->SetParameters(mypar[4]*mypar[5], 1, mypar[2], mypar[3]); + erfc_Ka->SetLineColor(kOrange); + + TF1 *gaus_Kb = new TF1("gaus_Kb","gaus",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + gaus_Kb->SetParameters(mypar[4]*mypar[7],mypar[6]*mypar[2],mypar[3]); + gaus_Kb->SetLineColor(kGreen+2); + + TF1 *erfc_Kb = new TF1("erfc_Kb","[0]/2.*(TMath::Erfc(([1]*(x-[2])/[3])/(TMath::Sqrt(2.))))",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + erfc_Kb->SetParameters(mypar[4]*mypar[7]*mypar[5], 1, mypar[6]*mypar[2], mypar[3]); + erfc_Kb->SetLineColor(kOrange+7); + + proj_peak->Draw(); + erfc_Kb->Draw("same"); + erfc_Ka->Draw("same"); + gaus_Kb->Draw("same"); + gaus_Ka->Draw("same"); + fittedfun->Draw("same"); + c1->Update(); + proj_peak->GetXaxis()->SetTitle("Pedestal corrected ADC [ADU]"); + fittedfun->SetParNames("Bkg height", "Bkg grad", "K_{#alpha} pos", "Noise RMS", "K_{#alpha} height", "CS", "K_{#beta}/K_{#alpha} pos", "K_{#beta} frac"); + TPaveStats *st = (TPaveStats*)proj_peak->FindObject("stats"); + st->SetX1NDC(0.22); + st->SetX2NDC(0.62); + st->SetY1NDC(0.7); + st->SetY2NDC(0.94); + st->SetBorderSize(0); + st->SetTextSize(0.04); + sprintf(savename,"plots/M%s/CuFluo/%s/peak_%s_%d_%s_M%s.png", module_str.c_str(), gain_str.c_str(), pixel_type.c_str(), i, gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + } + + // gain + gain_fit->Fill(mypar[2] - fit->GetParameter(1)); + gain_fiterr->Fill(sqrt(pow(emypar[2],2) + pow(fit->GetParError(1),2))); + gain_fit_2d->Fill(i%NC,i/NC,mypar[2] - fit->GetParameter(1)); + gain_fiterr_2d->Fill(i%NC,i/NC,sqrt(pow(emypar[2],2) + pow(fit->GetParError(1),2))); + gain_ADUper1keV_2d->Fill(i%NC,i/NC,(mypar[2] - fit->GetParameter(1))); /// 8.0); + gainerr_ADUper1keV_2d->Fill(i%NC,i/NC,sqrt(pow(emypar[2],2) + pow(fit->GetParError(1),2))); /// 8.0); + + if (isEdge(i)) { + gain_fit_isEdge->Fill(mypar[2] - fit->GetParameter(1)); + } + if (isInnerEdge(i)) { + gain_fit_isInnerEdge->Fill(mypar[2] - fit->GetParameter(1)); + } + if (isDouble(i)) { + gain_fit_isDouble->Fill(mypar[2] - fit->GetParameter(1)); + } + if (isNextToDouble(i)) { + gain_fit_isNextToDouble->Fill(mypar[2] - fit->GetParameter(1)); + } + if (isQuad(i)) { + gain_fit_isQuad->Fill(mypar[2] - fit->GetParameter(1)); + } + if (isBulk(i)) { + gain_fit_isBulk->Fill(mypar[2] - fit->GetParameter(1)); + } + + delete thiscalibration; + delete proj_noise; + delete proj_peak; + delete proj; + + } else { + pixel_mask[i] = false; + } + } // close loop pixel + } // close loop slices + + sprintf(savename,"plots/M%s_%s/CuFluo/%s/pixelmask_afterfit_%s_M%s.png", module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + pixelMaskObject->plotPixelMask(pixel_mask,savename); + + TPaveText *pave = new TPaveText(0.86,0.95,0.91,0.98,"blNDC"); + pave->SetBorderSize(0); + pave->SetFillStyle(0); + pave->SetTextSize(0.06); + pave->SetTextAlign(32); + + mapcanvas->cd(); + + fit_par3_2d->GetXaxis()->SetTitle("Column"); + fit_par3_2d->GetYaxis()->SetTitle("Row"); + fit_par3_2d->GetYaxis()->SetTitleOffset(0.7); + fit_par3_2d->Draw("colz"); + fit_par3_2d->GetZaxis()->SetRangeUser(0,50); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/fit_par3_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + fit_par4_2d->GetXaxis()->SetTitle("Column"); + fit_par4_2d->GetYaxis()->SetTitle("Row"); + fit_par4_2d->GetYaxis()->SetTitleOffset(0.7); + fit_par4_2d->Draw("colz"); + fit_par4_2d->GetZaxis()->SetRangeUser(0,500); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/fit_par4_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + fit_par5_2d->GetXaxis()->SetTitle("Column"); + fit_par5_2d->GetYaxis()->SetTitle("Row"); + fit_par5_2d->GetYaxis()->SetTitleOffset(0.7); + fit_par5_2d->Draw("colz"); + fit_par5_2d->GetZaxis()->SetRangeUser(0,0.5); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/fit_par5_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + fit_par6_2d->GetXaxis()->SetTitle("Column"); + fit_par6_2d->GetYaxis()->SetTitle("Row"); + fit_par6_2d->GetYaxis()->SetTitleOffset(0.7); + fit_par6_2d->Draw("colz"); + fit_par6_2d->GetZaxis()->SetRangeUser(1.0,1.25); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/fit_par6_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + fit_par7_2d->GetXaxis()->SetTitle("Column"); + fit_par7_2d->GetYaxis()->SetTitle("Row"); + fit_par7_2d->GetYaxis()->SetTitleOffset(0.7); + fit_par7_2d->Draw("colz"); + fit_par7_2d->GetZaxis()->SetRangeUser(0.,0.4); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/fit_par7_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + peak_fit_pos_2d->GetXaxis()->SetTitle("Column"); + peak_fit_pos_2d->GetYaxis()->SetTitle("Row"); + peak_fit_pos_2d->GetYaxis()->SetTitleOffset(0.7); + peak_fit_pos_2d->Draw("colz"); + peak_fit_pos_2d->GetZaxis()->SetRangeUser(low_ADU_peak,high_ADU_peak); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/peak_fit_pos_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + peak_fit_poserr_2d->GetXaxis()->SetTitle("Column"); + peak_fit_poserr_2d->GetYaxis()->SetTitle("Row"); + peak_fit_poserr_2d->GetYaxis()->SetTitleOffset(0.7); + peak_fit_poserr_2d->Draw("colz"); + peak_fit_poserr_2d->GetZaxis()->SetRangeUser(0,2); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/peak_fit_poserr_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + noise_fit_pos_2d->GetXaxis()->SetTitle("Column"); + noise_fit_pos_2d->GetYaxis()->SetTitle("Row"); + noise_fit_pos_2d->GetYaxis()->SetTitleOffset(0.7); + noise_fit_pos_2d->Draw("colz"); + noise_fit_pos_2d->GetZaxis()->SetRangeUser(-5,5); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/noise_fit_pos_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + noise_fit_poserr_2d->GetXaxis()->SetTitle("Column"); + noise_fit_poserr_2d->GetYaxis()->SetTitle("Row"); + noise_fit_poserr_2d->GetYaxis()->SetTitleOffset(0.7); + noise_fit_poserr_2d->Draw("colz"); + if (gain_str == "HG0") { + noise_fit_poserr_2d->GetZaxis()->SetRangeUser(0,0.1); + } else if (gain_str == "G0") { + noise_fit_poserr_2d->GetZaxis()->SetRangeUser(0,0.05); + } + sprintf(savename,"plots/M%s_%s/CuFluo/%s/noise_fit_poserr_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + gain_fit_2d->GetXaxis()->SetTitle("Column"); + gain_fit_2d->GetYaxis()->SetTitle("Row"); + gain_fit_2d->GetYaxis()->SetTitleOffset(0.7); + gain_fit_2d->Draw("colz"); + sprintf(savename,"%s [ADU/8 keV]", gain_str.c_str()); + pave->AddText((const char *)(savename)); + pave->Draw(); + gain_fit_2d->GetZaxis()->SetRangeUser(low_ADU_peak,high_ADU_peak); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/gain_fit_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + gain_fiterr_2d->GetXaxis()->SetTitle("Column"); + gain_fiterr_2d->GetYaxis()->SetTitle("Row"); + gain_fiterr_2d->GetYaxis()->SetTitleOffset(0.7); + gain_fiterr_2d->Draw("colz"); + gain_fiterr_2d->GetZaxis()->SetRangeUser(0,2); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/gain_fiterr_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + gain_ADUper1keV_2d->GetXaxis()->SetTitle("Column"); + gain_ADUper1keV_2d->GetYaxis()->SetTitle("Row"); + gain_ADUper1keV_2d->GetYaxis()->SetTitleOffset(0.7); + gain_ADUper1keV_2d->Draw("colz"); + if (gain_str == "HG0") { + gain_ADUper1keV_2d->GetZaxis()->SetRangeUser(80,120); + } else if (gain_str == "G0") { + gain_ADUper1keV_2d->GetZaxis()->SetRangeUser(35,50); + } + sprintf(savename,"plots/M%s_%s/CuFluo/%s/gain_ADUper1keV_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + gainerr_ADUper1keV_2d->GetXaxis()->SetTitle("Column"); + gainerr_ADUper1keV_2d->GetYaxis()->SetTitle("Row"); + gainerr_ADUper1keV_2d->GetYaxis()->SetTitleOffset(0.7); + gainerr_ADUper1keV_2d->Draw("colz"); + if (gain_str == "HG0") { + gainerr_ADUper1keV_2d->GetZaxis()->SetRangeUser(0,0.5); + } else if (gain_str == "G0") { + gainerr_ADUper1keV_2d->GetZaxis()->SetRangeUser(0,0.25); + } + sprintf(savename,"plots/M%s_%s/CuFluo/%s/gainerr_ADUper1keV_2d_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + mapcanvas->SaveAs((const char *)(savename)); + + c1->cd(); + + fit_par3->GetXaxis()->SetTitle("Fit par 3"); + fit_par3->Draw(); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/fit_par3_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + fit_par4->GetXaxis()->SetTitle("Fit par 4"); + fit_par4->Draw(); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/fit_par4_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + fit_par5->GetXaxis()->SetTitle("Fit par 5"); + fit_par5->Draw(); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/fit_par5_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + fit_par6->GetXaxis()->SetTitle("Fit par 6"); + fit_par6->Draw(); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/fit_par6_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + fit_par7->GetXaxis()->SetTitle("Fit par 7"); + fit_par7->Draw(); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/fit_par7_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + peak_fit_pos->GetXaxis()->SetTitle("Peak position [ADU]"); + peak_fit_pos->Draw(); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/peak_fit_pos_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + peak_fit_poserr->GetXaxis()->SetTitle("Peak position uncert [ADU]"); + peak_fit_poserr->Draw(); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/peak_fit_poserr_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + noise_fit_pos->GetXaxis()->SetTitle("Noise position [ADU]"); + noise_fit_pos->Draw(); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/noise_fit_pos_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + noise_fit_poserr->GetXaxis()->SetTitle("Noise position uncert [ADU]"); + noise_fit_poserr->Draw(); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/noise_fit_poserr_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + sprintf(savename,"Gain %s [ADU / 8 keV]", gain_str.c_str()); + gain_fit->GetXaxis()->SetTitle((const char *)(savename)); + gain_fit->Draw(); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/gain_fit_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + gain_fit->GetXaxis()->SetRangeUser(low_ADU_peak+30, high_ADU_peak); + gain_fit->Fit("gaus"); + gain_fit->Draw(); + c1->Update(); + TPaveText *pave2 = new TPaveText(0.6,0.8,0.94,0.94,"blNDC"); + pave2->SetBorderSize(0); + pave2->SetFillStyle(0); + pave2->SetTextSize(0.04); + pave2->SetTextAlign(32); + TF1* gain_fit_gaus = gain_fit->GetFunction("gaus"); + sprintf(savename,"Mean %0.2f #pm %0.2f", gain_fit_gaus->GetParameter(1), gain_fit_gaus->GetParError(1)); + pave2->AddText((const char *)(savename)); + sprintf(savename,"Sigma %0.2f #pm %0.2f", gain_fit_gaus->GetParameter(2), gain_fit_gaus->GetParError(2)); + pave2->AddText((const char *)(savename)); + pave2->Draw(); + gain_fit->SetStats(kFALSE); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/gain_fit_fit_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + gain_fiterr->GetXaxis()->SetTitle("Gain uncert [ADU / 8 keV]"); + gain_fiterr->Draw(); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/gain_fiterr_%s_M%s.png",module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + gain_fit_isEdge->SetLineColor(kBlue); + gain_fit_isInnerEdge->SetLineColor(kCyan); + gain_fit_isDouble->SetLineColor(kGreen+2); + gain_fit_isNextToDouble->SetLineColor(kRed); + gain_fit_isQuad->SetLineColor(kOrange); + + gain_fit_isEdge->Scale(1./gain_fit_isEdge->GetEntries()); + gain_fit_isInnerEdge->Scale(1./gain_fit_isInnerEdge->GetEntries()); + gain_fit_isDouble->Scale(1./gain_fit_isDouble->GetEntries()); + gain_fit_isNextToDouble->Scale(1./gain_fit_isNextToDouble->GetEntries()); + gain_fit_isQuad->Scale(1./gain_fit_isQuad->GetEntries()); + gain_fit_isBulk->Scale(1./gain_fit_isBulk->GetEntries()); + + TLegend *leg = new TLegend(0.62,0.6,0.93,0.93); + leg->AddEntry(gain_fit_isBulk, "Normal", "l"); + leg->AddEntry(gain_fit_isDouble, "Double", "l"); + leg->AddEntry(gain_fit_isNextToDouble, "Next to D", "l"); + leg->AddEntry(gain_fit_isEdge, "Edge", "l"); + leg->AddEntry(gain_fit_isInnerEdge, "Inner E", "l"); + + sprintf(savename,"Gain %s [ADU / 8 keV]", gain_str.c_str()); + gain_fit_isDouble->GetXaxis()->SetTitle((const char *)(savename)); + gain_fit_isDouble->GetYaxis()->SetTitle("Normalised"); + gain_fit_isDouble->GetYaxis()->SetTitleOffset(1.3); + gain_fit_isDouble->SetMinimum(0.0); + gain_fit_isDouble->SetMaximum(0.16); + gain_fit_isDouble->Draw(); + gain_fit_isEdge->Draw("same"); + gain_fit_isInnerEdge->Draw("same"); + gain_fit_isNextToDouble->Draw("same"); + gain_fit_isBulk->Draw("same"); + leg->Draw("same"); + sprintf(savename,"plots/M%s_%s/CuFluo/%s/gain_fit_perType_%s_M%s.png", module_str.c_str(), target.c_str(), gain_str.c_str(), gain_str.c_str(), module_str.c_str()); + c1->SaveAs((const char *)(savename)); + + sprintf(savename,"data/M%s_%s/CuFluo_gain_%s_M%s.root", module_str.c_str(), target.c_str(), gain_str.c_str(), module_str.c_str()); + TFile* saved_file = new TFile((const char *)(savename),"RECREATE"); + gain_ADUper1keV_2d->Write(); + gainerr_ADUper1keV_2d->Write(); + saved_file->Close(); + +} diff --git a/Fluo_exposure_Ti_In.sh b/Fluo_exposure_Ti_In.sh new file mode 100644 index 0000000..3059996 --- /dev/null +++ b/Fluo_exposure_Ti_In.sh @@ -0,0 +1,166 @@ +#!/bin/bash + +# to run do: bash CuFluo_exposure.sh + +# prerequisites: +# - the hostname is set +# - export PATH=/afs/psi.ch/project/sls_det_software/latest_slsDetectorPackage/build/bin:$PATH +# - export LD_LIBRARY_PATH=/afs/psi.ch/project/sls_det_software/latest_slsDetectorPackage/build/bin:$LD_LIBRARY_PATH +# - detector is on +# - source filename_creator.sh # +# - source pccalib.sh [pc] (mpc2012/pc-jungfrau-test) +# - xray tube is on and ramped for 40 kV, 60 mA, set to Cu + +shutter=1 # for big X-ray box +# shutter=3 # for small X-ray box + + +sls_detector_put stop #just in case + +sls_detector_put powerchip 1 + +# JF1.2 to fix saturation issue in HG0 +# sls_detector_put defaultdac vref_comp 420 highgain0 +# sls_detector_put setbit 0x58 18 +# End JF1.2 + +sls_detector_put period 0.002 +sls_detector_put exptime 0.000010 +sls_detector_put highvoltage 200 #200 + +# configure for receiver on mpc2012/pc-jungfrau-test/mpc2198/mpc3282 +# source pccalib.sh [pc] (mpc2012/pc-jungfrau-test/mpc2198/mpc3282) + +sls_detector_put udp_dstport 32410 +sls_detector_put udp_dstip $DSTIP #10.1.4.105 +sls_detector_put udp_dstmac $DSTMAC #3C:FD:FE:A2:14:D8 +sls_detector_put udp_srcip $SRCIP #10.1.4.9 +sls_detector_put udp_srcmac 00:ab:be:cc:dd:e2 +sls_detector_put rx_tcpport 1975 +sls_detector_put rx_hostname pc-jungfrau-02 + +sls_detector_put readoutspeed half_speed +#sls_detector_put readoutspeed full_speed +#sls_detector_put reg 0x59 0x1310 #0001 0011 0001 0000 + +#sls_detector_put readoutspeed 0 +#sls_detector_put reg 0x59 0x0100 #0000 0001 0000 0000 + +#CLI=/afs/psi.ch/project/sls_det_software/bin/sl7_binaries_to_be_removed_soon/xrayClient_sl7 + +CLI=/afs/psi.ch/project/sls_det_software/bin/xrayClient_sl8 #/vacuumClient_sl7 +# CLI=/afs/psi.ch/project/sls_det_software/bin/vacuumClient_sl8 # for small X-ray box + +$CLI setv 40 +$CLI setc 60 # for big X-ray box +# $CLI setc 55 # for small X-ray box +$CLI HV on + +sls_detector_put clearbit 0x5d 0 +sls_detector_put fwrite 0 + +echo "warmin up the board" +sls_detector_put frames 40000 +sls_detector_acquire +sleep 1 +echo "end of board warm up" + +declare -a arr=("Ti" "Fe" "Cu" "Se" "Mo" "Ag" "in") + +for i in "${arr[@]}" +do + + $CLI setfl Fluorescence $i + echo "Target moved" + sleep 1 + + +$CLI shutter $shutter off #$CLI shutter 1 off + + +# : ' # Uncomment to skip a G0 part + +sls_detector_put frames 1000 +sleep 1 +sls_detector_put fwrite 1 +sls_detector_put fpath /mnt/sls_det_storage/jungfrau_calib/data/Module_748_Calib/ +sls_detector_put fname pedeG0_target_${i}_ +echo "Saving file /mnt/sls_det_storage/jungfrau_calib/data/Module_748_Calib/pedeG0_target_${i}_" +sleep 2 +echo "recording G0 pede" +sls_detector_acquire +sleep 1 +# 1000 frames at 500 frames per second takes 2s + +echo "recording G1 pede" +sls_detector_put gainmode forceswitchg1 +sls_detector_acquire +sleep 1 + +echo "recording G2 pede" +sls_detector_put gainmode forceswitchg2 +sls_detector_acquire +sleep 1 + +sls_detector_put gainmode dynamic + +echo "closed G0 pede file and open the G0 CuFluo file" +sleep 1 + +sls_detector_put frames 220000 +$CLI shutter $shutter on #$CLI shutter 1 on +sleep 1 +sls_detector_put fpath "/mnt/sls_det_storage/jungfrau_calib/data/Module_748_Calib/" +sls_detector_put fname "FluoG0_target_${i}_" +echo "Saving file /mnt/sls_det_storage/jungfrau_calib/data/Module_748_Calib/FluoG0_target_${i}_" +sleep 1 +sls_detector_acquire +sleep 1 + +# 200k frames at 500 frames per second takes 400s +$CLI shutter $shutter off #$CLI shutter 1 off +# ' # Uncomment to skip a G0 part + +echo "closed G0 CuFluo file and open HG0 pede file" +sleep 1 + +sls_detector_put settings highgain0 + +sls_detector_put frames 1000 +echo "recording HG0 pede" +sls_detector_put fpath "/mnt/sls_det_storage/jungfrau_calib/data/Module_748_Calib/" +sls_detector_put fname "pedeHG0_target_${i}_" +echo "Saving file /mnt/sls_det_storage/jungfrau_calib/data/Module_748_Calib/pedeHG0_target_${i}_" +sleep 1 +sls_detector_acquire +sleep 1 + +# 1000 frames at 500 frames per second takes 2s +echo "closed HG0 pede file and open the HG0 CuFluo file" + +sls_detector_put frames 220000 +sleep 1 +$CLI shutter $shutter on #$CLI shutter 1 on +sleep 1 + +sls_detector_put fpath "/mnt/sls_det_storage/jungfrau_calib/data/Module_748_Calib/" +sls_detector_put fname "FluoHG0_target_${i}_" +echo "Saving file /mnt/sls_det_storage/jungfrau_calib/data/Module_748_Calib/FluoHG0_target_${i}_" +sleep 1 + +sls_detector_acquire +sleep 1 + +# 200k frames at 500 frames per second takes 400s + +$CLI shutter $shutter off #$CLI shutter 1 off + +sls_detector_put clearbit 0x5d 0 + +done + +$CLI setfl Fluorescence Ti + +sls_detector_put highvoltage 0 + +echo "Script finished" diff --git a/Fluo_fit.cpp b/Fluo_fit.cpp new file mode 100644 index 0000000..b73deda --- /dev/null +++ b/Fluo_fit.cpp @@ -0,0 +1,721 @@ +// to analyse the backplane pulsing data per module +// changes by VH 210906: to eliminate hardcoded absolute paths, uses location of the analysis root files as additional input argument (accordingly changed in filename_creator.sh) + +#include "TApplication.h" +#include "sls_detector_calibration/jungfrauCommonHeader.h" +#include "sls_detector_calibration/jungfrauCommonFunctions.h" + +#include "sls_detector_calibration/jungfrauFile.C" +#include "sls_detector_calibration/jungfrauPixelMask.C" +#include "sls_detector_calibration/jungfrauPedestal.C" + +#include "sls_detector_calibration/energyCalibration.h" +#include "sls_detector_calibration/energyCalibration.cpp" + +#include "TGraph.h" +#include "TGraphErrors.h" +#include "TF1.h" +#include "TFile.h" +#include "TPaveStats.h" +#include "TLegend.h" +#include "TPaveText.h" + +#include +//#include + +//#define NB_ENABLE 1 +//void nonblock(int state); +//#define NB_DISABLE 0 + +//TApplication* rootapp; +//TCanvas *A2; +//TCanvas *A3; +//TCanvas *A4; +//TCanvas *A5; +//TCanvas *A6; + + +//TPaveStats *st0; + + +//void PlotCanvas(void); + +double checkRangeMaxForAmplifierPlateau(double range_max) { + + // check that the range maximum is no more than 6.4 V + // to avoid non-linearity coming from amplifier plateau + if (range_max > 6400) { + return 6400; + } else { + return range_max; + } +} + + + + +bool isHGX=false; +int main(int argc, char* argv[]) { + + //nonblock(NB_ENABLE); + cout <<"opening the rootapp" <SetBatch(1); + gStyle->SetOptFit(11); + + /* + if (argc != 3) { + cout << "Correct usage:" << endl; + cout << "arg 1: specify module number" << endl; + cout << "arg 2: specify data location" << endl; + cout << "arg 3: specify column (x)" << endl; + cout << "arg 4: specify row (y)" << endl; + exit(1); + } + */ //uncomment for SR + + if (argc != 6) { + cout << "Correct usage:" << endl; + cout << "arg 1: specify module number" << endl; + cout << "arg 2: specify fluorescence target" << endl; + cout << "arg 3: gain settings" << endl; + cout << "arg 4: specify pixel x position" << endl; + cout << "arg 5: specify pixel y position" << endl; + exit(1); + } //uncomment for VH 210906 + string module_str = argv[1]; + string gain_str = argv[3]; + string target= argv[2]; + + string str2 =("HG0G1G2"); + string str3 =("HGOG1G2"); //filename creator had this bug + + + int column = atoi(argv[4]); + int row = atoi(argv[5]); + + + int pixel = column+row*1024; + + char data_loc[256]; + sprintf(data_loc,"/mnt/sls_det_storage/jungfrau_calib/jungfrau_ana_sophie/M%s_%s_CalibAna/", module_str.c_str(),target.c_str()); + cout << data_loc << endl; + + std::string folder_path(data_loc); + if (folder_path.find(str2) != string::npos) isHGX=true; + if (folder_path.find(str3) != string::npos) isHGX=true; + + bool isJF11=false; + if (gain_str == "HG0JF11") { + gain_str = "HG0"; + isJF11=true; + } + + // cout << data_loc.find(str2)<<" " << string::npos << " " << str2 << " " << data_loc <HG1->HG2 sequence - dynamicHG0" <G1->G2 sequence - dynamicG0" <SetLeftMargin(0.1); + A2->SetRightMargin(0.13); + A2->SetTopMargin(0.08); + A2->SetBottomMargin(0.15); + + A3->SetLeftMargin(0.1); + A3->SetRightMargin(0.13); + A3->SetTopMargin(0.08); + A3->SetBottomMargin(0.15); + + //file name + sprintf(filename,"%sCuFluo_%s_file0to21.root",folder_path.c_str(), gain_str.c_str()); + cout << "Loading file " << filename << endl; + TFile* f = new TFile((const char *)(filename),"READ"); + + int chip; + int CH = row*1024+column; + + if (CH < (65536*1)) { + chip = 1; + } else if (CH < (65536*2)) { + chip = 2; + } else if (CH < (65536*3)) { + chip = 3; + } else if (CH < (65536*4)) { + chip = 4; + } else if (CH < (65536*5)) { + chip = 5; + } else if (CH < (65536*6)) { + chip = 6; + } else if (CH < (65536*7)) { + chip = 7; + } else if (CH < (65536*8)){ + chip = 8; + } + cout<< "Chip "<< chip << " Channel number " << CH << endl; + + TH2I* hist0=(TH2I*)f->Get(Form("adc2d_%d",chip)); + cout << "Creating histogram for " << Form("adc2d_%d",chip) << endl; + TH1D* proj = hist0->ProjectionX("bin1",CH-(65536*(chip-1))+1,CH-(65536*(chip-1))+1); + cout << "Data for pixel "<< pixel << " is loaded" << endl; + + +if (proj->Integral(low_bin_noise,high_bin_noise)!=0 && proj->Integral(low_bin_peak,high_bin_peak)!=0) { + + A2->cd(); + cout << "Canvas Noise" << endl; + // noise + TH1D *proj_noise = dynamic_cast(proj->Rebin(nrebin,"proj_noise")); + proj_noise->SetStats(kTRUE); + proj_noise->GetXaxis()->SetRangeUser(proj->GetBinLowEdge(low_bin_noise),proj->GetBinLowEdge(high_bin_noise+1)); + proj_noise->Fit("gaus","Q"); + TF1 *fit = proj_noise->GetFunction("gaus"); + + proj_noise->Draw(); + A2->Update(); + proj_noise->GetXaxis()->SetTitle("Noise RMS [ADU]"); + proj_noise->GetXaxis()->SetRangeUser(-200,200); + fit->SetParNames("N_{#gamma}", "Peak pos", "Noise RMS"); + TPaveStats *st0 = (TPaveStats*)proj_noise->FindObject("stats"); + st0->SetX1NDC(0.53); + st0->SetX2NDC(0.94); + st0->SetY1NDC(0.75); + st0->SetY2NDC(0.94); + st0->SetBorderSize(0); + st0->SetTextSize(0.04); + A2->Modified(); + A2->Update(); + + A3->cd(); + + // peak + TH1D *proj_peak = dynamic_cast(proj->Rebin(nrebin,"proj_peak")); + proj_peak->SetStats(kTRUE); + proj_peak->GetXaxis()->SetRangeUser(proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + + + Double_t mypar[8]; + + + mypar[0] = 0.0; + mypar[1] = 0.0; + + + + if (target=="Ti") { + + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 24.; + } + + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.12; + } + + + // Kb/Ka position ratio + mypar[6] = 1.0; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.2; + } + + } + + + + + if (target=="Fe") { + + + // Peak position + + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 27.; + } + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.2; + } + + + // Kb/Ka position ratio + mypar[6] = 1.11; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.12; + } + + } + + + + + + if (target=="Cu") { + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 29.; + } + + + + // Peak hight + + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.14; + } + + // Kb/Ka position ratio + + mypar[6] = 1.11; // mypar[6] = 1.12; + + // Kb fraction + + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.14; + } + + } + + + if (target=="Se") { + + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 29.; + } + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.14; + } + + // Kb/Ka position ratio + mypar[6] = 1.11; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.14; + } + + } + + + if (target=="Mo") { + + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 29.; + } + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.14; + } + + // Kb/Ka position ratio + mypar[6] = 1.12; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.14; + } + + } + + if (target=="Ag") { + + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 29.; + } + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.14; + } + + // Kb/Ka position ratio + mypar[6] = 1.10; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.14; + } + + } + + + + if (target=="In") { + + + // Peak position + mypar[2] = proj_peak->GetBinCenter(proj_peak->GetMaximumBin()); + + // Noise RMS + if (gain_str == "G0") { + mypar[3] = 16.; + } else if (gain_str == "HG0") { + mypar[3] = 29.; + } + + // Peak hight + mypar[4] = proj_peak->GetBinContent(proj_peak->GetMaximumBin()); + + // Charge sharing + if (gain_str == "G0") { + mypar[5] = 0.17; + } else if (gain_str == "HG0") { + mypar[5] = 0.14; + } + + // Kb/Ka position ratio + mypar[6] = 1.13; + + // Kb fraction + if (gain_str == "G0") { + mypar[7] = 0.12; + } else if (gain_str == "HG0") { + mypar[7] = 0.14; + } + + } + + + Double_t emypar[8]; + energyCalibration *thiscalibration = new energyCalibration(); + thiscalibration->setScanSign(1); + thiscalibration->setStartParametersKb(mypar); + thiscalibration->fixParameter(0,0.); // no background + thiscalibration->fixParameter(1,0.); + TF1* fittedfun = thiscalibration->fitSpectrumKb(proj_peak,mypar,emypar); + + TF1 *gaus_Ka = new TF1("gaus_Ka","gaus",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + gaus_Ka->SetParameters(mypar[4],mypar[2],mypar[3]); + gaus_Ka->SetLineColor(kBlue); + + TF1 *erfc_Ka = new TF1("erfc_Ka","[0]/2.*(TMath::Erfc(([1]*(x-[2])/[3])/(TMath::Sqrt(2.))))",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + erfc_Ka->SetParameters(mypar[4]*mypar[5], 1, mypar[2], mypar[3]); + erfc_Ka->SetLineColor(kOrange); + + TF1 *gaus_Kb = new TF1("gaus_Kb","gaus",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + gaus_Kb->SetParameters(mypar[4]*mypar[7],mypar[6]*mypar[2],mypar[3]); + gaus_Kb->SetLineColor(kGreen+2); + + TF1 *erfc_Kb = new TF1("erfc_Kb","[0]/2.*(TMath::Erfc(([1]*(x-[2])/[3])/(TMath::Sqrt(2.))))",proj->GetBinLowEdge(low_bin_peak),proj->GetBinLowEdge(high_bin_peak+1)); + erfc_Kb->SetParameters(mypar[4]*mypar[7]*mypar[5], 1, mypar[6]*mypar[2], mypar[3]); + erfc_Kb->SetLineColor(kOrange+7); + + proj_peak->Draw(); + A3->Update(); + erfc_Kb->Draw("same"); + erfc_Ka->Draw("same"); + gaus_Kb->Draw("same"); + gaus_Ka->Draw("same"); + fittedfun->Draw("same"); + A3->Update(); + proj_peak->GetXaxis()->SetTitle("Pedestal corrected ADC [ADU]"); + fittedfun->SetParNames("Bkg height", "Bkg grad", "K_{#alpha} pos", "Noise RMS", "K_{#alpha} height", "CS", "K_{#beta}/K_{#alpha} pos", "K_{#beta} frac"); + TPaveStats *st = (TPaveStats*)proj_peak->FindObject("stats"); + st->SetX1NDC(0.15); + st->SetX2NDC(0.55); + st->SetY1NDC(0.7); + st->SetY2NDC(0.94); + st->SetBorderSize(0); + st->SetTextSize(0.04); + A3->Modified(); + A3->Update(); +} else { + std::cout << "Masked pixel"; + } + + +rootapp.Run(); +return 0; + +} + diff --git a/JFMC_CalibWriter_wBP_sc.cpp b/JFMC_CalibWriter_wBP_sc.cpp index 23f6903..72edf7c 100644 --- a/JFMC_CalibWriter_wBP_sc.cpp +++ b/JFMC_CalibWriter_wBP_sc.cpp @@ -66,7 +66,8 @@ int main(int argc, char* argv[]) { for (int sci = 0; sci < NSC; ++sci) { // CuFluo HG0 dataset - sprintf( savename, "data/M%s/CuFluo_gain_sc%d_HG0_M%s.root", module_str.c_str(), sci, module_str.c_str() ); + //sprintf( savename, "data/M%s/CuFluo_gain_sc%d_HG0_M%s.root", module_str.c_str(), sci, module_str.c_str() ); + sprintf( savename, "/mnt/sls_det_storage/jungfrau_calib/ana/M%s_CalibAna/data/CuFluo_gain_sc%d_HG0_M%s.root", module_str.c_str(), sci, module_str.c_str() ); TFile* FL_HG0_file = new TFile((char*)savename,"READ"); TH2F* FL_HG0_gain_map = 0; TH2F* FL_HG0_gainer_map = 0; @@ -80,7 +81,8 @@ int main(int argc, char* argv[]) { } // CuFluo G0 dataset - sprintf( savename, "data/M%s/CuFluo_gain_sc%d_G0_M%s.root", module_str.c_str(), sci, module_str.c_str() ); + //sprintf( savename, "data/M%s/CuFluo_gain_sc%d_G0_M%s.root", module_str.c_str(), sci, module_str.c_str() ); + sprintf( savename, "/mnt/sls_det_storage/jungfrau_calib/ana/M%s_CalibAna/data/CuFluo_gain_sc%d_G0_M%s.root", module_str.c_str(), sci, module_str.c_str() ); TFile* FL_G0_file = new TFile((char*)savename,"READ"); TH2F* FL_G0_gain_map = 0; TH2F* FL_G0_gainer_map = 0; diff --git a/Multi_filename_creator.sh b/Multi_filename_creator.sh new file mode 100644 index 0000000..37efa6f --- /dev/null +++ b/Multi_filename_creator.sh @@ -0,0 +1,144 @@ +#!/bin/bash + +if [[ "$0" == *"Multi_filename_creator.sh"* ]]; then + echo "script changes env. variables: should be invoked with source, not sh " + exit + +fi + +if [ ! -v $6 ]; then + echo $0 + echo "Run pccalib.sh [pc_name] to set the DST ip address before running the filename creator" + echo "printing filenames for jfcalib0 " $1 + echo "printing filenames for jfcalib1 " $2 + echo "printing filenames for jfcalib2 " $3 + echo "printing filenames for jfcalib3 " $4 + echo "printing filenames for jfcalib4 " $5 + echo "printing filenames for jfcalib5 " $6 + + #define folder structure + parentdir="/mnt/sls_det_storage/jungfrau_calib/" #"/home/l_msdetect/test/" #"/mnt/sls_det_storage/jungfrau_calib/" + calib0_relativedir="data/Module_"$1"_Calib/" + calib1_relativedir="data/Module_"$2"_Calib/" + calib2_relativedir="data/Module_"$3"_Calib/" + calib3_relativedir="data/Module_"$4"_Calib/" + calib4_relativedir="data/Module_"$5"_Calib/" + calib5_relativedir="data/Module_"$6"_Calib/" + ana0_relativedir="ana/M"$1"_CalibAna/" + ana1_relativedir="ana/M"$2"_CalibAna/" + ana2_relativedir="ana/M"$3"_CalibAna/" + ana3_relativedir="ana/M"$4"_CalibAna/" + ana4_relativedir="ana/M"$5"_CalibAna/" + ana5_relativedir="ana/M"$6"_CalibAna/" + calibdatafolder0=$parentdir$calib0_relativedir + calibdatafolder1=$parentdir$calib1_relativedir + calibdatafolder2=$parentdir$calib2_relativedir + calibdatafolder3=$parentdir$calib3_relativedir + calibdatafolder4=$parentdir$calib4_relativedir + calibdatafolder5=$parentdir$calib5_relativedir + anadatafolder0=$parentdir$ana0_relativedir + anadatafolder1=$parentdir$ana1_relativedir + anadatafolder2=$parentdir$ana2_relativedir + anadatafolder3=$parentdir$ana3_relativedir + anadatafolder4=$parentdir$ana4_relativedir + anadatafolder5=$parentdir$ana5_relativedir + + datestring=$(date +%F) + echo "Relative calib directory is "$calib0_relativedir + echo "Relative calib directory is "$calib1_relativedir + echo "Relative calib directory is "$calib2_relativedir + echo "Relative calib directory is "$calib3_relativedir + echo "Relative calib directory is "$calib4_relativedir + echo "Relative calib directory is "$calib5_relativedir + echo "Relative analysis results directory is "$ana0_relativedir + echo "Relative analysis results directory is "$ana1_relativedir + echo "Relative analysis results directory is "$ana2_relativedir + echo "Relative analysis results directory is "$ana3_relativedir + echo "Relative analysis results directory is "$ana4_relativedir + echo "Relative analysis results directory is "$ana5_relativedir + echo "mkdir "$calibdatafolder0 "if not already existing." + echo "mkdir "$calibdatafolder1 "if not already existing." + echo "mkdir "$calibdatafolder2 "if not already existing." + echo "mkdir "$calibdatafolder3 "if not already existing." + echo "mkdir "$calibdatafolder4 "if not already existing." + echo "mkdir "$calibdatafolder5 "if not already existing." + + mkdir -p $calibdatafolder0 + mkdir -p $calibdatafolder1 + mkdir -p $calibdatafolder2 + mkdir -p $calibdatafolder3 + mkdir -p $calibdatafolder4 + mkdir -p $calibdatafolder5 + + Rcv0="./slsDetector_bin/ju_udp_receiver_3threads_2_0_jfcalib0 S " #pc-jungfrau-02 RHEL8 + Rcv1="./slsDetector_bin/ju_udp_receiver_3threads_2_0_jfcalib1 S " #pc-jungfrau-02 RHEL8 + Rcv2="./slsDetector_bin/ju_udp_receiver_3threads_2_0_jfcalib2 S " #pc-jungfrau-02 RHEL8 + Rcv3="./slsDetector_bin/ju_udp_receiver_3threads_2_0_jfcalib3 S " #pc-jungfrau-02 RHEL8 + Rcv4="./slsDetector_bin/ju_udp_receiver_3threads_2_0_jfcalib4 S " #pc-jungfrau-02 RHEL8 + Rcv5="./slsDetector_bin/ju_udp_receiver_3threads_2_0_jfcalib5 S " #pc-jungfrau-02 RHEL8 + + export TKBPG0_0=$Rcv0$calibdatafolder0"BP_M"$1"_"$datestring"_ "$DSTIP + export TKBPG0_1=$Rcv1$calibdatafolder1"BP_M"$2"_"$datestring"_ "$DSTIP + export TKBPG0_2=$Rcv2$calibdatafolder2"BP_M"$3"_"$datestring"_ "$DSTIP + export TKBPG0_3=$Rcv3$calibdatafolder3"BP_M"$4"_"$datestring"_ "$DSTIP + export TKBPG0_4=$Rcv4$calibdatafolder4"BP_M"$5"_"$datestring"_ "$DSTIP + export TKBPG0_5=$Rcv5$calibdatafolder5"BP_M"$6"_"$datestring"_ "$DSTIP + + export TKBPHG0_0=$Rcv0$calibdatafolder0"BP_M"$1"_"$datestring"_HGOG1G2_ "$DSTIP + export TKBPHG0_1=$Rcv1$calibdatafolder1"BP_M"$2"_"$datestring"_HGOG1G2_ "$DSTIP + export TKBPHG0_2=$Rcv2$calibdatafolder2"BP_M"$3"_"$datestring"_HGOG1G2_ "$DSTIP + export TKBPHG0_3=$Rcv3$calibdatafolder3"BP_M"$4"_"$datestring"_HGOG1G2_ "$DSTIP + export TKBPHG0_4=$Rcv4$calibdatafolder4"BP_M"$5"_"$datestring"_HGOG1G2_ "$DSTIP + export TKBPHG0_5=$Rcv5$calibdatafolder5"BP_M"$6"_"$datestring"_HGOG1G2_ "$DSTIP + + export TKCSHG0_0=$Rcv0$calibdatafolder0"CS_M"$1"_"$datestring"_HGOG1G2_ "$DSTIP + export TKCSHG0_1=$Rcv1$calibdatafolder1"CS_M"$2"_"$datestring"_HGOG1G2_ "$DSTIP + export TKCSHG0_2=$Rcv2$calibdatafolder2"CS_M"$3"_"$datestring"_HGOG1G2_ "$DSTIP + export TKCSHG0_3=$Rcv3$calibdatafolder3"CS_M"$4"_"$datestring"_HGOG1G2_ "$DSTIP + export TKCSHG0_4=$Rcv4$calibdatafolder4"CS_M"$5"_"$datestring"_HGOG1G2_ "$DSTIP + export TKCSHG0_5=$Rcv5$calibdatafolder5"CS_M"$6"_"$datestring"_HGOG1G2_ "$DSTIP + + export TKCSG0_0=$Rcv0$calibdatafolder0"CS_M"$1"_"$datestring"_ $DSTIP" + export TKCSG0_1=$Rcv1$calibdatafolder1"CS_M"$2"_"$datestring"_ $DSTIP" + export TKCSG0_2=$Rcv2$calibdatafolder2"CS_M"$3"_"$datestring"_ $DSTIP" + export TKCSG0_3=$Rcv3$calibdatafolder3"CS_M"$4"_"$datestring"_ $DSTIP" + export TKCSG0_4=$Rcv4$calibdatafolder4"CS_M"$5"_"$datestring"_ $DSTIP" + export TKCSG0_5=$Rcv5$calibdatafolder5"CS_M"$6"_"$datestring"_ $DSTIP" + + echo "exporting the fluorescence receiver commands " + + export TKFG0_0=$Rcv0$calibdatafolder0"CuFluoG0_M"$1"_"$datestring"_ "$DSTIP + export TKFG0_1=$Rcv1$calibdatafolder1"CuFluoG0_M"$2"_"$datestring"_ "$DSTIP + export TKFG0_2=$Rcv2$calibdatafolder2"CuFluoG0_M"$3"_"$datestring"_ "$DSTIP + export TKFG0_3=$Rcv3$calibdatafolder3"CuFluoG0_M"$4"_"$datestring"_ "$DSTIP + export TKFG0_4=$Rcv4$calibdatafolder4"CuFluoG0_M"$5"_"$datestring"_ "$DSTIP + export TKFG0_5=$Rcv5$calibdatafolder5"CuFluoG0_M"$6"_"$datestring"_ "$DSTIP + + export TKFHG0_0=$Rcv0$calibdatafolder0"CuFluoHG0_M"$1"_"$datestring"_ "$DSTIP + export TKFHG0_1=$Rcv1$calibdatafolder1"CuFluoHG0_M"$2"_"$datestring"_ "$DSTIP + export TKFHG0_2=$Rcv2$calibdatafolder2"CuFluoHG0_M"$3"_"$datestring"_ "$DSTIP + export TKFHG0_3=$Rcv3$calibdatafolder3"CuFluoHG0_M"$4"_"$datestring"_ "$DSTIP + export TKFHG0_4=$Rcv4$calibdatafolder4"CuFluoHG0_M"$5"_"$datestring"_ "$DSTIP + export TKFHG0_5=$Rcv5$calibdatafolder5"CuFluoHG0_M"$6"_"$datestring"_ "$DSTIP + + export TKPG0_0=$Rcv0$calibdatafolder0"pedeG0_M"$1"_"$datestring"_ "$DSTIP + export TKPG0_1=$Rcv1$calibdatafolder1"pedeG0_M"$2"_"$datestring"_ "$DSTIP + export TKPG0_2=$Rcv2$calibdatafolder2"pedeG0_M"$3"_"$datestring"_ "$DSTIP + export TKPG0_3=$Rcv3$calibdatafolder3"pedeG0_M"$4"_"$datestring"_ "$DSTIP + export TKPG0_4=$Rcv4$calibdatafolder4"pedeG0_M"$5"_"$datestring"_ "$DSTIP + export TKPG0_5=$Rcv5$calibdatafolder5"pedeG0_M"$6"_"$datestring"_ "$DSTIP + + export TKPHG0_0=$Rcv0$calibdatafolder0"pedeHG0_M"$1"_"$datestring"_ "$DSTIP + export TKPHG0_1=$Rcv1$calibdatafolder1"pedeHG0_M"$2"_"$datestring"_ "$DSTIP + export TKPHG0_2=$Rcv2$calibdatafolder2"pedeHG0_M"$3"_"$datestring"_ "$DSTIP + export TKPHG0_3=$Rcv3$calibdatafolder3"pedeHG0_M"$4"_"$datestring"_ "$DSTIP + export TKPHG0_4=$Rcv4$calibdatafolder4"pedeHG0_M"$5"_"$datestring"_ "$DSTIP + export TKPHG0_5=$Rcv5$calibdatafolder5"pedeHG0_M"$6"_"$datestring"_ "$DSTIP + +else + echo "Specify module number for each jfcalib board after firt argument" + echo "Script finished" +fi + + + diff --git a/filename_creator.sh b/filename_creator.sh index ba97106..45851f7 100644 --- a/filename_creator.sh +++ b/filename_creator.sh @@ -13,7 +13,7 @@ echo "printing filenames for module " $1 #define folder structure -parentdir="/mnt/sls_det_storage/jungfrau_calib/" +parentdir="/mnt/sls_det_storage/jungfrau_calib/" #"/home/l_msdetect/test/" #"/mnt/sls_det_storage/jungfrau_calib/" calib_relativedir="data/Module_"$1"_Calib/" ana_relativedir="ana/M"$1"_CalibAna/" calibdatafolder=$parentdir$calib_relativedir diff --git a/makefile b/makefile index d02138b..a073b89 100644 --- a/makefile +++ b/makefile @@ -104,3 +104,13 @@ CS_analysis_M439: CS_analysis_M439.cpp Default_pixels_arrays: Default_pixels_arrays.cpp g++ -Wall -O3 -m64 -I$(ROOTSYS)/include -L$(ROOTSYS)/lib -lGui -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -pthread -lm -ldl -rdynamic Default_pixels_arrays.cpp -o Default_pixels_arrays + +Fluo_analysis_Ti_In: Fluo_analysis_Ti_In.cpp + g++ -Wall -O3 -m64 -I$(ROOTSYS)/include -L$(ROOTSYS)/lib -lGui -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -pthread -lm -ldl -rdynamic Fluo_analysis_Ti_In.cpp -o Fluo_analysis_Ti_In + + +Fluo_fit: Fluo_fit.cpp + g++ -Wall -ggdb -fopenmp -O3 -m64 -I$(ROOTSYS)/include -L$(ROOTSYS)/lib -lGui -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -pthread -lm -ldl -rdynamic -lrt -o Fluo_fit Fluo_fit.cpp +CuFluo_fit_sc: CuFluo_fit_sc.cpp + g++ -Wall -ggdb -fopenmp -O3 -m64 -I$(ROOTSYS)/include -L$(ROOTSYS)/lib -lGui -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -pthread -lm -ldl -rdynamic -lrt -o CuFluo_fit_sc CuFluo_fit_sc.cpp +