X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSPreprocessorSDD.cxx;h=1c81b3295c5bcd83146738dad433f20924120369;hb=4c080b2895ba3d35af85e610cb113204c769cfb8;hp=af83c85eed808f7785114cb182482ef22e487cd8;hpb=5e6e7c0c0be41b5013ed818acf0aba51e586c4d5;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSPreprocessorSDD.cxx b/ITS/AliITSPreprocessorSDD.cxx index af83c85eed8..1c81b3295c5 100644 --- a/ITS/AliITSPreprocessorSDD.cxx +++ b/ITS/AliITSPreprocessorSDD.cxx @@ -28,7 +28,6 @@ #include "AliITSDriftSpeedSDD.h" #include "AliITSDriftSpeedArraySDD.h" #include "AliITSDCSAnalyzerSDD.h" -#include "AliITSHLTforSDD.h" #include "AliShuttleInterface.h" #include "AliCDBEntry.h" #include "AliCDBMetaData.h" @@ -79,8 +78,6 @@ UInt_t AliITSPreprocessorSDD::Process(TMap* dcsAliasMap){ }else if(runType== "INJECTOR"){ Log("Process FXS files from INJECTOR RUN"); retcode=ProcessInjector(ddlmap); - }else if(runType== "PHYSICS"){ - retcode=ProcessPhysics(); } if(retcode!=0) return retcode; @@ -91,25 +88,6 @@ UInt_t AliITSPreprocessorSDD::Process(TMap* dcsAliasMap){ } //______________________________________________________________________ -UInt_t AliITSPreprocessorSDD::ProcessPhysics(){ - // Get the HLT status for the PHYSICS run - // needeed to define the raw data format - - AliITSHLTforSDD *hltSDD=new AliITSHLTforSDD(); - TString hltMode = GetRunParameter("HLTmode"); - TSubString firstChar = hltMode(0,1); - if (firstChar == "C") hltSDD->SetHLTmodeC(kTRUE); - else hltSDD->SetHLTmodeC(kFALSE); - - AliCDBMetaData *md= new AliCDBMetaData(); - md->SetResponsible("Francesco Prino"); - md->SetBeamPeriod(0); - md->SetComment("HLT mode C flag for PHYSICS run"); - Bool_t retCode = Store("Calib","HLTforSDD",hltSDD,md); - if(retCode) return 0; - else return 1; -} -//______________________________________________________________________ UInt_t AliITSPreprocessorSDD::ProcessPulser(AliITSDDLModuleMapSDD* ddlmap){ // Process FXS files from PULSER run (baseline, noise, gain) // returns 0 in case of success, @@ -143,6 +121,17 @@ UInt_t AliITSPreprocessorSDD::ProcessPulser(AliITSDDLModuleMapSDD* ddlmap){ ind++; } delete sourceList; + // Read ADC sampling frequency from fee.conf + Int_t amSamplFreq=40; + Int_t retfscf; + FILE* feefil=fopen("fee.conf","r"); + if(feefil){ + retfscf=fscanf(feefil,"%d \n",&amSamplFreq); + fclose(feefil); + Log(Form("AM sampling frequency = %d MHz",amSamplFreq)); + }else{ + Log("File fee.conf not found. AM sampling set at 40 MHz by default"); + } for(Int_t iddl=0;iddlSetUseCorrectionMaps(0,0); // temporary disabling of maps - cal->SetAMAt20MHz(); // for runs > 51275 with clock at 20 MHz + if(amSamplFreq!=40) cal->SetAMAt20MHz(); numOfBadChannels[modID]=0; Int_t badch[kNumberOfChannels]; + Bool_t sid0ok=kTRUE; + Bool_t sid1ok=kTRUE; for(Int_t isid=0;isid<=1;isid++){ TString inpFileName; inpFileName.Form("./SDDbase_ddl%02dc%02d_sid%d.data",iddl,imod,isid); @@ -161,17 +151,36 @@ UInt_t AliITSPreprocessorSDD::ProcessPulser(AliITSDDLModuleMapSDD* ddlmap){ FILE* basFil = fopen(inpFileName,"read"); if (basFil == 0) { Log(Form("File %s not found.",inpFileName.Data())); - cal->SetBad(); + if(isid==0){ + sid0ok=kFALSE; + for(Int_t iChip=0; iChip<4; iChip++) cal->SetChipBad(iChip); + cal->SetDeadChannels(cal->GetDeadChannels()+256); + for(Int_t iAnode=0; iAnode<256; iAnode++) cal->SetBadChannel(iAnode,iAnode); + }else{ + sid1ok=kFALSE; + for(Int_t iChip=4; iChip<8; iChip++) cal->SetChipBad(iChip); + cal->SetDeadChannels(cal->GetDeadChannels()+256); + for(Int_t iAnode=0; iAnode<256; iAnode++) cal->SetBadChannel(iAnode,iAnode+256); + } continue; } - fscanf(basFil,"%d %d %d\n",&im,&is,&isgoodmod); - if(!isgoodmod) cal->SetBad(); - fscanf(basFil,"%d\n",&th); - fscanf(basFil,"%d\n",&tl); + + retfscf=fscanf(basFil,"%d %d %d\n",&im,&is,&isgoodmod); + if(!isgoodmod){ + if(isid==0){ + sid0ok=kFALSE; + for(Int_t iChip=0; iChip<4; iChip++) cal->SetChipBad(iChip); + }else{ + sid1ok=kFALSE; + for(Int_t iChip=4; iChip<8; iChip++) cal->SetChipBad(iChip); + } + } + retfscf=fscanf(basFil,"%d\n",&th); + retfscf=fscanf(basFil,"%d\n",&tl); cal->SetZSLowThreshold(isid,tl); cal->SetZSHighThreshold(isid,th); for(Int_t ian=0;ian<(kNumberOfChannels/2);ian++){ - fscanf(basFil,"%d %d %f %d %d %f %f %f %f\n",&i,&isgoodan,&baseline,&basmin,&basoff,&rawnoise,&cmn,&corn,&gain); + retfscf=fscanf(basFil,"%d %d %f %d %d %f %f %f %f\n",&i,&isgoodan,&baseline,&basmin,&basoff,&rawnoise,&cmn,&corn,&gain); Int_t ich=ian; if(isid==1) ich+=256; if(!isgoodan){ @@ -189,6 +198,7 @@ UInt_t AliITSPreprocessorSDD::ProcessPulser(AliITSDDLModuleMapSDD* ddlmap){ } fclose(basFil); } + if(!sid0ok && !sid1ok) cal->SetBad(); Log(Form("Put calib obj for module %d (DDL %d Carlos %d)",modID,iddl,imod)); calSDD.AddAt(cal,modID); } @@ -210,16 +220,18 @@ UInt_t AliITSPreprocessorSDD::ProcessInjector(AliITSDDLModuleMapSDD* ddlmap){ TObjArray vdrift(2*kNumberOfSDD); vdrift.SetOwner(kFALSE); Int_t evNumb,polDeg; - UInt_t timeStamp; + UInt_t timeStamp,statusInj; Bool_t modSet[2*kNumberOfSDD]; // flag modules with good inj. for(Int_t ihyb=0; ihyb<2*kNumberOfSDD; ihyb++) modSet[ihyb]=0; - Double_t nPt = 0; + Double_t nPtLay3 = 0; + Double_t nPtLay4 = 0; Double_t param[4]; // parameters of poly fit Double_t minValP0=4.; // min value for param[0] Double_t maxValP0=9.; // max value for param[0] Double_t minValP1=0.; // min value for param[1] - Double_t aveCoef[4]={0.,0.,0.,0.}; // average param for good mod. + Double_t aveCoefLay3[4]={0.,0.,0.,0.}; // average param for good mod. + Double_t aveCoefLay4[4]={0.,0.,0.,0.}; // average param for good mod. Double_t defCoef[4]={6.53227,0.00128941,-5.14493e-06,0}; // default values for param Float_t auxP; @@ -242,7 +254,7 @@ UInt_t AliITSPreprocessorSDD::ProcessInjector(AliITSDDLModuleMapSDD* ddlmap){ ind++; } delete sourceList; - + Int_t retfscf; for(Int_t iddl=0;iddlAddDriftSpeed(dsp); - vdrift.AddAt(arr,2*modID+isid); continue; } - fscanf(injFil,"%d",&polDeg); + retfscf=fscanf(injFil,"%d",&polDeg); while (!feof(injFil)){ - fscanf(injFil,"%d %d ",&evNumb,&timeStamp); - if(feof(injFil)) break; - for(Int_t ic=0;ic<4;ic++){ - fscanf(injFil,"%f ",&auxP); - param[ic]=auxP; - } + retfscf=fscanf(injFil,"%d %u ",&evNumb,&timeStamp); + if(evNumb==-99){ + statusInj=timeStamp; + arr->SetInjectorStatus(statusInj); + }else{ + if(feof(injFil)) break; + for(Int_t ic=0;ic<4;ic++){ + retfscf=fscanf(injFil,"%f ",&auxP); + param[ic]=auxP; + } - if(param[0]>minValP0 && param[0]minValP1){ - for(Int_t ic=0;ic<4;ic++) aveCoef[ic]+=param[ic]; - nPt++; - AliITSDriftSpeedSDD *dsp=new AliITSDriftSpeedSDD(evNumb,timeStamp,polDeg,param); - arr->AddDriftSpeed(dsp); - modSet[2*modID+isid]=1; + if(param[0]>minValP0 && param[0]minValP1){ + if(modIDAddDriftSpeed(dsp); + modSet[2*modID+isid]=1; + } } } + fclose(injFil); Log(Form("Put calib obj for hybrid %d (DDL %d Carlos %d)",2*modID+isid,iddl,imod)); if(modSet[2*modID+isid]) vdrift.AddAt(arr,2*modID+isid); } @@ -286,20 +306,33 @@ UInt_t AliITSPreprocessorSDD::ProcessInjector(AliITSDDLModuleMapSDD* ddlmap){ // set drift speed for modules with bad injectors for(Int_t ic=0;ic<4;ic++){ - if(nPt>0) aveCoef[ic]/=nPt; // mean parameters - else aveCoef[ic]=defCoef[ic]; // default parameters + if(nPtLay3>0) aveCoefLay3[ic]/=nPtLay3; // mean parameters + else aveCoefLay3[ic]=defCoef[ic]; // default parameters + if(nPtLay4>0) aveCoefLay4[ic]/=nPtLay4; // mean parameters + else aveCoefLay4[ic]=defCoef[ic]; // default parameters } - AliITSDriftSpeedSDD *avdsp=new AliITSDriftSpeedSDD(evNumb,timeStamp,polDeg,aveCoef); + AliITSDriftSpeedSDD *avdsp3=new AliITSDriftSpeedSDD(evNumb,timeStamp,polDeg,aveCoefLay3); + AliITSDriftSpeedSDD *avdsp4=new AliITSDriftSpeedSDD(evNumb,timeStamp,polDeg,aveCoefLay4); - for(Int_t ihyb=0; ihyb<2*kNumberOfSDD; ihyb++){ + for(Int_t ihyb=0; ihyb<2*kNumberOfSDDLay3; ihyb++){ if(modSet[ihyb]==0){ - AliWarning(Form("No good injector events for mod. %d --> use average values",ihyb/2)); + AliWarning(Form("No good injector events for mod. %d side %d --> use average values for layer 3",ihyb/2,ihyb%2)); AliITSDriftSpeedArraySDD *arr=new AliITSDriftSpeedArraySDD(); - arr->AddDriftSpeed(avdsp); + arr->AddDriftSpeed(avdsp3); + arr->SetInjectorStatus(0); vdrift.AddAt(arr,ihyb); } } + for(Int_t ihyb=2*kNumberOfSDDLay3; ihyb<2*kNumberOfSDD; ihyb++){ + if(modSet[ihyb]==0){ + AliWarning(Form("No good injector events for mod. %d side %d --> use average values for layer 4",ihyb/2,ihyb%2)); + AliITSDriftSpeedArraySDD *arr=new AliITSDriftSpeedArraySDD(); + arr->AddDriftSpeed(avdsp4); + arr->SetInjectorStatus(0); + vdrift.AddAt(arr,ihyb); + } + } AliCDBMetaData *md= new AliCDBMetaData(); md->SetResponsible("Francesco Prino");