1 /**************************************************************************
2 * Copyright(c) 2006, ALICE Experiment at CERN, All rights reserved. *
4 * Authors: Boris Polichtchouk & Per Thomas Hille for the ALICE *
5 * offline/HLT Project. Contributors are mentioned in the code where *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
17 #include "AliHLTPHOSRcuCellEnergyDataStruct.h"
18 #include "AliHLTPHOSRcuHistogramProducer.h"
19 #include "AliHLTPHOSRcuHistogramProducerComponent.h"
20 #include "AliHLTPHOSRcuCellAccumulatedEnergyDataStruct.h"
21 #include "AliHLTPHOSSharedMemoryInterface.h"
22 #include "AliHLTPHOSValidCellDataStruct.h"
24 AliHLTPHOSRcuHistogramProducerComponent gAliHLTPHOSRcuHistogramProducerComponent;
25 /*************************************************************************
26 * Class AliHLTPHOSRcuHistogramProducerComponent accumulating histograms *
27 * with amplitudes per PHOS channel *
28 * It is intended to run at the HLT farm *
29 * and it fills the histograms with amplitudes per channel. *
30 * Usage example see in PHOS/macros/Shuttle/AliPHOSCalibHistoProducer.C *
31 **************************************************************************/
32 AliHLTPHOSRcuHistogramProducerComponent:: AliHLTPHOSRcuHistogramProducerComponent() : AliHLTPHOSRcuProcessor(),
33 fHistoWriteFrequency(100),
34 fRcuHistoProducerPtr(0),
38 fShmPtr = new AliHLTPHOSSharedMemoryInterface();
43 AliHLTPHOSRcuHistogramProducerComponent::~ AliHLTPHOSRcuHistogramProducerComponent()
50 AliHLTPHOSRcuHistogramProducerComponent::Deinit()
52 //See html documentation of base class
53 cout << "AliHLTPHOSRcuHistogramProducerComponent::Deinit()" << endl;
54 fRcuHistoProducerPtr->WriteAllHistograms("recreate");
60 AliHLTPHOSRcuHistogramProducerComponent::GetComponentID()
62 //See html documentation of base class
63 return "RcuHistogramProducer";
68 AliHLTPHOSRcuHistogramProducerComponent::GetInputDataTypes( vector<AliHLTComponentDataType>& list)
70 //See html documentation of base class
71 const AliHLTComponentDataType* pType=fgkInputDataTypes;
74 list.push_back(*pType);
80 AliHLTComponentDataType
81 AliHLTPHOSRcuHistogramProducerComponent::GetOutputDataType()
83 //See html documentation of base class
84 return AliHLTPHOSDefinitions::fgkCellEnergyDataType;
89 AliHLTPHOSRcuHistogramProducerComponent::GetOutputDataSize(unsigned long& constBase, double& inputMultiplier )
91 //See html documentation of base class
98 int AliHLTPHOSRcuHistogramProducerComponent::DoEvent( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
99 AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr,
100 AliHLTUInt32_t& size, vector<AliHLTComponentBlockData>& outputBlocks )
102 //See html documentation of base class
105 // trigData--; //shutting up the compiler, we dont use trigData now but will do in near future
107 AliHLTComponentTriggerData &trDta = trigData;
109 trDta.fDataSize--; //shutting up the compiler, we dont use trigData now but will do in near future
111 AliHLTPHOSValidCellDataStruct *currentChannel =0;
112 unsigned long ndx = 0;
116 const AliHLTComponentBlockData* iter = NULL;
117 AliHLTPHOSRcuCellEnergyDataStruct *cellDataPtr;
118 AliHLTUInt8_t* outBPtr;
120 for( ndx = 0; ndx < evtData.fBlockCnt; ndx++ )
123 if(iter->fDataType != AliHLTPHOSDefinitions::fgkCellEnergyDataType)
128 cellDataPtr = (AliHLTPHOSRcuCellEnergyDataStruct*)( iter->fPtr);
129 fShmPtr->SetMemory(cellDataPtr);
130 currentChannel = fShmPtr->NextChannel();
132 Int_t* tmpDataPtr = 0;
134 if(cellDataPtr->fHasRawData == true)
136 while(currentChannel != 0)
138 tmpDataPtr = fShmPtr->GetRawData(nSamples);
139 fRcuHistoProducerPtr->FillEnergy(currentChannel->fX, currentChannel->fZ, currentChannel->fGain, currentChannel->fEnergy);
140 fRcuHistoProducerPtr->FillLiveChannels(tmpDataPtr, nSamples, currentChannel->fX, currentChannel->fZ,currentChannel->fGain);
141 currentChannel = fShmPtr->NextChannel();
147 Logging(kHLTLogFatal, __FILE__ , IntToChar( __LINE__ ) , "AliHLTPHOSRcuHistogramProducerComponent::We are not pushing raw data, aborting");
153 fOutPtr = (AliHLTPHOSRcuCellAccumulatedEnergyDataStruct*)outBPtr;
154 const AliHLTPHOSRcuCellAccumulatedEnergyDataStruct &innPtr = fRcuHistoProducerPtr->GetCellAccumulatedEnergies();
155 fOutPtr->fModuleID = fModuleID;
156 fOutPtr->fRcuX = fRcuX;
157 fOutPtr->fRcuZ = fRcuZ;
159 for(int x=0; x < N_XCOLUMNS_RCU; x ++)
161 for(int z=0; z < N_ZROWS_RCU; z ++)
163 for(int gain =0; gain < N_GAINS; gain ++)
165 fOutPtr->fAccumulatedEnergies[x][z][gain] = innPtr.fAccumulatedEnergies[x][z][gain];
166 fOutPtr->fHits[x][z][gain] = innPtr.fHits[x][z][gain];
167 fOutPtr->fDeadChannelMap[x][z][gain] = innPtr.fDeadChannelMap[x][z][gain];
172 mysize += sizeof(AliHLTPHOSRcuCellAccumulatedEnergyDataStruct);
173 AliHLTComponentBlockData bd;
177 bd.fDataType = AliHLTPHOSDefinitions::fgkCellAccumulatedEnergyDataType;
178 bd.fSpecification = 0xFFFFFFFF;
179 outputBlocks.push_back( bd );
185 Logging( kHLTLogFatal, "HLT::AliHLTRcuHistogramProducerComponent::DoEvent", "Too much data",
186 "Data written over allowed buffer. Amount written: %lu, allowed amount: %lu."
193 if( (fPhosEventCount%fHistoWriteFrequency == 0) && ( fPhosEventCount != 0))
195 fRcuHistoProducerPtr->WriteAllHistograms("recreate");
202 AliHLTPHOSRcuHistogramProducerComponent::DoInit( int argc, const char** argv )
204 //See html documentation of base class
208 iResult = ScanArguments(argc, argv);
209 if(fIsSetEquippmentID == kFALSE)
211 Logging( kHLTLogFatal, "HLT::AliHLTPHOSRcuHistogramProducerComponent::DoInt( int argc, const char** argv )", "Missing argument",
212 "The argument equippmentID is not set: set it with a component argumet like this: -equippmentID <number>");
215 fRcuHistoProducerPtr = new AliHLTPHOSRcuHistogramProducer( fModuleID, fRcuX, fRcuZ);
222 AliHLTPHOSRcuHistogramProducerComponent::Spawn()
224 //See html documentation of base class
225 return new AliHLTPHOSRcuHistogramProducerComponent;