ROOT logo
#ifndef HPARTICLECONSTANTS_H
#define HPARTICLECONSTANTS_H

// -----------------------------------------------------------------------------

#include "TObject.h"
#include "TString.h"
#include <map>
#include <vector>
#include <iostream>
#include <iomanip>
using namespace std;

// -----------------------------------------------------------------------------


class HGeantKine;

// -----------------------------------------------------------------------------
typedef struct  {
    TString  fName;
    TString  fSpace;
    Long_t   fId;
    Int_t    fFormat;   // 0=dec,1 =hex
    TString  fDescription;

    TString printBitsString(Long_t data){
	// print the binary reprentation of data.
	// Lowest bits at the right side
	TString tmp;
	for(Int_t i = 31; i >= 0; i --){
            if((i+1)%4==0&&i<31) tmp+=" ";
	    tmp+=((data >> i) & 0x1);
	}
	return tmp;
    }
    void printBits(Long_t data){
	// print the binary reprentation of data.
	// Lowest bits at the right side
	for(Int_t i = 31; i >= 0; i --){
            if(i%4==0) cout<<" "<<flush;
	    cout<< ((data >> i) & 0x1) <<flush;
	}
	cout<<endl;
    }

    void fill(Long_t id, TString name, Int_t form,TString space,TString descr)
    {
	fName         = name;
	fSpace        = space;
	fId           = id;
	fFormat       = form;
	fDescription  = descr;
    }
    void print(){
	if     (fFormat==0) cout<<setw(35)<<left <<fName.Data()<<" from "<<setw(35)<<fSpace<<" "  <<setw(15)<<left<<dec<<fId<<" : "<<fDescription.Data()<<endl;
	else if(fFormat==1) cout<<setw(35)<<left <<fName.Data()<<" from "<<setw(35)<<fSpace<<" 0x"<<setw(15)<<left<<hex<<fId<<" bits "<< printBitsString(fId)<<" : "<<fDescription.Data()<<endl;
    };

} constantproperties;

class HParticleConstants : public TObject
{
    static map<TString,constantproperties> nameToProp;
    static vector<TString> vnames;

public:
    static Int_t       getValue(TString name);
    static void        printValue(TString name);
    static void        printValueMatch(TString name);
    static void        printSpace(TString space);

    static Bool_t      addConstant(Long_t id, TString name,Int_t form,TString space,TString descr);
    static void        clearConstants();


    static vector<TString>                 initConstantNamesV();
    static map<TString,constantproperties> initConstantNames();

    static void        print(Bool_t sort=kFALSE);

    // -------------------------------------------------------------------------
    ClassDef(HParticleConstants,0)
};

// -----------------------------------------------------------------------------

#endif
 hparticleconstants.h:1
 hparticleconstants.h:2
 hparticleconstants.h:3
 hparticleconstants.h:4
 hparticleconstants.h:5
 hparticleconstants.h:6
 hparticleconstants.h:7
 hparticleconstants.h:8
 hparticleconstants.h:9
 hparticleconstants.h:10
 hparticleconstants.h:11
 hparticleconstants.h:12
 hparticleconstants.h:13
 hparticleconstants.h:14
 hparticleconstants.h:15
 hparticleconstants.h:16
 hparticleconstants.h:17
 hparticleconstants.h:18
 hparticleconstants.h:19
 hparticleconstants.h:20
 hparticleconstants.h:21
 hparticleconstants.h:22
 hparticleconstants.h:23
 hparticleconstants.h:24
 hparticleconstants.h:25
 hparticleconstants.h:26
 hparticleconstants.h:27
 hparticleconstants.h:28
 hparticleconstants.h:29
 hparticleconstants.h:30
 hparticleconstants.h:31
 hparticleconstants.h:32
 hparticleconstants.h:33
 hparticleconstants.h:34
 hparticleconstants.h:35
 hparticleconstants.h:36
 hparticleconstants.h:37
 hparticleconstants.h:38
 hparticleconstants.h:39
 hparticleconstants.h:40
 hparticleconstants.h:41
 hparticleconstants.h:42
 hparticleconstants.h:43
 hparticleconstants.h:44
 hparticleconstants.h:45
 hparticleconstants.h:46
 hparticleconstants.h:47
 hparticleconstants.h:48
 hparticleconstants.h:49
 hparticleconstants.h:50
 hparticleconstants.h:51
 hparticleconstants.h:52
 hparticleconstants.h:53
 hparticleconstants.h:54
 hparticleconstants.h:55
 hparticleconstants.h:56
 hparticleconstants.h:57
 hparticleconstants.h:58
 hparticleconstants.h:59
 hparticleconstants.h:60
 hparticleconstants.h:61
 hparticleconstants.h:62
 hparticleconstants.h:63
 hparticleconstants.h:64
 hparticleconstants.h:65
 hparticleconstants.h:66
 hparticleconstants.h:67
 hparticleconstants.h:68
 hparticleconstants.h:69
 hparticleconstants.h:70
 hparticleconstants.h:71
 hparticleconstants.h:72
 hparticleconstants.h:73
 hparticleconstants.h:74
 hparticleconstants.h:75
 hparticleconstants.h:76
 hparticleconstants.h:77
 hparticleconstants.h:78
 hparticleconstants.h:79
 hparticleconstants.h:80
 hparticleconstants.h:81
 hparticleconstants.h:82
 hparticleconstants.h:83
 hparticleconstants.h:84
 hparticleconstants.h:85
 hparticleconstants.h:86
 hparticleconstants.h:87
 hparticleconstants.h:88