+/*\r
+contact: Boris.Polishchuk@cern.ch\r
+reference run: /alice/data/2010/LHC10a_PHOS/000112189/raw/10000112189003.10.root\r
+run type: PEDESTAL\r
+DA type: MON \r
+number of events needed: 200\r
+input files: Mod0RCU0.data Mod0RCU1.data Mod0RCU2.data Mod0RCU3.data Mod1RCU0.data Mod1RCU1.data Mod1RCU2.data Mod1RCU3.data Mod2RCU0.data Mod2RCU1.data Mod2RCU2.data Mod2RCU3.data Mod3RCU0.data Mod3RCU1.data Mod3RCU2.data Mod3RCU3.data Mod4RCU0.data Mod4RCU1.data Mod4RCU2.data Mod4RCU3.data\r
+Output files: PHOS_PED.root\r
+*/\r
+\r
+\r
+#include "event.h"\r
+#include "monitor.h"\r
+\r
+extern "C" {\r
+#include "daqDA.h"\r
+}\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+\r
+#include <TSystem.h>\r
+#include <TROOT.h>\r
+#include <TPluginManager.h>\r
+\r
+#include <TStyle.h>\r
+#include <TFile.h>\r
+#include <TH1F.h>\r
+#include <TH2F.h>\r
+#include <TString.h>\r
+#include "AliRawReader.h"\r
+#include "AliCaloRawStreamV3.h"\r
+#include "AliLog.h"\r
+\r
+int main(int argc, char **argv) \r
+{\r
+ // Read raw data, decode it to samples,\r
+ // calculate pedestals from presamples, \r
+ // evaluate the signal amplitude as a maximum sample, \r
+ // and fill histograms with pedestals and amplitudes\r
+\r
+ gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",\r
+ "*",\r
+ "TStreamerInfo",\r
+ "RIO",\r
+ "TStreamerInfo()");\r
+ \r
+ AliLog::SetGlobalDebugLevel(0) ;\r
+ AliLog::SetGlobalLogLevel(AliLog::kFatal);\r
+\r
+ int status;\r
+ \r
+ if (argc!=2) {\r
+ printf("Wrong number of arguments\n");\r
+ return -1;\r
+ }\r
+\r
+ /* Retrieve mapping files from DAQ DB */ \r
+ const char* mapFiles[20] = {\r
+ "Mod0RCU0.data",\r
+ "Mod0RCU1.data",\r
+ "Mod0RCU2.data",\r
+ "Mod0RCU3.data",\r
+ "Mod1RCU0.data",\r
+ "Mod1RCU1.data",\r
+ "Mod1RCU2.data",\r
+ "Mod1RCU3.data",\r
+ "Mod2RCU0.data",\r
+ "Mod2RCU1.data",\r
+ "Mod2RCU2.data",\r
+ "Mod2RCU3.data",\r
+ "Mod3RCU0.data",\r
+ "Mod3RCU1.data",\r
+ "Mod3RCU2.data",\r
+ "Mod3RCU3.data",\r
+ "Mod4RCU0.data",\r
+ "Mod4RCU1.data",\r
+ "Mod4RCU2.data",\r
+ "Mod4RCU3.data"\r
+ };\r
+\r
+ for(Int_t iFile=0; iFile<20; iFile++) {\r
+ int failed = daqDA_DB_getFile(mapFiles[iFile], mapFiles[iFile]);\r
+ if(failed) { \r
+ printf("Cannot retrieve file %s from DAQ DB. Exit.\n",mapFiles[iFile]);\r
+ return -1;\r
+ }\r
+ }\r
+ \r
+ /* Open mapping files */\r
+ AliAltroMapping *mapping[20];\r
+ TString path = "./";\r
+\r
+ path += "Mod";\r
+ TString path2;\r
+ TString path3;\r
+ Int_t iMap = 0;\r
+\r
+ for(Int_t iMod = 0; iMod < 5; iMod++) {\r
+ path2 = path;\r
+ path2 += iMod;\r
+ path2 += "RCU";\r
+\r
+ for(Int_t iRCU=0; iRCU<4; iRCU++) {\r
+ path3 = path2;\r
+ path3 += iRCU;\r
+ path3 += ".data";\r
+ mapping[iMap] = new AliCaloAltroMapping(path3.Data());\r
+ iMap++;\r
+ }\r
+ }\r
+ \r
+ /* define data source : this is argument 1 */ \r
+ status=monitorSetDataSource( argv[1] );\r
+ if (status!=0) {\r
+ printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));\r
+ return -1;\r
+ }\r
+ \r
+ /* declare monitoring program */\r
+ status=monitorDeclareMp( __FILE__ );\r
+ if (status!=0) {\r
+ printf("monitorDeclareMp() failed : %s\n",monitorDecodeError(status));\r
+ return -1;\r
+ }\r
+ \r
+ /* define wait event timeout - 1s max */\r
+ monitorSetNowait();\r
+ monitorSetNoWaitNetworkTimeout(1000);\r
+ \r
+ /* init some counters */\r
+ int nevents_physics=0;\r
+ int nevents_total=0;\r
+\r
+ AliRawReader * reader = NULL;\r
+ AliCaloRawStreamV3* stream = NULL;\r
+ \r
+ TString baseNamePed ="hPed";\r
+ TString baseTitlePed="Ped in cell (";\r
+ const char* sgain[3]={"LG","HG", "TRU"};\r
+\r
+ const Int_t caloFlagMax=3,modMax=5,cellXMax=64,cellZMax=56;\r
+ TH1F *hPed[5][3][64][56] = {};\r
+\r
+ TH1F *hPedHiMean1m2 = new TH1F("hPedHiMean1m2","Mean pedestals in module 2, high gain" ,100,0.,100.);\r
+ TH1F *hPedHiRMS1m2 = new TH1F("hPedHiRMS1m2" ,"RMS pedestals in module 2, high gain" ,100,0.,50.);\r
+ TH1F *hPedLoMean1m2 = new TH1F("hPedLoMean1m2","Mean pedestals in module 2, low gain" ,100,0.,100.);\r
+ TH1F *hPedLoRMS1m2 = new TH1F("hPedLoRMS1m2" ,"RMS pedestals in module 2, low gain" ,100,0.,50.);\r
+ TH1F *hPedTRUMean1m2 = new TH1F("hPedTRUMean1m2","Mean pedestals in module 2, TRU" ,1000,0.,1000.);\r
+ TH1F *hPedTRURMS1m2 = new TH1F("hPedTRURMS1m2" ,"RMS pedestals in module 2, TRU" ,100,0.,50.);\r
+\r
+ TH1F *hPedHiMean1m3 = new TH1F("hPedHiMean1m3","Mean pedestals in module 3, high gain" ,100,0.,100.);\r
+ TH1F *hPedHiRMS1m3 = new TH1F("hPedHiRMS1m3" ,"RMS pedestals in module 3, high gain" ,100,0.,50.);\r
+ TH1F *hPedLoMean1m3 = new TH1F("hPedLoMean1m3","Mean pedestals in module 3, low gain" ,100,0.,100.);\r
+ TH1F *hPedLoRMS1m3 = new TH1F("hPedLoRMS1m3" ,"RMS pedestals in module 3, low gain" ,100,0.,50.);\r
+ TH1F *hPedTRUMean1m3 = new TH1F("hPedTRUMean1m3","Mean pedestals in module 3, TRU" ,1000,0.,1000.);\r
+ TH1F *hPedTRURMS1m3 = new TH1F("hPedTRURMS1m3" ,"RMS pedestals in module 3, TRU" ,100,0.,50.);\r
+\r
+ TH1F *hPedHiMean1m4 = new TH1F("hPedHiMean1m4","Mean pedestals in module 4, high gain" ,100,0.,100.);\r
+ TH1F *hPedHiRMS1m4 = new TH1F("hPedHiRMS1m4" ,"RMS pedestals in module 4, high gain" ,100,0.,50.);\r
+ TH1F *hPedLoMean1m4 = new TH1F("hPedLoMean1m4","Mean pedestals in module 4, low gain" ,100,0.,100.);\r
+ TH1F *hPedLoRMS1m4 = new TH1F("hPedLoRMS1m4" ,"RMS pedestals in module 4, low gain" ,100,0.,50.);\r
+ TH1F *hPedTRUMean1m4 = new TH1F("hPedTRUMean1m4","Mean pedestals in module 4, TRU" ,1000,0.,1000.);\r
+ TH1F *hPedTRURMS1m4 = new TH1F("hPedTRURMS1m4" ,"RMS pedestals in module 4, TRU" ,100,0.,50.);\r
+\r
+ hPedHiMean1m2->Sumw2();\r
+ hPedHiRMS1m2 ->Sumw2();\r
+ hPedLoMean1m2->Sumw2();\r
+ hPedLoRMS1m2 ->Sumw2();\r
+ hPedTRUMean1m2->Sumw2();\r
+ hPedTRURMS1m2 ->Sumw2();\r
+ hPedHiMean1m3->Sumw2();\r
+ hPedHiRMS1m3 ->Sumw2();\r
+ hPedLoMean1m3->Sumw2();\r
+ hPedLoRMS1m3 ->Sumw2();\r
+ hPedTRUMean1m3->Sumw2();\r
+ hPedTRURMS1m3 ->Sumw2();\r
+ hPedHiMean1m4->Sumw2();\r
+ hPedHiRMS1m4 ->Sumw2();\r
+ hPedLoMean1m4->Sumw2();\r
+ hPedLoRMS1m4 ->Sumw2();\r
+ hPedTRUMean1m4->Sumw2();\r
+ hPedTRURMS1m4 ->Sumw2();\r
+\r
+ TH2F *hPedHiMeanm2 = new TH2F("hPedHiMeanm2","Mean pedestals in module 2, high gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedHiRMSm2 = new TH2F("hPedHiRMSm2" ,"R.M.S. of pedestals in module 2, high gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedHiNumm2 = new TH2F("hPedHiNumm2" ,"Number of pedestals in module 2, high gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedLoMeanm2 = new TH2F("hPedLoMeanm2","Mean pedestals in module 2, low gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedLoRMSm2 = new TH2F("hPedLoRMSm2" ,"R.M.S. of pedestals in module 2, low gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedLoNumm2 = new TH2F("hPedLoNumm2" ,"Number of pedestals in module 2, low gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+\r
+ TH2F *hPedHiMeanm3 = new TH2F("hPedHiMeanm3","Mean pedestals in module 3, high gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedHiRMSm3 = new TH2F("hPedHiRMSm3" ,"R.M.S. of pedestals in module 3, high gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedHiNumm3 = new TH2F("hPedHiNumm3" ,"Number of pedestals in module 3, high gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedLoMeanm3 = new TH2F("hPedLoMeanm3","Mean pedestals in module 3, low gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedLoRMSm3 = new TH2F("hPedLoRMSm3" ,"R.M.S. of pedestals in module 3, low gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedLoNumm3 = new TH2F("hPedLoNumm3" ,"Number of pedestals in module 3, low gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+\r
+ TH2F *hPedHiMeanm4 = new TH2F("hPedHiMeanm4","Mean pedestals in module 4, high gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedHiRMSm4 = new TH2F("hPedHiRMSm4" ,"R.M.S. of pedestals in module 4, high gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedHiNumm4 = new TH2F("hPedHiNumm4" ,"Number of pedestals in module 4, high gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedLoMeanm4 = new TH2F("hPedLoMeanm4","Mean pedestals in module 4, low gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedLoRMSm4 = new TH2F("hPedLoRMSm4" ,"R.M.S. of pedestals in module 4, low gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+ TH2F *hPedLoNumm4 = new TH2F("hPedLoNumm4" ,"Number of pedestals in module 4, low gain",\r
+ cellXMax,0.,cellXMax, cellZMax,0.,cellZMax);\r
+\r
+ TH1I *hNBunches = new TH1I("hNBunches","Number of bunches",10,0,10);\r
+ TH2I *hHWaddr = new TH2I("hHWaddr","DDL is vs HW addr",216,0,216,4096,0,4096);\r
+ TH1I *hModule = new TH1I("hModule" ,"Module number", 5,0.,5);\r
+\r
+ Int_t runNum=0;\r
+ Int_t module,cellX,cellZ,caloFlag;\r
+\r
+ /* main loop (infinite) */\r
+ for(;;) {\r
+ struct eventHeaderStruct *event;\r
+ eventTypeType eventT;\r
+ \r
+ /* check shutdown condition */\r
+ if (daqDA_checkShutdown()) {break;}\r
+ \r
+ /* get next event (blocking call until timeout) */\r
+ status=monitorGetEventDynamic((void **)&event);\r
+ if (status==MON_ERR_EOF) {\r
+ printf ("End of File detected\n");\r
+ break; /* end of monitoring file has been reached */\r
+ }\r
+ \r
+ if (status!=0) {\r
+ printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));\r
+ break;\r
+ }\r
+ \r
+ /* retry if got no event */\r
+ if (event==NULL) {\r
+ continue;\r
+ }\r
+\r
+ /* use event - here, just write event id to result file */\r
+ eventT=event->eventType;\r
+ \r
+ if (eventT==PHYSICS_EVENT) {\r
+\r
+ reader = new AliRawReaderDate((void*)event);\r
+ stream = new AliCaloRawStreamV3(reader,"PHOS",mapping);\r
+\r
+ while (reader->NextEvent()) {\r
+ runNum = reader->GetRunNumber();\r
+ while (stream->NextDDL()) {\r
+ while (stream->NextChannel()) {\r
+ module = stream->GetModule();\r
+ cellX = stream->GetCellX();\r
+ cellZ = stream->GetCellZ();\r
+ caloFlag = stream->GetCaloFlag();\r
+ if (caloFlag!=0 && caloFlag!=1) continue;\r
+\r
+ hHWaddr->Fill(stream->GetDDLNumber(),stream->GetHWAddress());\r
+ hModule->Fill(module);\r
+ if (!hPed[module][caloFlag][cellX][cellZ]) {\r
+ TString name = baseNamePed;\r
+ TString title = baseTitlePed;\r
+ name +="_g"; name +=caloFlag;\r
+ name +="_m"; name +=module;\r
+ name +="_x"; name +=cellX;\r
+ name +="_z"; name +=cellZ;\r
+\r
+ title +=module; title +=",";\r
+ title +=cellX; title +=",";\r
+ title +=cellZ; title +="), ";\r
+ title +=sgain[caloFlag];\r
+ \r
+ Int_t nx,xmin,xmax;\r
+ if (caloFlag==0 || caloFlag==1) {\r
+ nx=100;\r
+ xmin=0.;\r
+ xmax=100.;\r
+ }\r
+ else {\r
+ nx=1000;\r
+ xmin=0.;\r
+ xmax=1000.;\r
+ }\r
+ hPed[module][caloFlag][cellX][cellZ] = new TH1F(name,title,100,0.,100.);\r
+ hPed[module][caloFlag][cellX][cellZ]->Sumw2();\r
+ hPed[module][caloFlag][cellX][cellZ]->SetMarkerStyle(20);\r
+ hPed[module][caloFlag][cellX][cellZ]->SetOption("eph");\r
+ }\r
+\r
+ Int_t nBunches = 0;\r
+ while (stream->NextBunch()) {\r
+ nBunches++;\r
+ const UShort_t *sig = stream->GetSignals();\r
+ Int_t sigLength = stream->GetBunchLength();\r
+ for (Int_t i = 0; i < sigLength; i++) {\r
+ hPed[module][caloFlag][cellX][cellZ]->Fill(sig[i]);\r
+ }\r
+ }\r
+ hNBunches->Fill(nBunches);\r
+ } // end of NextChannel()\r
+\r
+ } // end of NextDDL()\r
+ } // end of nextEvent()\r
+ \r
+ // Fill 2-dim histograms for mean, rms and n pedestals\r
+ \r
+ for (Int_t mod=2; mod<=4; mod++) {\r
+ for (Int_t caloFlag=0; caloFlag<2; caloFlag++) {\r
+ for (Int_t cellX=0; cellX<cellXMax; cellX++) {\r
+ for (Int_t cellZ=0; cellZ<cellZMax; cellZ++) {\r
+ if (hPed[mod][caloFlag][cellX][cellZ] != 0) {\r
+ if (caloFlag == 0) {\r
+ if (mod==2) {\r
+ hPedLoMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedLoRMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS());\r
+ hPedLoMeanm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedLoRMSm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS());\r
+ hPedLoNumm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries());\r
+ }\r
+ else if (mod==3) {\r
+ hPedLoMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedLoRMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS());\r
+ hPedLoMeanm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedLoRMSm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS());\r
+ hPedLoNumm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries());\r
+ }\r
+ else if (mod==4) {\r
+ hPedLoMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedLoRMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS());\r
+ hPedLoMeanm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedLoRMSm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS());\r
+ hPedLoNumm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries());\r
+ }\r
+ }\r
+ else if (caloFlag == 1) {\r
+ if (mod==2) {\r
+ hPedHiMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedHiRMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );\r
+ hPedHiMeanm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedHiRMSm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS());\r
+ hPedHiNumm2 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries());\r
+ }\r
+ if (mod==3) {\r
+ hPedHiMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedHiRMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );\r
+ hPedHiMeanm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedHiRMSm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS());\r
+ hPedHiNumm3 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries());\r
+ }\r
+ if (mod==4) {\r
+ hPedHiMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedHiRMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS());\r
+ hPedHiMeanm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedHiRMSm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetRMS());\r
+ hPedHiNumm4 ->Fill( cellX, cellZ, hPed[mod][caloFlag][cellX][cellZ]->GetEntries());\r
+ }\r
+ }\r
+ else if (caloFlag == 2) {\r
+ if (mod==2) {\r
+ hPedTRUMean1m2->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedTRURMS1m2 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );\r
+ }\r
+ if (mod==3) {\r
+ hPedTRUMean1m3->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedTRURMS1m3 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );\r
+ }\r
+ if (mod==4) {\r
+ hPedTRUMean1m4->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetMean());\r
+ hPedTRURMS1m4 ->Fill( hPed[mod][caloFlag][cellX][cellZ]->GetRMS() );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ \r
+ delete rawReader; \r
+ delete stream;\r
+ nevents_physics++;\r
+ } // end of if (eventT==PHYSICS_EVENT)\r
+ \r
+ nevents_total++;\r
+ \r
+ /* free resources */\r
+ free(event);\r
+ \r
+ /* exit when last event received, no need to wait for TERM signal */\r
+ if (eventT==END_OF_RUN) {\r
+ printf("EOR event detected\n");\r
+ break;\r
+ }\r
+\r
+ } // end of inf. loop over events\r
+ \r
+ for(Int_t i = 0; i < 20; i++) delete mapping[i];\r
+ \r
+ // Write existing histograms to a root file\r
+ \r
+ TString fileName = "PHOS_PED.root";\r
+ TFile *file = new TFile(fileName,"RECREATE");\r
+ \r
+ for (Int_t mod=2; mod<=3; mod++) {\r
+ for (Int_t caloFlag=0; caloFlag<caloFlagMax; caloFlag++) {\r
+ for (Int_t mod=0; mod<modMax; mod++) {\r
+ for (Int_t cellX=0; cellX<cellXMax; cellX++) {\r
+ for (Int_t cellZ=0; cellZ<cellZMax; cellZ++) {\r
+ if (hPed[mod][caloFlag][cellX][cellZ] != 0)\r
+ hPed[mod][caloFlag][cellX][cellZ]->Write();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ \r
+ hPedHiMean1m2->Write();\r
+ hPedHiRMS1m2 ->Write();\r
+ hPedLoMean1m2->Write();\r
+ hPedLoRMS1m2 ->Write();\r
+ hPedHiMeanm2 ->Write();\r
+ hPedHiRMSm2 ->Write();\r
+ hPedHiNumm2 ->Write();\r
+ hPedLoMeanm2 ->Write();\r
+ hPedLoRMSm2 ->Write();\r
+ hPedLoNumm2 ->Write();\r
+ hPedTRUMean1m2->Write();\r
+ hPedTRURMS1m2 ->Write();\r
+ \r
+ hPedHiMean1m3->Write();\r
+ hPedHiRMS1m3 ->Write();\r
+ hPedLoMean1m3->Write();\r
+ hPedLoRMS1m3 ->Write();\r
+ hPedHiMeanm3 ->Write();\r
+ hPedHiRMSm3 ->Write();\r
+ hPedHiNumm3 ->Write();\r
+ hPedLoMeanm3 ->Write();\r
+ hPedLoRMSm3 ->Write();\r
+ hPedLoNumm3 ->Write();\r
+ hPedTRUMean1m3->Write();\r
+ hPedTRURMS1m3 ->Write();\r
+\r
+ hPedHiMean1m4->Write();\r
+ hPedHiRMS1m4 ->Write();\r
+ hPedLoMean1m4->Write();\r
+ hPedLoRMS1m4 ->Write();\r
+ hPedHiMeanm4 ->Write();\r
+ hPedHiRMSm4 ->Write();\r
+ hPedHiNumm4 ->Write();\r
+ hPedLoMeanm4 ->Write();\r
+ hPedLoRMSm4 ->Write();\r
+ hPedLoNumm4 ->Write();\r
+ hPedTRUMean1m4->Write();\r
+ hPedTRURMS1m4 ->Write();\r
+\r
+ hNBunches ->Write();\r
+ hHWaddr ->Write();\r
+ hModule ->Write();\r
+ \r
+ file->Close();\r
+ \r
+ /* Store output files to the File Exchange Server */\r
+ daqDA_FES_storeFile(fileName.Data(),"PED");\r
+ \r
+ printf("%d physics events of %d total processed.\n",nevents_physics,nevents_total);\r
+ return status;\r
+}\r