]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSPlaneEffSSD.h
Plane Efficiency framework upgrade: possibility to create histograms with residuals...
[u/mrichter/AliRoot.git] / ITS / AliITSPlaneEffSSD.h
1 #ifndef ALIITSPLANEEFFSSD_H
2 #define ALIITSPLANEEFFSSD_H
3 /* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 #include <TH1F.h>
7 #include <TH2I.h>
8 #include "AliITSPlaneEff.h"
9
10 ///////////////////////////////////////////
11 //                                       //
12 // ITS Plane Efficiency class            //
13 //       for SSD                         //
14 // Origin: Giuseppe.Bruno@ba.infn.it     //
15 ///////////////////////////////////////////
16
17 /* $Id$ */
18   
19 class AliITSPlaneEffSSD :  public AliITSPlaneEff {
20  public:
21     AliITSPlaneEffSSD(); // default constructor
22     virtual ~AliITSPlaneEffSSD(); // destructror
23     // copy constructor
24     AliITSPlaneEffSSD(const AliITSPlaneEffSSD &source);
25     // ass. operator
26     AliITSPlaneEffSSD& operator=(const AliITSPlaneEffSSD &s);
27     virtual AliITSPlaneEff& operator=(const AliITSPlaneEff &source);
28     // Simple way to add another class (i.e. statistics). 
29     AliITSPlaneEffSSD& operator +=( const AliITSPlaneEffSSD &add);
30     // Getters for average Plane efficiency (icluding dead/noisy)
31     Double_t PlaneEff(const UInt_t mod) const;
32     Double_t ErrPlaneEff(const UInt_t mod) const;
33     // Methods to update the Plane efficiency (specific of the SSD segmentation) 
34     Bool_t UpDatePlaneEff(const Bool_t Kfound, const UInt_t mod);
35     //
36     enum {kNModule = 1698}; // The number of modules
37     enum {kNChip = 6}; // The number of chips per side of a module (2 sides: 12 chips)
38     enum {kNSide = 2}; // The number of sides of a module (p and n side)
39     enum {kNStrip = 128}; // The number of strips per chip (in a module 2*768 strips)
40     //
41     enum {kNHisto = kNModule}; // The number of histograms: module by module.
42     //enum {kNclu = 3};          // Build specific histos of residuals up to cluster size kNclu.
43                                // If you change them, then you must change implementation of
44                                // the method FillHistos.
45 //
46 //  Plane efficiency for active  detector (excluding dead/noisy channels)
47 //  access to DB is needed
48     virtual Double_t LivePlaneEff(UInt_t mod) const;
49     virtual Double_t ErrLivePlaneEff(UInt_t mod) const;
50     // Compute the fraction of Live area (of the module for the SSD)
51     virtual Double_t GetFracLive(const UInt_t mod) const;
52     // Compute the fraction of bad (i.e. dead and noisy) area (of the module for the SSD)
53     virtual Double_t GetFracBad(const UInt_t mod) const;
54     virtual Bool_t WriteIntoCDB() const;
55     virtual Bool_t ReadFromCDB(); // this method reads Data Members (statistics) from DataBase
56     virtual Bool_t AddFromCDB()   // this method updates Data Members (statistics) from DataBase
57       {AliError("AddFromCDB: Still To be implemented"); return kFALSE;}
58    // method to locate a basic block from Detector Local coordinate (to be used in tracking)
59    // see file cxx for numbering convention.
60    // here idet runs from 0 to 747 for layer 4 and from 0 to 949 for layer 5
61     UInt_t GetKeyFromDetLocCoord(Int_t ilay,Int_t idet, Float_t, Float_t locz) const;
62     UInt_t Nblock() const; // return the number of basic blocks
63    // compute the geometrical limit of a basic block (chip) in detector local coordinate system
64     Bool_t GetBlockBoundaries(const UInt_t key,Float_t& xmn,Float_t& xmx,Float_t& zmn,Float_t& zmx) const;
65   // Methods for dealing with auxiliary histograms
66     // method to set on/off the creation/updates of histograms (Histos are created/destroyed)
67     void   SetCreateHistos(Bool_t his=kFALSE)
68          {fHis=his; if(fHis) {DeleteHistos(); InitHistos();} else DeleteHistos(); return; }
69     Bool_t FillHistos(UInt_t key, Bool_t found, Float_t trackXZ[2], Float_t clusterXZ[2], Int_t ctXZ[2]);
70     Bool_t WriteHistosToFile(TString filename="PlaneEffSSDHistos.root",Option_t* option = "RECREATE");
71     Bool_t ReadHistosFromFile(TString filename="PlaneEffSSDHistos.root"); // histos must exist already !
72                                                                           // This method increases the
73                                                                           // statistics of histos by adding
74                                                                           // those of the input file.
75  protected:
76     virtual void Copy(TObject &obj) const;
77     void CopyHistos(AliITSPlaneEffSSD& target) const; // copy only histograms to target
78     Int_t GetMissingTracksForGivenEff(Double_t eff, Double_t RelErr, UInt_t im) const;
79
80 // 
81     Int_t fFound[kNModule];  // number of associated clusters in a given module
82     Int_t fTried[kNModule];  // number of tracks used for module efficiency evaluation
83 //
84     TH1F **fHisResX; //! histos with residual distribution (track-cluster) along local X (r-phi)
85     TH1F **fHisResZ; //! histos with residual distribution (track-cluster) along local Z
86     TH2F **fHisResXZ; //! 2-d histos with residual distribution (track-cluster) along local X and Z
87     TH2I **fHisClusterSize; //! histos with cluster-size distribution
88  private:
89     UInt_t GetKey(const UInt_t mod) const; // unique key to locate the basic 
90                                            // block of the SSD (the module itself)
91     UInt_t GetModFromKey(const UInt_t key) const;
92     void GetBadInModule(const UInt_t mod, UInt_t& bad) const;
93     void InitHistos();
94     void DeleteHistos();
95
96     ClassDef(AliITSPlaneEffSSD,2) // SSD Plane Efficiency class
97 };
98 //
99 inline UInt_t AliITSPlaneEffSSD::Nblock() const {return kNModule;}
100 inline Bool_t AliITSPlaneEffSSD::GetBlockBoundaries(const UInt_t key,Float_t& xmn,Float_t& xmx,
101                                                     Float_t& zmn,Float_t& zmx) const {
102 //  This method return the geometrical boundaries of the active volume of a given
103 //  basic block, in the detector reference system.
104 //
105 if(key>=kNModule)
106   {AliWarning("GetBlockBoundaries: you asked for a non existing key"); return kFALSE;}
107 const Float_t kDxDefault = 72960.; // For Plane Eff. purpouses, default values 
108 const Float_t kDzDefault = 40000.; // are precise enough !!!
109 const Float_t kconv = 1.0E-04;  //converts microns to cm.
110 xmn=-kconv*kDxDefault/2.; xmx=kconv*kDxDefault/2.;
111 zmn=-kconv*kDzDefault/2.; zmx=kconv*kDzDefault/2.;
112 return kTRUE;
113 }
114 //
115 #endif
116