ROOT logo
#ifndef ALIITSDETTYPEREC_H
#define ALIITSDETTYPEREC_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/*
$Id$ 
*/

////////////////////////////////////////////////////////////////////////
// This class contains all of the "external" information needed to do //
// detector specific reconstruction for the ITS.                      //
////////////////////////////////////////////////////////////////////////
#include <TObject.h>
#include <TClonesArray.h>
#include <TBits.h>

class TObjArray;
class TTree;
class TBranch;
class AliITSgeom;
class AliITSsegmentation;
class AliITSCalibration;
class AliITSCalibrationSSD;
class AliITSresponseSDD;
class AliITSClusterFinder;
class AliITSRecPoint;
class AliRawReader;
class AliITSGainSSDv2;
class AliITSBadChannelsSSDv2;
class AliITSDDLModuleMapSDD;
class AliITSNoiseSSDv2;
class AliITSTriggerConditions;
class AliITSFOSignalsSPD;
class AliITSRecPointContainer;

class AliITSDetTypeRec : public TObject {
  public:
    AliITSDetTypeRec(); // Default constructor
 
    virtual ~AliITSDetTypeRec(); // Proper Destructor

    virtual AliITSgeom* GetITSgeom() const { return fITSgeom; }
    virtual void SetITSgeom(AliITSgeom* const geom) { fITSgeom = geom; }
    virtual void SetDefaults();
    virtual void SetDefaultClusterFindersV2(Bool_t rawdata=kFALSE,Bool_t fastSDD=kFALSE);
    virtual void MakeBranch(TTree *tree,Option_t *opt);
    virtual void SetTreeAddressD(TTree* const treeD);

    virtual void SetSegmentationModel(Int_t dettype, AliITSsegmentation *seg);
    virtual void SetCalibrationModel(Int_t iMod, AliITSCalibration *cal);
    virtual void SetSPDDeadModel(Int_t iMod, AliITSCalibration *cal);
    virtual void SetSPDSparseDeadModel(Int_t iMod, AliITSCalibration *cal);
    virtual void SetReconstructionModel(Int_t dettype, AliITSClusterFinder *rec);
    virtual Bool_t GetCalibration();
    virtual AliITSsegmentation* GetSegmentationModel(Int_t dettype) const;
    virtual AliITSCalibration* GetCalibrationModel(Int_t iMod) const;
    virtual AliITSCalibration* GetSPDDeadModel(Int_t iMod) const;
    virtual AliITSCalibration* GetSPDSparseDeadModel(Int_t iMod) const;
    virtual AliITSTriggerConditions* GetTriggerConditions() const;
    virtual AliITSClusterFinder* GetReconstructionModel(Int_t dettype) const;
    virtual AliITSDDLModuleMapSDD* GetDDLModuleMapSDD() const { return fDDLMapSDD;}
    virtual AliITSresponseSDD* GetResponseSDD() const { return fRespSDD;}
    virtual Float_t GetAverageGainSDD() const {
      if(fAveGainSDD>0.) return fAveGainSDD;
      else return 1.;
    }

    virtual void SetDigitClassName(Int_t i,const Char_t *digit) 
      {fkDigClassName[i]=digit;}
    
    virtual void SetLoadOnlySPDCalib(Bool_t opt=kFALSE)
      {fLoadOnlySPDCalib=opt;}

    const Char_t* GetDigitClassName(Int_t i) const {return fkDigClassName[i];}
    
    TObjArray* GetDigits() const {return fDigits;} 
    TClonesArray *DigitsAddress(Int_t id) const {return ((TClonesArray*)(*fDigits)[id]);}

        AliITSFOSignalsSPD* GetFOSignals() const {return fFOSignals;}
    
    TBranch* MakeBranchInTree(TTree* const tree, const char* name, const char *classname, void* address,Int_t size, Int_t splitlevel);

    virtual void ResetDigits();
    virtual void ResetDigits(Int_t branch);

    void MakeBranchR(TTree *treeR,Option_t *opt=" ");
    void SetTreeAddressR(TTree* const treeR);
    void AddRecPoint(const AliITSRecPoint &p);
    void MakeBranchRF(TTree *treeR){MakeBranchR(treeR,"Fast");}
    void DigitsToRecPoints(TTree *treeD,TTree *treeR,Int_t lastEntry,Option_t *det, Int_t optCluFind=0);
    void DigitsToRecPoints(AliRawReader* rawReader,TTree *treeR,Option_t *det="All");
    void DigitsToRecPoints(AliRawReader* rawReader,Option_t *opt);

    void   SetFastOrFiredMapOnline(UInt_t eq, UInt_t hs, UInt_t chip);
    void   SetFastOrFiredMap(UInt_t chipKey){fFastOrFiredMap.SetBitNumber(chipKey);} 
    TBits  GetFastOrFiredMap() const {return fFastOrFiredMap;}
    TBits  GetFiredChipMap() const; // (using SPD RecPoints)
    TBits  GetFiredChipMap(TTree *treeR) const; // (using SPD RecPoints)
    void   ResetFastOrFiredMap(){fFastOrFiredMap.ResetAllBits();}
    void   RemoveFastOrFiredInActive(); // (using Trigger Conditions)
    void   RemoveFastOrFiredFromDead(TBits firedchipmap); // (using SPD RecPoints)
   
    
  private:
    // private methods
    AliITSDetTypeRec(const AliITSDetTypeRec& rec);
    AliITSDetTypeRec& operator=(const AliITSDetTypeRec &source);
 
