From: hristov Date: Wed, 10 May 2006 08:00:25 +0000 (+0000) Subject: Get rid of useless loops on primary and sdigits (Gustavo) X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=eb73853b8a766e4f62ab5c4912d6488553b4bf7e Get rid of useless loops on primary and sdigits (Gustavo) --- diff --git a/EMCAL/AliEMCALSDigitizer.cxx b/EMCAL/AliEMCALSDigitizer.cxx index 331ff5ccfc1..ffa878f18f4 100644 --- a/EMCAL/AliEMCALSDigitizer.cxx +++ b/EMCAL/AliEMCALSDigitizer.cxx @@ -207,73 +207,62 @@ void AliEMCALSDigitizer::Exec(Option_t *option) 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((emcalLoader->TreeH())->GetEntries()) ; - // This is not true: there is only one list of hits (MvL jan 2006) - // 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 - rl->Stack()->Particle(iprim) ; - 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() ) ; + 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() ) ; else curSDigit = new AliEMCALDigit( -1 , -1 , hit->GetId(), Digitize(energy), hit->GetTime() ) ; - } 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 tower ? - *sdigit = *sdigit + *curSDigit; - newsdigit = kFALSE; - } + } 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 tower ? + *sdigit = *sdigit + *curSDigit; + newsdigit = kFALSE; } } - if (newsdigit) { - new((*sdigits)[nSdigits]) AliEMCALDigit(*curSDigit); - nSdigits++ ; - } - delete curSDigit ; - } // loop over all hits (hit = deposited energy/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 ; - - 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; @@ -282,20 +271,15 @@ void AliEMCALSDigitizer::Exec(Option_t *option) } if(esum>0.) AliEMCALHistoUtilities::FillH1(fHists, 1, esum); - for (i = 0 ; i < sdigits->GetEntriesFast() ; i++) { // for what - if (((dynamic_cast(sdigits->At(i)))->GetNprimary()) > nPrimarymax) - nPrimarymax = ((dynamic_cast(sdigits->At(i)))->GetNprimary()) ; - } - // Now write SDigits - + Int_t bufferSize = 32000 ; TBranch * sdigitsBranch = treeS->GetBranch("EMCAL"); if (sdigitsBranch) sdigitsBranch->SetAddress(&sdigits); else treeS->Branch("EMCAL",&sdigits,bufferSize); - + treeS->Fill(); emcalLoader->WriteSDigits("OVERWRITE"); @@ -306,7 +290,7 @@ void AliEMCALSDigitizer::Exec(Option_t *option) if(strstr(option,"deb")) PrintSDigits(option) ; } - + Unload(); emcalLoader->GetSDigitsDataLoader()->GetBaseTaskLoader()->SetDoNotReload(kTRUE); @@ -314,7 +298,7 @@ void AliEMCALSDigitizer::Exec(Option_t *option) if(strstr(option,"tim")){ gBenchmark->Stop("EMCALSDigitizer"); printf("\n Exec: took %f seconds for SDigitizing %f seconds per event\n", - gBenchmark->GetCpuTime("EMCALSDigitizer"), gBenchmark->GetCpuTime("EMCALSDigitizer")/nEvents ) ; + gBenchmark->GetCpuTime("EMCALSDigitizer"), gBenchmark->GetCpuTime("EMCALSDigitizer")/nEvents ) ; } }