Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
214 changes: 135 additions & 79 deletions DataModel/Hit.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,105 +6,161 @@

#include <iostream>

using namespace std;
class Hit : public SerialisableObject {

friend class boost::serialization::access;

public:
Hit()
: TubeId(0)
, Time(0)
, Charge(0)
{
serialise=true;
}

class Hit : public SerialisableObject{
Hit(int thetubeid, double thetime, double thecharge)
: TubeId(thetubeid)
, Time(thetime)
, Charge(thecharge)
{
serialise=true;
}

virtual ~Hit(){};

friend class boost::serialization::access;
inline int GetTubeId() const {return TubeId;}
inline double GetTime() const {return Time;}
inline double GetCharge() const {return Charge;}

public:
Hit() : TubeId(0), Time(0), Charge(0){serialise=true;}
Hit(int thetubeid, double thetime, double thecharge) : TubeId(thetubeid), Time(thetime), Charge(thecharge){serialise=true;}
virtual ~Hit(){};
inline void SetTubeId(int tubeid){TubeId=tubeid;}
inline void SetTime(double tc){Time=tc;}
inline void SetCharge(double chg){Charge=chg;}

inline int GetTubeId() const {return TubeId;}
inline double GetTime() const {return Time;}
inline double GetCharge() const {return Charge;}
bool Print()
{
std::cout<< "TubeId : " <<TubeId << std::endl;
std::cout<< "Time : " <<Time << std::endl;
std::cout<< "Charge : " <<Charge << std::endl;
return true;
}

inline void SetTubeId(int tubeid){TubeId=tubeid;}
inline void SetTime(double tc){Time=tc;}
inline void SetCharge(double chg){Charge=chg;}
protected:
int TubeId;
double Time;
double Charge;

bool Print() {
std::cout<<"TubeId : "<<TubeId<<endl;
std::cout<<"Time : "<<Time<<endl;
std::cout<<"Charge : "<<Charge<<endl;
return true;
}

protected:
int TubeId;
double Time;
double Charge;

template<class Archive> void serialize(Archive & ar, const unsigned int version){
if(serialise){
ar & TubeId;
ar & Time;
ar & Charge;
}
template<class Archive> void serialize(Archive & ar, const unsigned int version)
{
if (serialise) {
ar & TubeId;
ar & Time;
ar & Charge;
}
}
};

// Derived classes

class MCHit : public Hit {
// XXX ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ XXX
// XXX ~~~~~~~~~~~~~~~~~~~~~~~~ UPDATING THIS CLASS? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ XXX
// XXX ~~~~~ Everything added in this class must be duplicated in MCLAPPDHit!~~~~ XXX
// XXX ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ XXX

friend class boost::serialization::access;
// XXX ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ XXX
// XXX ~~~~~~~~~~~~~~~~~~~~~~~~ UPDATING THIS CLASS? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ XXX
// XXX ~~~~~ Everything added in this class must be duplicated in MCLAPPDHit!~~~~ XXX
// XXX ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ XXX

public:
MCHit() : Hit(), Parents(std::vector<int>{}) {serialise=true;}
MCHit(int tubeid, double thetime, double thecharge, std::vector<int> theparents) : Hit(tubeid, thetime, thecharge), Parents(theparents) {serialise=true;}
virtual ~MCHit(){};

const std::vector<int>* GetParents() const { return &Parents; }
void SetParents(std::vector<int> parentsin){ Parents = parentsin; }

friend class boost::serialization::access;

bool Print(){
std::cout<<"TubeId : "<<TubeId<<endl;
std::cout<<"Time : "<<Time<<endl;
std::cout<<"Charge : "<<Charge<<endl;
if(Parents.size()){
std::cout<<"Parent MCPartice indices: {";
for(int parenti=0; parenti<(int)Parents.size(); ++parenti){
std::cout<<Parents.at(parenti);
if((parenti+1)<(int)Parents.size()) std::cout<<", ";
}
std::cout<<"}"<<endl;
} else {
std::cout<<"No recorded parents"<<endl;
}
return true;
}
public:
MCHit()
: Hit()
, Parents(std::vector<int>{})
, DirectParents(std::vector<int>{})
, StartTick(-5)
, EndTick(-5)
, IsDarknoise(false)
{
serialise=true;
}

// Start and End ticks are only ever to be set after initialization
MCHit(int tubeid, double thetime, double thecharge, std::vector<int> theparents, std::vector<int> thedirectparents)
: Hit(tubeid, thetime, thecharge)
, Parents(theparents)
, DirectParents(thedirectparents)
, StartTick(-5)
, EndTick(-5)
, IsDarknoise(false)
{
serialise=true;
}

virtual ~MCHit(){};

protected:
std::vector<int> Parents;
const std::vector<int>* GetParents() { return &Parents; }
const std::vector<int>* GetDirectParents() { return &DirectParents; }
int GetStartTick() { return StartTick; }
int GetEndTick() { return EndTick; }
bool GetIsDarknoise() const { return IsDarknoise; }

void SetParents(std::vector<int> parentsin) { Parents = parentsin; }
void SetDirectParents(std::vector<int> directparentsin) { DirectParents = directparentsin; }
void SetStartTick(int tick) { StartTick = tick; }
void SetEndTick(int tick) { EndTick = tick; }
void SetIsDarknoise(bool v) { IsDarknoise = v; }


template<class Archive> void serialize(Archive & ar, const unsigned int version){
if(serialise){
ar & TubeId;
ar & Time;
ar & Charge;
// do not serialize parents; the indices by themselves are not meaningful
}
bool Print()
{
std::cout << "TubeId : " << TubeId << std::endl;
std::cout << "Time : " << Time << std::endl;
std::cout << "Charge : " << Charge << std::endl;

if (Parents.size()) {
std::cout << "Parent MCPartice TrackIDs: {";
for (uint idx = 0; idx < Parents.size(); ++idx) {
std::cout << Parents.at(idx);

if ((idx+1) < Parents.size()) std::cout << ", ";
}
std::cout << "}" << std::endl;
} else {
std::cout << "No recorded parents" << std::endl;
}
};

/*
class RecoHit : public Hit {
public:
RecoHit(double thetime, double thecharge) : Time(thetime), Charge(thecharge){};
std::cout << "IsDarknoise : " << (IsDarknoise ? "true" : "false") << std::endl;

inline double GetCharge(){return Charge;}
inline void SetCharge(double chg){Charge=chg;}
return true;
}

protected:
double Charge;
protected:
std::vector<int> Parents;
std::vector<int> DirectParents;
int StartTick;
int EndTick;
bool IsDarknoise;

template<class Archive> void serialize(Archive & ar, const unsigned int version)
{
if (serialise) {
ar & TubeId;
ar & Time;
ar & Charge;

if (version > 0) {
ar & Parents; // Parents is now track IDs rather than index within vector
ar & DirectParents;
ar & StartTick;
ar & EndTick;
}

if (version > 1) {
ar & IsDarknoise;
}
}
}
};
*/

BOOST_CLASS_VERSION(MCHit, 2)

#endif
38 changes: 36 additions & 2 deletions DataModel/LAPPDHit.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,12 +100,18 @@ class MCLAPPDHit : public LAPPDHit
friend class boost::serialization::access;

public:
MCLAPPDHit() : LAPPDHit(), Parents(std::vector<int>{}) { serialise = true; }
MCLAPPDHit(int thetubeid, double thetime, double thecharge, std::vector<double> theposition, std::vector<double> thelocalposition, std::vector<int> theparents) : LAPPDHit(thetubeid, thetime, thecharge, theposition, thelocalposition), Parents(theparents) { serialise = true; }
MCLAPPDHit() : LAPPDHit(), Parents(std::vector<int>{}), DirectParents(std::vector<int>{}), IsDarknoise(false) { serialise = true; }
MCLAPPDHit(int thetubeid, double thetime, double thecharge, std::vector<double> theposition, std::vector<double> thelocalposition, std::vector<int> theparents, std::vector<int> thedirectparents) : LAPPDHit(thetubeid, thetime, thecharge, theposition, thelocalposition), Parents(theparents), DirectParents(thedirectparents), IsDarknoise(false) { serialise = true; }

const std::vector<int> *GetParents() const { return &Parents; }
void SetParents(std::vector<int> parentsin) { Parents = parentsin; }

const std::vector<int> *GetDirectParents() const { return &DirectParents; }
void SetDirectParents(std::vector<int> directparentsin) { DirectParents = directparentsin; }

bool GetIsDarknoise() const { return IsDarknoise; }
void SetIsDarknoise(bool v) { IsDarknoise = v; }

bool Print()
{
cout << "TubeId : " << TubeId << endl;
Expand All @@ -116,6 +122,7 @@ class MCLAPPDHit : public LAPPDHit
cout << "Parallel Pos : " << LocalPosition.at(0) << endl;
cout << "Transverse Pos : " << LocalPosition.at(1) << endl;
cout << "Charge : " << Charge << endl;

if (Parents.size())
{
cout << "Parent MCPartice indices: {";
Expand All @@ -131,6 +138,25 @@ class MCLAPPDHit : public LAPPDHit
{
cout << "No recorded parents" << endl;
}

if (DirectParents.size())
{
cout << "Direct Parent MCPartice indices: {";
for (int parenti = 0; parenti < (int)DirectParents.size(); ++parenti)
{
cout << DirectParents.at(parenti);
if ((parenti + 1) < (int)DirectParents.size())
cout << ", ";
}
cout << "}" << endl;
}
else
{
cout << "##### No recorded Direct parents #####" << endl;
}

cout << "IsDarknoise : " << (IsDarknoise ? "true" : "false") << endl;

return true;
}

Expand All @@ -146,13 +172,21 @@ class MCLAPPDHit : public LAPPDHit
ar & Charge;
// n.b. at time of writing MCHit stores no additional persistent members
// - it only adds parent MCParticle indices, and these aren't saved...

if (version > 0) {
ar & IsDarknoise;
}
}
}

protected:
std::vector<int> Parents;
std::vector<int> DirectParents;
bool IsDarknoise;
};

BOOST_CLASS_VERSION(MCLAPPDHit, 1)

/*
class TDCHit : public Hit {
public:
Expand Down
16 changes: 12 additions & 4 deletions DataModel/Particle.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,13 +137,13 @@ class MCParticle : public Particle {
public:

MCParticle() : Particle(0, 0., 0., Position(), Position(), 0., 0., Direction(), 0.,
tracktype::UNCONTAINED), ParticleID(0), ParentPdg(0), StartsInFiducialVolume(false), TrackAngleX(0), TrackAngleY(0), TrackAngleFromBeam(0), EntersTank(false), TankEntryPoint(Position()), ExitsTank(false), TankExitPoint(Position()), TrackLengthInTank(0), EntersMrd(false), MrdEntryPoint(Position()), ExitsMrd(false), MrdExitPoint(Position()), PenetratesMrd(false), TrackLengthInMrd(0), MrdPenetration(0), MrdLayersPenetrated(0), MrdEnergyLoss(0), Flag(0), MCTriggerNum(0) {serialise=true;}
tracktype::UNCONTAINED), ParticleID(0), ParentPdg(0), PrimaryParentID(0), DirectParentID(0), StartsInFiducialVolume(false), TrackAngleX(0), TrackAngleY(0), TrackAngleFromBeam(0), EntersTank(false), TankEntryPoint(Position()), ExitsTank(false), TankExitPoint(Position()), TrackLengthInTank(0), EntersMrd(false), MrdEntryPoint(Position()), ExitsMrd(false), MrdExitPoint(Position()), PenetratesMrd(false), TrackLengthInMrd(0), MrdPenetration(0), MrdLayersPenetrated(0), MrdEnergyLoss(0), Flag(0), MCTriggerNum(0) {serialise=true;}

MCParticle(int pdg, double sttE, double stpE, Position sttpos, Position stppos,
double sttt, double stpt, Direction startdir, double len, tracktype tracktypein,
int partid, int parentpdg, int flagid, int triggernum)
int partid, int parentpdg, int primaryparentid, int directparentid, int flagid, int triggernum)
: Particle(pdg, sttE, stpE, sttpos, stppos, sttt, stpt, startdir, len, tracktypein),
ParticleID(partid), ParentPdg(parentpdg), StartsInFiducialVolume(false), TrackAngleX(0), TrackAngleY(0), TrackAngleFromBeam(0), EntersTank(false), TankEntryPoint(Position()), ExitsTank(false), TankExitPoint(Position()), TrackLengthInTank(0), EntersMrd(false), MrdEntryPoint(Position()), ExitsMrd(false), MrdExitPoint(Position()), PenetratesMrd(false), TrackLengthInMrd(0), MrdPenetration(0), MrdLayersPenetrated(0), MrdEnergyLoss(0), Flag(flagid), MCTriggerNum(triggernum)
ParticleID(partid), ParentPdg(parentpdg), PrimaryParentID(primaryparentid), DirectParentID(directparentid), StartsInFiducialVolume(false), TrackAngleX(0), TrackAngleY(0), TrackAngleFromBeam(0), EntersTank(false), TankEntryPoint(Position()), ExitsTank(false), TankExitPoint(Position()), TrackLengthInTank(0), EntersMrd(false), MrdEntryPoint(Position()), ExitsMrd(false), MrdExitPoint(Position()), PenetratesMrd(false), TrackLengthInMrd(0), MrdPenetration(0), MrdLayersPenetrated(0), MrdEnergyLoss(0), Flag(flagid), MCTriggerNum(triggernum)
{
serialise=true;
// override Hit tracktype
Expand All @@ -160,6 +160,8 @@ class MCParticle : public Particle {

inline int GetParticleID(){return ParticleID;}
inline int GetParentPdg(){return ParentPdg;}
inline int GetPrimaryParentID(){return PrimaryParentID;}
inline int GetDirectParentID(){return DirectParentID;}
inline int GetFlag(){return Flag;}
inline int GetMCTriggerNum(){return MCTriggerNum;}

Expand Down Expand Up @@ -188,6 +190,8 @@ class MCParticle : public Particle {

inline void SetParticleID(int partidin){ParticleID=partidin;}
inline void SetParentPdg(int parentpdgin){ParentPdg=parentpdgin;}
inline void SetPrimaryParentID(int primaryparentidin){PrimaryParentID=primaryparentidin;}
inline void SetDirectParentID(int directparentidin){DirectParentID=directparentidin;}
inline void SetFlag(int flagidin){Flag=flagidin;}
inline void SetMCTriggerNum(int triggernumin){MCTriggerNum=triggernumin;}

Expand Down Expand Up @@ -228,6 +232,7 @@ class MCParticle : public Particle {
bool Print() {
std::cout<<"ParticlePDG : "<<ParticlePDG<<std::endl;
std::cout<<"Particle Name : "<<PdgToString(ParticlePDG)<<std::endl;
std::cout<<"DirectParentID : "<<DirectParentID<<std::endl;
std::cout<<"startEnergy : "<<startEnergy<<std::endl;
std::cout<<"stopEnergy : "<<stopEnergy<<std::endl;
std::cout<<"startVertex : "; startVertex.Print();
Expand Down Expand Up @@ -271,6 +276,8 @@ class MCParticle : public Particle {
protected:
int ParticleID;
int ParentPdg;
int PrimaryParentID;
int DirectParentID;
int Flag;
int MCTriggerNum; // trigger window in which the particle was created

Expand Down Expand Up @@ -312,7 +319,8 @@ class MCParticle : public Particle {

ar & ParticleID;
ar & ParentPdg;

ar & PrimaryParentID;
ar & DirectParentID;
ar & StartsInFiducialVolume;

ar & TrackAngleX;
Expand Down
7 changes: 5 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,11 @@ ZMQInclude= -isystem$(ToolDAQPath)/zeromq-4.0.7/include/
BoostLib= -L $(ToolDAQPath)/boost_1_66_0/install/lib -lboost_date_time -lboost_serialization -lboost_iostreams -lboost_system -lboost_filesystem -lboost_regex
BoostInclude= -isystem$(ToolDAQPath)/boost_1_66_0/install/include

WCSimLib= -L $(ToolDAQPath)/WCSimLib -lWCSimRoot
WCSimInclude= -I $(ToolDAQPath)/WCSimLib/include
#WCSimLib= -L $(ToolDAQPath)/WCSimLib -lWCSimRoot
#WCSimInclude= -I $(ToolDAQPath)/WCSimLib/include
#Temp WCSim (DJA)
WCSimLib= -L ../WCSim/WCSim -lWCSimRoot
WCSimInclude= -I ../WCSim/WCSim/include

GenieIncludeDir := $(shell genie-config --topsrcdir)
GenieInclude= -isystem$(GenieIncludeDir)/Framework -isystem$(GenieIncludeDir) `gsl-config --cflags` -isystem$(GENIE_REWEIGHT)/src
Expand Down
Loading
Loading