X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EMCAL%2FAliEMCALSDigitizer.cxx;h=476610b447e30ede56ceb81cad2140837f74cc31;hb=6be6d93bc160996930889a0452ab217fcd260922;hp=1c56cf8c3ef620ad9dffb8ada8062c07d2062b08;hpb=bda276cfe105b7a0670fd3241af4cf1189c86b8a;p=u%2Fmrichter%2FAliRoot.git diff --git a/EMCAL/AliEMCALSDigitizer.cxx b/EMCAL/AliEMCALSDigitizer.cxx index 1c56cf8c3ef..476610b447e 100644 --- a/EMCAL/AliEMCALSDigitizer.cxx +++ b/EMCAL/AliEMCALSDigitizer.cxx @@ -49,54 +49,95 @@ ////////////////////////////////////////////////////////////////////////////// // --- ROOT system --- -#include "TFile.h" -#include "TTask.h" -#include "TTree.h" -#include "TSystem.h" -#include "TROOT.h" -#include "TFolder.h" -#include "TBenchmark.h" -#include "TGeometry.h" +#include +#include +#include +#include +#include +#include // --- Standard library --- +#include "stdlib.h" // --- AliRoot header files --- -#include "AliRun.h" -#include "AliHeader.h" +#include "AliLog.h" +#include "AliRunLoader.h" +#include "AliStack.h" #include "AliEMCALDigit.h" -#include "AliEMCALGeometry.h" -#include "AliEMCALGetter.h" +#include "AliEMCALLoader.h" #include "AliEMCALHit.h" #include "AliEMCALSDigitizer.h" +#include "AliEMCALGeometry.h" +#include "AliEMCALHistoUtilities.h" ClassImp(AliEMCALSDigitizer) //____________________________________________________________________________ - AliEMCALSDigitizer::AliEMCALSDigitizer():TTask("AliEMCALSDigitizer","") +AliEMCALSDigitizer::AliEMCALSDigitizer() + : TTask("",""), + fA(0.),fB(0.),fECPrimThreshold(0.), + fDefaultInit(kTRUE), + fEventFolderName(0), + fInit(0), + fSDigitsInRun(0), + fFirstEvent(0), + fLastEvent(0), + fSampling(0.), + fControlHists(0), + fHists(0) { // ctor - InitParameters() ; - fSplitFile = 0 ; - fToSplit = kFALSE ; - fDefaultInit = kTRUE ; + InitParameters(); } //____________________________________________________________________________ -AliEMCALSDigitizer::AliEMCALSDigitizer(const char* headerFile, const char *sDigitsTitle, const Bool_t toSplit): -TTask(sDigitsTitle, headerFile) +AliEMCALSDigitizer::AliEMCALSDigitizer(const char * alirunFileName, + const char * eventFolderName) + : TTask("EMCAL"+AliConfig::Instance()->GetSDigitizerTaskName(), alirunFileName), + fA(0.),fB(0.),fECPrimThreshold(0.), + fDefaultInit(kFALSE), + fEventFolderName(eventFolderName), + fInit(0), + fSDigitsInRun(0), + fFirstEvent(0), + fLastEvent(0), + fSampling(0.), + fControlHists(1), + fHists(0) { // ctor - fToSplit = toSplit ; Init(); InitParameters() ; - fDefaultInit = kFALSE ; + if(fControlHists) BookControlHists(1); } + //____________________________________________________________________________ -AliEMCALSDigitizer::~AliEMCALSDigitizer() +AliEMCALSDigitizer::AliEMCALSDigitizer(const AliEMCALSDigitizer & sd) + : TTask(sd.GetName(),sd.GetTitle()), + fA(sd.fA), + fB(sd.fB), + fECPrimThreshold(sd.fECPrimThreshold), + fDefaultInit(sd.fDefaultInit), + fEventFolderName(sd.fEventFolderName), + fInit(sd.fInit), + fSDigitsInRun(sd.fSDigitsInRun), + fFirstEvent(sd.fFirstEvent), + fLastEvent(sd.fLastEvent), + fSampling(sd.fSampling), + fControlHists(sd.fControlHists), + fHists(sd.fHists) { - // dtor - fSplitFile = 0 ; + //cpy ctor +} + + +//____________________________________________________________________________ +AliEMCALSDigitizer::~AliEMCALSDigitizer() { + //dtor + AliLoader *emcalLoader=0; + if ((emcalLoader = AliRunLoader::GetRunLoader()->GetDetectorLoader("EMCAL"))) + emcalLoader->CleanSDigitizer(); } //____________________________________________________________________________ @@ -108,285 +149,242 @@ void AliEMCALSDigitizer::Init(){ //============================================================= YS // The initialisation is now done by the getter - if( strcmp(GetTitle(), "") == 0 ) - SetTitle("galice.root") ; + fInit = kTRUE; - AliEMCALGetter * gime = AliEMCALGetter::GetInstance(GetTitle(), GetName(), fToSplit) ; - if ( gime == 0 ) { - Error("Init", "Could not obtain the Getter object !" ) ; + AliEMCALLoader *emcalLoader = dynamic_cast(AliRunLoader::GetRunLoader()->GetDetectorLoader("EMCAL")); + + if ( emcalLoader == 0 ) { + Fatal("Init", "Could not obtain the AliEMCALLoader"); return ; } - gime->PostSDigits( GetName(), GetTitle() ) ; + emcalLoader->PostSDigitizer(this); + emcalLoader->GetSDigitsDataLoader()->GetBaseTaskLoader()->SetDoNotReload(kTRUE); - fSplitFile = 0 ; - - if(fToSplit){ - // construct the name of the file as /path/EMCAL.SDigits.root - // First - extract full path if necessary - TString sDigitsFileName(GetTitle()) ; - Ssiz_t islash = sDigitsFileName.Last('/') ; - if(islash(gROOT->GetFile(sDigitsFileName.Data())); - if(!fSplitFile) - fSplitFile = TFile::Open(sDigitsFileName.Data(),"update") ; - } - - TString sdname(GetName() ); - sdname.Append(":") ; - sdname.Append(GetTitle() ) ; - SetName(sdname) ; - gime->PostSDigitizer(this) ; - } //____________________________________________________________________________ void AliEMCALSDigitizer::InitParameters() { - fA = 0; - fB = 10000000.; + //initialize parameters for sdigitization - AliEMCALGetter * gime = AliEMCALGetter::GetInstance() ; - const AliEMCALGeometry * geom = gime->EMCALGeometry() ; + const AliEMCALGeometry * geom = AliEMCALGeometry::GetInstance(); if (geom->GetSampling() == 0.) { - Error("InitParameters", "Sampling factor not set !") ; - abort() ; + Fatal("InitParameters", "Sampling factor not set !") ; } - else - Info("InitParameters", "Sampling factor set to %f\n", geom->GetSampling()) ; + // Initializes parameters + fA = 0; + fB = 1.e+6; // Changed 24 Apr 2007. Dynamic range now 2 TeV + fSampling = geom->GetSampling(); + + // threshold for deposit energy of hit + fECPrimThreshold = 0.05;// GeV // 22-may-07 was 0// 24-nov-04 - was 1.e-6; - // this threshold corresponds approximately to 100 MeV - fECPrimThreshold = 100E-3 / ( geom->GetSampling() * ( geom->GetNPRLayers() + geom->GetNECLayers()) ) * geom->GetNECLayers() ; - fPREPrimThreshold = 100E-3 / ( geom->GetSampling() * ( geom->GetNPRLayers() + geom->GetNECLayers()) ) * geom->GetNPRLayers() ; - fHCPrimThreshold = fECPrimThreshold/5. ; // 5 is totally arbitrary + AliDebug(2,Form("Print: \n------------------- %s -------------\n",GetName())); + AliDebug(2,Form(" fInit %i\n", int(fInit))); + AliDebug(2,Form(" fFirstEvent %i\n", fFirstEvent)); + AliDebug(2,Form(" fLastEvent %i\n", fLastEvent)); + AliDebug(2,Form(" Writing SDigits to branch with title %s\n", fEventFolderName.Data())); + AliDebug(2,Form(" with digitization parameters A = %f\n", fA)); + AliDebug(2,Form(" B = %f\n", fB)); + AliDebug(2,Form(" Threshold for EC Primary assignment = %f\n", fECPrimThreshold)); + AliDebug(2,Form(" Sampling = %f\n", fSampling)); + AliDebug(2,Form("---------------------------------------------------\n")); + + // Print(""); } //____________________________________________________________________________ void AliEMCALSDigitizer::Exec(Option_t *option) { - // Collects all hits in the section (PRE/ECAL/HCAL) of the same tower into digit - - if( strcmp(GetName(), "") == 0 ) - Init() ; - + // Collects all hit of the same tower into digits + TString o(option); o.ToUpper(); if (strstr(option, "print") ) { - Print("") ; + + AliDebug(2,Form("Print: \n------------------- %s -------------\n",GetName())); + AliDebug(2,Form(" fInit %i\n", int(fInit))); + AliDebug(2,Form(" fFirstEvent %i\n", fFirstEvent)); + AliDebug(2,Form(" fLastEvent %i\n", fLastEvent)); + AliDebug(2,Form(" Writing SDigits to branch with title %s\n", fEventFolderName.Data())); + AliDebug(2,Form(" with digitization parameters A = %f\n", fA)); + AliDebug(2,Form(" B = %f\n", fB)); + AliDebug(2,Form(" Threshold for EC Primary assignment = %f\n", fECPrimThreshold)); + AliDebug(2,Form(" Sampling = %f\n", fSampling)); + AliDebug(2,Form("---------------------------------------------------\n")); + + // Print(); return ; } if(strstr(option,"tim")) gBenchmark->Start("EMCALSDigitizer"); - //Check, if this branch already exits - AliEMCALGetter * gime = AliEMCALGetter::GetInstance() ; - if(gime->BranchExists("SDigits") ) - return; + AliRunLoader *rl = AliRunLoader::GetRunLoader(); + AliEMCALLoader *emcalLoader = dynamic_cast(rl->GetDetectorLoader("EMCAL")); - TString sdname(GetName()) ; - sdname.Remove(sdname.Index(GetTitle())-1) ; + //switch off reloading of this task while getting event + if (!fInit) { // to prevent overwrite existing file + AliError( Form("Give a version name different from %s", fEventFolderName.Data()) ) ; + return ; + } - Int_t nevents = gime->MaxEvent() ; - Int_t ievent ; - for(ievent = 0; ievent < nevents; ievent++){ - gime->Event(ievent,"H") ; - const TClonesArray * hits = gime->Hits() ; - TClonesArray * sdigits = gime->SDigits(sdname.Data()) ; + if (fLastEvent == -1) + fLastEvent = rl->GetNumberOfEvents() - 1 ; + else { + fLastEvent = TMath::Min(fLastEvent, rl->GetNumberOfEvents()-1); + } + Int_t nEvents = fLastEvent - fFirstEvent + 1; + + Int_t ievent; + Float_t energy=0.; // de * fSampling - 23-nov-04 + rl->LoadKinematics(); + rl->LoadHits("EMCAL"); + + for (ievent = fFirstEvent; ievent <= fLastEvent; ievent++) { + rl->GetEvent(ievent); + TTree * treeS = emcalLoader->TreeS(); + if ( !treeS ) { + emcalLoader->MakeSDigitsContainer(); + treeS = emcalLoader->TreeS(); + } + TClonesArray * hits = emcalLoader->Hits() ; + TClonesArray * sdigits = emcalLoader->SDigits() ; sdigits->Clear(); + Int_t nSdigits = 0 ; - - //Now make SDigits from hits, for EMCAL it is the same, so just copy - Int_t nPrim = static_cast((gAlice->TreeH())->GetEntries()) ; - // Attention nPrim is the number of primaries tracked by Geant - // and this number could be different to the number of Primaries in TreeK; - Int_t iprim ; - for ( iprim = 0 ; iprim < nPrim ; iprim++ ) { - //=========== Get the EMCAL branch from Hits Tree for the Primary iprim - gime->Track(iprim) ; - Int_t i; - for ( i = 0 ; i < hits->GetEntries() ; i++ ) { - AliEMCALHit * hit = dynamic_cast(hits->At(i)) ; - AliEMCALDigit * curSDigit = 0 ; - AliEMCALDigit * sdigit = 0 ; - Bool_t newsdigit = kTRUE; - - // Assign primary number only if deposited energy is significant - - const AliEMCALGeometry * geom = gime->EMCALGeometry() ; - - if (gDebug) { - Info("Exec", "id = %d energy = %f thresholdPRE = %f thresholdEC = %f thresholdHC = %f \n", - hit->GetId(), hit->GetEnergy(), fPREPrimThreshold, fECPrimThreshold, fHCPrimThreshold) ; - Info("Exec", "where PRE/ECAL/HCAL %d, %d, %d", geom->IsInPRE(hit->GetId()), geom->IsInECAL(hit->GetId()), geom->IsInHCAL(hit->GetId()) ) ; - } - if( geom->IsInPRE(hit->GetId()) ) - if( hit->GetEnergy() > fPREPrimThreshold ) - curSDigit = new AliEMCALDigit( hit->GetPrimary(), - hit->GetIparent(), hit->GetId(), - Digitize(hit->GetEnergy()), hit->GetTime() ) ; - else - curSDigit = new AliEMCALDigit( -1 , - -1 , - hit->GetId(), - Digitize(hit->GetEnergy()), hit->GetTime() ) ; - else if( geom->IsInECAL(hit->GetId()) ) - if( hit->GetEnergy() > fECPrimThreshold ) - curSDigit = new AliEMCALDigit( hit->GetPrimary(), - hit->GetIparent(), hit->GetId(), - Digitize(hit->GetEnergy()), hit->GetTime() ) ; - else - curSDigit = new AliEMCALDigit( -1 , - -1 , - hit->GetId(), - Digitize(hit->GetEnergy()), hit->GetTime() ) ; - else if( geom->IsInHCAL(hit->GetId()) ) - if( hit->GetEnergy() > fHCPrimThreshold ) - - curSDigit = new AliEMCALDigit( hit->GetPrimary(), - hit->GetIparent(), hit->GetId(), - Digitize(hit->GetEnergy()), hit->GetTime() ) ; + Int_t i; + AliEMCALGeometry *geom = AliEMCALGeometry::GetInstance(); + for ( i = 0 ; i < hits->GetEntries() ; i++ ) { + AliEMCALHit * hit = dynamic_cast(hits->At(i)) ; + AliEMCALDigit * curSDigit = 0 ; + AliEMCALDigit * sdigit = 0 ; + Bool_t newsdigit = kTRUE; + + // hit->GetId() - Absolute Id number EMCAL segment + if(geom->CheckAbsCellId(hit->GetId())) { // was IsInECA(hit->GetId()) + energy = hit->GetEnergy() * fSampling; // 23-nov-04 + if(energy > fECPrimThreshold ) + // Assign primary number only if deposited energy is significant + curSDigit = new AliEMCALDigit( hit->GetPrimary(), + hit->GetIparent(), hit->GetId(), + Digitize(energy), hit->GetTime(), + -1, energy ) ; else curSDigit = new AliEMCALDigit( -1 , -1 , hit->GetId(), - Digitize(hit->GetEnergy()), hit->GetTime() ) ; - - Int_t check = 0 ; - for(check= 0; check < nSdigits ; check++) { + Digitize(energy), hit->GetTime(), + -1, energy ) ; + } else { + Warning("Exec"," abs id %i is bad \n", hit->GetId()); + newsdigit = kFALSE; + curSDigit = 0; + } + + if(curSDigit != 0){ + for(Int_t check= 0; check < nSdigits ; check++) { sdigit = dynamic_cast(sdigits->At(check)) ; - if( sdigit->GetId() == curSDigit->GetId()) { // Are we in the same ECAL/HCAL/preshower tower ? + + if( sdigit->GetId() == curSDigit->GetId()) { // Are we in the same ECAL tower ? *sdigit = *sdigit + *curSDigit; newsdigit = kFALSE; } } - if (newsdigit) { - new((*sdigits)[nSdigits]) AliEMCALDigit(*curSDigit); - nSdigits++ ; - } - delete curSDigit ; - } // loop over all hits (hit = deposited energy/layer/entering particle) - } // loop over iprim - + } + if (newsdigit) { + new((*sdigits)[nSdigits]) AliEMCALDigit(*curSDigit); + nSdigits++ ; + } + delete curSDigit ; + } // loop over all hits (hit = deposited energy/entering particle) sdigits->Sort() ; nSdigits = sdigits->GetEntriesFast() ; fSDigitsInRun += nSdigits ; - sdigits->Expand(nSdigits) ; - - Int_t NPrimarymax = -1 ; - Int_t i ; + + Double_t e=0.,esum=0.; + AliEMCALHistoUtilities::FillH1(fHists, 0, double(sdigits->GetEntriesFast())); for (i = 0 ; i < sdigits->GetEntriesFast() ; i++) { AliEMCALDigit * sdigit = dynamic_cast(sdigits->At(i)) ; sdigit->SetIndexInList(i) ; + + AliEMCALHistoUtilities::FillH1(fHists, 2, double(sdigit->GetAmp())); + e = double(Calibrate(sdigit->GetAmp())); + esum += e; + AliEMCALHistoUtilities::FillH1(fHists, 3, e); + AliEMCALHistoUtilities::FillH1(fHists, 4, double(sdigit->GetId())); } + if(esum>0.) AliEMCALHistoUtilities::FillH1(fHists, 1, esum); - for (i = 0 ; i < sdigits->GetEntriesFast() ; i++) { - if (((dynamic_cast(sdigits->At(i)))->GetNprimary()) > NPrimarymax) - NPrimarymax = ((dynamic_cast(sdigits->At(i)))->GetNprimary()) ; - } + // Now write SDigits - // Now write SDigits + Int_t bufferSize = 32000 ; + TBranch * sdigitsBranch = treeS->GetBranch("EMCAL"); + if (sdigitsBranch) + sdigitsBranch->SetAddress(&sdigits); + else + treeS->Branch("EMCAL",&sdigits,bufferSize); - if(gAlice->TreeS() == 0 || (fSplitFile)) //<--- To be checked: we should not create TreeS if it is already here - gAlice->MakeTree("S",fSplitFile); - - if(fSplitFile) - fSplitFile->cd() ; + treeS->Fill(); - //First list of sdigits - Int_t bufferSize = 32000 ; - TBranch * sdigitsBranch = gAlice->TreeS()->Branch("EMCAL",&sdigits,bufferSize); - sdigitsBranch->SetTitle(sdname); + emcalLoader->WriteSDigits("OVERWRITE"); //NEXT - SDigitizer - Int_t splitlevel = 0 ; - AliEMCALSDigitizer * sd = this ; - TBranch * sdigitizerBranch = gAlice->TreeS()->Branch("AliEMCALSDigitizer","AliEMCALSDigitizer", - &sd,bufferSize,splitlevel); - sdigitizerBranch->SetTitle(sdname); - - sdigitsBranch->Fill() ; - sdigitizerBranch->Fill() ; - - gAlice->TreeS()->AutoSave() ; + emcalLoader->WriteSDigitizer("OVERWRITE"); // why in event cycle ? if(strstr(option,"deb")) PrintSDigits(option) ; } - + + Unload(); + + emcalLoader->GetSDigitsDataLoader()->GetBaseTaskLoader()->SetDoNotReload(kTRUE); + if(strstr(option,"tim")){ gBenchmark->Stop("EMCALSDigitizer"); - Info("Exec", "took %f seconds for SDigitizing %f seconds per event", - gBenchmark->GetCpuTime("EMCALSDigitizer"), gBenchmark->GetCpuTime("EMCALSDigitizer") ) ; + printf("\n Exec: took %f seconds for SDigitizing %f seconds per event\n", + gBenchmark->GetCpuTime("EMCALSDigitizer"), gBenchmark->GetCpuTime("EMCALSDigitizer")/nEvents ) ; } } //__________________________________________________________________ -void AliEMCALSDigitizer::SetSDigitsBranch(const char * title ){ - - // Setting title to branch SDigits - - TString stitle(title) ; - - // check if branch with title already exists - TBranch * sdigitsBranch = - static_cast(gAlice->TreeS()->GetListOfBranches()->FindObject("EMCAL")) ; - TBranch * sdigitizerBranch = - static_cast(gAlice->TreeS()->GetListOfBranches()->FindObject("AliEMCALSDigitizer")) ; - const char * sdigitsTitle = sdigitsBranch ->GetTitle() ; - const char * sdigitizerTitle = sdigitizerBranch ->GetTitle() ; - if ( stitle.CompareTo(sdigitsTitle)==0 || stitle.CompareTo(sdigitizerTitle)==0 ){ - Error("SetSDigitsBranch", "Cannot overwrite existing branch with title %s", title) ; - return ; + +Int_t AliEMCALSDigitizer::Digitize(Float_t energy)const { + // Digitize the energy + Double_t aSignal = fA + energy*fB; + if (TMath::Abs(aSignal)>2147483647.0) { + //PH 2147483647 is the max. integer + //PH This apparently is a problem which needs investigation + AliWarning(Form("Too big or too small energy %f",aSignal)); + aSignal = TMath::Sign((Double_t)2147483647,aSignal); + } + return (Int_t ) aSignal; } - - Info("SetSDigitsBranch", "Changing SDigits file from %s to %s", GetName(), title) ; + - SetName(title) ; - - // Post to the WhiteBoard - AliEMCALGetter * gime = AliEMCALGetter::GetInstance() ; - gime->PostSDigits( title, GetTitle()) ; -} +//__________________________________________________________________ +void AliEMCALSDigitizer::Print1(Option_t * option) +{ + Print(); + PrintSDigits(option); +} //__________________________________________________________________ -void AliEMCALSDigitizer::Print(Option_t* option)const +void AliEMCALSDigitizer::Print(Option_t *option) const { // Prints parameters of SDigitizer - - TString message("\n") ; - message += "------------------- "; - message += GetName() ; - message += " -------------\n" ; - message += " Writing SDigitis to branch with title " ; - message += GetName() ; - message += "\n with digitization parameters A = " ; - message += fA ; - message += "\n B = " ; - message += fB ; - message += "\n Threshold for Primary assignment in PreShower = " ; - message += fPREPrimThreshold ; - message += "\n Threshold for Primary assignment in EC section= " ; - message += fECPrimThreshold ; - message += "\n Threshold for Primary assignment in HC section= " ; - message += fHCPrimThreshold ; - message += "\n---------------------------------------------------" ; - - Info("Print", message.Data() ) ; + printf("Print: \n------------------- %s ------------- option %s\n", GetName() , option) ; + printf(" fInit %i\n", int(fInit)); + printf(" fFirstEvent %i\n", fFirstEvent); + printf(" fLastEvent %i\n", fLastEvent); + printf(" Writing SDigits to branch with title %s\n", fEventFolderName.Data()) ; + printf(" with digitization parameters A = %f\n", fA) ; + printf(" B = %f\n", fB) ; + printf(" Threshold for EC Primary assignment = %f\n", fECPrimThreshold) ; + printf(" Sampling = %f\n", fSampling); + printf("---------------------------------------------------\n") ; } //__________________________________________________________________ @@ -394,72 +392,89 @@ Bool_t AliEMCALSDigitizer::operator==( AliEMCALSDigitizer const &sd )const { // Equal operator. // SDititizers are equal if their pedestal, slope and threshold are equal - if( (fA==sd.fA)&&(fB==sd.fB)&& - (fECPrimThreshold==sd.fECPrimThreshold) && - (fHCPrimThreshold==sd.fHCPrimThreshold) && - (fPREPrimThreshold==sd.fPREPrimThreshold)) + (fECPrimThreshold==sd.fECPrimThreshold)) return kTRUE ; else return kFALSE ; } //__________________________________________________________________ -void AliEMCALSDigitizer::PrintSDigits(Option_t * option){ +void AliEMCALSDigitizer::PrintSDigits(Option_t * option) +{ //Prints list of digits produced at the current pass of AliEMCALDigitizer - AliEMCALGetter * gime = AliEMCALGetter::GetInstance() ; - TString sdname(GetName()) ; - sdname.Remove(sdname.Index(GetTitle())-1) ; - const TClonesArray * sdigits = gime->SDigits(sdname.Data()) ; - TString message("\n") ; - message += "event " ; - message += gAlice->GetEvNumber() ; - message += "\n Number of entries in SDigits list " ; - message += sdigits->GetEntriesFast() ; + // AliEMCALGetter * gime = AliEMCALGetter::Instance() ; + AliEMCALLoader *rl = dynamic_cast(AliRunLoader::GetRunLoader()->GetDetectorLoader("EMCAL")); + const TClonesArray * sdigits = rl->SDigits() ; + + printf("\n") ; + printf("event %i", rl->GetRunLoader()->GetEventNumber()); + printf(" Number of entries in SDigits list %i", sdigits->GetEntriesFast()); if(strstr(option,"all")||strstr(option,"EMC")){ //loop over digits AliEMCALDigit * digit; - message += "\n Id Amplitude Time Index Nprim: Primaries list \n" ; - Int_t index ; + printf("\n Id Amplitude Time Index Nprim: Primaries list \n") ; + Int_t index, isum=0; char * tempo = new char[8192]; for (index = 0 ; index < sdigits->GetEntries() ; index++) { digit = dynamic_cast( sdigits->At(index) ) ; sprintf(tempo, "\n%6d %8d %6.5e %4d %2d :", digit->GetId(), digit->GetAmp(), digit->GetTime(), digit->GetIndexInList(), digit->GetNprimary()) ; - message += tempo ; + printf(tempo); + isum += digit->GetAmp(); Int_t iprimary; for (iprimary=0; iprimaryGetNprimary(); iprimary++) { sprintf(tempo, "%d ",digit->GetPrimary(iprimary+1) ) ; - message += tempo ; + printf(tempo); } } delete tempo ; - } - Info("PrintSDigits", message.Data() ) ; + printf("\n** Sum %i : %10.3f GeV/c **\n ", isum, double(isum)*1.e-6); + } else printf("\n"); } -//_______________________________________________________________________________________ -// void AliEMCALSDigitizer::TestTowerID(void) -// { -// Int_t j; - -// Bool_t preshower = kFALSE; -// for (j = 0 ; j < 10 ; j++){ // loop over hit id -// Int_t i; -// for (i = 0 ; i <= 2 ; i++){ // loop over -// Int_t k = i*96*144+j*144+1; -// Info("TestTowerID", " Hit Index = %d %d TOWERID = %d", k, j*10, Layer2TowerID(k, preshower) ) ; -// } -// } -// } - //____________________________________________________________________________ -void AliEMCALSDigitizer::UseHitsFrom(const char * filename) +void AliEMCALSDigitizer::Unload() const +{ + // Unload Hits and SDigits from the folder + AliEMCALLoader *rl = dynamic_cast(AliRunLoader::GetRunLoader()->GetDetectorLoader("EMCAL")); + rl->UnloadHits() ; + rl->UnloadSDigits() ; +} + +void AliEMCALSDigitizer::Browse(TBrowser* b) +{ + if(fHists) b->Add(fHists); + TTask::Browse(b); +} + +TList *AliEMCALSDigitizer::BookControlHists(int var) +{ + //book histograms for monitoring sdigitization + // 22-nov-04 + gROOT->cd(); + const AliEMCALGeometry *geom = AliEMCALGeometry::GetInstance() ; + if(var>=1){ + AliDebug(1, " BookControlHists() in action "); + new TH1F("HSDigiN", "#EMCAL sdigits ", 1001, -0.5, 1000.5); + new TH1F("HSDigiSumEnergy","Sum.EMCAL energy", 1000, 0.0, 100.); + new TH1F("HSDigiAmp", "EMCAL sdigits amplitude", 1000, 0., 2.e+9); + new TH1F("HSDigiEnergy","EMCAL cell energy", 1000, 0.0, 100.); + new TH1F("HSDigiAbsId","EMCAL absID for sdigits", + geom->GetNCells(), 0.5, Double_t(geom->GetNCells())+0.5); + } + + fHists = AliEMCALHistoUtilities::MoveHistsToList("EmcalSDigiControlHists", kFALSE); + // fHists = 0; ?? + + return fHists; +} + +void AliEMCALSDigitizer::SaveHists(const char* name, Bool_t kSingleKey, const char* opt) { - SetTitle(filename) ; - Init() ; + AliEMCALHistoUtilities::SaveListOfHists(fHists, name, kSingleKey, opt); }