X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EMCAL%2FAliEMCALDigit.cxx;h=55723d157dab8eb85bd3712ed8abe4590765809d;hb=62d1932064005323779c2ce641e2231acf4ed2b2;hp=84dfd30a99f0852add149a466365066481156788;hpb=0ae8ae77429275bbf3742a5052221510d639cc8c;p=u%2Fmrichter%2FAliRoot.git diff --git a/EMCAL/AliEMCALDigit.cxx b/EMCAL/AliEMCALDigit.cxx index 84dfd30a99f..55723d157da 100644 --- a/EMCAL/AliEMCALDigit.cxx +++ b/EMCAL/AliEMCALDigit.cxx @@ -41,7 +41,12 @@ ClassImp(AliEMCALDigit) //____________________________________________________________________________ AliEMCALDigit::AliEMCALDigit() : - AliDigitNew(), +AliDigitNew(), + fAmpFloat(0.), + fNSamples(0), + fSamples(0x0), + fNSamplesHG(0), + fSamplesHG(0x0), fNprimary(0), fNMaxPrimary(5), fPrimary(0x0), @@ -52,30 +57,38 @@ AliEMCALDigit::AliEMCALDigit() : fDEParent(0x0), fMaxIter(0), fTime(0.), - fTimeR(0.) - + fTimeR(0.), + fChi2(0.), + fNDF(0), + fDigitType(kUnknown), + fAmpCalib(-1) { // default ctor // Need to initialise for reading old files - fPrimary = new Int_t[fNMaxPrimary] ; + fPrimary = new Int_t[fNMaxPrimary] ; fDEPrimary = new Float_t[fNMaxPrimary] ; - fIparent = new Int_t[fNMaxiparent] ; - fDEParent = new Float_t[fNMaxiparent] ; + fIparent = new Int_t[fNMaxiparent] ; + fDEParent = new Float_t[fNMaxiparent] ; for ( Int_t i = 0; i < fNMaxPrimary ; i++) { - fPrimary[i] = -1 ; + fPrimary[i] = -1 ; fDEPrimary[i] = 0 ; } for ( Int_t i = 0; i < fNMaxiparent ; i++) { - fIparent[i] = -1 ; + fIparent[i] = -1 ; fDEParent[i] = 0 ; } } //____________________________________________________________________________ -AliEMCALDigit::AliEMCALDigit(Int_t primary, Int_t iparent, Int_t id, Int_t DigEnergy, Float_t time, Int_t index, Float_t dE) +AliEMCALDigit::AliEMCALDigit(Int_t primary, Int_t iparent, Int_t id, Float_t digEnergy, Float_t time, Int_t type, Int_t index, Float_t chi2, Int_t ndf, Float_t dE) : AliDigitNew(), + fAmpFloat(digEnergy), + fNSamples(0), + fSamples(0x0), + fNSamplesHG(0), + fSamplesHG(0x0), fNprimary(0), fNMaxPrimary(25), fPrimary(0x0), @@ -86,20 +99,24 @@ AliEMCALDigit::AliEMCALDigit(Int_t primary, Int_t iparent, Int_t id, Int_t DigEn fDEParent(0x0), fMaxIter(5), fTime(time), - fTimeR(time) + fTimeR(time), + fChi2(chi2), + fNDF(ndf), + fDigitType(type), + fAmpCalib(-1) { // ctor with all data // data memebrs of the base class (AliNewDigit) - fAmp = DigEnergy ; + fAmp = 0; fId = id ; fIndexInList = index ; - // data members - fPrimary = new Int_t[fNMaxPrimary] ; + // data member + fPrimary = new Int_t[fNMaxPrimary] ; fDEPrimary = new Float_t[fNMaxPrimary] ; - fIparent = new Int_t[fNMaxiparent] ; - fDEParent = new Float_t[fNMaxiparent] ; + fIparent = new Int_t[fNMaxiparent] ; + fDEParent = new Float_t[fNMaxiparent] ; if( primary != -1){ fNprimary = 1 ; fPrimary[0] = primary ; @@ -131,50 +148,98 @@ AliEMCALDigit::AliEMCALDigit(Int_t primary, Int_t iparent, Int_t id, Int_t DigEn //____________________________________________________________________________ AliEMCALDigit::AliEMCALDigit(const AliEMCALDigit & digit) : AliDigitNew(digit), + fAmpFloat(digit.fAmpFloat), + fNSamples(digit.fNSamples), + fSamples(), + fNSamplesHG(digit.fNSamplesHG), + fSamplesHG(), fNprimary(digit.fNprimary), fNMaxPrimary(digit.fNMaxPrimary), - fPrimary(0x0), - fDEPrimary(0x0), + fPrimary(), + fDEPrimary(), fNiparent(digit.fNiparent), fNMaxiparent(digit.fNMaxiparent), - fIparent(0x0), - fDEParent(0x0), + fIparent(), + fDEParent(), fMaxIter(digit.fMaxIter), fTime(digit.fTime), - fTimeR(digit.fTimeR) + fTimeR(digit.fTimeR), + fChi2(digit.fChi2), + fNDF(digit.fNDF), + fDigitType(digit.fDigitType), + fAmpCalib(digit.fAmpCalib) { // copy ctor - // data memebrs of the base class (AliNewDigit) fAmp = digit.fAmp ; fId = digit.fId; fIndexInList = digit.fIndexInList ; - // data members - fPrimary = new Int_t[fNMaxPrimary] ; - fDEPrimary = new Float_t[fNMaxPrimary] ; - fIparent = new Int_t[fNMaxiparent] ; - fDEParent = new Float_t[fNMaxiparent] ; - Int_t i ; - for ( i = 0; i < fNprimary ; i++) { - fPrimary[i] = digit.fPrimary[i] ; - fDEPrimary[i] = digit.fDEPrimary[i] ; + // data members + if (fSamples ) delete [] fSamples ; fSamples = NULL ; + if (fSamplesHG ) delete [] fSamplesHG ; fSamplesHG = NULL ; + if (fPrimary ) delete [] fPrimary ; fPrimary = NULL ; + if (fDEPrimary) delete [] fDEPrimary ; fDEPrimary = NULL ; + if (fIparent ) delete [] fIparent ; fIparent = NULL ; + if (fDEParent) delete [] fDEParent ; fDEParent = NULL ; + + if (fNSamples){ + fSamples = new Int_t[fNSamples]; + for (Int_t i=0; i < digit.fNSamples; i++) fSamples[i] = digit.fSamples[i]; } - Int_t j ; - for (j = 0; j< fNiparent ; j++) { - fIparent[j] = digit.fIparent[j] ; - fDEParent[j] = digit.fDEParent[j] ; + + if (fNSamplesHG){ + fSamplesHG = new Int_t[fNSamplesHG]; + for (Int_t i=0; i < digit.fNSamplesHG; i++) fSamplesHG[i] = digit.fSamplesHG[i]; + } + + + if (fNMaxPrimary){ + fPrimary = new Int_t [fNMaxPrimary] ; + fDEPrimary = new Float_t[fNMaxPrimary] ; + for ( Int_t i = 0; i < fNMaxPrimary ; i++) { + fPrimary[i] = digit.fPrimary[i] ; + fDEPrimary[i] = digit.fDEPrimary[i] ; + } } + + if (fNMaxiparent){ + fIparent = new Int_t [fNMaxiparent] ; + fDEParent = new Float_t[fNMaxiparent] ; + for (Int_t j = 0; j< fNMaxiparent ; j++) { + fIparent[j] = digit.fIparent[j] ; + fDEParent[j] = digit.fDEParent[j] ; + } + } + } //____________________________________________________________________________ AliEMCALDigit::~AliEMCALDigit() { - // Delete array of primiries if any - delete [] fPrimary ; - delete [] fDEPrimary ; - delete [] fIparent ; - delete [] fDEParent ; + // Delete array of primaries if any + + if (fSamples ) delete [] fSamples ; fSamples = NULL ; + if (fSamplesHG ) delete [] fSamplesHG ; fSamplesHG = NULL ; + if (fPrimary ) delete [] fPrimary ; fPrimary = NULL ; + if (fDEPrimary) delete [] fDEPrimary ; fDEPrimary = NULL ; + if (fIparent ) delete [] fIparent ; fIparent = NULL ; + if (fDEParent) delete [] fDEParent ; fDEParent = NULL ; + +} + + +//____________________________________________________________________________ +void AliEMCALDigit::Clear(const Option_t*) +{ + // Delete array of primaries if any + if (fSamples ) delete [] fSamples ; fSamples = NULL ; + if (fSamplesHG ) delete [] fSamplesHG ; fSamplesHG = NULL ; + if (fPrimary ) delete [] fPrimary ; fPrimary = NULL ; + if (fDEPrimary) delete [] fDEPrimary ; fDEPrimary = NULL ; + if (fIparent ) delete [] fIparent ; fIparent = NULL ; + if (fDEParent) delete [] fDEParent ; fDEParent = NULL ; + } //____________________________________________________________________________ @@ -183,7 +248,7 @@ Int_t AliEMCALDigit::Compare(const TObject * obj) const // Compares two digits with respect to its Id // to sort according increasing Id - Int_t rv ; + Int_t rv = 2 ; AliEMCALDigit * digit = (AliEMCALDigit *)obj ; @@ -224,6 +289,61 @@ Float_t AliEMCALDigit::GetPhi() const return phi ; } +//____________________________________________________________________________ +Bool_t AliEMCALDigit::GetFALTROSample(const Int_t iSample, Int_t& timeBin, Int_t& amp) const +{ + //Get FALTRO sample in time bin iSample + if (iSample >= fNSamples || iSample < 0 || fDigitType==kTrigger) return kFALSE; + + amp = fSamples[iSample] & 0xFFF; + timeBin = (fSamples[iSample] >> 12) & 0xFF; + + return kTRUE; +} +//____________________________________________________________________________ +Bool_t AliEMCALDigit::GetALTROSampleLG(const Int_t iSample, Int_t& timeBin, Int_t& amp) const +{ + //Get Low Gain ALTRO sample in time bin iSample + if (iSample >= fNSamples || iSample < 0 || fDigitType==kLG) return kFALSE; + + amp = fSamples[iSample] & 0xFFF; + timeBin = (fSamples[iSample] >> 12) & 0xFF; + + return kTRUE; +} + +//____________________________________________________________________________ +void AliEMCALDigit::SetALTROSamplesLG(const Int_t nSamples, Int_t *samples) +{ + //Set array of ALTRO samples, Low Gain or FALTRO + fNSamples = nSamples; + fSamples = new Int_t[fNSamples]; + for (Int_t i=0; i < fNSamples; i++) fSamples[i] = samples[i]; +} + +//____________________________________________________________________________ +void AliEMCALDigit::SetALTROSamplesHG(const Int_t nSamples, Int_t *samples) +{ + //Set array of ALTRO samples, High Gain. + fNSamplesHG = nSamples; + fSamplesHG = new Int_t[fNSamplesHG]; + for (Int_t i=0; i < fNSamplesHG; i++) fSamplesHG[i] = samples[i]; +} + + +//____________________________________________________________________________ +Bool_t AliEMCALDigit::GetALTROSampleHG(const Int_t iSample, Int_t& timeBin, Int_t& amp) const +{ + //Get High Gain ALTRO sample in time bin iSample + if (iSample >= fNSamplesHG || iSample < 0 || fDigitType==kHG) return kFALSE; + + amp = fSamplesHG[iSample] & 0xFFF; + timeBin = (fSamplesHG[iSample] >> 12) & 0xFF; + + return kTRUE; +} + + //____________________________________________________________________________ Int_t AliEMCALDigit::GetPrimary(Int_t index) const { @@ -298,12 +418,16 @@ AliEMCALDigit AliEMCALDigit::operator+(const AliEMCALDigit &digit) // Adds the amplitude of digits and completes the list of primary particles // if amplitude is larger than - fAmp += digit.fAmp ; + fAmpFloat += digit.fAmpFloat ; + for (Int_t i=0; i < fNSamples ; i++) fSamples[i] += digit.fSamples[i]; + for (Int_t i=0; i < fNSamplesHG; i++) fSamplesHG[i] += digit.fSamplesHG[i]; + + fAmp += digit.fAmp ; if(fTime > digit.fTime) fTime = digit.fTime ; if (digit.fTimeR < fTimeR) fTimeR = digit.fTimeR ; - + Int_t max1 = fNprimary ; Int_t max2 = fNiparent ; Int_t index ; @@ -312,24 +436,24 @@ AliEMCALDigit AliEMCALDigit::operator+(const AliEMCALDigit &digit) Int_t old ; for ( old = 0 ; (old < max1) && newPrim; old++) { //already have this primary? if(fPrimary[old] == digit.fPrimary[index]) { - newPrim = kFALSE; - fDEPrimary[old] += digit.fDEPrimary[index]; + newPrim = kFALSE; + fDEPrimary[old] += digit.fDEPrimary[index]; } } if (newPrim) { if(max1" , mess.Data()) ; - + + TString mess = " NMaxPrimary = " ; + mess += fNMaxPrimary ; + mess += " is too small" ; + AliFatal(mess.Data()) ; + } } } @@ -339,24 +463,24 @@ AliEMCALDigit AliEMCALDigit::operator+(const AliEMCALDigit &digit) Int_t old ; for ( old = 0 ; (old < max2) && newParent; old++) { //already have this primary? if(fIparent[old] == digit.fIparent[index]) { - newParent = kFALSE; - fDEParent[old] += digit.fDEParent[index]; + newParent = kFALSE; + fDEParent[old] += digit.fDEParent[index]; } } if(newParent){ if(max2", mess.Data()) ; - + + TString mess = " NMaxiparent = " ; + mess += fNMaxiparent ; + mess += " is too small" ; + AliFatal(mess.Data()) ; + } } } @@ -369,9 +493,14 @@ AliEMCALDigit AliEMCALDigit::operator*(Float_t factor) { // Multiplies the amplitude by a factor - Float_t tempo = static_cast(fAmp) ; - tempo *= factor ; - fAmp = static_cast(TMath::Ceil(tempo)) ; + //Float_t tempo = static_cast(fAmp) ; + //tempo *= factor ; + //fAmp = static_cast(TMath::Floor(tempo)) ; + + fAmpFloat *= factor; + for (Int_t i=0; i < fNSamples ; i++) fSamples[i] = Int_t(factor*fSamples[i]); + for (Int_t i=0; i < fNSamplesHG; i++) fSamplesHG[i] = Int_t(factor*fSamplesHG[i]); + for(Int_t i=0; i < fNprimary; i++) fDEPrimary[i] *= factor; for(Int_t i=0; i < fNiparent; i++) @@ -386,16 +515,53 @@ ostream& operator << ( ostream& out , const AliEMCALDigit & digit) // Prints the data of the digit out << "ID " << digit.fId << " Energy = " << digit.fAmp << " Time = " << digit.fTime << endl ; - Int_t i,j ; - for(i=0;i