-// Loop over files to merge and to digitize
- fSignal = kTRUE;
- for (Int_t inputFile=0; inputFile<fManager->GetNinputs(); inputFile++) {
- if (GetDebug()>2) cerr<<"AliMUONDigitizerv2::Exec() Input File is "<<inputFile<<endl;
-
-
- // Connect MUON Hit branch
- if (inputFile > 0 ) {
- fSignal = kFALSE;
- runloader = AliRunLoader::GetRunLoader(fManager->GetInputFolderName(inputFile));
- if (runloader == 0x0) {
- cerr<<"AliMUONDigitizerv2::Digitize() RunLoader for inputFile "<<inputFile<< " not found !!! "<<endl;
- }
- gime = runloader->GetLoader("MUONLoader");
- if (gime->TreeS() == 0x0) gime->LoadSDigits("READ");
- muondata->SetLoader(gime);
- muondata->SetTreeAddress("S");
- }
-
- // Setting the address
- TTree *treeS = gime->TreeS();
- if (treeS == 0x0) {
- Error("Digitize","Can not get TreeS from input %d",inputFile);
- Info("Digitize","Now treeS is %#x. MUONLoader is %#x",gime->TreeS(),gime);
- return;
- }
- if (GetDebug()>2) {
- cerr<<"AliMUONDigitizerv2::Exec inputFile is "<<inputFile<<" "<<endl;
- cerr<<"AliMUONDigitizerv2::Exec treeS" << treeS <<endl;
- }
-
- if (GetDebug()>2) cerr<<"AliMUONDigitizerv2::Exec Setting tree addresses"<<endl;
-
- fMask = fManager->GetMask(inputFile);
- //
- // Loop over SDigits
- Int_t ndig,k;
- AliMUONDigit *sDigit;
- TClonesArray * muonSDigits;
- for (Int_t ich = 0; ich < AliMUONConstants::NCh(); ich++) { // loop over chamber
- muondata->ResetSDigits();
- muondata->GetCathodeS(0);
- //TClonesArray *
- muonSDigits = muondata->SDigits(ich);
- ndig = muonSDigits->GetEntriesFast();
-// printf("\n 1 Found %d Sdigits in %p chamber %d", ndig, muonSDigits,ich);
- Int_t n = 0;
- for (k = 0; k < ndig; k++) {
- sDigit = (AliMUONDigit*) muonSDigits->UncheckedAt(k);
- MakeTransientDigitFromSDigit(ich,sDigit);
- }
- muondata->ResetSDigits();
- muondata->GetCathodeS(1);
- //TClonesArray *
- muonSDigits = muondata->SDigits(ich);
- ndig=muonSDigits->GetEntriesFast();
-// printf("\n 2 Found %d Sdigits in %p chamber %d", ndig, muonSDigits,ich);
- n = 0;
- for (k = 0; k < ndig; k++) {
- sDigit = (AliMUONDigit*) muonSDigits->UncheckedAt(k);
- MakeTransientDigitFromSDigit(ich,sDigit);
- }
-
- } // SDigits loop end loop over chamber
- } // end file loop
- if (GetDebug()>2) cerr<<"AliMUONDigitizerv2::Exec End of Sdigits, file loops"<<endl;
-
- // Loop on cathodes
- Int_t icat;
- for(icat=0; icat<2; icat++) {
- //
- // Filling Digit List
- Int_t tracks[kMAXTRACKS];
- Int_t charges[kMAXTRACKS];
- Int_t nentries = fTDList->GetEntriesFast();
- Int_t digits[6];
- for (Int_t nent = 0; nent < nentries; nent++) {
- AliMUONTransientDigit *address = (AliMUONTransientDigit*)fTDList->At(nent);
- if (address == 0) continue;
- Int_t ich = address->Chamber();
- Int_t q = address->Signal();
- chamber = &(pMUON->Chamber(ich));
- //
- // Digit Response (noise, threshold, saturation, ...)
- AliMUONResponse * response = chamber->ResponseModel();
- q = response->DigitResponse(q,address);
-
- if (!q) continue;
-
- digits[0] = address->PadX();
- digits[1] = address->PadY();
- digits[2] = address->Cathode()-1;
- digits[3] = q;
- digits[4] = address->Physics();
- digits[5] = address->Hit();
-
- Int_t nptracks = address->GetNTracks();
-
- if (nptracks > kMAXTRACKS) {
- if (GetDebug() >0) {
- cerr<<"AliMUONDigitizer:Exec nptracks > 10 "<<nptracks;
- cerr<<"reset to max value "<<kMAXTRACKS<<endl;
- }
- nptracks = kMAXTRACKS;
- }
- if (nptracks > 2 && GetDebug() >2) {
- cerr<<"AliMUONDigitizer::Exec nptracks > 2 "<<nptracks<<endl;
- // printf("cat,ich,ix,iy,q %d %d %d %d %d \n",icat,ich,digits[0],digits[1],q);
- }
- for (Int_t tr = 0; tr < nptracks; tr++) {
- tracks[tr] = address->GetTrack(tr);
- charges[tr] = address->GetCharge(tr);
- } //end loop over list of tracks for one pad
- // Sort list of tracks according to charge
- if (nptracks > 1) {
- SortTracks(tracks,charges,nptracks);
- }
- if (nptracks < kMAXTRACKS ) {
- for (Int_t i = nptracks; i < kMAXTRACKS; i++) {
- tracks[i] = -1;
- charges[i] = 0;
- }
- }
-
- // Add digits
- if (GetDebug()>3) cerr<<"AliMUONDigitzerv2::Exec TransientDigit to Digit"<<endl;
- if ( digits[2] == icat ) muondata->AddDigit(ich,tracks,charges,digits);
-// printf("test rm ich %d padX %d padY %d \n",ich, digits[0], digits[1]);
- }
- // Filling list of digits per chamber for a given cathode.
- runloader = AliRunLoader::GetRunLoader(fManager->GetOutputFolderName());
- gime = runloader->GetLoader("MUONLoader");
- muondata->SetLoader(gime);
- muondata->Fill("D");
- muondata->ResetDigits();
- } // end loop cathode
- fTDList->Delete();
-
- for(Int_t ii = 0; ii < 2*AliMUONConstants::NCh(); ++ii) {
- if (fHitMap[ii]) {
- delete fHitMap[ii];
- fHitMap[ii] = 0;
- }
- }
-
- if (GetDebug()>2)
- cerr<<"AliMUONDigitizer::Exec: writing the TreeD: "
- <<treeD->GetName()<<endl;
-
- runloader = AliRunLoader::GetRunLoader(fManager->GetOutputFolderName());
- gime = runloader->GetLoader("MUONLoader");
- gime->WriteDigits("OVERWRITE");
- delete [] fHitMap;
- delete fTDList;
- muondata->ResetSDigits();
- gime->UnloadSDigits();
- gime->UnloadDigits();