ROOT 6.15/01Built for linuxx8664gcc
heads/master@v6-13-04-218-g3ec307bbe3
I am trying to use derived classes to save the output from pythia
in one TTree. To run pythia, the following files described the main parts:
pythiaHeavyIon.cc pythiaHeavyIon.h pythiaHeavyIonLinkDef.h Makefile
// pythiaHeavyIon.cc:
#include "../../base/HxPythiaHIEvent.cxx"
#include "../../base/HxSimParticle.cxx"
TTree *Tree1 = new TTree("Tree1","Tree1");
HxPythiaHIEvent *event1 = new HxPythiaHIEvent();
HxSimParticle *part1 = new HxSimParticle();
Tree1->Branch("event1", &event1);
// pythiaHeavyIon.h:
#include "Pythia8/Pythia.h"
using namespace Pythia8;
// pythiaHeavyIonLinkDef.h:
#pragma link C++ class HxPythiaHIEvent+;
#pragma link C++ class HxSimParticle+;
// Makefile:
HXPATH =../../base
# Target: Heavy Ion
pythiaHeavyIon: $$@.cc $(PREFIX_LIB)/libpythia8.a pythiaHeavyIon.so
ifeq ($(ROOT_USE),true)
$(CXX) $< pythiaHeavyIon.so -o $@ -w -I$(ROOT_INCLUDE) $(CXX_COMMON)\
`$(ROOTBIN)root-config --cflags` -Wl,-rpath,./\
-Wl,-rpath,$(ROOT_LIB) `$(ROOT_BIN)root-config --libs --glibs --evelibs`
else
@echo "Error: $@ requires ROOT"
endif
pythiaHeavyIon.so: pythiaHeavyIonDct.cc $(PREFIX_LIB)/libpythia8.a
$(CXX) $< -o $@ -w -I$(ROOT_INCLUDE) $(CXX_SHARED) $(CXX_COMMON)\
`$(ROOTBIN)root-config --cflags`
pythiaHeavyIonDct.cc: pythiaHeavyIon.h $(HXPATH)/HxSimParticle.h $(HXPATH)/HxPythiaHIEvent.h pythiaHeavyIonLinkDef.h
export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:$(ROOT_LIB);\
$(ROOT_BIN)rootcint -f $@ -c -I$(PREFIX_INCLUDE) $^
Error:
$ make pythiaHeavyIon
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/andsilva/build/lib;\
/home/andsilva/build/bin/rootcint -f pythiaHeavyIonDct.cc -c -I/home/andsilva/pythia8235/include pythiaHeavyIon.h ../../base/HxSimParticle.h ../../base/HxPythiaHIEvent.h pythiaHeavyIonLinkDef.h
g++ pythiaHeavyIonDct.cc -o pythiaHeavyIon.so -w -I/home/andsilva/build/include -shared -I/home/andsilva/pythia8235/include -O2 -pedantic -W -Wall -Wshadow -fPIC -L/home/andsilva/pythia8235/lib -Wl,-rpath,/home/andsilva/pythia8235/lib -lpythia8 -ldl \
`root-config --cflags`
g++ pythiaHeavyIon.cc pythiaHeavyIon.so -o pythiaHeavyIon -w -I/home/andsilva/build/include -I/home/andsilva/pythia8235/include -O2 -pedantic -W -Wall -Wshadow -fPIC -L/home/andsilva/pythia8235/lib -Wl,-rpath,/home/andsilva/pythia8235/lib -lpythia8 -ldl \
`root-config --cflags` -Wl,-rpath,./\
-Wl,-rpath,/home/andsilva/build/lib `/home/andsilva/build/bin/root-config --libs --glibs --evelibs`
/tmp/cceTsgOI.o: In function `HxPythiaHIEvent::HxPythiaHIEvent()':
pythiaHeavyIon.cc:(.text+0x555): undefined reference to `HxSimEvent::HxSimEvent()'
/tmp/cceTsgOI.o: In function `HxPythiaHIEvent::HxPythiaHIEvent(TClonesArray*)':
pythiaHeavyIon.cc:(.text+0x585): undefined reference to `HxSimEvent::HxSimEvent(TClonesArray*)'
/tmp/cceTsgOI.o: In function `HxPythiaHIEvent::~HxPythiaHIEvent()':
pythiaHeavyIon.cc:(.text+0x8c): undefined reference to `HxSimEvent::~HxSimEvent()'
/tmp/cceTsgOI.o: In function `main':
pythiaHeavyIon.cc:(.text.startup+0x3ab): undefined reference to `HxSimEvent::AddParticle(HxSimParticle*)'
/tmp/cceTsgOI.o:(.data.rel.ro._ZTI15HxPythiaHIEvent[_ZTI15HxPythiaHIEvent]+0x10): undefined reference to `typeinfo for HxSimEvent'
collect2: error: ld returned 1 exit status
Makefile:51: recipe for target 'pythiaHeavyIon' failed
make: *** [pythiaHeavyIon] Error 1
HxPythiaHIEvent.cxx:
#include "HxPythiaHIEvent.h"
ClassImp(HxPythiaHIEvent)
//______________________________________________________________________________
/// Default constructor
HxPythiaHIEvent::HxPythiaHIEvent():
HxSimEvent(),
fb(-1),
fNpart(-1)
{
// Nothing needed, default constructor
}
/// Constructor
/// \param particles Array with HxSimParticle objects
HxPythiaHIEvent::HxPythiaHIEvent(TClonesArray *particles):
HxSimEvent(particles), //pass to default constructor, please
fb(-1),
fNpart(-1)
{
/* empty */
}
...
...
HxPythiaHIEvent.h:
class HxPythiaHIEvent : public HxSimEvent {
protected:
Double_t fb; //impact parameter
Int_t fNpart; //number of participants
public:
HxPythiaHIEvent();
HxPythiaHIEvent(TClonesArray *particles);
virtual ~HxPythiaHIEvent();
//custom, reimplement
virtual void Clear(const Option_t* ="");
virtual void PrintInfo();
//Specific HI information if requested
Double_t GetImpactParameter() const;
void SetImpactParameter(Double_t lb);
Int_t GetNpart() const;
void SetNpart(Int_t lNpart);
ClassDef(HxPythiaHIEvent,1) // 0 - first implementation
};
inline Double_t HxPythiaHIEvent::GetImpactParameter() const { return (Double_t)fb; }
inline Int_t HxPythiaHIEvent::GetNpart() const { return (Int_t)fNpart; }
#endif
HxSimEvent.cxx:
#include "HxSimEvent.h"
ClassImp(HxSimEvent)
/// Default constructor
HxSimEvent::HxSimEvent() :
fnFinalParticles(0),
fnFinalCharged(0),
fParticles(0x0)
{
// create new empty array
fParticles = new TClonesArray("HxSimParticle");
}
/// Constructor
/// \param particles Array with HxSimParticle objects
HxSimEvent::HxSimEvent(TClonesArray *particles) :
fnFinalParticles(0),
fnFinalCharged(0),
fParticles(particles)
{
/* empty */
}
Someone how to fix this?
Cheers, Andre