File indexing completed on 2024-04-06 12:04:53
0001 #include "DataFormats/ParticleFlowReco/interface/PFSimParticle.h"
0002
0003
0004 using namespace reco;
0005 using namespace std;
0006
0007 PFSimParticle::PFSimParticle() : PFTrack(), pdgCode_(0), id_(0), motherId_(0) {}
0008
0009 PFSimParticle::PFSimParticle(double charge,
0010 int pdgCode,
0011 unsigned id,
0012 int motherId,
0013 const vector<int>& daughterIds,
0014 unsigned rectrackId,
0015 const std::vector<unsigned>& recHitContrib,
0016 const std::vector<double>& recHitContribFrac)
0017 : PFTrack(charge),
0018 pdgCode_(pdgCode),
0019 id_(id),
0020 motherId_(motherId),
0021 daughterIds_(daughterIds),
0022 rectrackId_(rectrackId),
0023 recHitContrib_(recHitContrib),
0024 recHitContribFrac_(recHitContribFrac) {}
0025
0026 PFSimParticle::PFSimParticle(const PFSimParticle& other)
0027 : PFTrack(other),
0028 pdgCode_(other.pdgCode_),
0029 id_(other.id_),
0030 motherId_(other.motherId_),
0031 daughterIds_(other.daughterIds_),
0032 rectrackId_(other.rectrackId_),
0033 recHitContrib_(other.recHitContrib_),
0034 recHitContribFrac_(other.recHitContribFrac_) {}
0035
0036 ostream& reco::operator<<(ostream& out, const PFSimParticle& particle) {
0037 if (!out)
0038 return out;
0039
0040 const reco::PFTrajectoryPoint& closestApproach = particle.trajectoryPoint(reco::PFTrajectoryPoint::ClosestApproach);
0041
0042 out << setiosflags(ios::right);
0043 out << setiosflags(ios::fixed);
0044
0045 out << "Particle #" << particle.id() << ", mother = " << setw(2) << particle.motherId();
0046
0047 out << setprecision(1);
0048 out << ", charge = " << setw(5) << particle.charge();
0049 out << setprecision(3);
0050
0051
0052 int partId = particle.pdgCode();
0053 std::string name;
0054
0055
0056
0057 switch (partId) {
0058 case 1: {
0059 name = "d";
0060 break;
0061 }
0062 case 2: {
0063 name = "u";
0064 break;
0065 }
0066 case 3: {
0067 name = "s";
0068 break;
0069 }
0070 case 4: {
0071 name = "c";
0072 break;
0073 }
0074 case 5: {
0075 name = "b";
0076 break;
0077 }
0078 case 6: {
0079 name = "t";
0080 break;
0081 }
0082 case -1: {
0083 name = "~d";
0084 break;
0085 }
0086 case -2: {
0087 name = "~u";
0088 break;
0089 }
0090 case -3: {
0091 name = "~s";
0092 break;
0093 }
0094 case -4: {
0095 name = "~c";
0096 break;
0097 }
0098 case -5: {
0099 name = "~b";
0100 break;
0101 }
0102 case -6: {
0103 name = "~t";
0104 break;
0105 }
0106 case 11: {
0107 name = "e-";
0108 break;
0109 }
0110 case -11: {
0111 name = "e+";
0112 break;
0113 }
0114 case 12: {
0115 name = "nu_e";
0116 break;
0117 }
0118 case -12: {
0119 name = "~nu_e";
0120 break;
0121 }
0122 case 13: {
0123 name = "mu-";
0124 break;
0125 }
0126 case -13: {
0127 name = "mu+";
0128 break;
0129 }
0130 case 14: {
0131 name = "nu_mu";
0132 break;
0133 }
0134 case -14: {
0135 name = "~nu_mu";
0136 break;
0137 }
0138 case 15: {
0139 name = "tau-";
0140 break;
0141 }
0142 case -15: {
0143 name = "tau+";
0144 break;
0145 }
0146 case 16: {
0147 name = "nu_tau";
0148 break;
0149 }
0150 case -16: {
0151 name = "~nu_tau";
0152 break;
0153 }
0154 case 21: {
0155 name = "gluon";
0156 break;
0157 }
0158 case 22: {
0159 name = "gamma";
0160 break;
0161 }
0162 case 23: {
0163 name = "Z0";
0164 break;
0165 }
0166 case 24: {
0167 name = "W+";
0168 break;
0169 }
0170 case 25: {
0171 name = "H0";
0172 break;
0173 }
0174 case -24: {
0175 name = "W-";
0176 break;
0177 }
0178 case 111: {
0179 name = "pi0";
0180 break;
0181 }
0182 case 113: {
0183 name = "rho0";
0184 break;
0185 }
0186 case 223: {
0187 name = "omega";
0188 break;
0189 }
0190 case 333: {
0191 name = "phi";
0192 break;
0193 }
0194 case 443: {
0195 name = "J/psi";
0196 break;
0197 }
0198 case 553: {
0199 name = "Upsilon";
0200 break;
0201 }
0202 case 130: {
0203 name = "K0L";
0204 break;
0205 }
0206 case 211: {
0207 name = "pi+";
0208 break;
0209 }
0210 case -211: {
0211 name = "pi-";
0212 break;
0213 }
0214 case 213: {
0215 name = "rho+";
0216 break;
0217 }
0218 case -213: {
0219 name = "rho-";
0220 break;
0221 }
0222 case 221: {
0223 name = "eta";
0224 break;
0225 }
0226 case 331: {
0227 name = "eta'";
0228 break;
0229 }
0230 case 441: {
0231 name = "etac";
0232 break;
0233 }
0234 case 551: {
0235 name = "etab";
0236 break;
0237 }
0238 case 310: {
0239 name = "K0S";
0240 break;
0241 }
0242 case 311: {
0243 name = "K0";
0244 break;
0245 }
0246 case -311: {
0247 name = "Kbar0";
0248 break;
0249 }
0250 case 321: {
0251 name = "K+";
0252 break;
0253 }
0254 case -321: {
0255 name = "K-";
0256 break;
0257 }
0258 case 411: {
0259 name = "D+";
0260 break;
0261 }
0262 case -411: {
0263 name = "D-";
0264 break;
0265 }
0266 case 421: {
0267 name = "D0";
0268 break;
0269 }
0270 case 431: {
0271 name = "Ds_+";
0272 break;
0273 }
0274 case -431: {
0275 name = "Ds_-";
0276 break;
0277 }
0278 case 511: {
0279 name = "B0";
0280 break;
0281 }
0282 case 521: {
0283 name = "B+";
0284 break;
0285 }
0286 case -521: {
0287 name = "B-";
0288 break;
0289 }
0290 case 531: {
0291 name = "Bs_0";
0292 break;
0293 }
0294 case 541: {
0295 name = "Bc_+";
0296 break;
0297 }
0298 case -541: {
0299 name = "Bc_+";
0300 break;
0301 }
0302 case 313: {
0303 name = "K*0";
0304 break;
0305 }
0306 case -313: {
0307 name = "K*bar0";
0308 break;
0309 }
0310 case 323: {
0311 name = "K*+";
0312 break;
0313 }
0314 case -323: {
0315 name = "K*-";
0316 break;
0317 }
0318 case 413: {
0319 name = "D*+";
0320 break;
0321 }
0322 case -413: {
0323 name = "D*-";
0324 break;
0325 }
0326 case 423: {
0327 name = "D*0";
0328 break;
0329 }
0330 case 513: {
0331 name = "B*0";
0332 break;
0333 }
0334 case 523: {
0335 name = "B*+";
0336 break;
0337 }
0338 case -523: {
0339 name = "B*-";
0340 break;
0341 }
0342 case 533: {
0343 name = "B*_s0";
0344 break;
0345 }
0346 case 543: {
0347 name = "B*_c+";
0348 break;
0349 }
0350 case -543: {
0351 name = "B*_c-";
0352 break;
0353 }
0354 case 1114: {
0355 name = "Delta-";
0356 break;
0357 }
0358 case -1114: {
0359 name = "Deltabar+";
0360 break;
0361 }
0362 case -2112: {
0363 name = "nbar0";
0364 break;
0365 }
0366 case 2112: {
0367 name = "n";
0368 break;
0369 }
0370 case 2114: {
0371 name = "Delta0";
0372 break;
0373 }
0374 case -2114: {
0375 name = "Deltabar0";
0376 break;
0377 }
0378 case 3122: {
0379 name = "Lambda0";
0380 break;
0381 }
0382 case -3122: {
0383 name = "Lambdabar0";
0384 break;
0385 }
0386 case 3112: {
0387 name = "Sigma-";
0388 break;
0389 }
0390 case -3112: {
0391 name = "Sigmabar+";
0392 break;
0393 }
0394 case 3212: {
0395 name = "Sigma0";
0396 break;
0397 }
0398 case -3212: {
0399 name = "Sigmabar0";
0400 break;
0401 }
0402 case 3214: {
0403 name = "Sigma*0";
0404 break;
0405 }
0406 case -3214: {
0407 name = "Sigma*bar0";
0408 break;
0409 }
0410 case 3222: {
0411 name = "Sigma+";
0412 break;
0413 }
0414 case -3222: {
0415 name = "Sigmabar-";
0416 break;
0417 }
0418 case 2212: {
0419 name = "p";
0420 break;
0421 }
0422 case -2212: {
0423 name = "~p";
0424 break;
0425 }
0426 case -2214: {
0427 name = "Delta-";
0428 break;
0429 }
0430 case 2214: {
0431 name = "Delta+";
0432 break;
0433 }
0434 case -2224: {
0435 name = "Deltabar--";
0436 break;
0437 }
0438 case 2224: {
0439 name = "Delta++";
0440 break;
0441 }
0442 default: {
0443 name = "unknown";
0444 cout << "Unknown code : " << partId << endl;
0445 }
0446 }
0447
0448 out << ", pdg=" << setw(6) << particle.pdgCode() << setw(6)
0449 << name
0450
0451
0452
0453 << ", pT =" << setw(7) << closestApproach.momentum().Pt() << ", E =" << setw(7)
0454 << closestApproach.momentum().E();
0455
0456 out << resetiosflags(ios::right | ios::fixed);
0457
0458 out << "\tdaughters : ";
0459 for (unsigned i = 0; i < particle.daughterIds().size(); i++)
0460 out << particle.daughterIds()[i] << " ";
0461
0462
0463
0464
0465
0466 return out;
0467 }