]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PHOS/AliPHOSCpvDA1.cxx
TPCNoiseMapComponent included into build (Kelly)
[u/mrichter/AliRoot.git] / PHOS / AliPHOSCpvDA1.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2008, 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 // Class AliPHOSCpvDA1 accumulates histograms with amplitudes per CPV channel.
18 // It is intended to run at DAQ or HLT computers.
19 // Author: Boris Polishchuk, 25 January 2008.
20 ///////////////////////////////////////////////////////////////////////////////
21
22 #include "AliPHOSCpvDA1.h"
23 #include "TString.h"
24
25 ClassImp(AliPHOSCpvDA1)
26
27 //----------------------------------------------------------------
28 AliPHOSCpvDA1::AliPHOSCpvDA1(int module) : TNamed(),
29  fHistoFile(0),fMod(module)
30
31 {
32   // Create DA1 ("Calibration DA") object.
33   // module is the CPV module number (0..4).
34   // Checks existence of histograms which might have been left
35   // from the previous runs to continue their filling.
36   // Histogram names: module_iX_iZ.
37   // Root file name: CPV_ModuleX_Calib.root, where X - module number.
38   
39   char name[128];
40   sprintf(name,"CPV_Module%d_Calib",fMod);
41   SetName(name);
42
43   char title[128];
44   sprintf(title,"Calibration Detector Algorithm for CPV module %d",fMod);
45   SetTitle(title);
46
47   char rootname[128];
48   sprintf(rootname,"%s.root",GetName());
49
50   fHistoFile =  new TFile(rootname,"update");
51
52   char hname[128];
53   TH1F* hist1=0;
54
55   for(Int_t iX=0; iX<128; iX++) {
56     for(Int_t iZ=0; iZ<56; iZ++) {
57
58       sprintf(hname,"%d_%d_%d",fMod,iX,iZ);
59       hist1 = (TH1F*)fHistoFile->Get(hname);
60       if(hist1) fCharge[iX][iZ] = hist1;
61       else
62         fCharge[iX][iZ] = 0;
63     }
64   }
65  
66 }
67
68 //-------------------------------------------------------------------
69 AliPHOSCpvDA1::AliPHOSCpvDA1(const AliPHOSCpvDA1& da) : TNamed(da),
70   fHistoFile(0),fMod(da.fMod)
71 {
72   // Copy constructor.
73
74   fHistoFile = new TFile(da.GetName(),"update");
75
76   char hname[128];
77   TH1F* hist1=0;
78
79   for(Int_t iX=0; iX<128; iX++) {
80     for(Int_t iZ=0; iZ<56; iZ++) {
81
82       sprintf(hname,"%d_%d_%d",fMod,iX,iZ);
83       hist1 = (TH1F*)da.fHistoFile->Get(hname);
84       if(hist1) fCharge[iX][iZ] = new TH1F(*hist1);
85       else
86         fCharge[iX][iZ] = 0;
87     }
88   }
89   
90 }
91
92 //-------------------------------------------------------------------
93 AliPHOSCpvDA1& AliPHOSCpvDA1::operator= (const AliPHOSCpvDA1& da)
94 {
95   //Assignment operator.
96
97   if(this != &da) {
98
99     TString oldname(fHistoFile->GetName());
100     TString newname(da.fHistoFile->GetName());
101
102     if(oldname != newname) {
103       delete fHistoFile;
104       fHistoFile = new TFile(da.fHistoFile->GetName(),"update");
105     }
106
107     fMod = da.fMod;
108
109     SetName(da.GetName());
110     SetTitle(da.GetTitle());
111
112     for(Int_t iX=0; iX<128; iX++) {
113       for(Int_t iZ=0; iZ<56; iZ++) {
114
115         if(fCharge[iX][iZ]) delete fCharge[iX][iZ];
116         fCharge[iX][iZ] = da.fCharge[iX][iZ];
117       }
118     }
119     
120   }
121
122   return *this;
123 }
124
125
126 //-------------------------------------------------------------------
127 AliPHOSCpvDA1::~AliPHOSCpvDA1()
128 {
129   // Destructor
130   
131   UpdateHistoFile();
132   if(fHistoFile) delete fHistoFile;
133   
134 }
135
136 //-------------------------------------------------------------------
137 void AliPHOSCpvDA1::FillHistograms(Float_t e[128][56]) 
138 {
139   // Fill charge deposit histograms of one event.
140   // Charge data is encoded as e[X][Z], 
141   // where X(0..127) and Z(0..55) - pad position in the CPV module, 
142   // Charge in ADC counts.
143   // If no charge read for particular channel, 
144   // the correspondent array entry should be filled by zero.
145   // WARNING: this function should be called once per event!
146
147   char hname[128];
148   char htitl[128];
149   
150   for(Int_t iX=0; iX<128; iX++) {
151     for (Int_t iZ=0; iZ<56; iZ++) {
152       
153       if(!e[iX][iZ]) continue;
154       
155       if(fCharge[iX][iZ]) 
156         fCharge[iX][iZ]->Fill(e[iX][iZ]);
157       else {
158         sprintf(hname,"%d_%d_%d",fMod,iX,iZ);
159         sprintf(htitl,"Charge deposited on the pad %d_%d_%d",fMod,iX,iZ);
160         fCharge[iX][iZ] = new TH1F(hname,htitl,1024,0.,1024.);
161         fCharge[iX][iZ]->Fill(e[iX][iZ]);
162       }
163       
164     }
165   }
166   
167 }
168
169 //-------------------------------------------------------------------
170 void AliPHOSCpvDA1::UpdateHistoFile()
171 {
172   // Write histograms to file
173
174   if(!fHistoFile) return;
175   if(!fHistoFile->IsOpen()) return;
176
177   TH1F* hist1=0;
178
179   for(Int_t iX=0; iX<128; iX++) {
180     for(Int_t iZ=0; iZ<56; iZ++) {
181       
182       hist1 = fCharge[iX][iZ];
183       if(hist1) hist1->Write(hist1->GetName(),TObject::kWriteDelete);
184     }
185   }
186
187 }
188