X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=T0%2FAliT0Reconstructor.cxx;h=6e4468cc2b5d48f773ab802cccb9e1dd467a65a0;hb=d074e16088e0c193546db6e45b9283f3211537d6;hp=555517ce953f6402d3e6c33f2029c3519ddbfe50;hpb=36bfca7d9f8be35c3eb97af97dcbab264df9ffd4;p=u%2Fmrichter%2FAliRoot.git diff --git a/T0/AliT0Reconstructor.cxx b/T0/AliT0Reconstructor.cxx index 555517ce953..6e4468cc2b5 100644 --- a/T0/AliT0Reconstructor.cxx +++ b/T0/AliT0Reconstructor.cxx @@ -31,6 +31,7 @@ #include "AliT0Parameters.h" #include "AliT0Calibrator.h" #include "AliESDfriend.h" +#include "AliESDTZERO.h" #include "AliESDTZEROfriend.h" #include "AliLog.h" #include "AliCDBEntry.h" @@ -63,7 +64,8 @@ ClassImp(AliT0Reconstructor) fGRPdelays(0), fTimeMeanShift(0x0), fTimeSigmaShift(0x0), - fESDTZEROfriend(NULL) + fESDTZEROfriend(NULL), + fESDTZERO(NULL) { for (Int_t i=0; i<24; i++) fTime0vertex[i] =0; @@ -105,7 +107,7 @@ ClassImp(AliT0Reconstructor) TGraph* gr2 = fParam ->GetQTC(i); if (gr2) fQTC.AddAtAndExpand(gr2,i) ; fTime0vertex[i] = fParam->GetCFD(i); - printf("OCDB mean CFD time %i %f \n",i, fTime0vertex[i]); + AliDebug(2,Form("OCDB mean CFD time %i %f \n",i, fTime0vertex[i])); } fLatencyL1 = fParam->GetLatencyL1(); fLatencyL1A = fParam->GetLatencyL1A(); @@ -115,25 +117,24 @@ ClassImp(AliT0Reconstructor) for (Int_t i=0; i<24; i++) { if( fTime0vertex[i] < 500 || fTime0vertex[i] > 50000) fTime0vertex[i] =( 1000.*fLatencyHPTDC - 1000.*fLatencyL1 + 1000.*fGRPdelays)/24.4; - + // printf(" calulated mean %i %f \n",i, fTime0vertex[i]); } - - // fdZonC = TMath::Abs(fParam->GetZPositionShift("T0/C/PMT1")); - //fdZonA = TMath::Abs(fParam->GetZPositionShift("T0/A/PMT15")); //here real Z position fdZonC = TMath::Abs(fParam->GetZPosition("T0/C/PMT1")); fdZonA = TMath::Abs(fParam->GetZPosition("T0/A/PMT15")); fCalib = new AliT0Calibrator(); fESDTZEROfriend = new AliESDTZEROfriend(); + fESDTZERO = new AliESDTZERO(); + } //_____________________________________________________________________________ void AliT0Reconstructor::Reconstruct(TTree*digitsTree, TTree*clustersTree) const { // T0 digits reconstruction - Int_t refAmp = Int_t (GetRecoParam()->GetRefAmp()); + Int_t refAmp = 0 ; /*Int_t (GetRecoParam()->GetRefAmp());*/ TArrayI * timeCFD = new TArrayI(24); TArrayI * timeLED = new TArrayI(24); @@ -141,26 +142,35 @@ void AliT0Reconstructor::Reconstruct(TTree*digitsTree, TTree*clustersTree) const TArrayI * chargeQT1 = new TArrayI(24); + Float_t c = 29.9792458; // cm/ns Float_t channelWidth = fParam->GetChannelWidth() ; - Float_t meanVertex = fParam->GetMeanVertex(); - Float_t c = 0.0299792; // cm/ps - Double32_t vertex = 9999999; + Double32_t vertex = 9999999, meanVertex = 0 ; Double32_t timeDiff=999999, meanTime=999999, timeclock=999999; - + AliDebug(1,Form("Start DIGITS reconstruction ")); - Float_t lowAmpThreshold = GetRecoParam()->GetLow(200); - Float_t highAmpThreshold = GetRecoParam()->GetHigh(200); - Int_t badpmt = GetRecoParam()->GetRefPoint(); - + Float_t lowAmpThreshold = GetRecoParam()->GetAmpLowThreshold(); + Float_t highAmpThreshold = GetRecoParam()->GetAmpHighThreshold(); + printf( "AliT0Reconstructor::Reconstruct::: RecoParam amplitude %f %f \n",lowAmpThreshold, highAmpThreshold); + + Double32_t besttimeA=9999999; Double32_t besttimeA_best=9999999; + Double32_t besttimeC=9999999; Double32_t besttimeC_best=9999999; + Int_t timeDelayCFD[24]; + Int_t badpmt[24]; + //Bad channel + for (Int_t i=0; i<24; i++) { + badpmt[i] = GetRecoParam() -> GetBadChannels(i); + timeDelayCFD[i] = Int_t (fParam->GetTimeDelayCFD(i)); + } + fCalib->SetEq(0); TBranch *brDigits=digitsTree->GetBranch("T0"); AliT0digit *fDigits = new AliT0digit() ; if (brDigits) { brDigits->SetAddress(&fDigits); }else{ AliError(Form("EXEC Branch T0 digits not found")); - return; + return; } digitsTree->GetEvent(0); @@ -171,100 +181,115 @@ void AliT0Reconstructor::Reconstruct(TTree*digitsTree, TTree*clustersTree) const fDigits->GetQT0(*chargeQT0); fDigits->GetQT1(*chargeQT1); Int_t onlineMean = fDigits->MeanTime(); - + Bool_t tr[5]; for (Int_t i=0; i<5; i++) tr[i]=false; - Double32_t besttimeA=999999; - Double32_t besttimeC=999999; - Int_t pmtBestA=99999; - Int_t pmtBestC=99999; - AliT0RecPoint* frecpoints= new AliT0RecPoint (); - clustersTree->Branch( "T0", "AliT0RecPoint" ,&frecpoints); + AliT0RecPoint frecpoints; + AliT0RecPoint * pfrecpoints = &frecpoints; + clustersTree->Branch( "T0", "AliT0RecPoint" ,&pfrecpoints); Float_t time[24], adc[24], adcmip[24]; for (Int_t ipmt=0; ipmt<24; ipmt++) { - if(timeCFD->At(ipmt)>0 && ipmt != badpmt) { - if(( chargeQT1->At(ipmt) - chargeQT0->At(ipmt))>0) + if(timeCFD->At(ipmt)>0 ) { + Float_t timefull = 0.001*( timeCFD->At(ipmt) - 511 - timeDelayCFD[ipmt]) * channelWidth; + frecpoints.SetTimeFull(ipmt, 0 ,timefull) ; + if(( chargeQT1->At(ipmt) - chargeQT0->At(ipmt))>0) adc[ipmt] = chargeQT1->At(ipmt) - chargeQT0->At(ipmt); else adc[ipmt] = 0; - time[ipmt] = fCalib-> WalkCorrection(refAmp, ipmt, Int_t(adc[ipmt]), timeCFD->At(ipmt)) ; - + time[ipmt] = fCalib-> WalkCorrection(refAmp, ipmt, Int_t(adc[ipmt]), timeCFD->At(ipmt)) ; + time[ipmt] = time[ipmt] - 511; Double_t sl = Double_t(timeLED->At(ipmt) - timeCFD->At(ipmt)); // time[ipmt] = fCalib-> WalkCorrection( refAmp,ipmt, Int_t(sl), timeCFD->At(ipmt) ) ; - AliDebug(5,Form(" ipmt %i QTC %i , time in chann %i (led-cfd) %i ", - ipmt, Int_t(adc[ipmt]) ,Int_t(time[ipmt]),Int_t( sl))); - - Double_t ampMip =((TGraph*)fAmpLED.At(ipmt))->Eval(sl); - Double_t qtMip = ((TGraph*)fQTC.At(ipmt))->Eval(adc[ipmt]); - AliDebug(5,Form(" Amlitude in MIPS LED %f , QTC %f in channels %f\n ",ampMip,qtMip, adc[ipmt])); + AliDebug(5,Form(" ipmt %i QTC %i , time in chann %i (led-cfd) %i ", + ipmt, Int_t(adc[ipmt]) ,Int_t(time[ipmt]),Int_t( sl))); - frecpoints->SetTime(ipmt, Float_t(time[ipmt]) ); - frecpoints->SetAmpLED(ipmt, Float_t( ampMip)); - frecpoints->SetAmp(ipmt, Float_t(qtMip)); + Double_t ampMip = 0; + TGraph* ampGraph = (TGraph*)fAmpLED.At(ipmt); + if (ampGraph) ampMip = ampGraph->Eval(sl); + Double_t qtMip = 0; + TGraph* qtGraph = (TGraph*)fQTC.At(ipmt); + if (qtGraph) qtMip = qtGraph->Eval(adc[ipmt]); + AliDebug(5,Form(" Amlitude in MIPS LED %f , QTC %f in channels %f\n ",ampMip,qtMip, adc[ipmt])); + frecpoints.SetTime(ipmt, Float_t(time[ipmt]) ); + frecpoints.SetAmpLED(ipmt, Float_t( ampMip)); + frecpoints.SetAmp(ipmt, Float_t(qtMip)); adcmip[ipmt]=qtMip; } else { - time[ipmt] = 0; + time[ipmt] = -99999; adc[ipmt] = 0; adcmip[ipmt] = 0; - + } } for (Int_t ipmt=0; ipmt<12; ipmt++){ - if(time[ipmt] > 1 && ipmt != badpmt && adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt] -9000 + && adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt] 1 && ipmt != badpmt && adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt] -9000 + && adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt]SetTimeBestA(Int_t(besttimeA *channelWidth - fdZonA/c)); + + if( besttimeA < 999999 && besttimeA!=0) { + frecpoints.SetTimeBestA((besttimeA_best * channelWidth - fdZonA/c) ); + frecpoints.SetTime1stA((besttimeA * channelWidth - fdZonA/c) ); tr[1]=true; } - if( besttimeC < 999999 ) { - frecpoints->SetTimeBestC(Int_t(besttimeC *channelWidth - fdZonA/c)); + + if( besttimeC < 999999 && besttimeC!=0) { + frecpoints.SetTimeBestC((besttimeC_best * channelWidth - fdZonC/c) ); + frecpoints.SetTime1stC((besttimeC * channelWidth - fdZonC/c) ); tr[2]=true; } - AliDebug(5,Form(" besttimeA %f ch, besttimeC %f ch",besttimeA, besttimeC)); + + AliDebug(5,Form("1stimeA %f , besttimeA %f 1sttimeC %f besttimeC %f ", + besttimeA, besttimeA_best, + besttimeC, besttimeC_best) ); + if(besttimeA <999999 && besttimeC < 999999 ){ // timeDiff = (besttimeC - besttimeA)*channelWidth; timeDiff = (besttimeA - besttimeC)*channelWidth; - meanTime = (besttimeA + besttimeC)/2;// * channelWidth); - timeclock = meanTime *channelWidth -fdZonA/c ; - vertex = meanVertex - c*(timeDiff)/2.;// + (fdZonA - fdZonC)/2; + meanTime = channelWidth * (besttimeA_best + besttimeC_best)/2. ; + timeclock = channelWidth * (besttimeA + besttimeC)/2. ; + vertex = meanVertex - 0.001* c*(timeDiff)/2.;// + (fdZonA - fdZonC)/2; tr[0]=true; } - frecpoints->SetVertex(vertex); - frecpoints->SetMeanTime(meanTime); - frecpoints->SetT0clock(timeclock); - frecpoints->SetT0Trig(tr); - + frecpoints.SetVertex(vertex); + frecpoints.SetMeanTime(meanTime ); + frecpoints.SetT0clock(timeclock ); + frecpoints.SetT0Trig(tr); + + AliDebug(5,Form("fRecPoints::: 1stimeA %f , besttimeA %f 1sttimeC %f besttimeC %f vertex %f", + frecpoints.Get1stTimeA(), frecpoints.GetBestTimeA(), + frecpoints.Get1stTimeC(), frecpoints.GetBestTimeC(), + vertex ) ); + AliDebug(5,Form("T0 triggers %d %d %d %d %d",tr[0],tr[1],tr[2],tr[3],tr[4])); - + //online mean - frecpoints->SetOnlineMean(Int_t(onlineMean)); + frecpoints.SetOnlineMean(Int_t(onlineMean)); AliDebug(10,Form(" timeDiff %f #channel, meanTime %f #channel, vertex %f cm online mean %i timeclock %f ps",timeDiff, meanTime,vertex, Int_t(onlineMean), timeclock)); - - - - clustersTree->Fill(); - + delete timeCFD; delete timeLED; delete chargeQT0; @@ -278,51 +303,62 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con { // T0 raw -> // - // reference amplitude and time ref. point from reco param - // Float_t refAmp = GetRecoParam()->GetRefAmp(); - - // Int_t refPoint = 0; + Float_t meanOrA = fTime0vertex[0] + 587; + Float_t meanOrC = fTime0vertex[0] + 678; + Float_t meanTVDC = fTime0vertex[0] + 2564; + Int_t timeDelayCFD[24]; + Int_t corridor = GetRecoParam() -> GetCorridor(); + printf("!!!! corrior %i \n",corridor); Int_t badpmt[24]; //Bad channel for (Int_t i=0; i<24; i++) { badpmt[i] = GetRecoParam() -> GetBadChannels(i); + timeDelayCFD[i] = Int_t (fParam->GetTimeDelayCFD(i)); } + Int_t equalize = GetRecoParam() -> GetEq(); + // printf( "AliT0Reconstructor::Reconstruct::: RecoParam %i \n",equalize); + fCalib->SetEq(equalize); Int_t low[500], high[500]; + Float_t timefull=-9999;; + Float_t tvdc = -9999; Float_t ora = -9999; Float_t orc = -9999; Int_t allData[110][5]; Int_t timeCFD[24], timeLED[24], chargeQT0[24], chargeQT1[24]; + Float_t time2zero[24]; Double32_t timeDiff, meanTime, timeclock; timeDiff = meanTime = timeclock = 9999999; Float_t c = 29.9792458; // cm/ns Double32_t vertex = 9999999; Int_t onlineMean=0; - // Float_t meanVertex = fParam->GetMeanVertex(); Float_t meanVertex = 0; + Int_t pedestal[24]; for (Int_t i0=0; i0<24; i0++) { - low[i0] = Int_t(fTime0vertex[i0]) - 200; - high[i0] = Int_t(fTime0vertex[i0]) + 200; + low[i0] = Int_t(fTime0vertex[i0]) - corridor; + high[i0] = Int_t(fTime0vertex[i0]) + corridor; + time2zero[i0] = 99999; + pedestal[i0]=Int_t (GetRecoParam()->GetLow(100+i0) ); + // printf("pmt %i pedestal %f\n", i0,pedestal[i0]); + } for (Int_t i0=0; i0<110; i0++) - { - for (Int_t j0=0; j0<5; j0++) allData[i0][j0]=0; - // low[i0] = Int_t (GetRecoParam()->GetLow(i0)); - // high[i0] = Int_t (GetRecoParam()->GetHigh(i0)); - } + for (Int_t j0=0; j0<5; j0++) allData[i0][j0]=0; Float_t lowAmpThreshold = GetRecoParam()->GetAmpLowThreshold(); Float_t highAmpThreshold = GetRecoParam()->GetAmpHighThreshold(); + printf( "AliT0Reconstructor::Reconstruct::: RecoParam amplitude %f %f \n",lowAmpThreshold, highAmpThreshold); + + Double32_t besttimeA=9999999; Double32_t besttimeA_best=9999999; + Double32_t besttimeC=9999999; Double32_t besttimeC_best=9999999; + + Float_t channelWidth = fParam->GetChannelWidth() ; + + AliT0RecPoint frecpoints; + AliT0RecPoint * pfrecpoints = &frecpoints; - Double32_t besttimeA=9999999; - Double32_t besttimeC=9999999; - Int_t pmtBestA=99999; - Int_t pmtBestC=99999; - - AliT0RecPoint* frecpoints= new AliT0RecPoint (); - - recTree->Branch( "T0", "AliT0RecPoint" ,&frecpoints); + recTree->Branch( "T0", "AliT0RecPoint" ,&pfrecpoints); AliDebug(10," before read data "); AliT0RawReader myrawreader(rawReader); @@ -337,10 +373,7 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con { timeCFD[i]=0; timeLED[i]=0; chargeQT0[i]=0; chargeQT1[i]=0; } - Int_t fBCID=Int_t (rawReader->GetBCID()); - Int_t trmbunch= myrawreader.GetTRMBunchID(); - AliDebug(10,Form(" CDH BC ID %i, TRM BC ID %i \n", fBCID, trmbunch )); - + if(type == 7 ) { //only physics for (Int_t i=0; i<107; i++) { for (Int_t iHit=0; iHit<5; iHit++) @@ -348,16 +381,14 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con allData[i][iHit] = myrawreader.GetData(i,iHit); } } - Int_t ref=0; - - // if (refPoint>0) - // ref = allData[refPoint][0]-5000; - - - Float_t channelWidth = fParam->GetChannelWidth() ; - - // Int_t meanT0 = fParam->GetMeanT0(); + Int_t fBCID=Int_t (rawReader->GetBCID()); + Int_t trmbunch= myrawreader.GetTRMBunchID(); + AliDebug(10,Form(" CDH BC ID %i, TRM BC ID %i \n", fBCID, trmbunch )); + if( (trmbunch-fBCID)!=37 ) { + AliDebug(0,Form("wrong :::: CDH BC ID %i, TRM BC ID %i \n", fBCID, trmbunch )); + // type = -1; + } for (Int_t in=0; in<12; in++) { for (Int_t iHit=0; iHit<5; iHit++) @@ -366,13 +397,13 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con allData[in+1][iHit] < high[in]) { timeCFD[in] = allData[in+1][iHit] ; - break; + break; } } for (Int_t iHit=0; iHit<5; iHit++) { - if(allData[in+1+56][iHit] > low[in] && - allData[in+1+56][iHit] < high[in]) + if(allData[in+1+56][iHit] > low[in+12] && + allData[in+1+56][iHit] < high[in+12]) { timeCFD[in+12] = allData[in+56+1][iHit] ; break; @@ -380,7 +411,7 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con } timeLED[in+12] = allData[in+68+1][0] ; timeLED[in] = allData[in+12+1][0] ; - AliDebug(5, Form(" readed i %i cfdC %i cfdA %i ledC %i ledA%i ", + AliDebug(50, Form(" readed i %i cfdC %i cfdA %i ledC %i ledA%i ", in, timeCFD[in],timeCFD[in+12],timeLED[in], timeLED[in+12])); @@ -389,137 +420,219 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con for (Int_t in=0; in<12; in++) { - chargeQT0[in]=allData[2*in+25][0]; - chargeQT1[in]=allData[2*in+26][0]; - AliDebug(25, Form(" readed Raw %i %i %i", - in, chargeQT0[in],chargeQT1[in])); + if(allData[2*in+26][0] > 4700 && + allData[2*in+26][0] < 5700) + { + + chargeQT0[in]=allData[2*in+25][0]; + chargeQT1[in]=allData[2*in+26][0]; + AliDebug(25, Form(" readed Raw %i %i %i", + in, chargeQT0[in],chargeQT1[in])); + } } for (Int_t in=12; in<24; in++) { - chargeQT0[in]=allData[2*in+57][0]; - chargeQT1[in]=allData[2*in+58][0]; - AliDebug(25, Form(" readed Raw %i %i %i", - in, chargeQT0[in],chargeQT1[in])); - + if(allData[2*in+58][0] > 4700 && + allData[2*in+58][0] < 5700) + { + chargeQT0[in]=allData[2*in+57][0]; + chargeQT1[in]=allData[2*in+58][0]; + AliDebug(25, Form(" readed Raw %i %i %i", + in, chargeQT0[in],chargeQT1[in])); + } } - for (Int_t iHit=0; iHit<5; iHit++) - { - if(allData[49][iHit] > low[49] && - allData[49][iHit] < high[49]){ - onlineMean = allData[49][iHit]; - break; - } - } + onlineMean = allData[49][0]; + Double32_t time[24], adc[24], adcmip[24], noncalibtime[24]; for (Int_t ipmt=0; ipmt<24; ipmt++) { - if(timeCFD[ipmt] > 0 /* && badpmt[ipmt]==0*/ ){ + // if(timeCFD[ipmt] > 0 && (chargeQT0[ipmt] - chargeQT1[ipmt])>pedestal[ipmt] ){ + if(timeCFD[ipmt] > 0 && (chargeQT0[ipmt] - chargeQT1[ipmt])> 0 ){ //for simulated data //for physics data - if(( chargeQT0[ipmt] - chargeQT1[ipmt])>0) { + if(( chargeQT0[ipmt] - chargeQT1[ipmt])>pedestal[ipmt]) { adc[ipmt] = chargeQT0[ipmt] - chargeQT1[ipmt]; } else adc[ipmt] = 0; // time[ipmt] = fCalib-> WalkCorrection(refAmp, ipmt, Int_t(adc[ipmt]), timeCFD[ipmt] ) ; - - time[ipmt] = fCalib-> WalkCorrection(Int_t (fTime0vertex[ipmt]), ipmt, Int_t(adc[ipmt]), timeCFD[ipmt] ) ; + Int_t refAmp = Int_t (fTime0vertex[ipmt]); + time[ipmt] = fCalib-> WalkCorrection( refAmp, ipmt, Int_t(adc[ipmt]), timeCFD[ipmt] ) ; Double_t sl = timeLED[ipmt] - timeCFD[ipmt]; // time[ipmt] = fCalib-> WalkCorrection( refAmp,ipmt, Int_t(sl), timeCFD[ipmt] ) ; AliDebug(5,Form(" ipmt %i QTC %i , time in chann %i (led-cfd) %i ", ipmt, Int_t(adc[ipmt]) ,Int_t(time[ipmt]),Int_t( sl))); - Double_t ampMip =( (TGraph*)fAmpLED.At(ipmt))->Eval(sl); - Double_t qtMip = ((TGraph*)fQTC.At(ipmt))->Eval(adc[ipmt]); + Double_t ampMip = 0; + TGraph * ampGraph = (TGraph*)fAmpLED.At(ipmt); + if (ampGraph) ampMip = ampGraph->Eval(sl); + Double_t qtMip = 0; + TGraph * qtGraph = (TGraph*)fQTC.At(ipmt); + if (qtGraph) qtMip = qtGraph->Eval(adc[ipmt]); AliDebug(10,Form(" Amlitude in MIPS LED %f ; QTC %f; in channels %f\n ",ampMip,qtMip, adc[ipmt])); - //bad peak removing - frecpoints->SetTime(ipmt, Float_t(time[ipmt]) ); - // frecpoints->SetTime(ipmt,Double32_t(timeCFD[ipmt])); - frecpoints->SetAmp(ipmt, Double32_t( qtMip)); - adcmip[ipmt]=qtMip; - frecpoints->SetAmpLED(ipmt, Double32_t(ampMip)); - noncalibtime[ipmt]= Double32_t (timeCFD[ipmt]); + // if( qtMip>lowAmpThreshold && qtMipSetT0timeCorr(noncalibtime) ; + fESDTZEROfriend->SetT0timeCorr(noncalibtime) ; + for (Int_t ipmt=0; ipmt<12; ipmt++){ - if(time[ipmt] !=0 /*&& badpmt[ipmt]==0 */&& adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt] -9000 + /*&& badpmt[ipmt]==0 */ + && adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt]lowAmpThreshold && adcmip[ipmt] -9000 + /* && badpmt[ipmt]==0*/ + && adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt]SetTimeBestA((besttimeA * channelWidth)- 1000.*fLatencyHPTDC + 1000.*fLatencyL1A - 1000.*fGRPdelays - fTimeMeanShift[1] ); - // frecpoints->SetTimeBestA((besttimeA * channelWidth- fTimeMeanShift[1])); - - if( besttimeC < 999999 ) - frecpoints->SetTimeBestC((besttimeC * channelWidth)- 1000.*fLatencyHPTDC +1000.*fLatencyL1C - 1000.*fGRPdelays - fTimeMeanShift[2]); - // frecpoints->SetTimeBestC((besttimeC * channelWidth - fTimeMeanShift[2])); - AliDebug(5,Form(" pmtA %i besttimeA %f shift A %f ps, pmtC %i besttimeC %f shiftC %f ps", - pmtBestA,besttimeA, fTimeMeanShift[1], - pmtBestC, besttimeC,fTimeMeanShift[2])); - if(besttimeA <999999 && besttimeC < 999999 ){ - // timeDiff = ( besttimeA - besttimeC)* 0.001* channelWidth + fLatencyL1A - fLatencyL1C; - timeclock = channelWidth * Float_t( besttimeA+besttimeC)/2. - 1000.*fLatencyHPTDC + 1000.*fLatencyL1 - 1000.*fGRPdelays - fTimeMeanShift[0] ; - meanTime = (besttimeA+besttimeC-2.*Float_t(ref))/2.; + + if(besttimeA < 999999 && besttimeA!=0 ) { + if( equalize ==0 ) + frecpoints.SetTime1stA((besttimeA * channelWidth)- 1000.*fLatencyHPTDC + 1000.*fLatencyL1A - 1000.*fGRPdelays - fTimeMeanShift[1] ); + else + { + frecpoints.SetTimeBestA((besttimeA_best * channelWidth )); + frecpoints.SetTime1stA((besttimeA * channelWidth - fTimeMeanShift[1])); + } + } + if( besttimeC < 999999 && besttimeC!=0) { + if( equalize ==0 ) + frecpoints.SetTime1stC((besttimeC * channelWidth)- 1000.*fLatencyHPTDC +1000.*fLatencyL1C - 1000.*fGRPdelays - fTimeMeanShift[2]); + else + { + frecpoints.SetTimeBestC((besttimeC_best * channelWidth )); + frecpoints.SetTime1stC((besttimeC * channelWidth - fTimeMeanShift[2])); + } + } + AliDebug(5,Form("1stimeA %f , besttimeA %f 1sttimeC %f besttimeC %f ", + besttimeA, besttimeA_best, + besttimeC, besttimeC_best) ); + AliDebug(5,Form("fRecPoints::: 1stimeA %f , besttimeA %f 1sttimeC %f besttimeC %f shiftA %f shiftC %f ", + frecpoints.Get1stTimeA(), frecpoints.GetBestTimeA(), + frecpoints.Get1stTimeC(), frecpoints.GetBestTimeC(), + fTimeMeanShift[1],fTimeMeanShift[2] ) ); + if( besttimeC < 999999 && besttimeA < 999999) { + if(equalize ==0 ) + timeclock = (channelWidth*(besttimeC + besttimeA)/2.- 1000.*fLatencyHPTDC +1000.*fLatencyL1 - 1000.*fGRPdelays - fTimeMeanShift[0]); + else + { + timeclock = channelWidth * Float_t( besttimeA+besttimeC)/2. - fTimeMeanShift[0]; + meanTime = channelWidth * Float_t(besttimeA_best + besttimeC_best )/2.; + } timeDiff = ( besttimeA - besttimeC)* 0.001* channelWidth ; - // timeclock = channelWidth * Float_t( besttimeA+besttimeC)/2. - fTimeMeanShift[0] ; vertex = meanVertex - c*(timeDiff)/2. ; //+ (fdZonA - fdZonC)/2; - } + } + } //if phys event - AliDebug(10,Form(" timeDiff %f #channel, meanTime %f #channel, TOFmean%f vertex %f cm meanVertex %f online mean %i \n",timeDiff, meanTime,timeclock, vertex,meanVertex, onlineMean)); - frecpoints->SetT0clock(timeclock); - frecpoints->SetVertex(vertex); - frecpoints->SetMeanTime(meanTime); - frecpoints->SetOnlineMean(Int_t(onlineMean)); - // Set triggers + AliDebug(1,Form(" timeDiff %f #channel, meanTime %f #ps, TOFmean%f vertex %f cm meanVertex %f \n",timeDiff, meanTime,timeclock, vertex,meanVertex)); + frecpoints.SetT0clock(timeclock); + frecpoints.SetVertex(vertex); + frecpoints.SetMeanTime(meanTime); + frecpoints.SetOnlineMean(Int_t(onlineMean)); + // Set triggers Bool_t tr[5]; - Int_t trchan[5]= {50,51,52,55,56}; - for (Int_t i=0; i<5; i++) tr[i]=false; + Int_t trchan[5] = {50,51,52,55,56}; + Float_t lowtr[5] = {meanTVDC-700, meanOrA-700, meanOrC-700, meanOrC-1000, meanOrC-1000 }; + Float_t hightr[5] = {meanTVDC+700, meanOrA+700, meanOrC+700, meanOrC+1000, meanOrC+1000}; + + for (Int_t i=0; i<5; i++) tr[i] = false; for (Int_t itr=0; itr<5; itr++) { - for (Int_t iHit=0; iHit<5; iHit++) + for (Int_t iHit=0; iHit<1; iHit++) { Int_t trr=trchan[itr]; - if( allData[trr][iHit] > 0) tr[itr]=true; - } + if( allData[trr][iHit] > lowtr[itr] && allData[trr][iHit] < hightr[itr]) tr[itr]=true; + + AliDebug(15,Form("Reconstruct ::: T0 triggers iHit %i tvdc %d orA %d orC %d centr %d semicentral %d",iHit, tr[0],tr[1],tr[2],tr[3],tr[4])); + } } - frecpoints->SetT0Trig(tr); - + frecpoints.SetT0Trig(tr); + + // all times with amplitude correction + Float_t timecent; + for (Int_t iHit=0; iHit<5; iHit++) + { + timefull = timecent = -9999; + tvdc = ora = orc = -9999; + if(allData[50][iHit]>0) + tvdc = (Float_t(allData[50][iHit]) - meanTVDC) * channelWidth* 0.001; + if(allData[51][iHit]>0) + ora = (Float_t(allData[51][iHit]) - meanOrA) * channelWidth* 0.001; + + if(allData[52][iHit]>0) + orc = (Float_t(allData[52][iHit]) - meanOrC) * channelWidth* 0.001; + + frecpoints.SetOrC( iHit, orc); + frecpoints.SetOrA( iHit, ora); + frecpoints.SetTVDC( iHit, tvdc); + for (Int_t i0=0; i0<12; i0++) { + if (equalize ==0 ) + timecent = fTime0vertex[i0] + timeDelayCFD[i0]; + else + timecent = fTime0vertex[i0]; + timefull = -9999; + if(allData[i0+1][iHit]>1) + timefull = (Float_t(allData[i0+1][iHit]) - timecent)* channelWidth* 0.001; + frecpoints.SetTimeFull(i0, iHit,timefull) ; + // if(allData[i0+1][iHit]>1) printf("i0 %d iHit %d data %d fTime0vertex %f timefull %f \n",i0, iHit, allData[i0+1][iHit], fTime0vertex[i0], timefull); + + } + + for (Int_t i0=12; i0<24; i0++) { + timefull = -9999; + if (equalize ==0 ) + timecent = fTime0vertex[i0] + timeDelayCFD[i0]; + else + timecent = fTime0vertex[i0]; + if(allData[i0+45][iHit]>1) { + timefull = (Float_t(allData[i0+45][iHit]) - timecent)* channelWidth* 0.001; + } + // if(allData[i0+45][iHit]>1) printf("i0 %d iHit %d data %d fTime0vertex %f timefull %f \n",i0, iHit, allData[i0+45][iHit], fTime0vertex[i0], timefull); + frecpoints.SetTimeFull(i0, iHit, timefull) ; + } + } + + //Set MPD if(allData[53][0]>0 && allData[54][0]) - frecpoints->SetMultA(allData[53][0]-allData[54][0]); - if(allData[105][0]>0 && allData[106][0]) - frecpoints->SetMultC(allData[105][0]-allData[106][0]); - - + frecpoints.SetMultA(allData[53][0]-allData[54][0]); + if(allData[105][0]>0 && allData[106][0]) + frecpoints.SetMultC(allData[105][0]-allData[106][0]); + + } // if (else )raw data recTree->Fill(); - if(frecpoints) delete frecpoints; } - //____________________________________________________________ +//____________________________________________________________ void AliT0Reconstructor::FillESD(TTree */*digitsTree*/, TTree *clustersTree, AliESDEvent *pESD) const { @@ -551,23 +664,19 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con currentVertex = vertex->GetZ(); ncont = vertex->GetNContributors(); - // cout<<"@@ spdver "<0 ) { shift = currentVertex/c; } } TTree *treeR = clustersTree; - AliT0RecPoint* frecpoints= new AliT0RecPoint (); - if (!frecpoints) { - AliError("Reconstruct Fill ESD >> no recpoints found"); - return; - } + AliT0RecPoint frecpoints; + AliT0RecPoint * pfrecpoints = &frecpoints; AliDebug(1,Form("Start FillESD T0")); TBranch *brRec = treeR->GetBranch("T0"); if (brRec) { - brRec->SetAddress(&frecpoints); + brRec->SetAddress(&pfrecpoints); }else{ AliError(Form("EXEC Branch T0 rec not found")); return; @@ -579,47 +688,84 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con for(Int_t i=0; i<24; i++) amp[i]=time[i]=ampQTC[i]=timecorr[i]=0; - + //1st time Double32_t timeClock[3]; - Double32_t zPosition = frecpoints -> GetVertex(); - Double32_t timeStart = frecpoints -> GetMeanTime(); - timeClock[0] = frecpoints -> GetT0clock() ; - timeClock[1] = frecpoints -> GetBestTimeA() + shift; - timeClock[2] = frecpoints -> GetBestTimeC() - shift; - + Double32_t zPosition = frecpoints.GetVertex(); + + timeClock[0] = frecpoints.GetT0clock() ; + timeClock[1] = frecpoints.Get1stTimeA() + shift; + timeClock[2] = frecpoints.Get1stTimeC() - shift; + //best time + Double32_t timemean[3]; + timemean[0] = frecpoints.GetMeanTime(); + timemean[1] = frecpoints.GetBestTimeA() + shift; + timemean[2] = frecpoints.GetBestTimeC() - shift; + + for(Int_t i=0; i<3; i++) { + fESDTZERO->SetT0TOF(i,timeClock[i]); // interaction time (ns) + fESDTZERO->SetT0TOFbest(i,timemean[i]); // interaction time (ns) + } for ( Int_t i=0; i<24; i++) { - time[i] = frecpoints -> GetTime(i); // ps to ns - // if ( time[i] >1) { - if ( time[i] != 0) { - ampQTC[i] = frecpoints -> GetAmp(i); - amp[i] = frecpoints -> AmpLED(i); + time[i] = frecpoints.GetTime(i); // ps to ns + if ( time[i] != 0 && time[i]>-9999) { + ampQTC[i] = frecpoints.GetAmp(i); + amp[i] = frecpoints.AmpLED(i); AliDebug(1,Form("T0: %i time %f ampQTC %f ampLED %f \n", i, time[i], ampQTC[i], amp[i])); } } - Int_t trig= frecpoints ->GetT0Trig(); - pESD->SetT0Trig(trig); - - pESD->SetT0zVertex(zPosition); //vertex Z position - - Double32_t multA=frecpoints ->GetMultA(); - Double32_t multC=frecpoints ->GetMultC(); - // pESD->SetT0MultC(multC); // multiplicity Cside - // pESD->SetT0MultA(multA); // multiplicity Aside - pESD->SetT0(multA); // for backward compatubility - pESD->SetT0clock(multC); // for backward compatubility - - for(Int_t i=0; i<3; i++) - pESD->SetT0TOF(i,timeClock[i]); // interaction time (ns) - pESD->SetT0time(time); // best TOF on each PMT - pESD->SetT0amplitude(ampQTC); // number of particles(MIPs) on each PMT + fESDTZERO->SetT0time(time); // best TOF on each PMT + fESDTZERO->SetT0amplitude(ampQTC); // number of particles(MIPs) on each PMT + Int_t trig= frecpoints.GetT0Trig(); + frecpoints.PrintTriggerSignals( trig); + // printf(" !!!!! FillESD trigger %i \n",trig); + fESDTZERO->SetT0Trig(trig); + fESDTZERO->SetT0zVertex(zPosition); //vertex Z position + + Double32_t multA=frecpoints.GetMultA(); + Double32_t multC=frecpoints.GetMultC(); + fESDTZERO->SetMultA(multA); // for backward compatubility + fESDTZERO->SetMultC(multC); // for backward compatubility + + + for (Int_t iHit =0; iHit<5; iHit++ ) { + AliDebug(10,Form("FillESD ::: iHit %i tvdc %f orA %f orC %f\n", iHit, + frecpoints.GetTVDC(iHit), + frecpoints.GetOrA(iHit), + frecpoints.GetOrC(iHit) )); + fESDTZERO->SetTVDC(iHit,frecpoints.GetTVDC(iHit)); + fESDTZERO->SetOrA(iHit,frecpoints.GetOrA(iHit)); + fESDTZERO->SetOrC(iHit,frecpoints.GetOrC(iHit)); + + for (Int_t i0=0; i0<24; i0++) { + // if(frecpoints.GetTimeFull(i0,iHit)>0){ + // printf("FillESD ::: iHit %i cfd %i time %f \n", iHit, i0, frecpoints.GetTimeFull(i0,iHit)); + fESDTZERO->SetTimeFull(i0, iHit,frecpoints.GetTimeFull(i0,iHit)); + // } + + } + } - AliDebug(1,Form("T0: SPDshift %f Vertex %f (T0A+T0C)/2 %f #channels T0signal %f ns OrA %f ns OrC %f T0trig %i\n",shift, zPosition, timeStart, timeClock[0], timeClock[1], timeClock[2], trig)); + AliDebug(1,Form("T0: SPDshift %f Vertex %f (T0A+T0C)/2 best %f #ps T0signal %f ps OrA %f ps OrC %f ps T0trig %i\n",shift, zPosition, timemean[0], timeClock[0], timeClock[1], timeClock[2], trig)); + + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // background flags + Bool_t background = BackgroundFlag(); + fESDTZERO->SetBackgroundFlag(background); + Bool_t pileup = PileupFlag(); + fESDTZERO->SetPileupFlag(pileup); + for (Int_t i=0; i<5; i++) { + fESDTZERO->SetPileupTime(i, frecpoints.GetTVDC(i) ) ; + // printf("!!!!!! FillESD :: pileup %i %f %f \n", i,fESDTZERO->GetPileupTime(i), frecpoints.GetTVDC(i)); + } + Bool_t sat = SatelliteFlag(); + fESDTZERO->SetSatelliteFlag(sat); + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if (pESD) { AliESDfriend *fr = (AliESDfriend*)pESD->FindListObject("AliESDfriend"); if (fr) { - AliDebug(1, Form("Writing TZERO friend data to ESD tree")); + AliDebug(10, Form("Writing TZERO friend data to ESD tree")); // if (ncont>2) { tcorr = fESDTZEROfriend->GetT0timeCorr(); @@ -634,14 +780,70 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con fr->SetTZEROfriend(fESDTZEROfriend); // }// } - } - + pESD->SetTZEROData(fESDTZERO); + } } // vertex in 3 sigma +//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + //____________________________________________________________ + +Bool_t AliT0Reconstructor::PileupFlag() const +{ + // + Bool_t pileup = false; + Float_t tvdc[5]; + for (Int_t ih=0; ih<5; ih++) + { + tvdc[ih] = fESDTZERO->GetTVDC(ih); + + if( tvdc[0] !=0 && tvdc[0]> -10 && tvdc[0]< 10 ) + if(ih>0 && tvdc[ih]>20 ) pileup = true; + if( tvdc[0] >20 || (tvdc[0] < -20 && tvdc[0] > -9000) ) pileup =true; + // if (pileup) printf(" !!!!! pile up %i tvdc %f \n",ih, tvdc[ih]); + } + return pileup; +} + + //____________________________________________________________ + +Bool_t AliT0Reconstructor::BackgroundFlag() const +{ + + Bool_t background = false; + /* + Float_t orA = fESDTZERO->GetOrA(0); + Float_t orC = fESDTZERO->GetOrC(0); + Float_t tvdc = fESDTZERO->GetTVDC(ih); + + if ( (orA > -5 && orA <5) && (orC > -5 && orC <5) && (tvdc < -5 || tvdc > 5)) { + background = true; + // printf(" orA %f orC %f tvdc %f\n", orA, orC, tvdc); + } + */ + return background; + + +} + //____________________________________________________________ + +Bool_t AliT0Reconstructor::SatelliteFlag() const +{ + + Float_t satelliteLow = GetRecoParam() -> GetLowSatelliteThreshold(); + Float_t satelliteHigh = GetRecoParam() -> GetHighSatelliteThreshold(); + Bool_t satellite = false; + for (Int_t i0=0; i0<24; i0++) { + Float_t timefull = fESDTZERO -> GetTimeFull(i0,0); + if( timefull > satelliteLow && timefull < satelliteHigh) satellite=true; + } + + return satellite; + +}