- Int_t maxBinRef[4], nBinRef[4];
- Float_t xMaxRef[4], maxXvalRef[4], xlowRef[4];
- Float_t meanRef[2], sigmaRef[2];
- TF1 *funRef[4];
- //
- maxBinRef[0] = hPMRefChg->GetMaximumBin();
- nBinRef[0] = (hPMRefChg->GetXaxis())->GetNbins();
- xMaxRef[0] = (hPMRefChg->GetXaxis())->GetXmax();
- maxXvalRef[0] = maxBinRef[0]*xMaxRef[0]/nBinRef[0];
- //
- if(maxXvalRef[0]-100.<0.) {xlowRef[0]=0.;}
- else xlowRef[0] = maxXvalRef[0];
- hPMRefChg->Fit("gaus","Q","",xlowRef[0],maxXvalRef[0]+100.);
- funRef[0] = hPMRefChg->GetFunction("gaus");
- meanRef[0] = (Float_t) (funRef[0]->GetParameter(1));
- sigmaRef[0] = (Float_t) (funRef[0]->GetParameter(2));
- //
- maxBinRef[1] = hPMRefAhg->GetMaximumBin();
- nBinRef[1] = (hPMRefAhg->GetXaxis())->GetNbins();
- xMaxRef[1] = (hPMRefAhg->GetXaxis())->GetXmax();
- maxXvalRef[1] = maxBinRef[1]*xMaxRef[1]/nBinRef[1];
- //
- if(maxXvalRef[1]-100.<0.) {xlowRef[1]=0.;}
- else xlowRef[1] = maxXvalRef[1];
- hPMRefAhg->Fit("gaus","Q","",xlowRef[1],maxXvalRef[1]+100.);
- funRef[1] = hPMRefAhg->GetFunction("gaus");
- meanRef[1] = (Float_t) (funRef[1]->GetParameter(1));
- sigmaRef[1] = (Float_t) (funRef[1]->GetParameter(2));
- //
- maxBinRef[2] = hPMRefClg->GetMaximumBin();
- nBinRef[2] = (hPMRefClg->GetXaxis())->GetNbins();
- xMaxRef[2] = (hPMRefClg->GetXaxis())->GetXmax();
- maxXvalRef[2] = maxBinRef[2]*xMaxRef[2]/nBinRef[2];
- //
- if(maxXvalRef[2]-100.<0.) {xlowRef[2]=0.;}
- else xlowRef[2] = maxXvalRef[2];
- hPMRefClg->Fit("gaus","Q","",xlowRef[2],maxXvalRef[2]+100.);
- funRef[2] = hPMRefClg->GetFunction("gaus");
- meanRef[2] = (Float_t) (funRef[2]->GetParameter(1));
- sigmaRef[2] = (Float_t) (funRef[2]->GetParameter(2));
- //
- maxBinRef[3] = hPMRefAlg->GetMaximumBin();
- nBinRef[3] = (hPMRefAlg->GetXaxis())->GetNbins();
- xMaxRef[3] = (hPMRefAlg->GetXaxis())->GetXmax();
- maxXvalRef[3] = maxBinRef[3]*xMaxRef[3]/nBinRef[3];
- //
- if(maxXvalRef[3]-100.<0.) {xlowRef[3]=0.;}
- else xlowRef[3] = maxXvalRef[3];
- hPMRefAlg->Fit("gaus","Q","",xlowRef[3],maxXvalRef[3]+100.);
- funRef[3] = hPMRefAlg->GetFunction("gaus");
- meanRef[3] = (Float_t) (funRef[3]->GetParameter(1));
- sigmaRef[3] = (Float_t) (funRef[3]->GetParameter(2));
- //
+ Int_t detector[2*kNChannels], quad[2*kNChannels];
+ Int_t maxBin[2*kNChannels], nBin[2*kNChannels];
+ Float_t xMax[2*kNChannels], maxXval[2*kNChannels], xlow[2*kNChannels];
+ Float_t mean[2*kNChannels], sigma[2*kNChannels];
+ for(Int_t t=0; t<2*kNChannels; t++){
+ detector[t] = quad[t] = 0;
+ maxBin[t] = nBin[t] = 0;
+ xMax[t] = maxXval[t] = xlow[t] = 0.;
+ mean[t] = sigma[t] = 0.;
+ }
+ TF1 *fun[2*kNChannels];
+ Int_t atLeastOneHisto=0;
+
+ // ******** High gain chain ********
+ for(Int_t k=0; k<5; k++){
+ // --- ZNC
+ detector[k] = 1;
+ quad[k] = k;
+ maxBin[k] = hZNChg[k]->GetMaximumBin();
+ nBin[k] = (hZNChg[k]->GetXaxis())->GetNbins();
+ xMax[k] = (hZNChg[k]->GetXaxis())->GetXmax();
+ if(nBin[k]!=0) maxXval[k] = maxBin[k]*xMax[k]/nBin[k];
+ if(maxXval[k]-150.<0.) xlow[k]=0.;
+ else xlow[k] = maxXval[k]-150.;
+ // checking if at least one histo is fitted
+ if(hZNChg[k]->GetEntries()!=0 || hZNChg[k]->GetMean()>0){
+ atLeastOneHisto=1;
+ //
+ hZNChg[k]->Fit("gaus","Q","",xlow[k],maxXval[k]+150.);
+ fun[k] = hZNChg[k]->GetFunction("gaus");
+ mean[k] = (Float_t) (fun[k]->GetParameter(1));
+ sigma[k] = (Float_t) (fun[k]->GetParameter(2));
+ }
+ // --- ZPC
+ detector[k+5] = 2;
+ quad[k+5] = k;
+ maxBin[k+5] = hZPChg[k]->GetMaximumBin();
+ nBin[k+5] = (hZPChg[k]->GetXaxis())->GetNbins();
+ xMax[k+5] = (hZPChg[k]->GetXaxis())->GetXmax();
+ if(nBin[k+5]!=0) maxXval[k+5] = maxBin[k+5]*xMax[k+5]/nBin[k+5];
+ if(maxXval[k+5]-150.<0.) xlow[k+5]=0.;
+ else xlow[k+5] = maxXval[k+5]-150.;
+ if(hZPChg[k]->GetEntries()!=0 || hZPChg[k]->GetMean()>0){
+ atLeastOneHisto=1;
+ //
+ hZPChg[k]->Fit("gaus","Q","",xlow[k+5],maxXval[k+5]+150.);
+ fun[k+5] = hZPChg[k]->GetFunction("gaus");
+ mean[k+5] = (Float_t) (fun[k+5]->GetParameter(1));
+ sigma[k+5] = (Float_t) (fun[k+5]->GetParameter(2));
+ }
+ // --- ZEM
+/* if(k<2){
+ detector[k+10] = 3;
+ quad[k+10] = k+1;
+ maxBin[k+10] = hZEMhg[k]->GetMaximumBin();
+ nBin[k+10] = (hZEMhg[k]->GetXaxis())->GetNbins();
+ xMax[k+10] = (hZEMhg[k]->GetXaxis())->GetXmax();
+ if(nBin[k+10]!=0) maxXval[k+10] = maxBin[k+10]*xMax[k+10]/nBin[k+10];
+ if(maxXval[k+10]-150.<0.) xlow[k+10]=0.;
+ else xlow[k+10] = maxXval[k+10]-150.;
+ printf("ZEM%d: entries %1.0f mean %1.0f\n",k+1,hZEMhg[k]->GetEntries(),hZEMhg[k]->GetMean());
+ if(hZEMhg[k]->GetEntries()!=0 || hZEMhg[k]->GetMean()>0){
+ atLeastOneHisto=1;
+ //
+ hZEMhg[k]->Fit("gaus","Q","",xlow[k+10],maxXval[k+10]+150.);
+ fun[k+10] = hZEMhg[k]->GetFunction("gaus");
+ mean[k+10] = (Float_t) (fun[k+10]->GetParameter(1));
+ sigma[k+10] = (Float_t) (fun[k+10]->GetParameter(2));
+ }
+ }
+*/
+ // --- ZNA
+ detector[k+12] = 4;
+ quad[k+12] = k;
+ maxBin[k+12] = hZNAhg[k]->GetMaximumBin();
+ nBin[k+12] = (hZNAhg[k]->GetXaxis())->GetNbins();
+ xMax[k+12] = (hZNAhg[k]->GetXaxis())->GetXmax();
+ if(nBin[k+12]!=0) maxXval[k+12] = maxBin[k+12]*xMax[k+12]/nBin[k+12];
+ if(maxXval[k+12]-150.<0.) xlow[k+12]=0.;
+ else xlow[k+12] = maxXval[k+12]-150.;
+ if(hZNAhg[k]->GetEntries()!=0 || hZNAhg[k]->GetMean()>0){
+ atLeastOneHisto=1;
+ //
+ hZNAhg[k]->Fit("gaus","Q","",xlow[k+12],maxXval[k+12]+150.);
+ fun[k+12] = hZNAhg[k]->GetFunction("gaus");
+ mean[k+12] = (Float_t) (fun[k+12]->GetParameter(1));
+ sigma[k+12] = (Float_t) (fun[k+12]->GetParameter(2));
+ }
+ // --- ZPA
+ detector[k+17] = 4;
+ quad[k+17] = 5;
+ maxBin[k+17] = hZPAhg[k]->GetMaximumBin();
+ nBin[k+17] = (hZPAhg[k]->GetXaxis())->GetNbins();
+ xMax[k+17] = (hZPAhg[k]->GetXaxis())->GetXmax();
+ if(nBin[k+17]!=0) maxXval[k+17] = maxBin[k+17]*xMax[k+17]/nBin[k+17];
+ if(maxXval[k+17]-150.<0.) xlow[k+17]=0.;
+ else xlow[k+17] = maxXval[k+17]-150.;
+ if(hZPAhg[k]->GetEntries()!=0 || hZPAhg[k]->GetMean()>0){
+ atLeastOneHisto=1;
+ //
+ hZPAhg[k]->Fit("gaus","Q","",xlow[k+17],maxXval[k+17]+150.);
+ fun[k+17] = hZPAhg[k]->GetFunction("gaus");
+ mean[k+17] = (Float_t) (fun[k+17]->GetParameter(1));
+ sigma[k+17] = (Float_t) (fun[k+17]->GetParameter(2));
+ }
+ }
+ // ~~~~~~~~ PM Ref side C ~~~~~~~~
+ detector[22] = 1;
+ quad[22] = 5;
+ maxBin[22] = hPMRefChg->GetMaximumBin();
+ nBin[22] = (hPMRefChg->GetXaxis())->GetNbins();
+ xMax[22] = (hPMRefChg->GetXaxis())->GetXmax();
+ if(nBin[22]!=0) maxXval[22] = maxBin[22]*xMax[22]/nBin[22];
+ if(maxXval[22]-150.<0.) xlow[22]=0.;
+ else xlow[22] = maxXval[22]-150.;
+ if(hPMRefChg->GetEntries()!=0){
+ atLeastOneHisto=1;
+ //
+ hPMRefChg->Fit("gaus","Q","",xlow[22],maxXval[22]+150.);
+ fun[22] = hPMRefChg->GetFunction("gaus");
+ mean[22] = (Float_t) (fun[22]->GetParameter(1));
+ sigma[22] = (Float_t) (fun[22]->GetParameter(2));
+ }
+ // ~~~~~~~~ PM Ref side A ~~~~~~~~
+ detector[23] = 4;
+ quad[23] = 5;
+ maxBin[23] = hPMRefAhg->GetMaximumBin();
+ nBin[23] = (hPMRefAhg->GetXaxis())->GetNbins();
+ xMax[23] = (hPMRefAhg->GetXaxis())->GetXmax();
+ if(nBin[23]!=0) maxXval[23] = maxBin[23]*xMax[23]/nBin[23];
+ if(maxXval[23]-100.<0.) xlow[23]=0.;
+ else xlow[23] = maxXval[23]-150.;
+ if(hPMRefAhg->GetEntries()!=0){
+ atLeastOneHisto=1;
+ //
+ hPMRefAhg->Fit("gaus","Q","",xlow[23],maxXval[23]+100.);
+ fun[23] = hPMRefAhg->GetFunction("gaus");
+ mean[23] = (Float_t) (fun[23]->GetParameter(1));
+ sigma[23] = (Float_t) (fun[23]->GetParameter(2));
+ }
+
+ // ******** Low gain chain ********
+/* Int_t kOffset = 24;
+ for(Int_t k=0; k<5; k++){
+ // --- ZNC
+ detector[k+kOffset] = 1;
+ quad[k+kOffset] = k;
+ maxBin[k+kOffset] = hZNClg[k]->GetMaximumBin();
+ nBin[k+kOffset] = (hZNClg[k]->GetXaxis())->GetNbins();
+ xMax[k+kOffset] = (hZNClg[k]->GetXaxis())->GetXmax();
+ if(nBin[k+kOffset]!=0) maxXval[k+kOffset] = maxBin[k+kOffset]*xMax[k+kOffset]/nBin[k+kOffset];
+ if(maxXval[k+kOffset]-150.<0.) xlow[k+kOffset]=0.;
+ else xlow[k+kOffset] = maxXval[k+kOffset]-150.;
+ if(hZNClg[k]->GetEntries()!=0){
+ atLeastOneHisto=1;
+ //
+ hZNClg[k]->Fit("gaus","Q","",xlow[k+kOffset],maxXval[k+kOffset]+150.);
+ fun[k+kOffset] = hZNClg[k]->GetFunction("gaus");
+ mean[k+kOffset] = (Float_t) (fun[k+kOffset]->GetParameter(1));
+ sigma[k+kOffset] = (Float_t) (fun[k+kOffset]->GetParameter(2));
+ }
+ // --- ZPC
+ detector[k+kOffset+5] = 2;
+ quad[k+kOffset+5] = k;
+ maxBin[k+kOffset+5] = hZPClg[k]->GetMaximumBin();
+ nBin[k+kOffset+5] = (hZPClg[k]->GetXaxis())->GetNbins();
+ xMax[k+kOffset+5] = (hZPClg[k]->GetXaxis())->GetXmax();
+ if(nBin[k+kOffset+5]!=0) maxXval[k+kOffset+5] = maxBin[k+kOffset+5]*xMax[k+kOffset+5]/nBin[k+kOffset+5];
+ if(maxXval[k+kOffset+5]-150.<0.) xlow[k+kOffset+5]=0.;
+ else xlow[k+kOffset+5] = maxXval[k+kOffset+5]-150.;
+ if(hZPClg[k]->GetEntries()!=0){
+ atLeastOneHisto=1;
+ //
+ hZPClg[k]->Fit("gaus","Q","",xlow[k+kOffset+5],maxXval[k+kOffset+5]+150.);
+ fun[k+kOffset+5] = hZPClg[k]->GetFunction("gaus");
+ mean[k+kOffset+5] = (Float_t) (fun[k+kOffset+5]->GetParameter(1));
+ sigma[k+kOffset+5] = (Float_t) (fun[k+kOffset+5]->GetParameter(2));
+ }
+ // --- ZEM1
+ if(k+kOffset<2){
+ detector[k+kOffset+10] = 3;
+ quad[k+kOffset+10] = k+1;
+ maxBin[k+kOffset+10] = hZEMlg[k]->GetMaximumBin();
+ nBin[k+kOffset+10] = (hZEMlg[k]->GetXaxis())->GetNbins();
+ xMax[k+kOffset+10] = (hZEMlg[k]->GetXaxis())->GetXmax();
+ if(nBin[k+kOffset+10]!=0) maxXval[k+kOffset+10] = maxBin[k+kOffset+10]*xMax[k+kOffset+10]/nBin[k+kOffset+10];
+ if(maxXval[k+kOffset+10]-150.<0.) xlow[k+kOffset+10]=0.;
+ else xlow[k+kOffset+10] = maxXval[k+kOffset+10]-150.;
+ if(hZEMlg[k]->GetEntries()!=0){
+ atLeastOneHisto=1;
+ //
+ hZEMlg[k]->Fit("gaus","Q","",xlow[k+kOffset+10],maxXval[k+kOffset+10]+150.);
+ fun[k+kOffset+10] = hZEMlg[k]->GetFunction("gaus");
+ mean[k+kOffset+10] = (Float_t) (fun[k+kOffset+10]->GetParameter(1));
+ sigma[k+kOffset+10] = (Float_t) (fun[k+kOffset+10]->GetParameter(2));
+ }
+ }
+ // --- ZNA
+ detector[k+kOffset+12] = 4;
+ quad[k+kOffset+12] = k;
+ maxBin[k+kOffset+12] = hZNAlg[k]->GetMaximumBin();
+ nBin[k+kOffset+12] = (hZNAlg[k]->GetXaxis())->GetNbins();
+ xMax[k+kOffset+12] = (hZNAlg[k]->GetXaxis())->GetXmax();
+ if(nBin[k+kOffset+12]!=0) maxXval[k+kOffset+12] = maxBin[k+kOffset+12]*xMax[k+kOffset+12]/nBin[k+kOffset+12];
+ if(maxXval[k+kOffset+12]-150.<0.) xlow[k+kOffset+12]=0.;
+ else xlow[k+kOffset+12] = maxXval[k+kOffset+12]-150.;
+ if(hZNAlg[k]->GetEntries()!=0){
+ atLeastOneHisto=1;
+ //
+ hZNAlg[k]->Fit("gaus","Q","",xlow[k+kOffset+12],maxXval[k+kOffset+12]+150.);
+ fun[k+kOffset+12] = hZNAlg[k]->GetFunction("gaus");
+ mean[k+kOffset+12] = (Float_t) (fun[k+kOffset+12]->GetParameter(1));
+ sigma[k+kOffset+12] = (Float_t) (fun[k+kOffset+12]->GetParameter(2));
+ }
+ // --- ZPA
+ detector[k+kOffset+17] = 5;
+ quad[k+kOffset+17] = k;
+ maxBin[k+kOffset+17] = hZPAlg[k]->GetMaximumBin();
+ nBin[k+kOffset+17] = (hZPAlg[k]->GetXaxis())->GetNbins();
+ xMax[k+kOffset+17] = (hZPAlg[k]->GetXaxis())->GetXmax();
+ if(nBin[k+kOffset+17]!=0) maxXval[k+kOffset+17] = maxBin[k+kOffset+17]*xMax[k+kOffset+17]/nBin[k+kOffset+17];
+ if(maxXval[k+kOffset+17]-150.<0.) xlow[k+kOffset+17]=0.;
+ else xlow[k+kOffset+17] = maxXval[k+kOffset+17]-150.;
+ if(hZPAlg[k]->GetEntries()!=0){
+ atLeastOneHisto=1;
+ //
+ hZPAlg[k]->Fit("gaus","Q","",xlow[k+kOffset+17],maxXval[k+kOffset+17]+150.);
+ fun[k+kOffset+17] = hZPAlg[k]->GetFunction("gaus");
+ mean[k+kOffset+17] = (Float_t) (fun[k+kOffset+17]->GetParameter(1));
+ sigma[k+kOffset+17] = (Float_t) (fun[k+kOffset+17]->GetParameter(2));
+ }
+ }
+ // ~~~~~~~~ PM Ref side C ~~~~~~~~
+ detector[46] = 1;
+ quad[46] = 5;
+ maxBin[46] = hPMRefClg->GetMaximumBin();
+ nBin[46] = (hPMRefClg->GetXaxis())->GetNbins();
+ xMax[46] = (hPMRefClg->GetXaxis())->GetXmax();
+ if(nBin[46]!=0) maxXval[46] = maxBin[46]*xMax[46]/nBin[46];
+ if(maxXval[46]-150.<0.) xlow[46]=0.;
+ else xlow[46] = maxXval[46]-150.;
+ if(hPMRefClg->GetEntries()!=0){
+ atLeastOneHisto=1;
+ //
+ hPMRefClg->Fit("gaus","Q","",xlow[46],maxXval[46]+150.);
+ fun[46] = hPMRefClg->GetFunction("gaus");
+ mean[46] = (Float_t) (fun[46]->GetParameter(1));
+ sigma[46] = (Float_t) (fun[46]->GetParameter(2));
+ }
+ // ~~~~~~~~ PM Ref side A ~~~~~~~~
+ detector[47] = 4;
+ quad[47] = 5;
+ maxBin[47] = hPMRefAlg->GetMaximumBin();
+ nBin[47] = (hPMRefAlg->GetXaxis())->GetNbins();
+ xMax[47] = (hPMRefAlg->GetXaxis())->GetXmax();
+ if(nBin[47]!=0) maxXval[47] = maxBin[47]*xMax[47]/nBin[47];
+ if(maxXval[47]-100.<0.) xlow[47]=0.;
+ else xlow[47] = maxXval[47]-150.;
+ if(hPMRefAlg->GetEntries()!=0){
+ atLeastOneHisto=1;
+ //
+ hPMRefAlg->Fit("gaus","Q","",xlow[47],maxXval[47]+100.);
+ fun[47] = hPMRefAlg->GetFunction("gaus");
+ mean[47] = (Float_t) (fun[47]->GetParameter(1));
+ sigma[47] = (Float_t) (fun[47]->GetParameter(2));
+ }
+*/
+ if(atLeastOneHisto==0){
+ printf("\n WARNING! Empty LASER histos -> ending DA WITHOUT writing output\n\n");
+ return -1;
+ }