X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EMCAL%2FAliEMCALTrigger.cxx;h=78da6ac95fe2bd23732952d00d47e3e708fb6a87;hb=c80e618dfb69334e0a3c3666d3244e0005269a56;hp=c036f25a9d674bf2a074a1bb65ab2108ea94a85a;hpb=d1f9a8ab3a5b4a639ed45a698f799480db221f72;p=u%2Fmrichter%2FAliRoot.git diff --git a/EMCAL/AliEMCALTrigger.cxx b/EMCAL/AliEMCALTrigger.cxx index c036f25a9d6..78da6ac95fe 100644 --- a/EMCAL/AliEMCALTrigger.cxx +++ b/EMCAL/AliEMCALTrigger.cxx @@ -59,6 +59,11 @@ #include "AliEMCALTrigger.h" #include "AliEMCALGeometry.h" #include "AliEMCALRawUtils.h" +#include "AliLog.h" +#include "AliCaloConstants.h" +#include "AliEMCALRawResponse.h" + +using namespace CALO; ClassImp(AliEMCALTrigger) @@ -174,7 +179,11 @@ AliEMCALTrigger::AliEMCALTrigger(const AliEMCALTrigger & trig) // cpy ctor } +//____________________________________________________________________________ AliEMCALTrigger::~AliEMCALTrigger() { + + //dtor + if(GetTimeKey()) { delete [] fADCValuesHighnxn; delete [] fADCValuesLownxn; @@ -203,12 +212,15 @@ void AliEMCALTrigger::CreateInputs() fInputs.AddLast( new AliTriggerInput( det+"_GammaHPt_L1", det, 0x04 ) ); fInputs.AddLast( new AliTriggerInput( det+"_GammaMPt_L1", det, 0x08 ) ); fInputs.AddLast( new AliTriggerInput( det+"_GammaLPt_L1", det, 0x016 ) ); + fInputs.AddLast( new AliTriggerInput( det+"_JetHPt_L1", det, 0x032 ) ); + fInputs.AddLast( new AliTriggerInput( det+"_JetMPt_L1", det, 0x048 ) ); + fInputs.AddLast( new AliTriggerInput( det+"_JetLPt_L1", det, 0x064 ) ); if(fNJetThreshold<=0) return; // Jet Trigger(s) UInt_t level = 0x032; for(Int_t i=0; iGetNTRU(); //number of tru, min 0 max 3*12=36. TMatrixD * ampmatrix = 0x0; Int_t colborder = 0; Int_t rowborder = 0; static int keyPrint = 0; - if(keyPrint) printf(" IsPatchIsolated : iSM %i mtru %i itru %i maxphi %i maxeta %i \n", iSM, mtru, itru, maxphi, maxeta); + if(keyPrint) AliDebug(2,Form(" IsPatchIsolated : iSM %i mtru %i itru %i maxphi %i maxeta %i \n", iSM, mtru, itru, maxphi, maxeta)); if(fIsolateInSuperModule){ // ? ampmatrix = dynamic_cast(ampmatrixes->At(iSM)) ; @@ -258,6 +271,11 @@ Bool_t AliEMCALTrigger::IsPatchIsolated(Int_t iPatchType, const TClonesArray * a } if(iSM>9) rowborder /= 2; // half size in phi + if(!ampmatrixes || !ampmatrix){ + AliError("Could not recover the matrix with the amplitudes"); + return kFALSE; + } + //Define patch modules - what is this ?? Int_t isolmodules = fIsolPatchSize*(1+iPatchType); Int_t ipatchmodules = 2*(1+fPatchSize*iPatchType); @@ -304,7 +322,7 @@ Bool_t AliEMCALTrigger::IsPatchIsolated(Int_t iPatchType, const TClonesArray * a if(amp < fnxnAmpOutOfPatchThres) b=kTRUE; } - if(keyPrint) printf(" IsPatchIsolated - OUT \n"); + if(keyPrint) AliDebug(2,Form(" IsPatchIsolated - OUT \n")); return b; @@ -425,7 +443,7 @@ void AliEMCALTrigger::MakeSlidingCell(const TClonesArray * amptrus, const TClone */ //____________________________________________________________________________ void AliEMCALTrigger::MakeSlidingTowers(const TClonesArray * amptrus, const TClonesArray * timeRtrus, -const Int_t isupermod,TMatrixD &max2, TMatrixD &maxn){ + const Int_t isupermod,TMatrixD &max2, TMatrixD &maxn){ // Output from module (2x2 cells from one module) Int_t nModulesPhi = fGeom->GetNModulesInTRUPhi(); // now 4 modules (3 div in phi) @@ -435,9 +453,9 @@ const Int_t isupermod,TMatrixD &max2, TMatrixD &maxn){ Int_t nModulesEta = fGeom->GetNModulesInTRUEta(); // now 24 modules (no division in eta) Int_t nTRU = fGeom->GetNTRU(); static int keyPrint = 0; - if(keyPrint) printf("MakeSlidingTowers : nTRU %i nModulesPhi %i nModulesEta %i ", - nTRU, nModulesPhi, nModulesEta ); - + if(keyPrint) AliDebug(2,Form("MakeSlidingTowers : nTRU %i nModulesPhi %i nModulesEta %i ", + nTRU, nModulesPhi, nModulesEta )); + Float_t amp2 = 0 ; Float_t ampn = 0 ; for(Int_t i = 0; i < 4; i++){ @@ -445,92 +463,97 @@ const Int_t isupermod,TMatrixD &max2, TMatrixD &maxn){ ampmax2(i,j) = ampmaxn(i,j) = -1; } } - + // Create matrix that will contain 2x2 amplitude sums // used to calculate the nxn sums TMatrixD tru2x2(nModulesPhi/2,nModulesEta/2); - + // Loop over all TRUS in a supermodule for(Int_t itru = 0 + isupermod * nTRU ; itru < (isupermod+1)*nTRU ; itru++) { TMatrixD * amptru = dynamic_cast(amptrus->At(itru)) ; TMatrixD * timeRtru = dynamic_cast(timeRtrus->At(itru)) ; Int_t mtru = itru - isupermod*nTRU ; // Number of TRU in Supermodule !! - + + if(!amptru || !timeRtru){ + AliError("Amplitude or Time TRU matrix not available"); + return; + } + // Sliding 2x2, add 2x2 amplitudes (NOT OVERLAP) for(Int_t irow = 0 ; irow < nModulesPhi; irow +=2){ for(Int_t icol = 0 ; icol < nModulesEta ; icol +=2){ - amp2 = (*amptru)(irow,icol) +(*amptru)(irow+1,icol)+ - (*amptru)(irow,icol+1)+(*amptru)(irow+1,icol+1); - - //Fill matrix with added 2x2 towers for use in nxn sums - tru2x2(irow/2,icol/2) = amp2 ; - //Select 2x2 maximum sums to select L0 - if(amp2 > ampmax2(0,mtru)){ - ampmax2(0,mtru) = amp2 ; - ampmax2(1,mtru) = irow; - ampmax2(2,mtru) = icol; - } + amp2 = (*amptru)(irow,icol) +(*amptru)(irow+1,icol)+ + (*amptru)(irow,icol+1)+(*amptru)(irow+1,icol+1); + + //Fill matrix with added 2x2 towers for use in nxn sums + tru2x2(irow/2,icol/2) = amp2 ; + //Select 2x2 maximum sums to select L0 + if(amp2 > ampmax2(0,mtru)){ + ampmax2(0,mtru) = amp2 ; + ampmax2(1,mtru) = irow; + ampmax2(2,mtru) = icol; + } } } ampmax2(3,mtru) = 0.; if(GetTimeKey()) { - // Find most recent time in the selected 2x2 towers + // Find most recent time in the selected 2x2 towers Int_t row2 = static_cast (ampmax2(1,mtru)); Int_t col2 = static_cast (ampmax2(2,mtru)); for(Int_t i = 0; i<2; i++){ for(Int_t j = 0; j<2; j++){ - if((*amptru)(row2+i,col2+j) > 0 && (*timeRtru)(row2+i,col2+j)> 0){ - if((*timeRtru)(row2+i,col2+j) > ampmax2(3,mtru) ) - ampmax2(3,mtru) = (*timeRtru)(row2+i,col2+j); // max time - } + if((*amptru)(row2+i,col2+j) > 0 && (*timeRtru)(row2+i,col2+j)> 0){ + if((*timeRtru)(row2+i,col2+j) > ampmax2(3,mtru) ) + ampmax2(3,mtru) = (*timeRtru)(row2+i,col2+j); // max time + } } } } - + //Sliding nxn, add nxn amplitudes (OVERLAP) if(fPatchSize > 0){ for(Int_t irow = 0 ; irow < nModulesPhi/2; irow++){ - for(Int_t icol = 0 ; icol < nModulesEta/2; icol++){ - ampn = 0; - if( (irow+fPatchSize) < nModulesPhi/2 && (icol+fPatchSize) < nModulesEta/2){ //Avoid exit the TRU - for(Int_t i = 0 ; i <= fPatchSize ; i++) - for(Int_t j = 0 ; j <= fPatchSize ; j++) - ampn += tru2x2(irow+i,icol+j); - //Select nxn maximum sums to select L1 - if(ampn > ampmaxn(0,mtru)){ - ampmaxn(0,mtru) = ampn ; - ampmaxn(1,mtru) = irow; - ampmaxn(2,mtru) = icol; - } - } - } + for(Int_t icol = 0 ; icol < nModulesEta/2; icol++){ + ampn = 0; + if( (irow+fPatchSize) < nModulesPhi/2 && (icol+fPatchSize) < nModulesEta/2){ //Avoid exit the TRU + for(Int_t i = 0 ; i <= fPatchSize ; i++) + for(Int_t j = 0 ; j <= fPatchSize ; j++) + ampn += tru2x2(irow+i,icol+j); + //Select nxn maximum sums to select L1 + if(ampn > ampmaxn(0,mtru)){ + ampmaxn(0,mtru) = ampn ; + ampmaxn(1,mtru) = irow; + ampmaxn(2,mtru) = icol; + } + } + } } ampmaxn(3,mtru) = 0.; // Was 1 , I don't know why if(GetTimeKey()) { - //Find most recent time in selected nxn cell + //Find most recent time in selected nxn cell Int_t rown = static_cast (ampmaxn(1,mtru)); Int_t coln = static_cast (ampmaxn(2,mtru)); for(Int_t i = 0; i<4*fPatchSize; i++){ - for(Int_t j = 0; j<4*fPatchSize; j++){ - if( (rown+i) < nModulesPhi && (coln+j) < nModulesEta){//Avoid exit the TRU - if((*amptru)(rown+i,coln+j) > 0 && (*timeRtru)(rown+i,coln+j)> 0){ - if((*timeRtru)(rown+i,coln+j) > ampmaxn(3,mtru) ) - ampmaxn(3,mtru) = (*timeRtru)(rown+i,coln+j); // max time - } - } - } + for(Int_t j = 0; j<4*fPatchSize; j++){ + if( (rown+i) < nModulesPhi && (coln+j) < nModulesEta){//Avoid exit the TRU + if((*amptru)(rown+i,coln+j) > 0 && (*timeRtru)(rown+i,coln+j)> 0){ + if((*timeRtru)(rown+i,coln+j) > ampmaxn(3,mtru) ) + ampmaxn(3,mtru) = (*timeRtru)(rown+i,coln+j); // max time + } + } + } } } } else { // copy 2x2 to nxn - ampmaxn(0,mtru) = ampmax2(0,mtru); - ampmaxn(1,mtru) = ampmax2(1,mtru); - ampmaxn(2,mtru) = ampmax2(2,mtru); - ampmaxn(3,mtru) = ampmax2(3,mtru); + ampmaxn(0,mtru) = ampmax2(0,mtru); + ampmaxn(1,mtru) = ampmax2(1,mtru); + ampmaxn(2,mtru) = ampmax2(2,mtru); + ampmaxn(3,mtru) = ampmax2(3,mtru); } } - if(keyPrint) printf(" : MakeSlidingTowers -OUt \n"); + if(keyPrint) AliDebug(2,Form(" : MakeSlidingTowers -OUt \n")); } //____________________________________________________________________________ @@ -542,50 +565,42 @@ void AliEMCALTrigger::Print(const Option_t * opt) const if(! opt) return; AliTriggerInput* in = 0x0 ; - printf( " fSimulation %i (input option) : #digits %i\n", fSimulation, fDigitsList->GetEntries()); - printf( " fTimeKey %i \n ", fTimeKey); - - printf( " Maximum Amplitude after Sliding Cell, \n") ; - printf( " -2x2 cells sum (not overlapped): %10.2f, in Super Module %d\n", - f2x2MaxAmp,f2x2SM) ; - printf( " -2x2 from row %d to row %d and from column %d to column %d\n", f2x2ModulePhi, f2x2ModulePhi+2, f2x2ModuleEta, f2x2ModuleEta+2) ; - printf( " -2x2 Isolation Patch %d x %d, Amplitude out of 2x2 patch is %f, threshold %f, Isolated? %d \n", - 2*fIsolPatchSize+2, 2*fIsolPatchSize+2, f2x2AmpOutOfPatch, f2x2AmpOutOfPatchThres,static_cast (fIs2x2Isol)) ; + AliInfo(Form(" fSimulation %i (input option) : #digits %i\n", fSimulation, fDigitsList->GetEntries())); + AliInfo(Form(" fTimeKey %i \n ", fTimeKey)); + + AliInfo(Form("\t Maximum Amplitude after Sliding Cell, \n")) ; + AliInfo(Form("\t -2x2 cells sum (not overlapped): %10.2f, in Super Module %d\n", + f2x2MaxAmp,f2x2SM)) ; + AliInfo(Form("\t -2x2 from row %d to row %d and from column %d to column %d\n", f2x2ModulePhi, f2x2ModulePhi+2, f2x2ModuleEta, f2x2ModuleEta+2)); + AliInfo(Form("\t -2x2 Isolation Patch %d x %d, Amplitude out of 2x2 patch is %f, threshold %f, Isolated? %d \n", 2*fIsolPatchSize+2, 2*fIsolPatchSize+2, f2x2AmpOutOfPatch, f2x2AmpOutOfPatchThres,static_cast (fIs2x2Isol))); if(fPatchSize > 0){ - printf( " Patch Size, n x n: %d x %d cells\n",2*(fPatchSize+1), 2*(fPatchSize+1)); - printf( " -nxn cells sum (overlapped) : %10.2f, in Super Module %d\n", - fnxnMaxAmp,fnxnSM) ; - printf( " -nxn from row %d to row %d and from column %d to column %d\n", fnxnModulePhi, fnxnModulePhi+4*fPatchSize, fnxnModuleEta, fnxnModuleEta+4*fPatchSize) ; - printf( " -nxn Isolation Patch %d x %d, Amplitude out of nxn patch is %f, threshold %f, Isolated? %d \n", - 4*fIsolPatchSize+2*(fPatchSize+1),4*fIsolPatchSize+2*(fPatchSize+1) , fnxnAmpOutOfPatch, fnxnAmpOutOfPatchThres,static_cast (fIsnxnIsol) ) ; + AliInfo(Form("\t Patch Size, n x n: %d x %d cells\n",2*(fPatchSize+1), 2*(fPatchSize+1))); + AliInfo(Form("\t -nxn cells sum (overlapped) : %10.2f, in Super Module %d\n", fnxnMaxAmp,fnxnSM)); + AliInfo(Form("\t -nxn from row %d to row %d and from column %d to column %d\n", fnxnModulePhi, fnxnModulePhi+4*fPatchSize, fnxnModuleEta, fnxnModuleEta+4*fPatchSize)) ; + AliInfo(Form("\t -nxn Isolation Patch %d x %d, Amplitude out of nxn patch is %f, threshold %f, Isolated? %d \n", 4*fIsolPatchSize+2*(fPatchSize+1),4*fIsolPatchSize+2*(fPatchSize+1) , fnxnAmpOutOfPatch, fnxnAmpOutOfPatchThres,static_cast (fIsnxnIsol) )); } - printf( " Isolate in SuperModule? %d\n", - fIsolateInSuperModule) ; + AliInfo(Form("\t Isolate in SuperModule? %d\n", fIsolateInSuperModule)) ; + AliInfo(Form("\t Threshold for LO %10.2f\n", fL0Threshold)); - printf( " Threshold for LO %10.2f\n", - fL0Threshold) ; in = (AliTriggerInput*)fInputs.FindObject( "EMCAL_L0" ); if(in->GetValue()) - printf( " *** EMCAL LO is set ***\n") ; + AliInfo(Form("\t *** EMCAL LO is set ***\n")); - printf( " Gamma Low Pt Threshold for L1 %10.2f\n", - fL1GammaLowPtThreshold) ; + AliInfo(Form("\t Gamma Low Pt Threshold for L1 %10.2f\n", fL1GammaLowPtThreshold)); in = (AliTriggerInput*)fInputs.FindObject( "EMCAL_GammaLPt_L1" ); if(in->GetValue()) - printf( " *** EMCAL Gamma Low Pt for L1 is set ***\n") ; + AliInfo(Form("\t *** EMCAL Gamma Low Pt for L1 is set ***\n")); - printf( " Gamma Medium Pt Threshold for L1 %10.2f\n", - fL1GammaMediumPtThreshold) ; + AliInfo(Form("\t Gamma Medium Pt Threshold for L1 %10.2f\n", fL1GammaMediumPtThreshold)); in = (AliTriggerInput*) fInputs.FindObject( "EMCAL_GammaMPt_L1" ); if(in->GetValue()) - printf( " *** EMCAL Gamma Medium Pt for L1 is set ***\n") ; + AliInfo(Form("\t *** EMCAL Gamma Medium Pt for L1 is set ***\n")); - printf( " Gamma High Pt Threshold for L1 %10.2f\n", - fL1GammaHighPtThreshold) ; + AliInfo(Form("\t Gamma High Pt Threshold for L1 %10.2f\n", fL1GammaHighPtThreshold)); in = (AliTriggerInput*) fInputs.FindObject( "EMCAL_GammaHPt_L1" ); if(in->GetValue()) - printf( " *** EMCAL Gamma High Pt for L1 is set ***\n") ; + AliInfo(Form("\t *** EMCAL Gamma High Pt for L1 is set ***\n")) ; } @@ -626,7 +641,8 @@ void AliEMCALTrigger::SetTriggers(const TClonesArray * ampmatrix,const Int_t iSM Float_t maxtimeR2 = -1 ; Float_t maxtimeRn = -1 ; static AliEMCALRawUtils rawUtil; - Int_t nTimeBins = rawUtil.GetRawFormatTimeBins() ; + // Int_t nTimeBins = rawUtil.GetRawFormatTimeBins() ; + Int_t nTimeBins = TIMEBINS; //changed by PTH //Set max of 2x2 amplitudes and select L0 trigger if(max2[0] > f2x2MaxAmp ){ @@ -653,9 +669,15 @@ void AliEMCALTrigger::SetTriggers(const TClonesArray * ampmatrix,const Int_t iSM fADCValuesHigh2x2 = new Int_t[nTimeBins]; } //printf(" maxtimeR2 %12.5e (1)\n", maxtimeR2); - rawUtil.RawSampledResponse(maxtimeR2 * AliEMCALRawUtils::GetRawFormatTimeBin(), - f2x2MaxAmp, fADCValuesHigh2x2, fADCValuesLow2x2) ; - + // rawUtil.RawSampledResponse(maxtimeR2 * AliEMCALRawUtils::GetRawFormatTimeBin(), + // f2x2MaxAmp, fADCValuesHigh2x2, fADCValuesLow2x2) ; + + // rawUtil.RawSampledResponse(maxtimeR2*TIMEBINMAX/TIMEBINS, + // f2x2MaxAmp, fADCValuesHigh2x2, fADCValuesLow2x2) ; + + AliEMCALRawResponse::RawSampledResponse( maxtimeR2*TIMEBINMAX/TIMEBINS, + f2x2MaxAmp, fADCValuesHigh2x2, fADCValuesLow2x2) ; + // Set Trigger Inputs, compare ADC time bins until threshold is attained // Set L0 for(Int_t i = 0 ; i < nTimeBins ; i++){ @@ -695,9 +717,15 @@ void AliEMCALTrigger::SetTriggers(const TClonesArray * ampmatrix,const Int_t iSM fADCValuesHighnxn = new Int_t[nTimeBins]; fADCValuesLownxn = new Int_t[nTimeBins]; } - rawUtil.RawSampledResponse(maxtimeRn * AliEMCALRawUtils::GetRawFormatTimeBin(), - fnxnMaxAmp, fADCValuesHighnxn, fADCValuesLownxn) ; - + // rawUtil.RawSampledResponse(maxtimeRn * AliEMCALRawUtils::GetRawFormatTimeBin(), + // fnxnMaxAmp, fADCValuesHighnxn, fADCValuesLownxn) ; + + //rawUtil.RawSampledResponse(maxtimeRn*TIMEBINMAX/TIMEBINS, + // fnxnMaxAmp, fADCValuesHighnxn, fADCValuesLownxn) ; + + AliEMCALRawResponse::RawSampledResponse (maxtimeRn*TIMEBINMAX/TIMEBINS, + fnxnMaxAmp, fADCValuesHighnxn, fADCValuesLownxn) ; + //Set Trigger Inputs, compare ADC time bins until threshold is attained //SetL1 Low for(Int_t i = 0 ; i < nTimeBins ; i++){ @@ -812,76 +840,95 @@ void AliEMCALTrigger::FillTRU(const TClonesArray * digits, TClonesArray * ampmat for(Int_t idig = 0 ; idig < digits->GetEntriesFast() ; idig++){ dig = dynamic_cast(digits->At(idig)) ; - amp = Float_t(dig->GetAmp()); // Energy of the digit (arbitrary units) - id = dig->GetId() ; // Id label of the cell - timeR = dig->GetTimeR() ; // Earliest time of the digit - if(amp<=0.0) printf(" AliEMCALTrigger::FillTRU : id %i amp %f \n", id, amp); - // printf(" FILLTRU : timeR %10.5e time %10.5e : amp %10.5e \n", timeR, dig->GetTime(), amp); - // Get eta and phi cell position in supermodule - Bool_t bCell = fGeom->GetCellIndex(id, iSupMod, nModule, nIphi, nIeta) ; - if(!bCell) - Error("FillTRU","%i Wrong cell id number %i ", idig, id) ; - - fGeom->GetCellPhiEtaIndexInSModule(iSupMod,nModule,nIphi, nIeta,iphi,ieta); - // iphim, ietam - module indexes in SM - fGeom->GetModuleIndexesFromCellIndexesInSModule(iSupMod,iphi,ieta, iphim, ietam, nModule); - //if(iSupMod >9) - //printf("iSupMod %i nModule %i iphi %i ieta %i iphim %i ietam %i \n", - //iSupMod,nModule, iphi, ieta, iphim, ietam); - - // Check to which TRU in the supermodule belongs the cell. - // Supermodules are divided in a TRU matrix of dimension - // (fNTRUPhi,fNTRUEta). - // Each TRU is a cell matrix of dimension (nModulesPhi,nModulesEta) - - // First calculate the row and column in the supermodule - // of the TRU to which the cell belongs. - Int_t row = iphim / nModulesPhi; - Int_t col = ietam / nModulesEta; - //Calculate label number of the TRU - Int_t itru = fGeom->GetAbsTRUNumberFromNumberInSm(row, col, iSupMod); - - //Fill TRU matrix with cell values - TMatrixD * amptrus = dynamic_cast(ampmatrix->At(itru)) ; - TMatrixD * timeRtrus = dynamic_cast(timeRmatrix->At(itru)) ; - - //Calculate row and column of the module inside the TRU with number itru - Int_t irow = iphim - row * nModulesPhi; - if(iSupMod > 9) - irow = iphim - row * nModulesPhi2; // size of matrix the same - Int_t icol = ietam - col * nModulesEta; - - (*amptrus)(irow,icol) += amp ; - if((*timeRtrus)(irow,icol) <0.0 || (*timeRtrus)(irow,icol) <= timeR){ // ?? - (*timeRtrus)(irow,icol) = timeR ; + if(dig){ + amp = Float_t(dig->GetAmplitude()); // Energy of the digit (arbitrary units) + id = dig->GetId() ; // Id label of the cell + timeR = dig->GetTimeR() ; // Earliest time of the digit + if(amp<=0.0) AliDebug(1,Form(" id %i amp %f \n", id, amp)); + // printf(" FILLTRU : timeR %10.5e time %10.5e : amp %10.5e \n", timeR, dig->GetTime(), amp); + // Get eta and phi cell position in supermodule + Bool_t bCell = fGeom->GetCellIndex(id, iSupMod, nModule, nIphi, nIeta) ; + if(!bCell) + AliError(Form("%i Wrong cell id number %i ", idig, id)) ; + + fGeom->GetCellPhiEtaIndexInSModule(iSupMod,nModule,nIphi, nIeta,iphi,ieta); + // iphim, ietam - module indexes in SM + fGeom->GetModuleIndexesFromCellIndexesInSModule(iSupMod,iphi,ieta, iphim, ietam, nModule); + //if(iSupMod >9) + //printf("iSupMod %i nModule %i iphi %i ieta %i iphim %i ietam %i \n", + //iSupMod,nModule, iphi, ieta, iphim, ietam); + + // Check to which TRU in the supermodule belongs the cell. + // Supermodules are divided in a TRU matrix of dimension + // (fNTRUPhi,fNTRUEta). + // Each TRU is a cell matrix of dimension (nModulesPhi,nModulesEta) + + // First calculate the row and column in the supermodule + // of the TRU to which the cell belongs. + Int_t row = iphim / nModulesPhi; + Int_t col = ietam / nModulesEta; + //Calculate label number of the TRU + Int_t itru = fGeom->GetAbsTRUNumberFromNumberInSm(row, col, iSupMod); + + //Fill TRU matrix with cell values + TMatrixD * amptrus = dynamic_cast(ampmatrix->At(itru)) ; + TMatrixD * timeRtrus = dynamic_cast(timeRmatrix->At(itru)) ; + + if(!amptrus || !timeRtrus){ + AliError("Could not recover the TRU matrix with amplitudes or times"); + } + else{ + //Calculate row and column of the module inside the TRU with number itru + Int_t irow = iphim - row * nModulesPhi; + if(iSupMod > 9) + irow = iphim - row * nModulesPhi2; // size of matrix the same + Int_t icol = ietam - col * nModulesEta; + + (*amptrus)(irow,icol) += amp ; + if((*timeRtrus)(irow,icol) <0.0 || (*timeRtrus)(irow,icol) <= timeR){ // ?? + (*timeRtrus)(irow,icol) = timeR ; + } + } + //printf(" ieta %i iphi %i iSM %i || col %i row %i : itru %i -> amp %f\n", + // ieta, iphi, iSupMod, col, row, itru, amp); + //####################SUPERMODULE MATRIX ################## + TMatrixD * ampsmods = dynamic_cast(ampmatrixsmod->At(iSupMod)) ; + if(!ampsmods){ + AliError("Could not recover the matrix per SM"); + continue; + } + (*ampsmods)(iphim,ietam) += amp ; + // printf(" id %i iphim %i ietam %i SM %i : irow %i icol %i itru %i : amp %6.0f\n", + //id, iphim, ietam, iSupMod, irow, icol, itru, amp); } - //printf(" ieta %i iphi %i iSM %i || col %i row %i : itru %i -> amp %f\n", - // ieta, iphi, iSupMod, col, row, itru, amp); - //####################SUPERMODULE MATRIX ################## - TMatrixD * ampsmods = dynamic_cast(ampmatrixsmod->At(iSupMod)) ; - (*ampsmods)(iphim,ietam) += amp ; - // printf(" id %i iphim %i ietam %i SM %i : irow %i icol %i itru %i : amp %6.0f\n", - //id, iphim, ietam, iSupMod, irow, icol, itru, amp); + else AliError("Could not recover the digit"); } //assert(0); //printf(" AliEMCALTrigger::FillTRU() is ended \n"); } + //____________________________________________________________________________ void AliEMCALTrigger::Trigger() { - TH1::AddDirectory(0); //Main Method to select triggers. - AliRunLoader *runLoader = AliRunLoader::GetRunLoader(); + TH1::AddDirectory(0); + + AliRunLoader *runLoader = AliRunLoader::Instance(); AliEMCALLoader *emcalLoader = 0; if(runLoader) { emcalLoader = dynamic_cast(runLoader->GetDetectorLoader("EMCAL")); } //Load EMCAL Geometry - if (runLoader && runLoader->GetAliRun() && runLoader->GetAliRun()->GetDetector("EMCAL")) - fGeom = dynamic_cast(runLoader->GetAliRun()->GetDetector("EMCAL"))->GetGeometry(); + if (runLoader && runLoader->GetAliRun()){ + AliEMCAL* emcal = dynamic_cast(runLoader->GetAliRun()->GetDetector("EMCAL")); + if(emcal)fGeom = emcal->GetGeometry(); + } + + if (!fGeom) + fGeom = AliEMCALGeometry::GetInstance(AliEMCALGeometry::GetDefaultGeometryName()); - if (fGeom==0) + if (!fGeom) AliFatal("Did not get geometry from EMCALLoader"); //Define parameters @@ -918,7 +965,7 @@ void AliEMCALTrigger::Trigger() FillTRU(fDigitsList, fAmpTrus, fAmpSMods, fTimeRtrus); - // Jet staff - only one case, no fredom here + // Jet stuff - only one case, no freedom here if(fGeom->GetNEtaSubOfTRU() == 6) { if(fAmpJetMatrix) {delete fAmpJetMatrix; fAmpJetMatrix=0;} if(fJetMatrixE) {delete fJetMatrixE; fJetMatrixE=0;} @@ -963,13 +1010,15 @@ void AliEMCALTrigger::Trigger() // fDigitsList = 0; } -void AliEMCALTrigger::GetTriggerInfo(TArrayF &triggerPosition, TArrayF &triggerAmplitudes) +//____________________________________________________________________________ +void AliEMCALTrigger::GetTriggerInfo(TArrayF &triggerPosition, TArrayF &triggerAmplitudes) const { // Template - should be defined; Nov 5, 2007 triggerPosition[0] = 0.; triggerAmplitudes[0] = 0.; } +//____________________________________________________________________________ void AliEMCALTrigger::FillJetMatrixFromSMs(TClonesArray *ampmatrixsmod, TMatrixD* jetMat, AliEMCALGeometry *g) { // Nov 5, 2007 @@ -983,12 +1032,14 @@ void AliEMCALTrigger::FillJetMatrixFromSMs(TClonesArray *ampmatrixsmod, TMatrixD Int_t nEtaModSum = g->GetNZ() / g->GetNEtaSubOfTRU(); // should be 4 Int_t nPhiModSum = g->GetNPhi() / g->GetNTRUPhi(); // should be 4 - if(keyPrint) printf("%s",Form(" AliEMCALTrigger::FillJetMatrixFromSMs | nEtaModSum %i : nPhiModSum %i \n", - nEtaModSum, nPhiModSum)); + if(keyPrint) AliDebug(2,Form("%s",Form(" AliEMCALTrigger::FillJetMatrixFromSMs | nEtaModSum %i : nPhiModSum %i \n", nEtaModSum, nPhiModSum))); Int_t jrow=0, jcol=0; // indexes of jet matrix Int_t nEtaSM=0, nPhiSM=0; for(Int_t iSM=0; iSMGetEntries(); iSM++) { TMatrixD * ampsmods = dynamic_cast(ampmatrixsmod->At(iSM)); + + if(!ampsmods) return; + Int_t nrow = ampsmods->GetNrows(); Int_t ncol = ampsmods->GetNcols(); //printf("%s",Form(" ######## SM %i : nrow %i : ncol %i ##### \n", iSM, nrow, ncol)); @@ -998,8 +1049,7 @@ void AliEMCALTrigger::FillJetMatrixFromSMs(TClonesArray *ampmatrixsmod, TMatrixD nPhiSM = iSM / 2; nEtaSM = iSM % 2; if (amp>0.0) { - if(keyPrint) printf("%s",Form(" ** nPhiSm %i : nEtaSM %i : row %2.2i : col %2.2i -> ", - nPhiSM, nEtaSM, row, col)); + if(keyPrint) AliDebug(2,Form("%s",Form(" ** nPhiSm %i : nEtaSM %i : row %2.2i : col %2.2i -> ", nPhiSM, nEtaSM, row, col))); if(nEtaSM == 0) { // positive Z jrow = 3*nPhiSM + row/nPhiModSum; jcol = 6 + col / nEtaModSum; @@ -1008,25 +1058,26 @@ void AliEMCALTrigger::FillJetMatrixFromSMs(TClonesArray *ampmatrixsmod, TMatrixD else jrow = 3*nPhiSM + 1 - row/nPhiModSum; // half size jcol = 5 - col / nEtaModSum; } - if(keyPrint) printf("%s",Form(" jrow %2.2i : jcol %2.2i : amp %f (jetMat) \n", jrow, jcol, amp)); + if(keyPrint) AliDebug(2,Form("%s",Form(" jrow %2.2i : jcol %2.2i : amp %f (jetMat) \n", jrow, jcol, amp))); (*jetMat)(jrow,jcol) += amp; ampSum += amp; // For controling } else if(amp<0.0) { - printf("%s",Form(" jrow %2.2i : jcol %2.2i : amp %f (jetMat: amp<0) \n", jrow, jcol, amp)); + AliDebug(1,Form(" jrow %2.2i : jcol %2.2i : amp %f (jetMat: amp<0) \n", jrow, jcol, amp)); assert(0); } } } } // cycle on SM - if(ampSum <= 0.0) Warning("FillJetMatrixFromSMs","ampSum %f (<=0.0) ", ampSum); + if(ampSum <= 0.0) AliDebug(1,Form("ampSum %f (<=0.0) ", ampSum)); } +//____________________________________________________________________________ void AliEMCALTrigger::MakeSlidingPatch(const TMatrixD &jm, const Int_t nPatchSize, TMatrixD &JetMax) { // Sliding patch : nPatchSize x nPatchSize (OVERLAP) static int keyPrint = 0; - if(keyPrint) printf(" AliEMCALTrigger::MakeSlidingPatch() was started \n"); + if(keyPrint) AliDebug(2,Form(" AliEMCALTrigger::MakeSlidingPatch() was started \n")); Double_t ampCur = 0.0, e=0.0; ampJetMax(0,0) = 0.0; ampJetMax(3,0) = 0.0; // unused now @@ -1049,9 +1100,7 @@ void AliEMCALTrigger::MakeSlidingPatch(const TMatrixD &jm, const Int_t nPatchSiz } // check on patch size } } - if(keyPrint) printf(" ampJetMax %i row %2i->%2i col %2i->%2i \n", - Int_t(ampJetMax(0,0)), Int_t(ampJetMax(1,0)), Int_t(ampJetMax(1,0))+nPatchSize-1, - Int_t(ampJetMax(2,0)), Int_t(ampJetMax(2,0))+nPatchSize-1); + if(keyPrint) AliDebug(2,Form(" ampJetMax %i row %2i->%2i col %2i->%2i \n", Int_t(ampJetMax(0,0)), Int_t(ampJetMax(1,0)), Int_t(ampJetMax(1,0))+nPatchSize-1, Int_t(ampJetMax(2,0)), Int_t(ampJetMax(2,0))+nPatchSize-1)); Double_t eCorrJetMatrix=0.0; if(fVZER0Mult > 0.0) { @@ -1061,8 +1110,8 @@ void AliEMCALTrigger::MakeSlidingPatch(const TMatrixD &jm, const Int_t nPatchSiz ampJetMax(5,0) = meanAmpBG; Double_t eCorr = ampJetMax(0,0) - meanAmpBG; - printf(" ampJetMax(0,0) %f meanAmpBG %f eCorr %f : ampJetMax(4,0) %f \n", - ampJetMax(0,0), meanAmpBG, eCorr, ampJetMax(5,0)); + AliDebug(2,Form(" ampJetMax(0,0) %f meanAmpBG %f eCorr %f : ampJetMax(4,0) %f \n", + ampJetMax(0,0), meanAmpBG, eCorr, ampJetMax(5,0))); ampJetMax(0,0) = eCorr; // -- eCorrJetMatrix = GetMeanEmcalEnergy(Int_t(fVZER0Mult)) / 208.; @@ -1083,11 +1132,12 @@ void AliEMCALTrigger::MakeSlidingPatch(const TMatrixD &jm, const Int_t nPatchSiz // Set the jet trigger(s), multiple threshold now, Nov 19,2007 for(Int_t i=0; i= fL1JetThreshold[i]) { - SetInput((Form("%s_Th%2i", fgNameOfJetTriggers.Data(),i))); + SetInput(GetNameOfJetTrigger(i)); } } } +//____________________________________________________________________________ Double_t AliEMCALTrigger::GetEmcalSumAmp() const { // Return sum of amplidutes from EMCal @@ -1095,50 +1145,58 @@ Double_t AliEMCALTrigger::GetEmcalSumAmp() const return fAmpJetMatrix >0 ?fAmpJetMatrix->Sum() :0.0; } - +//____________________________________________________________________________ void AliEMCALTrigger::PrintJetMatrix() const { // fAmpJetMatrix : (17,12); // 17-phi(row), 12-eta(col) if(fAmpJetMatrix == 0) return; - printf("\n #### jetMatrix : (%i,%i) ##### \n ", - fAmpJetMatrix->GetNrows(), fAmpJetMatrix->GetNcols()); + AliInfo(Form("\n #### jetMatrix : (%i,%i) ##### \n ", + fAmpJetMatrix->GetNrows(), fAmpJetMatrix->GetNcols())); PrintMatrix(*fAmpJetMatrix); } +//____________________________________________________________________________ void AliEMCALTrigger::PrintAmpTruMatrix(Int_t ind) const { + // Print matrix with TRU patches TMatrixD * tru = dynamic_cast(fAmpTrus->At(ind)); if(tru == 0) return; - printf("\n #### Amp TRU matrix(%i) : (%i,%i) ##### \n ", - ind, tru->GetNrows(), tru->GetNcols()); + AliInfo(Form("\n #### Amp TRU matrix(%i) : (%i,%i) ##### \n ", + ind, tru->GetNrows(), tru->GetNcols())); PrintMatrix(*tru); } +//____________________________________________________________________________ void AliEMCALTrigger::PrintAmpSmMatrix(Int_t ind) const { - TMatrixD * sm = dynamic_cast(fAmpSMods->At(ind)); + // Print matrix with SM amplitudes + TMatrixD * sm = dynamic_cast(fAmpSMods->At(ind)); if(sm == 0) return; - printf("\n #### Amp SM matrix(%i) : (%i,%i) ##### \n ", - ind, sm->GetNrows(), sm->GetNcols()); + AliInfo(Form("\n #### Amp SM matrix(%i) : (%i,%i) ##### \n ", + ind, sm->GetNrows(), sm->GetNcols())); PrintMatrix(*sm); } +//____________________________________________________________________________ void AliEMCALTrigger::PrintMatrix(const TMatrixD &mat) const { - for(Int_t col=0; col sumTruInSM %f \n", i, smCur, sumTruInSM); + AliDebug(1,Form(" sm %i : smCur %f -> sumTruInSM %f \n", i, smCur, sumTruInSM)); return kFALSE; } } } Double_t sumJetMat = fAmpJetMatrix->Sum(); - if(pri || sumSM != sumTru || sumSM != sumJetMat) - printf(" sumSM %f : sumTru %f : sumJetMat %f \n", sumSM, sumTru, sumJetMat); - if(sumSM != sumTru || sumSM != sumJetMat) return kFALSE; + if(pri || TMath::Abs(sumSM-sumTru)>0.0001 || TMath::Abs(sumSM-sumJetMat) > 0.0001) + AliDebug(1,Form(" sumSM %f : sumTru %f : sumJetMat %f \n", sumSM, sumTru, sumJetMat)); + if(TMath::Abs(sumSM - sumTru)>0.0001 || TMath::Abs(sumSM-sumJetMat) > 0.0001) return kFALSE; else return kTRUE; } - +//____________________________________________________________________________ void AliEMCALTrigger::Browse(TBrowser* b) { + //Browse. if(&fInputs) b->Add(&fInputs); if(fAmpTrus) b->Add(fAmpTrus); if(fTimeRtrus) b->Add(fTimeRtrus);