8 #include "THaCutList.h"
19 #include "THaApparatus.h"
28 const char* hodname) :
29 THaPhysicsModule(name, description), fName(hodname), fHod(NULL), fNevt(0)
72 if (!IsOK() )
return -1;
89 for(
Int_t idel=0;idel<20;idel++) {
142 ( FindModule(
fName.
Data(),
"THcHodoscope"));
144 fSpectro =
static_cast<THaSpectrometer*
>(
fHod->GetApparatus());
146 if( THaPhysicsModule::Init( run_time ) != kOK )
149 cout <<
"THcHodoEff::Init nplanes=" <<
fHod->
GetNPlanes() << endl;
150 cout <<
"THcHodoEff::Init Apparatus = " <<
fHod->GetName() <<
154 return fStatus = kOK;
174 Int_t maxcountersperplane=0;
186 Int_t totalpaddles = fNPlanes*maxcountersperplane;
194 prefix[0] = tolower((
fHod->GetApparatus())->
GetName()[0]);
206 cout <<
"\n\nTHcHodoEff::ReadDatabase nplanes=" <<
fHod->
GetNPlanes() << endl;
223 cout <<
"Plane = " << ip + 1 <<
" counters = " <<
fNCounters[ip] << endl;
255 gHcParms->Define(
Form(
"%shodo_gold_hits[%d]",prefix,totalpaddles),
"Hodo golden hits", *
fStatTrk);
269 if( mode == kDefine && fIsSetup )
return kOK;
270 fIsSetup = ( mode == kDefine );
275 const RVarDef vars[] = {
281 return DefineVarsFromList( vars, mode );
292 if( !IsOK() )
return -1;
299 THaTrack* theTrack =
fSpectro->GetGoldenTrack();
304 if(!theTrack)
return 0;
305 Int_t trackIndex = theTrack->GetTrkNum()-1;
318 hitPos[ip] = theTrack->GetX() + theTrack->GetTheta()*
fPosZ[ip];
323 hitDistance[ip] = hitPos[ip] - (
fSpacing[ip]*(hitCounter[ip]-1) +
326 hitPos[ip] = theTrack->GetY() + theTrack->GetPhi()*
fPosZ[ip];
344 Int_t hitcounter=hitCounter[ip];
350 for(
Int_t ihit=0;ihit<nphits;ihit++) {
353 if(counter == hitcounter) {
356 if(
TMath::Abs(counter-hitcounter) == 1 && checkHit[ip] != 0) {
369 theTrack->GetChi2()/theTrack->GetNDoF() <=
fMaxChisq &&
393 Int_t hitcounter = hitCounter[ip];
395 if (hitcounter<0) hitcounter=0;
399 for(
Int_t ihit=0;ihit<nphits;ihit++) {
403 Bool_t onTrack, goodScinTime, goodTdcNeg, goodTdcPos;
405 onTrack, goodScinTime, goodTdcNeg, goodTdcPos);
407 TMath::Abs(hitcounter-counter) <= checkHit[ip] &&
409 theTrack->GetChi2()/theTrack->GetNDoF() <=
fMaxChisq &&
437 }
else if (goodTdcNeg) {
453 }
else if (goodTdcNeg) {
std::string GetName(const std::string &scope_name)
A single plane of scintillators.
double dist(Rotation3D const &r1, Rotation3D const &r2)
THcHodoEff(const char *name, const char *description, const char *hodname)
Int_t GetScinIndex(Int_t nPlane, Int_t nPaddle)
Class representing a single hit for the Hodoscopes.
virtual Int_t DefineVariables(EMode mode=kDefine)
vector< vector< Int_t > > fStatAndHit
vector< vector< Int_t > > fStatNegHit
virtual Int_t Process(const THaEvData &)
Short_t Min(Short_t a, Short_t b)
vector< vector< Int_t > > fStatPosHit
const char * Data() const
THaSpectrometer * fSpectro
virtual Int_t ReadDatabase(const TDatime &date)
vector< vector< Int_t > > fNegGood
Int_t GetPaddleNumber() const
char * Form(const char *fmt,...)
virtual EStatus Init(const TDatime &run_time)
vector< vector< vector< Int_t > > > fStatAndHitDel
vector< vector< Int_t > > fBothGood
Int_t LoadParmValues(const DBRequest *list, const char *prefix="")
Retrieve parameter values from the parameter cache.
Double_t fHodoEff_CalEnergy_Cut
Class for accumulating statistics for and calculating hodoscope efficiencies.
THcScintillatorPlane ** fPlanes
ClassImp(THcDCLookupTTDConv) THcDCLookupTTDConv
virtual Int_t Begin(THaRunBase *r=0)
THcScintillatorPlane * GetPlane(Int_t ip)
Short_t Max(Short_t a, Short_t b)
vector< vector< Int_t > > fPosGood
vector< vector< Int_t > > fStatOrHit
R__EXTERN class THcParmList * gHcParms
TObject * At(Int_t idx) const
Bool_t GetFlags(Int_t itrack, Int_t iplane, Int_t ihit, Bool_t &onTrack, Bool_t &goodScinTime, Bool_t &goodTdcNeg, Bool_t &goodTdcPos) const
Generic hodoscope consisting of multiple planes with multiple paddles with phototubes on both ends...
vector< vector< vector< Int_t > > > fStatTrkDel
Double_t GetPosCenter(Int_t PaddleNo)
void Reset(Option_t *opt="")
virtual Int_t End(THaRunBase *r=0)