Event embedding tasks for PHOS are added (D.Peressounko)
[u/mrichter/AliRoot.git] / PWG4 / UserTasks / PHOS_embedding / AliPHOSDigitDecalibrate.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, 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
17 ///////////////////////////////////////////////////////////////////////////////
18 //                                                                           //
19 //  PHOS tender, recalibrate PHOS clusters                                   //
20 //  and do track matching                                                    //
21 //  Author : Dmitri Peressounko (RRC KI)                                     //
22 //                                                                           //
23 ///////////////////////////////////////////////////////////////////////////////
24
25
26 #include <AliLog.h>
27 #include <AliESDEvent.h>
28 #include <AliAnalysisManager.h>
29 #include <AliTender.h>
30 #include <TH2.h>
31 #include <TROOT.h>
32
33 #include "AliPHOSDigitDecalibrate.h"
34 #include "AliPHOSGeometry.h"
35
36 AliPHOSDigitDecalibrate::AliPHOSDigitDecalibrate() :
37   AliTenderSupply()
38   ,fPHOSGeo(0x0)
39   ,fPHOSCalibData(0x0)
40 {
41         //
42         // default ctor
43         //
44 }
45
46 //_____________________________________________________
47 AliPHOSDigitDecalibrate::AliPHOSDigitDecalibrate(const char *name, const AliTender *tender) :
48   AliTenderSupply(name,tender)
49   ,fPHOSGeo(0x0)
50   ,fPHOSCalibData(0x0)
51 {
52         //
53         // named ctor
54         //
55 }
56
57 //_____________________________________________________
58 AliPHOSDigitDecalibrate::~AliPHOSDigitDecalibrate()
59 {
60   //Destructor
61   for(int m=0; m<5; m++){
62     if(hDec[m]){
63       delete hDec[m];
64       hDec[m]=0;
65     }
66   }
67 }
68
69 //_____________________________________________________
70 void AliPHOSDigitDecalibrate::Init()
71 {
72   //
73   // Initialise PHOS tender
74   //
75     
76
77   
78 }
79
80 //_____________________________________________________
81 void AliPHOSDigitDecalibrate::ProcessEvent()
82 {
83   //Choose PHOS clusters and recalibrate them
84   //that it recalculate energy, position and distance 
85   //to closest track extrapolation      
86
87   AliESDEvent *event=fTender->GetEvent();
88   if (!event) return;
89
90   // Init goemetry
91   if(!fPHOSGeo){
92     fPHOSGeo =  AliPHOSGeometry::GetInstance("IHEP") ;
93   }
94
95
96   AliESDCaloCells * cells = event->GetPHOSCells() ;
97
98   for (Short_t icell = 0; icell < cells->GetNumberOfCells(); icell++) {
99     Short_t id=0;
100     Double_t time=0., amp=0. ;
101     if (cells->GetCell(icell, id, amp, time) != kTRUE)
102       break;
103
104     Int_t relId[4] ;
105     fPHOSGeo->AbsToRelNumbering(id,relId);
106     Int_t   module = relId[0];
107     Int_t   column = relId[3];
108     Int_t   row    = relId[2];
109    
110 //    amp=amp*fPHOSCalibData->GetADCchannelEmc(module,column,row);
111     amp=amp*hDec[module-1]->GetBinContent(row,column);
112
113     cells->SetCell(icell, id, amp, time);     
114
115   }
116
117
118
119
120 }
121 //_____________________________________________________
122 void  AliPHOSDigitDecalibrate::SetDecalibration(Int_t mod, TH2F * dec){
123
124   if(mod<0 || mod>4){
125     printf("Don't know module %d \n",mod) ;
126     return ;
127   }
128   if(dec==0)
129     return ;
130   if(hDec[mod])
131     delete hDec[mod] ;
132   gROOT->cd() ;
133   hDec[mod] = new TH2F(*dec) ;
134   char key[55] ;
135   sprintf(key,"DecalibrationModule%d",mod) ;
136   hDec[mod]->SetName(key) ;
137
138
139
140 }
141