    //conversion of the old SSD calibration objects tothe new ones
    void ReadOldSSDNoise(const TObjArray *array, 
			 AliITSNoiseSSDv2 *noiseSSD);
    void ReadOldSSDBadChannels(const TObjArray *array, 
			       AliITSBadChannelsSSDv2 *badChannelsSSD);
    void ReadOldSSDGain(const TObjArray *array, 
			AliITSGainSSDv2 *gainSSD);
    virtual Bool_t GetCalibrationSPD(Bool_t cacheStatus);
    virtual Bool_t GetCalibrationSDD(Bool_t cacheStatus);
    virtual Bool_t GetCalibrationSSD(Bool_t cacheStatus);
    void ResetRecPoints(){if(fRecPoints) fRecPoints->Clear();fNRecPoints = 0;};

    //    virtual void SetLoader(AliITSLoader* loader) {fLoader=loader;}
    static const Int_t fgkNdettypes;          // number of det. types
    static const Int_t fgkDefaultNModulesSPD; // Total numbers of SPD modules by default
    static const Int_t fgkDefaultNModulesSDD; // Total numbers of SDD modules by default
    static const Int_t fgkDefaultNModulesSSD; // Total numbers of SSD modules by default
    Int_t *fNMod;     // numbers of modules from different types

    AliITSgeom   *fITSgeom;       //! ITS geometry

    TObjArray    *fReconstruction;//! [NDet]
    TObjArray    *fSegmentation;  //! [NDet]
    TObjArray    *fCalibration;   //! [NMod]
    AliITSCalibrationSSD* fSSDCalibration;  //! SSD calibration object
    TObjArray    *fSPDDead;       //! [fgkDefaultNModulesSPD]
    TObjArray    *fSPDSparseDead;       //! [fgkDefaultNModulesSPD]
    AliITSTriggerConditions *fTriggerConditions; //! PIT conditions object
    TObjArray    *fDigits;        //! [NMod][NDigits]
    AliITSFOSignalsSPD *fFOSignals; //! Fast-Or signals (used when reconstructing from digits)
    AliITSDDLModuleMapSDD *fDDLMapSDD; //! mapping DDL/module -> SDD module number
    AliITSresponseSDD *fRespSDD;  //! SDD response parameters 
    Float_t       fAveGainSDD;    //! Average gain of SDD good anodes
    const Char_t*       fkDigClassName[3];     //! String with digit class name.


    TClonesArray *fRecPoints;  //! List of reconstructed points
    Int_t         fNRecPoints; // Number of rec points

    Bool_t fFirstcall;         //! flag
    Bool_t fLoadOnlySPDCalib;  //! flag for loading calibrations only fr SPD

    TBits fFastOrFiredMap;     //! Map of FastOr fired chips (after processing of raw signals)

    ClassDef(AliITSDetTypeRec,20) // ITS Reconstruction structure
};

