/*
$Log$
+Revision 1.16 2001/10/04 15:30:56 hristov
+Changes to accommodate the set of PHOS folders and tasks (Y.Schutz)
+
+Revision 1.15 2001/07/27 13:03:13 hristov
+Default Branch split level set to 99
+
+Revision 1.14 2001/05/21 17:22:51 buncic
+Fixed problem with missing AliConfig while reading galice.root
+
Revision 1.13 2001/05/16 14:57:22 alibrary
New files for folders and Stack
#include "AliRun.h"
#include "AliHit.h"
#include "AliPoints.h"
+#include "AliTrackReference.h"
+
// Static variables for the hit iterator routines
static Int_t sMaxIterHit=0;
static Int_t sCurIterHit=0;
+
ClassImp(AliDetector)
//_____________________________________________________________________________
fNdigits = 0;
fPoints = 0;
fHits = 0;
+ fTrackReferences =0;
fDigits = 0;
fTimeGate = 200.e-9;
fBufferSize = 16000;
fActive = kTRUE;
fNhits = 0;
fHits = 0;
+ fTrackReferences =0;
fDigits = 0;
fNdigits = 0;
fPoints = 0;
fDigitsFile = 0;
AliConfig::Instance()->Add(this);
+
+ fTrackReferences = new TClonesArray("AliTrackReference", 100);
+ //if detector to want to create another track reference - than let's be free
+
}
//_____________________________________________________________________________
//_____________________________________________________________________________
TBranch* AliDetector::MakeBranchInTree(TTree *tree, const char* name, void* address, Int_t size,const char *file)
{
- return(MakeBranchInTree(tree,name,0,address,size,1,file));
+ return(MakeBranchInTree(tree,name,0,address,size,99,file));
}
//_____________________________________________________________________________
printf("* MakeBranch * Diverting Branch %s to file %s\n",name,file);
}
char *folder = 0;
-
+ TString folderName(name);
+
if (!strncmp(tree->GetName(),"TreeE",5)) folder = "RunMC/Event/Data";
if (!strncmp(tree->GetName(),"TreeK",5)) folder = "RunMC/Event/Data";
- if (!strncmp(tree->GetName(),"TreeH",5)) folder = "RunMC/Event/Data";
- if (!strncmp(tree->GetName(),"TreeD",5)) folder = "Run/Event/Data";
- if (!strncmp(tree->GetName(),"TreeS",5)) folder = "Run/Event/Data";
+ if (!strncmp(tree->GetName(),"TreeH",5)) {
+ folder = "RunMC/Event/Data/Hits";
+ folderName = "Hits" ;
+ }
+ if (!strncmp(tree->GetName(),"TreeTrackReferences",5)) {
+ folder = "RunMC/Event/Data/TrackReferences";
+ folderName = "TrackReferences" ;
+ }
+
+ if (!strncmp(tree->GetName(),"TreeD",5)) {
+ folder = "Run/Event/Data";
+ folderName = "Digits" ;
+ }
+ if (!strncmp(tree->GetName(),"TreeS",5)) {
+ folder = "RunMC/Event/Data/SDigits";
+ folderName = "SDigits" ;
+ }
if (!strncmp(tree->GetName(),"TreeR",5)) folder = "Run/Event/RecData";
if (folder) {
if (GetDebug())
printf("%15s: Publishing %s to %s\n",ClassName(),name,folder);
- Publish(folder,address,name);
+ Publish(folder,address, folderName.Data());
}
return branch;
}
else return 0;
}
+
+//_____________________________________________________________________________
+AliTrackReference* AliDetector::FirstTrackReference(Int_t track)
+{
+ //
+ // Initialise the hit iterator
+ // Return the address of the first hit for track
+ // If track>=0 the track is read from disk
+ // while if track<0 the first hit of the current
+ // track is returned
+ //
+ if(track>=0) {
+ gAlice->ResetTrackReferences();
+ gAlice->TreeTR()->GetEvent(track);
+ }
+ //
+ sMaxIterHit=fTrackReferences->GetEntriesFast();
+ sCurIterHit=0;
+ if(sMaxIterHit) return (AliTrackReference*) fTrackReferences->UncheckedAt(0);
+ else return 0;
+}
+
+
+
//_____________________________________________________________________________
AliHit* AliDetector::NextHit()
{
return 0;
}
}
+//_____________________________________________________________________________
+AliTrackReference* AliDetector::NextTrackReference()
+{
+ //
+ // Return the next hit for the current track
+ //
+ if(fMaxIterTrackRef) {
+ if(++fCurrentIterTrackRef<fMaxIterTrackRef)
+ return (AliTrackReference*) fTrackReferences->UncheckedAt(fCurrentIterTrackRef);
+ else
+ return 0;
+ } else {
+ printf("* AliDetector::NextTrackReference * TrackReference Iterator called without calling FistTrackReference before\n");
+ return 0;
+ }
+}
//_____________________________________________________________________________
void AliDetector::LoadPoints(Int_t)
}
}
}
+//_____________________________________________________________________________
+void AliDetector::MakeBranchTR(Option_t *option, const char *file)
+{
+ //
+ // Create a new branch in the current Root Tree
+ // The branch of fHits is automatically split
+ //
+
+ char branchname[10];
+ sprintf(branchname,"%s",GetName());
+ //
+ // Get the pointer to the header
+ const char *cTR = strstr(option,"T");
+ //
+ if (fTrackReferences && gAlice->TreeTR() && cTR) {
+ MakeBranchInTree(gAlice->TreeTR(),
+ branchname, &fTrackReferences, fBufferSize, file) ;
+ }
+}
//_____________________________________________________________________________
void AliDetector::ResetDigits()
if (fHits) fHits->Clear();
}
+
+
+//_____________________________________________________________________________
+void AliDetector::ResetTrackReferences()
+{
+ //
+ // Reset number of hits and the hits array
+ //
+ fMaxIterTrackRef = 0;
+ if (fTrackReferences) fTrackReferences->Clear();
+}
+
+
+
//_____________________________________________________________________________
void AliDetector::ResetPoints()
{