6 #include "TRootEmbeddedCanvas.h"
18 #include "TBenchmark.h"
20 #include "TInterpreter.h"
36 Double_t fxy = 1.075,fact = 0.6, facrec =0.8, chi2cut=0.5;
39 Info(
"Constructor",
"Use default FacXY %g",FacXY);
45 Info(
"Constructor",
"Use default FacTronc %g",FacTronc);
51 Info(
"Constructor",
"Use default FacRec %g",FacRec);
57 Info(
"Constructor",
"Use default Chi2TroncNcut %g",Chi2TroncNcut);
59 Chi2TroncNcut = chi2cut;
61 Long64_t nComMin = 20;
64 Info(
"Constructor",
"Use default NcomMin %d",fNcomMin);
69 Int_t nBinsChi2 = 100;
70 Double_t Chi2min = 1e-4;
71 Double_t Chi2max = 10;
72 Double_t yBinsChi2[nBinsChi2+1];
73 Double_t alphaChi2 = TMath::Power(Chi2max/Chi2min,1./(nBinsChi2+1));
74 Double_t binChi2 = Chi2min;
75 for(Int_t bin = 0; bin <=nBinsChi2; bin++){
76 yBinsChi2[bin] = binChi2;
80 hQxyVsNcom =
new TH2F(
"hQxyVsNcom",
";Q^{tot}_{x}/Q^{tot}_{y};N_{common}",200,0,10,128,0,5120000);
81 hCoverageX =
new TH1F(
"hCoverageX",
";",128,0,1);
82 hCoverageY =
new TH1F(
"hCoverageY",
";",128,0,1);
83 hChi2 =
new TH1F(
"hChi2",
";#chi^{2}",nBinsChi2,yBinsChi2);
84 hQxyVsNcomEvent =
new TH2F(
"hQxyVsNcomEvent",
";Q^{tot}_{x}/Q^{tot}_{y};N_{common}",200,0,10,128,0,512);
85 hCoverageXEvent =
new TH1F(
"hCoverageXEvent",
";",128,0,1);
86 hCoverageYEvent =
new TH1F(
"hCoverageYEvent",
";",128,0,1);
87 hChi2Event =
new TH1F(
"hChi2Event",
";#chi^{2}",nBinsChi2,yBinsChi2);
89 for(Int_t j=0; j<
NTRACK; j++){
90 hQvsTX[j] =
new TH1F(Form(
"hQvsTX%d",j),
";time bin;Q",
NADC,0,
NADC);
91 hQvsTY[j] =
new TH1F(Form(
"hQvsTY%d",j),
";time bin;Q",
NADC,0,
NADC);
102 fEvt->GetRecoEvent()->ResetMatchingArray ();
103 Int_t nTracks = InitEventNew();
104 if (nTracks>20)
return;
112 for(Int_t plane = 0; plane<2; plane++){
113 for(Int_t i = 0; i<kNmaxCompoundTracks; i++)
114 fCompoundTrack[plane][i] = 0;
115 fNcompoundTracks[plane] = 0;
117 MakeCompoundTracks(0,0,
XPLANE);
118 MakeCompoundTracks(0,0,
YPLANE);
121 Int_t ntestmatch = 0;
132 for(Int_t itrX1 = 0; itrX1<fNcompoundTracks[
XPLANE]; itrX1++){
133 if(ntestmatch>=NTESTMAT)
break;
135 for(Int_t itrX2 = itrX1; itrX2<fNcompoundTracks[
XPLANE]; itrX2++){
137 Int_t nComX = GetNcom(fCompoundTrack[
XPLANE][itrX1],fCompoundTrack[
XPLANE][itrX2],
XPLANE);
138 if(nComX<fNcomMin)
continue;
142 if((fCompoundTrack[
XPLANE][itrX1] | fCompoundTrack[
XPLANE][itrX2]) == fCompoundTrack[
XPLANE][itrX1])
continue;
143 if((fCompoundTrack[
XPLANE][itrX1] | fCompoundTrack[
XPLANE][itrX2]) == fCompoundTrack[
XPLANE][itrX2])
continue;
146 if(ntestmatch>=NTESTMAT)
break;
148 ULong64_t trX = fCompoundTrack[
XPLANE][itrX1] | fCompoundTrack[
XPLANE][itrX2];
151 hX = GetCompoundHist(trX,
XPLANE);
152 for(Int_t itrY1 = 0; itrY1<fNcompoundTracks[
YPLANE]; itrY1++){
153 if(ntestmatch>=NTESTMAT)
break;
155 for(Int_t itrY2 = itrY1; itrY2<fNcompoundTracks[
YPLANE]; itrY2++){
157 Int_t nComY = GetNcom(fCompoundTrack[
YPLANE][itrY1],fCompoundTrack[
YPLANE][itrY2],
YPLANE);
158 if(nComY<fNcomMin)
continue;
160 if((fCompoundTrack[
YPLANE][itrY1] | fCompoundTrack[
YPLANE][itrY2]) == fCompoundTrack[
YPLANE][itrY1])
continue;
161 if((fCompoundTrack[
YPLANE][itrY1] | fCompoundTrack[
YPLANE][itrY2]) == fCompoundTrack[
YPLANE][itrY2])
continue;
163 if(ntestmatch>=NTESTMAT)
break;
164 if(itrX1 != itrX2 && itrY1 != itrY2)
continue;
166 ULong64_t trY = fCompoundTrack[
YPLANE][itrY1] | fCompoundTrack[
YPLANE][itrY2];
167 hY = GetCompoundHist(trY,
YPLANE);
174 Double_t coverageX, coverageY, chi2Tmp;
175 Matching(hX,hY,coverageX,coverageY,chi2Tmp);
178 Info(
"process",
"(%d+%d|%d+%d) covX = %g, covY = %g, chi2 = %g",itrX1,itrX2,itrY1,itrY2,coverageX,coverageY,chi2Tmp);
180 if((coverageX < FacRec) || (coverageY < FacRec))
181 chi2[ntestmatch] = chi2Tmp + 0.2/coverageX + 0.2/coverageY;
183 chi2[ntestmatch] = chi2Tmp + 0.000001/coverageX + 0.000001/coverageY;
185 iX[ntestmatch][0] = itrX1;
186 iX[ntestmatch][1] = itrX2;
187 iY[ntestmatch][0] = itrY1;
188 iY[ntestmatch][1] = itrY2;
197 TMath::Sort(NTESTMAT,chi2,index,kFALSE);
198 Int_t usedTracksX[
NTRACK];
199 Int_t usedTracksY[
NTRACK];
200 for(Int_t itr = 0; itr<
NTRACK; itr++){
201 usedTracksX[itr] = 0;
202 usedTracksY[itr] = 0;
206 Int_t ind = index[i];
207 if(chi2[ind]<0)
continue;
208 if(chi2[ind]>=10)
break;
209 Int_t trX = iX[ind][0];
210 Int_t trY = iY[ind][0];
211 Int_t trX2 = iX[ind][1];
212 Int_t trY2 = iY[ind][1];
216 Info(
"process",
"**Matching candidate X:(%d, %d) Y: (%d, %d), chi2 = %g",trX,trX2,trY,trY2,chi2[ind]);
221 ULong64_t maskX = fCompoundTrack[
XPLANE][trX];
222 ULong64_t maskX2 = fCompoundTrack[
XPLANE][trX2];
223 ULong64_t maskY = fCompoundTrack[
YPLANE][trY];
224 ULong64_t maskY2 = fCompoundTrack[
YPLANE][trY2];
226 Bool_t skip = kFALSE;
227 for(Int_t j = 0; j<64; j++){
228 ULong64_t test = 1 << j;
229 if(test & (maskX | maskX2)){
235 if(test & (maskY | maskY2)){
243 if(trX != trX2 && trY != trY2)
continue;
248 Int_t trXnew = CombineTracks(maskX,
XPLANE);
249 Int_t trX2new = CombineTracks(maskX2,
XPLANE);
250 Int_t trYnew = CombineTracks(maskY,
YPLANE);
251 Int_t trY2new = CombineTracks(maskY2,
YPLANE);
252 fMask[trXnew][
XPLANE] = maskX;
253 fMask[trX2new][
XPLANE] = maskX2;
254 fMask[trYnew][
YPLANE] = maskY;
255 fMask[trY2new][
YPLANE] = maskY2;
258 Info(
"process",
"Matching candidate X:(%d, %d) Y: (%d, %d), chi2 = %g",trXnew,trX2new,trYnew,trY2new,chi2[ind]);
261 fEvt->GetRecoEvent()->AddMatching(matching);
267 for(Int_t j = 0; j<64; j++){
268 ULong64_t test = 1 << j;
269 if(test & (maskX | maskX2))
271 if(test & (maskY | maskY2))
278 TClonesArray* trArray = fEvt->GetRecoEvent()->GetTracksArray();
279 Int_t nTr = trArray->GetEntries();
281 for(Int_t itr = 0; itr<nTr; itr++){
286 trArray->RemoveAt(itr);
300 Int_t ntestmatch = 0;
311 for(Int_t itrX1 = 0; itrX1<
NTRACK; itrX1++){
312 if(ntestmatch>=NTESTMAT)
break;
313 if(hQvsTX[itrX1]->Integral()<=0)
continue;
314 for(Int_t itrX2 = itrX1; itrX2<
NTRACK; itrX2++){
315 if(ntestmatch>=NTESTMAT)
break;
316 if(hQvsTX[itrX2]->Integral()<=0)
continue;
317 TH1F* hX = (TH1F*)hQvsTX[itrX1]->Clone(
"hX");
318 if(itrX2>itrX1) hX->Add(hQvsTX[itrX2]);
319 for(Int_t itrY1 = 0; itrY1<
NTRACK; itrY1++){
320 if(ntestmatch>=NTESTMAT)
break;
321 if(hQvsTY[itrY1]->Integral()<=0)
continue;
322 for(Int_t itrY2 = itrY1; itrY2<
NTRACK; itrY2++){
323 if(ntestmatch>=NTESTMAT)
break;
324 if(itrX1 != itrX2 && itrY1 != itrY2)
continue;
325 if(hQvsTY[itrY2]->Integral()<=0)
continue;
326 TH1F* hY = (TH1F*)hQvsTY[itrY1]->Clone(
"hY");
327 if(itrY2>itrY1) hY->Add(hQvsTY[itrY2]);
329 Double_t coverageX, coverageY, chi2Tmp;
330 Matching(hX,hY,coverageX,coverageY,chi2Tmp);
333 Info(
"process",
"(%d+%d|%d+%d) covX = %g, covY = %g, chi2 = %g",itrX1,itrX2,itrY1,itrY2,coverageX,coverageY,chi2Tmp);
334 if(coverageX < FacRec)
continue;
335 if(coverageY < FacRec)
continue;
336 chi2[ntestmatch] = chi2Tmp + 0.000001/coverageX + 0.000001/coverageY;
338 iX[ntestmatch][0] = itrX1;
339 iX[ntestmatch][1] = itrX2;
340 iY[ntestmatch][0] = itrY1;
341 iY[ntestmatch][1] = itrY2;
350 TMath::Sort(NTESTMAT,chi2,index,kFALSE);
351 Int_t usedTracksX[
NTRACK];
352 Int_t usedTracksY[
NTRACK];
353 for(Int_t itr = 0; itr<
NTRACK; itr++){
354 usedTracksX[itr] = 0;
355 usedTracksY[itr] = 0;
359 Int_t ind = index[i];
360 if(chi2[ind]<0)
continue;
361 if(chi2[ind]>=10)
break;
362 Int_t trX = iX[ind][0];
363 Int_t trY = iY[ind][0];
364 Int_t trX2 = iX[ind][1];
365 Int_t trY2 = iY[ind][1];
367 Info(
"process",
"**Matching candidate X:(%d, %d) Y: (%d, %d), chi2 = %g",trX,trX2,trY,trY2,chi2[ind]);
372 if(usedTracksX[trX])
continue;
373 if(usedTracksY[trY])
continue;
374 if(usedTracksX[trX2])
continue;
375 if(usedTracksY[trY2])
continue;
376 if(trX != trX2 && trY != trY2)
continue;
378 Info(
"process",
"Matching candidate X:(%d, %d) Y: (%d, %d), chi2 = %g",trX,trX2,trY,trY2,chi2[ind]);
381 fEvt->GetRecoEvent()->AddMatching(matching);
382 usedTracksX[trX] = 1;
383 usedTracksX[trX2] = 1;
384 usedTracksY[trY] = 1;
385 usedTracksY[trY2] = 1;
399 for(Int_t j = 0; j<64; j++){
400 ULong64_t test = 1 << j;
412 Int_t nCl = clArray->GetEntries();
413 for(Int_t icl = 0; icl<nCl; icl++){
415 if(cluster->
GetPlane() != plane)
continue;
417 ULong64_t test = 1 << nTr;
418 if(!(test & mask))
continue;
424 Int_t nTr = trArray->GetEntries();
426 Double_t zSt = 1000, zEnd = -1000;
427 Double_t x0Tr = -1000, angleTr = -1000;
428 Int_t qTr = 0, nClTr = 0;
433 for(Int_t itr = 0; itr<nTr; itr++){
436 if(track->
GetPlane() != plane)
continue;
438 ULong64_t test = 1 << nTr;
439 if(!(test & mask))
continue;
455 x0Tr = track->
GetX0 ();
461 if( track->
GetZend() >= zEnd ){
498 if(iTr>fTrMax[plane] || iTr>=64){
500 if(fNcompoundTracks[plane]>=kNmaxCompoundTracks){
501 Info(
"MakeCompoundTracks",
"Too many compound tracks");
505 fCompoundTrack[plane][fNcompoundTracks[plane]] = mask;
506 fNcompoundTracks[plane]++;
511 MakeCompoundTracks(iTr+1, mask,plane);
512 ULong64_t test = 1 << iTr;
514 Int_t nCom = GetNcom(test,mask,plane);
515 if(nCom>=0 && nCom<fNcomMin){
516 MakeCompoundTracks(iTr+1, mask | test,plane);
533 for(Int_t i = 0; i<
NADC; i++){
539 for(Int_t j = 0; j<64; j++){
540 ULong64_t test = 1 << j;
542 if(plane ==
XPLANE) q1 += hQvsTX[j]->GetBinContent(i+1);
543 if(plane ==
YPLANE) q1 += hQvsTY[j]->GetBinContent(i+1);
549 for(Int_t j = 0; j<64; j++){
550 ULong64_t test = 1 << j;
552 if(plane ==
XPLANE) q2 += hQvsTX[j]->GetBinContent(i+1);
553 if(plane ==
YPLANE) q2 += hQvsTY[j]->GetBinContent(i+1);
561 if(qtot1<=0)
return -1;
572 Info(
"GetCompoundHist",
"%llX %d",mask,plane);
574 TH1F* h =
new TH1F(Form(
"hQvsTX_%lld_%d",mask,plane),
";time bin;Q",
NADC,0,
NADC);
575 for(Int_t j = 0; j<64; j++){
576 ULong64_t test = 1 << j;
578 if(plane ==
XPLANE) h->Add(hQvsTX[j]);
579 if(plane ==
YPLANE) h->Add(hQvsTY[j]);
594 Info(
"InitEventNew",
"Init");
595 hQxyVsNcomEvent->Reset();
596 hCoverageXEvent->Reset();
597 hCoverageYEvent->Reset();
599 for(Int_t j=0; j<
NTRACK; j++){
608 Int_t nCl = clArray->GetEntries();
610 Int_t Ntr = trArray->GetEntries();
612 Info(
"InitEventNew",
"Ntracks = %d",Ntr);
614 for(Int_t i = 0; i<
NCHAN; i++)
615 for(Int_t j = 0; j<
NADC; j++)
616 for(Int_t k = 0; k<2; k++)
619 m[0] = fEvt->GetDccMap(0);
620 m[1] = fEvt->GetDccMap(1);
623 for(Int_t icl = 0; icl<nCl; icl++){
628 Double_t mean = cluster->
GetMean();
631 Int_t nTr = cluster->
GetNtr();
642 Int_t imin = 0, imax = 0, jmin = 0, jmax = 0;
646 jmin = Int_t(mean) - width;
647 jmin = Int_t(mean) + width -1;
652 imin = Int_t(mean) - width;
653 imin = Int_t(mean) + width -1;
661 for(Int_t i = imin; i<=imax; i++){
662 for(Int_t j = jmin; j<=jmax; j++){
664 if(i<0 || i>=NCHAN)
continue;
665 if(j<0 || j>=NADC)
continue;
666 Double_t qTmp = m[plane]->
GetData(i,j);
668 if(used[i][j][plane] == 1)
continue;
669 used[i][j][plane] = 1;
670 for(Int_t k = 0; k<nTr; k++){
673 if(itr>fTrMax[plane]) fTrMax[plane]= itr;
675 hQvsTX[itr]->Fill(j,qTmp);
678 hQvsTY[itr]->Fill(j,qTmp);
685 for(Int_t itr = 0; itr<
NTRACK; itr++){
686 if(hQvsTY[itr]->Integral()>0)
687 Info(
"InitEventNew",
"TrackY %d: %g",itr,hQvsTY[itr]->Integral());
688 if(hQvsTX[itr]->Integral()>0)
689 Info(
"InitEventNew",
"TrackX %d: %g",itr,hQvsTX[itr]->Integral());
703 Double_t qTotX = hX->Integral();
704 Double_t qTotY = hY->Integral();
707 Info(
"Matching",
"Qx = %g, Qy = %g",qTotX,qTotY);
708 if(qTotX<200)
return;
709 if(qTotY<200)
return;
714 Double_t dChi2[
NADC];
715 Int_t nComNonZ = 0, nNZX = 0, nNZY = 0;
717 for(Int_t j=0;j<
NADC;j++){
718 Double_t qX = hX->GetBinContent(j+1);
719 Double_t qY = hY->GetBinContent(j+1);
723 if(qX<20 || qY<20)
continue;
724 Double_t diff = (FacXY * qY - qX);
725 Double_t prod = FacXY * qY * qX;
726 dChi2[j] = diff * diff / prod;
729 Info(
"Matching",
"%g %d",dChi2[j],nComNonZ);
733 Double_t rQxy= qTotX / qTotY / FacXY;
735 hQxyVsNcom->Fill(rQxy,qTotX);
736 hQxyVsNcomEvent->Fill(rQxy,nComNonZ);
737 if(TMath::Abs(rQxy-1)<0.1){
745 Int_t* indexTmp =
new Int_t[
NADC];
746 TMath::Sort(NADC,dChi2,indexTmp,kFALSE);
747 Int_t nComNonZTronc = nComNonZ * FacTronc ;
748 Double_t chi2Tronc=0;
750 Int_t nNZ = 0, k = 0;
751 while(k<NADC && nNZ<nComNonZTronc){
752 Int_t ind = indexTmp[k];
754 if(dChi2[ind]<=0)
continue;
755 chi2Tronc += dChi2[ind];
759 if(chi2Tronc<=0)
return;
760 if(nComNonZTronc<=0)
return;
764 Info(
"Matching",
"nComNonZTronc = %d * %g = %d",nComNonZ,FacTronc,nComNonZTronc);
766 coverageX = nComNonZ * 1. / nNZX;
767 coverageY = nComNonZ * 1. / nNZY;
768 chi2 = chi2Tronc/nComNonZTronc;
770 hCoverageX->Fill(coverageX);
771 hCoverageY->Fill(coverageY);
773 hCoverageXEvent->Fill(coverageX);
774 hCoverageYEvent->Fill(coverageY);
775 hChi2Event->Fill(chi2);
783 if(i == 0 || i == 1){
785 Info(
"GetHist",
"%d %d (%llX",i,match,fMask[match][i]);
786 if(match<0 || match>=
NTESTMAT)
return 0;
792 case 0:
return GetCompoundHist(fMask[match][
XPLANE], XPLANE);
793 case 1:
return GetCompoundHist(fMask[match][
YPLANE], YPLANE);
794 case 2:
return hQxyVsNcom;
795 case 3:
return hCoverageX;
796 case 4:
return hCoverageY;
797 case 5:
return hChi2;
798 case 6:
return hQxyVsNcomEvent;
799 case 7:
return hCoverageXEvent;
800 case 8:
return hCoverageYEvent;
801 case 9:
return hChi2Event;
813 TCanvas* cTab = ecTab->GetCanvas();
814 cTab->GetPad(1)->Delete();
815 cTab->GetPad(2)->Delete();
819 cTab->GetPad(2)->Divide(2,2);
820 TH2F* hQxyVsNcomEvent = (TH2F*)GetHist(6);
821 Info(
"DisplayMatching",
"%g",hQxyVsNcomEvent->GetEntries());
822 MakeNiceHisto(hQxyVsNcomEvent,cTab->GetPad(2)->GetPad(1),
"colz");
823 TH1F* hCoverageXEvent = (TH1F*)GetHist(7);
824 TH1F* hCoverageYEvent = (TH1F*)GetHist(8);
825 hCoverageXEvent->SetLineColor(kBlue);
826 hCoverageYEvent->SetLineColor(kRed);
828 cTab->GetPad(2)->cd(3);
829 hCoverageXEvent->DrawCopy(
"same");
830 TH1F* hChi2Event = (TH1F*)GetHist(9);
831 TH1F* hChi2Run = (TH1F*)((GetHist(5))->Clone(
"hChi2Run"));
833 hChi2Run->Scale(hChi2Event->GetMaximum()/hChi2Run->GetMaximum());
834 hChi2Run->SetLineColor(kRed);
835 hChi2Run->DrawCopy(
"same");
837 cTab->GetPad(2)->GetPad(4)->SetLogx();
847 Int_t nMatch = matchArray->GetEntries();
848 Info(
"DisplayMatching",
"%d tracks",nMatch);
850 TLatex* latex =
new TLatex();
851 latex->SetTextFont(132);
852 latex->SetTextAlign(12);
853 latex->SetTextSize(0.08);
855 Int_t nX = Int_t(TMath::Sqrt(nMatch - 1)) + 1;
856 Int_t nY = Int_t((nMatch - 1)/nX) + 1;
857 cTab->GetPad(1)->Divide(nX,nY);
858 for(Int_t i = 0; i<nMatch; i++){
861 DrawMatching(match,cTab->GetPad(1)->GetPad(i+1));
886 TH1F* hX1 = (TH1F*)GetHist(0,iTrX1);
887 TH1F* hY1 = (TH1F*)GetHist(1,iTrY1);
892 TH1F* hXtot = (TH1F*)hX1->Clone(
"hXtot");
893 TH1F* hYtot = (TH1F*)hY1->Clone(
"hYtot");
896 hXtot->SetLineColor(kBlue);
897 hYtot->SetLineColor(kRed);
898 hXtot->SetLineStyle(1);
899 hYtot->SetLineStyle(1);
900 hXtot->SetLineWidth(2);
901 hYtot->SetLineWidth(2);
903 hX1->SetLineColor(kBlue+3);
904 hY1->SetLineColor(kRed+3);
905 hX1->SetLineStyle(2);
906 hY1->SetLineStyle(2);
907 THStack* hX =
new THStack(
"hX",
";T [30ns bins];Q");
908 THStack* hY =
new THStack(
"hY",
";T [30ns bins];Q");
913 TH1F* hX2 = (TH1F*)GetHist(0,iTrX2);
916 hX2->SetLineColor(kBlue+3);
917 hX2->SetLineStyle(2);
922 TH1F* hY2 = (TH1F*)GetHist(1,iTrY2);
925 hY2->SetLineColor(kRed+3);
926 hY2->SetLineStyle(2);
933 hXtot->DrawCopy(
"same");
934 hYtot->DrawCopy(
"same");
937 TLatex* latex =
new TLatex();
938 latex->SetTextFont(132);
939 latex->SetTextAlign(12);
940 latex->SetTextSize(0.08);
943 latex->DrawLatex(50,0.8*hX->GetMaximum(),Form(
"X: %d + %d, Y: %d",iTrX1,iTrX2,iTrY1));
945 latex->DrawLatex(50,0.8*hX->GetMaximum(),Form(
"X: %d, Y: %d + %d",iTrX1,iTrY1,iTrY2));
946 if(iTrX2 == iTrX1 && iTrY1 == iTrY2)
947 latex->DrawLatex(50,0.8*hX->GetMaximum(),Form(
"X: %d, Y: %d",iTrX1,iTrY1));
957 UInt_t ysize = 9*ysize2;
958 TGTransientFrame*
main =
new TGTransientFrame(gClient->GetRoot(), fMain, xsize, ysize);
959 main->Connect(
"CloseWindow()",
"HarpoRecoMonitorGui", main,
"CloseWindow()");
960 main->DontCallClose();
963 main->SetCleanup(kDeepCleanup);
965 TGVerticalFrame* f213 =
new TGVerticalFrame(main,xsize,ysize,kVerticalFrame);
966 TGLabel* fLabel =
new TGLabel(f213,
"Clustering 2D blocs");
969 TGHorizontalFrame* FacXYFrame =
new TGHorizontalFrame(f213,xsize,ysize2,kHorizontalFrame);
970 TGLabel* FacXYLabel =
new TGLabel(FacXYFrame,
"Qx/Qy");
971 fChooseFacXY =
new TGNumberEntry(FacXYFrame);
972 fChooseFacXY->SetNumber(FacXY);
974 TGHorizontalFrame* FacTroncFrame =
new TGHorizontalFrame(f213,xsize,ysize2,kHorizontalFrame);
975 TGLabel* FacTroncLabel =
new TGLabel(FacTroncFrame,
"Truncation");
976 fChooseFacTronc =
new TGNumberEntry(FacTroncFrame);
977 fChooseFacTronc->SetNumber(FacTronc);
979 TGHorizontalFrame* FacRecFrame =
new TGHorizontalFrame(f213,xsize,ysize2,kHorizontalFrame);
980 TGLabel* FacRecLabel =
new TGLabel(FacRecFrame,
"X size");
981 fChooseFacRec =
new TGNumberEntry(FacRecFrame);
982 fChooseFacRec->SetNumber(FacRec);
984 TGHorizontalFrame* Chi2TroncNcutFrame =
new TGHorizontalFrame(f213,xsize,ysize2,kHorizontalFrame);
985 TGLabel* Chi2TroncNcutLabel =
new TGLabel(Chi2TroncNcutFrame,
"X size");
986 fChooseChi2TroncNcut =
new TGNumberEntry(Chi2TroncNcutFrame);
987 fChooseChi2TroncNcut->SetNumber(Chi2TroncNcut);
989 TGHorizontalFrame* NcomMinFrame =
new TGHorizontalFrame(f213,xsize,ysize2,kHorizontalFrame);
990 TGLabel* NcomMinLabel =
new TGLabel(NcomMinFrame,
"X size");
991 fChooseNcomMin =
new TGNumberEntry(NcomMinFrame);
992 fChooseNcomMin->SetNumber(fNcomMin);
997 TGTextButton* setConf =
new TGTextButton(f213,
"Save Config",
id);
998 setConf->Associate(fMain);
1000 TGLayoutHints* fLayout1 =
new TGLayoutHints(kLHintsLeft ,5,5,5,5);
1001 TGLayoutHints* fLayout2 =
new TGLayoutHints(kLHintsRight ,5,5,5,5);
1002 TGLayoutHints* fLayout3 =
new TGLayoutHints(kLHintsTop | kLHintsExpandX ,5,5,5,5);
1003 TGLayoutHints* fLayout4 =
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,5,5,5,5);
1005 main->AddFrame(f213,fLayout4);
1006 f213->AddFrame(fLabel,fLayout3);
1008 f213->AddFrame(FacXYFrame,fLayout3);
1009 FacXYFrame->AddFrame(FacXYLabel,fLayout1);
1010 FacXYFrame->AddFrame(fChooseFacXY,fLayout2);
1012 f213->AddFrame(FacTroncFrame,fLayout3);
1013 FacTroncFrame->AddFrame(FacTroncLabel,fLayout1);
1014 FacTroncFrame->AddFrame(fChooseFacTronc,fLayout2);
1016 f213->AddFrame(FacRecFrame,fLayout3);
1017 FacRecFrame->AddFrame(FacRecLabel,fLayout1);
1018 FacRecFrame->AddFrame(fChooseFacRec,fLayout2);
1020 f213->AddFrame(Chi2TroncNcutFrame,fLayout3);
1021 Chi2TroncNcutFrame->AddFrame(Chi2TroncNcutLabel,fLayout1);
1022 Chi2TroncNcutFrame->AddFrame(fChooseChi2TroncNcut,fLayout2);
1024 f213->AddFrame(NcomMinFrame,fLayout3);
1025 NcomMinFrame->AddFrame(NcomMinLabel,fLayout1);
1026 NcomMinFrame->AddFrame(fChooseNcomMin,fLayout2);
1028 f213->AddFrame(setConf,fLayout3);
1031 main->MapSubwindows();
1042 if(!fChooseFacXY)
return;
1044 FacXY = fChooseFacXY->GetNumber();
1045 FacTronc = fChooseFacTronc->GetNumber();
1046 FacRec = fChooseFacRec->GetNumber();
1047 Chi2TroncNcut = fChooseChi2TroncNcut->GetNumber();
1048 fNcomMin = fChooseNcomMin->GetNumber();
1059 hQxyVsNcom->Write();
1060 hCoverageX->Write();
1061 hCoverageY->Write();
void SetXend(Double_t val)
Int_t GetNcom(ULong64_t iTr, ULong64_t mask, Int_t plane)
void AddIdClusterTrack(Int_t val)
Double_t GetData(Int_t i, Int_t j)
Set/Get Data Cell.
int main(int argc, char **argv)
Track object, containing position, angle, charge and quality information.
void SetNclusterTrack(Int_t val)
Object containing the reconstruction information for one event (with array of HarpoRecoClusters Harpo...
Matching object, containing matched track number, and quality info.
TClonesArray * GetMatchingArray()
void SetNtrack(Int_t val)
void Matching(TH1F *hX, TH1F *hY, Double_t &coverageX, Double_t &coverageY, Double_t &chi2)
Redefine empty default.
void RemoveAllClusterTrack()
Cluster object, containing position, charge and quality information.
void SetXstart(Double_t val)
void SetZend(Double_t val)
unpacked dcc data The class contains the data map for DCC or Feminos The data is stored as a 2D TMatr...
TVirtualPad * MakeNiceHisto(TH1 *hist, TVirtualPad *c1, const char *opt, Bool_t copy)
Int_t GetIdClusterTrack()
void SetZstart(Double_t val)
void SetHistStyle(TH1 *hist)
void DrawMatching(HarpoRecoMatching *match, TVirtualPad *c)
void DisplayAnalysis(TRootEmbeddedCanvas *ecTab, TGListBox *info)
Bool_t Lookup(const char *path, Bool_t &val)
Lookup function for scalar values.
TH1F * GetCompoundHist(ULong64_t mask, Int_t plane)
void MakeCompoundTracks(Int_t iTr, ULong64_t mask, Int_t plane)
void Save(char *mode=NULL)
void SetQtTrack(Int_t val)
Int_t CombineTracks(ULong64_t mask, Int_t plane)
void ConfigFrame(TGMainFrame *fMain, Int_t id)
void SetAngleTrack(Int_t val)
TClonesArray * GetTracksArray()
TH1 * GetHist(Int_t i, Int_t match=-1)
TClonesArray * GetClustersArray()