#endif

 AliITSDetTypeRec.h:1
 AliITSDetTypeRec.h:2
 AliITSDetTypeRec.h:3
 AliITSDetTypeRec.h:4
 AliITSDetTypeRec.h:5
 AliITSDetTypeRec.h:6
 AliITSDetTypeRec.h:7
 AliITSDetTypeRec.h:8
 AliITSDetTypeRec.h:9
 AliITSDetTypeRec.h:10
 AliITSDetTypeRec.h:11
 AliITSDetTypeRec.h:12
 AliITSDetTypeRec.h:13
 AliITSDetTypeRec.h:14
 AliITSDetTypeRec.h:15
 AliITSDetTypeRec.h:16
 AliITSDetTypeRec.h:17
 AliITSDetTypeRec.h:18
 AliITSDetTypeRec.h:19
 AliITSDetTypeRec.h:20
 AliITSDetTypeRec.h:21
 AliITSDetTypeRec.h:22
 AliITSDetTypeRec.h:23
 AliITSDetTypeRec.h:24
 AliITSDetTypeRec.h:25
 AliITSDetTypeRec.h:26
 AliITSDetTypeRec.h:27
 AliITSDetTypeRec.h:28
 AliITSDetTypeRec.h:29
 AliITSDetTypeRec.h:30
 AliITSDetTypeRec.h:31
 AliITSDetTypeRec.h:32
 AliITSDetTypeRec.h:33
 AliITSDetTypeRec.h:34
 AliITSDetTypeRec.h:35
 AliITSDetTypeRec.h:36
 AliITSDetTypeRec.h:37
 AliITSDetTypeRec.h:38
 AliITSDetTypeRec.h:39
 AliITSDetTypeRec.h:40
 AliITSDetTypeRec.h:41
 AliITSDetTypeRec.h:42
 AliITSDetTypeRec.h:43
 AliITSDetTypeRec.h:44
 AliITSDetTypeRec.h:45
 AliITSDetTypeRec.h:46
 AliITSDetTypeRec.h:47
 AliITSDetTypeRec.h:48
 AliITSDetTypeRec.h:49
 AliITSDetTypeRec.h:50
 AliITSDetTypeRec.h:51
 AliITSDetTypeRec.h:52
 AliITSDetTypeRec.h:53
 AliITSDetTypeRec.h:54
 AliITSDetTypeRec.h:55
 AliITSDetTypeRec.h:56
 AliITSDetTypeRec.h:57
 AliITSDetTypeRec.h:58
 AliITSDetTypeRec.h:59
 AliITSDetTypeRec.h:60
 AliITSDetTypeRec.h:61
 AliITSDetTypeRec.h:62
 AliITSDetTypeRec.h:63
 AliITSDetTypeRec.h:64
 AliITSDetTypeRec.h:65
 AliITSDetTypeRec.h:66
 AliITSDetTypeRec.h:67
 AliITSDetTypeRec.h:68
 AliITSDetTypeRec.h:69
 AliITSDetTypeRec.h:70
 AliITSDetTypeRec.h:71
 AliITSDetTypeRec.h:72
 AliITSDetTypeRec.h:73
 AliITSDetTypeRec.h:74
 AliITSDetTypeRec.h:75
 AliITSDetTypeRec.h:76
 AliITSDetTypeRec.h:77
 AliITSDetTypeRec.h:78
 AliITSDetTypeRec.h:79
 AliITSDetTypeRec.h:80
 AliITSDetTypeRec.h:81
 AliITSDetTypeRec.h:82
 AliITSDetTypeRec.h:83
 AliITSDetTypeRec.h:84
 AliITSDetTypeRec.h:85
 AliITSDetTypeRec.h:86
 AliITSDetTypeRec.h:87
 AliITSDetTypeRec.h:88
 AliITSDetTypeRec.h:89
 AliITSDetTypeRec.h:90
 AliITSDetTypeRec.h:91
 AliITSDetTypeRec.h:92
 AliITSDetTypeRec.h:93
 AliITSDetTypeRec.h:94
 AliITSDetTypeRec.h:95
 AliITSDetTypeRec.h:96
 AliITSDetTypeRec.h:97
 AliITSDetTypeRec.h:98
 AliITSDetTypeRec.h:99
 AliITSDetTypeRec.h:100
 AliITSDetTypeRec.h:101
 AliITSDetTypeRec.h:102
 AliITSDetTypeRec.h:103
 AliITSDetTypeRec.h:104
 AliITSDetTypeRec.h:105
 AliITSDetTypeRec.h:106
 AliITSDetTypeRec.h:107
 AliITSDetTypeRec.h:108
 AliITSDetTypeRec.h:109
 AliITSDetTypeRec.h:110
 AliITSDetTypeRec.h:111
 AliITSDetTypeRec.h:112
 AliITSDetTypeRec.h:113
 AliITSDetTypeRec.h:114
 AliITSDetTypeRec.h:115
 AliITSDetTypeRec.h:116
 AliITSDetTypeRec.h:117
 AliITSDetTypeRec.h:118
 AliITSDetTypeRec.h:119
 AliITSDetTypeRec.h:120
 AliITSDetTypeRec.h:121
 AliITSDetTypeRec.h:122
 AliITSDetTypeRec.h:123
 AliITSDetTypeRec.h:124
 AliITSDetTypeRec.h:125
 AliITSDetTypeRec.h:126
 AliITSDetTypeRec.h:127
 AliITSDetTypeRec.h:128
 AliITSDetTypeRec.h:129
 AliITSDetTypeRec.h:130
 AliITSDetTypeRec.h:131
 AliITSDetTypeRec.h:132
 AliITSDetTypeRec.h:133
 AliITSDetTypeRec.h:134
 AliITSDetTypeRec.h:135
 AliITSDetTypeRec.h:136
 AliITSDetTypeRec.h:137
 AliITSDetTypeRec.h:138
 AliITSDetTypeRec.h:139
 AliITSDetTypeRec.h:140
 AliITSDetTypeRec.h:141
 AliITSDetTypeRec.h:142
 AliITSDetTypeRec.h:143
 AliITSDetTypeRec.h:144
 AliITSDetTypeRec.h:145
 AliITSDetTypeRec.h:146
 AliITSDetTypeRec.h:147
 AliITSDetTypeRec.h:148
 AliITSDetTypeRec.h:149
 AliITSDetTypeRec.h:150
 AliITSDetTypeRec.h:151
 AliITSDetTypeRec.h:152
 AliITSDetTypeRec.h:153
 AliITSDetTypeRec.h:154
 AliITSDetTypeRec.h:155
 AliITSDetTypeRec.h:156
 AliITSDetTypeRec.h:157
 AliITSDetTypeRec.h:158