00001
00002
00003
00004
00005
00006
00007
00008 #include <fstream>
00009 #include <iostream>
00010 #include "TDatabasePDG.h"
00011 #include "TParticlePDG.h"
00012
00013 using namespace std;
00014
00015 void CompareMasses(){
00016
00017 char *fn = "mass_width_2008.mc.txt";
00018
00019 FILE* file = fopen(fn,"r");
00020
00021 ifstream in1;
00022 in1.open(fn);
00023 if (!in1.good()){
00024 Printf("Could not open PDG particle file %s",fn);
00025 return;
00026 }
00027
00028 char c[200];
00029 char cempty;
00030 Int_t pdg[4];
00031 Float_t mass, err1,err2,err;
00032 Int_t ndiff = 0;
00033
00034
00035 while (fgets(&c[0],200,file)) {
00036 if (c[0] != '*' && c[0] !='W') {
00037
00038 sscanf(&c[1],"%8d",&pdg[0]);
00039
00040
00041 pdg[1] = 0;
00042 for(int i = 0;i<8;i++){
00043 sscanf(&c[9+i],"%c",&cempty);
00044 if(cempty != ' ')sscanf(&c[9],"%8d",&pdg[1]);
00045 }
00046
00047 pdg[2] = 0;
00048 for(int i = 0;i<8;i++){
00049 sscanf(&c[17+i],"%c",&cempty);
00050 if(cempty != ' ')sscanf(&c[17],"%8d",&pdg[2]);
00051 }
00052
00053
00054 pdg[3] = 0;
00055 for(int i = 0;i<8;i++){
00056 sscanf(&c[25+i],"%c",&cempty);
00057 if(cempty != ' ')sscanf(&c[25],"%8d",&pdg[3]);
00058 }
00059
00060 sscanf(&c[35],"%14f",&mass);
00061 sscanf(&c[50],"%8f",&err1);
00062 sscanf(&c[50],"%8f",&err2);
00063 err = TMath::Max((Double_t)err1,(Double_t)-1.*err2);
00064 for(int ipdg = 0;ipdg < 4;ipdg++){
00065 if(pdg[ipdg]==0)continue;
00066 TParticlePDG *partRoot = TDatabasePDG::Instance()->GetParticle(pdg[ipdg]);
00067 if(partRoot){
00068 Float_t massRoot = partRoot->Mass();
00069 Float_t deltaM = TMath::Abs(massRoot - mass);
00070
00071 if(deltaM/mass>1E-05){
00072 ndiff++;
00073 Printf("%10s %8d pdg mass %E pdg err %E root Mass %E >> deltaM %E = %3.3f%%",partRoot->GetName(),pdg[ipdg],mass,err,massRoot,deltaM,100.*deltaM/mass);
00074 }
00075 }
00076 }
00077 }
00078 }
00079 if (ndiff == 0) Printf("Crongratulations !! All particles in ROOT and PDG have identical masses");
00080
00081 }