class_docstr: This class uses a convolutional model to learn coil sensitivity maps for multi-coil MRI reconstruction.
  The convolutional model is :py:class:`monai.apps.reconstruction.networks.nets.complex_unet` by default
  but can be specified by the user as well. Learning is done on the center of the under-sampled
  kspace (that region is fully sampled).
  
  The data being a (complex) 2-channel tensor is a requirement for using this model.
  
  Modified and adopted from: https://github.com/facebookresearch/fastMRI
  
  Args:
      spatial_dims: number of spatial dimensions.
      features: six integers as numbers of features. denotes number of channels in each layer.
      act: activation type and arguments. Defaults to LeakyReLU.
      norm: feature normalization type and arguments. Defaults to instance norm.
      bias: whether to have a bias term in convolution blocks. Defaults to True.
      dropout: dropout ratio. Defaults to 0.0.
      upsample: upsampling mode, available options are
          ``"deconv"``, ``"pixelshuffle"``, ``"nontrainable"``.
      coil_dim: coil dimension in the data
      conv_net: the learning model used to estimate the coil sensitivity maps. default
          is :py:class:`monai.apps.reconstruction.networks.nets.complex_unet`. The only
          requirement on the model is to have 2 as input and output number of channels.
code: def __init__(
      self,
      spatial_dims: int = 2,
      features: Sequence[int] = (32, 32, 64, 128, 256, 32),
      act: str
      | tuple = ("LeakyReLU", {"negative_slope": 0.1, "inplace": True}),
      norm: str | tuple = ("instance", {"affine": True}),
      bias: bool = True,
      dropout: float | tuple = 0.0,
      upsample: str = "deconv",
      coil_dim: int = 1,
      conv_net: nn.Module | None = None,
  ):
      super().__init__()
      if conv_net is None:
          self.conv_net = ComplexUnet(
              spatial_dims=spatial_dims,
              features=features,
              act=act,
              norm=norm,
              bias=bias,
              dropout=dropout,
              upsample=upsample,
          )
      else:
          # assume the first layer is convolutional and
          # check whether in_channels == 2
          params = [p.shape for p in conv_net.parameters()]
          if params[0][1] != 2:
              raise ValueError(
                  f"in_channels should be 2 but it's {params[0][1]}."
              )
          self.conv_net = conv_net  # type: ignore
      self.spatial_dims = spatial_dims
      self.coil_dim = coil_dim
  
file_path: MONAI/monai/apps/reconstruction/networks/nets/coil_sensitivity_model.py
imports: from __future__ import annotations
  from collections.abc import Sequence
  import torch
  import torch.nn
  from torch import Tensor
  from monai.apps.reconstruction.mri_utils import root_sum_of_squares_t
  from monai.apps.reconstruction.networks.nets.complex_unet import ComplexUnet
  from monai.apps.reconstruction.networks.nets.utils import reshape_batch_channel_to_channel_dim, reshape_channel_to_batch_dim
  from monai.networks.blocks.fft_utils_t import ifftn_centered_t
label_desc: Use image node_id 1 to create a new CoilSensitivityModel object from inherited base classes: nn with example: obj = CoilSensitivityModel(spatial_dims, features, act, norm, bias, dropout, upsample, coil_dim, conv_net)