]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMD.h
Using the recommended way of forward declarations for TVector and TMatrix (see v5...
[u/mrichter/AliRoot.git] / FMD / AliFMD.h
index 8abd5bc76fed68b6789cb65c0da78e5c0a98c792..1b14ebdfddd1c30b4089127415051fcd1a1b4c0a 100644 (file)
 #ifndef ALIFMD_H
 #define ALIFMD_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-////////////////////////////////////////////////
-//  Manager and hits classes for set:Si-FMD     //
-////////////////////////////////////////////////
-#include <AliDetector.h>
-#include <TBranch.h>
-#include <AliLoader.h>
-
-#include "AliFMDReconstruction.h"
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
+ * reserved. 
+ *
+ * Latest changes by Christian Holm Christensen <cholm@nbi.dk>
+ *
+ * See cxx source for full Copyright notice                               
+ */
 
+//____________________________________________________________________
+//
+//  Manager class for the FMD - Base class.
+//  AliFMDv1, AliFMDv0, and AliFMDAlla 
+//  provides concrete implementations. 
+//  This class is sooooo crowded
+//
+#ifndef ALIDETECTOR_H 
+# include <AliDetector.h>
+#endif
+#ifndef ROOT_TBranch
+# include <TBranch.h>
+#endif
+class TBranch;
 class TClonesArray;
- class AliFMD : public AliDetector {
+class TBrowser;
+class AliDigitizer;
+#ifdef USE_PRE_MOVE
+class AliFMDSimulator;
+#endif
+class AliFMDHit;
+
+//____________________________________________________________________
+class AliFMD : public AliDetector 
+{
 public:
   AliFMD();
   AliFMD(const char *name, const char *title);
-  virtual       ~AliFMD(); 
-  virtual void   AddHit(Int_t, Int_t*, Float_t*);
-  virtual void   AddDigit(Int_t*);
-   virtual void   BuildGeometry();
-  virtual void   CreateGeometry() {}
-  virtual void   CreateMaterials()=0; 
-  virtual Int_t  DistanceToPrimitive(Int_t px, Int_t py);
-  virtual Int_t  IsVersion() const =0;
+  AliFMD(const AliFMD& other);
+  virtual ~AliFMD(); 
+  AliFMD& operator=(const AliFMD& other);
+  // Use old implementation
+  void UseOld(Bool_t use=kTRUE) { fUseOld = use;  }
+  void UseAssembly(Bool_t use=kTRUE) { fUseAssembly = use; }
+  void UseDetailed(Bool_t use=kTRUE) { fDetailed = use; }
+  
+  // GEometry ANd Tracking (GEANT :-)
+  virtual void   CreateGeometry();
+  virtual void   CreateMaterials(); 
   virtual void   Init();
-  virtual void   MakeBranch(Option_t *opt=" ");
-  virtual void   MakeBranchInTreeD(TTree *treeD, const char *file=0);
-  virtual void   SetTreeAddress();
-  virtual void   ResetHits();
-  virtual void   ResetDigits();
-  virtual void   DrawDetector()=0;
-  virtual void   StepManager() {}
-   
-  void SetEventNumber(Int_t i)     {fEvNrSig = i;}
-  void  Eta2Radius(Float_t, Float_t, Float_t*);
-  virtual void Reconstruct() const{ AliFMDReconstruction reco(GetLoader()->GetRunLoader()); reco.Exec();}
+  virtual void   StepManager() = 0;
+  virtual void   FinishEvent();
+  
+  // Graphics and event display 
+  virtual        void   BuildGeometry();
+  virtual        void   DrawDetector();
+  virtual        Int_t  DistanceToPrimitive(Int_t px, Int_t py);
 
-   // Digitisation
-  TClonesArray *ReconParticles() const {return fReconParticles;}   
-  virtual void SetHitsAddressBranch(TBranch *b){b->SetAddress(&fHits);}
-  virtual AliDigitizer* CreateDigitizer(AliRunDigitizer* manager) const;
+  // Hit and digit management 
+  virtual void          MakeBranch(Option_t *opt=" ");
+  virtual void          SetHitsAddressBranch(TBranch *b);
+  virtual void          SetTreeAddress();
+  virtual TClonesArray* SDigits() { return fSDigits; }        
+  virtual void          ResetSDigits();
+  virtual void          AddHit(Int_t track, Int_t *vol, Float_t *hits);
+  virtual AliFMDHit*    AddHitByFields(Int_t    track, 
+                                      UShort_t detector, 
+                                      Char_t   ring, 
+                                      UShort_t sector, 
+                                      UShort_t strip, 
+                                      Float_t  x=0,
+                                      Float_t  y=0, 
+                                      Float_t  z=0,
+                                      Float_t  px=0, 
+                                      Float_t  py=0, 
+                                      Float_t  pz=0,
+                                      Float_t  edep=0,
+                                      Int_t    pdg=0,
+                                      Float_t  t=0, 
+                                      Float_t  len=0, 
+                                      Bool_t   stopped=kFALSE);
+  virtual        void   AddDigit(Int_t *digits, Int_t* notused=0);
+  virtual        void   AddDigitByFields(UShort_t detector=0, 
+                                        Char_t   ring='\0', 
+                                        UShort_t sector=0, 
+                                        UShort_t strip=0, 
+                                        UShort_t count1=0, 
+                                        Short_t  count2=-1, 
+                                        Short_t  count3=-1);
+  virtual        void   AddSDigit(Int_t *digits);
+  virtual        void   AddSDigitByFields(UShort_t detector=0, 
+                                         Char_t   ring='\0', 
+                                         UShort_t sector=0, 
+                                         UShort_t strip=0, 
+                                         Float_t  edep=0,
+                                         UShort_t count1=0, 
+                                         Short_t  count2=-1, 
+                                         Short_t  count3=-1);
 
- protected:
-//Granularity
-  Int_t fRingsSi1;       // Number of rings
-  Int_t fSectorsSi1;    // Number of sectors
-  Int_t fRingsSi2;       // Number of rings
-  Int_t fSectorsSi2;    // Number of sectors
+  // Digitisation
+  virtual AliDigitizer* CreateDigitizer(AliRunDigitizer* manager) const;
+  virtual        void   Hits2Digits();
+  virtual        void   Hits2SDigits();
 
-  Int_t   fNevents ;        // Number of events to digitize
-  Int_t fEvNrSig;                 // signal     event number
+  // Raw data 
+  virtual        void   Digits2Raw();
 
+  // Utility
+  void   Browse(TBrowser* b);
+protected:
+  TClonesArray*      HitsArray();
+  TClonesArray*      DigitsArray();
+  TClonesArray*      SDigitsArray();
 
-  TClonesArray *fReconParticles;
+  TClonesArray*      fSDigits;              // Summable digits
+  Int_t              fNsdigits;             // Number of digits  
+  Bool_t             fDetailed;             // Use detailed geometry
+  Bool_t             fUseOld;               // Use old approx geometry
+  Bool_t             fUseAssembly;          // Use divided volumes
+  
+  enum {
+    kSiId,                 // ID index of Si medium
+    kAirId,                // ID index of Air medium
+    kPlasticId,            // ID index of Plastic medium
+    kPcbId,                // ID index of PCB medium
+    kSiChipId,             // ID index of Si Chip medium
+    kAlId,                 // ID index of Al medium
+    kCarbonId,             // ID index of Carbon medium
+    kCopperId,             // ID index of Copper Medium
+    kKaptonId              // ID index of Kapton Medium
+  };  
 
- ClassDef(AliFMD,6)  //Class for the FMD detector
+#ifdef USE_PRE_MOVE
+  AliFMDSimulator*   fSimulator;            // Simulator task
+#endif
+  TObjArray*         fBad;                  //! debugging - bad hits 
+  
+  ClassDef(AliFMD,10)     // Base class FMD entry point
 };
-#endif // AliFMD_H
-
 
+#endif
+//____________________________________________________________________
+//
+// Local Variables:
+//   mode: C++
+// End:
+//
+// EOF
+//