19 TString massWidthFile = gSystem->UnixPathName(__FILE__);
20 massWidthFile.ReplaceAll(
"CompareMasses.C",
"mass_width_2008.mc.txt");
22 FILE* file = fopen(massWidthFile.Data(),
"r");
25 Printf(
"Could not open PDG particle file %s", massWidthFile.Data());
32 Float_t mass, err1, err2, err;
35 while (fgets(c, 200, file)) {
36 if (c[0] !=
'*' && c[0] !=
'W') {
38 sscanf(&c[1],
"%8d", &pdg[0]);
42 for(
int i = 0;i<8;i++){
43 sscanf(&c[9+i],
"%c",&cempty);
44 if(cempty !=
' ')sscanf(&c[9],
"%8d",&pdg[1]);
48 for(
int i = 0;i<8;i++){
49 sscanf(&c[17+i],
"%c",&cempty);
50 if(cempty !=
' ')sscanf(&c[17],
"%8d",&pdg[2]);
54 for(
int i = 0;i<8;i++){
55 sscanf(&c[25+i],
"%c",&cempty);
56 if(cempty !=
' ')sscanf(&c[25],
"%8d",&pdg[3]);
59 sscanf(&c[35],
"%14f",&mass);
60 sscanf(&c[50],
"%8f",&err1);
61 sscanf(&c[50],
"%8f",&err2);
62 err = TMath::Max((Double_t)err1,(Double_t)-1.*err2);
63 for(
int ipdg = 0;ipdg < 4;ipdg++){
64 if(pdg[ipdg]==0)
continue;
65 TParticlePDG *partRoot = TDatabasePDG::Instance()->GetParticle(pdg[ipdg]);
67 Float_t massRoot = partRoot->Mass();
68 Float_t deltaM = TMath::Abs(massRoot - mass);
70 if (mass != 0.0 && deltaM/mass>1E-05){
72 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);
79 if (ndiff == 0) Printf(
"Crongratulations !! All particles in ROOT and PDG have identical masses");