ROOT
6.07/01
Reference Guide
ROOT Home Page
Main Page
Tutorials
User's Classes
Namespaces
All Classes
Files
Release Notes
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
tutorials
mc
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
12
void
CompareMasses
()
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>1
E
-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
}
TParticlePDG.h
Float_t
float Float_t
Definition:
RtypesCore.h:53
c
return c
Definition:
entrylist_figure1.C:47
TString::ReplaceAll
TString & ReplaceAll(const TString &s1, const TString &s2)
Definition:
TString.h:635
TDatabasePDG::GetParticle
TParticlePDG * GetParticle(Int_t pdgCode) const
Get a pointer to the particle object according to the MC code number.
Definition:
TDatabasePDG.cxx:214
TString
Basic string class.
Definition:
TString.h:137
Int_t
int Int_t
Definition:
RtypesCore.h:41
TMath::Abs
Short_t Abs(Short_t d)
Definition:
TMathBase.h:110
TSystem::UnixPathName
virtual const char * UnixPathName(const char *unixpathname)
Convert from a Unix pathname to a local pathname.
Definition:
TSystem.cxx:1020
TString::Data
const char * Data() const
Definition:
TString.h:349
TDatabasePDG::Instance
static TDatabasePDG * Instance()
static function
Definition:
TDatabasePDG.cxx:93
gSystem
R__EXTERN TSystem * gSystem
Definition:
TSystem.h:545
TParticlePDG
Description of the static properties of a particle.
Definition:
TParticlePDG.h:23
TMath::E
Double_t E()
Definition:
TMath.h:54
TNamed::GetName
virtual const char * GetName() const
Returns name of object.
Definition:
TNamed.h:51
CompareMasses
void CompareMasses()
Definition:
CompareMasses.C:12
Printf
#define Printf
Definition:
TGeoToOCC.h:18
fildir.file
tuple file
Definition:
fildir.py:20
Double_t
double Double_t
Definition:
RtypesCore.h:55
TMath::Max
Short_t Max(Short_t a, Short_t b)
Definition:
TMathBase.h:202
TParticlePDG::Mass
Double_t Mass() const
Definition:
TParticlePDG.h:71
TDatabasePDG.h