]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - ITS/AliITSMapSDD.cxx
Reverting the previous mods as they cause a segmentation violation
[u/mrichter/AliRoot.git] / ITS / AliITSMapSDD.cxx
... / ...
CommitLineData
1/**************************************************************************
2 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id$ */
17
18///////////////////////////////////////////////////////////////////
19// //
20// Implementation of the base class for SDD map corrections //
21// Origin: F.Prino, Torino, prino@to.infn.it //
22// //
23///////////////////////////////////////////////////////////////////
24
25#include "TH1F.h"
26#include "TH2F.h"
27#include "AliITSMapSDD.h"
28#include "AliITSCorrMap1DSDD.h"
29
30ClassImp(AliITSMapSDD)
31//______________________________________________________________________
32AliITSMapSDD::AliITSMapSDD():TNamed("defaultmap","")
33{
34 // default constructor
35 for(Int_t iAn=0;iAn<fgkNAnodPts; iAn++){
36 for(Int_t iDr=0;iDr<fgkNDrifPts; iDr++){
37 fMap[iAn][iDr]=0;
38 }
39 }
40}
41//______________________________________________________________________
42AliITSMapSDD::AliITSMapSDD(Char_t *mapname):TNamed(mapname,"")
43{
44 // standard constructor
45 for(Int_t iAn=0;iAn<fgkNAnodPts; iAn++){
46 for(Int_t iDr=0;iDr<fgkNDrifPts; iDr++){
47 fMap[iAn][iDr]=0;
48 }
49 }
50}
51
52//______________________________________________________________________
53void AliITSMapSDD::SetMap(TH2F* hmap){
54 // Fill map staring from 2D histo
55 // with anodes on x axis and drift dist. on y axis
56 for(Int_t iAn=0;iAn<fgkNAnodPts; iAn++){
57 for(Int_t iDr=0;iDr<fgkNDrifPts; iDr++){
58 SetCellContent(iAn,iDr,hmap->GetBinContent(iAn+1,iDr+1));
59 }
60 }
61}
62//______________________________________________________________________
63Float_t AliITSMapSDD::GetCorrection(Float_t z, Float_t x, AliITSsegmentationSDD *seg){
64 // returns correction in cm starting from local coordinates on the module
65 const Double_t kMicronTocm = 1.0e-4;
66 Int_t nAnodes=seg->Npz();
67 Int_t nAnodesHybrid=seg->NpzHalf();
68 Int_t bina =(Int_t) seg->GetAnodeFromLocal(x,z);
69 if(bina>nAnodes) AliError("Wrong anode anumber!");
70 if(bina>=nAnodesHybrid) bina-=nAnodesHybrid;
71 Float_t stept = seg->Dx()*kMicronTocm/(Float_t)fgkNDrifPts;
72 Int_t bint = TMath::Abs((Int_t)(x/stept));
73 if(bint==fgkNDrifPts) bint-=1;
74 if(bint>=fgkNDrifPts) AliError("Wrong bin number along drift direction!");
75 return kMicronTocm*GetCellContent(bina,bint);
76}
77//______________________________________________________________________
78TH2F* AliITSMapSDD::GetMapHisto() const{
79 // Returns a TH2F histogram with map of residuals
80 Char_t hname[50];
81 sprintf(hname,"h%s",GetName());
82 TH2F* hmap=new TH2F(hname,"",fgkNAnodPts,-0.5,255.5,fgkNDrifPts,0.,35.);
83 for(Int_t iAn=0;iAn<fgkNAnodPts; iAn++){
84 for(Int_t iDr=0;iDr<fgkNDrifPts; iDr++){
85 hmap->SetBinContent(iAn+1,iDr+1,GetCellContent(iAn,iDr));
86 }
87 }
88 return hmap;
89}
90//______________________________________________________________________
91TH1F* AliITSMapSDD::GetResidualDistr(Float_t dmin, Float_t dmax) const{
92 // Returns a TH1F histogram with distribution of residual
93 Char_t hname[50];
94 sprintf(hname,"hd%s",GetName());
95 TH1F* hd=new TH1F(hname,"",100,dmin,dmax);
96 for(Int_t iAn=0;iAn<fgkNAnodPts; iAn++){
97 for(Int_t iDr=0;iDr<fgkNDrifPts; iDr++){
98 hd->Fill(GetCellContent(iAn,iDr));
99 }
100 }
101 return hd;
102}
103//______________________________________________________________________
104AliITSCorrMapSDD* AliITSMapSDD::ConvertToNewFormat() const{
105 // convert correction map to new format
106 Char_t* name=(Char_t*)GetName();
107 AliITSCorrMapSDD* newmap=new AliITSCorrMap1DSDD(name,fgkNDrifPts);
108 for(Int_t i=0; i<fgkNDrifPts; i++){
109 newmap->SetCellContent(0,i,GetCellContent(0,i));
110 }
111 return newmap;
112}
113