00001
00002
00003
00004 #include "BackgroundCuts.h"
00005 #include "Cut.h"
00006
00007
00008
00009 class Cal2Dfrac : public Analyze {
00010 friend class BackgroundCuts;
00011
00012 Cal2Dfrac (const Tuple& t)
00013 : Analyze (t, "Cal_eLayer7", "Cal2Dfrac")
00014 , m_csi1(t.tupleItem ("Cal_eLayer0"))
00015 , m_csi8(t.tupleItem ("Cal_eLayer7"))
00016 , m_csiESum(t.tupleItem ("Cal_Energy_Deposit"))
00017 { }
00018
00019 virtual bool apply () {
00020 float lyr8 = item();
00021 float lyr1 = *m_csi1;
00022 float sum = *m_csiESum;
00023
00024
00025 sum = 0.001*sum;
00026
00027 return (sum != 0.) ? (lyr8/sum<0.08 || lyr1/sum>0.25 || sum>0.35) : false;
00028 }
00029
00030 const TupleItem* m_csi1;
00031 const TupleItem* m_csi8;
00032 const TupleItem* m_csiESum;
00033 };
00034
00035
00036 class SurplusHit : public Analyze {
00037 friend class BackgroundCuts;
00038
00039 SurplusHit (const Tuple& t)
00040 : Analyze (t, "REC_Surplus_Hit_Ratio", "Surplus_Hit_Ratio")
00041 , m_fstX(t.tupleItem ("TKR_First_XHit"))
00042 , m_SHR(t.tupleItem ("REC_Surplus_Hit_Ratio"))
00043 , m_csiESum(t.tupleItem ("Cal_Energy_Deposit"))
00044 { }
00045
00046 virtual bool apply () {
00047 float SHR = item();
00048 float fstX = *m_fstX;
00049 float sum = *m_csiESum;
00050
00051
00052 sum = 0.001*sum;
00053
00054 return (SHR>2.25 || (sum>1.&&fstX>13) || sum>5.);
00055 }
00056
00057 const TupleItem* m_fstX;
00058 const TupleItem* m_SHR;
00059 const TupleItem* m_csiESum;
00060 };
00061
00062
00063 class XtalRatio : public Analyze {
00064 friend class BackgroundCuts;
00065
00066 XtalRatio (const Tuple& t)
00067 : Analyze (t, "Cal_Xtal_Ratio", "Cal_Xtal_Ratio>0.25")
00068 { }
00069
00070 virtual bool apply ()
00071 {
00072 float xTalRat = item();
00073
00074 bool test = xTalRat > 0.25;
00075
00076 return test;
00077 }
00078 };
00079
00080
00081
00082 class CalFitNrm : public Analyze {
00083 friend class BackgroundCuts;
00084 CalFitNrm (const Tuple& t)
00085 : Analyze (t, "Cal_Fit_errNrm", "CalFitNrm")
00086 , m_csiESum(t.tupleItem ("Cal_Energy_Deposit"))
00087 { }
00088
00089 virtual bool apply () {
00090 float fiterr = item();
00091 float sum = *m_csiESum;
00092
00093
00094 sum = 0.001*sum;
00095
00096
00097
00098 bool test = (sum > 0.) ? (sum < 1. && fiterr < 100.) || fiterr < 50. : false;
00099 return test;
00100 }
00101
00102 const TupleItem* m_csiESum;
00103 };
00104
00105 class NumVetos : public Analyze {
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 friend class BackgroundCuts;
00119
00120 NumVetos (const Tuple& t)
00121 : Analyze (t, "ACD_TileCount", "NumVetos")
00122 , m_csiESum(t.tupleItem ("Cal_Energy_Deposit"))
00123 { }
00124
00125 virtual bool apply () {
00126 float num = item();
00127 float sum = *m_csiESum;
00128
00129
00130 sum = 0.001*sum;
00131
00132
00133 return (num<1.5 || (sum>1. && num<7.) || sum>50.);
00134 }
00135
00136 const TupleItem* m_csiESum;
00137 };
00138
00139 class CutWithEthresh : public Cut {
00140
00141 friend class BackgroundCuts;
00142 CutWithEthresh(const Tuple& t, const std::string& expression, double thresh)
00143 : Cut(t,expression)
00144 , m_csiESum(t.tupleItem ("Cal_Energy_Deposit"))
00145 , m_thresh(thresh) {}
00146
00147 virtual bool apply() {
00148 float Esum = *m_csiESum;
00149
00150
00151 Esum = 0.001*Esum;
00152
00153 return Esum > m_thresh || Cut::apply();
00154 }
00155 const TupleItem* m_csiESum;
00156 double m_thresh;
00157 };
00158
00159
00160
00161
00162 BackgroundCuts::BackgroundCuts(const Tuple& t) : AnalysisList(" Ritz cuts")
00163 {
00164 push_back( new Cut(t, "Cal_Energy_Deposit", Cut::GT, 0., "Cal Energy") );
00165 push_back( new Cut(t, "TKR_No_Tracks", Cut::GT, 0., "track found") );
00166
00167 push_back( new XtalRatio(t) );
00168
00169 push_back( new SurplusHit (t) );
00170 push_back( new CalFitNrm (t) );
00171 push_back( new NumVetos (t) );
00172 push_back( new Cal2Dfrac (t) );
00173
00174 push_back( new CutWithEthresh(t, "Cal_long_rms<15.", 0.35 ) );
00175 push_back( new Cut(t, "Cal_Z", Cut::GT, -30., "Cal_Z>-30.") );
00176 push_back( new Cut(t, "TKR_qual", Cut::GT, 10., "TKR_qual>10.") );
00177 push_back( new CutWithEthresh(t, "Cal_No_Xtals_Trunc<20", 75.) );
00178
00179 }