// ESAF : Euso Simulation and Analysis Framework
// $Id: FakeOpticalAdaptor.cc,v 1.7 2004/12/23 00:39:45 thea Exp $
// A.Thea created Oct, 24 2003
#include "FakeOpticalAdaptor.hh"
#include "Photomultiplier.hh"
ClassImp(FakeOpticalAdaptor)
//______________________________________________________________________________
FakeOpticalAdaptor::FakeOpticalAdaptor() {
//
// Constructor
//
fReflectivity = Conf()->GetNum("FakeOpticalAdaptor.fCathode.reflectivity");
fSide=Conf()->GetNum("FakeOpticalAdaptor.fSide")*mm;
fHeight=Conf()->GetNum("FakeOpticalAdaptor.fHeight")*mm;
}
//______________________________________________________________________________
FakeOpticalAdaptor::~FakeOpticalAdaptor() {
//
// Destructor
//
}
//______________________________________________________________________________
Photon *FakeOpticalAdaptor::Transport(Photon *p) const {
EVector lpos, ldir;
lpos=p->pos-fPos;
lpos=goLocal(lpos);
ldir=goLocal(ldir);
Int_t face=whichFace(p);
if ( face == TOP ){
if (isReflectedByCathode()) {
EVector ldir=goLocal(p->dir);
ldir[Z]*=-1;
p->dir=goGlobal(ldir);
p->MChit=false;
p->hit=false;
return Transport(p);
}
// Add photon to PMT
if(!pmt->Pmt()->Add(*p)) {
#ifdef DEBUG
cout<<"photon rejected by PMT"<<endl;
#endif /* DEBUG */
} else {
#ifdef DEBUG
cout<<"photon accepted by PMT"<<endl;
#endif /* DEBUG */
return 0;
}
} else if ( face == BOTTOM ) {
return p;
} else{
throw runtime_error("FakeOpticalAdaptor: photon on a non-existent face.");
}
return 0;
}