+
+AliLoader* AliACORDE::MakeLoader(const char* topfoldername)
+{
+
+ AliDebug(1,Form("Creating AliACORDELoader, Top folder is %s ",
+ topfoldername));
+ fLoader = new AliACORDELoader(GetName(),topfoldername);
+ return fLoader;
+}
+
+
+AliDigitizer* AliACORDE::CreateDigitizer(AliRunDigitizer* manager) const
+{
+ //
+ //
+ return new AliACORDEDigitizer(manager);
+}
+
+void AliACORDE::Digits2Raw()
+{
+ // Produce Raw data starting from digits
+ // 1. Get digits
+ // 2. From digits get an array with the state of the modules
+ // 3. Unload digits
+ // 4. Write raw data
+
+ // 1. Get digits
+
+ // 1.1 Get detector, load digits and set branch
+ AliACORDE* acorde = (AliACORDE*)gAlice->GetDetector("ACORDE");
+ fLoader->LoadDigits("READ");
+ TTree* treeD = fLoader->TreeD();
+ if (!treeD) {
+ Error("Digits2Raw", "no digits tree");
+ return;
+ }
+ TClonesArray *adigits = new TClonesArray ("AliACORDEdigit", 1000);
+ treeD->GetBranch("ACORDEdigit")->SetAddress(&adigits);
+ // 1.2 Get first entry (there is always only one)
+ acorde->ResetDigits();
+ treeD->GetEvent(0);
+
+ // 2. From digits get an array with the state of the modules
+ // 2.1 Define and initialize the array
+ Bool_t Modules[60];
+ for (Int_t i=0;i<60;i++) Modules[i]= kFALSE;
+ // 2.2 Loop over all digits
+ Int_t ndig = adigits->GetEntriesFast();
+ for (Int_t idig=0;idig<ndig;idig++) {
+ // 2.3 set the array entry for each digit
+ AliACORDEdigit* digit = (AliACORDEdigit*) adigits->At(idig);
+ Int_t mod = digit->GetModule();
+ Modules[mod-1]=kTRUE;
+ }
+ // 3. Unload digits
+ fLoader->UnloadDigits();
+
+ // 4. Write raw data
+ AliACORDERawData rawdata;
+ rawdata.WriteACORDERawData(Modules,(ndig > 1));
+}
+
+//_____________________________________________________________________________
+Bool_t AliACORDE::Raw2SDigits(AliRawReader* rawReader)
+{
+ //
+ // Reads the raw data stream and exracts the digits
+ //
+ // Input:
+ // rawReader : pointer to the current AliRawReader
+ // Output:
+ //
+ // Created: 31 Jan 2008 Mario Sitta
+ //
+ TStopwatch timer;
+ timer.Start();
+
+ if(!fLoader) {
+ AliError("no ACORDE loader found");
+ return kFALSE;
+ }
+
+ TTree* treeD = fLoader->TreeD();
+ if(!treeD) {
+ fLoader->MakeTree("D");
+ treeD = fLoader->TreeD();
+ }
+
+ AliACORDEdigit digit;
+ AliACORDEdigit* pdigit = &digit;
+ const Int_t kBufferSize = 4000;
+
+ treeD->Branch("ACORDE", "AliACORDEdigit", &pdigit, kBufferSize);
+
+ // rawReader->Reset();
+ AliACORDERawStream* rawStream = new AliACORDERawStream(rawReader);
+
+ if (!rawStream->Next()) return kFALSE; // No ACORDE data found
+ /*
+ for(Int_t i=0; i<64; i++) {
+ new(pdigit) AliACORDEdigit(i, (Int_t)rawStream->GetADC(i), (Int_t)rawStream->GetTime(i));
+ treeD->Fill();
+ }
+ */
+ fLoader->WriteDigits("OVERWRITE");
+ fLoader->UnloadDigits();
+
+ delete rawStream;
+
+ timer.Stop();
+ timer.Print();
+
+ return kTRUE;
+}
+
+//_____________________________________________________________________________