141 for (Int_t ih=1; ih<=
GetNhits(); ih++)
185 fHits=
new TObjArray(nhits);
188 for (Int_t ih=1; ih<=nhits; ih++)
210 for (Int_t il=0; il<nlinks; il++)
260 cout <<
"*NcDevice::SetHitCopy* Invalid argument : " << j << endl;
265 cout <<
"*NcDevice::SetHitCopy* Storage already contained hits."
266 <<
" ==> HitCopy mode not changed." << endl;
355 fHits=
new TObjArray(1);
361 for (Int_t i=0; i<nhits; i++)
363 if (&s==
fHits->At(i))
return;
467 if (!
fHits)
return 0;
473 for (Int_t i=0; i<nhits; i++)
479 hitname=sx->GetName();
480 if ((!opt && hitname==name) || (opt && hitname.Contains(name.Data()))) flag=1;
482 if ((mode==0 && flag==1) || (mode==1 && flag==2) || (mode==2 && flag)) nfound++;
498 if (!
fHits)
return 0;
528 if (!
fHits)
return 0;
533 for (Int_t i=0; i<nhits; i++)
539 hitname=sx->GetName();
540 if ((!opt && hitname==name) || (opt && hitname.Contains(name.Data()))) flag=1;
542 if ((mode==0 && flag==1) || (mode==1 && flag==2) || (mode==2 && flag))
return sx;
557 if (!
fHits ||
id<0)
return 0;
566 sid=sx->GetUniqueID();
567 if (
id==sid)
return sx;
584void NcDevice::GetHits(TObjArray& selected,TString name,Int_t mode,Int_t opt,TObjArray* hits)
const
617 TObjArray* ahits=hits;
618 if (!ahits) ahits=
fHits;
621 if (ahits) nhits=ahits->GetEntries();
623 if (!ahits || !nhits)
return;
628 for (Int_t i=0; i<nhits; i++)
635 hitname=sx->GetName();
638 if ((!opt && hitname==name) || (opt && hitname.Contains(name.Data()))) flag=1;
654 if ((mode==0 && (flag==1 || flag==3)) || (mode==1 && flag>1) || (mode==2 && flag)) selected.Add(sx);
655 if ((mode==-1 && (flag==0 || flag==2)) || (mode==-2 && flag<2) || (mode==-3 && !flag)) selected.Add(sx);
679 for (Int_t ih=1; ih<=nhits; ih++)
682 if (sx) sx->
Data(f,u);
712 cout <<
" The following " << nhits <<
" hits are registered : " << endl;
717 cout <<
" No hits have been registered for this device." << endl;
748 TObjArray* ahits=hits;
749 if (!ahits) ahits=
fHits;
751 if (idx<=0 || !ahits)
return;
754 if (!deadcheck) mode=0;
756 Int_t nhits=ahits->GetEntries();
761 for (Int_t i=0; i<nhits; i++)
765 if (!obj->InheritsFrom(
"NcSignal"))
continue;
779 if (sig<vmin) vmin=sig;
780 if (sig>vmax) vmax=sig;
785void NcDevice::GetExtremes(Float_t& vmin,Float_t& vmax,TString name,TObjArray* hits,Int_t mode,Int_t deadcheck)
const
811 TObjArray* ahits=hits;
812 if (!ahits) ahits=
fHits;
817 if (!deadcheck) mode=0;
819 Int_t nhits=ahits->GetEntries();
827 for (Int_t i=0; i<nhits; i++)
831 if (!obj->InheritsFrom(
"NcSignal"))
continue;
849 if (sig<vmin) vmin=sig;
850 if (sig>vmax) vmax=sig;
855TObjArray*
NcDevice::SortHits(Int_t idx,Int_t mode,TObjArray* hits,Int_t mcal,Int_t deadcheck,TObjArray* ordered)
896 if (ordered) ordered->Clear();
898 TObjArray* ahits=hits;
899 if (!ahits) ahits=
fHits;
902 if (ahits) nhits=ahits->GetEntries();
904 if (idx<=0 || abs(mode)!=1 || !ahits || !nhits)
return 0;
908 ordered->Expand(nhits);
917 if (!deadcheck) mcal=0;
933 for (Int_t i=0; i<nhits; i++)
937 if (!obj->InheritsFrom(
"NcSignal"))
continue;
948 arr->AddAt(s,nord-1);
952 for (Int_t j=0; j<=nord; j++)
961 if (mode==-1 && s->
GetSignal(idx,mcal) <= ((
NcSignal*)arr->At(j))->GetSignal(idx,mcal))
continue;
962 if (mode==1 && s->
GetSignal(idx,mcal) >= ((
NcSignal*)arr->At(j))->GetSignal(idx,mcal))
continue;
965 for (Int_t k=nord-1; k>j; k--)
967 arr->AddAt(arr->At(k-1),k);
984TObjArray*
NcDevice::SortHits(TString name,Int_t mode,TObjArray* hits,Int_t mcal,Int_t deadcheck,TObjArray* ordered)
1025 if (ordered) ordered->Clear();
1027 TObjArray* ahits=hits;
1028 if (!ahits) ahits=
fHits;
1031 if (ahits) nhits=ahits->GetEntries();
1033 if (abs(mode)!=1 || !ahits || !nhits)
return 0;
1037 ordered->Expand(nhits);
1048 if (!deadcheck) mcal=0;
1065 for (Int_t i=0; i<nhits; i++)
1069 if (!obj->InheritsFrom(
"NcSignal"))
continue;
1083 arr->AddAt(s,nord-1);
1087 for (Int_t j=0; j<=nord; j++)
1096 if (mode==-1 && s->
GetSignal(idx,mcal) <= ((
NcSignal*)arr->At(j))->GetSignal(idx,mcal))
continue;
1097 if (mode==1 && s->
GetSignal(idx,mcal) >= ((
NcSignal*)arr->At(j))->GetSignal(idx,mcal))
continue;
1100 for (Int_t k=nord-1; k>j; k--)
1102 arr->AddAt(arr->At(k-1),k);
1155 TObjArray* ahits=hits;
1162 if (idx<=0 || !ahits)
return;
1164 Int_t nhits=ahits->GetEntries();
1167 Float_t sigmax=fabs(scale);
1173 if (fabs(vmin)>sigmax) sigmax=fabs(vmin);
1176 if (sigmax <=0)
return;
1192 for (Int_t ih=0; ih<nhits; ih++)
1196 if (!obj->InheritsFrom(
"NcSignal"))
continue;
1214 if (fabs(sig) <= 0.)
continue;
1216 TPolyMarker3D* m=
new TPolyMarker3D();
1217 m->SetMarkerStyle(8);
1218 m->SetMarkerColor(mcol);
1219 m->SetMarkerSize(100.*fabs(sig)/sigmax);
1220 m->SetPoint(0,pos[0],pos[1],pos[2]);
1264 TObjArray* ahits=hits;
1273 Int_t nhits=ahits->GetEntries();
1277 Float_t sigmax=fabs(scale);
1283 if (fabs(vmin)>sigmax) sigmax=fabs(vmin);
1286 if (sigmax <=0)
return;
1303 for (Int_t ih=0; ih<nhits; ih++)
1307 if (!obj->InheritsFrom(
"NcSignal"))
continue;
1326 if (fabs(sig) <= 0.)
continue;
1328 TPolyMarker3D* m=
new TPolyMarker3D();
1329 m->SetMarkerStyle(8);
1330 m->SetMarkerColor(mcol);
1331 m->SetMarkerSize(100.*fabs(sig)/sigmax);
1332 m->SetPoint(0,pos[0],pos[1],pos[2]);
1356 TObjArray* ahits=hits;
1357 if (!ahits) ahits=
fHits;
1360 if (ahits) nhits=ahits->GetEntries();
1362 if (idx<=0 || !ahits || !nhits)
return 0;
1367 for (Int_t i=0; i<nhits; i++)
1371 if (!obj->InheritsFrom(
"NcSignal"))
continue;
1402 TObjArray* ahits=hits;
1403 if (!ahits) ahits=
fHits;
1406 if (ahits) nhits=ahits->GetEntries();
1408 if (!ahits || !nhits)
return 0;
1413 for (Int_t i=0; i<nhits; i++)
1417 if (!obj->InheritsFrom(
"NcSignal"))
continue;
1428Double_t
NcDevice::SlideWindow(TObjArray* hits,Double_t thres,Double_t swin,TString sname,Int_t smode,TString wname,Int_t wmode,Int_t* i1,Int_t* i2)
const
1505 if (hits) nhits=hits->GetEntries();
1507 if (!nhits)
return 0;
1515 if (wname==
"none") wflag=0;
1520 while (ifirst<nhits)
1522 obj=hits->At(ifirst);
1523 if (!(obj->InheritsFrom(
"NcSignal")))
1532 if (wflag) w=sx1->
GetSignal(wname,wmode);
1542 for (Int_t ilast=ifirst+1; ilast<nhits; ilast++)
1544 obj=hits->At(ilast);
1545 if (!(obj->InheritsFrom(
"NcSignal")))
continue;
1551 if (wsize>swin)
break;
1553 if (wflag) w=sx2->
GetSignal(wname,wmode);
1595 if (!hits)
return v;
1597 Int_t nh=hits->GetEntries();
1604 if (pos && !dev1)
return v;
1612 for (Int_t ih=1; ih<nh; ih++)
1618 if (pos && !dev2)
continue;
1659 if (!hits)
return cog;
1661 Int_t nh=hits->GetEntries();
1662 if (!nh)
return cog;
1668 for (Int_t ih=0; ih<nh; ih++)
1674 if (pos && !devx)
continue;
1685 if (slotname !=
"none")
1694 if (wsum>0) rsum/=wsum;
1699Double_t
NcDevice::GetCVAL(TObjArray* hits,TString obsname,TString weightname,Int_t mode,Int_t type)
const
1718 if (type!=1 && type!=2)
1720 cout <<
" *" << ClassName() <<
"::GetCVAL* Unknown type : " << type << endl;
1724 if (!hits)
return 0;
1726 Int_t nh=hits->GetEntries();
1737 for (Int_t ih=0; ih<nh; ih++)
1744 if (weightname !=
"none") w=fabs(sx->
GetSignal(weightname,mode));
1750 for (Int_t i=0; i<iw; i++)
1768 if (wsum>0) cval=stat.
GetSum(1)/wsum;
1792 if (strlen(name)) dev->SetName(name);
Int_t GetDeadValue(Int_t j=1) const
Int_t GetSlotIndex(TString name, Int_t opt=0) const
Signal (Hit) handling of a generic device.
void RemoveHit(NcSignal &s)
TObjArray * fMarkers
! Temp. array to hold the 3D markers for the hit display
Double_t SumSignals(Int_t idx, Int_t mode=1, TObjArray *hits=0)
NcPosition GetCOG(TObjArray *hits, Int_t pos=0, TString slotname="none", Int_t mode=0) const
virtual void Data(TString f="car", TString u="rad") const
Nc3Vector GetHitPath(TObjArray *hits, Int_t pos=0) const
NcDevice(const char *name="", const char *title="")
Double_t SlideWindow(TObjArray *hits, Double_t thres, Double_t swin, TString sname, Int_t smode=0, TString wname="none", Int_t wmode=0, Int_t *i1=0, Int_t *i2=0) const
TObjArray * fOrdered
! Temp. array to hold the ordered hits
virtual TObject * Clone(const char *name="") const
void DisplayHits(TString name, Float_t scale=-1, TObjArray *hits=0, Int_t dp=0, Int_t mode=1, Int_t mcol=4)
void SetStatus(Int_t word)
virtual void SetOwner(Bool_t own=kTRUE)
NcSignal * GetIdHit(Int_t id) const
Double_t GetCVAL(TObjArray *hits, TString obsname, TString weightname="none", Int_t mode=0, Int_t type=1) const
NcSignal * GetHit(Int_t j) const
void GetExtremes(Float_t &vmin, Float_t &vmax, Int_t idx=1, TObjArray *hits=0, Int_t mode=1, Int_t deadcheck=1) const
void ShowHit(Int_t j=0, TString f="car", TString u="rad") const
virtual void Reset(Int_t mode=0)
TObjArray * SortHits(TString name, Int_t mode=-1, TObjArray *hits=0, Int_t mcal=1, Int_t deadcheck=1, TObjArray *ordered=0)
void GetPosition(Double_t *r, TString f, TString u="rad", Float_t s=-1) const
NcPosition & GetPosition()
void SetPosition(Double_t *r, TString f, TString u="rad")
Sampling and statistics tools for various multi-dimensional data samples.
Double_t GetMedian(Int_t i)
void SetStoreMode(Int_t mode=1, Int_t nmax=0, Int_t i=0)
Double_t GetSum(Int_t i) const
virtual void Reset(Int_t mode=0)
NcDevice * GetDevice() const
Int_t GetNlinks(TObject *obj=0, Int_t j=0) const
virtual TObject * Clone(const char *name="") const
Int_t GetIndices(TObject *obj, TArrayI &js, TArrayI &ks) const
void SetDevice(NcDevice *dev)
virtual Float_t GetSignal(Int_t j=1, Int_t mode=0) const
NcSignal(const char *name="", const char *title="")
virtual void Data(TString f="car", TString u="rad") const
void AddLink(TObject *obj, Int_t j=1)
Int_t GetSignalFlag(Int_t j=1) const
void SetLink(TObject *obj, Int_t j=1, Int_t k=1)
void ResetLinks(TObject *obj, Int_t j=0, Int_t k=0)