fLEDRefs(sig.GetLEDRefs()),
fModules(sig.GetModules()),
fCaloString(sig.GetCaloString()),
- fMapping(NULL), //! note that we are not copying the map info
+ fMapping(), //! note that we are not copying the map info
fRunNumber(sig.GetRunNumber()),
fStartTime(sig.GetStartTime()),
fAmpCut(sig.GetAmpCut()),
fSecInAverage(sig.GetSecInAverage()),
fNEvents(sig.GetNEvents()),
fNAcceptedEvents(sig.GetNAcceptedEvents()),
- fTreeAmpVsTime(NULL),
- fTreeAvgAmpVsTime(NULL),
- fTreeLEDAmpVsTime(NULL),
- fTreeLEDAvgAmpVsTime(NULL)
+ fTreeAmpVsTime(),
+ fTreeAvgAmpVsTime(),
+ fTreeLEDAmpVsTime(),
+ fTreeLEDAvgAmpVsTime()
{
// also the TTree contents
AddInfo(&sig);
+ for (Int_t i = 0; i<2*fgkMaxTowers; i++) {
+ if(i < fgkMaxTowers){
+ fNHighGain[i] = sig.fNHighGain[i];
+ fNLowGain[i] = sig.fNLowGain[i];
+ }
+ fNRef[i] = sig.fNRef[i];
+ }
+
+
+
}
// assignment operator; use copy ctor to make life easy..
//1: set up TProfiles for the towers that had data
TProfile * profile[fgkMaxTowers*2]; // *2 is since we include both high and low gains
memset(profile, 0, sizeof(profile));
-
- char name[200]; // for profile id and title
+ const Int_t buffersize = 200;
+ char name[buffersize]; // for profile id and title
int iTowerNum = 0;
for (int i = 0; i<fModules; i++) {
// high gain
if (fNHighGain[iTowerNum] > 0) {
fChannelNum = GetChannelNum(i, ic, ir, 1);
- sprintf(name, "profileChan%d", fChannelNum);
+ snprintf(name,buffersize,"profileChan%d", fChannelNum);
profile[fChannelNum] = new TProfile(name, name, numProfBins, timeMin, timeMax, "s");
}
// same for low gain
if (fNLowGain[iTowerNum] > 0) {
fChannelNum = GetChannelNum(i, ic, ir, 0);
- sprintf(name, "profileChan%d", fChannelNum);
+ snprintf(name,buffersize,"profileChan%d", fChannelNum);
profile[fChannelNum] = new TProfile(name, name, numProfBins, timeMin, timeMax, "s");
}
fAlgo(Algo::kNONE)
{
//Comment
- sprintf(fName, "%s", name);
- sprintf(fNameShort, "%s", nameshort);
+ snprintf(fName, 256,"%s", name);
+ snprintf(fNameShort,256, "%s", nameshort);
for(int i=0; i < MAXSAMPLES; i++ )
{
{
//Read in the Peak finder vecors from ASCI files
fIsInitialized= true;
-
+ const Int_t buffersize = 256;
for(int i = 0; i < PF::MAXSTART ; i++)
+ {
+ for( int j=0; j < PF::SAMPLERANGE; j++)
{
- for( int j=0; j < PF::SAMPLERANGE; j++)
- {
- char filenameCoarse[256];
- char filename[256];
- int n = j+fNsampleCut;
- double start = (double)i+0;
-
- sprintf(filename, "%s/EMCAL/vectors-emcal/start%.1fN%dtau0.235fs10dt1.0.txt", getenv("ALICE_ROOT"), start, n);
- sprintf(filenameCoarse, "%s/EMCAL/vectors-emcal/start%.1fN%dtau0.235fs10dt3.0.txt", getenv("ALICE_ROOT"), start, n);
-
- FILE *fp = fopen(filename, "r");
- FILE *fpc = fopen(filenameCoarse, "r");
-
- if( fp == 0 )
+ char filenameCoarse[buffersize];
+ char filename[buffersize];
+ int n = j+fNsampleCut;
+ double start = (double)i+0;
+
+ snprintf(filename, buffersize, "%s/EMCAL/vectors-emcal/start%.1fN%dtau0.235fs10dt1.0.txt", getenv("ALICE_ROOT"), start, n);
+ snprintf(filenameCoarse, buffersize, "%s/EMCAL/vectors-emcal/start%.1fN%dtau0.235fs10dt3.0.txt", getenv("ALICE_ROOT"), start, n);
+
+ FILE *fp = fopen(filename, "r");
+ FILE *fpc = fopen(filenameCoarse, "r");
+
+ if( fp == 0 )
{
AliFatal( Form( "could not open file: %s", filename ) );
}
- if(fpc == 0)
+ else if(fpc == 0)
{
AliFatal( Form( "could not open file: %s", filenameCoarse ) );
}
- else
+ else
{
for(int m = 0; m < n ; m++ )
- {
- fscanf(fp, "%lf\t", &fPFAmpVectors[i][j][m] );
- fscanf(fpc, "%lf\t", &fPFAmpVectorsCoarse[i][j][m] );
- }
+ {
+ fscanf(fp, "%lf\t", &fPFAmpVectors[i][j][m] );
+ fscanf(fpc, "%lf\t", &fPFAmpVectorsCoarse[i][j][m] );
+ }
fscanf(fp, "\n" );
fscanf(fpc, "\n" );
for(int m = 0; m < n ; m++ )
- {
- fscanf(fp, "%lf\t", &fPFTofVectors[i][j][m] );
- fscanf(fpc, "%lf\t", &fPFTofVectorsCoarse[i][j][m] );
- }
+ {
+ fscanf(fp, "%lf\t", &fPFTofVectors[i][j][m] );
+ fscanf(fpc, "%lf\t", &fPFTofVectorsCoarse[i][j][m] );
+ }
fPeakFinderVectors->SetVector( i, j, fPFAmpVectors[i][j], fPFTofVectors[i][j],
- fPFAmpVectorsCoarse[i][j], fPFTofVectorsCoarse[i][j] );
-
+ fPFAmpVectorsCoarse[i][j], fPFTofVectorsCoarse[i][j] );
+
fclose (fp);
fclose (fpc);
}
- }
}
+ }
}
// Attach the Clusterizer task to the list of EMCAL tasks
AliRunLoader *rl = AliRunLoader::Instance();
- if (rl->GetAliRun() && dynamic_cast<AliEMCAL*>(rl->GetAliRun()->GetDetector("EMCAL")))
- fGeom = dynamic_cast<AliEMCAL*>(rl->GetAliRun()->GetDetector("EMCAL"))->GetGeometry();
- else
+ if (rl->GetAliRun()){
+ AliEMCAL* emcal = dynamic_cast<AliEMCAL*>(rl->GetAliRun()->GetDetector("EMCAL"));
+ if(emcal)fGeom = emcal->GetGeometry();
+ }
+
+ if(!fGeom){
fGeom = AliEMCALGeometry::GetInstance(AliEMCALGeometry::GetDefaultGeometryName());
+ }
AliDebug(1,Form("geom %p",fGeom));
// but should never be called by the outside world
fParSM[0]=0; fParSM[1]=0; fParSM[2]=0;
fEnvelop[0] = 0; fEnvelop[1] = 0; fEnvelop[2] = 0;
+ for(Int_t i = 0; i < 6; i++) fkAdditionalOpts[i] = "";
AliDebug(2, "AliEMCALEMCGeometry : default ctor ");
}
fEnvelop[0] = geom.fEnvelop[0];
fEnvelop[1] = geom.fEnvelop[1];
fEnvelop[2] = geom.fEnvelop[2];
+ for(Int_t i = 0; i < 6; i++) fkAdditionalOpts[i] = geom.fkAdditionalOpts[i];
}
UInt_t dcsResult=0;
if (errorHandling == "OFF" ) {
if (!dcsAliasMap) dcsResult = kReturnCodeNoEntries;
- if (dcsAliasMap->GetEntries() == 0 ) dcsResult = kReturnCodeNoEntries;
+ else if (dcsAliasMap->GetEntries() == 0 ) dcsResult = kReturnCodeNoEntries;
status = new TParameter<int>("dcsResult",dcsResult);
resultArray->Add(status);
}
if ( source == "HLT") pedestalSource[0] = AliShuttleInterface::kHLT;
if (!GetHLTStatus()) pedestalSource[0] = AliShuttleInterface::kDAQ;
if (source == "HLTDAQ" ) {
- numSources=2;
- pedestalSource[0] = AliShuttleInterface::kHLT;
- pedestalSource[1] = AliShuttleInterface::kDAQ;
+ numSources=2;
+ pedestalSource[0] = AliShuttleInterface::kHLT;
+ pedestalSource[1] = AliShuttleInterface::kDAQ;
}
if (source == "DAQHLT" ) numSources=2;
UInt_t pedestalResult=0;
for (Int_t i=0; i<numSources; i++ ) {
- pedestalResult = ExtractPedestals(pedestalSource[i]);
- if ( pedestalResult == 0 ) break;
+ pedestalResult = ExtractPedestals(pedestalSource[i]);
+ if ( pedestalResult == 0 ) break;
}
result += pedestalResult;
status = new TParameter<int>("pedestalResult",pedestalResult);
if ( source == "HLT") signalSource[0] = AliShuttleInterface::kHLT;
if (!GetHLTStatus()) signalSource[0] = AliShuttleInterface::kDAQ;
if (source == "HLTDAQ" ) {
- numSources=2;
- signalSource[0] = AliShuttleInterface::kHLT;
- signalSource[1] = AliShuttleInterface::kDAQ;
+ numSources=2;
+ signalSource[0] = AliShuttleInterface::kHLT;
+ signalSource[1] = AliShuttleInterface::kDAQ;
}
if (source == "DAQHLT" ) numSources=2;
UInt_t signalResult=0;
for (Int_t i=0; i<numSources; i++ ) {
- signalResult = ExtractSignal(signalSource[i]);
- if ( signalResult == 0 ) break;
+ signalResult = ExtractSignal(signalSource[i]);
+ if ( signalResult == 0 ) break;
}
result += signalResult;
status = new TParameter<int>("signalResult",signalResult);
for(Int_t iDigit=0; iDigit<digits->GetEntries(); iDigit++) {
digit = dynamic_cast<AliEMCALDigit *>(digits->At(fDigitsList[iDigit])) ;
-
- dist = deff;
- //fGeomPtr->RelPosCellInSModule(digit->GetId(), idMax, dist, xyzi[0], xyzi[1], xyzi[2]);
- fGeomPtr->RelPosCellInSModule(digit->GetId(), dist, xyzi[0], xyzi[1], xyzi[2]);
-
- if(logWeight > 0.0) w = TMath::Max( 0., logWeight + TMath::Log( fEnergyList[iDigit] / fAmp ));
- else w = fEnergyList[iDigit]; // just energy
-
- if(w>0.0) {
- wtot += w ;
- nstat++;
- for(i=0; i<3; i++ ) {
- clXYZ[i] += (w*xyzi[i]);
- clRmsXYZ[i] += (w*xyzi[i]*xyzi[i]);
+ if(digit){
+ dist = deff;
+ //fGeomPtr->RelPosCellInSModule(digit->GetId(), idMax, dist, xyzi[0], xyzi[1], xyzi[2]);
+ fGeomPtr->RelPosCellInSModule(digit->GetId(), dist, xyzi[0], xyzi[1], xyzi[2]);
+
+ if(logWeight > 0.0) w = TMath::Max( 0., logWeight + TMath::Log( fEnergyList[iDigit] / fAmp ));
+ else w = fEnergyList[iDigit]; // just energy
+
+ if(w>0.0) {
+ wtot += w ;
+ nstat++;
+ for(i=0; i<3; i++ ) {
+ clXYZ[i] += (w*xyzi[i]);
+ clRmsXYZ[i] += (w*xyzi[i]*xyzi[i]);
+ }
}
- }
- }
+ }else AliError("Digit null");
+ }//loop
// cout << " wtot " << wtot << endl;
if ( wtot > 0 ) {
// xRMS = TMath::Sqrt(x2m - xMean*xMean);
for(Int_t iDigit=0; iDigit<digits->GetEntries(); iDigit++) {
digit = dynamic_cast<AliEMCALDigit *>(digits->At(iDigit));
-
- //geo->RelPosCellInSModule(digit->GetId(), idMax, deff, xyzi[0], xyzi[1], xyzi[2]);
- geo->RelPosCellInSModule(digit->GetId(), deff, xyzi[0], xyzi[1], xyzi[2]);
-
- if(w0 > 0.0) w = TMath::Max( 0., w0 + TMath::Log(ed[iDigit] / esum));
- else w = ed[iDigit]; // just energy
-
- if(w>0.0) {
- wtot += w ;
- nstat++;
- for(i=0; i<3; i++ ) {
- clXYZ[i] += (w*xyzi[i]);
+ if(digit){
+ //geo->RelPosCellInSModule(digit->GetId(), idMax, deff, xyzi[0], xyzi[1], xyzi[2]);
+ geo->RelPosCellInSModule(digit->GetId(), deff, xyzi[0], xyzi[1], xyzi[2]);
+
+ if(w0 > 0.0) w = TMath::Max( 0., w0 + TMath::Log(ed[iDigit] / esum));
+ else w = ed[iDigit]; // just energy
+
+ if(w>0.0) {
+ wtot += w ;
+ nstat++;
+ for(i=0; i<3; i++ ) {
+ clXYZ[i] += (w*xyzi[i]);
+ }
}
- }
- }
+ }else AliError("Digit null");
+ }//loop
// cout << " wtot " << wtot << endl;
if (wtot > 0) {
for(i=0; i<3; i++ ) {
AliCDBEntry *entry =
AliCDBManager::Instance()->Get("EMCAL/Config/Temperature",run);
- TTree *tree = (TTree*) entry->GetObject();
- fSensors = AliEMCALSensorTemp::ReadTree(tree);
- fSensors->BypassStreamer(kFALSE);
+ if(entry){
+ TTree *tree = (TTree*) entry->GetObject();
+ fSensors = AliEMCALSensorTemp::ReadTree(tree);
+ fSensors->BypassStreamer(kFALSE);
+ }
+ else AliFatal("CDB entry null!");
}
//_____________________________________________________________________________
AliEMCALSensorTempArray::AliEMCALSensorTempArray(UInt_t startTime, UInt_t endTime,
}
if(iSM>9) rowborder /= 2; // half size in phi
+ if(!ampmatrixes){
+ 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);
*/
//____________________________________________________________________________
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)
Int_t nTRU = fGeom->GetNTRU();
static int keyPrint = 0;
if(keyPrint) AliDebug(2,Form("MakeSlidingTowers : nTRU %i nModulesPhi %i nModulesEta %i ",
- nTRU, nModulesPhi, nModulesEta ));
-
+ nTRU, nModulesPhi, nModulesEta ));
+
Float_t amp2 = 0 ;
Float_t ampn = 0 ;
for(Int_t i = 0; i < 4; i++){
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<TMatrixD *>(amptrus->At(itru)) ;
TMatrixD * timeRtru = dynamic_cast<TMatrixD *>(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 <Int_t> (ampmax2(1,mtru));
Int_t col2 = static_cast <Int_t> (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 <Int_t> (ampmaxn(1,mtru));
Int_t coln = static_cast <Int_t> (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) AliDebug(2,Form(" : MakeSlidingTowers -OUt \n"));
for(Int_t idig = 0 ; idig < digits->GetEntriesFast() ; idig++){
dig = dynamic_cast<AliEMCALDigit *>(digits->At(idig)) ;
- 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<TMatrixD *>(ampmatrix->At(itru)) ;
- TMatrixD * timeRtrus = dynamic_cast<TMatrixD *>(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<TMatrixD *>(ampmatrix->At(itru)) ;
+ TMatrixD * timeRtrus = dynamic_cast<TMatrixD *>(timeRmatrix->At(itru)) ;
+
+ if(!amptrus || timeRtrus){
+ AliError("Could not recover the TRU matrix with amplitudes or times");
+ continue;
+ }
+ //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<TMatrixD *>(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<TMatrixD *>(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("<I> AliEMCALTrigger::FillTRU() is ended \n");
}
//Load EMCAL Geometry
- if (runLoader && runLoader->GetAliRun() && runLoader->GetAliRun()->GetDetector("EMCAL"))
- fGeom = dynamic_cast<AliEMCAL*>(runLoader->GetAliRun()->GetDetector("EMCAL"))->GetGeometry();
-
- if (fGeom == 0)
+ if (runLoader && runLoader->GetAliRun()){
+ AliEMCAL* emcal = dynamic_cast<AliEMCAL*>(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
Int_t nEtaSM=0, nPhiSM=0;
for(Int_t iSM=0; iSM<ampmatrixsmod->GetEntries(); iSM++) {
TMatrixD * ampsmods = dynamic_cast<TMatrixD *>(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));
fPatchSize( new TVector2() ),
fPatches( new TClonesArray("AliEMCALTriggerPatch",10) )
{
- fRegion = (int**)malloc( (int)fRegionSize->X() * sizeof( int* ) );
-
- if (!fRegion) printf("Error: malloc could not allocate %d bytes for fRegion\n",
- int(fRegionSize->X() * sizeof( int* )));
-
- fMap = (int**)malloc( (int)fRegionSize->X() * sizeof( int* ) );
-
- if (!fMap) printf("Error: malloc could not allocate %d bytes for fMap\n",
- int(fRegionSize->X() * sizeof( int* )));
-
- for (Int_t i=0;i<fRegionSize->X();i++)
- {
+ fRegion = (int**)malloc( (int)fRegionSize->X() * sizeof( int* ) );
+
+ if (!fRegion) printf("Error: malloc could not allocate %d bytes for fRegion\n",
+ int(fRegionSize->X() * sizeof( int* )));
+
+ fMap = (int**)malloc( (int)fRegionSize->X() * sizeof( int* ) );
+
+ if (!fMap) printf("Error: malloc could not allocate %d bytes for fMap\n",
+ int(fRegionSize->X() * sizeof( int* )));
+
+ for (Int_t i=0;i<fRegionSize->X();i++)
+ {
+ if(fRegion){
fRegion[i] = (int*)malloc( (int)fRegionSize->Y() * sizeof( int ) );
-
+
if (!fRegion[i]) printf("Error: malloc could not allocate %d bytes for fRegion[%d]\n",
- i,int(fRegionSize->Y() * sizeof( int )));
-
- fMap[i] = (int*)malloc( (int)fRegionSize->Y() * sizeof( int ) );
-
- if (!fMap[i]) printf("Error: malloc could not allocate %d bytes for fMap[%d]\n",
- i,int(fRegionSize->Y() * sizeof( int )));
- }
-
+ i,int(fRegionSize->Y() * sizeof( int )));
+ }
+ if(fMap){
+ fMap[i] = (int*)malloc( (int)fRegionSize->Y() * sizeof( int ) );
+
+ if (!fMap[i]) printf("Error: malloc could not allocate %d bytes for fMap[%d]\n",
+ i,int(fRegionSize->Y() * sizeof( int )));
+ }
+ }
+
// Initialize region matrix
ZeroRegion();
-
+ if(fMap){
for (int i=0; i<fRegionSize->X(); ++i)
for (int j=0; j<fRegionSize->Y(); ++j) fMap[i][j] = 0;
+ }
}
//_______________
//
//
const AliEMCALTriggerDCSConfig* dcsConf = dynamic_cast<const AliEMCALTriggerDCSConfig*>(GetCachedCDBObject(kIDTriggerConfig));
-
- AliEMCALTriggerSTUDCSConfig* stuConf = dcsConf->GetSTUDCSConfig();
-
- Int_t fw = stuConf->GetFw();
-
- switch ( fw )
- {
- case 2223:
- ssg[0] = 1;
- ssg[1] = 1;
- spg[0] = 2;
- spg[1] = 2;
-
- ssj[0] = 4;
- ssj[1] = 4;
- spj[0] = 2;
- spj[1] = 2;
- break;
- default:
- AliError("Firmware version do not match!");
- break;
- }
+ if(dcsConf){
+ AliEMCALTriggerSTUDCSConfig* stuConf = dcsConf->GetSTUDCSConfig();
+ if(stuConf){
+ Int_t fw = stuConf->GetFw();
+
+ switch ( fw )
+ {
+ case 2223:
+ ssg[0] = 1;
+ ssg[1] = 1;
+ spg[0] = 2;
+ spg[1] = 2;
+
+ ssj[0] = 4;
+ ssj[1] = 4;
+ spj[0] = 2;
+ spj[1] = 2;
+ break;
+ default:
+ AliError("Firmware version do not match!");
+ break;
+ }
+ }
+ else {
+ AliError("STUDCSConfig is null!");
+ }
+ }
+ else {
+ AliError("DCSConfig is null!");
+ }
+
}
//_____________________________________________________________________________
AliEMCALGeometry* geom = 0x0;
AliRunLoader *rl = AliRunLoader::Instance();
- if (rl->GetAliRun() && rl->GetAliRun()->GetDetector("EMCAL"))
- geom = dynamic_cast<AliEMCAL*>(rl->GetAliRun()->GetDetector("EMCAL"))->GetGeometry();
- else
- geom = AliEMCALGeometry::GetInstance(AliEMCALGeometry::GetDefaultGeometryName());
-
- if (!geom) AliError("Cannot access geometry!");
+ if (rl->GetAliRun() && rl->GetAliRun()->GetDetector("EMCAL")){
+ AliEMCAL* emcal = dynamic_cast<AliEMCAL*>(rl->GetAliRun()->GetDetector("EMCAL"));
+ if(emcal)geom = emcal->GetGeometry();
+ }
+
+ if(!geom) geom = AliEMCALGeometry::GetInstance(AliEMCALGeometry::GetDefaultGeometryName());
+
+ if(!geom) AliError("Cannot access geometry!");
// digits->Sort();
fDCSConfig(0x0),
fTriggerData(0x0)
{
- // def ctor
-
- AliRunLoader* rl = AliRunLoader::Instance();
- if (rl && rl->GetAliRun() && dynamic_cast<AliEMCAL*>(rl->GetAliRun()->GetDetector("EMCAL")))
- fGeometry = dynamic_cast<AliEMCAL*>(rl->GetAliRun()->GetDetector("EMCAL"))->GetGeometry();
- else
- {
- AliDebug(1, Form("Using default geometry"));
- fGeometry = AliEMCALGeometry::GetInstance(AliEMCALGeometry::GetDefaultGeometryName());
- }
-
- fRawAnalyzer = new AliCaloRawAnalyzerFakeALTRO();
-
- fDCSConfig = AliEMCALTriggerDCSConfigDB::Instance();
-
- for (Int_t i=0; i<3072; i++) fRawDigitIndex[i] = -1;
+ // def ctor
+
+ AliRunLoader* rl = AliRunLoader::Instance();
+ if (rl && rl->GetAliRun()){
+ AliEMCAL * emcal = dynamic_cast<AliEMCAL*>(rl->GetAliRun()->GetDetector("EMCAL"));
+ if(emcal) fGeometry = emcal->GetGeometry();
+ }
+
+ if(!fGeometry)
+ {
+ AliDebug(1, Form("Using default geometry"));
+ fGeometry = AliEMCALGeometry::GetInstance(AliEMCALGeometry::GetDefaultGeometryName());
+ }
+
+ fRawAnalyzer = new AliCaloRawAnalyzerFakeALTRO();
+
+ fDCSConfig = AliEMCALTriggerDCSConfigDB::Instance();
+
+ for (Int_t i=0; i<3072; i++) fRawDigitIndex[i] = -1;
}
//_______________
{
AliError("Operation not allowed: STU won't be configured properly!");
}
-
- for (Int_t i=0; i<rSize->X(); i++)
- for (Int_t j=0; j<rSize->Y(); j++) v[i + ix][j + iy * 4] = M[i][j];
+
+ if(v){
+ for (Int_t i=0; i<rSize->X(); i++)
+ for (Int_t j=0; j<rSize->Y(); j++) v[i + ix][j + iy * 4] = M[i][j];
+ }
}
//_______________
//________________
void AliEMCALTriggerTRU::SetADC( Int_t channel, Int_t bin, Int_t sig )
{
- //
- if (channel>95) AliError("TRU has 96 ADC channels only!");
- fADC[channel][bin] = sig;
+ //Set ADC value
+ if (channel > 95 || bin > 255) {
+ AliError("TRU has 96 ADC channels and 256 bins only!");
+ }
+ else{
+ fADC[channel][bin] = sig;
+ }
}
//________________
fRawReader->Reset();
fRawReader->SelectEquipment(1, 1, 1);
+
+ for(Int_t i = 0 ; i < fgkNTDC; i++ ) fTDC[i] = 0 ;
+ for(Int_t i = 0 ; i < fgkNQDC; i++ ) fQDC[i] = 0 ;
+ for(Int_t i = 0 ; i < fgkNScalerCCUSB; i++ ) fScalerCCUSB[i] = 0;
+ for(Int_t i = 0 ; i < fgkNScalerLecroy; i++ ) fScalerLecroy[i] = 0;
}
Bool_t AliEMCALCCUSBRawStream::Next()