3728 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity" << endl;
3735 TH1F* histPatternBTDensity =
new TH1F(
"histPatternBTDensityTT",
"histPatternBTDensityTT",200,0,200);
3736 TH1F* histPatternBTDensities[10];
3737 for (Int_t angspacecounter=0; angspacecounter<10; angspacecounter++) {
3738 histPatternBTDensities[angspacecounter] =
new TH1F(Form(
"histPatternBTDensities_%d",angspacecounter),Form(
"histPatternBTDensities_%d",angspacecounter),200,0,200);
3740 Double_t angularspacebinningwidth=0.1;
3741 Double_t angularspacebinningstart=0.00;
3742 Double_t angularspacebinningend=0.00;
3743 Double_t angularspacebinningScaleFactor=1;
3746 Double_t NumberOfFilledTTbins=0;
3747 TH1F* eHistTTClone = (TH1F*)
eHistTT->Clone();
3748 Int_t BTNumberLevelAngularSpace[20];
3749 for (
int i=0; i<1; i++) {
3750 BTNumberLevelAngularSpace[i]=0;
3761 Int_t
npat=pat->
N();
3762 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity For this (" << i <<
") pattern, I have " <<
npat <<
" Edb segments to check..." << endl;
3765 for (Int_t angspacecounter=0; angspacecounter<10; angspacecounter++) {
3773 for (Int_t angspacecounter=0; angspacecounter<10; angspacecounter++) {
3774 cout << endl <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity Doing now the angspacecounter loop: angspacecounter = " << angspacecounter << endl;
3777 angularspacebinningstart=(Double_t)angspacecounter*angularspacebinningwidth;
3778 angularspacebinningend=angularspacebinningstart+angularspacebinningwidth;
3780 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity Doing TT Bin from " << angularspacebinningstart <<
" to " << angularspacebinningend << endl;
3786 for (Int_t l=0; l<lmax; l++) {
3788 Double_t Cutp0 =
eCutTTp0[i][angspacecounter];
3789 Double_t Cutp1 =
eCutTTp1[i][angspacecounter];
3791 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity Doing now the condition loop: l = " << l <<
", the cut condition reads: seg->Chi2() >= seg->W()* " << Cutp1 <<
" - " << Cutp0 << endl;
3798 histPatternBTDensity->Reset();
3800 eHistTTClone->Reset();
3801 histPatternBTDensities[angspacecounter]->Reset();
3804 ni[angspacecounter]=0;
3808 Int_t
npat=pat->
N();
3812 for (
int j=0; j<
npat; j++) {
3814 Bool_t result=kTRUE;
3815 if (seg->
MCEvt()>0) {
3824 if ( kFALSE == result )
continue;
3830 eHistTTClone->Fill(tt);
3834 if (segttspacebin!=angspacecounter)
continue;
3840 ni[angspacecounter] += 1;
3850 eHistTTClone->Fit(
"pol2",
"0q",
"0q",0,0.5);
3851 TF1 *myfunc = eHistTTClone->GetFunction(
"pol2");
3852 Double_t par0 = myfunc->GetParameter(0);
3853 Double_t par1 = myfunc->GetParameter(1);
3854 Double_t par2 = myfunc->GetParameter(2);
3856 Int_t minimumTTBin = eHistTTClone->FindBin( -par1/(2*par2));
3857 Int_t nEntriesInMinimumBin = eHistTTClone->GetBinContent(minimumTTBin);
3858 BTNumberLevelAngularSpace[angspacecounter] = Int_t(ni[angspacecounter]-
eCutTTSqueezeFactor* Float_t(ni[angspacecounter]-nEntriesInMinimumBin));
3860 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity Minimum should be at TanTheta = " << -par1/(2*par2) <<
" and it is in bin # " << minimumTTBin <<
" ; there are so many entries: " << nEntriesInMinimumBin << endl;
3861 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity For bin " << angspacecounter <<
", there are at the beginning so many segments: " << ni[angspacecounter] << endl;
3862 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity BTNumberLevelAngularSpace[angspacecounter] = " << BTNumberLevelAngularSpace[angspacecounter] << endl;
3868 for (
int k=1; k<nbins-1; k++) {
3869 if (
eHistXY->GetBinContent(k)==0) {
3874 histPatternBTDensity->Fill(Double_t(
eHistXY->GetBinContent(k))/ 6.25 );
3875 histPatternBTDensities[angspacecounter]->Fill(
eHistXY->GetBinContent(k)/ 6.25);
3879 Float_t ePatternBTDensityRMS_modified = histPatternBTDensity->GetRMS();
3882 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity Loop l= " << l <<
": for the Cutp1 : " << Cutp1 <<
" we have #NBT: " << ni[angspacecounter] <<
"+-" << sqrt(ni[angspacecounter]) <<
", target number for this TT space bin = " << BTNumberLevelAngularSpace[angspacecounter] << endl;
3888 if (ni[angspacecounter] <=BTNumberLevelAngularSpace[angspacecounter]) {
3892 if (lmax==20)
eCutTTp1[i][angspacecounter] =
eCutTTp1[i][angspacecounter] +0.005;
3893 if (lmax==40)
eCutTTp1[i][angspacecounter] =
eCutTTp1[i][angspacecounter] +0.0025;
3895 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity We reached the loop end due to good BT density level in this angular bin and finish loop. Set l to lmax: " << l << endl;
3909 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity ATTENTION! No more cuts to tighten up. Restore the last valid cut. Basetrack number wont go below last value!" << endl;
3910 if (lmax==20)
eCutTTp1[i][angspacecounter] =
eCutTTp1[i][angspacecounter] +0.005;
3911 if (lmax==40)
eCutTTp1[i][angspacecounter] =
eCutTTp1[i][angspacecounter] +0.0025;
3918 Float_t bincontentXY=histPatternBTDensity->GetMean();
3921 angularspacebinningstart+=angularspacebinningwidth;
3930 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity Check if modified or original PVRec object should be returned: " << endl;
3933 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity " <<
eNeedModified << endl;
3936 delete histPatternBTDensity;
3937 delete eHistTTClone;
3939 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity Cuts are done and saved to obtain desired BT density. " << endl;
3940 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity If you want to apply the cuts now, run the CreateEdbPVRec() function now. " << endl;
3941 cout <<
"EdbPVRQuality::Execute_EqualizeTanThetaSpace_ConstantBTDensity...done." << endl;
Float_t eBTDensityLevelAngularSpace[20]
Definition: EdbPVRQuality.h:59
void SetHistGeometry_OPERAandMCBinArea625()
Definition: EdbPVRQuality.cxx:1026
Float_t eCutTTSqueezeFactor
Definition: EdbPVRQuality.h:100