X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONSDigitizerV2.cxx;h=6dc06e05bd07180da0444b321b1d9ab3108534b1;hb=fb43b48d60e00880fae1616a9b2b8466d1d83320;hp=015c7c9ecf12302a6a03ae7afba591fd92a88bef;hpb=bf0d35288fd20e1526fba0b5938c45f8e4250684;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONSDigitizerV2.cxx b/MUON/AliMUONSDigitizerV2.cxx index 015c7c9ecf1..6dc06e05bd0 100644 --- a/MUON/AliMUONSDigitizerV2.cxx +++ b/MUON/AliMUONSDigitizerV2.cxx @@ -16,6 +16,8 @@ // $Id$ #include +#include +#include #include "AliMUONSDigitizerV2.h" @@ -25,8 +27,8 @@ #include "AliMUONHit.h" #include "AliMUONVDigitStore.h" #include "AliMUONVHitStore.h" -#include "AliMUONCalibrationData.h" #include "AliMUONResponseTrigger.h" +#include "AliMUONConstants.h" #include "AliMpCDB.h" #include "AliMpDEManager.h" @@ -37,6 +39,9 @@ #include "AliRun.h" #include "AliRunLoader.h" +#include "AliHeader.h" +#include "AliGenCocktailEventHeader.h" + //----------------------------------------------------------------------------- /// The sdigitizer performs the transformation from hits (energy deposits by /// the transport code) to sdigits (equivalent of charges on pad). @@ -55,9 +60,14 @@ ClassImp(AliMUONSDigitizerV2) +Float_t AliMUONSDigitizerV2::fgkMaxIntTime = 10.0; +Float_t AliMUONSDigitizerV2::fgkMaxPosTimeDif = 1.22E-6; +Float_t AliMUONSDigitizerV2::fgkMaxNegTimeDif = -3.5E-6; +Float_t AliMUONSDigitizerV2::fgkMinTimeDif = 25E-9; + //_____________________________________________________________________________ AliMUONSDigitizerV2::AliMUONSDigitizerV2() -: TTask("AliMUONSDigitizerV2","From Hits to SDigits for MUON") +: TNamed("AliMUONSDigitizerV2","From Hits to SDigits for MUON") { /// /// ctor. @@ -79,7 +89,7 @@ AliMUONSDigitizerV2::~AliMUONSDigitizerV2() //_____________________________________________________________________________ void -AliMUONSDigitizerV2::Exec(Option_t*) +AliMUONSDigitizerV2::Digitize(Option_t*) { /// /// Go from hits to sdigits. @@ -92,22 +102,12 @@ AliMUONSDigitizerV2::Exec(Option_t*) AliDebug(1,""); - AliRunLoader* runLoader = AliRunLoader::GetRunLoader(); + AliRunLoader* runLoader = AliRunLoader::Instance(); AliLoader* loader = runLoader->GetDetectorLoader("MUON"); - + loader->LoadHits("READ"); AliMUON* muon = static_cast(gAlice->GetModule("MUON")); - - AliMUONCalibrationData *calibrationData = 0x0; - - if(muon->GetTriggerEffCells()){ - Int_t runnumber = AliCDBManager::Instance()->GetRun(); - calibrationData = new AliMUONCalibrationData(runnumber); - for (Int_t chamber = 10; chamber < 14; chamber++) { - ((AliMUONResponseTrigger *) (muon->Chamber(chamber).ResponseModel()))->InitTriggerEfficiency(calibrationData->TriggerEfficiency()); // Init trigger efficiency - } - } Int_t nofEvents(runLoader->GetNumberOfEvents()); @@ -120,8 +120,10 @@ AliMUONSDigitizerV2::Exec(Option_t*) AliFatal(Form("Could not create digitstore of class %s",classname.Data())); } - AliInfo(Form("Will use digitStore of type %s",sDigitStore->ClassName())); - + AliDebug(1,Form("Will use digitStore of type %s",sDigitStore->ClassName())); + + // average arrival time to chambers, for pileup studies + for ( Int_t iEvent = 0; iEvent < nofEvents; ++iEvent ) { // Loop over events. @@ -130,20 +132,52 @@ AliMUONSDigitizerV2::Exec(Option_t*) AliDebug(1,Form("iEvent=%d",iEvent)); runLoader->GetEvent(iEvent); - + + // for pile up studies + float t0=fgkMaxIntTime; int aa=0; + AliHeader* header = runLoader->GetHeader(); + AliGenCocktailEventHeader* cocktailHeader = + dynamic_cast(header->GenEventHeader()); + if (cocktailHeader) { + AliGenCocktailEventHeader* genEventHeader = (AliGenCocktailEventHeader*) (header->GenEventHeader()); + TList* headers = genEventHeader->GetHeaders(); + TIter nextH(headers); + AliGenEventHeader *entry; + while((entry = (AliGenEventHeader*)nextH())) { + float t = entry->InteractionTime(); + if (TMath::Abs(t)GenEventHeader()); + if (evtHeader) + { + float t = evtHeader->InteractionTime(); + if (TMath::Abs(t)MakeSDigitsContainer(); - + TTree* treeS = loader->TreeS(); - + if ( !treeS ) { AliFatal(""); } - + sDigitStore->Connect(*treeS); TTree* treeH = loader->TreeH(); - + AliMUONVHitStore* hitStore = AliMUONVHitStore::Create(*treeH); hitStore->Connect(*treeH); @@ -153,7 +187,7 @@ AliMUONSDigitizerV2::Exec(Option_t*) { // Loop over the tracks of this event. treeH->GetEvent(iTrack); - + AliMUONHit* hit; TIter next(hitStore->CreateIterator()); Int_t ihit(0); @@ -161,12 +195,29 @@ AliMUONSDigitizerV2::Exec(Option_t*) while ( ( hit = static_cast(next()) ) ) { Int_t chamberId = hit->Chamber()-1; + Float_t age = hit->Age()-t0; + AliMUONChamber& chamber = muon->Chamber(chamberId); AliMUONResponse* response = chamber.ResponseModel(); // This is the heart of this method : the dis-integration TList digits; - response->DisIntegrate(*hit,digits); + if (aa>1){ // if there are pileup events + Float_t chamberTime = AliMUONConstants::AverageChamberT(chamberId); + Float_t timeDif=age-chamberTime; + if (timeDif>fgkMaxPosTimeDif || timeDiffgkMinTimeDif){ + response->DisIntegrate(*hit,digits,timeDif); + } + else{ + response->DisIntegrate(*hit,digits,0.); + } + } + else{ + response->DisIntegrate(*hit,digits,0.); + } TIter nextd(&digits); AliMUONVDigit* d; @@ -175,7 +226,8 @@ AliMUONSDigitizerV2::Exec(Option_t*) // Update some sdigit information that could not be known // by the DisIntegrate method d->SetHit(ihit); - d->AddTrack(iTrack,d->Charge()); + d->SetTime(age); + d->AddTrack(hit->GetTrack(),d->Charge()); tdlist.Add(d); } ++ihit; @@ -188,17 +240,15 @@ AliMUONSDigitizerV2::Exec(Option_t*) while ( ( d = static_cast(next()) ) ) { - if ( d->Charge() > 0 ) // that check would be better in the disintegrate - // method, but to compare with old sdigitizer, it has to be there. + d->ChargeInFC(kTRUE); + + AliMUONVDigit* added = sDigitStore->Add(*d,AliMUONVDigitStore::kMerge); + if (!added) { - AliMUONVDigit* added = sDigitStore->Add(*d,AliMUONVDigitStore::kMerge); - if (!added) - { - AliError("Could not add digit to digitStore"); - } + AliError("Could not add digit to digitStore"); } } - + treeS->Fill(); loader->WriteSDigits("OVERWRITE"); @@ -214,6 +264,5 @@ AliMUONSDigitizerV2::Exec(Option_t*) loader->UnloadHits(); delete sDigitStore; - - if(calibrationData) delete calibrationData; + }