///////////////////////////////////////////////////
// //
// Base class for all hits makers //
// //
///////////////////////////////////////////////////
#include "StarMaker.h"
#include "StarRun.h"
#include <TClass.h>
#include <TRandom.h>
ClassImp(StarMaker)
//___________________________________________
StarMaker::StarMaker()
{
fNhits = 0;
fNdigits = 0;
fHistograms = 0;
}
//___________________________________________
StarMaker::StarMaker(const char *name, const char *title)
: TNamed(name,title)
{
// normal constructor invoked by all detector makers.
// Create the list for detector specific histograms
// Add this Maker to the global list of makers in Run.
fNhits = 0;
fNdigits = 0;
fHistograms = new TList();
Run->Makers()->Add(this);
}
//___________________________________________
void StarMaker::Browse(TBrowser *b)
{
// Insert Maker objects in the list of objects to be browsed.
char name[64];
if( fHits == 0) return;
TObject *obj;
Int_t i, nobjects;
nobjects = fHits->GetEntries();
for (i=0;i<nobjects;i++) {
obj = fHits->At(i);
sprintf(name,"%s_%d",obj->GetName(),i);
b->Add(obj, &name[0]);
}
if( fDigits == 0) return;
nobjects = fDigits->GetEntries();
for (i=0;i<nobjects;i++) {
obj = fDigits->At(i);
sprintf(name,"%s_%d",obj->GetName(),i);
b->Add(obj, &name[0]);
}
}
//___________________________________________
void StarMaker::Clear(Option_t *option)
{
// Reset number of hits and the hits array for this detector
fNhits = 0;
fNdigits = 0;
if (fHits) fHits->Clear(option);
if (fDigits) fDigits->Clear(option);
}
//___________________________________________
Int_t StarMaker::DistancetoPrimitive(Int_t, Int_t)
{
return 9999;
}
//___________________________________________
void StarMaker::FakeHits(Int_t nh, Int_t snh)
{
// Generate random hits and add these hits to the list
// of hits of this detector.
// This function loops on all existing tracks and
// for each track generates a number hits following
// a gaussian of mean nh and standard deviation snh
Int_t vol[10];
Float_t hits[20];
Int_t det = 1;
Int_t i, hit, track, nhits, ntracks;
ntracks = Run->Particles()->GetEntriesFast();
for (track=0;track<ntracks;track++) {
nhits = Int_t(gRandom->Gaus(nh,snh));
for (hit=0;hit<nhits;hit++) {
for (i=0;i<fNV;i++) {
vol[i] = Int_t(5*gRandom->Rndm());
}
for (i=0;i<fNH;i++) {
hits[i] = gRandom->Rndm();
}
AddHit(det, track, vol, hits);
}
}
}
//___________________________________________
void StarMaker::FakeDigits(Int_t nd, Int_t snd)
{
// Generate random digits and add these digits to the list
// of digits of this detector.
// This function loops on all existing tracks and
// for each track generates a number digits following
// a gaussian of mean nd and standard deviation snd
Int_t vol[10];
Int_t digits[20];
Int_t det = 1;
Int_t i, digit, track, ndigits, ntracks;
ntracks = Run->Particles()->GetEntriesFast();
for (track=0;track<ntracks;track++) {
ndigits = Int_t(gRandom->Gaus(nd,snd));
for (digit=0;digit<ndigits;digit++) {
for (i=0;i<fNV;i++) {
vol[i] = Int_t(5*gRandom->Rndm());
}
for (i=0;i<fND;i++) {
digits[i] = 100*Int_t(gRandom->Rndm());
}
AddDigit(det, 1, &track, vol, digits);
}
}
}
//___________________________________________
void StarMaker::Finish()
{
// function called at the end of a run.
}
//___________________________________________
Int_t StarMaker::ImportGeantDigits()
{
fNdigits = Run->ImportGeantDigits(this,fGset,fGndet,fGdet);
return fNdigits;
}
//___________________________________________
Int_t StarMaker::ImportGeantHits()
{
fNhits = Run->ImportGeantHits(this,fGset,fGndet,fGdet);
return fNhits;
}
//___________________________________________
void StarMaker::MakeBranch()
{
// Create a new branch in the current Root Tree.
// The branch of fHits is automatically split
Int_t buffersize = 4000;
char branchname[10];
sprintf(branchname,"%s%s",fSetName.Data(),fDetName.Data());
if (fHits && Run->TreeH()) Run->TreeH()->Branch(branchname,&fHits, buffersize);
if (fDigits && Run->TreeD()) Run->TreeD()->Branch(branchname,&fDigits, buffersize);
}
//___________________________________________
void StarMaker::Paint(Option_t*)
{
}
//___________________________________________
void StarMaker::Streamer(TBuffer &R__b)
{
// Stream an object of class XMaker.
TBranch *branch;
char branchname[10];
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(); if (R__v) { }
TNamed::Streamer(R__b);
R__b >> fNV;
R__b >> fNH;
R__b >> fND;
R__b >> fNhits;
R__b >> fNdigits;
R__b >> fGset;
R__b >> fGndet;
R__b.ReadFastArray(fGdet,fGndet);
R__b.ReadFastArray(fNbitsV,fNV);
R__b.ReadFastArray(fNbitsH,fNH);
R__b.ReadFastArray(fNbitsD,fND);
R__b.ReadFastArray(fOrigin,fNH);
R__b.ReadFastArray(fFactor,fNH);
fSetName.Streamer(R__b);
fDetName.Streamer(R__b);
R__b >> fHistograms;
R__b >> fHits; // diff
R__b >> fDigits; // diff
//this is an addition to the standard rootcint version of Streamer
//branch address for this maker is set automatically
sprintf(branchname,"%s%s",fSetName.Data(),fDetName.Data());
TTree *treeH = Run->TreeH();
if (treeH && fHits) {
branch = treeH->GetBranch(branchname);
if (branch) branch->SetAddress(&fHits);
}
TTree *treeD = Run->TreeD();
if (treeD && fDigits) {
branch = treeD->GetBranch(branchname);
if (branch) branch->SetAddress(&fDigits);
}
} else {
R__b.WriteVersion(StarMaker::IsA());
TNamed::Streamer(R__b);
R__b << fNV;
R__b << fNH;
R__b << fND;
R__b << fNhits;
R__b << fNdigits;
R__b << fGset;
R__b << fGndet;
R__b.WriteFastArray(fGdet,fGndet);
R__b.WriteFastArray(fNbitsV,fNV);
R__b.WriteFastArray(fNbitsH,fNH);
R__b.WriteFastArray(fNbitsD,fND);
R__b.WriteFastArray(fOrigin,fNH);
R__b.WriteFastArray(fFactor,fNH);
fSetName.Streamer(R__b);
fDetName.Streamer(R__b);
R__b << fHistograms;
R__b << fHits; // diff
R__b << fDigits; // diff
}
}
ROOT page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.