ROOT logo
#include <iomanip>
void
MakeFakeHits()
{
  if (!gAlice) { 
    std::cerr << "This script must be run in AliROOT" <<std::edl;
    return;
  }
  
  // Initialize 
  gAlice->InitMC("$ALICE_ROOT/FMD/Config.C");

  // Get our detector 
  AliFMD* fmd = gAlice->GetDetector("FMD");
  if (!fmd) { 
    std::cerr << "FMD object not defined" << std::endl;
    return;
  }
  // Get the runloader
  AliRunLoader* runLoader = gAlice->GetRunLoader();
  if (!runLoader) { 
    std::cerr << "No run loader defined" << std::end;
    // return;
  }

  // OCDB manager
  AliCDBManager* cdb = AliCDBManager::Instance();
  cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB")
  cdb->SetRunNumber(0)

  // Geometry database 
  AliFMDGeometry* geom = AliFMDGeometry::Instance();
  geom->Init();
  geom->InitTransformations();

  // Parameter database 
  // AliFMDParameters* param = AliFMDParameters::Instance();
  // param->Init(kFALSE, AliFMDParameters::kAltroMap);
  AliFMDAltroMapping map;

  // Monte-carlo application
  AliMC* mc = gAlice->GetMCApp();
  if (!mc) { 
    std::cerr << "No MC application defined" << std::endl;
    return;
  }

  // Make primaries - one for each strip
  mc->BeginEvent();
  Int_t ntr = 0;
  for (size_t i = 0; i < 51200; i++) {
    mc->PushTrack(1, -1, 211, 
		  0, 0, 0, 0, 
		  0, 0, 0, 0, 
		  0, 0, 0, 
		  kPPrimary, ntr);
    // std::cout << "Made track # " << ntr << std::endl;
  }

  // Make hits
  ntr = 0;
  for (UShort_t d = 1; d <= 3; d++) { 
    UShort_t nrng = (d == 1 ? 1 : 2);
    for (UShort_t ir = 0; ir < nrng; ir++) { 
      Char_t   r    = (ir == 0 ? 'I' : 'O');
      UShort_t nsec = (ir == 0 ?  20 :  40);
      UShort_t nstr = (ir == 0 ? 512 : 256);
      for (UShort_t s = 0; s < nsec; s++) { 
	for (UShort_t t = 0; t < nstr; t++) { 
	  mc->BeginPrimary();
	  
	  Double_t x, y, z;
	  geom->Detector2XYZ(d, r, s, t, x, y, z);
	  UInt_t ddl, board, altro, channel;
	  UShort_t timebin;
	  map.Detector2Hardware(d, r, s, t, 0, 0, 1, 
				ddl, board, altro, channel, timebin);
	  Float_t e = Float_t(s) / nsec + Float_t(t)/(100*nstr);
	  e = Float_t(timebin % 64) / 64 * 1.5;

	  std::cout << "FMD" << d << r << "[" << std::setfill('0') 
		    << std::setw(2) << s << "," << std::setw(3) << t 
		    << "] " << std::setfill(' ')
		    << std::setw(4) << timebin << " ("
		    << std::setw(10) << x << "," 
		    << std::setw(10) << y << "," 
		    << std::setw(10) << z << ") -> " 
		    << std::setw(10) << e << "\t\r"
		    << std::flush;
	  fmd->AddHitByFields(ntr,     // Int_t    track, 		
			      d,       // UShort_t detector, 	
			      r,       // Char_t   ring, 		
			      s,       // UShort_t sector, 	
			      t,       // UShort_t strip, 		
			      x,       // Float_t  x=0,		
			      y,       // Float_t  y=0, 		
			      z,       // Float_t  z=0,		
			      0,       // Float_t  px=0, 		
			      0,       // Float_t  py=0, 		
			      0,       // Float_t  pz=0,		
			      e,       // Float_t  edep=0,		
			      211,     // Int_t    pdg=0,		
			      0,       // Float_t  t=0, 			
			      0.03);   // Float_t  len=0, 		
	  mc->FinishPrimary();	       
	  ntr++;		      
	} // Strip
      } // Sector
      std::cout << std::endl;
    } // Ring 
  } // Detector

  // End of event.
  mc->FinishEvent();
  
  // End of run
  gAlice->FinishRun();
  gGeoManager->Export("geometry.root");
  
}

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