1 /**************************************************************************
2 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 ///////////////////////////////////////////////////////////////////////////////
20 /// This class provides storage container ITS SSD module callibration data
23 ///////////////////////////////////////////////////////////////////////////////
25 #include "AliITSNoiseSSD.h"
26 #include "AliITSModuleDaSSD.h"
28 ClassImp(AliITSModuleDaSSD)
32 AliITSModuleDaSSD::AliITSModuleDaSSD() :
43 // Default constructor
47 AliITSModuleDaSSD::AliITSModuleDaSSD(const UChar_t ddlID, const UChar_t ad, const UChar_t adc, const UShort_t moduleID) :
58 // Constructor, set module id data
63 AliITSModuleDaSSD::AliITSModuleDaSSD(const Int_t numberofstrips) :
74 // Constructor, allocates memory for AliITSChannelDaSSD*
75 if (numberofstrips != fgkStripsPerModule)
76 Warning("AliITSModuleDaSSD", "ALICE ITS SSD Module contains %i strips", fgkStripsPerModule);
77 fStrips = new (nothrow) AliITSChannelDaSSD* [numberofstrips];
79 fNumberOfStrips = numberofstrips;
80 for (Int_t i = 0; i < numberofstrips; i++) fStrips[i]= NULL;
82 Error("AliITSModuleDaSSD", "Error allocating memory for %i AliITSChannelDaSSD* objects!", numberofstrips);
89 AliITSModuleDaSSD::AliITSModuleDaSSD(const Int_t numberofstrips, const Long_t eventsnumber) :
100 // Constructor, allocates memory for AliITSChannelDaSSD* and events data
101 if (numberofstrips != fgkStripsPerModule)
102 Warning("AliITSModuleDaSSD", "ALICE ITS SSD Module contains %i strips", fgkStripsPerModule);
103 fStrips = new (nothrow) AliITSChannelDaSSD* [numberofstrips];
105 fNumberOfStrips = numberofstrips;
106 memset(fStrips, 0, numberofstrips * sizeof(AliITSChannelDaSSD*));
107 for (Int_t i = 0; i < fNumberOfStrips; i++) {
108 fStrips[i] = new AliITSChannelDaSSD(i, eventsnumber);
109 if (!fStrips[i]) Error("AliITSModuleDaSSD", "Error allocating memory for AliITSChannelDaSSD %i-th object", i);
112 Error("AliITSModuleDaSSD", "Error allocating memory for %i AliITSChannelDaSSD* objects!", numberofstrips);
120 AliITSModuleDaSSD::AliITSModuleDaSSD(const AliITSModuleDaSSD& module) :
122 fEquipId(module.fEquipId),
123 fEquipType(module.fEquipType),
124 fDdlId(module.fDdlId),
127 fModuleId(module.fModuleId),
128 fNumberOfStrips(module.fNumberOfStrips),
129 fStrips(module.fStrips),
130 fEventsNumber(module.fEventsNumber)
134 Fatal("AliITSModuleDaSSD", "copy constructor not implemented");
139 AliITSModuleDaSSD& AliITSModuleDaSSD::operator = (const AliITSModuleDaSSD& module)
141 // assignment operator
143 Fatal("AliITSModuleDaSSD: operator =", "assignment operator not implemented");
149 AliITSModuleDaSSD::~AliITSModuleDaSSD()
154 for (Long_t i = 0; i < fNumberOfStrips; i++)
156 if (fStrips[i]) delete fStrips[i];
164 Bool_t AliITSModuleDaSSD::SetModuleIdData (const UChar_t ddlID, const UChar_t ad, const UChar_t adc, const UShort_t moduleID)
167 if (ad > fgkMaxAdNumber) {
168 Warning("AliITSModuleDaSSD", "Wrong AD number: %i", ad);
171 if (adc > fgkMaxAdcNumber || ForbiddenAdcNumber(adc)) {
172 Warning("AliITSModuleDaSSD", "Wrong ADC number: %i", adc);
178 fModuleId = moduleID;
184 void AliITSModuleDaSSD::SetModuleFEEId (const UChar_t ddlID, const UChar_t ad, const UChar_t adc)
186 // Set id data of FEE connected to the Module
193 void AliITSModuleDaSSD::SetModuleRorcId (const Int_t equipid, const Int_t equiptype)
195 // Set data to access FEROM registres via DDL
197 fEquipType = equiptype;
201 Bool_t AliITSModuleDaSSD::SetEventsNumber(const Long_t eventsnumber)
203 // Allocate the memory for the events data
205 if (!fStrips) return kFALSE;
206 for (i = 0; i < fNumberOfStrips; i++) {
208 if (!fStrips[i]->SetEvenetsNumber(eventsnumber)) {
209 for (Int_t j = 0; j < i; j++) fStrips[j]->DeleteSignal();
210 Error("AliITSModuleDaSSD", "Error allocating memory for i% events for module %i, strip %i",
211 eventsnumber, (Int_t)fModuleId, i);
215 if (!(fStrips[i] = new AliITSChannelDaSSD(i, eventsnumber))) {
216 for (Int_t j = 0; j < i; j++) delete fStrips[j];
220 Error("AliITSModuleDaSSD", "Error allocating memory for strip %i of module %i!", (Int_t)fModuleId, i);
229 AliITSNoiseSSD* AliITSModuleDaSSD::GetCalibrationSSDModule() const
231 // Creates the AliITSNoiseSSD objects with callibration data
233 if (!fStrips) return NULL;
234 mc = new AliITSNoiseSSD();
235 mc->SetMod(fModuleId);
236 mc->SetNNoiseP(fgkPNStripsPerModule);
237 mc->SetNNoiseN(fgkPNStripsPerModule);
238 for (Int_t i = 0; i < fNumberOfStrips; i++) {
243 if (i < fgkPNStripsPerModule)
244 mc->AddNoiseP(i, fStrips[i]->GetNoise());
245 else mc->AddNoiseN((i - fgkPNStripsPerModule), fStrips[i]->GetNoise());