X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSDigitizer.cxx;h=db049389931462cfdcd19a61b20402627e6ec391;hb=42c5218a0d5e8967fd9c625d83e42c8636fa8c93;hp=9bee9d177192f8fcd8bdcbc4bd1062216616fff8;hpb=27a73a5da2f97b5c9761b25405188118cc86a85e;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSDigitizer.cxx b/PHOS/AliPHOSDigitizer.cxx index 9bee9d17719..db049389931 100644 --- a/PHOS/AliPHOSDigitizer.cxx +++ b/PHOS/AliPHOSDigitizer.cxx @@ -18,6 +18,24 @@ /* History of cvs commits: * * $Log$ + * Revision 1.95 2007/04/10 07:20:52 kharlov + * Decalibration should use the same CDB as calibration in AliPHOSClusterizerv1 + * + * Revision 1.94 2007/02/01 10:34:47 hristov + * Removing warnings on Solaris x86 + * + * Revision 1.93 2006/10/17 13:17:01 kharlov + * Replace AliInfo by AliDebug + * + * Revision 1.92 2006/08/28 10:01:56 kharlov + * Effective C++ warnings fixed (Timur Pocheptsov) + * + * Revision 1.91 2006/04/29 20:25:30 hristov + * Decalibration is implemented (Yu.Kharlov) + * + * Revision 1.90 2006/04/22 10:30:17 hristov + * Add fEnergy to AliPHOSDigit and operate with EMC amplitude in energy units (Yu.Kharlov) + * * Revision 1.89 2006/04/11 15:22:59 hristov * run number in query set to -1: forces AliCDBManager to use its run number (A.Colla) * @@ -96,24 +114,64 @@ ClassImp(AliPHOSDigitizer) //____________________________________________________________________________ - AliPHOSDigitizer::AliPHOSDigitizer():AliDigitizer("",""), - fInput(0), - fInputFileNames(0x0), - fEventNames(0x0) +AliPHOSDigitizer::AliPHOSDigitizer() : + AliDigitizer("",""), + fDefaultInit(kTRUE), + fDigitsInRun(0), + fInit(kFALSE), + fInput(0), + fInputFileNames(0x0), + fEventNames(0x0), + fEmcCrystals(0), + fPinNoise(0.f), + fEMCDigitThreshold(0.f), + fCPVNoise(0.f), + fCPVDigitThreshold(0.f), + fTimeResolution(0.f), + fTimeThreshold(0.f), + fTimeSignalLength(0.f), + fADCchanelEmc(0.f), + fADCpedestalEmc(0.f), + fNADCemc(0), + fADCchanelCpv(0.f), + fADCpedestalCpv(0.f), + fNADCcpv(0), + fEventFolderName(""), + fFirstEvent(0), + fLastEvent(0) { // ctor InitParameters() ; - fDefaultInit = kTRUE ; fManager = 0 ; // We work in the standalong mode - fEventFolderName = "" ; } //____________________________________________________________________________ AliPHOSDigitizer::AliPHOSDigitizer(TString alirunFileName, TString eventFolderName): - AliDigitizer("PHOS"+AliConfig::Instance()->GetDigitizerTaskName(), - alirunFileName), - fInputFileNames(0), fEventNames(0), fEventFolderName(eventFolderName) + AliDigitizer("PHOS"+AliConfig::Instance()->GetDigitizerTaskName(), alirunFileName), + fDefaultInit(kFALSE), + fDigitsInRun(0), + fInit(kFALSE), + fInput(0), + fInputFileNames(0x0), + fEventNames(0x0), + fEmcCrystals(0), + fPinNoise(0.f), + fEMCDigitThreshold(0.f), + fCPVNoise(0.f), + fCPVDigitThreshold(0.f), + fTimeResolution(0.f), + fTimeThreshold(0.f), + fTimeSignalLength(0.f), + fADCchanelEmc(0.f), + fADCpedestalEmc(0.f), + fNADCemc(0), + fADCchanelCpv(0.f), + fADCpedestalCpv(0.f), + fNADCcpv(0), + fEventFolderName(eventFolderName), + fFirstEvent(0), + fLastEvent(0) { // ctor InitParameters() ; @@ -123,37 +181,66 @@ AliPHOSDigitizer::AliPHOSDigitizer(TString alirunFileName, } //____________________________________________________________________________ -AliPHOSDigitizer::AliPHOSDigitizer(const AliPHOSDigitizer & d) - : AliDigitizer(d) +AliPHOSDigitizer::AliPHOSDigitizer(const AliPHOSDigitizer & d) : + AliDigitizer(d), + fDefaultInit(d.fDefaultInit), + fDigitsInRun(d.fDigitsInRun), + fInit(d.fInit), + fInput(d.fInput), + fInputFileNames(0x0),//? + fEventNames(0x0),//? + fEmcCrystals(d.fEmcCrystals), + fPinNoise(d.fPinNoise), + fEMCDigitThreshold(d.fEMCDigitThreshold), + fCPVNoise(d.fCPVNoise), + fCPVDigitThreshold(d.fCPVDigitThreshold), + fTimeResolution(d.fTimeResolution), + fTimeThreshold(d.fTimeThreshold), + fTimeSignalLength(d.fTimeSignalLength), + fADCchanelEmc(d.fADCchanelEmc), + fADCpedestalEmc(d.fADCpedestalEmc), + fNADCemc(d.fNADCemc), + fADCchanelCpv(d.fADCchanelCpv), + fADCpedestalCpv(d.fADCpedestalCpv), + fNADCcpv(d.fNADCcpv), + fEventFolderName(d.fEventFolderName), + fFirstEvent(d.fFirstEvent), + fLastEvent(d.fLastEvent) { // copyy ctor - SetName(d.GetName()) ; SetTitle(d.GetTitle()) ; - fPinNoise = d.fPinNoise ; - fEMCDigitThreshold = d.fEMCDigitThreshold ; - fCPVNoise = d.fCPVNoise ; - fCPVDigitThreshold = d.fCPVDigitThreshold ; - fTimeResolution = d.fTimeResolution ; - fTimeThreshold = d.fTimeThreshold ; - fTimeSignalLength = d.fTimeSignalLength ; - fADCchanelEmc = d.fADCchanelEmc ; - fADCpedestalEmc = d.fADCpedestalEmc ; - fNADCemc = d.fNADCemc ; - fADCchanelCpv = d.fADCchanelCpv ; - fADCpedestalCpv = d.fADCpedestalCpv ; - fNADCcpv = d.fNADCcpv ; - fEventFolderName = d.fEventFolderName; } //____________________________________________________________________________ -AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd): - AliDigitizer(rd,"PHOS"+AliConfig::Instance()->GetDigitizerTaskName()), - fEventFolderName(0) +AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd) : + AliDigitizer(rd,"PHOS"+AliConfig::Instance()->GetDigitizerTaskName()), + fDefaultInit(kFALSE), + fDigitsInRun(0), + fInit(kFALSE), + fInput(0), + fInputFileNames(0x0), + fEventNames(0x0), + fEmcCrystals(0), + fPinNoise(0.f), + fEMCDigitThreshold(0.f), + fCPVNoise(0.f), + fCPVDigitThreshold(0.f), + fTimeResolution(0.f), + fTimeThreshold(0.f), + fTimeSignalLength(0.f), + fADCchanelEmc(0.f), + fADCpedestalEmc(0.f), + fNADCemc(0), + fADCchanelCpv(0.f), + fADCpedestalCpv(0.f), + fNADCcpv(0), + fEventFolderName(fManager->GetInputFolderName(0)), + fFirstEvent(0), + fLastEvent(0) { // ctor Init() is called by RunDigitizer fManager = rd ; - fEventFolderName = fManager->GetInputFolderName(0) ; SetTitle(dynamic_cast(fManager->GetInputStream(0))->GetFileName(0)); InitParameters() ; fDefaultInit = kFALSE ; @@ -187,8 +274,8 @@ void AliPHOSDigitizer::Digitize(Int_t event) Int_t ReadEvent = event ; if (fManager) ReadEvent = dynamic_cast(fManager->GetInputStream(0))->GetCurrentEventNumber() ; - AliInfo(Form("Adding event %d from input stream 0 %s %s", - ReadEvent, GetTitle(), fEventFolderName.Data())) ; + AliDebug(1,Form("Adding event %d from input stream 0 %s %s", + ReadEvent, GetTitle(), fEventFolderName.Data())) ; gime->Event(ReadEvent, "S") ; TClonesArray * digits = gime->Digits() ; digits->Clear() ; @@ -220,13 +307,13 @@ void AliPHOSDigitizer::Digitize(Int_t event) for(i = 1 ; i < fInput ; i++){ TString tempo(fEventNames[i]) ; tempo += i ; - AliPHOSGetter * gime = AliPHOSGetter::Instance(fInputFileNames[i], tempo) ; + AliPHOSGetter * gime1 = AliPHOSGetter::Instance(fInputFileNames[i], tempo) ; if (fManager) ReadEvent = dynamic_cast(fManager->GetInputStream(i))->GetCurrentEventNumber() ; AliInfo(Form("Adding event %d from input stream %d %s %s", ReadEvent, i, fInputFileNames[i].Data(), tempo.Data())) ; - gime->Event(ReadEvent,"S"); - sdigArray->AddAt(gime->SDigits(), i) ; + gime1->Event(ReadEvent,"S"); + sdigArray->AddAt(gime1->SDigits(), i) ; } //Find the first crystal with signal @@ -290,7 +377,7 @@ void AliPHOSDigitizer::Digitize(Int_t event) new((*ticks)[contrib++]) AliPHOSTick(curSDigit->GetTime(),0, b); new((*ticks)[contrib++]) AliPHOSTick(curSDigit->GetTime()+fTimeSignalLength, -a, -b); - *digit = *digit + *curSDigit ; //add energies + *digit += *curSDigit ; //add energies index[i]++ ; if( dynamic_cast(sdigArray->At(i))->GetEntriesFast() > index[i] ) @@ -345,7 +432,7 @@ void AliPHOSDigitizer::Digitize(Int_t event) curSDigit->ShiftPrimary(primaryoffset) ; //add energies - *digit = *digit + *curSDigit ; + *digit += *curSDigit ; index[i]++ ; if( dynamic_cast(sdigArray->At(i))->GetEntriesFast() > index[i] ) curSDigit = dynamic_cast( dynamic_cast(sdigArray->At(i))->At(index[i]) ) ; @@ -372,8 +459,7 @@ void AliPHOSDigitizer::Digitize(Int_t event) //remove digits below thresholds for(i = 0 ; i < nEMC ; i++){ digit = dynamic_cast( digits->At(i) ) ; - // YVK: amplitude is in energy units -// if(sDigitizer->Calibrate( digit->GetAmp() ) < fEMCDigitThreshold) + DecalibrateEMC(digit); if(digit->GetEnergy() < fEMCDigitThreshold) digits->RemoveAt(i) ; else @@ -396,20 +482,52 @@ void AliPHOSDigitizer::Digitize(Int_t event) digit = dynamic_cast( digits->At(i) ) ; digit->SetIndexInList(i) ; if(digit->GetId() > fEmcCrystals){ //digitize CPV only - digit->SetAmp(DigitizeEnergy(digit->GetEnergy(),digit->GetId()) ) ; + digit->SetAmp(DigitizeCPV(digit->GetEnergy(),digit->GetId()) ) ; } } + + Int_t relId[4]; + + //set amplitudes in bad channels to zero + for(i = 0 ; i GetEntries(); i++){ + digit = dynamic_cast( digits->At(i) ) ; + gime->PHOSGeometry()->AbsToRelNumbering(digit->GetId(),relId); + if(relId[1] == 0) // Emc + if(gime->CalibData()->IsBadChannelEmc(relId[0],relId[3],relId[2])) digit->SetEnergy(0.); + } + } //____________________________________________________________________________ -Int_t AliPHOSDigitizer::DigitizeEnergy(Float_t energy, Int_t absId) +void AliPHOSDigitizer::DecalibrateEMC(AliPHOSDigit *digit) { - // Returns digitized value of the energy in a cell absId + // Decalibrate EMC digit, i.e. change its energy by a factor read from CDB + + AliPHOSGetter* gime = AliPHOSGetter::Instance(); + + if(!gime->CalibData()) { + AliPHOSCalibData* cdb = new AliPHOSCalibData(-1); + gime->SetCalibData(cdb); + } + + //Determine rel.position of the cell absolute ID + Int_t relId[4]; + gime->PHOSGeometry()->AbsToRelNumbering(digit->GetId(),relId); + Int_t module=relId[0]; + Int_t row =relId[2]; + Int_t column=relId[3]; + Float_t decalibration = gime->CalibData()->GetADCchannelEmc(module,column,row); + Float_t energy = digit->GetEnergy() / decalibration; + digit->SetEnergy(energy); +} +//____________________________________________________________________________ +Int_t AliPHOSDigitizer::DigitizeCPV(Float_t charge, Int_t absId) +{ + // Returns digitized value of the CPV charge in a pad absId AliPHOSGetter* gime = AliPHOSGetter::Instance(); if(!gime->CalibData()) { - //AliPHOSCalibData* cdb = new AliPHOSCalibData(gAlice->GetRunNumber()); // original AliPHOSCalibData* cdb = new AliPHOSCalibData(-1); // use AliCDBManager's run number gime->SetCalibData(cdb); } @@ -421,31 +539,22 @@ Int_t AliPHOSDigitizer::DigitizeEnergy(Float_t energy, Int_t absId) Int_t row =relId[2]; Int_t column=relId[3]; - Int_t chanel ; + Int_t channel = 0; - if(absId <= fEmcCrystals){ //digitize as EMC + if(absId > fEmcCrystals){ //digitize CPV only //reading calibration data for cell absId. //If no calibration DB found, accept default values. - if(gime->CalibData()) { - fADCpedestalEmc = gime->CalibData()->GetADCpedestalEmc(module,column,row); - fADCchanelEmc = gime->CalibData()->GetADCchannelEmc(module,column,row); - } - - chanel = (Int_t) TMath::Ceil((energy - fADCpedestalEmc)/fADCchanelEmc) ; - if(chanel > fNADCemc ) chanel = fNADCemc ; - } - else{ //Digitize as CPV if(gime->CalibData()) { fADCpedestalCpv = gime->CalibData()->GetADCpedestalCpv(module,column,row); - fADCchanelCpv = gime->CalibData()->GetADCchannelCpv(module,column,row); + fADCchanelCpv = gime->CalibData()->GetADCchannelCpv( module,column,row); } - chanel = (Int_t) TMath::Ceil((energy - fADCpedestalCpv)/fADCchanelCpv) ; - if(chanel > fNADCcpv ) chanel = fNADCcpv ; + channel = (Int_t) TMath::Ceil((charge - fADCpedestalCpv)/fADCchanelCpv) ; + if(channel > fNADCcpv ) channel = fNADCcpv ; } - return chanel ; + return channel ; } //____________________________________________________________________________ @@ -593,8 +702,8 @@ void AliPHOSDigitizer::InitParameters() fTimeResolution = 0.5e-9 ; // [sec] fTimeSignalLength = 1.0e-9 ; // [sec] fDigitsInRun = 0 ; - fADCchanelEmc = 0.0015; // width of one ADC channel in GeV - fADCpedestalEmc = 0.005 ; // + fADCchanelEmc = 1.0; // Coefficient between real and measured energies in EMC + fADCpedestalEmc = 0. ; // fNADCemc = (Int_t) TMath::Power(2,16) ; // number of channels in EMC ADC fADCchanelCpv = 0.0012 ; // width of one ADC channel in CPV 'popugais'