/*
$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
#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
+
}
//_____________________________________________________________________________
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" ;
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()
{
#include <AliModule.h>
class AliHit;
+class AliTrackReference;
class TTree;
class TBranch;
virtual int GetNhits() const {return fNhits;}
TClonesArray *Digits() const {return fDigits;}
TClonesArray *Hits() const {return fHits;}
+ TClonesArray *TrackReferences() const {return fTrackReferences;}
+
TObjArray *Points() const {return fPoints;}
Int_t GetIshunt() const {return fIshunt;}
void SetIshunt(Int_t ishunt) {fIshunt=ishunt;}
virtual void FinishRun();
virtual void LoadPoints(Int_t track);
virtual void MakeBranch(Option_t *opt=" ", const char *file=0 );
+ virtual void MakeBranchTR(Option_t *opt=" ", const char *file=0 );
virtual void ResetDigits();
virtual void ResetHits();
+ virtual void ResetTrackReferences();
+
virtual void ResetPoints();
virtual void SetTreeAddress();
virtual void SetTimeGate(Float_t gate) {fTimeGate=gate;}
virtual void DrawModule() {}
virtual AliHit* FirstHit(Int_t track);
virtual AliHit* NextHit();
+ virtual AliTrackReference * FirstTrackReference(Int_t track);
+ virtual AliTrackReference * NextTrackReference();
virtual void SetBufferSize(Int_t bufsize=8000) {fBufferSize = bufsize;}
virtual TBranch* MakeBranchInTree(TTree *tree, const char* cname, void* address, Int_t size=32000, const char *file=0);
virtual TBranch* MakeBranchInTree(TTree *tree, const char* cname, const char* name, void* address, Int_t size=32000, Int_t splitlevel=99, const char *file=0);
TClonesArray *fDigits; //List of digits for this detector
char *fDigitsFile; //!File to store branches of digits tree for detector
TObjArray *fPoints; //!Array of points for each track (all tracks in memory)
-
+ TClonesArray *fTrackReferences; //!list of track references - for one primary track only -MI
+ Int_t fMaxIterTrackRef; //!for track refernce iterator routines
+ Int_t fCurrentIterTrackRef; //!for track refernce iterator routines
ClassDef(AliDetector,1) //Base class for ALICE detectors
};
#endif
/*
$Log$
+Revision 1.17 2001/10/21 18:38:44 hristov
+Several pointers were set to zero in the default constructors to avoid memory management problems
+
Revision 1.16 2001/07/25 15:23:50 hristov
Changes needed to run with Root 3.01 (R.Brun)
#include <TMath.h>
#include "AliRun.h"
+#include "AliStack.h"
#include "AliDetector.h"
#include "AliDisplay.h"
#include "AliPoints.h"
fZoomButton = 0;
fArcButton = 0;
fFruits = 0;
+ fTracksToDisplay =0;
+ fNTracksToDisplay =0;
}
//_____________________________________________________________________________
fTrigPad->SetEditable(kFALSE);
fButtons->SetEditable(kFALSE);
-
+ fTracksToDisplay =0;
+ fNTracksToDisplay =0;
fCanvas->cd();
fCanvas->Update();
}
+
+void AliDisplay::SetTracksToDisplay(Int_t *tracks, Int_t n){
+ //
+ // set tracks to display - MI
+ fTracksToDisplay = tracks;
+ fNTracksToDisplay = n;
+}
//___________________________________________
void AliDisplay::LoadPoints()
{
TIter next(gAlice->Modules());
AliModule *module;
Int_t ntracks = gAlice->GetNtrack();
- for (Int_t track=0; track<ntracks;track++) {
+
+ // load only wanted tracks
+ if (fNTracksToDisplay>0){
+ Int_t nprim = gAlice->Stack()->GetNprimary();
+ for (Int_t track=0; track<fNTracksToDisplay;track++) {
gAlice->ResetHits();
- gAlice->TreeH()->GetEvent(track);
+ gAlice->TreeH()->GetEvent(nprim-1-gAlice->GetPrimary(fTracksToDisplay[track]));
while((module = (AliModule*)next())) {
- module->LoadPoints(track);
+ module->LoadPoints(nprim-1-gAlice->GetPrimary(fTracksToDisplay[track]));
}
next.Reset();
+ }
}
+ else
+ for (Int_t track=0; track<ntracks;track++) {
+ gAlice->ResetHits();
+ gAlice->TreeH()->GetEvent(track);
+ while((module = (AliModule*)next())) {
+ module->LoadPoints(track);
+ }
+ next.Reset();
+ }
}
//_____________________________________________________________________________
virtual void UnZoom(); // *MENU*
AliDisplay& operator= (const AliDisplay &disp);
+ void SetTracksToDisplay(Int_t *tracks, Int_t n); // set tracks to display
protected:
Int_t fZoomMode; //=1 if in zoom mode
Bool_t fDrawAllViews; //Flag True if AllViews selected
TArc *fArcButton; //Gren/Red button to show Pick/Zoom mode
TList *fFruits; //List for fruits
+ Int_t *fTracksToDisplay; // array of tracks to display
+ Int_t fNTracksToDisplay; // number of tracks to display
ClassDef(AliDisplay, 0) //Utility class to display ALICE outline, tracks, hits,..
};
//virtual void Hits2Digits() {}
virtual void Init() {}
virtual void LoadPoints(Int_t ) {}
- virtual void MakeBranch(Option_t *, const char *file=0 ) {}
+ virtual void MakeBranch(Option_t *, const char *file=0 ) {}
+ virtual void MakeBranchTR(Option_t *opt=" ", const char *file=0 ){}
virtual void Paint(Option_t *) {}
virtual void ResetDigits() {}
virtual void ResetSDigits() {}
virtual void ResetHits() {}
+ virtual void ResetTrackReferences() {}
virtual void ResetPoints() {}
virtual void SetTreeAddress() {}
virtual void SetTimeGate(Float_t) {}
/*
$Log$
+Revision 1.84 2002/05/21 16:26:07 hristov
+Find correctly TreeK in case CONFIG_SPLIT_FILE is set (Y.Schutz)
+
Revision 1.83 2002/04/04 13:16:17 jchudoba
add possibility to write sdigits, digits and rec. points into separate files
fGenerator = 0;
fTreeD = 0;
fTreeH = 0;
+ fTreeTR = 0;
fTreeE = 0;
fTreeR = 0;
fTreeS = 0;
gAlice = this;
fTreeD = 0;
fTreeH = 0;
+ fTreeTR = 0;
fTreeE = 0;
fTreeR = 0;
fTreeS = 0;
delete fLego;
delete fTreeD;
delete fTreeH;
+ delete fTreeTR;
delete fTreeE;
delete fTreeR;
delete fTreeS;
if (pTreeK) b->Add(pTreeK,pTreeK->GetName());
if (fTreeH) b->Add(fTreeH,fTreeH->GetName());
+ if (fTreeTR) b->Add(fTreeTR,fTreeH->GetName());
if (fTreeD) b->Add(fTreeD,fTreeD->GetName());
if (fTreeE) b->Add(fTreeE,fTreeE->GetName());
if (fTreeR) b->Add(fTreeR,fTreeR->GetName());
if (gAlice->TreeH()) {
gAlice->TreeH()->Fill();
}
+
+ // Write out hits if any
+ if (gAlice->TreeTR()) {
+ gAlice->TreeTR()->Fill();
+ }
+
//
// if(++count%times==1) gObjectTable->Print();
// Reset Hits info
gAlice->ResetHits();
-
+ gAlice->ResetTrackReferences();
}
//_____________________________________________________________________________
TTree* pTreeK = fStack->TreeK();
if (pTreeK) pTreeK->Write(0,TObject::kOverwrite);
if (fTreeH) fTreeH->Write(0,TObject::kOverwrite);
+ if (fTreeTR) fTreeTR->Write(0,TObject::kOverwrite);
++fEvent;
++fEventNrInRun;
if (fTreeH) {
delete fTreeH; fTreeH = 0;
}
+ if (fTreeTR) {
+ delete fTreeTR; fTreeTR = 0;
+ }
+
if (fTreeD) {
delete fTreeD; fTreeD = 0;
}
// Reset existing structures
ResetHits();
+ ResetTrackReferences();
ResetDigits();
ResetSDigits();
// Delete Trees already connected
if (fTreeH) { delete fTreeH; fTreeH = 0;}
+ if (fTreeTR) { delete fTreeTR; fTreeTR = 0;}
if (fTreeD) { delete fTreeD; fTreeD = 0;}
if (fTreeR) { delete fTreeR; fTreeR = 0;}
if (fTreeS) { delete fTreeS; fTreeS = 0;}
Error("GetEvent","cannot find Hits Tree for event:%d\n",event);
}
+ // Get TracReferences Tree header from file
+ sprintf(treeName,"TreeTR%d",event);
+ fTreeTR = (TTree*)gDirectory->Get(treeName);
+ if (!fTreeTR) {
+ Error("GetEvent","cannot find TrackRefernces Tree for event:%d\n",event);
+ }
+
// get current file name and compare with names containing trees S,D,R
TString curfilname=(TString)fTreeE->GetCurrentFile()->GetName();
if(fTreeDFileName==curfilname)fTreeDFileName="";
// Analyse options
const char *oK = strstr(option,"K");
const char *oH = strstr(option,"H");
+ const char *oTR = strstr(option,"T");
const char *oE = strstr(option,"E");
const char *oD = strstr(option,"D");
const char *oR = strstr(option,"R");
fTreeH->SetAutoSave(1000000000); //no autosave
fTreeH->Write(0,TObject::kOverwrite);
}
+
+ if (oTR && !fTreeTR) {
+ sprintf(hname,"TreeTR%d",fEvent);
+ fTreeTR = new TTree(hname,"TrackReferences");
+ fTreeTR->SetAutoSave(1000000000); //no autosave
+ fTreeTR->Write(0,TObject::kOverwrite);
+ }
+
if (oD && !fTreeD) {
sprintf(hname,"TreeD%d",fEvent);
fTreeD = new TTree(hname,"Digits");
TIter next(fModules);
AliModule *detector;
while((detector = (AliModule*)next())) {
- if (oH) detector->MakeBranch(option,file);
+ if (oH) detector->MakeBranch(option,file);
+ if (oTR) detector->MakeBranchTR(option,file);
}
+
+
}
//_____________________________________________________________________________
//
ResetHits();
+ ResetTrackReferences();
ResetDigits();
ResetSDigits();
sprintf(hname,"TreeH%d",fEvent);
fTreeH->SetName(hname);
}
+
+ if(fTreeTR) {
+ fTreeTR->Reset();
+ sprintf(hname,"TreeTR%d",fEvent);
+ fTreeTR->SetName(hname);
+ }
+
if(fTreeD) {
fTreeD->Reset();
sprintf(hname,"TreeD%d",fEvent);
}
}
+//_____________________________________________________________________________
+void AliRun::ResetTrackReferences()
+{
+ //
+ // Reset all Detectors hits
+ //
+ TIter next(fModules);
+ AliModule *detector;
+ while((detector = (AliModule*)next())) {
+ detector->ResetTrackReferences();
+ }
+}
+
+
+
//_____________________________________________________________________________
void AliRun::ResetPoints()
{
// Create the Root Tree with one branch per detector
- MakeTree("ESDR");
+ MakeTree("ESDRT"); // MI change
if (gSystem->Getenv("CONFIG_SPLIT_FILE")) {
MakeTree("K","Kine.root");
virtual void ResetDigits();
virtual void ResetSDigits();
virtual void ResetHits();
+ virtual void ResetTrackReferences();
virtual void ResetPoints();
virtual void SetTransPar(char *filename="$(ALICE_ROOT)/data/galice.cuts");
virtual void SetBaseFile(char *filename="galice.root");
TTree *TreeS() {return fTreeS;}
TTree *TreeE() {return fTreeE;}
TTree *TreeH() {return fTreeH;}
+ TTree *TreeTR() {return fTreeTR;}
TTree *TreeK() ;
TTree *TreeR() {return fTreeR;}
TTree *fTreeD; //! Pointer to Tree for Digits
TTree *fTreeS; //! Pointer to Tree for SDigits
TTree *fTreeH; //! Pointer to Tree for Hits
+ TTree *fTreeTR; //! Pointer to Tree for TrackRefernces
TTree *fTreeE; //! Pointer to Tree for Header
TTree *fTreeR; //! Pointer to Tree for Reconstructed Objects
TObjArray *fModules; // List of Detectors
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+
+#include "AliTrackReference.h"
+#include "TParticle.h"
+#include "AliRun.h"
+
+ClassImp(AliTrackReference)
+
+AliTrackReference::AliTrackReference()
+{
+ //
+ // Default constructor
+ //
+ fTrack=0;
+}
--- /dev/null
+#ifndef ALITRACKREFERENCE_H
+#define ALITRACKREFERENCE_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/* $Id$ */
+
+#include "TObject.h"
+
+class AliTrackReference : public TObject {
+public:
+ AliTrackReference();
+ virtual ~AliTrackReference() {}
+ virtual Int_t GetTrack() const {return fTrack;}
+ virtual void SetTrack(Int_t track) {fTrack=track;}
+ virtual Float_t X() const {return fX;}
+ virtual Float_t Y() const {return fY;}
+ virtual Float_t Z() const {return fZ;}
+ virtual Float_t Px() const {return fPx;}
+ virtual Float_t Py() const {return fPy;}
+ virtual Float_t Pz() const {return fPz;}
+ virtual void SetPosition(Float_t x, Float_t y, Float_t z){fX=x; fY=y; fZ=z;}
+ virtual void SetMomentum(Float_t px, Float_t py, Float_t pz){fPx=px; fPy=py; fPz=pz;}
+
+protected:
+ Int_t fTrack; // Track number
+ Float_t fX; // X reference position of the track
+ Float_t fY; // Y reference position of the track
+ Float_t fZ; // Z reference position of the track
+ Float_t fPx; // momentum
+ Float_t fPy; // momentum
+ Float_t fPz; // momentum
+
+ ClassDef(AliTrackReference,1) //Base class for all Alice hits
+};
+#endif
AliRunDigitizer.cxx AliDigitizer.cxx\
AliStream.cxx AliMergeCombi.cxx \
AliMagFMaps.cxx AliFieldMap.cxx \
- AliGausCorr.cxx AliESD.cxx
+ AliGausCorr.cxx AliTrackReference.cxx AliESD.cxx
# C++ Headers
#pragma link C++ class AliMergeCombi+;
#pragma link C++ class AliFieldMap-;
#pragma link C++ class AliGausCorr+;
+#pragma link C++ class AliTrackReference+;
#pragma link C++ class AliESD+;
#pragma link C++ class AliESDTrack+;
#pragma link C++ class AliESDVertex+;