LHCB_2012_I1119400.cc
Go to the documentation of this file.
00001 // -*- C++ -*- 00002 #include "Rivet/Analysis.hh" 00003 #include "Rivet/Projections/ChargedFinalState.hh" 00004 00005 namespace Rivet { 00006 00007 00008 class LHCB_2012_I1119400 : public Analysis { 00009 public: 00010 00011 /// @name Constructors etc. 00012 //@{ 00013 00014 /// Constructor 00015 LHCB_2012_I1119400() : Analysis("LHCB_2012_I1119400"), 00016 _p_min(5.0), 00017 _pt_min(0.0),_pt1_edge(0.8), _pt2_edge(1.2), 00018 //_eta_nbins(4), 00019 _eta_min(2.5), 00020 _eta_max(4.5) 00021 { } 00022 00023 //@} 00024 00025 00026 public: 00027 00028 /// @name Analysis methods 00029 //@{ 00030 00031 /// Book histograms and initialise projections before the run 00032 void init() { 00033 fillMap(_partLftMap); 00034 00035 int id_shift = 0; 00036 if (fuzzyEquals(sqrtS(), 7*TeV)) id_shift = 1; 00037 // define ratios if second pdgid in pair is -1, it means that is a antiparticle/particle ratio 00038 00039 _ratiotype["pbarp"] = make_pair(2212, -1); 00040 _ratiotype["kminuskplus"] = make_pair(321, -1); 00041 _ratiotype["piminuspiplus"] = make_pair(211, -1); 00042 _ratiotype["ppi"] = make_pair(2212, 211); 00043 _ratiotype["kpi"] = make_pair(321, 211); 00044 _ratiotype["pk"] = make_pair(2212, 321); 00045 00046 std::map<string, int > _hepdataid; 00047 _hepdataid["pbarp"] = 1 + id_shift; 00048 _hepdataid["kminuskplus"] = 3 + id_shift; 00049 _hepdataid["piminuspiplus"] = 5 + id_shift; 00050 _hepdataid["ppi"] = 7 + id_shift; 00051 _hepdataid["kpi"] = 9 + id_shift; 00052 _hepdataid["pk"] = 11 + id_shift; 00053 00054 std::map<std::string, std::pair<int, int> >::iterator it; 00055 00056 // booking histograms 00057 for (it=_ratiotype.begin(); it!=_ratiotype.end(); it++) { 00058 _h_ratio_lowpt [it->first] = bookScatter2D(_hepdataid[it->first], 1, 1); 00059 _h_ratio_midpt [it->first] = bookScatter2D(_hepdataid[it->first], 1, 2); 00060 _h_ratio_highpt[it->first] = bookScatter2D(_hepdataid[it->first], 1, 3); 00061 _h_num_lowpt [it->first] = bookHisto1D ("TMP/num_l_"+it->first,refData(_hepdataid[it->first], 1, 1)); 00062 _h_num_midpt [it->first] = bookHisto1D ("TMP/num_m_"+it->first,refData(_hepdataid[it->first], 1, 2)); 00063 _h_num_highpt [it->first] = bookHisto1D ("TMP/num_h_"+it->first,refData(_hepdataid[it->first], 1, 3)); 00064 _h_den_lowpt [it->first] = bookHisto1D ("TMP/den_l_"+it->first,refData(_hepdataid[it->first], 1, 1)); 00065 _h_den_midpt [it->first] = bookHisto1D ("TMP/den_m_"+it->first,refData(_hepdataid[it->first], 1, 2)); 00066 _h_den_highpt [it->first] = bookHisto1D ("TMP/den_h_"+it->first,refData(_hepdataid[it->first], 1, 3)); 00067 } 00068 00069 addProjection(ChargedFinalState(_eta_min, _eta_max, _pt_min*GeV), "CFS"); 00070 } 00071 00072 00073 // Perform the per-event analysis 00074 void analyze(const Event& event) { 00075 const double weight = event.weight(); 00076 const ChargedFinalState& cfs = applyProjection<ChargedFinalState>(event, "CFS"); 00077 00078 foreach (const Particle& p, cfs.particles()) { 00079 int id = p.pid(); 00080 // continue if particle not a proton, a kaon or a pion 00081 if ( !( (abs(id) == 211) || (abs(id) == 321) || (abs(id) == 2212))) { 00082 continue; 00083 } 00084 00085 // cut in momentum 00086 const FourMomentum& qmom = p.momentum(); 00087 if (qmom.p3().mod() < _p_min) continue; 00088 00089 // Lifetime cut: ctau sum of all particle ancestors < 10^-9 m according to the paper (see eq. 5) 00090 const double MAX_CTAU = 1.0e-9; // [m] 00091 double ancestor_lftsum = getMotherLifeTimeSum(p); 00092 if ( (ancestor_lftsum < 0.0) || (ancestor_lftsum > MAX_CTAU) ) continue; 00093 00094 double eta = qmom.eta(); 00095 double pT = qmom.pT(); 00096 00097 std::map<std::string, std::pair<int, int> >::iterator it; 00098 00099 for (it=_ratiotype.begin(); it!=_ratiotype.end(); it++) { 00100 // check what type of ratio is 00101 if ((it->second.second)==-1) { 00102 // check ptbin 00103 if (pT < _pt1_edge) { 00104 // filling histos for numerator and denominator 00105 if (id == -abs(it->second.first)) _h_num_lowpt[it->first]->fill(eta, weight); 00106 if (id == abs(it->second.first)) _h_den_lowpt[it->first]->fill(eta, weight); 00107 } 00108 else if (pT < _pt2_edge) { 00109 // filling histos for numerator and denominator 00110 if (id == -abs(it->second.first)) _h_num_midpt[it->first]->fill(eta, weight); 00111 if (id == abs(it->second.first)) _h_den_midpt[it->first]->fill(eta, weight); 00112 } 00113 else { 00114 // filling histos for numerator and denominator 00115 if (id == -abs(it->second.first)) _h_num_highpt[it->first]->fill(eta, weight); 00116 if (id == abs(it->second.first)) _h_den_highpt[it->first]->fill(eta, weight); 00117 } 00118 } 00119 else { 00120 // check what type of ratio is 00121 if (pT < _pt1_edge) { 00122 // filling histos for numerator and denominator 00123 if (abs(id) == abs(it->second.first)) _h_num_lowpt[it->first]->fill(eta, weight); 00124 if (abs(id) == abs(it->second.second)) _h_den_lowpt[it->first]->fill(eta, weight); 00125 } 00126 else if (pT < _pt2_edge) { 00127 // filling histos for numerator and denominator 00128 if (abs(id) == abs(it->second.first)) _h_num_midpt[it->first]->fill(eta, weight); 00129 if (abs(id) == abs(it->second.second)) _h_den_midpt[it->first]->fill(eta, weight); 00130 } 00131 else { 00132 // filling histos for numerator and denominator 00133 if (abs(id) == abs(it->second.first)) _h_num_highpt[it->first]->fill(eta, weight); 00134 if (abs(id) == abs(it->second.second)) _h_den_highpt[it->first]->fill(eta, weight); 00135 } 00136 } 00137 } 00138 } 00139 } 00140 00141 00142 // Generate the ratio histograms 00143 void finalize() { 00144 std::map<std::string, std::pair<int, int> >::iterator it; 00145 00146 // booking histograms 00147 for (it=_ratiotype.begin(); it!=_ratiotype.end(); it++) { 00148 divide(_h_num_lowpt[it->first], _h_den_lowpt[it->first], _h_ratio_lowpt[it->first]); 00149 divide(_h_num_midpt[it->first], _h_den_midpt[it->first], _h_ratio_midpt[it->first]); 00150 divide(_h_num_highpt[it->first], _h_den_highpt[it->first], _h_ratio_highpt[it->first]); 00151 } 00152 } 00153 00154 //@} 00155 00156 00157 private: 00158 00159 00160 // Get particle lifetime from hardcoded data 00161 double getLifeTime(int pid) { 00162 pid = abs(pid); 00163 double lft = -1.0; 00164 map<int, double>::iterator pPartLft = _partLftMap.find(pid); 00165 // search stable particle list 00166 if (pPartLft == _partLftMap.end()) { 00167 if (pid <= 100) return 0.0; 00168 for (size_t i=0; i < sizeof(_stablePDGIds)/sizeof(unsigned int); i++) { 00169 if (pid == _stablePDGIds[i]) { 00170 lft = 0.0; 00171 break; 00172 } 00173 } 00174 } else { 00175 lft = (*pPartLft).second; 00176 } 00177 if (lft < 0.0 && PID::isHadron(pid)) { 00178 MSG_WARNING("Lifetime map imcomplete --- " << pid 00179 << "... assume zero lifetime"); 00180 lft = 0.0; 00181 } 00182 return lft; 00183 } 00184 00185 // Data members like post-cuts event weight counters go here 00186 const double getMotherLifeTimeSum(const Particle& p) { 00187 if (p.genParticle() == NULL) return -1.; 00188 double lftSum = 0.; 00189 double plft = 0.; 00190 const GenParticle* part = p.genParticle(); 00191 const GenVertex* ivtx = part->production_vertex(); 00192 while(ivtx) 00193 { 00194 if (ivtx->particles_in_size() < 1) { lftSum = -1.; break; }; 00195 const GenVertex::particles_in_const_iterator iPart_invtx = ivtx->particles_in_const_begin(); 00196 part = (*iPart_invtx); 00197 if ( !(part) ) { lftSum = -1.; break; }; 00198 ivtx = part->production_vertex(); 00199 if ( (part->pdg_id() == 2212) || !(ivtx) ) break; // reached beam 00200 plft = getLifeTime(part->pdg_id()); 00201 if (plft < 0.) { lftSum = -1.; break; }; 00202 lftSum += plft; 00203 }; 00204 return (lftSum * c_light); 00205 } 00206 00207 /// @name Private variables 00208 // Momentum threshold 00209 double _p_min; 00210 00211 // The edges of the intervals of transversal momentum 00212 double _pt_min; 00213 double _pt1_edge; 00214 double _pt2_edge; 00215 00216 // The limits of the pseudorapidity window 00217 //int _eta_nbins; 00218 double _eta_min; 00219 double _eta_max; 00220 00221 // Map between PDG id and particle lifetimes in seconds 00222 std::map<int, double> _partLftMap; 00223 00224 // Set of PDG Ids for stable particles (PDG Id <= 100 are considered stable) 00225 static const int _stablePDGIds[205]; 00226 00227 // Define histograms 00228 // ratio 00229 std::map<std::string, Scatter2DPtr > _h_ratio_lowpt; 00230 std::map<std::string, Scatter2DPtr > _h_ratio_midpt; 00231 std::map<std::string, Scatter2DPtr > _h_ratio_highpt; 00232 // numerator 00233 std::map<std::string, Histo1DPtr > _h_num_lowpt; 00234 std::map<std::string, Histo1DPtr > _h_num_midpt; 00235 std::map<std::string, Histo1DPtr > _h_num_highpt; 00236 // denominator 00237 std::map<std::string, Histo1DPtr > _h_den_lowpt; 00238 std::map<std::string, Histo1DPtr > _h_den_midpt; 00239 std::map<std::string, Histo1DPtr > _h_den_highpt; 00240 00241 // Map of ratios and IDs of numerator and denominator 00242 std::map<string, pair<int,int> > _ratiotype; 00243 00244 // Fill the PDG Id to Lifetime[seconds] map 00245 // Data was extracted from LHCb Particle Table through LHCb::ParticlePropertySvc 00246 bool fillMap(map<int, double> &m) { 00247 m[6] = 4.707703E-25; m[11] = 1.E+16; m[12] = 1.E+16; 00248 m[13] = 2.197019E-06; m[14] = 1.E+16; m[15] = 2.906E-13; m[16] = 1.E+16; m[22] = 1.E+16; 00249 m[23] = 2.637914E-25; m[24] = 3.075758E-25; m[25] = 9.4E-26; m[35] = 9.4E-26; 00250 m[36] = 9.4E-26; m[37] = 9.4E-26; m[84] = 3.335641E-13; m[85] = 1.290893E-12; 00251 m[111] = 8.4E-17; m[113] = 4.405704E-24; m[115] = 6.151516E-24; m[117] = 4.088275E-24; 00252 m[119] = 2.102914E-24; m[130] = 5.116E-08; m[150] = 1.525E-12; m[211] = 2.6033E-08; 00253 m[213] = 4.405704E-24; m[215] = 6.151516E-24; m[217] = 4.088275E-24; m[219] = 2.102914E-24; 00254 m[221] = 5.063171E-19; m[223] = 7.752794E-23; m[225] = 3.555982E-24; m[227] = 3.91793E-24; 00255 m[229] = 2.777267E-24; m[310] = 8.953E-11; m[313] = 1.308573E-23; m[315] = 6.038644E-24; 00256 m[317] = 4.139699E-24; m[319] = 3.324304E-24; m[321] = 1.238E-08; m[323] = 1.295693E-23; 00257 m[325] = 6.682357E-24; m[327] = 4.139699E-24; m[329] = 3.324304E-24; m[331] = 3.210791E-21; 00258 m[333] = 1.545099E-22; m[335] = 9.016605E-24; m[337] = 7.565657E-24; m[350] = 1.407125E-12; 00259 m[411] = 1.04E-12; m[413] = 6.856377E-21; m[415] = 1.778952E-23; m[421] = 4.101E-13; 00260 m[423] = 1.000003E-19; m[425] = 1.530726E-23; m[431] = 5.E-13; m[433] = 1.000003E-19; 00261 m[435] = 3.291061E-23; m[441] = 2.465214E-23; m[443] = 7.062363E-21; m[445] = 3.242425E-22; 00262 m[510] = 1.525E-12; m[511] = 1.525E-12; m[513] = 1.000019E-19; m[515] = 1.31E-23; 00263 m[521] = 1.638E-12; m[523] = 1.000019E-19; m[525] = 1.31E-23; m[530] = 1.536875E-12; 00264 m[531] = 1.472E-12; m[533] = 1.E-19; m[535] = 1.31E-23; m[541] = 4.5E-13; 00265 m[553] = 1.218911E-20; m[1112] = 4.539394E-24; m[1114] = 5.578069E-24; m[1116] = 1.994582E-24; 00266 m[1118] = 2.269697E-24; m[1212] = 4.539394E-24; m[1214] = 5.723584E-24; m[1216] = 1.994582E-24; 00267 m[1218] = 1.316424E-24; m[2112] = 8.857E+02; m[2114] = 5.578069E-24; m[2116] = 4.388081E-24; 00268 m[2118] = 2.269697E-24; m[2122] = 4.539394E-24; m[2124] = 5.723584E-24; m[2126] = 1.994582E-24; 00269 m[2128] = 1.316424E-24; m[2212] = 1.E+16; m[2214] = 5.578069E-24; m[2216] = 4.388081E-24; 00270 m[2218] = 2.269697E-24; m[2222] = 4.539394E-24; m[2224] = 5.578069E-24; m[2226] = 1.994582E-24; 00271 m[2228] = 2.269697E-24; m[3112] = 1.479E-10; m[3114] = 1.670589E-23; m[3116] = 5.485102E-24; 00272 m[3118] = 3.656734E-24; m[3122] = 2.631E-10; m[3124] = 4.219309E-23; m[3126] = 8.227653E-24; 00273 m[3128] = 3.291061E-24; m[3212] = 7.4E-20; m[3214] = 1.828367E-23; m[3216] = 5.485102E-24; 00274 m[3218] = 3.656734E-24; m[3222] = 8.018E-11; m[3224] = 1.838582E-23; m[3226] = 5.485102E-24; 00275 m[3228] = 3.656734E-24; m[3312] = 1.639E-10; m[3314] = 6.648608E-23; m[3322] = 2.9E-10; 00276 m[3324] = 7.233101E-23; m[3334] = 8.21E-11; m[4112] = 2.991874E-22; m[4114] = 4.088274E-23; 00277 m[4122] = 2.E-13; m[4132] = 1.12E-13; m[4212] = 3.999999E-22; m[4214] = 3.291061E-22; 00278 m[4222] = 2.951624E-22; m[4224] = 4.417531E-23; m[4232] = 4.42E-13; m[4332] = 6.9E-14; 00279 m[4412] = 3.335641E-13; m[4422] = 3.335641E-13; m[4432] = 3.335641E-13; m[5112] = 1.E-19; 00280 m[5122] = 1.38E-12; m[5132] = 1.42E-12; m[5142] = 1.290893E-12; m[5212] = 1.E-19; 00281 m[5222] = 1.E-19; m[5232] = 1.42E-12; m[5242] = 1.290893E-12; m[5312] = 1.E-19; 00282 m[5322] = 1.E-19; m[5332] = 1.55E-12; m[5342] = 1.290893E-12; m[5442] = 1.290893E-12; 00283 m[5512] = 1.290893E-12; m[5522] = 1.290893E-12; m[5532] = 1.290893E-12; m[5542] = 1.290893E-12; 00284 m[10111] = 2.48382E-24; m[10113] = 4.635297E-24; m[10115] = 2.54136E-24; m[10211] = 2.48382E-24; 00285 m[10213] = 4.635297E-24; m[10215] = 2.54136E-24; m[10223] = 1.828367E-24; m[10225] = 3.636531E-24; 00286 m[10311] = 2.437823E-24; m[10313] = 7.313469E-24; m[10315] = 3.538775E-24; 00287 m[10321] = 2.437823E-24; m[10323] = 7.313469E-24; m[10325] = 3.538775E-24; 00288 m[10331] = 4.804469E-24; m[10411] = 4.38E-24; m[10413] = 3.29E-23; m[10421] = 4.38E-24; 00289 m[10423] = 3.22653E-23; m[10431] = 6.5821E-22; m[10433] = 6.5821E-22; m[10441] = 6.453061E-23; 00290 m[10511] = 4.39E-24; m[10513] = 1.65E-23; m[10521] = 4.39E-24; m[10523] = 1.65E-23; 00291 m[10531] = 4.39E-24; m[10533] = 1.65E-23; m[11114] = 2.194041E-24; m[11116] = 1.828367E-24; 00292 m[11212] = 1.880606E-24; m[11216] = 1.828367E-24; m[12112] = 2.194041E-24; 00293 m[12114] = 2.194041E-24; m[12116] = 5.063171E-24; m[12126] = 1.828367E-24; 00294 m[12212] = 2.194041E-24; m[12214] = 2.194041E-24; m[12216] = 5.063171E-24; 00295 m[12224] = 2.194041E-24; m[12226] = 1.828367E-24; m[13112] = 6.582122E-24; m[13114] = 1.09702E-23; 00296 m[13116] = 5.485102E-24; m[13122] = 1.316424E-23; m[13124] = 1.09702E-23; m[13126] = 6.928549E-24; 00297 m[13212] = 6.582122E-24; m[13214] = 1.09702E-23; m[13216] = 5.485102E-24; m[13222] = 6.582122E-24; 00298 m[13224] = 1.09702E-23; m[13226] = 5.485102E-24; m[13314] = 2.742551E-23; 00299 m[13324] = 2.742551E-23; m[14122] = 1.828367E-22; m[20022] = 1.E+16; m[20113] = 1.567172E-24; 00300 m[20213] = 1.567172E-24; m[20223] = 2.708692E-23; m[20313] = 3.782829E-24; 00301 m[20315] = 2.384827E-24; m[20323] = 3.782829E-24; m[20325] = 2.384827E-24; 00302 m[20333] = 1.198929E-23; m[20413] = 2.63E-24; m[20423] = 2.63E-24; m[20433] = 6.5821E-22; 00303 m[20443] = 7.395643E-22; m[20513] = 2.63E-24; m[20523] = 2.63E-24; m[20533] = 2.63E-24; 00304 m[21112] = 2.632849E-24; m[21114] = 3.291061E-24; m[21212] = 2.632849E-24; 00305 m[21214] = 6.582122E-24; m[22112] = 4.388081E-24; m[22114] = 3.291061E-24; 00306 m[22122] = 2.632849E-24; m[22124] = 6.582122E-24; m[22212] = 4.388081E-24; 00307 m[22214] = 3.291061E-24; m[22222] = 2.632849E-24; m[22224] = 3.291061E-24; 00308 m[23112] = 7.313469E-24; m[23114] = 2.991874E-24; m[23122] = 4.388081E-24; 00309 m[23124] = 6.582122E-24; m[23126] = 3.291061E-24; m[23212] = 7.313469E-24; 00310 m[23214] = 2.991874E-24; m[23222] = 7.313469E-24; m[23224] = 2.991874E-24; 00311 m[30113] = 2.632849E-24; m[30213] = 2.632849E-24; m[30221] = 1.880606E-24; 00312 m[30223] = 2.089563E-24; m[30313] = 2.056913E-24; m[30323] = 2.056913E-24; 00313 m[30443] = 2.419898E-23; m[31114] = 1.880606E-24; m[31214] = 3.291061E-24; 00314 m[32112] = 3.989164E-24; m[32114] = 1.880606E-24; m[32124] = 3.291061E-24; 00315 m[32212] = 3.989164E-24; m[32214] = 1.880606E-24; m[32224] = 1.880606E-24; 00316 m[33122] = 1.880606E-23; m[42112] = 6.582122E-24; m[42212] = 6.582122E-24; 00317 m[43122] = 2.194041E-24; m[53122] = 4.388081E-24; m[100111] = 1.645531E-24; 00318 m[100113] = 1.64553E-24; m[100211] = 1.645531E-24; m[100213] = 1.64553E-24; 00319 m[100221] = 1.196749E-23; m[100223] = 3.061452E-24; m[100313] = 2.837122E-24; 00320 m[100323] = 2.837122E-24; m[100331] = 4.459432E-25; m[100333] = 4.388081E-24; 00321 m[100441] = 4.701516E-23; m[100443] = 2.076379E-21; m[100553] = 2.056913E-20; 00322 m[200553] = 3.242425E-20; m[300553] = 3.210791E-23; m[9000111] = 8.776163E-24; 00323 m[9000211] = 8.776163E-24; m[9000443] = 8.227652E-24; m[9000553] = 5.983747E-24; 00324 m[9010111] = 3.164482E-24; m[9010211] = 3.164482E-24; m[9010221] = 9.403031E-24; 00325 m[9010443] = 8.438618E-24; m[9010553] = 8.3318E-24; m[9020443] = 1.061633E-23; 00326 m[9030221] = 6.038644E-24; m[9042413] = 2.07634E-21; m[9050225] = 1.394517E-24; 00327 m[9060225] = 3.291061E-24; m[9080225] = 4.388081E-24; m[9090225] = 2.056913E-24; 00328 m[9910445] = 2.07634E-21; m[9920443] = 2.07634E-21; 00329 return true; 00330 } 00331 00332 }; 00333 00334 00335 const int LHCB_2012_I1119400::_stablePDGIds[205] = { 00336 311, 543, 545, 551, 555, 557, 1103, 2101, 2103, 2203, 3101, 3103, 3201, 3203, 3303, 00337 4101, 4103, 4124, 4201, 4203, 4301, 4303, 4312, 4314, 4322, 4324, 4334, 4403, 4414, 00338 4424, 4434, 4444, 5101, 5103, 5114, 5201, 5203, 5214, 5224, 5301, 5303, 5314, 5324, 00339 5334, 5401, 5403, 5412, 5414, 5422, 5424, 5432, 5434, 5444, 5503, 5514, 5524, 5534, 00340 5544, 5554, 10022, 10333, 10335, 10443, 10541, 10543, 10551, 10553, 10555, 11112, 00341 12118, 12122, 12218, 12222, 13316, 13326, 20543, 20553, 20555, 23314, 23324, 30343, 00342 30353, 30363, 30553, 33314, 33324, 41214, 42124, 52114, 52214, 100311, 100315, 100321, 00343 100325, 100411, 100413, 100421, 100423, 100551, 100555, 100557, 110551, 110553, 110555, 00344 120553, 120555, 130553, 200551, 200555, 210551, 210553, 220553, 1000001, 1000002, 00345 1000003, 1000004, 1000005, 1000006, 1000011, 1000012, 1000013, 1000014, 1000015, 00346 1000016, 1000021, 1000022, 1000023, 1000024, 1000025, 1000035, 1000037, 1000039, 00347 2000001, 2000002, 2000003, 2000004, 2000005, 2000006, 2000011, 2000012, 2000013, 00348 2000014, 2000015, 2000016, 3000111, 3000113, 3000211, 3000213, 3000221, 3000223, 00349 3000331, 3100021, 3100111, 3100113, 3200111, 3200113, 3300113, 3400113, 4000001, 00350 4000002, 4000011, 4000012, 5000039, 9000221, 9900012, 9900014, 9900016, 9900023, 00351 9900024, 9900041, 9900042 }; 00352 00353 00354 // Plugin hook 00355 DECLARE_RIVET_PLUGIN(LHCB_2012_I1119400); 00356 00357 } Generated on Wed Oct 7 2015 12:09:13 for The Rivet MC analysis system by ![]() |