From: cheynis Date: Mon, 16 Oct 2006 08:28:38 +0000 (+0000) Subject: Cell number replaced by PM number in digit Tree X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=2027707981d6b4494be33b69812f99230354cee1;hp=2574db5e1e4d6c23d3cc0a7c0e969df60fe089a6 Cell number replaced by PM number in digit Tree --- diff --git a/VZERO/AliVZERO.cxx b/VZERO/AliVZERO.cxx index a07bcf72057..105681d63ca 100755 --- a/VZERO/AliVZERO.cxx +++ b/VZERO/AliVZERO.cxx @@ -281,16 +281,16 @@ void AliVZERO::Digits2Raw() if(fVerbose == 2) {ftxt.open("VZEROdigits.txt",ios::app);} for(Int_t k=0; kAt(k); - Int_t ADC = fVZERODigit->ADC(); - Int_t cell = fVZERODigit->CellNumber(); - Int_t Time = fVZERODigit->Time(); - if(fVerbose == 1) { cout <<"DDL: "<ADC(); + Int_t PMNumber = fVZERODigit->PMNumber(); + Int_t Time = fVZERODigit->Time(); + if(fVerbose == 1) { cout <<"DDL: "<WriteBinary(cell, ADC, Time); + buffer->WriteBinary(PMNumber, ADC, Time); } if(fVerbose==2) ftxt.close(); } diff --git a/VZERO/AliVZERODigitizer.cxx b/VZERO/AliVZERODigitizer.cxx index 37d05a1f944..67e8bbf3114 100644 --- a/VZERO/AliVZERODigitizer.cxx +++ b/VZERO/AliVZERODigitizer.cxx @@ -102,8 +102,9 @@ void AliVZERODigitizer::Exec(Option_t* /*option*/) { // Creates digits from hits - Int_t adc[80]; // 48 values on V0C + 32 on V0A - Float_t time[80], adc_gain[80]; + Int_t map[80]; // 48 values on V0C + 32 on V0A + Int_t adc[64]; // 32 PMs on V0C + 32 PMs on V0A + Float_t time[80], time2[64], adc_gain[80]; fNdigits = 0; Float_t cPM = fPhotoCathodeEfficiency * fPMGain; @@ -112,8 +113,8 @@ void AliVZERODigitizer::Exec(Option_t* /*option*/) // as I have no beam burst structure - odd or even beam burst number // Reminder : We have 16 scintillating cells mounted on 8 PMs - // on Ring 3 and Ring 4 in V0C - in principle I should add ADC outputs - // on these rings... I do not do it... + // on Ring 3 and Ring 4 in V0C - added to produce ADC outputs + // on these rings... for(Int_t i=0; i<16; i++) { adc_gain[i] = fCalibData->GetGain(i) ; }; @@ -165,7 +166,7 @@ void AliVZERODigitizer::Exec(Option_t* /*option*/) continue; } Float_t timeV0 = 1e12; - for(Int_t i=0; i<80; i++) { adc[i] = 0; time[i] = 0.0; } + for(Int_t i=0; i<80; i++) { map[i] = 0; time[i] = 0.0; } TClonesArray* hits = vzero->Hits(); @@ -180,8 +181,8 @@ void AliVZERODigitizer::Exec(Option_t* /*option*/) AliVZEROhit* hit = (AliVZEROhit *)hits->UncheckedAt(iHit); Int_t nPhot = hit->Nphot(); Int_t cell = hit->Cell(); - adc[cell] += nPhot; - Float_t dt_scintillator = gRandom->Gaus(0,0.3); + map[cell] += nPhot; + Float_t dt_scintillator = gRandom->Gaus(0,0.7); time[cell] = dt_scintillator + 1e9*hit->Tof(); if(time[cell] < timeV0) timeV0 = time[cell]; } // hit loop @@ -190,22 +191,44 @@ void AliVZERODigitizer::Exec(Option_t* /*option*/) loader->UnloadHits(); } // input loop + +// Now builds the scintillator cell response (80 cells i.e. 80 responses) - for (Int_t i=0; i<80; i++) { - Float_t q1 = Float_t ( adc[i] )* cPM * kQe; - Float_t noise = gRandom->Gaus(10.5,3.22); - Float_t pmResponse = q1/kC*TMath::Power(ktheta/kthau,1/(1-ktheta/kthau)) - + noise*1e-3; - adc[i] = Int_t( pmResponse * adc_gain[i]); - if(adc[i] > 0) { -// printf(" Event, cell, adc, tof = %d %d %d %f\n", -// outRunLoader->GetEventNumber(),i, adc[i], time[i]*100.0); + for (Int_t i=0; i<80; i++) { + Float_t q1 = Float_t ( map[i] )* cPM * kQe; + Float_t noise = gRandom->Gaus(10.5,3.22); + Float_t pmResponse = q1/kC*TMath::Power(ktheta/kthau,1/(1-ktheta/kthau)) + + noise*1e-3; + map[i] = Int_t( pmResponse * adc_gain[i]); + } + + +// Now transforms 80 cell responses into 64 photomultiplier responses + + for (Int_t j=0; j<32; j++){ + adc[j] = map [j]; + time2[j]= time[j];} + + for (Int_t j=48; j<80; j++){ + adc[j-16] = map [j]; + time2[j-16]= time[j];} + + for (Int_t j=0; j<16; j++){ + adc[16+j] = map [16 + 2*j]+ map [16 + 2*j + 1]; + time2[16+j] = TMath::Min(time [16 + 2*j], time [16 + 2*j + 1]);} + +// Now add digits to the digit Tree + + for (Int_t i=0; i<64; i++) { + if(adc[i] > 0) { +// printf(" Event, cell, adc, tof = %d %d %d %f\n", +// outRunLoader->GetEventNumber(),i, map[i], time[i]*100.0); // multiply by 10 to have 100 ps per channel : - AddDigit(i, adc[i], Int_t(time[i]*10.0) ); - } - - } + AddDigit(i, adc[i], Int_t(time2[i]*10.0) ); + } + } + treeD->Fill(); outLoader->WriteDigits("OVERWRITE"); outLoader->UnloadDigits(); @@ -213,13 +236,13 @@ void AliVZERODigitizer::Exec(Option_t* /*option*/) } //____________________________________________________________________________ -void AliVZERODigitizer::AddDigit(Int_t cellnumber, Int_t adc, Int_t time) +void AliVZERODigitizer::AddDigit(Int_t PMnumber, Int_t adc, Int_t time) { // Adds Digit TClonesArray &ldigits = *fDigits; - new(ldigits[fNdigits++]) AliVZEROdigit(cellnumber,adc,time); + new(ldigits[fNdigits++]) AliVZEROdigit(PMnumber,adc,time); } //____________________________________________________________________________ void AliVZERODigitizer::ResetDigit() diff --git a/VZERO/AliVZERODigitizer.h b/VZERO/AliVZERODigitizer.h index 4c8612337fe..99245cf8f0c 100644 --- a/VZERO/AliVZERODigitizer.h +++ b/VZERO/AliVZERODigitizer.h @@ -32,7 +32,7 @@ class AliVZERODigitizer: public AliDigitizer { virtual Bool_t Init(); virtual void Exec(Option_t* option=0); - void AddDigit(Int_t cellnumber, Int_t adc, Int_t time); + void AddDigit(Int_t PMnumber, Int_t adc, Int_t time); void ResetDigit(); AliVZEROCalibData *GetCalibData() const; diff --git a/VZERO/AliVZEROTrigger.cxx b/VZERO/AliVZEROTrigger.cxx index 23ceff60288..31a95219b48 100644 --- a/VZERO/AliVZEROTrigger.cxx +++ b/VZERO/AliVZEROTrigger.cxx @@ -75,15 +75,15 @@ void AliVZEROTrigger::Trigger() // vzeroDigitsTree->GetEvent(d); AliVZEROdigit* digit = (AliVZEROdigit*)vzeroDigits->At(d); - Int_t cellNumber = digit->CellNumber(); + Int_t PMNumber = digit->PMNumber(); Float_t adc = digit->ADC(); Float_t tdc = digit->Time(); // in 100 of picoseconds - if (cellNumber<=47 && adc>fAdcThresHold) { + if (PMNumber<=31 && adc>fAdcThresHold) { nLeftDig++; if (tdc=48 && adc>fAdcThresHold) { + if (PMNumber>=32 && adc>fAdcThresHold) { nRightDig++; if (tdc