]>
Commit | Line | Data |
---|---|---|
bd83f412 | 1 | #ifndef ALICALOCALIBSIGNAL_H |
2 | #define ALICALOCALIBSIGNAL_H | |
3 | ||
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
5 | * See cxx source for full Copyright notice */ | |
6 | ||
7 | /* $Id: AliCaloCalibSignal.h $ */ | |
8 | ||
9 | // \file AliCaloCalibSignal.h | |
10 | // \brief Description: | |
11 | // A help class for monitoring and calibration tools: MOOD, AMORE etc., | |
32cd4c24 | 12 | // that can process events from a standard AliCaloRawStreamV3, |
bd83f412 | 13 | // most usually from LED/pulser runs. It stores signal info as |
14 | // typical (highest) amplitude vs time in TGraphs (one per channel) | |
15 | // or TProfiles if we decide to just store the averages (and not all points) | |
16 | // for the detectors (EMCAL and PHOS). | |
17 | ||
18 | // \author: Josh Hamblen (UTenn), original version. | |
19 | // [Consultant: D. Silvermyr (ORNL)] | |
20 | // Partly based on AliCaloCalibPedestal. | |
21 | // | |
22 | // \version $Revision: $ | |
23 | // \date $Date: $ | |
24 | ||
8bcca84c | 25 | #include "TString.h" |
26 | #include "TTree.h" | |
bd3cd9c2 | 27 | #include "AliEMCALGeoParams.h" |
32cd4c24 | 28 | class AliCaloRawStreamV3; |
f4fc542c | 29 | class AliCaloAltroMapping; |
30 | class AliRawReader; | |
bd83f412 | 31 | |
32 | class AliCaloCalibSignal : public TObject { | |
33 | ||
34 | public: | |
35 | ||
36 | enum kDetType {kPhos, kEmCal, kNone};//The detector types | |
37 | ||
38 | AliCaloCalibSignal(kDetType detectorType = kPhos); //ctor | |
39 | virtual ~AliCaloCalibSignal(); //dtor | |
bd83f412 | 40 | |
2d5f3a10 | 41 | private: |
42 | //Just declare them, avoid compilation warning | |
43 | AliCaloCalibSignal(const AliCaloCalibSignal & /*sig*/); // copy ctor | |
44 | AliCaloCalibSignal& operator = (const AliCaloCalibSignal &/*source*/); // assing operator | |
45 | ||
46 | public: | |
f4fc542c | 47 | // Event processing methods: |
48 | Bool_t ProcessEvent(AliRawReader *rawReader); | |
b07ee441 | 49 | Bool_t ProcessEvent(AliCaloRawStreamV3 *in, UInt_t Timestamp); // added header for time info |
ab962f7b | 50 | Bool_t CheckFractionAboveAmp(const int *AmpVal, int resultArray[]); // check fraction of signals to check for LED events |
30aa89b0 | 51 | Bool_t CheckLEDRefAboveAmp(const int *AmpVal, int resultArray[]); // check if LED Ref is also above cut |
bd83f412 | 52 | |
f4fc542c | 53 | // Mapping handling |
ab962f7b | 54 | AliCaloAltroMapping **GetAltroMapping() const { return fMapping; }; |
f4fc542c | 55 | void SetAltroMapping(AliCaloAltroMapping **mapp) { fMapping = mapp; }; |
56 | ||
b07ee441 | 57 | // Parameter/cut handling |
58 | void SetParametersFromFile(const char *parameterFile); | |
59 | void WriteParametersToFile(const char *parameterFile); | |
60 | ||
bd83f412 | 61 | //////////////////////////// |
62 | //Simple getters | |
8bcca84c | 63 | // for TTree |
64 | TTree * GetTreeAmpVsTime() const { return fTreeAmpVsTime; } //! | |
65 | TTree * GetTreeAvgAmpVsTime() const {return fTreeAvgAmpVsTime; } //! | |
5e99faca | 66 | TTree * GetTreeLEDAmpVsTime() const {return fTreeLEDAmpVsTime; } //! |
67 | TTree * GetTreeLEDAvgAmpVsTime() const {return fTreeLEDAvgAmpVsTime; } //! | |
8bcca84c | 68 | |
69 | // how many points do we have for each tower&gain | |
bd83f412 | 70 | int GetNHighGain(int imod, int icol, int irow) const //! |
71 | { int towId = GetTowerNum(imod, icol, irow); return fNHighGain[towId];}; //! | |
72 | int GetNLowGain(int imod, int icol, int irow) const //! | |
73 | { int towId = GetTowerNum(imod, icol, irow); return fNLowGain[towId];}; //! | |
74 | int GetNHighGain(int towId) const { return fNHighGain[towId];}; //! | |
75 | int GetNLowGain(int towId) const { return fNLowGain[towId];}; //! | |
76 | ||
5e99faca | 77 | // also for LED reference |
ab962f7b | 78 | int GetNRef(const int imod, const int istripMod, const int igain) //! |
5e99faca | 79 | { int refId = GetRefNum(imod, istripMod, igain); return fNRef[refId];}; //! |
80 | int GetNRef(int refId) const { return fNRef[refId];}; //! | |
81 | ||
bd83f412 | 82 | // Basic info: getters |
83 | kDetType GetDetectorType() const {return fDetType;};//Returns if this is a PHOS or EMCAL object | |
f4fc542c | 84 | TString GetCaloString() const {return fCaloString;}; //Returns if this is a PHOS or EMCAL object |
85 | ||
bd83f412 | 86 | int GetColumns() const {return fColumns;}; //The number of columns per module |
87 | int GetRows() const {return fRows;}; //The number of rows per module | |
5e99faca | 88 | int GetLEDRefs() const {return fLEDRefs;}; //The number of LED references/monitors per module |
bd83f412 | 89 | int GetModules() const {return fModules;}; //The number of modules |
8bcca84c | 90 | |
ab962f7b | 91 | int GetTowerNum(const int imod, const int icol, const int irow) const { return (imod*fColumns*fRows + icol*fRows + irow);}; // help index |
8bcca84c | 92 | |
ab962f7b | 93 | int GetChannelNum(const int imod, const int icol, const int irow, const int igain) const { return (igain*fModules*fColumns*fRows + imod*fColumns*fRows + icol*fRows + irow);}; // channel number with gain included |
94 | ||
95 | Bool_t DecodeChannelNum(const int chanId, | |
96 | int *imod, int *icol, int *irow, int *igain) const; // return the module, column, row, and gain for a given channel number | |
bd83f412 | 97 | |
5e99faca | 98 | // LED reference indexing |
ab962f7b | 99 | int GetRefNum(const int imod, const int istripMod, const int igain) const { return (igain*fModules*fLEDRefs + imod*fLEDRefs + istripMod);}; // channel number with gain included |
100 | ||
101 | Bool_t DecodeRefNum(const int refId, | |
102 | int *imod, int *istripMod, int *igain) const; // return the module, stripModule, and gain for a given reference number | |
5e99faca | 103 | |
bd83f412 | 104 | // Basic Counters |
105 | int GetNEvents() const {return fNEvents;}; | |
106 | int GetNAcceptedEvents() const {return fNAcceptedEvents;}; | |
107 | ||
108 | /////////////////////////////// | |
109 | // Get and Set Cuts | |
110 | // Section for if we should help with the event selection of what is likely LED events | |
111 | void SetAmpCut(double d) { fAmpCut = d; } //! | |
112 | double GetAmpCut() const { return fAmpCut; }; //! | |
113 | void SetReqFractionAboveAmpCutVal(double d) { fReqFractionAboveAmpCutVal = d; } //! | |
114 | double GetReqFractionAboveAmpCutVal() const { return fReqFractionAboveAmpCutVal; }; //! | |
115 | void SetReqFractionAboveAmp(bool b) { fReqFractionAboveAmp = b; } //! | |
8bcca84c | 116 | bool GetReqFractionAboveAmp() const { return fReqFractionAboveAmp; }; //! |
30aa89b0 | 117 | // also for LED Reference/Mon channels |
118 | void SetAmpCutLEDRef(double d) { fAmpCutLEDRef = d; } //! | |
119 | double GetAmpCutLEDRef() const { return fAmpCutLEDRef; }; //! | |
120 | void SetReqLEDRefAboveAmpCutVal(bool b) { fReqLEDRefAboveAmpCutVal = b; } //! | |
121 | bool GetReqLEDRefAboveAmpCutVal() const { return fReqLEDRefAboveAmpCutVal; }; //! | |
bd83f412 | 122 | |
8bcca84c | 123 | // We may select to get averaged info |
bd83f412 | 124 | void SetUseAverage(bool b) { fUseAverage = b; } //! |
8bcca84c | 125 | bool GetUseAverage() const { return fUseAverage; }; //! |
bd83f412 | 126 | void SetSecInAverage(int secInAverage) {fSecInAverage = secInAverage;}; // length of the interval that should be used for the average calculation (determines number of bins in TProfile) |
127 | int GetSecInAverage() const {return fSecInAverage;}; //! | |
128 | ||
129 | // Info on time since start of run | |
130 | double GetHour() const { return fHour; }; // time info for current event | |
131 | double GetCurrentHour() const { return fHour; }; // time info for current event (same as GetHour(), just more explicitly named) | |
132 | double GetLatestHour() const { return fLatestHour; }; // the latest time encountered | |
133 | // These times are typically the same, but not necessarily if the events do not come in order | |
134 | void SetLatestHour(double d) { fLatestHour = d; }; // could be useful when we know the length of the run (i.e. after it is over), e.g. for PreProcessor | |
135 | ||
136 | // RunNumbers : setters and getters | |
137 | void SetRunNumber(int runNo) {fRunNumber = runNo;}; //! | |
138 | int GetRunNumber() const {return fRunNumber;}; //! | |
139 | ||
140 | // Start-of-run timestamp : set and get | |
141 | void SetStartTime(int startTime) {fStartTime = startTime;}; //! | |
142 | int GetStartTime() const {return fStartTime;}; //! | |
143 | ||
144 | ///////////////////////////// | |
145 | //Analysis functions | |
8bcca84c | 146 | void ResetInfo();// trees and counters. |
bd83f412 | 147 | Bool_t AddInfo(const AliCaloCalibSignal *sig);//picks up new info from supplied argument |
148 | ||
149 | //Saving functions | |
8bcca84c | 150 | Bool_t Save(TString fileName); //Saves the objects to a .root file |
151 | Bool_t Analyze(); // makes average tree and summary tree | |
bd83f412 | 152 | |
153 | private: | |
8bcca84c | 154 | |
155 | void DeleteTrees(); // delete old objects and set pointers | |
bd83f412 | 156 | void Zero(); // set all counters to 0 |
8bcca84c | 157 | void CreateTrees(); //! create/setup the TTrees |
bd83f412 | 158 | |
159 | private: | |
160 | ||
161 | kDetType fDetType; //The detector type for this object | |
162 | int fColumns; //The number of columns per module | |
163 | int fRows; //The number of rows per module | |
5e99faca | 164 | int fLEDRefs; //The number of LED references/monitors per module |
bd83f412 | 165 | int fModules; //The number of modules |
f4fc542c | 166 | TString fCaloString; // id for which detector type we have |
167 | AliCaloAltroMapping **fMapping; //! Altro Mapping object | |
bd83f412 | 168 | int fRunNumber; //The run number. Needs to be set by the user. |
169 | int fStartTime; // Time of first event | |
170 | ||
171 | double fAmpCut; // amplitude cut value | |
172 | double fReqFractionAboveAmpCutVal; // required fraction that should be above cut | |
173 | bool fReqFractionAboveAmp; // flag to select if we should do some event selection based on amplitudes | |
174 | ||
30aa89b0 | 175 | double fAmpCutLEDRef; // amplitude cut value for LED reference |
176 | bool fReqLEDRefAboveAmpCutVal; // flag to select if we should require that signal is also seen in LED Reference/Monitoring channel | |
177 | ||
bd83f412 | 178 | double fHour; // fraction of hour since beginning of run, for amp vs. time graphs, for current event |
179 | double fLatestHour; // largest fraction of hour since beginning of run, for amp vs. time graphs | |
180 | bool fUseAverage; // flag to average graph points into over a time interval | |
181 | int fSecInAverage; // time interval for the graph averaging | |
182 | ||
183 | // status counters | |
184 | int fNEvents; // # events processed | |
185 | int fNAcceptedEvents; // # events accepted | |
186 | ||
bd3cd9c2 | 187 | //Constants needed by the class: EMCAL ones are kept in AliEMCALGeoParams.h |
bd83f412 | 188 | static const int fgkPhosRows = 64; // number of rows per module for PHOS |
189 | static const int fgkPhosCols = 56; // number of columns per module for PHOS | |
5e99faca | 190 | static const int fgkPhosLEDRefs = 0; // no LED monitor channels for PHOS |
bd83f412 | 191 | static const int fgkPhosModules = 5; // number of modules for PHOS |
192 | ||
bd83f412 | 193 | // From numbers above: PHOS has more possible towers (17920) than EMCAL (13824) |
194 | // so use PHOS numbers to set max. array sizes | |
195 | static const int fgkMaxTowers = 17920; // fgkPhosModules * fgkPhosCols * fgkPhosRows; | |
5e99faca | 196 | // for LED references; maximum from EMCAL |
bd3cd9c2 | 197 | static const int fgkMaxRefs = 288; // AliEMCALGeoParams::fgkEMCALModules * AliEMCALGeoParams::fgkEMCALLEDRefs |
5e99faca | 198 | |
bd83f412 | 199 | static const int fgkNumSecInHr = 3600; // number of seconds in an hour, for the fractional hour conversion on the time graph |
200 | ||
8bcca84c | 201 | // trees |
202 | TTree *fTreeAmpVsTime; // stores channel, gain, amp, and time info | |
5e99faca | 203 | TTree *fTreeAvgAmpVsTime; // same, for averages |
204 | TTree *fTreeLEDAmpVsTime; // same, for LED reference | |
205 | TTree *fTreeLEDAvgAmpVsTime; // same, for LED reference - averages | |
8bcca84c | 206 | |
207 | // counters | |
5e99faca | 208 | int fNHighGain[fgkMaxTowers]; // Number of Amp. vs. Time readings per tower |
209 | int fNLowGain[fgkMaxTowers]; // same, for low gain | |
210 | int fNRef[fgkMaxRefs * 2]; // same, for LED refs; *2 for both gains | |
bd83f412 | 211 | |
30aa89b0 | 212 | ClassDef(AliCaloCalibSignal, 6) // don't forget to change version if you change class member list.. |
bd83f412 | 213 | |
214 | }; | |
215 | ||
216 | #endif |