882 float Rthreshold = 3;
885 printf(
"Track %d nseg=%d, too short for kink search\n", trk->
ID(), trk->
N());
890 sprintf(ntname,
"ntKinkDT%d", trk->
ID());
891 TNtuple *tree = (TNtuple *) gROOT->FindObject(ntname);
892 if(tree) tree->Delete();
894 tree =
new TNtuple(ntname,
"InTrack Decay Search",
"itrk:ipl1:ipl2:P:dtt:dtl:dt:Pt:rmst:rmsl:rms:dxt:dxl");
896 TObjArray *kinks =
new TObjArray;
905 for(
int i=0;i<
t->N();i++)
t->GetSegment(i)->SetPID(
t->GetSegment(i)->Plate());
909 double angle = sqrt(
t->TX()*
t->TX()+
t->TY()*
t->TY());
910 double resT = 0.0015*sqrt(2.0);
911 double resL = 0.0015*(1+angle*5)*sqrt(2.0);
915 for(
int j=0;j<n-1;j++){
922 if(ipl2>=57)
continue;
925 double rms,rmst,rmsl;
929 rmst = rmst>resT ? rmst : resT;
930 rmsl = rmsl>resL ? rmsl : resL;
935 double dt = sqrt(dtt*dtt+dtl*dtl);
944 double Pt =
p>0 ?
p*dt : -1.;
947 tree->Fill(
t->ID(), ipl1, ipl2,
p, dtt, dtl, dt,
Pt, rmst, rmsl, rms, dxt, dxl);
951 if(
fabs(dtt)>rmst*Rthreshold ||
fabs(dtl)>rmsl*Rthreshold ) {
962 EdbEDASmallKink *kink =
new EdbEDASmallKink(v,
t,
s1,
s2, dtt, dtl, dxt, dxl, ndau,
p, pmin, pmax,
Pt, rmst, rmsl);
965 printf(
"Kink candidate. itrk %d plate %d - %d kink angle %.4lf P %.3lf Pt %.3lf\n",
966 t->ID(), ipl1, ipl2, dt,
p,
Pt);
967 printf(
" (Transverse, Longitudinal) = ( %.4lf, %.4lf ) threshold ( %.4lf, %.4lf ), R = %.2f %.2f\n",
968 dtt, dtl, rmst*Rthreshold, rmsl*Rthreshold, dtt/rmst, dtl/rmsl);
969 printf(
" rms=%.4lf rms_transvers=%.4lf rms_longitudinal=%.4lf\n", rms, rmst, rmsl);
970 printf(
" kinkpoint %.1f %.1f %.1f\n", v->
X(), v->
Y(), v->
Z());
976 printf(
"%d kink candidates are found.\n", kinks->GetEntriesFast());
979 tree->SetMarkerStyle(20);
980 TText *
text =
new TText();
981 text->SetTextSize(0.035);
982 text->SetTextAngle(20);
984 double iplmin = tree->GetMinimum(
"ipl1");
985 double iplmax = tree->GetMaximum(
"ipl2")+1;
989 dt6[0] =
fabs(tree->GetMaximum(
"dtt"));
990 dt6[1] =
fabs(tree->GetMinimum(
"dtt"));
991 dt6[2] =
fabs(tree->GetMaximum(
"dtl"));
992 dt6[3] =
fabs(tree->GetMinimum(
"dtl"));
993 dt6[4] = tree->GetMaximum(
"rmst") * Rthreshold;
994 dt6[5] = tree->GetMaximum(
"rmsl") * Rthreshold;
995 double dtmax = TMath::MaxElement(6,dt6) * 1.15 * 1e3;
997 double rmst = tree->GetMinimum(
"rmst");
998 double rmsl = tree->GetMinimum(
"rmsl");
1000 TText *textrms =
new TText();
1001 textrms->SetTextSize(0.035);
1009 TString hname = Form(
"hrmst%d",trk->
ID());
1010 TH1F *
h1 = (TH1F *) gROOT->FindObject(hname);
1011 if(
h1)
h1->Delete();
1012 h1 =
new TH1F(hname,Form(
"#delta#theta^{RMS}Transverse itrk=%d",trk->
ID()), (
int)(iplmax-iplmin+1), iplmin-0.5, iplmax+0.5);
1013 h1->SetLineColor(kGray);
1014 h1->SetFillColor(kGray);
1015 tree->Draw(
"ipl2 >>"+hname,
"rmst*1e3");
1018 TH1F *h15 = (TH1F *) gROOT->FindObject(hname);
1019 if(h15) h15->Delete();
1020 h15 =
new TH1F(hname,Form(
"#delta#theta^{RMS}Transverse itrk=%d",trk->
ID()), (
int)(iplmax-iplmin+1), iplmin-0.5, iplmax+0.5);
1021 tree->Draw(
"ipl2 >>"+hname,Form(
"rmst*1e3*%f",Rthreshold));
1022 h15->SetLineColor(kCyan-10);
1023 h15->SetFillColor(kCyan-10);
1024 h15->SetXTitle(
"Plate number");
1025 h15->SetYTitle(
"Kink angle (mrad)");
1026 h15->SetMaximum(dtmax);
1031 tree->Draw(
"abs(dtt)*1e3:ipl2",
"",
"same");
1033 TLine *l =
new TLine();
1034 double xmin =
h1->GetXaxis()->GetXmin();
1035 double xmax =
h1->GetXaxis()->GetXmax();
1036 l->DrawLine(
xmin, rmst*1e3,
xmax, rmst*1e3);
1037 l->SetLineColor(kCyan);
1038 l->DrawLine(
xmin, rmst*Rthreshold*1e3,
xmax, rmst*Rthreshold*1e3);
1040 textrms->DrawText(
xmin+0.8*(
xmax-
xmin), rmst*1e3, Form(
"%.1lfmrad",rmst*1e3));
1041 textrms->DrawText(
xmin+0.8*(
xmax-
xmin), Rthreshold*rmst*1e3, Form(
"%.1lfmrad",Rthreshold*rmst*1e3));
1043 if(kinks->GetEntriesFast()){
1044 for(
int i=0;i<kinks->GetEntriesFast();i++){
1052 hname = Form(
"hrmsl%d",trk->
ID());
1053 h1 = (TH1F *) gROOT->FindObject(hname);
1054 if(
h1)
h1->Delete();
1055 h1 =
new TH1F(hname,Form(
"#delta#theta^{RMS}Transverse itrk=%d",trk->
ID()), (
int)(iplmax-iplmin+1), iplmin-0.5, iplmax+0.5);
1056 h1->SetLineColor(kGray);
1057 h1->SetFillColor(kGray);
1058 tree->Draw(
"ipl2 >>"+hname,
"rmsl*1e3");
1061 h15 = (TH1F *) gROOT->FindObject(hname);
1062 if(h15) h15->Delete();
1063 h15 =
new TH1F(hname,Form(
"#delta#theta^{RMS}Longitudinal itrk=%d",trk->
ID()), (
int)(iplmax-iplmin+1), iplmin-0.5, iplmax+0.5);
1064 tree->Draw(
"ipl2 >>"+hname,Form(
"rmsl*1e3*%f",Rthreshold));
1065 h15->SetLineColor(kCyan-10);
1066 h15->SetFillColor(kCyan-10);
1067 h15->SetXTitle(
"Plate number");
1068 h15->SetYTitle(
"Kink angle (mrad)");
1069 h15->SetMaximum(dtmax);
1074 tree->Draw(
"abs(dtl)*1e3:ipl2",
"",
"same");
1077 l->DrawLine(
xmin, rmsl*1e3,
xmax, rmsl*1e3);
1078 l->SetLineColor(kCyan);
1079 l->DrawLine(
xmin, rmsl*Rthreshold*1e3,
xmax, rmsl*Rthreshold*1e3);
1081 textrms->DrawText(
xmin+0.8*(
xmax-
xmin), rmsl*1e3, Form(
"%.1lfmrad",rmsl*1e3));
1082 textrms->DrawText(
xmin+0.8*(
xmax-
xmin), Rthreshold*rmsl*1e3, Form(
"%.1lfmrad",Rthreshold*rmsl*1e3));
1084 if(kinks->GetEntriesFast()){
1085 for(
int i=0;i<kinks->GetEntriesFast();i++){
1094 TH2F *h = (TH2F *) gROOT->FindObject(Form(
"hdxt%d",trk->
ID()));
1096 double dxmin = tree->GetMinimum(
"dxt");
1097 double dxmax = tree->GetMaximum(
"dxt");
1098 h =
new TH2F(Form(
"hdxt%d",trk->
ID()),Form(
"#deltax Transverse itrk=%d", trk->
ID()), 10, iplmin, iplmax, 10, dxmin,dxmax);
1099 h->SetXTitle(
"Plate number");
1100 h->SetYTitle(
"#deltax (#mum)");
1103 tree->Draw(
"dxt:ipl2",
"",
"same");
1104 if(kinks->GetEntriesFast()){
1105 for(
int i=0;i<kinks->GetEntriesFast();i++){
1107 text->DrawText(kink->
IPL2()+0.5, kink->
DXT(), Form(
"%.1lfmrad pl%d-%d pt%.3lf",
fabs(kink->
DTT()*1e3), kink->
IPL1(), kink->
IPL2(), kink->
PT()));
1113 h = (TH2F *) gROOT->FindObject(Form(
"hdxl%d",trk->
ID()));
1115 dxmin = tree->GetMinimum(
"dxl");
1116 dxmax = tree->GetMaximum(
"dxl");
1117 h =
new TH2F(Form(
"hdxl%d",trk->
ID()),Form(
"#deltax Longitudinal itrk=%d", trk->
ID()), 10, iplmin, iplmax, 10, dxmin,dxmax);
1118 h->SetXTitle(
"Plate number");
1119 h->SetYTitle(
"#deltax (#mum)");
1122 tree->Draw(
"dxl:ipl2",
"",
"same");
1124 if(kinks->GetEntriesFast()){
1125 for(
int i=0;i<kinks->GetEntriesFast();i++){
1127 text->DrawText(kink->
IPL2()+0.5, kink->
DXL(), Form(
"%.1lfmrad pl%d-%d pt%.3lf",
fabs(kink->
DTL()*1e3), kink->
IPL1(), kink->
IPL2(), kink->
PT()));
TText * text
Definition: Canv_SYSTEMATICS_ALLCOMBINED__RMSEnergy__vs__Energy__ELECTRON.C:164
float Pt[500]
Definition: RecDispNU.C:99
Expr< UnaryOp< Fabs< T >, Expr< A, T, D >, T >, T, D > fabs(const Expr< A, T, D > &rhs)
Definition: UnaryOperators.hh:96
EdbVertex * CalcVertex(TObjArray *segments)
Definition: ShowRec.cpp:9043
Definition: EdbEDADecaySearch.h:161
double DXL()
Definition: EdbEDADecaySearch.h:185
double DTT()
Definition: EdbEDADecaySearch.h:182
int IPL2()
Definition: EdbEDADecaySearch.C:104
double PT()
Definition: EdbEDADecaySearch.h:190
double DXT()
Definition: EdbEDADecaySearch.h:184
double DTL()
Definition: EdbEDADecaySearch.h:183
void AddVertex(EdbVertex *v)
Definition: EdbEDA.h:661
Int_t ID() const
Definition: EdbSegP.h:144
Int_t N() const
Definition: EdbPattern.h:182
Definition: EdbVertex.h:68
Float_t X() const
Definition: EdbVertex.h:130
Float_t Z() const
Definition: EdbVertex.h:132
Float_t Y() const
Definition: EdbVertex.h:131
float xmin
Definition: emthickness.cpp:61
float xmax
Definition: emthickness.cpp:61
TH1F * h1
Definition: energy.C:16
void CalcDXTransLongi(EdbSegP *s1, EdbSegP *s2, double *dxt, double *dxl)
Definition: EdbEDAUtil.C:665
double DTRMSTLGiven1Kink(EdbTrackP *t, int iKink, double *rmsspace, double *rmstransverse, double *rmslongitudinal, int *NKinkAngleUsed=NULL)
Definition: EdbEDAUtil.C:790
void CalcDTTransLongi(EdbSegP *s1, EdbSegP *s2, double *dtTransverse, double *dtLongitudinal)
Definition: EdbEDAUtil.C:648
EdbTrackP * CleanTrack(EdbTrackP *t)
Definition: EdbEDAUtil.C:499
void CalcPPartial(EdbTrackP *t, EdbSegP *s1st, EdbSegP *slast, double &p, double &pmin, double &pmax, bool print=kTRUE)
Definition: EdbEDAUtil.C:344
p
Definition: testBGReduction_AllMethods.C:8