X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOS.cxx;h=8c0e9e8fddc460ccdd7e0dbe4b28c7607744d97a;hb=34af53b5ec497551e2c61c5054e296aca0e44680;hp=faf122dfcac34c506f46096d3331ee933a89f652;hpb=f7a1cc68313147ec921d4c82df1890abe00e4032;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOS.cxx b/PHOS/AliPHOS.cxx index faf122dfcac..8c0e9e8fddc 100644 --- a/PHOS/AliPHOS.cxx +++ b/PHOS/AliPHOS.cxx @@ -81,6 +81,7 @@ class TFile; #include "AliPHOS.h" #include "AliPHOSLoader.h" #include "AliRun.h" +#include "AliRawReader.h" #include "AliPHOSDigitizer.h" #include "AliPHOSSDigitizer.h" #include "AliPHOSDigit.h" @@ -94,7 +95,7 @@ class TFile; #include "AliPHOSCalibData.h" #include "AliPHOSPulseGenerator.h" #include "AliDAQ.h" -#include "AliPHOSRawDecoder.h" +#include "AliPHOSRawFitterv0.h" #include "AliPHOSCalibData.h" #include "AliPHOSRawDigiProducer.h" #include "AliPHOSQAChecker.h" @@ -125,9 +126,9 @@ AliPHOS::~AliPHOS() } //____________________________________________________________________________ -AliDigitizer* AliPHOS::CreateDigitizer(AliRunDigitizer* manager) const +AliDigitizer* AliPHOS::CreateDigitizer(AliDigitizationInput* digInput) const { - return new AliPHOSDigitizer(manager); + return new AliPHOSDigitizer(digInput); } //____________________________________________________________________________ @@ -379,42 +380,6 @@ void AliPHOS::CreateMaterials() //_____________________________________________________________________________ void AliPHOS::Init() { - // - // Initialises cuts for PHOS - // - // --- Set decent energy thresholds for gamma and electron tracking - Int_t * idtmed = fIdtmed->GetArray() - 699 ; - - // Tracking threshold for photons and electrons in the scintillator crystal - gMC->Gstpar(idtmed[699], "CUTGAM",0.5E-4) ; - gMC->Gstpar(idtmed[699], "CUTELE",1.0E-4) ; - - // --- Generate explicitly delta rays in the titan cover --- - gMC->Gstpar(idtmed[704], "LOSS",3.) ; - gMC->Gstpar(idtmed[704], "DRAY",1.) ; - // --- and in aluminium parts --- - gMC->Gstpar(idtmed[701], "LOSS",3.) ; - gMC->Gstpar(idtmed[701], "DRAY",1.) ; - // --- and in PIN diode - gMC->Gstpar(idtmed[705], "LOSS",3) ; - gMC->Gstpar(idtmed[705], "DRAY",1) ; - // --- and in the passive convertor - gMC->Gstpar(idtmed[712], "LOSS",3) ; - gMC->Gstpar(idtmed[712], "DRAY",1) ; - // Tracking threshold for photons and electrons in the gas ArC02 - gMC->Gstpar(idtmed[715], "CUTGAM",1.E-5) ; - gMC->Gstpar(idtmed[715], "CUTELE",1.E-5) ; - gMC->Gstpar(idtmed[715], "CUTNEU",1.E-5) ; - gMC->Gstpar(idtmed[715], "CUTHAD",1.E-5) ; - gMC->Gstpar(idtmed[715], "CUTMUO",1.E-5) ; - gMC->Gstpar(idtmed[715], "BCUTE",1.E-5) ; - gMC->Gstpar(idtmed[715], "BCUTM",1.E-5) ; - gMC->Gstpar(idtmed[715], "DCUTE",1.E-5) ; - gMC->Gstpar(idtmed[715], "DCUTM",1.E-5) ; - gMC->Gstpar(idtmed[715], "PPCUTM",1.E-5) ; - gMC->Gstpar(idtmed[715], "LOSS",2.) ; - gMC->Gstpar(idtmed[715], "DRAY",0.) ; - gMC->Gstpar(idtmed[715], "STRA",2.) ; } //____________________________________________________________________________ @@ -426,7 +391,7 @@ void AliPHOS::Digits2Raw() AliError("Energy digitization should be OFF if use Digits2Raw") ; } - AliPHOSLoader * loader = dynamic_cast(fLoader) ; + AliPHOSLoader * loader = static_cast(fLoader) ; // get the digits loader->LoadDigits(); @@ -459,6 +424,9 @@ void AliPHOS::Digits2Raw() // Create a shaper pulse object AliPHOSPulseGenerator *pulse = new AliPHOSPulseGenerator(); + + //Set Time step of sample + pulse->SetTimeStep(TMath::Abs(fgCalibData->GetSampleTimeStep())) ; Int_t *adcValuesLow = new Int_t[pulse->GetRawFormatTimeBins()]; Int_t *adcValuesHigh= new Int_t[pulse->GetRawFormatTimeBins()]; @@ -481,7 +449,7 @@ void AliPHOS::Digits2Raw() // loop over digits (assume ordered digits) for (Int_t iDigit = 0; iDigit < digits->GetEntries(); iDigit++) { - AliPHOSDigit* digit = dynamic_cast(digits->At(iDigit)) ; + AliPHOSDigit* digit = static_cast(digits->At(iDigit)) ; // Skip small energy below treshold if (digit->GetEnergy() < kThreshold) @@ -489,7 +457,7 @@ void AliPHOS::Digits2Raw() Int_t relId[4]; geom->AbsToRelNumbering(digit->GetId(), relId); - Int_t module = relId[0]; + Int_t module = 5-relId[0]; // Begin FIXME if (relId[1] != 0) @@ -498,25 +466,25 @@ void AliPHOS::Digits2Raw() Int_t row = relId[2]-1; Int_t col = relId[3]-1; - + Int_t iRCU = -111; - + //RCU0 - if(0<=row&&row<32 && 0<=col&&col<28) iRCU=0; - + if(0<=row&&row<16 && 0<=col&&col<56) iRCU=0; + //RCU1 - if(0<=row&&row<32 && 28<=col&&col<56) iRCU=1; + if(16<=row&&row<32 && 0<=col&&col<56) iRCU=1; //RCU2 - if(32<=row&&row<64 && 0<=col&&col<28) iRCU=2; + if(32<=row&&row<48 && 0<=col&&col<56) iRCU=2; //RCU3 - if(32<=row&&row<64 && 28<=col&&col<56) iRCU=3; - - + if(48<=row&&row<64 && 0<=col&&col<56) iRCU=3; + + // PHOS EMCA has 4 DDL per module. Splitting is based on the (row,column) numbers. - // PHOS internal convention: 1Getenv("ALICE_ROOT"); - path += "/PHOS/mapping/RCU"; - path += iRCU; - path += ".data"; - - mapping[iDDL] = (AliAltroMapping*)maps->At(iRCU); + mapping[iDDL] = (AliAltroMapping*)maps->At(iDDL); buffer[iDDL] = new AliAltroBuffer(fileName.Data(),mapping[iDDL]); buffer[iDDL]->WriteDataHeader(kTRUE, kFALSE); //Dummy; } @@ -550,10 +513,9 @@ void AliPHOS::Digits2Raw() // calculate the time response function } else { Double_t energy = 0 ; - module = relId[0]; if (digit->GetId() <= geom->GetNModules() * geom->GetNCristalsInModule()) { energy=digit->GetEnergy(); - if(energy>eMax) {eMax=energy; modMax=module; colMax=col; rowMax=row;} + if(energy>eMax) {eMax=energy; modMax=relId[0]; colMax=col; rowMax=row;} } else { energy = 0; // CPV raw data format is now know yet @@ -564,13 +526,16 @@ void AliPHOS::Digits2Raw() pulse->SetHG2LGRatio(r) ; pulse->MakeSamples(); pulse->GetSamples(adcValuesHigh, adcValuesLow) ; + buffer[iDDL]->WriteChannel(relId[3]-1, relId[2]-1, 0, pulse->GetRawFormatTimeBins(), adcValuesLow , kAdcThreshold); buffer[iDDL]->WriteChannel(relId[3]-1, relId[2]-1, 1, pulse->GetRawFormatTimeBins(), adcValuesHigh, kAdcThreshold); } } - + delete [] adcValuesLow; + delete [] adcValuesHigh; + // write real header and close last file for (Int_t iDDL=0; iDDLGetRunLoader()->GetFileName().Data()) ; phosDigitizer.SetEventRange(0, -1) ; // do all the events - phosDigitizer.ExecuteTask("all") ; + phosDigitizer.Digitize("all") ; } @@ -615,7 +580,7 @@ void AliPHOS::SetTreeAddress() // Links Hits in the Tree to Hits array TBranch *branch; char branchname[20]; - sprintf(branchname,"%s",GetName()); + snprintf(branchname,20,"%s",GetName()); // Branch address for hit tree TTree *treeH = fLoader->TreeH(); if (treeH) { @@ -629,36 +594,52 @@ void AliPHOS::SetTreeAddress() } } -//____________________________________________________________________________ -Bool_t AliPHOS::Raw2SDigits(AliRawReader* rawReader) -{ - - AliPHOSLoader * loader = dynamic_cast(fLoader) ; +//____________________________________________________________________________ +Bool_t AliPHOS::Raw2SDigits(AliRawReader* rawReader) +{ + + AliPHOSLoader * loader = static_cast(fLoader) ; + + TTree * tree = 0 ; + tree = loader->TreeS() ; + if ( !tree ) { + loader->MakeTree("S"); + tree = loader->TreeS() ; + } + + TClonesArray * sdigits = loader->SDigits() ; + if(!sdigits) { + loader->MakeSDigitsArray(); + sdigits = loader->SDigits(); + } + sdigits->Clear(); + + rawReader->Reset() ; - TTree * tree = 0 ; - tree = loader->TreeS() ; - if ( !tree ) { - loader->MakeTree("S"); - tree = loader->TreeS() ; - } + const TObjArray* maps = AliPHOSRecoParam::GetMappings(); + if(!maps) AliFatal("Cannot retrieve ALTRO mappings!!"); - TClonesArray * sdigits = loader->SDigits() ; - if(!sdigits) { - loader->MakeSDigitsArray(); - sdigits = loader->SDigits(); + AliAltroMapping *mapping[20]; + for(Int_t i = 0; i < 20; i++) { + mapping[i] = (AliAltroMapping*)maps->At(i); } - sdigits->Clear(); - - AliPHOSRawDecoder dc(rawReader); - AliPHOSRawDigiProducer pr; - pr.MakeDigits(sdigits,&dc); - Int_t bufferSize = 32000 ; - // TBranch * sdigitsBranch = tree->Branch("PHOS",&sdigits,bufferSize); - tree->Branch("PHOS",&sdigits,bufferSize); - tree->Fill(); - - fLoader->WriteSDigits("OVERWRITE"); - return kTRUE; - + AliPHOSRawFitterv0 fitter; + + fitter.SubtractPedestals(AliPHOSSimParam::GetInstance()->EMCSubtractPedestals()); + fitter.SetAmpOffset(AliPHOSSimParam::GetInstance()->GetGlobalAltroOffset()); + fitter.SetAmpThreshold(AliPHOSSimParam::GetInstance()->GetGlobalAltroThreshold()); + + AliPHOSRawDigiProducer pr(rawReader,mapping); + pr.SetSampleQualityCut(AliPHOSSimParam::GetInstance()->GetEMCSampleQualityCut()); + pr.MakeDigits(sdigits,&fitter); + + Int_t bufferSize = 32000 ; + // TBranch * sdigitsBranch = tree->Branch("PHOS",&sdigits,bufferSize); + tree->Branch("PHOS",&sdigits,bufferSize); + tree->Fill(); + + fLoader->WriteSDigits("OVERWRITE"); + return kTRUE; + }