ROOT  6.07/01
Reference Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
CompareMasses.C
Go to the documentation of this file.
1 // Macro to compare masses in ROOT data base to the values from pdg
2 // http://pdg.lbl.gov/2009/mcdata/mass_width_2008.mc
3 //
4 // The ROOT values are read in by TDatabasePDG from $ROOTSYS/etc/pdg_table.txt
5 //
6 // Author: Christian.Klein-Boesing@cern.ch
7 
8 #include "TDatabasePDG.h"
9 #include "TParticlePDG.h"
10 
11 
13 {
14  TString massWidthFile = gSystem->UnixPathName(__FILE__);
15  massWidthFile.ReplaceAll("CompareMasses.C","mass_width_2008.mc.txt");
16 
17  FILE* file = fopen(massWidthFile.Data(),"r");
18 
19  if (!file){
20  Printf("Could not open PDG particle file %s", massWidthFile.Data());
21  return;
22  }
23 
24  char c[200];
25  char cempty;
26  Int_t pdg[4];
27  Float_t mass, err1, err2, err;
28  Int_t ndiff = 0;
29 
30  while (fgets(c, 200, file)) {
31  if (c[0] != '*' && c[0] !='W') {
32  //printf("%s",c);
33  sscanf(&c[1], "%8d", &pdg[0]);
34 
35  // check emptyness
36  pdg[1] = 0;
37  for(int i = 0;i<8;i++){
38  sscanf(&c[9+i],"%c",&cempty);
39  if(cempty != ' ')sscanf(&c[9],"%8d",&pdg[1]);
40  }
41 
42  pdg[2] = 0;
43  for(int i = 0;i<8;i++){
44  sscanf(&c[17+i],"%c",&cempty);
45  if(cempty != ' ')sscanf(&c[17],"%8d",&pdg[2]);
46  }
47 
48  pdg[3] = 0;
49  for(int i = 0;i<8;i++){
50  sscanf(&c[25+i],"%c",&cempty);
51  if(cempty != ' ')sscanf(&c[25],"%8d",&pdg[3]);
52  }
53 
54  sscanf(&c[35],"%14f",&mass);
55  sscanf(&c[50],"%8f",&err1);
56  sscanf(&c[50],"%8f",&err2);
57  err = TMath::Max((Double_t)err1,(Double_t)-1.*err2);
58  for(int ipdg = 0;ipdg < 4;ipdg++){
59  if(pdg[ipdg]==0)continue;
60  TParticlePDG *partRoot = TDatabasePDG::Instance()->GetParticle(pdg[ipdg]);
61  if(partRoot){
62  Float_t massRoot = partRoot->Mass();
63  Float_t deltaM = TMath::Abs(massRoot - mass);
64  // if(deltaM > err){
65  if (mass != 0.0 && deltaM/mass>1E-05){
66  ndiff++;
67  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);
68  }
69  }
70  }
71  }
72  }// while
73  fclose(file);
74  if (ndiff == 0) Printf("Crongratulations !! All particles in ROOT and PDG have identical masses");
75 
76 }
float Float_t
Definition: RtypesCore.h:53
return c
TString & ReplaceAll(const TString &s1, const TString &s2)
Definition: TString.h:635
TParticlePDG * GetParticle(Int_t pdgCode) const
Get a pointer to the particle object according to the MC code number.
Basic string class.
Definition: TString.h:137
int Int_t
Definition: RtypesCore.h:41
Short_t Abs(Short_t d)
Definition: TMathBase.h:110
virtual const char * UnixPathName(const char *unixpathname)
Convert from a Unix pathname to a local pathname.
Definition: TSystem.cxx:1020
const char * Data() const
Definition: TString.h:349
static TDatabasePDG * Instance()
static function
R__EXTERN TSystem * gSystem
Definition: TSystem.h:545
Description of the static properties of a particle.
Definition: TParticlePDG.h:23
Double_t E()
Definition: TMath.h:54
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:51
void CompareMasses()
Definition: CompareMasses.C:12
#define Printf
Definition: TGeoToOCC.h:18
tuple file
Definition: fildir.py:20
double Double_t
Definition: RtypesCore.h:55
Short_t Max(Short_t a, Short_t b)
Definition: TMathBase.h:202
Double_t Mass() const
Definition: TParticlePDG.h:71