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