CompareMasses.C

Go to the documentation of this file.
00001 // Macro to compare masses in root data base to the values from pdg
00002 // http://pdg.lbl.gov/2009/mcdata/mass_width_2008.mc
00003 //
00004 // the ROOT values are read in by TDatabasePDG from $ROOTSYS/etc/pdg_table.C
00005 //
00006 // Author: Christian.Klein-Boesing@cern.ch
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       // printf("%s",c);      
00038       sscanf(&c[1],"%8d",&pdg[0]);
00039       
00040       // check emptyness
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           //      if(deltaM > err){
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   }// while
00079   if (ndiff == 0) Printf("Crongratulations !! All particles in ROOT and PDG have identical masses");
00080 
00081 }

Generated on Tue Jul 5 15:44:51 2011 for ROOT_528-00b_version by  doxygen 1.5.1