ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id */

/// \ingroup macros
/// \file MakeSDigits.C
/// \brief Macro for generation SDigits from raw data for merging 
/// \author Indranil Das, HEP Division, SINP (indra.das@saha.ac.in, indra.ehep@gmail.com)
///
/// Usage : To run this code one should have $ALICE_ROOT/MUON/rootlogon.C 
///         in the current working directory. Then run it from command line as,
/// <pre>aliroot MakeSDigits.C\(\""reconstructed galicefile"\",\""rawdatafile"\",\""OCDB path"\",run-numer\)
///
///        where inputs are : 1. galice file of local reconstruction directory
///                           2. rootified rawdata file of local reconstruction directory.
///                           In case the raw data are ddl files, specify the path which has "raw0", "raw1".... events
///                           3. OCDB path
///                           4. run number
///                           5. switch to merge(true) or not merge(false) trigger digits 
///        and the output is : "MUON.SDigits.root" file with the same tree and event structure as produced in simulation directory
/// </pre>
/// Note:  
/// galice.root and raw.root cannot be a directory read from alien 
/// beacuse "muonLoader->WriteSDigits("OVERWRITE")" tries to write in reconstruction directory,
/// which will fail. For files in alien, make a local copy of the galice and raw.root file, and run the code
/// in that directory.
///
/// Merging Hints :    
/// Follow the merging procedure as specified in the \ref README_sim page, with 
/// <pre>MuonSim.MergeWith("recodir_that_has_MUON.SDigits.root_from_rawdata/galice.root",nofBackground)
/// </pre>
/// in the $ALICE_ROOT/MUON/runSimulation.C

/**********************************************************************
 Created on : 11/01/2010
 Purpose    : To create SDigits from RawData
 Author     : Indranil Das, HEP Division, SINP
 Email      : indra.das@saha.ac.in | indra.ehep@gmail.com
**********************************************************************/


