/* */
/* $Id$ */
+#include <string>
#include "TObject.h"
#include "AliITSModuleDaSSD.h"
///
/// This class provides ITS SSD data handling
/// used by DA.
-///
+// Author: Oleksandr Borysov
+// Date: 19/05/2008
///////////////////////////////////////////////////////////////////////////////
+using namespace std;
+
class TObjArray;
class AliITSHandleDaSSD : public TObject {
public :
AliITSHandleDaSSD();
- explicit AliITSHandleDaSSD(const Int_t numberofmodules);
+ explicit AliITSHandleDaSSD(Char_t *rdfname);
AliITSHandleDaSSD(const AliITSHandleDaSSD& ssdadldc);
AliITSHandleDaSSD& operator = (const AliITSHandleDaSSD& ssdadldc);
virtual ~AliITSHandleDaSSD();
- Int_t GetNumberOfModules() const { return fNumberOfModules; }
+ virtual Bool_t Init(Char_t *rdfname);
+ Bool_t SetRawFileName (Char_t *rdfname) {return Init(rdfname); }
+
+ void SetZsDefaul(Int_t zs) { fZsDefault = zs; }
+ void SetOffsetDefault(Int_t offs) { fOffsetDefault = offs; }
+ void SetZsFactor(Float_t zsf) { fZsFactor = zsf; }
+ void SetPedestalThresholdFactor(Float_t pthf) { fPedestalThresholdFactor = pthf; }
+ void SetCmThresholdFactor(Float_t cmthf) { fCmThresholdFactor = cmthf; }
+ Int_t GetZsDefault() const { return fZsDefault; }
+ Int_t GetOffsetDefault() const { return fOffsetDefault; }
+ Float_t GetZsFactor() const { return fZsFactor; }
+ Float_t GetPedestalThresholdFactor() const { return fPedestalThresholdFactor; }
+ Float_t GetCmThresholdFactor() const { return fCmThresholdFactor; }
+
+ Int_t GetNumberOfModules() const { return fNumberOfModules; }
+ UInt_t GetLdcId() const { return fLdcId; }
+ UInt_t GetRunId() const { return fRunId; }
AliITSModuleDaSSD* GetModule (const UChar_t ddlID, const UChar_t ad, const UChar_t adc) const;
AliITSModuleDaSSD* GetModule (const Int_t index) const
{if ((fModules) && (index < fNumberOfModules)) return fModules[index]; else return NULL;}
+ Int_t GetModuleIndex (const UChar_t ddlID, const UChar_t ad, const UChar_t adc) const;
AliITSChannelDaSSD* GetStrip (const UChar_t ddlID, const UChar_t ad, const UChar_t adc, const UShort_t stripID) const;
TObjArray* GetCalibrationSSDLDC() const;
- Bool_t SaveCalibrationSSDLDC(std::string& dafname) const;
+ Bool_t SaveCalibrationSSDLDC(Char_t*& dafname) const;
+ void SetModIndProcessed(Int_t mi) {fModIndProcessed = mi;}
+ void SetModIndRead (Int_t mr) {fModIndRead = mr;}
Bool_t SetNumberOfModules (const Int_t numberofmodules);
Bool_t SetModule(AliITSModuleDaSSD *const module, const Int_t index);
- Bool_t ReadCalibrationDataFile (const char* fileName, const Long_t eventsnumber);
-
- virtual Bool_t CalculatePedestal();
- virtual Bool_t CalculateNoise();
- virtual Bool_t CalculateNoiseCM();
-
- void DeleteSignal() { if (fModules) for (Int_t i = 0; i < fNumberOfModules; i++) if (fModules[i]) fModules[i]->DeleteSignal();}
+ virtual Bool_t ReadStaticBadChannelsMap(const Char_t *filename = NULL);
+ virtual Bool_t ReadDDLModuleMap(const Char_t *filename = NULL);
+ Int_t ReadCalibrationDataFile (char* fileName, const Long_t eventsnumber);
+ Int_t ReadModuleRawData (const Int_t modulesnumber);
+
+ virtual Bool_t CalculatePedestal(AliITSModuleDaSSD *const module);
+ virtual Bool_t CalculateNoise(AliITSModuleDaSSD *const module);
+ virtual Bool_t CalculateNoiseCM(AliITSModuleDaSSD *const module);
+ virtual Bool_t CalculateCM(AliITSModuleDaSSD *const module);
+ virtual Bool_t AddFeromCm(AliITSModuleDaSSD *const module);
+ virtual Bool_t ProcessRawData(const Int_t nmread = fgkNumberOfSSDModulesPerDdl);
+ virtual Bool_t RelocateModules();
+ virtual Bool_t AllocateSimulatedModules(const Int_t copymodind = 0);
+
+ Bool_t AdDataPresent(const Int_t ddl, const Int_t ad) const;
+ Int_t DdlToEquipmentId (Int_t ddl) const { return (512 + ddl); }
+ Int_t ChannelIsBad(const UChar_t ddl, const UChar_t ad, const UChar_t adc, const Int_t strn) const;
+ Bool_t SaveEqSlotCalibrationData(const Int_t ddl, const Int_t ad, const Char_t *fname) const;
+ ULong_t OffsetValue(const AliITSChannelDaSSD *strip, const UChar_t ddl = 0, const UChar_t ad = 0,
+ const UChar_t adc = 0, const Int_t strn = -1) const;
+ ULong_t OffsetValue(const UChar_t ddl, const UChar_t ad, const UChar_t adc, const Int_t strn) const;
+ ULong_t ZsThreshold(AliITSChannelDaSSD *strip) const;
+ ULong_t ZsThreshold(const UChar_t ddl, const UChar_t ad, const UChar_t adc, const Int_t strn) const;
+
+ virtual void Reset();
+ virtual Short_t RetrieveModuleId(const UChar_t ddlID, const UChar_t ad, const UChar_t adc) const;
+ Bool_t DumpModInfo(const Float_t meannosethreshold) const;
+ Bool_t PrintModCalibrationData(const UChar_t ddlID, const UChar_t ad, const UChar_t adc, const Char_t *fname = NULL) const;
+ void DumpInitData(const Char_t *str = "") const;
+ void DeleteSignalAll() { if (fModules) for (Int_t i = 0; i < fNumberOfModules; i++) if (fModules[i]) fModules[i]->DeleteSignal();}
+ void DeleteSignal() { if (fModules) for (Int_t i = fModIndProcessed; i < fModIndRead; i++) if (fModules[i]) fModules[i]->DeleteSignal();}
+ void DeleteCMAll() { if (fModules) for (Int_t i = 0; i < fNumberOfModules; i++) if (fModules[i]) fModules[i]->DeleteCM();}
+ void DeleteCM() { if (fModules) for (Int_t i = fModIndProcessed; i < fModIndRead; i++) if (fModules[i]) fModules[i]->DeleteCM();}
+ void DeleteCMFerom() { if (fModules) for (Int_t i = fModIndProcessed; i < fModIndRead; i++) if (fModules[i]) fModules[i]->DeleteCMFerom ();}
static Int_t GetNumberOfSSDModulesConst() { return fgkNumberOfSSDModules; }
protected :
- static const Int_t fgkNumberOfSSDModules = 1698; // Number of SSD modules in ITS
+ static const Int_t fgkNumberOfSSDModules ; // Number of SSD modules in ITS
+ static const Int_t fgkNumberOfSSDModulesPerDdl; // Number of SSD modules in DDL
+ static const Int_t fgkNumberOfSSDModulesPerSlot; // Number of SSD modules in Slot
+ static const Int_t fgkNumberOfSSDDDLs; // Number of DDLs in SSD
+ static const Int_t fgkNumberOfSSDSlotsPerDDL; // Number of SSD slots per DDL
+ static const Float_t fgkPedestalThresholdFactor; // Defalt value for fPedestalThresholdFactor
+ static const Float_t fgkCmThresholdFactor; // Defalt value for fCmThresholdFactor
+
+ static const UInt_t fgkZsBitMask ; // Bit mask for FEROM ZS
+ static const UInt_t fgkOffSetBitMask; // Bit mask for FEROM Offset correction
+ static const UInt_t fgkBadChannelMask; // Mask to suppress the channel from the bad channel list
+ static const Int_t fgkAdcPerDBlock; // FEROM configuration file constant
+
+ Char_t *fRawDataFileName; // Name of the file with raw data
Int_t fNumberOfModules; // number of AliITSModuleDaSSD to allocate
- AliITSModuleDaSSD **fModules; //[fNumberOfModules] array of all SSD 1698 Modules (2608128 strips)
+ AliITSModuleDaSSD **fModules; //[fNumberOfModules] array of pointer on AliITSModuleDaSSD objects (1698 SSD Modules)
+ Int_t fModIndProcessed; //! index of the last module in fModules array with processed data
+ Int_t fModIndRead; //! index of the last module in fModules array with adc data present (read)
+ Int_t *fModIndex; //! index array for fModules
+ Long_t fNumberOfEvents; // Number of physics or calibration events in raw data file fRawDataFileName
+
+ TObjArray *fStaticBadChannelsMap; // Static bad channels map read from the file
+ Int_t *fDDLModuleMap; //! DDL map
+
UInt_t fLdcId; // LDC number, read from header
UInt_t fRunId; // Run number, read from header
- private :
- Bool_t CalculateCM(const Int_t modind, const Int_t stripind, Float_t* const cm);
- Bool_t RelocateModules();
+ Float_t fPedestalThresholdFactor; // configuration parameter: ThresholdFactor for pedestal calculation
+ Float_t fCmThresholdFactor; // configuration parameter: ThresholdFactor for CM calculation
+ Int_t fZsDefault; // default value for ZS threshold
+ Int_t fOffsetDefault; // default value for offset correction
+ Float_t fZsFactor; // zs factor 3.0
+
+ protected :
Bool_t SignalOutOfRange (const Short_t signal) const { return (signal >= AliITSChannelDaSSD::GetOverflowConst()); }
+ string ConvBase(const unsigned long value, const long base) const;
- ClassDef(AliITSHandleDaSSD, 1)
+ ClassDef(AliITSHandleDaSSD, 5)
};
#endif
+