X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSDigitizer.cxx;h=40cae90902f8b24f169714c2a4f91135e7f19ba6;hb=7d01c766ef2449471108960f37d7fb52655dd2b1;hp=95d3e279011052fc4ea88cbe8084475813f1edbe;hpb=45fa49cabf8f0af1af44bdfcdb2c677e4a3ed397;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSDigitizer.cxx b/PHOS/AliPHOSDigitizer.cxx index 95d3e279011..40cae90902f 100644 --- a/PHOS/AliPHOSDigitizer.cxx +++ b/PHOS/AliPHOSDigitizer.cxx @@ -15,6 +15,64 @@ /* $Id$ */ +/* History of cvs commits: + * + * $Log$ + * Revision 1.102 2007/10/19 18:04:29 schutz + * The standalone QA data maker is called from AliSimulation and AliReconstruction outside the event loop; i.e. re-reading the data. The QA data making in the event loop has been commented out. + * + * Revision 1.101 2007/10/14 21:08:10 schutz + * Introduced the checking of QA results from previous step before entering the event loop + * + * Revision 1.100 2007/10/10 09:05:10 schutz + * Changing name QualAss to QA + * + * Revision 1.99 2007/09/30 17:08:20 schutz + * Introducing the notion of QA data acquisition cycle (needed by online) + * + * Revision 1.98 2007/09/26 14:22:17 cvetan + * Important changes to the reconstructor classes. Complete elimination of the run-loaders, which are now steered only from AliReconstruction. Removal of the corresponding Reconstruct() and FillESD() methods. + * + * Revision 1.97 2007/08/07 14:12:03 kharlov + * Quality assurance added (Yves Schutz) + * + * Revision 1.96 2007/04/28 10:43:36 policheh + * Dead channels simulation: digit energy sets to 0. + * + * 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) + * + * Revision 1.88 2006/03/13 14:05:43 kharlov + * Calibration objects for EMC and CPV + * + * Revision 1.87 2005/08/24 15:33:49 kharlov + * Calibration data for raw digits + * + * Revision 1.86 2005/07/12 20:07:35 hristov + * Changes needed to run simulation and reconstrruction in the same AliRoot session + * + * Revision 1.85 2005/05/28 14:19:04 schutz + * Compilation warnings fixed by T.P. + * + */ //_________________________________________________________________________ //*-- Author : Dmitri Peressounko (SUBATECH & Kurchatov Institute) @@ -64,7 +122,7 @@ // --- Standard library --- // --- AliRoot header files --- - +#include "AliLog.h" #include "AliRunDigitizer.h" #include "AliPHOSDigit.h" #include "AliPHOSGetter.h" @@ -72,81 +130,187 @@ #include "AliPHOSSDigitizer.h" #include "AliPHOSGeometry.h" #include "AliPHOSTick.h" +#include "AliPHOSQADataMaker.h" 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), +// fQADM (0x0), + fEventCounter(0) { // ctor InitParameters() ; - fDefaultInit = kTRUE ; fManager = 0 ; // We work in the standalong mode - fEventFolderName = "" ; } //____________________________________________________________________________ -AliPHOSDigitizer::AliPHOSDigitizer(TString alirunFileName, TString eventFolderName): - AliDigitizer("PHOS"+AliConfig::fgkDigitizerTaskName, alirunFileName), - fInputFileNames(0), fEventNames(0), fEventFolderName(eventFolderName) +AliPHOSDigitizer::AliPHOSDigitizer(TString alirunFileName, + TString 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), +// fQADM (0x0), + fEventCounter(0) { // ctor InitParameters() ; Init() ; fDefaultInit = kFALSE ; fManager = 0 ; // We work in the standalong mode + // //Initialize the quality assurance data maker only once +// fQADM = new AliPHOSQADataMaker() ; +// //FIXME: get the run number +// Int_t run = 0 ; +// //EMXIF +// GetQADataMaker()->Init(AliQA::kDIGITS, run, fgkCycles) ; +// GetQADataMaker()->StartOfCycle(AliQA::kDIGITS) ; } //____________________________________________________________________________ -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), +// fQADM (d.fQADM), + fEventCounter(0) + { // 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; +//Initialize the quality assurance data maker only once + //FIXME: get the run number +// Int_t run = 0 ; +// //EMXIF +// GetQADataMaker()->Init(AliQA::kDIGITS, run, fgkCycles) ; +// GetQADataMaker()->StartOfCycle(AliQA::kDIGITS) ; } //____________________________________________________________________________ -AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * rd): - AliDigitizer(rd,"PHOS"+AliConfig::fgkDigitizerTaskName), - 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), +// fQADM (0x0), + fEventCounter(0) + { // ctor Init() is called by RunDigitizer fManager = rd ; - fEventFolderName = fManager->GetInputFolderName(0) ; SetTitle(dynamic_cast(fManager->GetInputStream(0))->GetFileName(0)); InitParameters() ; fDefaultInit = kFALSE ; +//Initialize the quality assurance data maker only once +// fQADM = new AliPHOSQADataMaker() ; +// //FIXME: get the run number +// Int_t run = 0 ; +// //EMXIF +// GetQADataMaker()->Init(AliQA::kDIGITS, run) ; +// GetQADataMaker()->StartOfCycle(AliQA::kDIGITS) ; } //____________________________________________________________________________ AliPHOSDigitizer::~AliPHOSDigitizer() { + AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle()) ; + + // Clean Digitizer from the white board + gime->PhosLoader()->CleanDigitizer() ; // dtor - AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle(),fEventFolderName); - gime->PhosLoader()->CleanDigitizer(); delete [] fInputFileNames ; delete [] fEventNames ; - + +// delete fQADM ; + } //____________________________________________________________________________ @@ -155,16 +319,17 @@ void AliPHOSDigitizer::Digitize(Int_t event) // Makes the digitization of the collected summable digits. // It first creates the array of all PHOS modules - // filled with noise (different for EMC, CPV and PPSD) and + // filled with noise (different for EMC, and CPV) and // then adds contributions from SDigits. // This design avoids scanning over the list of digits to add // contribution to new SDigits only. - AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle(), fEventFolderName) ; + AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle()) ; Int_t ReadEvent = event ; if (fManager) ReadEvent = dynamic_cast(fManager->GetInputStream(0))->GetCurrentEventNumber() ; - Info("Digitize", "Adding event %d from input stream 0", ReadEvent) ; + 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() ; @@ -186,7 +351,8 @@ void AliPHOSDigitizer::Digitize(Int_t event) AliPHOSSDigitizer * sDigitizer = gime->SDigitizer(); if ( !sDigitizer ) - Fatal("Digitize", "SDigitizer with name %s %s not found", fEventFolderName.Data(), GetTitle() ) ; + AliFatal(Form("SDigitizer with name %s %s not found", + GetTitle(), fEventFolderName.Data() )) ; //take all the inputs to add together and load the SDigits TObjArray * sdigArray = new TObjArray(fInput) ; @@ -195,15 +361,16 @@ 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() ; - Info("Digitize", "Adding event %d from input stream %d", ReadEvent, i) ; - gime->Event(ReadEvent,"S"); - sdigArray->AddAt(gime->SDigits(), i) ; + AliInfo(Form("Adding event %d from input stream %d %s %s", + ReadEvent, i, fInputFileNames[i].Data(), tempo.Data())) ; + gime1->Event(ReadEvent,"S"); + sdigArray->AddAt(gime1->SDigits(), i) ; } - //Find the first crystall with signal + //Find the first crystal with signal Int_t nextSig = 200000 ; TClonesArray * sdigits ; for(i = 0 ; i < fInput ; i++){ @@ -226,7 +393,9 @@ void AliPHOSDigitizer::Digitize(Int_t event) //Put Noise contribution for(absID = 1 ; absID <= nEMC ; absID++){ Float_t noise = gRandom->Gaus(0., fPinNoise) ; - new((*digits)[absID-1]) AliPHOSDigit( -1, absID, sDigitizer->Digitize(noise), TimeOfNoise() ) ; + // YVK: do not digitize amplitudes for EMC +// new((*digits)[absID-1]) AliPHOSDigit( -1, absID, sDigitizer->Digitize(noise), TimeOfNoise() ) ; + new((*digits)[absID-1]) AliPHOSDigit( -1, absID, noise, TimeOfNoise() ) ; //look if we have to add signal? digit = dynamic_cast(digits->At(absID-1)) ; @@ -234,11 +403,11 @@ void AliPHOSDigitizer::Digitize(Int_t event) //Add SDigits from all inputs ticks->Clear() ; Int_t contrib = 0 ; - Float_t a = digit->GetAmp() ; + Float_t a = digit->GetEnergy() ; Float_t b = TMath::Abs( a / fTimeSignalLength) ; //Mark the beginning of the signal new((*ticks)[contrib++]) AliPHOSTick(digit->GetTime(),0, b); - //Mark the end of the ignal + //Mark the end of the signal new((*ticks)[contrib++]) AliPHOSTick(digit->GetTime()+fTimeSignalLength, -a, -b); //loop over inputs @@ -257,13 +426,13 @@ void AliPHOSDigitizer::Digitize(Int_t event) primaryoffset = 10000000*i ; curSDigit->ShiftPrimary(primaryoffset) ; - a = curSDigit->GetAmp() ; + a = curSDigit->GetEnergy() ; b = a /fTimeSignalLength ; 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] ) curSDigit = dynamic_cast(dynamic_cast(sdigArray->At(i))->At(index[i])) ; @@ -317,7 +486,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]) ) ; @@ -344,7 +513,8 @@ void AliPHOSDigitizer::Digitize(Int_t event) //remove digits below thresholds for(i = 0 ; i < nEMC ; i++){ digit = dynamic_cast( digits->At(i) ) ; - if(sDigitizer->Calibrate( digit->GetAmp() ) < fEMCDigitThreshold) + DecalibrateEMC(digit); + if(digit->GetEnergy() < fEMCDigitThreshold) digits->RemoveAt(i) ; else digit->SetTime(gRandom->Gaus(digit->GetTime(),fTimeResolution) ) ; @@ -352,7 +522,8 @@ void AliPHOSDigitizer::Digitize(Int_t event) for(i = nEMC; i < nCPV ; i++) - if( sDigitizer->Calibrate( dynamic_cast(digits->At(i))->GetAmp() ) < fCPVDigitThreshold ) +// if( sDigitizer->Calibrate( dynamic_cast(digits->At(i))->GetAmp() ) < fCPVDigitThreshold ) + if( dynamic_cast(digits->At(i))->GetEnergy() < fCPVDigitThreshold ) digits->RemoveAt(i) ; digits->Compress() ; @@ -364,26 +535,80 @@ void AliPHOSDigitizer::Digitize(Int_t event) for (i = 0 ; i < ndigits ; i++) { digit = dynamic_cast( digits->At(i) ) ; digit->SetIndexInList(i) ; - Float_t energy = sDigitizer->Calibrate(digit->GetAmp()) ; - digit->SetAmp(DigitizeEnergy(energy,digit->GetId()) ) ; + if(digit->GetId() > fEmcCrystals){ //digitize CPV only + 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) +{ + // 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 energy in a cell absId + // Returns digitized value of the CPV charge in a pad absId + + AliPHOSGetter* gime = AliPHOSGetter::Instance(); - Int_t chanel ; - if(absId <= fEmcCrystals){ //digitize as EMC - chanel = (Int_t) TMath::Ceil((energy - fADCpedestalEmc)/fADCchanelEmc) ; - if(chanel > fNADCemc ) chanel = fNADCemc ; + if(!gime->CalibData()) { + AliPHOSCalibData* cdb = new AliPHOSCalibData(-1); // use AliCDBManager's run number + gime->SetCalibData(cdb); } - else{ //Digitize as CPV - chanel = (Int_t) TMath::Ceil((energy - fADCpedestalCpv)/fADCchanelCpv) ; - if(chanel > fNADCcpv ) chanel = fNADCcpv ; + + //Determine rel.position of the cell absId + Int_t relId[4]; + gime->PHOSGeometry()->AbsToRelNumbering(absId,relId); + Int_t module=relId[0]; + Int_t row =relId[2]; + Int_t column=relId[3]; + + Int_t channel = 0; + + if(absId > fEmcCrystals){ //digitize CPV only + + //reading calibration data for cell absId. + //If no calibration DB found, accept default values. + + if(gime->CalibData()) { + fADCpedestalCpv = gime->CalibData()->GetADCpedestalCpv(module,column,row); + fADCchanelCpv = gime->CalibData()->GetADCchannelCpv( module,column,row); + } + + channel = (Int_t) TMath::Ceil((charge - fADCpedestalCpv)/fADCchanelCpv) ; + if(channel > fNADCcpv ) channel = fNADCcpv ; } - return chanel ; + return channel ; } //____________________________________________________________________________ @@ -396,7 +621,8 @@ void AliPHOSDigitizer::Exec(Option_t *option) // by default fLastEvent = fFirstEvent (process only one event) if (!fInit) { // to prevent overwrite existing file - Error( "Exec", "Give a version name different from %s", fEventFolderName.Data() ) ; + AliError(Form("Give a version name different from %s", + fEventFolderName.Data() )) ; return ; } @@ -405,27 +631,49 @@ void AliPHOSDigitizer::Exec(Option_t *option) return ; } - if(strstr(option,"tim")) - gBenchmark->Start("PHOSDigitizer"); + // // check the QA result for Hits and SDigits +// AliQA * qa = AliQA::Instance(AliQA::kPHOS) ; +// if ( qa->IsSet(AliQA::kPHOS, AliQA::kSIM, AliQA::kFATAL)) { +// AliFatal("QA status in Hits and/or SDIGITS was Fatal") ; +// } else if ( qa->IsSet(AliQA::kPHOS, AliQA::kSIM, AliQA::kERROR)) { +// AliError("QA status in Hits and/or SDIGITS was Error") ; +// } else if ( qa->IsSet(AliQA::kPHOS, AliQA::kSIM, AliQA::kWARNING) ) { +// AliWarning("QA status in Hits and/or SDIGITS was Warning") ; +// } else if ( qa->IsSet(AliQA::kPHOS, AliQA::kSIM, AliQA::kINFO) ) { +// AliInfo("QA status in Hits and/or SDIGITS was Info") ; +// } + + if(strstr(option,"tim")) + gBenchmark->Start("PHOSDigitizer"); -// if (fManager) -// fInput = fManager->GetNinputs() ; - - AliPHOSGetter * gime = AliPHOSGetter::Instance() ; + AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle()) ; + // Post Digitizer to the white board + gime->PostDigitizer(this) ; + if (fLastEvent == -1) fLastEvent = gime->MaxEvent() - 1 ; + else if (fManager) + fLastEvent = fFirstEvent ; Int_t nEvents = fLastEvent - fFirstEvent + 1; Int_t ievent ; for (ievent = fFirstEvent; ievent <= fLastEvent; ievent++) { - + fEventCounter++ ; gime->Event(ievent,"S") ; Digitize(ievent) ; //Add prepared SDigits to digits and add the noise +// //makes the quality assurance data +// if (GetQADataMaker()->IsCycleDone() ) { +// GetQADataMaker()->EndOfCycle(AliQA::kDIGITS) ; +// GetQADataMaker()->StartOfCycle(AliQA::kDIGITS) ; +// } +// GetQADataMaker()->Exec(AliQA::kDIGITS, gime->Digits()) ; +// GetQADataMaker()->Increment() ; + WriteDigits() ; if(strstr(option,"deb")) @@ -434,14 +682,22 @@ void AliPHOSDigitizer::Exec(Option_t *option) //increment the total number of Digits per run fDigitsInRun += gime->Digits()->GetEntriesFast() ; } + +// //Write the quality assurance data only after the last event +// if ( fEventCounter == gime->MaxEvent() ) { +// GetQADataMaker()->EndOfCycle(AliQA::kDIGITS) ; +// GetQADataMaker()->Finish() ; +// } + gime->PhosLoader()->CleanDigitizer(); + if(strstr(option,"tim")){ gBenchmark->Stop("PHOSDigitizer"); TString message ; message = " took %f seconds for Digitizing %f seconds per event\n" ; - Info("Exec", message.Data(), + AliInfo(Form( message.Data(), gBenchmark->GetCpuTime("PHOSDigitizer"), - gBenchmark->GetCpuTime("PHOSDigitizer")/nEvents ); + gBenchmark->GetCpuTime("PHOSDigitizer")/nEvents )); } } @@ -474,7 +730,8 @@ Bool_t AliPHOSDigitizer::Init() fInit = kTRUE ; AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle(), fEventFolderName) ; if ( gime == 0 ) { - Fatal("Init" ,"Could not obtain the Getter object for file %s and event %s !", GetTitle(), fEventFolderName.Data()) ; + AliFatal(Form("Could not obtain the Getter object for file %s and event %s !", + GetTitle(), fEventFolderName.Data())); return kFALSE; } @@ -484,13 +741,11 @@ Bool_t AliPHOSDigitizer::Init() TString opt("Digits") ; if(gime->VersionExists(opt) ) { - Error( "Init", "Give a version name different from %s", fEventFolderName.Data() ) ; + AliError(Form("Give a version name different from %s", + fEventFolderName.Data() )) ; fInit = kFALSE ; } - // Post Digitizer to the white board - gime->PostDigitizer(this) ; - fFirstEvent = 0 ; fLastEvent = fFirstEvent ; if (fManager) @@ -520,22 +775,23 @@ void AliPHOSDigitizer::InitParameters() { // Set initial parameters Digitizer - fPinNoise = 0.004 ; - fEMCDigitThreshold = 0.012 ; - fCPVNoise = 0.01; - fCPVDigitThreshold = 0.09 ; - fTimeResolution = 0.5e-9 ; - fTimeSignalLength = 1.0e-9 ; + fPinNoise = 0.004 ; // [GeV] + fEMCDigitThreshold = 0.012 ; // [GeV] + fCPVNoise = 0.01; // [aux units] + fCPVDigitThreshold = 0.09 ; // [aux units] + 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' fADCpedestalCpv = 0.012 ; // fNADCcpv = (Int_t) TMath::Power(2,12); // number of channels in CPV ADC - fTimeThreshold = 0.001*10000000 ; //Means 1 MeV in terms of SDigits amplitude +// fTimeThreshold = 0.001*10000000 ; //Means 1 MeV in terms of SDigits amplitude + fTimeThreshold = 0.001 ; // [GeV] SetEventRange(0,-1) ; } @@ -564,16 +820,16 @@ void AliPHOSDigitizer::MixWith(TString alirunFileName, TString eventFolderName) } // looking for file which contains AliRun if (gSystem->AccessPathName(alirunFileName)) {// file does not exist - Error("MixWith", "File %s does not exist!", alirunFileName.Data()) ; + AliError(Form("File %s does not exist!", alirunFileName.Data())) ; return ; } // looking for the file which contains SDigits AliPHOSGetter * gime = AliPHOSGetter::Instance() ; TString fileName( gime->GetSDigitsFileName() ) ; - if ( eventFolderName != AliConfig::fgkDefaultEventFolderName) // only if not the default folder name + if ( eventFolderName != AliConfig::GetDefaultEventFolderName()) // only if not the default folder name fileName = fileName.ReplaceAll(".root", "") + "_" + eventFolderName + ".root" ; if ( (gSystem->AccessPathName(fileName)) ) { - Error("MixWith", "The file %s does not exist!", fileName.Data()) ; + AliError(Form("The file %s does not exist!", fileName.Data())) ; return ; } // need to increase the arrays @@ -593,10 +849,10 @@ void AliPHOSDigitizer::MixWith(TString alirunFileName, TString eventFolderName) } //__________________________________________________________________ -void AliPHOSDigitizer::Print()const +void AliPHOSDigitizer::Print(const Option_t *)const { // Print Digitizer's parameters - Info("Print", "\n------------------- %s -------------", GetName() ) ; + AliInfo(Form("\n------------------- %s -------------", GetName() )) ; if( strcmp(fEventFolderName.Data(), "") != 0 ){ printf(" Writing Digits to branch with title %s\n", fEventFolderName.Data()) ; @@ -612,7 +868,7 @@ void AliPHOSDigitizer::Print()const tempo += index ; AliPHOSGetter * gime = AliPHOSGetter::Instance(fInputFileNames[index], tempo) ; TString fileName( gime->GetSDigitsFileName() ) ; - if ( fEventNames[index] != AliConfig::fgkDefaultEventFolderName) // only if not the default folder name + if ( fEventNames[index] != AliConfig::GetDefaultEventFolderName()) // only if not the default folder name fileName = fileName.ReplaceAll(".root", "") + "_" + fEventNames[index] + ".root" ; printf ("Adding SDigits from %s %s\n", fInputFileNames[index].Data(), fileName.Data()) ; } @@ -620,14 +876,14 @@ void AliPHOSDigitizer::Print()const printf("\nWriting digits to %s", gime->GetDigitsFileName().Data()) ; printf("\nWith following parameters:\n") ; - printf(" Electronics noise in EMC (fPinNoise) = %f\n", fPinNoise ) ; - printf(" Threshold in EMC (fEMCDigitThreshold) = %f\n", fEMCDigitThreshold ) ; - printf(" Noise in CPV (fCPVNoise) = %f\n", fCPVNoise ) ; - printf(" Threshold in CPV (fCPVDigitThreshold) = %f\n",fCPVDigitThreshold ) ; + printf(" Electronics noise in EMC (fPinNoise) = %f GeV\n", fPinNoise ) ; + printf(" Threshold in EMC (fEMCDigitThreshold) = %f GeV\n", fEMCDigitThreshold ) ; + printf(" Noise in CPV (fCPVNoise) = %f aux units\n", fCPVNoise ) ; + printf(" Threshold in CPV (fCPVDigitThreshold) = %f aux units\n",fCPVDigitThreshold ) ; printf(" ---------------------------------------------------\n") ; } else - Info("Print", "AliPHOSDigitizer not initialized" ) ; + AliInfo(Form("AliPHOSDigitizer not initialized" )) ; } @@ -639,7 +895,7 @@ void AliPHOSDigitizer::Print()const AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle(), fEventFolderName) ; TClonesArray * digits = gime->Digits() ; - Info("PrintDigits", "%d", digits->GetEntriesFast()) ; + AliInfo(Form("%d", digits->GetEntriesFast())) ; printf("\nevent %d", gAlice->GetEvNumber()) ; printf("\n Number of entries in Digits list %d", digits->GetEntriesFast() ) ; @@ -656,8 +912,10 @@ void AliPHOSDigitizer::Print()const digit = (AliPHOSDigit * ) digits->At(index) ; if(digit->GetNprimary() == 0) continue; - printf("%6d %8d %6.5e %4d %2d :", - digit->GetId(), digit->GetAmp(), digit->GetTime(), digit->GetIndexInList(), digit->GetNprimary()) ; +// printf("%6d %8d %6.5e %4d %2d :", +// digit->GetId(), digit->GetAmp(), digit->GetTime(), digit->GetIndexInList(), digit->GetNprimary()) ; // YVK + printf("%6d %.4f %6.5e %4d %2d :", + digit->GetId(), digit->GetEnergy(), digit->GetTime(), digit->GetIndexInList(), digit->GetNprimary()) ; Int_t iprimary; for (iprimary=0; iprimaryGetNprimary(); iprimary++) { printf("%d ",digit->GetPrimary(iprimary+1) ) ; @@ -693,9 +951,8 @@ void AliPHOSDigitizer::Print()const //__________________________________________________________________ Float_t AliPHOSDigitizer::TimeOfNoise(void) const { // Calculates the time signal generated by noise - //to be rewritten, now returns just big number - return 1. ; - + //PH Info("TimeOfNoise", "Change me") ; + return gRandom->Rndm() * 1.28E-5; } //__________________________________________________________________ @@ -726,13 +983,13 @@ void AliPHOSDigitizer::WriteDigits() // and branch "AliPHOSDigitizer", with the same title to keep all the parameters // and names of files, from which digits are made. - AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle(), fEventFolderName) ; + AliPHOSGetter * gime = AliPHOSGetter::Instance(GetTitle()) ; const TClonesArray * digits = gime->Digits() ; TTree * treeD = gime->TreeD(); // -- create Digits branch Int_t bufferSize = 32000 ; - TBranch * digitsBranch = treeD->Branch("PHOS",&digits,bufferSize); + TBranch * digitsBranch = treeD->Branch("PHOS","TClonesArray",&digits,bufferSize); digitsBranch->SetTitle(fEventFolderName); digitsBranch->Fill() ;