int MakeSDigits(const char* galiceFile="galice.root", const char* rawRootFile="./raw.root", 
		const char* ocdb = "local://$ALICE_ROOT/OCDB", int run=0, bool isMergeTrigger=true)
{
  //TGrid connect for alien ocdb
  TGrid::Connect("alien://");
  
  AliCDBManager *man = AliCDBManager::Instance();
  man->SetDefaultStorage(ocdb);
  man->SetRun(run);
  
  AliMpCDB::LoadDDLStore(true);
  
  AliRawReader *rawReader = AliRawReader::Create(rawRootFile);

  AliRunLoader* runLoader = AliRunLoader::Open(galiceFile);
  AliLoader* muonLoader = runLoader->GetDetectorLoader("MUON");
  
  for(Int_t iEvent=0;iEvent<runLoader->GetNumberOfEvents();iEvent++){
 
    cout<<"Running for Event : "<<iEvent<<endl;
   
    rawReader->NextEvent();
    runLoader->GetEvent(iEvent);
    
    muonLoader->LoadSDigits("update");
    muonLoader->CleanSDigits();
    if (!muonLoader->TreeS()) muonLoader->MakeSDigitsContainer();
    
    TTree* treeS = muonLoader->TreeS();
    
    AliMUONVDigitStore* sDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV2S");
    sDigitStore->Connect(*treeS,true);
    AliMUONDigitMaker *digitMaker = new AliMUONDigitMaker(false);
    
    if(isMergeTrigger){
      AliMUONVTriggerStore* triggerStore = new AliMUONTriggerStoreV1;
      triggerStore->Connect(*treeS,true);
      digitMaker->SetMakeTriggerDigits(true);
      digitMaker->Raw2Digits(rawReader,sDigitStore,triggerStore);
    }else{
      digitMaker->Raw2Digits(rawReader,sDigitStore,0x0);
    }
    
    TIter next(sDigitStore->CreateIterator());
    AliMUONVDigit *mdigit;
    
    while ( (mdigit = reinterpret_cast<AliMUONVDigit *>(next())) ) {
      if(mdigit->DetElemId()<1100){
	mdigit->SetCharge(Float_t(mdigit->ADC()));
	mdigit->SetADC(0);
      }else{
	mdigit->SetCharge(1.0);
      }
      //mdigit->Print();
    }
    treeS->Fill();
   
    muonLoader->WriteSDigits("OVERWRITE");
    
    muonLoader->UnloadSDigits();
    
    if(isMergeTrigger)
      triggerStore->Delete();
    sDigitStore->Delete();
    digitMaker->Delete();
    
  }
  delete runLoader;

  return 0;
 MakeSDigits.C:1
 MakeSDigits.C:2
 MakeSDigits.C:3
 MakeSDigits.C:4
 MakeSDigits.C:5
 MakeSDigits.C:6
 MakeSDigits.C:7
 MakeSDigits.C:8
 MakeSDigits.C:9
 MakeSDigits.C:10
 MakeSDigits.C:11
 MakeSDigits.C:12
 MakeSDigits.C:13
 MakeSDigits.C:14
 MakeSDigits.C:15
 MakeSDigits.C:16
 MakeSDigits.C:17
 MakeSDigits.C:18
 MakeSDigits.C:19
 MakeSDigits.C:20
 MakeSDigits.C:21
 MakeSDigits.C:22
 MakeSDigits.C:23
 MakeSDigits.C:24
 MakeSDigits.C:25
 MakeSDigits.C:26
 MakeSDigits.C:27
 MakeSDigits.C:28
 MakeSDigits.C:29
 MakeSDigits.C:30
 MakeSDigits.C:31
 MakeSDigits.C:32
 MakeSDigits.C:33
 MakeSDigits.C:34
 MakeSDigits.C:35
 MakeSDigits.C:36
 MakeSDigits.C:37
 MakeSDigits.C:38
 MakeSDigits.C:39
 MakeSDigits.C:40
 MakeSDigits.C:41
 MakeSDigits.C:42
 MakeSDigits.C:43
 MakeSDigits.C:44
 MakeSDigits.C:45
 MakeSDigits.C:46
 MakeSDigits.C:47
 MakeSDigits.C:48
 MakeSDigits.C:49
 MakeSDigits.C:50
 MakeSDigits.C:51
 MakeSDigits.C:52
 MakeSDigits.C:53
 MakeSDigits.C:54
 MakeSDigits.C:55
 MakeSDigits.C:56
 MakeSDigits.C:57
 MakeSDigits.C:58
 MakeSDigits.C:59
 MakeSDigits.C:60
 MakeSDigits.C:61
 MakeSDigits.C:62
 MakeSDigits.C:63
 MakeSDigits.C:64
 MakeSDigits.C:65
 MakeSDigits.C:66
 MakeSDigits.C:67
 MakeSDigits.C:68
 MakeSDigits.C:69
 MakeSDigits.C:70
 MakeSDigits.C:71
 MakeSDigits.C:72
 MakeSDigits.C:73
 MakeSDigits.C:74
 MakeSDigits.C:75
 MakeSDigits.C:76
 MakeSDigits.C:77
 MakeSDigits.C:78
 MakeSDigits.C:79
 MakeSDigits.C:80
 MakeSDigits.C:81
 MakeSDigits.C:82
 MakeSDigits.C:83
 MakeSDigits.C:84
 MakeSDigits.C:85
 MakeSDigits.C:86
 MakeSDigits.C:87
 MakeSDigits.C:88
 MakeSDigits.C:89
 MakeSDigits.C:90
 MakeSDigits.C:91
 MakeSDigits.C:92
 MakeSDigits.C:93
 MakeSDigits.C:94
 MakeSDigits.C:95
 MakeSDigits.C:96
 MakeSDigits.C:97
 MakeSDigits.C:98
 MakeSDigits.C:99
 MakeSDigits.C:100
 MakeSDigits.C:101
 MakeSDigits.C:102
 MakeSDigits.C:103
 MakeSDigits.C:104
 MakeSDigits.C:105
 MakeSDigits.C:106
 MakeSDigits.C:107
 MakeSDigits.C:108
 MakeSDigits.C:109
 MakeSDigits.C:110
 MakeSDigits.C:111
 MakeSDigits.C:112
 MakeSDigits.C:113
 MakeSDigits.C:114
 MakeSDigits.C:115
 MakeSDigits.C:116
 MakeSDigits.C:117
 MakeSDigits.C:118
 MakeSDigits.C:119
 MakeSDigits.C:120
 MakeSDigits.C:121
 MakeSDigits.C:122
 MakeSDigits.C:123
 MakeSDigits.C:124
 MakeSDigits.C:125