X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOS.cxx;h=891591f13f65bce14258d50c865e3e78f510396e;hb=0a6c54a10fce86a62cb6f8f8f36b8ecdd8ffa811;hp=dde85f477cbc734e0f4ee69a2fb6f3ab69e08979;hpb=5024fc61b06df617efbd1ed7db1470a8db9b4ffa;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOS.cxx b/PHOS/AliPHOS.cxx index dde85f477cb..891591f13f6 100644 --- a/PHOS/AliPHOS.cxx +++ b/PHOS/AliPHOS.cxx @@ -66,12 +66,13 @@ // --- ROOT system --- class TFile; +#include #include -#include -#include +#include #include -#include #include +#include +#include // --- Standard library --- @@ -93,7 +94,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" @@ -291,8 +292,8 @@ void AliPHOS::CreateMaterials() // DEFINITION OF THE TRACKING MEDIA // for PHOS: idtmed[699->798] equivalent to fIdtmed[0->100] - Int_t isxfld = gAlice->Field()->Integ() ; - Float_t sxmgmx = gAlice->Field()->Max() ; + Int_t isxfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ() ; + Float_t sxmgmx = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max() ; // The scintillator of the calorimeter made of PBW04 -> idtmed[699] AliMedium(0, "PHOS Xtal $", 0, 1, @@ -378,42 +379,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.) ; } //____________________________________________________________________________ @@ -458,6 +423,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()]; @@ -488,7 +456,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) @@ -497,25 +465,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; } @@ -549,10 +512,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 @@ -563,6 +525,7 @@ 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, @@ -628,36 +591,50 @@ void AliPHOS::SetTreeAddress() } } -//____________________________________________________________________________ -Bool_t AliPHOS::Raw2SDigits(AliRawReader* rawReader) -{ - - AliPHOSLoader * loader = dynamic_cast(fLoader) ; - - TTree * tree = 0 ; - tree = loader->TreeS() ; - if ( !tree ) { - loader->MakeTree("S"); - tree = loader->TreeS() ; - } +//____________________________________________________________________________ +Bool_t AliPHOS::Raw2SDigits(AliRawReader* rawReader) +{ + + AliPHOSLoader * loader = dynamic_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(); + + 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[4]; + for(Int_t i = 0; i < 4; 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; + }