Routing in Bitcoin Lightning Network Here is all we can find in the Lightning Network whitepaper about payment routing process that it is completely unclear to me (at least it is not enough to know what happens exactly at time of finding the best optimized path for a payment between two users):


  "It is theoretically possible to build a route map implicitly from
  observing 2-of-2 multisigs on the blockchain to build a routing table.
  Note, however, this is not feasible with pay-to-script-hash
  transaction outputs, which can be resolved out-of-band from the
  bitcoin protocol via a third party routing service. Building a routing
  table will become necessary for large operators (e.g. BGP, Cjdns).
  Eventually, with optimizations, the network will look a lot like the
  correspondent banking network, or Tier-1 ISPs. Similar to how packets
  still reach their destination on your home network connection, not all
  participants need to have a full routing table. The core Tier-1 routes
  can be online all the time —while nodes at the edges, such as average
  users, would be connected intermittently. Node discovery can occur
  along the edges by pre-selecting and offering partial routes to
  well-known nodes."


I am looking for a document explaining step by step the current routing process used in current Lightning Network to know the steps for finding the best optimized path when user A wants to send an off-chain payment to user B. 

P.S. I know that it is possible to use any other routing algorithm as a plug-in; however, I would like to know the current routing protocol used in the current Lightning Network in details (step by step). I also appreciate it if you could propose a document explaining the current routing algorithm in Lightning Network. Thank you
There's no document explaining step-by-step, because the routing decisions are not part of the protocol (the BOLTs). It is purely client-side decision making about how to find a route through the graph, and any client can choose to implement their own mechanisms. There is no compatibility issues because only the payer makes routing decisions, and intermediate hops merely forward packets as requested.

If you wish to know the specific details of how LND, c-lightning etc implement it, you will need to dig into the code and documentation for those projects.

As far as I'm aware, the current implementations all use a variant of Dijstra's algorithm, or A*, taking the routing fees as the heuristic to minimize when calculating the weights of each path, and c-lightning uses the Bellman-Ford modification in the link above.

Once a path has been calculated by the payer, there is a standard process by which the path and the packets for it are constructed, defined in BOLT#4.