X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITS.h;h=2c5a5729d5ee94a0923c30ce32bb03a00a97bfa7;hb=caa92d6a771153fcce37341b414220bc201e2d78;hp=67f157a822167ebcb81692948f170190cde2f30e;hpb=fe4da5cc22f890b04843f1aebec0f1bf4f9c3fc9;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITS.h b/ITS/AliITS.h index 67f157a8221..2c5a5729d5e 100644 --- a/ITS/AliITS.h +++ b/ITS/AliITS.h @@ -1,79 +1,212 @@ -#ifndef ITS_H -#define ITS_H -//////////////////////////////////////////////// -// Manager and hits classes for set: ITS // -//////////////////////////////////////////////// +#ifndef ALIITS_H +#define ALIITS_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ +/* $Id$ */ + +//////////////////////////////////////////////////////////////////////// +// Manager class for set: ITS // +//////////////////////////////////////////////////////////////////////// + +#include // used in inline function GetModule. +#include // used in inline function SetHitsAddressBranch + +#include "AliRun.h" +#include "AliLoader.h" #include "AliDetector.h" -#include "AliHit.h" -#include "AliDigit.h" +#include "AliITSDetType.h" + +class TString; +class TTree; +class TFile; + +//class AliITSDetType; +class AliITSsimulation; +class AliITSClusterFinder; +class AliITSLoader; +class AliITSsegmentation; +class AliITSresponse; +class AliITShit; +class AliITSgeom; +class AliITSpListItem; +class AliITSdigit; +class AliITSRecPoint; +class AliITSRawCluster; +class AliITSmodule; + +const Int_t kNTYPES=3; class AliITS : public AliDetector { - -protected: - - Bool_t fEuclidOut; - - Int_t fIdSens1; //First layer identifier - Int_t fIdSens2; //Second layer identifier - Int_t fIdSens3; //Third layer identifier - Int_t fIdSens4; //Fourth layer identifier - Int_t fIdSens5; //Fifth layer identifier - Int_t fIdSens6; //Sixth layer identifier - -public: - AliITS(); - AliITS(const char *name, const char *title); - virtual ~AliITS(); - virtual void AddHit(Int_t, Int_t*, Float_t*); - virtual void AddDigit(Int_t*, Int_t*); - virtual void BuildGeometry(); - virtual void CreateGeometry() {} - virtual void CreateMaterials(); - virtual Int_t IsVersion() const =0; - Int_t DistancetoPrimitive(Int_t px, Int_t py); - virtual void Init(); - virtual void MakeBranch(Option_t *opt=" "); - virtual void SetEUCLID(Bool_t euclid=1); - virtual void StepManager()=0; - - ClassDef(AliITS,1) //Hits manager for set:ITS -}; - -//___________________________________________ -class AliITSdigit: public AliDigit { -public: - Int_t fEvent; // Event number - Int_t fLayer; // Layer number - Int_t fDet ; // Detector number - Int_t fNoverl; // Number of overflow - -public: - AliITSdigit() {} - AliITSdigit(Int_t *tracks, Int_t *digits); - virtual ~AliITSdigit() {} - - ClassDef(AliITSdigit,1) //Digit (Header) object for set:ITS -}; - -//___________________________________________ - -class AliITShit : public AliHit { -public: - Int_t fLayer; // Layer number - Int_t fLadder; // Ladder number - Int_t fDet; // Detector number - Float_t fPx ; //PX - Float_t fPy ; //PY - Float_t fPz ; //PZ - Float_t fDestep; // Energy deposited in the current step -public: - AliITShit() {} - AliITShit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits); - virtual ~AliITShit() {} - - ClassDef(AliITShit,1) //Hits object for set:ITS + public: + //================= Standard Classes =============================== + AliITS(); // Default creator. + AliITS(const char *name, const char *title); // standard Creator + virtual ~AliITS(); // destructor + AliITS(AliITS &source); // copy constructor. Not to be used! + AliITS& operator=(AliITS &source); // = operator. Not to be used! + virtual Int_t IsVersion() const {return 1;} + virtual Int_t DistancetoPrimitive(Int_t px, Int_t py); + + //===================== Simulation Geometry ======================== + // get geometry version - detailed (major) or coarse (minor) + virtual Int_t GetMajorVersion(){return -1;} + virtual Int_t GetMinorVersion(){return -1;} + virtual void GetGeometryVersion(Int_t &a,Int_t &b) + {a = GetMajorVersion();b=GetMinorVersion();return;} + virtual void SetEUCLID(Bool_t euclid=1) {fEuclidOut = euclid;} + //-------------------- Geometry Transformations -------------------- + // ITS geometry functions + AliITSgeom *GetITSgeom() const {return fITSgeom;} + // Sets ITS geometry ! be very careful using this function. + void SetITSgeom(AliITSgeom *geom) {fITSgeom = geom;} + // return pointer to the array of modules + TObjArray *GetModules() const {return fITSmodules;} + // return pointer to a particular module + AliITSmodule *GetModule(Int_t index) {return (AliITSmodule *) + (fITSmodules->At(index));} + + //================ Necessary general Classes ======================= + virtual void Init(); + virtual AliLoader* MakeLoader(const char* topfoldername); + virtual void SetDefaults(); + virtual void SetDefaultSimulation(); + virtual void SetDefaultClusterFinders(); + virtual void MakeBranch(Option_t *opt=" "); + virtual void SetTreeAddress(); + // For a give branch from the treeH sets the TClonesArray address. + virtual void SetHitsAddressBranch(TBranch *b){b->SetAddress(&fHits);} + // Return pointer to DetType #id + AliITSDetType *DetType(Int_t id); + //Int_t NDetTypes() {return fNDetTypes;} + //---------- Configuration Methods (per detector type) ------------- + // Determines which ITS subdetectors will be processed. Effects + // digitization, and Reconstruction only. + void SetDetectors(Option_t *opt="All"){fOpt = opt;} + // Returns the list of ITS subdetectors that will be processed. + Option_t* GetDetectors(){return fOpt;} + // Set response + virtual void SetResponseModel(Int_t id, AliITSresponse *response); + // Set segmentation + virtual void SetSegmentationModel(Int_t id, AliITSsegmentation *seg); + // Set simulation - temporary + virtual void SetSimulationModel(Int_t id, AliITSsimulation *sim); + // Set simulation - temporary + virtual AliITSsimulation* GetSimulationModel(Int_t id){ + return ((AliITSDetType*)(fDetTypes->At(id)))->GetSimulationModel();} + // Set reconstruction + virtual void SetReconstructionModel(Int_t id, AliITSClusterFinder *rec); + // Set class names for digit and rec point + virtual void SetClasses(Int_t id, const char *digit, const char *cluster); + + //=================== Hits ========================================= + virtual void StepManager() {} // See Step Manager for specific geometry. + virtual void AddHit(Int_t track, Int_t *vol, Float_t *hits); + //------------ sort hits by module for Digitisation ---------------- + virtual void InitModules(Int_t size,Int_t &nmodules); + virtual void FillModules(TTree *treeH, Int_t mask = 0); + virtual void FillModules(Int_t evnt,Int_t bgrev,Int_t nmodules, + Option_t *opt,Text_t *filename); + virtual void ClearModules(); + + //===================== Digitisation =============================== + void MakeBranchS(const char *file); + void SetTreeAddressS(TTree *treeS); + TClonesArray * GetSDigits() { return fSDigits; } + void MakeBranchInTreeD(TTree *treeD,const char *file=0); + void MakeBranchD(const char *file){ + MakeBranchInTreeD(gAlice->TreeD(),file);} + void SetTreeAddressD(TTree *treeD); + void Hits2SDigits(); // Turn hits into SDigits + void Hits2PreDigits(); // Turn hits into SDigits + void SDigits2Digits(){SDigitsToDigits("All");} // Turn SDigits to Digits + void SDigitsToDigits(Option_t *opt="All"); // Turn SDigits to Digits + void Hits2Digits(); // Turn hits straight into Digits. + //------------------ Internal functions ---------------------------- + // Standard Hits To SDigits function + void HitsToSDigits(Int_t evNumber,Int_t bgrev,Int_t size, + Option_t *add, Option_t *det, Text_t *filename); + // Standard Hits To SDigits function + void HitsToPreDigits(Int_t evNumber,Int_t bgrev,Int_t size, + Option_t *add, Option_t *det, Text_t *filename); + // Standard Hits To Digits function + void HitsToDigits(Int_t evNumber,Int_t bgrev,Int_t size, + Option_t *add, Option_t *det, Text_t *filename); + void ResetSDigits(); // Resets the Summable digits. + void ResetDigits(); // depending on how the + void ResetDigits(Int_t branch); // tree will be filled only + void AddSumDigit(AliITSpListItem &sdig); + void AddRealDigit(Int_t branch, Int_t *digits); + void AddSimDigit(Int_t branch, AliITSdigit *d); + void AddSimDigit(Int_t branch,Float_t phys,Int_t* digits, + Int_t* tracks,Int_t *hits,Float_t* trkcharges); + // Return pointers to digits + TObjArray *Dtype() {return fDtype;} + Int_t *Ndtype() {return fNdtype;} + TClonesArray *DigitsAddress(Int_t id) + {return ((TClonesArray *) (*fDtype)[id]);} + + //===================== Raw Data IO ================================ + // Write digits into raw data format + virtual void Digits2RawData() {} + // Decode raw data and store digits + virtual void RawData2Digits() {} + + //==================== Clusterization ============================== + // create separate tree for clusters - declustering refining + void MakeTreeC(Option_t *option="C"); + void GetTreeC(Int_t event); + void AddCluster(Int_t branch, AliITSRawCluster *c); + void ResetClusters(); // one of the methods in + void ResetClusters(Int_t branch); // the pair will be kept + // Return pointers to clusters + TObjArray *Ctype() {return fCtype;} + Int_t *Nctype() {return fNctype;} + TClonesArray *ClustersAddress(Int_t id) + {return ((TClonesArray *) (*fCtype)[id]);} + + //=================== Reconstruction =============================== + void MakeBranchR(const char *file, Option_t *opt=" "); + void MakeBranchRF(const char *file){MakeBranchR(file,"Fast");} + void MakeBranchC(); + void SetTreeAddressR(TTree *treeR); + void AddRecPoint(const AliITSRecPoint &p); + void HitsToFastRecPoints(Int_t evNumber,Int_t bgrev,Int_t size, + Option_t *add, Option_t *det, Text_t *filename); + void Digits2Reco(); + void DigitsToRecPoints(Int_t evNumber,Int_t lastEntry,Option_t *det); + void ResetRecPoints(); + // Return pointer to rec points + TClonesArray *RecPoints() {return fRecPoints;} + + protected: + //================== Data Members ================================== + AliITSgeom *fITSgeom; // Pointer to ITS geometry + Bool_t fEuclidOut; // Flag to write geometry in euclid format + TObjArray *fITSmodules; //! Pointer to ITS modules + Option_t *fOpt; //! Detector option ="All" unless changed. + + Int_t fIdN; // the number of layers + Int_t *fIdSens; //[fIdN] layer identifier + TString *fIdName; //[fIdN] layer identifier + + Int_t fNDetTypes; // Number of detector types + TObjArray *fDetTypes; // List of detector types + + TClonesArray *fSDigits; //! List of Summable digits. + Int_t fNSDigits; // Number of Summable Digits. + + TObjArray *fDtype; //! List of digits + Int_t *fNdtype; //[fNDetTypes] Num. of digits per type of det. + + TObjArray *fCtype; //! List of clusters + Int_t *fNctype; //[fNDetTypes] Num. of clust. per type of det. + + TClonesArray *fRecPoints; //! List of reconstructed points + Int_t fNRecPoints; // Number of rec points + + ClassDef(AliITS,3) // Base class for ITS }; - + #endif