Hi @eguiraud
Thank you for your response. The following is the minimal version of my class and a simple code that only loops over the input tree.
When I run it, I simply do :
.L AdditionalCuts_min.h
.L ApplyAdditionalCuts_min.C++
and receive the following error message:
cling::DynamicLibraryManager::loadLibrary(): /root/Projects/ZAnalysis/Development/Class/ApplyAdditionalCuts_min_C.so: undefined symbol: _ZN14AdditionalCuts8StreamerER7TBuffer
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
/root/Projects/ZAnalysis/Development/Class/ApplyAdditionalCuts_min_C_ACLiC_dict.o: In function `AdditionalCuts::AdditionalCuts()':
ApplyAdditionalCuts_min_C_ACLiC_dict.cxx:(.text+0x550): undefined reference to `TTree::Class()'
/root/Projects/ZAnalysis/Development/Class/ApplyAdditionalCuts_min_C_ACLiC_dict.o: In function `AdditionalCuts::IsA() const':
ApplyAdditionalCuts_min_C_ACLiC_dict.cxx:(.text._ZNK14AdditionalCuts3IsAEv[_ZNK14AdditionalCuts3IsAEv]+0x1): undefined reference to `AdditionalCuts::Class()'
/root/Projects/ZAnalysis/Development/Class/ApplyAdditionalCuts_min_C_ACLiC_dict.o: In function `AdditionalCuts::ShowMembers(TMemberInspector&) const':
ApplyAdditionalCuts_min_C_ACLiC_dict.cxx:(.text._ZNK14AdditionalCuts11ShowMembersER16TMemberInspector[_ZNK14AdditionalCuts11ShowMembersER16TMemberInspector]+0xd): undefined reference to `AdditionalCuts::Class()'
/root/Projects/ZAnalysis/Development/Class/ApplyAdditionalCuts_min_C_ACLiC_dict.o:(.rodata._ZTV14AdditionalCuts[_ZTV14AdditionalCuts]+0x1e0): undefined reference to `AdditionalCuts::Streamer(TBuffer&)'
collect2: error: ld returned 1 exit status
---------------------------------------------------------Class---------------------------------------------------------
#ifndef ADDITIONALCUTS_H
#define ADDITIONALCUTS_H
#include "TROOT.h"
#include "TObject.h"
#include "TFile.h"
#include "TTree.h"
#include "TBranch.h"
#include "TChain.h"
#include "TH1.h"
#include "TH2.h"
#include "TStyle.h"
#include "TCanvas.h"
#include "TLegend.h"
#include "TAxis.h"
#include "TFitResult.h"
#include "TFitResultPtr.h"
#include "TGraphErrors.h"
#include "TMath.h"
#include "TF1.h"
#include "vector"
#include "fstream"
#include "iostream"
#include "string"
#include "map"
#include "math.h"
#include <sys/stat.h> // <---<< mkdir()
#include <sys/types.h> //
using namespace std;
class AdditionalCuts : public TObject {
public:
TFile* InputRootF;
//TFile* OutputRootF;
TTree* InputTree;
//TTree* OutputTree;
/// Input Tree Leaves ///
std::vector<string> *In_TriggerList;
std::vector<unsigned int> *In_EventNumber;
std::vector<unsigned int> *In_RunNumber;
std::vector<double> *In_ZMass;
std::vector<double> *In_ZPt;
std::vector<double> *In_ZEta;
std::vector<double> *In_PsiMass;
std::vector<double> *In_PsiPt;
std::vector<double> *In_PsiEta;
std::vector<double> *In_JPsiMass;
std::vector<double> *In_JPsiPt;
std::vector<double> *In_JPsiEta;
/// Input Tree Branches ///
TBranch *In_b_TriggerList;
TBranch *In_b_EventNumber;
TBranch *In_b_RunNumber;
TBranch *In_b_ZMass;
TBranch *In_b_ZPt;
TBranch *In_b_ZEta;
TBranch *In_b_PsiMass;
TBranch *In_b_PsiPt;
TBranch *In_b_PsiEta;
TBranch *In_b_JPsiMass;
TBranch *In_b_JPsiPt;
TBranch *In_b_JPsiEta;
/// Output Tree Leaves ///
std::vector<string> *Out_TriggerList;
std::vector<unsigned int> *Out_EventNumber;
std::vector<unsigned int> *Out_RunNumber;
std::vector<double> *Out_ZMass;
std::vector<double> *Out_ZPt;
std::vector<double> *Out_ZEta;
std::vector<double> *Out_PsiMass;
std::vector<double> *Out_PsiPt;
std::vector<double> *Out_PsiEta;
std::vector<double> *Out_JPsiMass;
std::vector<double> *Out_JPsiPt;
std::vector<double> *Out_JPsiEta;
AdditionalCuts();
virtual ~AdditionalCuts();
ClassDef(AdditionalCuts,1);
};
#endif
#ifdef AdditionalCuts_cxx
AdditionalCuts::AdditionalCuts() {
TFile* InputRootF = new TFile("M-Zto4Muons.root","READ");
TDirectory* InputDir = (TDirectory*)InputRootF->Get("ZDecayAnalyzer");
InputDir->GetObject("OutputTree",InputTree);
/// Set Object Pointer ///
In_TriggerList = 0;
In_EventNumber = 0;
In_RunNumber = 0;
In_ZMass = 0;
In_ZPt = 0;
In_ZEta = 0;
In_PsiMass = 0;
In_PsiPt = 0;
In_PsiEta = 0;
In_JPsiMass = 0;
In_JPsiPt = 0;
In_JPsiEta = 0;
InputTree->SetBranchAddress("TriggerList", &In_TriggerList, &In_b_TriggerList);
InputTree->SetBranchAddress("EventNumber", &In_EventNumber, &In_b_EventNumber);
InputTree->SetBranchAddress("RunNumber", &In_RunNumber, &In_b_RunNumber);
InputTree->SetBranchAddress("ZMass", &In_ZMass, &In_b_ZMass);
InputTree->SetBranchAddress("ZPt", &In_ZPt, &In_b_ZPt);
InputTree->SetBranchAddress("ZEta", &In_ZEta, &In_b_ZEta);
InputTree->SetBranchAddress("PsiMass", &In_PsiMass, &In_b_PsiMass);
InputTree->SetBranchAddress("PsiPt", &In_PsiPt, &In_b_PsiPt);
InputTree->SetBranchAddress("PsiEta", &In_PsiEta, &In_b_PsiEta);
InputTree->SetBranchAddress("JPsiMass", &In_JPsiMass, &In_b_JPsiMass);
InputTree->SetBranchAddress("JPsiPt", &In_JPsiPt, &In_b_JPsiPt);
InputTree->SetBranchAddress("JPsiEta", &In_JPsiEta, &In_b_JPsiEta);
}
AdditionalCuts::~AdditionalCuts()
{
if (!InputTree) return;
}
#endif
--------------------------------------------code-----------------------------------------------
#define AdditionalCuts_cxx
#include "AdditionalCuts.h"
void ApplyAdditionalCuts(string InputRootFile, string DecayMode) {
AdditionalCuts* DC;
//****************
// Additional Cuts
//****************
int AllEntries = (DC->InputTree)->GetEntries();
for(int i=0; i<AllEntries; i++) {
if(i%100==0)
cout << "\r" << (double)i/(double)AllEntries*100 << "\% Processed" << flush;
}
}
Thanks for your help in advance